eda課程設(shè)計(jì)報(bào)告--數(shù)字鐘_第1頁
已閱讀1頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目 錄</b></p><p>  摘要………………………………………………………………………2</p><p>  1設(shè)計(jì)目的……………………………………………………………… 2</p><p>  2設(shè)計(jì)內(nèi)容 …………………………………………………………… 2</p><p>  

2、2.1設(shè)計(jì)任務(wù)……………………………………………………………2</p><p>  2.2擴(kuò)展 ……………………………………………………………2</p><p>  3系統(tǒng)方案及設(shè)計(jì)原理 ……………………………………………… 3</p><p>  3.1方案選擇 ………………………………………………………… 3</p><p>  3

3、.2數(shù)字鐘的基本工作原理 ………………………………………………3</p><p>  3.3底層元件接口……………………………………………………… 4</p><p>  3.4數(shù)字鐘設(shè)計(jì)的RTL電路…………………………………………… 5</p><p>  4設(shè)計(jì)步驟 ………………………………………………………………5</p><p>  

4、5心得體會………………………………………………………………10</p><p>  6 程序代碼 ………………………………………………………… 10</p><p><b>  摘要:</b></p><p>  人類社會已進(jìn)入到高度發(fā)達(dá)的信息化社會。信息化社會的發(fā)展離不開電子信息產(chǎn)品開發(fā)技術(shù)、產(chǎn)品品質(zhì)的提高和進(jìn)步。電子信息產(chǎn)品隨著科學(xué)技術(shù)的

5、進(jìn)步,其電子器件和設(shè)計(jì)方法更新?lián)Q代的速度日新月異。實(shí)現(xiàn)這種進(jìn)步的主要原因就是電子設(shè)計(jì)技術(shù)和電子制造技術(shù)的發(fā)展,其核心就是電子設(shè)計(jì)自動化(EDA,Electronics Design Automation)技術(shù),EDA技術(shù)的發(fā)展和推廣應(yīng)用又極大地推動了電子信息產(chǎn)業(yè)的發(fā)展。為保證電子系統(tǒng)設(shè)計(jì)的速度和質(zhì)量,適應(yīng)“第一時(shí)間推出產(chǎn)品”的設(shè)計(jì)要求,EDA技術(shù)正逐漸成為不可缺少的一項(xiàng)先進(jìn)技術(shù)和重要工具。目前,在國內(nèi)電子技術(shù)教學(xué)和產(chǎn)

6、業(yè)界的技術(shù)推廣中已形成“EDA熱”,完全可以說,掌握EDA技術(shù)是電子信息類專業(yè)學(xué)生、工程技術(shù)人員所必備的基本能力和技能。 </p><p>  EDA技術(shù)在電子系統(tǒng)設(shè)計(jì)領(lǐng)域越來越普及,本設(shè)計(jì)主要利用VHDL語言在EDA平臺上設(shè)計(jì)一個電子數(shù)字鐘,它的計(jì)時(shí)為24小時(shí)小時(shí)制,顯示滿刻度為23時(shí)59分59秒,另外還具有校時(shí)功能和鬧鐘功能??偟某绦蛴蓭讉€各具不同功能的單元模塊程序拼接而成,其中包括分頻程序模塊、時(shí)

7、分秒計(jì)數(shù)和校時(shí)程序模塊、數(shù)據(jù)選擇器程序模塊、顯示程序模塊和例化程序模塊。并且使用QUARTUS  II軟件進(jìn)行電路波形仿真,下載到EDA實(shí)驗(yàn)箱進(jìn)行驗(yàn)證。</p><p>  關(guān)鍵詞:數(shù)字鐘 EDA VHDL語言 </p><p><b>  一、設(shè)計(jì)目的</b></p><p>  1、熟練地運(yùn)用數(shù)字系統(tǒng)的設(shè)計(jì)方法進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)

8、;</p><p>  2、能進(jìn)行較復(fù)雜的數(shù)字系統(tǒng)設(shè)計(jì);</p><p>  3、按要求設(shè)計(jì)一個數(shù)字鐘。</p><p><b>  二、設(shè)計(jì)內(nèi)容</b></p><p>  2.1、設(shè)計(jì)任務(wù):設(shè)計(jì)一臺能顯示時(shí)、分、秒的數(shù)字鐘。具體要求如下:</p><p>  由實(shí)驗(yàn)箱上的時(shí)鐘信號經(jīng)分頻產(chǎn)生秒脈

9、沖;</p><p>  計(jì)時(shí)計(jì)數(shù)器用24進(jìn)制計(jì)時(shí)電路;</p><p>  可手動校時(shí),能分別進(jìn)行時(shí)、分的校正;</p><p><b>  整點(diǎn)報(bào)時(shí);</b></p><p>  2.2、擴(kuò)展:設(shè)置鬧時(shí)功能,當(dāng)計(jì)時(shí)計(jì)到預(yù)定時(shí)間時(shí),揚(yáng)聲器發(fā)出鬧鈴信號,鬧鈴時(shí)間為4s,并可提前終止鬧鈴。</p><p

10、>  三、系統(tǒng)方案及設(shè)計(jì)原理。</p><p><b>  3.1、方案選擇:</b></p><p>  數(shù)字鐘無非就是分頻計(jì)數(shù),設(shè)計(jì)出60進(jìn)制,24進(jìn)制計(jì)數(shù)器,在這里,秒分計(jì)數(shù)是60進(jìn)制,時(shí)計(jì)數(shù)是24進(jìn)制,對1Hz信號進(jìn)行60分頻也就產(chǎn)生了分計(jì)數(shù)脈沖,對1Hz進(jìn)行60 * 60 分頻(對分60分頻)也就產(chǎn)生了時(shí)計(jì)數(shù)脈沖,為了方便校時(shí),系統(tǒng)設(shè)計(jì)時(shí)未直接采用實(shí)驗(yàn)

11、箱上的1Hz作為基準(zhǔn)時(shí)鐘源,而是對65536Hz進(jìn)行32768分頻產(chǎn)生秒脈沖,8192分頻作為校時(shí)與鬧鐘時(shí)間設(shè)置脈沖,為方便調(diào)鬧鐘,采用了數(shù)據(jù)選擇器選擇輸出正常走時(shí)或鬧鐘時(shí)間。為節(jié)省代碼,數(shù)碼管譯碼工作直接交給了實(shí)驗(yàn)箱自帶的譯碼器,選擇工作模式0。</p><p>  3.2、數(shù)字鐘的基本工作原理:</p><p>  數(shù)字鐘以其顯示時(shí)間的直觀性、走時(shí)準(zhǔn)確性作為一種計(jì)時(shí)工具,數(shù)字鐘的基本組

12、成部分離不開計(jì)數(shù)器,在控制邏輯電路的控制下完成預(yù)定的各項(xiàng)功能。數(shù)字鐘的基本原理方框圖如圖1:</p><p><b>  1Hz</b></p><p><b>  5HZ</b></p><p>  圖1 數(shù)字鐘的系統(tǒng)框圖</p><p>  圖3.1數(shù)字鐘實(shí)現(xiàn)原理框圖</p>&

13、lt;p>  該系統(tǒng)由振蕩器、分頻器、“時(shí)、分、秒”計(jì)數(shù)器、譯碼器及顯示器、校時(shí)電路、整點(diǎn)報(bào)時(shí)電路等組成。石英晶體振蕩器和分頻器產(chǎn)生整個系統(tǒng)的時(shí)基信號,它直接決定計(jì)時(shí)系統(tǒng)的精度?!懊胗?jì)數(shù)器”采用六十進(jìn)制計(jì)數(shù)器,每累計(jì)60秒向“分計(jì)數(shù)器”進(jìn)位;“分計(jì)數(shù)器”采用六十進(jìn)制計(jì)數(shù)器,每累計(jì)60分向“時(shí)計(jì)數(shù)器”進(jìn)位;“時(shí)計(jì)數(shù)器”采用二十四進(jìn)制計(jì)數(shù)器,按照“24翻1”規(guī)律計(jì)數(shù)?!皶r(shí)、分、秒”計(jì)數(shù)器的輸出經(jīng)譯碼器送顯示器顯示。校時(shí)電路用來當(dāng)計(jì)時(shí)出

14、現(xiàn)誤差時(shí)對“時(shí)、分、秒”進(jìn)行校對調(diào)整。整點(diǎn)報(bào)時(shí)(鬧鐘)電路是根據(jù)計(jì)時(shí)系統(tǒng)的輸出狀態(tài)產(chǎn)生一脈沖信號,然后去觸發(fā)音頻發(fā)生器實(shí)現(xiàn)報(bào)時(shí)(鬧鈴)。</p><p>  3.3、底層元件接口:</p><p>  component hour </p><p>  port(rst,carry,en : in std_logic;</p><p>  A

15、DJclk,ADJEN : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  decade,unit : out std_logic_vector(3 downto 0));</p><p>  end component;</p>

16、<p>  component min</p><p>  port(rst,carry,en : in std_logic;</p><p>  ADJclk,ADJEN : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p&

17、gt;<p>  carryout : out std_logic;</p><p>  decade,unit : out std_logic_vector(3 downto 0));</p><p>  end component;</p><p>  component sec</p><p>

18、;  port(rst,clk,en : in std_logic;</p><p>  ADJEN : in std_logic;</p><p>  carryout : out std_logic;</p><p>  decade,unit : out std_logic_vector(3 downto 0));&l

19、t;/p><p>  end component;</p><p>  component alarm</p><p>  port(clk,en,ADJclk : in std_logic;</p><p>  alarmADJ : in std_logic;</p><p

20、>  AlarmEn : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  hour_unit : in std_logic_vector(3 downto 0);</p>

21、<p>  hour_decade : in std_logic_vector(3 downto 0);</p><p>  min_unit : in std_logic_vector(3 downto 0);</p><p>  min_decade : in std_logic_vec

22、tor(3 downto 0);</p><p>  ADJhour_unit : out std_logic_vector(3 downto 0);</p><p>  ADJhour_decade : out std_logic_vector(3 downto 0);</p><p>  ADJmin_unit

23、 : out std_logic_vector(3 downto 0);</p><p>  ADJmin_decade : out std_logic_vector(3 downto 0);</p><p>  sound : out std_logic);</p><p>  end

24、component;</p><p>  component PrescalClk </p><p>  port(clkin : in std_logic;</p><p>  clkout_1Hz : out std_logic;</p><p>  clkout_4Hz : out

25、std_logic);</p><p>  end component;</p><p>  3.4、數(shù)字鐘設(shè)計(jì)的RTL電路:</p><p><b>  圖2</b></p><p>  從RTL電路中可以看到,通過綜合后系統(tǒng)模塊劃分為分頻模塊、秒計(jì)數(shù)模塊、分計(jì)數(shù)模塊、時(shí)計(jì)數(shù)模塊、鬧鐘模塊,數(shù)據(jù)選擇輸出模塊,由于系統(tǒng)設(shè)

26、計(jì)時(shí)硬件平臺選用的是模式0,顯示部由硬件譯碼。分頻模塊產(chǎn)生正常走時(shí)的1Hz頻率與校時(shí)用的5Hz頻率,時(shí)分秒計(jì)數(shù)都可有外部按鍵清零,時(shí)分可分別進(jìn)行校時(shí),鬧鐘模塊可根據(jù)需要設(shè)置鬧鈴時(shí)間,輸出部分采用了數(shù)據(jù)選擇器,用于選擇輸出正常走時(shí)或鬧鐘設(shè)置時(shí)間。</p><p><b>  四、設(shè)計(jì)步驟</b></p><p>  步驟1:輸入設(shè)計(jì)項(xiàng)目和存盤</p>&l

27、t;p>  打開QUARTUSII,單擊“file”菜單,將鼠標(biāo)移到New Project Wizard 選項(xiàng)單擊則顯示如圖3 </p><p>  圖3 建立 New Project</p><p>  在第一欄選擇或?qū)懭牍こ涛募?,第二、三欄中建立?xiàng)目名和實(shí)體名,工程文件不能包含中文字符,項(xiàng)目名和實(shí)體必須保持一致,然后選擇目標(biāo)器件如圖4</p><p>&

28、lt;b>  圖4選擇沒標(biāo)器件</b></p><p>  目標(biāo)器件一定要與實(shí)際所用器件一致,最后點(diǎn)擊finish完成彈出圖5</p><p>  圖5建立VHDL文件</p><p>  步驟2:輸入程序并運(yùn)行編譯;</p><p>  在工具欄中點(diǎn)擊file→new,選擇VHDL File,點(diǎn)擊確定建立VHDL文件,在里

29、面鍵入程序,如圖6 </p><p><b>  圖6 輸入程序</b></p><p>  輸入完程序以后點(diǎn)擊工具欄中的保存,再點(diǎn)擊右方一個紫色的三角符號“”,然后運(yùn)行程序,如果程序出現(xiàn)錯誤在改正。編譯通過后如圖7</p><p><b>  7 通過編譯</b></p><p><b>

30、;  步驟3:時(shí)序仿真:</b></p><p>  1.建立波形文件:選擇File->New,在Other File里選擇Vector Waveform File,單擊OK建立波形文件,在Edit->End Time選項(xiàng)中為仿真設(shè)置仿真時(shí)間。雙擊Name下的空白處,彈出Insert Nod or Bus對話框,單擊Node Finder如圖7</p><p>  

31、圖7 選擇添加結(jié)點(diǎn)設(shè)置</p><p>  在圖8所示選定各個選擇項(xiàng)。</p><p><b>  圖8 選擇結(jié)點(diǎn)</b></p><p>  單擊OK,完成引腳輸入,加上輸入信號后波形文件存盤。</p><p>  2.運(yùn)行仿真器。在Processing菜單下選擇StartSimulation項(xiàng),直到Simulator

32、 was successful出現(xiàn),仿真結(jié)束。完成波形如圖9所示。</p><p><b>  圖9 仿真波形圖</b></p><p><b>  步驟4:引腳鎖定</b></p><p>  選擇AssignmentsAssignments Editor,鎖定引腳,輸入以后如下圖,設(shè)定完成以后再運(yùn)行一次程序。</

33、p><p><b>  圖10 引腳鎖定</b></p><p><b>  步驟5:編程下載:</b></p><p>  1)首先將下載線把計(jì)算機(jī)的打印機(jī)口與目標(biāo)板(如開發(fā)板或?qū)嶒?yàn)板)連接好,打開電源</p><p>  2)下載方式設(shè)定。選擇ToolsProgrammer選項(xiàng),跳出下圖左側(cè)所示的編

34、程器窗口,然后選擇Hardware Setup硬件設(shè)置選項(xiàng),其窗口圖中左側(cè)所示。在其下拉菜單中選ByteBlaster(MV)編程方式,在Model欄選定JTAG模式。然后點(diǎn)擊start按鈕下載,進(jìn)入下載模式,等待下載完成以后在試驗(yàn)箱上進(jìn)行調(diào)試檢測是否正確。</p><p><b>  五、心得體會</b></p><p>  經(jīng)過兩周EDA課程設(shè)計(jì),使我受益匪淺。這

35、不僅增強(qiáng)了我對EDA設(shè)計(jì)的興趣,更鞏固了基本的電路設(shè)計(jì)流程、方法以及技巧。具備了這些基本知識,為今后的自主學(xué)習(xí)奠定了良好的基礎(chǔ)。在編寫時(shí)可以相互借鑒,這樣可以節(jié)省一定的時(shí)間,但在一個問題上糾結(jié)了很久,現(xiàn)還未明白,為什么一個變量在進(jìn)程中只能被一個邊沿信號觸發(fā)進(jìn)行修改,無奈之下選擇了另一種方法,通過一個控制端來進(jìn)行選頻,以實(shí)現(xiàn)快速調(diào)時(shí),在鬧鐘的處理上使用了數(shù)據(jù)選擇,設(shè)置鬧鈴時(shí)數(shù)碼管顯示鬧鐘時(shí)間。</p><p>  

36、在設(shè)計(jì)中還是需要注意一些常見的問題,比如實(shí)體名、項(xiàng)目名等,還有在編寫VHDL文件時(shí),一些文件名也是需要注意的;在編寫程序的過程中,信號與變量的使用是一個特需要注意的,進(jìn)程中一個信號不應(yīng)有多個復(fù)制源,信號的復(fù)值是在進(jìn)程結(jié)束之時(shí),而變量的復(fù)值是立即的,在書寫時(shí)容易出錯的地方是,信號的賦值與變量的賦值符號,信號作為全局的聯(lián)絡(luò)線,信號往往不允許在多個進(jìn)程中被賦值,因?yàn)檫M(jìn)程之間是并行的;整個系統(tǒng)是由多個底層元件組成,底層元件之間的相互連接是通過信

37、號實(shí)現(xiàn)。</p><p>  由于時(shí)間比較緊,在準(zhǔn)備智能車比賽,就沒有挑戰(zhàn)難度高點(diǎn)的題了,但本人對FPGA是挺感興趣的,在今后的學(xué)習(xí)中我會把握時(shí)間好好學(xué)學(xué)。</p><p>  最后感謝姚老師對我們的指導(dǎo),使得實(shí)驗(yàn)?zāi)軌蝽樌瓿桑?lt;/p><p><b>  六、程序代碼:</b></p><p><b>  1

38、分頻:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity PrescalClk is</p><p> 

39、 port(clkin : in std_logic;</p><p>  clkout_1Hz : out std_logic;</p><p>  clkout_4Hz : out std_logic);</p><p><b>  end ;</b></p><p&

40、gt;  Architecture bhv of PrescalClk is</p><p><b>  begin </b></p><p>  process(clkin)</p><p>  variable count1 : integer range 0 to 32768;</p><p>  variable

41、 count2 : integer range 0 to 8192;</p><p><b>  begin </b></p><p>  if clkin 'event and clkin='1' then count1 := count1+1;count2:=count2+1;</p><p>  if(count1

42、=32768) then clkout_1Hz<='1' ;</p><p>  else clkout_1Hz<='0';</p><p><b>  end if;</b></p><p>  if(count2=8192) then clkout_4Hz<='1';<

43、/p><p>  else clkout_4Hz<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p><b>  end;

44、</b></p><p><b>  2時(shí)計(jì)數(shù)模塊</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>

45、;  entity hour is</p><p>  port(rst,carry,en : in std_logic;</p><p>  ADJclk,ADJEN : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  d

46、ecade,unit : out std_logic_vector(3 downto 0));</p><p><b>  end ;</b></p><p>  architecture bhv of hour is</p><p>  signal clk : std_logic;</p><p>

47、<b>  begin</b></p><p>  process(carry,ADJ,ADJEN,ADJclk)</p><p><b>  begin</b></p><p>  if (ADJEN='1' and ADJ="1100" )then clk<=ADJclk;&l

48、t;/p><p>  else clk<=carry;</p><p><b>  end if;</b></p><p>  end process;</p><p>  process(rst,en,clk)</p><p>  variable unitcount : std_logi

49、c_vector(3 downto 0);</p><p>  variable decadecount : std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  if (rst='1') then unitcount:="0000";

50、decadecount:="0000";</p><p>  elsif(en='1') then </p><p>  if clk 'event and clk='1' then</p><p>  if(unitcount<10) then unitcount:=unitcount+1;<

51、;/p><p>  else unitcount:="0000";</p><p><b>  end if;</b></p><p>  if(unitcount=10) then decadecount:=decadecount+1;unitcount:="0000";</p><p&

52、gt;<b>  end if;</b></p><p>  if(decadecount=2 and unitcount=4) then unitcount:="0000";decadecount:="0000";</p><p><b>  end if;</b></p><p>

53、;<b>  end if;</b></p><p><b>  end if;</b></p><p>  decade<=decadecount;</p><p>  unit<=unitcount;</p><p>  end process;</p><p&g

54、t;<b>  end;</b></p><p><b>  3分計(jì)數(shù)模塊:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;&l

55、t;/p><p>  entity min is</p><p>  port(rst,carry,en : in std_logic;</p><p>  ADJclk,ADJEN : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0)

56、;</p><p>  carryout : out std_logic;</p><p>  decade,unit : out std_logic_vector(3 downto 0));</p><p><b>  end ;</b></p><p>  architecture bh

57、v of min is</p><p>  signal clk : std_logic;</p><p><b>  begin</b></p><p>  process(carry,ADJ,ADJEN,ADJclk)</p><p><b>  begin</b><

58、/p><p>  if (ADJEN='1' and ADJ="0011" )then clk<=ADJclk;</p><p>  else clk<=carry;</p><p><b>  end if;</b></p><p>  end process;</p&

59、gt;<p>  process(rst,en,clk,ADJEN)</p><p>  variable unitcount : std_logic_vector(3 downto 0);</p><p>  variable decadecount : std_logic_vector(3 downto 0);</p><p><b>

60、;  begin</b></p><p>  if (rst='1') then unitcount:="0000";decadecount:="0000";</p><p>  elsif(en='1') then </p><p>  if (clk 'event and

61、 clk='1')then</p><p>  if(unitcount<10) then unitcount:=unitcount+1;</p><p>  else unitcount:="0000";</p><p><b>  end if;</b></p><p> 

62、 if(unitcount=10) then decadecount:=decadecount+1; unitcount:="0000";</p><p><b>  end if;</b></p><p>  if(decadecount=6 and unitcount=0) then unitcount:="0000";de

63、cadecount:="0000";</p><p>  if ADJEN='0' then carryout<='1'; -- when ADJEN=1,donot generate carry</p><p>  else carryout<='0';</p><p>

64、;<b>  end if;</b></p><p>  else carryout<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;&

65、lt;/b></p><p>  decade<=decadecount;</p><p>  unit<=unitcount;</p><p>  end process;</p><p><b>  end;</b></p><p><b>  4秒計(jì)數(shù)模塊:<

66、;/b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity sec is</p><p>  port(rst,clk

67、,en : in std_logic;</p><p>  ADJEN : in std_logic;</p><p>  carryout : out std_logic;</p><p>  decade,unit : out std_logic_vector(3 downto 0));</

68、p><p><b>  end ;</b></p><p>  architecture bhv of sec is</p><p><b>  begin</b></p><p>  process(rst,en,clk)</p><p>  variable unitcoun

69、t : std_logic_vector(3 downto 0);</p><p>  variable decadecount : std_logic_vector(3 downto 0);</p><p><b>  begin</b></p><p>  if (rst='1') then unitcount:=&qu

70、ot;0000";decadecount:="0000";</p><p>  elsif(en='1') then</p><p>  if clk'event and clk='1'then</p><p>  if(unitcount<10) then unitcount:=uni

71、tcount+1;</p><p>  else unitcount:="0000";</p><p><b>  end if;</b></p><p>  if(unitcount=10) then decadecount:=decadecount+1; unitcount:="0000";</

72、p><p><b>  end if;</b></p><p>  if(decadecount=6 and unitcount=0) </p><p>  then unitcount:="0000";decadecount:="0000";</p><p>  if(ADJEN=&

73、#39;0') then carryout<='1'; -- when ADJEN=1, donot generate carry</p><p>  else carryout<='0';</p><p><b>  end if;</b></p><p>  else c

74、arryout<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  decade<=decadecount;<

75、;/p><p>  unit<=unitcount;</p><p>  end process;</p><p><b>  end;</b></p><p><b>  5鬧鐘模塊:</b></p><p>  library ieee;</p><

76、p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity alarm is</p><p>  port(clk,en,ADJclk : in std_logic;</p><p>  al

77、armADJ : in std_logic;</p><p>  AlarmEn : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  hour_unit

78、 : in std_logic_vector(3 downto 0);</p><p>  hour_decade : in std_logic_vector(3 downto 0);</p><p>  min_unit : in std_logic_vector(3 downto 0);</p>

79、<p>  min_decade : in std_logic_vector(3 downto 0);</p><p>  ADJhour_unit : out std_logic_vector(3 downto 0);</p><p>  ADJhour_decade : out std_logic_ve

80、ctor(3 downto 0);</p><p>  ADJmin_unit : out std_logic_vector(3 downto 0);</p><p>  ADJmin_decade : out std_logic_vector(3 downto 0);</p><p>  sound

81、 : out std_logic);</p><p><b>  end;</b></p><p>  architecture bhv of alarm is</p><p>  signal hour1,hour2,min1,min2 : std_logic_vector(3 downto 0);</p>

82、<p><b>  begin</b></p><p>  process(en,alarmADJ,ADJ,ADJclk)</p><p>  variable hour_decadecounnt,hour_unitcount,min_decadecount,min_unitcount : std_logic_vector(3 downto 0);<

83、/p><p><b>  begin </b></p><p>  if (en='1' and alarmADJ='1') then </p><p>  if ADJclk 'event and ADJclk='1' then </p><p>  if ADJ=&

84、quot;1100" then</p><p>  if(hour_unitcount<10) then hour_unitcount:=hour_unitcount+1;</p><p>  else hour_unitcount:="0000";</p><p><b>  end if;</b><

85、;/p><p>  if(hour_unitcount=10) then hour_decadecounnt:=hour_decadecounnt+1;hour_unitcount:="0000";</p><p><b>  end if;</b></p><p>  if(hour_decadecounnt=2 and ho

86、ur_unitcount=4) then hour_decadecounnt:="0000";hour_unitcount:="0000";</p><p><b>  end if;</b></p><p>  elsif ADJ="0011" then </p><p>  if

87、(min_unitcount<10) then min_unitcount:=min_unitcount+1;</p><p>  else min_unitcount:="0000";</p><p><b>  end if;</b></p><p>  if(min_unitcount=10) then min

88、_decadecount:=min_decadecount+1;min_unitcount:="0000";</p><p><b>  end if;</b></p><p>  if(min_decadecount=6 and min_unitcount=0) then min_decadecount:="0000";min

89、_unitcount:="0000";</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p><p><b>  end if;</

90、b></p><p>  hour1<=hour_decadecounnt;</p><p>  hour2<=hour_unitcount;</p><p>  min1<=min_decadecount;</p><p>  min2<=min_unitcount;</p><p> 

91、 end process;</p><p>  process(en,AlarmEn,ADJclk,clk,hour_unit,hour_decade,min_unit,min_decade,hour1,hour2,min1,min2)</p><p>  variable count : std_logic_vector(3 downto 0);</p><p>

92、<b>  begin</b></p><p>  if(en='1' and AlarmEn='1') then </p><p>  if(hour_unit=hour2 and hour_decade=hour1 and min_unit=min2 and min_decade=min1) then</p><

93、p>  if clk 'event and clk='1' then </p><p>  if (count<10) then count:=count+1;</p><p>  else sound<='0';</p><p><b>  end if;</b></

94、p><p><b>  end if;</b></p><p>  if(count<10) then sound<= ADJclk;</p><p><b>  end if;</b></p><p>  else count:="0000";sound <=&

95、#39;0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  ADJhour_decade<=hour1;</p><p>  ADJhour_unit<=hour2;</p><p

96、>  ADJmin_decade<=min1;</p><p>  ADJmin_unit<=min2;</p><p>  end process;</p><p><b>  end;</b></p><p><b>  6頂層文件;</b></p><p&

97、gt;  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity DigitalClock is</p><p>  port(clk,en,rst : in std_log

98、ic;</p><p>  ADJEN : in std_logic;</p><p>  AlarmEn : in std_logic;</p><p>  alarmADJ : in std_logic;</p><p>  ADJ : in std_logic_

99、vector(3 downto 0);</p><p>  sound : out std_logic;</p><p>  hour_unit : out std_logic_vector(3 downto 0);</p><p>  hour_decade : out std_logic_vector(3 downto 0);</p>

100、<p>  min_unit : out std_logic_vector(3 downto 0);</p><p>  min_decade : out std_logic_vector(3 downto 0);</p><p>  sec_unit : out std_logic_vector(3 downto 0);</p><p>

101、;  sec_decade : out std_logic_vector(3 downto 0);</p><p>  dote1 : out std_logic_vector(3 downto 0);</p><p>  dote2 : out std_logic_vector(3 downto 0));</p><p><b>

102、;  end ;</b></p><p>  architecture bhv of DigitalClock is</p><p>  component hour </p><p>  port(rst,carry,en : in std_logic;</p><p>  ADJclk,ADJEN : in std_log

103、ic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  decade,unit : out std_logic_vector(3 downto 0));</p><p>  end component;</p><p>  component min

104、</p><p>  port(rst,carry,en : in std_logic;</p><p>  ADJclk,ADJEN : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  carryout

105、 : out std_logic;</p><p>  decade,unit : out std_logic_vector(3 downto 0));</p><p>  end component;</p><p>  component sec</p><p>  port(rst,clk,en : in st

106、d_logic;</p><p>  ADJEN : in std_logic;</p><p>  carryout : out std_logic;</p><p>  decade,unit : out std_logic_vector(3 downto 0));</p><p>  end c

107、omponent;</p><p>  component alarm</p><p>  port(clk,en,ADJclk : in std_logic;</p><p>  alarmADJ : in std_logic;</p><p>  AlarmEn

108、 : in std_logic;</p><p>  ADJ : in std_logic_vector(3 downto 0);</p><p>  hour_unit : in std_logic_vector(3 downto 0);</p><p>  hour_decade

109、 : in std_logic_vector(3 downto 0);</p><p>  min_unit : in std_logic_vector(3 downto 0);</p><p>  min_decade : in std_logic_vector(3 downto 0);</p>

110、<p>  ADJhour_unit : out std_logic_vector(3 downto 0);</p><p>  ADJhour_decade : out std_logic_vector(3 downto 0);</p><p>  ADJmin_unit : out std_logic_

111、vector(3 downto 0);</p><p>  ADJmin_decade : out std_logic_vector(3 downto 0);</p><p>  sound : out std_logic);</p><p>  end component;</p><

112、p>  component PrescalClk </p><p>  port(clkin : in std_logic;</p><p>  clkout_1Hz : out std_logic;</p><p>  clkout_4Hz : out std_logic);</p><

113、;p>  end component;</p><p>  signal carry1,carry2,clk_1Hz,clk_4Hz : std_logic;</p><p>  signal hour1,hour2,min1,min2 ,ADJhour1,ADJhour2,ADJmin1,ADJmin2 : std_logic_vector(3 downto 0);</p&g

114、t;<p><b>  begin</b></p><p>  U1 : hour port map(rst=>rst,ADJclk=>clk_4Hz,en=>en,carry=>carry1,ADJEN=>ADJEN,ADJ=>ADJ,decade=>hour1,unit=>hour2);</p><p>

115、;  U2 : min port map(rst=>rst,ADJclk=>clk_4Hz,en=>en,carry=>carry2,carryout=>carry1,ADJEN=>ADJEN,ADJ=>ADJ,decade=>min1,unit=>min2);</p><p>  U3 : sec port map(rst=>rst,clk=>

116、;clk_1Hz,en=>en,carryout=>carry2,decade=>sec_decade,unit=>sec_unit,ADJEN=>ADJEN);</p><p>  U4 : alarm port map(clk=>clk_1Hz,en=>en,ADJclk=>clk_4Hz,alarmADJ=>alarmADJ,AlarmEn=>Al

117、armEn,ADJ=>ADJ,</p><p>  hour_unit=>hour2,hour_decade=>hour1,min_unit=>min2,min_decade=>min1,</p><p>  ADJhour_decade=>ADJhour1,ADJhour_unit=>ADJhour2,ADJmin_decade=>ADJm

118、in1,ADJmin_unit=>ADJmin2 ,sound=>sound);</p><p>  U5 : PrescalClk port map(clkin=>clk,clkout_1Hz=>clk_1Hz,clkout_4Hz=>clk_4Hz);</p><p>  process(hour1,hour2,min1,min2,alarmADJ,ADJ

119、hour1,ADJhour2,ADJmin1,ADJmin2)</p><p><b>  begin</b></p><p>  if(alarmADJ='0') then</p><p>  hour_decade<=hour1;</p><p>  hour_unit<=hour2;&l

120、t;/p><p>  min_decade<=min1;</p><p>  min_unit<=min2;</p><p><b>  else</b></p><p>  hour_decade<=ADJhour1;</p><p>  hour_unit<=ADJhour

121、2;</p><p>  min_decade<=ADJmin1;</p><p>  min_unit<=ADJmin2;</p><p><b>  end if;</b></p><p>  dote1<="1010";</p><p>  dote2&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論