版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計</b></p><p> 名稱 基于FPGA的數(shù)字鐘設(shè)計</p><p> 姓名 </p><p> 專業(yè)班級 通信工程(1)班</p><p> 學院 信息與機電工程學院 </p><p>
2、; 完成日期 2017年6月</p><p><b> 摘 要</b></p><p> VHDL是一種用形式化方法來描述數(shù)字化電路和設(shè)計數(shù)字邏輯系統(tǒng)的語言,設(shè)計者可以利用這種語言來描述自己的設(shè)計思想,然后利用電子設(shè)計自動化工具進行仿真,再自動綜合到門級電路,最后用PLD實現(xiàn)其功能。與傳統(tǒng)設(shè)計方法相比,VHDL描述電路行為的算法設(shè)計層次較高、用于較復(fù)雜的計算時
3、,能盡早發(fā)現(xiàn)存在的問題,縮短設(shè)計周期,可獨立實現(xiàn),修改方便,系統(tǒng)硬件描述能力強,語言標準、規(guī)范、移植性強,是多層次的硬件描述語言具有很好的實用。</p><p> 本文是基于VHDL語言的簡易電子數(shù)字鐘的設(shè)計。設(shè)計主要是由數(shù)碼管結(jié)合按鍵來顯示相應(yīng)的時間,可以對時、分進行單獨校時,使其顯示標準時間,并且具有設(shè)置鬧鐘以及整點半點報時的功能??偟某绦蛴蓭讉€各具不同功能的單元模塊組,其中包括分頻模塊、時分秒計數(shù)和設(shè)置模
4、塊、比較器模塊、譯碼顯示等模塊。</p><p> 關(guān)鍵詞:數(shù)字鐘、VHDL、狀態(tài)機</p><p><b> 一、緒論</b></p><p><b> 1.1 前言</b></p><p> 隨著生產(chǎn)和科學技術(shù)發(fā)展的需要,現(xiàn)在電子技術(shù)的應(yīng)用已經(jīng)滲透到了人類生活和生產(chǎn)的各個方面,有力地推動
5、了社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。</p><p> 在這個生活節(jié)奏飛快的社會,時間概念對人們來說尤為重要。在我們現(xiàn)代的生活中,早已離不開鐘表的身影。原始的機械鐘只能實現(xiàn)走時報時的功能早已不能滿足人們的需求。數(shù)字鐘是一種數(shù)字電路實現(xiàn)時、分、秒計時的裝置,通過計時精度很高的石英晶振,采用相應(yīng)進制的計數(shù)器,轉(zhuǎn)化為二進制數(shù),通過譯碼和顯示電路準
6、確的將時間“時”“分”“秒”用數(shù)字的方式顯示出來。與傳統(tǒng)的機械時鐘相比具有更高的準確性與直觀性,且無機械裝置,具有更高的使用壽命。</p><p> 鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地擴展了鐘表原先的報時功能。諸如定時自動報警、按時自動打鈴、時間程序自動控制、定時廣播、定時啟閉電路、定時開關(guān)烘箱、通斷動力設(shè)備,甚至各種定時電氣的自動啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘
7、及擴大其應(yīng)用,有著非?,F(xiàn)實的意義。</p><p><b> FPGA概述</b></p><p><b> FPGA簡介</b></p><p> FPGA是英文Field-Programmable Gate Array的縮寫,即現(xiàn)場可編程門陣列,是由存放在片內(nèi)RAM中的程序來設(shè)置其工作狀態(tài)的,因此,工作時需要對片
8、內(nèi)的RAM進行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。加電時,F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當需要修改FPGA功能時,只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,
9、FPGA的使用非常靈活。 FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對其編程。</p><p> 1.2.2用FPGA設(shè)計數(shù)字鐘的優(yōu)點</p><p> FPGA的邏輯功能全部用硬件電路實現(xiàn),內(nèi)部有豐富的觸發(fā)器和I/O
10、引腳,是ASIC電路中設(shè)計周期最短、開發(fā)費用最低、風險最小的器件之一,并且FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。因此,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。使用FPGA 可以實現(xiàn)你想實現(xiàn)的任何數(shù)字電路,可以定制各種電路,減少受制于專用芯片的束縛,在設(shè)計過程中可以靈活的更改設(shè)計。因此,利用FPGA 設(shè)計數(shù)字鐘更加靈活方便。</p><p> 1.3硬件描述
11、語言VHDL</p><p> VHDL,即超高速集成電路硬件描述語言,是最早被接納為IEEE標準的硬件描述語言。它是一種多層次的硬件描述語言,覆蓋面廣,描述能力強,具有良好的可讀性,既可以被計算機接受,也容易被理解。因為VHDL的硬件描述與工藝技術(shù)無關(guān),因此其本身的生命期長,工藝改變時,只需修改相應(yīng)程序中的屬性參數(shù)即可,VHDL支持大規(guī)模設(shè)計的分解與已有設(shè)計的再利用,事實上已經(jīng)成為通用硬件描述語言。</
12、p><p> 1.4 QuartusⅡ軟件</p><p> QuartusⅡ是Altera公司推出的新一代FPGA/CPLD開發(fā)軟件,適合于大規(guī)模復(fù)雜的邏輯電路設(shè)計。它是Altera公司的第四代可編程邏輯器件集成開發(fā)環(huán)境,提供了從設(shè)計輸入到器件編程的全部功能,同低三代設(shè)計工具MAXPLUS Ⅱ相比,QuartusⅡ設(shè)計軟件增加了網(wǎng)絡(luò)編輯功能,提升了調(diào)試能力,解決了潛在的設(shè)計延遲,同時其強
13、大的設(shè)計能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設(shè)計者的歡迎。</p><p> 二、數(shù)字鐘總體設(shè)計方案</p><p><b> 2.1總體結(jié)構(gòu)</b></p><p><b> 圖 1 系統(tǒng)結(jié)構(gòu)圖</b></p><p><b> 2.2 設(shè)計思路</b></
14、p><p> 數(shù)字鐘的設(shè)計模塊包括:分頻器、“時、分、秒”計數(shù)器、設(shè)置時間模塊、設(shè)置鬧鐘、比較模塊、選擇模塊、控制模塊和譯碼顯示電路。每一個功能模塊作為一個實體單獨進行設(shè)計,最后再將各個模塊的原理圖連接起來。</p><p> ?。?)開關(guān)EN(SW0)控制數(shù)碼管顯示,SW0關(guān)閉時顯示學號,打開后24h計時制計時并顯示。</p><p> ?。?)校時以及設(shè)置鬧鐘:按
15、下TIMESET鍵開始設(shè)置時間,按下SHIFT鍵表示移位,按下ADD鍵對應(yīng)數(shù)字加一,再次按下TIMESET鍵回到走時狀態(tài)。分鐘和時鐘校準時,下方LED發(fā)光表示提示。</p><p> ?。?)鬧鐘:鬧鐘定時時間到,對應(yīng)LED閃爍,持續(xù)60s。</p><p> ?。?)整點、半點報時:當分鐘時間為00或30 時,對應(yīng)不同的LED發(fā)光。</p><p> ?。?)顯示
16、: 6個LED數(shù)碼管顯示小時、分、秒。</p><p><b> 2.4 RTL圖</b></p><p><b> 圖2 系統(tǒng)RTL圖</b></p><p> 三、數(shù)字鐘各功能模塊介紹</p><p><b> 3.1 分頻模塊</b></p>&l
17、t;p> 3.1.1引腳說明及功能介紹</p><p> 圖3 分頻模塊bdf圖 </p><p> 表1 分頻模塊引腳說明</p><p> 3.1.2核心源代碼及解釋</p><p> PROCESS(CLK,EN)</p><p> VARIABLE TEMP1 : INTEGER RANGE
18、 24999999 DOWNTO 0;</p><p> VARIABLE TEMP50 : INTEGER RANGE 499999 DOWNTO 0;</p><p><b> BEGIN </b></p><p> IF EN='1' THEN </p><p> IF CLK'E
19、VENT AND CLK='1'THEN </p><p> IF TEMP1=24999999 THEN TEMP1:=0;Q1<=NOT Q1;</p><p> ELSE TEMP1:=TEMP1+1;</p><p><b> END IF;</b></p><p> IF TE
20、MP50=499999 THEN TEMP50:=0;Q50<=NOT Q50;</p><p> ELSE TEMP50:=TEMP50+1; ---通過計數(shù)將較高頻率的時鐘分頻,得到得到較低頻率的時鐘信號</p><p><b> END IF;</b></p><p><b> END IF;</b>
21、</p><p><b> ELSE </b></p><p> TEMP1:=0;Q1<='0';</p><p> TEMP50:=0;Q50<='0';</p><p><b> END IF;</b></p><p>
22、; END PROCESS;</p><p> PROCESS(QUICK)</p><p><b> BEGIN</b></p><p> IF QUICK='0' THEN CLK_OUT1OR50<=Q1;---通過按鍵選擇輸出的頻率</p><p> ELSE CLK_OUT1
23、OR50<=Q50;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> 3.2 控制模塊</b></p><p> 3.2.1引腳說明及功能介紹</p><p> 圖4 控制模塊bdf圖&l
24、t;/p><p> 表2 控制模塊引腳說明</p><p> 3.2.2部分源代碼及解釋</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p>
25、<p> ENTITY COUTROL IS</p><p> PORT ( ALARM,EN:IN STD_LOGIC;</p><p> COUT:OUT STD_LOGIC_VECTOR(1 DOWNTO 0)</p><p><b> );</b></p><p> END ENTITY;
26、</p><p> ARCHITECTURE ONE OF COUTROL IS</p><p> SIGNAL TEMP1:STD_LOGIC:='0'; ——設(shè)置變量TEMP1表示KEY0的狀態(tài)</p><p><b> BEGIN </b></p><p> PROCESS(ALARM)
27、</p><p><b> BEGIN</b></p><p> IF ALARM'EVENT AND ALARM='1' THEN </p><p> TEMP1<=NOT TEMP1; </p><p><b> END IF;</b></p>
28、<p> END PROCESS;</p><p> PROCESS(TEMP1) ——TEMP1=0時,輸出狀態(tài)為計時(01);TEMP1=1 </p><p> BEGIN時,輸出狀態(tài)為鬧鐘設(shè)置(10)</p><p> IF TEMP1<='0' THEN </p><
29、;p> COUT<="01";</p><p> ELSE COUT<="10";</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ONE;</p&g
30、t;<p> 3.3 時、分、秒模塊</p><p> 3.3.1 引腳說明及功能介紹</p><p> 圖5 秒模塊bdf圖 圖6 分模塊bdf圖 圖7 時模塊bdf圖</p><p> 表3 時/分/秒模塊引腳說明</p><p> 3.3.2部分源代碼及解釋&l
31、t;/p><p><b> 以秒鐘模塊為例:</b></p><p> ARCHITECTURE ONE OF SEC IS</p><p> SIGNAL S0,S1:STD_LOGIC_VECTOR(3 DOWNTO 0);--定義兩個變量表示秒鐘高位和低位</p><p><b> BEGIN<
32、/b></p><p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF CLK'EVENT AND CLK='1' THEN</p><p><b> S0<=S0+1;</b></p>&l
33、t;p> IF S0=9 THEN S0<=(OTHERS=>'0');</p><p><b> S1<=S1+1;</b></p><p><b> END IF;</b></p><p> IF S1=5 AND S0=9 THEN </p><p&
34、gt; S1<="0000";S0<="0000";COUT<='1';</p><p> ELSE COUT<='0'; --60進制計數(shù)器,即滿六十則賦0且進位信號加一</p><p><b> END IF;</b></p><p&
35、gt;<b> END IF;</b></p><p> END PROCESS;</p><p> SEC0<=S0;SEC1<=S1;</p><p><b> END;</b></p><p> 3.4 設(shè)置時間模塊</p><p> 3.4.1
36、 引腳說明及功能介紹</p><p> 圖8 設(shè)置時間模塊bdf圖</p><p> 表4 設(shè)置時間模塊引腳說明</p><p> 3.4.2部分源代碼及解釋</p><p> ARCHITECTURE BEHAV OF ST IS</p><p> SIGNAL TEMP1: STD_LOGIC_VECT
37、OR (1 DOWNTO 0):="00";--表示SHIFT按鍵按下產(chǎn)生的三種不同狀態(tài)</p><p> SIGNAL TEMP2: STD_LOGIC:='0'; --檢測TIMESET是否按下的變量</p><p><b> BEGIN</b></p><p> PROCESS(SHIFT,ADD
38、)</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> IF TIMESET'EVENT AND TIMESET='1' THEN </p><p> TEMP2<=NOT TEMP2;</p>
39、<p><b> END IF;</b></p><p> IF TEMP2='1' THEN </p><p> IF SHIFT'EVENT AND SHIFT='1' THEN </p><p> TEMP1<=TEMP1+1;</p><p>&
40、lt;b> END IF;</b></p><p><b> ELSE </b></p><p> TEMP1<="00"; </p><p><b> END IF;</b></p><p><b> END IF;</b&g
41、t;</p><p> CASE TEMP1 IS</p><p> WHEN "00"=>CO1<=SEC;CO2<=MIN; --shift鍵沒有按下,屬于走時狀態(tài) </p><p> LED13<='0';LED16<='0';</p><p>
42、 WHEN "01"=>CO1<=ADD;CO2<='0'; --shift按下一次,分鐘可設(shè)置</p><p> LED13<='1';LED16<='0';</p><p> WHEN "10"=>CO1<='0';CO2<=
43、ADD; -- shift按下兩次,時鐘可設(shè)置 </p><p> LED13<='0';LED16<='1'; </p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p> E
44、ND PROCESS;</p><p><b> END;</b></p><p> 3.5 設(shè)置鬧鐘模塊</p><p> 3.5.1 引腳說明及功能介紹</p><p> 圖9 設(shè)置鬧鐘模塊bdf圖</p><p> 表5 時/分/秒模塊引腳說明</p><p&
45、gt; 3.5.2部分源代碼及解釋</p><p> ARCHITECTURE BEHAV OF SA IS</p><p> SIGNAL TEMP1: STD_LOGIC:='0'; --表示SHIFT鍵是否按下的變量</p><p> SIGNAL TEMP2: STD_LOGIC:='0';--表示CLOCKSET鍵是
46、否按下的變量</p><p><b> BEGIN</b></p><p> PROCESS(SHIFT,ADD)</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> IF CLOCKSE
47、T'EVENT AND CLOCKSET='1' THEN </p><p> TEMP2<=NOT TEMP2;</p><p><b> END IF;</b></p><p> IF TEMP2='1' THEN </p><p> IF SHIFT'E
48、VENT AND SHIFT='1' THEN </p><p> TEMP1<=NOT TEMP1;</p><p><b> END IF;</b></p><p><b> ELSE </b></p><p> TEMP1<='0'; &l
49、t;/p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> IF TEMP2='1' THEN </p><p> CASE TEMP1 IS</p><p> WHEN '0'
50、=>CO1<=ADD;CO2<='0'; --分鐘可設(shè)置</p><p> LED14<='1';LED17<='0';</p><p> WHEN '1'=>CO1<='0';CO2<=ADD; --時鐘可設(shè)置</p><p>
51、LED14<='0';LED17<='1'; </p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p> END
52、 PROCESS;</p><p><b> END;</b></p><p> 3.6 比較鬧鐘模塊</p><p> 3.6.1 引腳說明及功能介紹</p><p> 圖10 鬧鐘比較模塊</p><p> 表6 比較鬧鐘模塊引腳說明</p><p> 3.
53、6.2部分源代碼及解釋</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY COMPARE IS</p><p> PORT
54、 ( TH1,TH0,TM1,TM0,SAH1,SAH0,SAM1,SAM0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> LED:OUT STD_LOGIC</p><p><b> );</b></p><p> END ENTITY;</p><p> ARCHITEC
55、TURE BAHAV OF COMPARE IS</p><p><b> BEGIN</b></p><p> PROCESS(TH1,TH0,TM1,TM0,SAH1,SAH0,SAM1,SAM0)</p><p> BEGIN——時間顯示與設(shè)置的鬧鐘時間相等時,LED燈亮</p><p> IF TH
56、1=SAH1 AND TH0=SAH0 AND TM1=SAM1 AND TM0=SAM0 THEN </p><p><b> LED<='1';</b></p><p> ELSE LED<='0';</p><p><b> END IF;</b></p>
57、<p> END PROCESS;</p><p> END ARCHITECTURE;</p><p><b> 3.7 選擇模塊</b></p><p> 3.7.1 引腳說明及功能介紹</p><p> 圖11選擇模塊bdf圖</p><p> 表7 選擇模塊引腳
58、說明</p><p> 3.7.2部分源代碼及解釋</p><p> ARCHITECTURE BAHAV OF CHOOSE IS</p><p><b> BEGIN</b></p><p> PROCESS(CONTROL)</p><p><b> BEGIN</
59、b></p><p> CASE CONTROL IS </p><p> WHEN "01"=>HOUR1<=TH1;HOUR0<=TH0;MIN1<=TM1;MIN0<=TM0;SEC1<=TS1;SEC0<=TS0; --當control為01時,顯示正常走時以及設(shè)置時鐘的時間</p><p&
60、gt; WHEN "10"=>HOUR1<=SAH1;HOUR0<=SAH0;MIN1<=SAM1;MIN0<=SAM0;SEC1<="1111";SEC0<="1111";--當control為10時,時、分顯示設(shè)置鬧鐘的時間,秒鐘不顯示</p><p> WHEN OTHERS=>HOUR1<
61、=TH1;HOUR0<=TH0;MIN1<=TM1;MIN0<=TM0;SEC1<=TS1;SEC0<=TS0; </p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE;</p><p>&
62、lt;b> 3.8 譯碼模塊</b></p><p> 3.8.1 引腳說明及功能介紹</p><p><b> 圖12 譯碼模塊</b></p><p> 表8 譯碼模塊引腳說明</p><p> 3.8.2部分源代碼及解釋</p><p> ARCHITECTUR
63、E BAHAV OF DISPLAY IS</p><p> SIGNAL REG7_0: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_1: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_2: STD_LOGIC_VECTOR(6 DOWNTO
64、 0);</p><p> SIGNAL REG7_3: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_4: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_5: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><
65、;p> SIGNAL REG7_6: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_7: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_8: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7
66、_9: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_NULL: STD_LOGIC_VECTOR(6 DOWNTO 0);-- --定義10個信號表示數(shù)字0~9</p><p> SIGNAL LEDX:STD_LOGIC;</p><p><b> BEGIN</b></p
67、><p> REG7_0<="1000000";</p><p> REG7_1<="1111001";</p><p> REG7_2<="0100100";</p><p> REG7_3<="0110000";</p>
68、<p> REG7_4<="0011001";</p><p> REG7_5<="0010010";</p><p> REG7_6<="0000010";</p><p> REG7_7<="1111000";</p>&l
69、t;p> REG7_8<="0000000";</p><p> REG7_9<="0010000";</p><p> REG7_NULL<="1111111";</p><p> PROCESS(H1,EN)--小時高位譯碼,初始為1</p><
70、p><b> BEGIN</b></p><p> IF EN='1' THEN</p><p> CASE H1 IS</p><p> WHEN "0000"=>HOUR1<=REG7_0;</p><p> WHEN "0001"=
71、>HOUR1<=REG7_1;</p><p> WHEN "0010"=>HOUR1<=REG7_2;</p><p> WHEN "0011"=>HOUR1<=REG7_3;</p><p> WHEN "0100"=>HOUR1<=REG7_4;&
72、lt;/p><p> WHEN "0101"=>HOUR1<=REG7_5;</p><p> WHEN "0110"=>HOUR1<=REG7_6;</p><p> WHEN "0111"=>HOUR1<=REG7_7;</p><p>
73、WHEN "1000"=>HOUR1<=REG7_8;</p><p> WHEN "1001"=>HOUR1<=REG7_9;</p><p> WHEN OTHERS=>HOUR1<=REG7_NULL;</p><p><b> END CASE;</b>&
74、lt;/p><p><b> ELSE </b></p><p> HOUR1<=REG7_1;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(H0,EN)--小時低位譯碼,初始
75、為5</p><p><b> BEGIN</b></p><p> IF EN='1' THEN</p><p> CASE H0 IS</p><p> WHEN "0000"=>HOUR0<=REG7_0;</p><p> WHEN
76、 "0001"=>HOUR0<=REG7_1;</p><p> WHEN "0010"=>HOUR0<=REG7_2;</p><p> WHEN "0011"=>HOUR0<=REG7_3;</p><p> WHEN "0100"=>
77、HOUR0<=REG7_4;</p><p> WHEN "0101"=>HOUR0<=REG7_5;</p><p> WHEN "0110"=>HOUR0<=REG7_6;</p><p> WHEN "0111"=>HOUR0<=REG7_7;</
78、p><p> WHEN "1000"=>HOUR0<=REG7_8;</p><p> WHEN "1001"=>HOUR0<=REG7_9;</p><p> WHEN OTHERS=>HOUR0<=REG7_NULL;</p><p><b> EN
79、D CASE;</b></p><p><b> ELSE </b></p><p> HOUR0<=REG7_5;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(M
80、1,EN)--分鐘高位譯碼,初始為3</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE M1 IS</p><p> WHEN "0000"=>MIN1<=REG7_0;</p&g
81、t;<p> WHEN "0001"=>MIN1<=REG7_1;</p><p> WHEN "0010"=>MIN1<=REG7_2;</p><p> WHEN "0011"=>MIN1<=REG7_3;</p><p> WHEN "
82、;0100"=>MIN1<=REG7_4;</p><p> WHEN "0101"=>MIN1<=REG7_5;</p><p> WHEN "0110"=>MIN1<=REG7_6;</p><p> WHEN "0111"=>MIN1<=
83、REG7_7;</p><p> WHEN "1000"=>MIN1<=REG7_8;</p><p> WHEN "1001"=>MIN1<=REG7_9;</p><p> WHEN OTHERS=>MIN1<=REG7_NULL;</p><p><
84、b> END CASE;</b></p><p><b> ELSE</b></p><p> MIN1<=REG7_3;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PR
85、OCESS(M0,EN)--分鐘低位譯碼,初始為8</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE M0 IS</p><p> WHEN "0000"=>MIN0<=REG7_0;&
86、lt;/p><p> WHEN "0001"=>MIN0<=REG7_1;</p><p> WHEN "0010"=>MIN0<=REG7_2;</p><p> WHEN "0011"=>MIN0<=REG7_3;</p><p> WHE
87、N "0100"=>MIN0<=REG7_4;</p><p> WHEN "0101"=>MIN0<=REG7_5;</p><p> WHEN "0110"=>MIN0<=REG7_6;</p><p> WHEN "0111"=>MI
88、N0<=REG7_7;</p><p> WHEN "1000"=>MIN0<=REG7_8;</p><p> WHEN "1001"=>MIN0<=REG7_9;</p><p> WHEN OTHERS=>MIN0<=REG7_NULL;</p><p&
89、gt;<b> END CASE;</b></p><p><b> ELSE</b></p><p> MIN0<=REG7_8;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p&
90、gt; PROCESS(S1,EN)--秒鐘高位譯碼,初始為4</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE S1 IS</p><p> WHEN "0000"=>SEC1<=R
91、EG7_0;</p><p> WHEN "0001"=>SEC1<=REG7_1;</p><p> WHEN "0010"=>SEC1<=REG7_2;</p><p> WHEN "0011"=>SEC1<=REG7_3;</p><p&g
92、t; WHEN "0100"=>SEC1<=REG7_4;</p><p> WHEN "0101"=>SEC1<=REG7_5;</p><p> WHEN "0110"=>SEC1<=REG7_6;</p><p> WHEN "0111"
93、=>SEC1<=REG7_7;</p><p> WHEN "1000"=>SEC1<=REG7_8;</p><p> WHEN "1001"=>SEC1<=REG7_9;</p><p> WHEN OTHERS=> SEC1<=REG7_NULL;</p>
94、<p><b> END CASE;</b></p><p><b> ELSE </b></p><p> SEC1<=REG7_4;</p><p><b> END IF;</b></p><p> END PROCESS;</p>
95、;<p> PROCESS(S0,EN)--秒鐘低位譯碼,初始為5</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE S0 IS</p><p> WHEN "0000"=>S
96、EC0<=REG7_0;</p><p> WHEN "0001"=>SEC0<=REG7_1;</p><p> WHEN "0010"=>SEC0<=REG7_2;</p><p> WHEN "0011"=>SEC0<=REG7_3;</p>
97、<p> WHEN "0100"=>SEC0<=REG7_4;</p><p> WHEN "0101"=>SEC0<=REG7_5;</p><p> WHEN "0110"=>SEC0<=REG7_6;</p><p> WHEN "0
98、111"=>SEC0<=REG7_7;</p><p> WHEN "1000"=>SEC0<=REG7_8;</p><p> WHEN "1001"=>SEC0<=REG7_9;</p><p> WHEN OTHERS=> SEC0<=REG7_NULL;&
99、lt;/p><p><b> END CASE;</b></p><p><b> ELSE</b></p><p> SEC0<=REG7_5;</p><p><b> END IF;</b></p><p> END PROCESS;&
100、lt;/p><p> END ARCHITECTURE;</p><p><b> 3.9 報時模塊</b></p><p> 3.9.1 引腳說明及功能介紹</p><p> 圖13報時模塊bdf圖</p><p> 表7 報時模塊引腳說明</p><p> 3.
101、9.2部分源代碼及解釋</p><p> ARCHITECTURE BEHAV OF TIMER IS</p><p><b> BEGIN</b></p><p> PROCESS(M0,M1)</p><p><b> BEGIN</b></p><p> IF
102、 M0="0000" AND M1="0000" THEN --分鐘為00即整點時,燈LEDR1 </p><p> LEDR1<=CLK;閃爍提示</p><p> ELSE LEDR1<='0';</p><p><b> END IF;</b>&
103、lt;/p><p> IF M0="0000" AND M1="0011" THEN ----分鐘為30即半點時,燈LEDR0</p><p> LEDR0<=CLK;閃爍提示</p><p> ELSE LEDR0<='0';</p><p><
104、b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p><b> 四、設(shè)計結(jié)果圖示</b></p><p><b> EN=0,顯示學號</b></p>&l
105、t;p> 圖13 顯示學號153845</p><p> EN=1,初始狀態(tài),開始計時。</p><p> 圖14 初始狀態(tài),開始計時</p><p> 按下TIMESET鍵(kye3), 開始設(shè)置時間,再次按下表示設(shè)置結(jié)束;按下SHIFT鍵(key2),進行小時和分鐘的移位,從高向低,同時指示燈亮;按下ADD鍵(key1),對應(yīng)數(shù)字加一。<
106、/p><p> 圖15 設(shè)置分鐘,ledr13燈亮</p><p> 圖16 設(shè)置小時,ledr16燈亮</p><p> 按下ALARMSET鍵(KEY3),開始設(shè)置鬧鐘,再次按下表示設(shè)置結(jié)束;按下SHIFT鍵(KEY2),進行小時和分鐘的移位,從高向低;按下ADD鍵(KEY1),設(shè)置鬧鐘的每一位數(shù)字:0~9</p><p> 圖1
107、7 設(shè)置鬧鐘時間</p><p> 圖18 鬧鐘提醒,ledg2燈亮</p><p> 整點報時、半點報時,LED燈閃爍。</p><p> 圖19 整點報時,ledr2燈亮</p><p> 圖20 半點報時,ledr1燈亮</p><p><b> 五、結(jié)論</b></
108、p><p> 5.1遇到的問題和改進</p><p><b> ?。?)問題1:</b></p><p> 在設(shè)置時間的時候,按下TIMESET鍵之后開始設(shè)置時間,再次按下TIMESET 鍵回到走時狀態(tài),顯示的時間仍為未設(shè)置前的時間,即設(shè)置的時間并不會反饋到走時狀態(tài)。</p><p> 解決辦法:在設(shè)置時間模塊以及走時
109、模塊之間增加聯(lián)系,即將走時模塊的進位輸出作為設(shè)置時間的輸入,設(shè)置時間模塊輸出信號作為時、分模塊的clk。</p><p> ?。?)問題2: 已經(jīng)設(shè)置完時間之后再設(shè)置鬧鐘時間的時候,按下ADD鍵,對鬧鐘時間的小時和分鐘位進行調(diào)整后,發(fā)現(xiàn)計時狀態(tài)下的小時和分鐘位也被進行了相應(yīng)的調(diào)整,不能完成設(shè)置鬧鐘時間和正常計時的功能。</p><p> 解決辦法:增加設(shè)置時的限制條件,如只有在TIMES
110、ET按鍵按下的情況下才能更改走時時間。 </p><p><b> 5.2工作分配比例</b></p><p><b> 六、附錄</b></p><p><b> 6.1分頻模塊</b></p><p> LIBRARY IEEE;</p><p&
111、gt; USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY FD IS</p><p> PORT (CLK,EN,QUICK:IN STD_LOGIC;</p><p> CLK_OUT1OR50:OUT ST
112、D_LOGIC);</p><p> END ENTITY FD;</p><p> ARCHITECTURE BAHAV OF FD IS</p><p> SIGNAL Q1,Q50:STD_LOGIC;</p><p><b> BEGIN</b></p><p> PROCESS
113、(CLK,EN)</p><p> VARIABLE TEMP1 : INTEGER RANGE 24999999 DOWNTO 0;</p><p> VARIABLE TEMP50 : INTEGER RANGE 499999 DOWNTO 0;</p><p> --VARIABLE TEMP2: INTEGER RANGE 12499999 DOWNT
114、O 0;</p><p><b> BEGIN </b></p><p> IF EN='1' THEN </p><p> IF CLK'EVENT AND CLK='1'THEN </p><p> IF TEMP1=24999999 THEN TEMP1:=0;Q
115、1<=NOT Q1;</p><p> ELSE TEMP1:=TEMP1+1;</p><p><b> END IF;</b></p><p> IF TEMP50=499999 THEN TEMP50:=0;Q50<=NOT Q50;</p><p> ELSE TEMP50:=TEMP50
116、+1;</p><p><b> END IF;</b></p><p> --IF TEMP2=12499999 THEN TEMP2:=0;Q2<=NOT Q2;</p><p> --ELSE TEMP2:=TEMP2+1;</p><p> --END IF;</p&g
117、t;<p><b> END IF;</b></p><p><b> ELSE </b></p><p> TEMP1:=0;Q1<='0';</p><p> TEMP50:=0;Q50<='0';</p><p> --T
118、EMP2:=0;Q2<='0';</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(QUICK)</p><p><b> BEGIN</b></p><p> IF
119、 QUICK='0' THEN CLK_OUT1OR50<=Q1;</p><p> ELSE CLK_OUT1OR50<=Q50;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> --CLK_OUT2<=Q2;
120、</p><p> END ARCHITECTURE;</p><p><b> 6.2控制模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UN
121、SIGNED.ALL;</p><p> ENTITY COUTROL IS</p><p> PORT ( ALARM,EN:IN STD_LOGIC;</p><p> COUT:OUT STD_LOGIC_VECTOR(1 DOWNTO 0)</p><p><b> );</b></p>&
122、lt;p> END ENTITY;</p><p> ARCHITECTURE ONE OF COUTROL IS</p><p> SIGNAL TEMP1:STD_LOGIC:='0';</p><p><b> BEGIN </b></p><p> PROCESS(ALARM)&
123、lt;/p><p><b> BEGIN</b></p><p> IF ALARM'EVENT AND ALARM='1' THEN </p><p> TEMP1<=NOT TEMP1; </p><p><b> END IF;</b></p>
124、<p> END PROCESS;</p><p> PROCESS(TEMP1)</p><p><b> BEGIN</b></p><p> IF TEMP1<='0' THEN </p><p> COUT<="01";</p>&
125、lt;p> ELSE COUT<="10";</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ONE;</p><p><b> 6.3秒模塊</b></
126、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(CLK:IN STD_LOGIC;&l
127、t;/p><p> SEC0,SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> COUT:OUT STD_LOGIC);</p><p><b> END SEC;</b></p><p> ARCHITECTURE ONE OF SEC IS</p>&l
128、t;p> SIGNAL S0,S1:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF CLK'EVENT
129、AND CLK='1' THEN</p><p><b> S0<=S0+1;</b></p><p> IF S0=9 THEN S0<=(OTHERS=>'0');</p><p><b> S1<=S1+1;</b></p><p>
130、;<b> END IF;</b></p><p> IF S1=5 AND S0=9 THEN </p><p> S1<="0000";S0<="0000";COUT<='1';</p><p> ELSE COUT<='0';</
131、p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> SEC0<=S0;SEC1<=S1;</p><p><b> END;</b>
132、;</p><p><b> 6.4分模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY
133、 MIN IS</p><p> PORT(CLK:IN STD_LOGIC;</p><p> MIN0,MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> COUT:OUT STD_LOGIC);</p><p><b> END MIN;</b></p>
134、;<p> ARCHITECTURE ONE OF MIN IS</p><p> SIGNAL M0,M1:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(CLK)</p><p><b> B
135、EGIN</b></p><p> IF CLK'EVENT AND CLK='1' THEN</p><p><b> M0<=M0+1;</b></p><p> IF M0=9 THEN M0<=(OTHERS=>'0');</p><p>
136、;<b> M1<=M1+1;</b></p><p><b> END IF;</b></p><p> IF M1=5 AND M0=9 THEN </p><p> M1<="0000";M0<="0000";COUT<='1';
137、</p><p> ELSE COUT<='0';</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> MIN0<=M0;MIN
138、1<=M1;</p><p><b> END;</b></p><p><b> 6.5時模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEE
139、E.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY HOUR IS</p><p> PORT(CLK:IN STD_LOGIC;</p><p> HOUR0,HOUR1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> COUT:OUT STD_LOGIC);&l
140、t;/p><p><b> END HOUR;</b></p><p> ARCHITECTURE ONE OF HOUR IS</p><p> SIGNAL H0,H1:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p>
141、;<p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF CLK'EVENT AND CLK='1' THEN</p><p><b> H0<=H0+1;</b></p><p> IF H0=
142、9 THEN H0<=(OTHERS=>'0');</p><p><b> H1<=H1+1;</b></p><p><b> END IF;</b></p><p> IF H1=2 AND H0=3 THEN </p><p> H1<=&qu
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計--基于fpga的數(shù)字鐘設(shè)計
- eda課程設(shè)計---基于fpga的數(shù)字鐘設(shè)計
- 基于fpga的多功能數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 數(shù)字鐘課程設(shè)計
- 基于fpga的數(shù)字鐘設(shè)計
- 課程設(shè)計-- 數(shù)字鐘的設(shè)計
- 課程設(shè)計---數(shù)字鐘的設(shè)計
- 基于fpga的數(shù)字鐘設(shè)計
- 脈沖與數(shù)字電路課程設(shè)計報告--基于fpga的數(shù)字鐘
- 數(shù)字電子課程設(shè)計---數(shù)字鐘
- 數(shù)字鐘課程設(shè)計---多功能數(shù)字鐘的設(shè)計與制作
- 數(shù)字鐘課程設(shè)計 (2)
- 課程設(shè)計數(shù)字鐘
- eda數(shù)字鐘課程設(shè)計
評論
0/150
提交評論