版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 基于FPGA的多功能數(shù)字鐘</p><p><b> 一、設(shè)計題目</b></p><p> 基于FPGA的多功能數(shù)字鐘</p><p><b> 二、設(shè)計目的</b></p><p> 1.掌握可編程邏輯器件的應(yīng)用開發(fā)技術(shù)</p><p>
2、——設(shè)計輸入、編譯、仿真和器件編程;</p><p> 2.熟悉一種EDA軟件使用;</p><p> 3.掌握Verilog設(shè)計方法;</p><p> 4.掌握分模塊分層次的設(shè)計方法;</p><p> 5.用Verilog完成一個多功能數(shù)字鐘設(shè)計;</p><p> 6.學(xué)會FPGA的仿真。</p
3、><p><b> 三、設(shè)計內(nèi)容</b></p><p> 設(shè)計一個多功能數(shù)字時鐘,具有時分、秒計數(shù)顯示、鬧鐘功能。能夠利用按鍵實現(xiàn)對鬧鐘時間的設(shè)定并在當(dāng)前顯示時間到時后能夠進(jìn)行鬧鐘提示。能夠利用按鍵實現(xiàn)“較時”、“較分”功能,隨時對數(shù)碼管的顯示進(jìn)行校正和校對。數(shù)字中系統(tǒng)主要由系統(tǒng)時鐘,三個功能按鍵(mode,turn,change),F(xiàn)PGA,數(shù)碼管和蜂鳴器部分組成
4、。</p><p> 四、FPGA及硬件描述語言簡介</p><p><b> ?。保疲校牵梁喗?lt;/b></p><p> FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而
5、出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。</p><p> 目前以硬件描述語言(Verilog 或 VHDL)所完成的電路設(shè)計,可以經(jīng)過簡 </p><p> 單的綜合與布局,快速的燒錄至 FPGA 上進(jìn)行測試,是現(xiàn)代 IC 設(shè)計驗證的技術(shù)主流。這些可編輯元件可以被用來實現(xiàn)一些基本的邏輯門電路(比如AND、OR、XOR、NOT)或者更復(fù)雜一些的組合功
6、能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊。 </p><p> 系統(tǒng)設(shè)計師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計者而改變,所以FPGA可以完成所需要的邏輯功能?! ?
7、 FPGA一般來說比ASIC(專用集成芯片)的速度要慢,無法完成復(fù)雜的設(shè)計,而且消耗更多的電能。但是他們也有很多的優(yōu)點比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些芯片有比較差的可編輯能力,所以這些設(shè)計的開發(fā)是在普通的FPGA上完成的,然后將設(shè)計轉(zhuǎn)移到一個類似于ASIC的芯片上。</p><p> ?。玻布枋稣Z言簡介</p>
8、<p> 硬件描述語言HDL(Hardware Description Language)是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語言。目前,電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展,以硬件描述語言和邏輯綜合為基礎(chǔ)的自頂向下的電路設(shè)計方法在業(yè)界得到迅猛發(fā)展,HDL 在這種形勢下顯示出了巨大的優(yōu)勢,展望將來HDL 在硬件設(shè)計領(lǐng)域的地位將與C 和C++在軟件設(shè)計領(lǐng)域的地位一樣,在大規(guī)模數(shù)字系統(tǒng)的設(shè)計中,它將逐步取代傳統(tǒng)的邏
9、輯狀態(tài)表和邏輯電路圖等硬件描述方法,而成為主要的硬件描述工具。</p><p> Verilog HDL是一種硬件描述語言(hardware description language),為了制作數(shù)字電路而用來描述ASICs和FPGA的設(shè)計之用。Verilog HDL是目前應(yīng)用最為廣泛的硬件描述語言,可以用來進(jìn)行各種層次的邏輯設(shè)計,也可以進(jìn)行數(shù)字系統(tǒng)的邏輯綜合,仿真驗證和時序分析等,適合算法級,寄存器級,邏輯級,
10、開關(guān)級、系統(tǒng)級和版圖級等各個層次的設(shè)計和描述。 </p><p> Verilog HDL進(jìn)行設(shè)計最大的優(yōu)點是其工藝無關(guān)性,這使得工程師在功能設(shè)計,邏輯驗證階段可以不必過多考慮門級及工藝實現(xiàn)的具體細(xì)節(jié),只需根據(jù)系統(tǒng)設(shè)計的要求施加不同的約束條件,即可設(shè)計出實際電路。 </p><p> Verilog HDL 是工業(yè)和學(xué)術(shù)界的硬件設(shè)計者所使用的兩種主要的HDL 之一,另一種是VH
11、DL?,F(xiàn)在它們都已成為IEEE 標(biāo)準(zhǔn)。兩者各有特點,但Verilog HDL 擁有更悠久的歷史、更廣泛的設(shè)計群體,資源也遠(yuǎn)比VHDL 豐富,且非常容易學(xué)習(xí)掌握。本設(shè)計提出了以 Verilog HDL 語言為手段,設(shè)計了多功能數(shù)字鐘。其代碼具有良好的可讀性和易理解性,源程序經(jīng)Altera 公司的QuartusⅡ 和ModelSim軟件完成綜合、仿真。此程序通過下載到FPGA 芯片后,可應(yīng)用于</p><p> 實
12、際的數(shù)字鐘顯示中。</p><p><b> 五、總體設(shè)計原理</b></p><p> 1、關(guān)于模式信號mode選擇各個功能顯示的構(gòu)思:</p><p> 考慮到使用mode按鍵產(chǎn)生0、1信號在正常時間顯示、調(diào)節(jié)時間功能、調(diào)節(jié)鬧鐘功能和跑表功能這四個功能之間的轉(zhuǎn)換。所以mode信號的作用主要體現(xiàn)在控制模塊(1)和顯示模塊中,雖然計時模塊
13、中也用到mode信號,但是它只是turn信號將秒信號清零的輔助作用,保證只有在m=0(即普通時鐘顯示)下turn信號清零功能才起作用,在校時功能下只能是分、小時的切換和跑表下的暫停功能。</p><p> a、在控制模塊下的作用:</p><p> 在控制模塊下,其實mode和turn信號的作用更像2-4譯碼器的功能,將change數(shù)字上加信號按不同的mode和turn分成四個信號,
14、分別是count1(時間顯示下的分信號)、counta(時間顯示下的小時信號)、count2(鬧鈴顯示下的分信號)、countb(鬧鈴顯示下的小時信號)。</p><p> b、在顯示模塊下的作用:</p><p> 同在控制模塊下的作用。只是將turn信號選出的小時和分鐘在同一個mode下一起送至數(shù)碼管顯示。</p><p> 2、關(guān)于時間調(diào)整和鬧鈴時間調(diào)
15、整中數(shù)字上加的原理:</p><p> 對于這個問題,我們要考慮兩種情況,首先是時間調(diào)整的情況:因為在時間調(diào)整下,數(shù)字的上加不僅受到change信號的作用(即人工調(diào)時),還受本身在1Hz信號下計時而隨時發(fā)生的累加。而鬧鈴時間調(diào)整不存在這種情況,因為鬧鈴下的時間數(shù)字發(fā)生上加只可能人工調(diào)節(jié)(change信號作用下)的結(jié)果。</p><p> a、時間調(diào)整下的上加:</p>
16、<p> 由于在控制模塊(2)下又設(shè)置了快加的功能,所以有三部分信號對上加起作用,一是快加下的numXclk,表示以原始時鐘的速率上加,二是慢加下的change具體到各模塊、各位的count1或counta,三是秒信號記到9向分信號的進(jìn)位。</p><p> b、鬧鈴時間調(diào)整下的上加:</p><p> 該部分原理同上,只是少了低位記到9向高位的進(jìn)位。所以只有兩部分組成,
17、一是快加下的numXclk,表示以原始時鐘的速率上加,二是慢加下的change具體到各模塊、各位的count2或countb。</p><p> 圖1 多功能數(shù)字鐘總體設(shè)計模塊</p><p><b> 六、各模塊說明</b></p><p><b> 1.分頻模塊</b></p><p>
18、; 由于FPGA內(nèi)部提供的時鐘信號頻率大約為50MHz,在這需要將它轉(zhuǎn)化成1Hz的標(biāo)準(zhǔn)時鐘信號供數(shù)字鐘的計時顯示;在此采用了級聯(lián)分頻法。</p><p><b> 代碼如下:</b></p><p> module fenpin(clk,clk_1Hz,clk_100Hz,clk_1k);</p><p> output clk_1Hz
19、,clk_100Hz,clk_1k;</p><p> input clk;</p><p> reg clk_1Hz=0,clk_3=0,clk_1=0,clk_2=0,clk_1k=0;</p><p> reg [6:0] cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0;</p><p> wire clk
20、_100Hz;</p><p> always @(posedge clk) </p><p><b> begin</b></p><p> if ( cnt1 < 156/2-1) /////////////////////////156分頻,生成1MHz信號</p><p> begin
21、 </p><p> cnt1 <= cnt1 + 1; </p><p> end </p><p> else </p><p> begin </p><p> cnt1 <
22、;= 0; </p><p> clk_1 <= ~clk_1; </p><p><b> end</b></p><p><b> end</b></p><p> always @(posedge clk_1)</p><p> if (
23、 cnt2 < 156/2-1) ////////////////////100分頻,生成10000Hz信號</p><p> begin </p><p> cnt2 <= cnt2 + 1; </p><p> end </p><p&
24、gt; else </p><p> begin </p><p> cnt2 <= 0; </p><p> clk_2 <= ~clk_2; </p><p><b> end</b></p><p> alw
25、ays @(posedge clk_2)</p><p> if ( cnt5 < 10/2-1) //////////////////////10分頻,生成1kHz標(biāo)準(zhǔn)信號</p><p> begin </p><p> cnt5<= cnt5 + 1; </p
26、><p> end </p><p> else </p><p> begin </p><p> cnt5<= 0; </p><p> clk_1k<= ~clk_1k; </p><p><b
27、> end </b></p><p> always @(posedge clk_2)</p><p> if ( cnt3 < 100/2-1) //////////////////////100分頻,生成100Hz信號</p><p> begin </p><p>
28、; cnt3 <= cnt3 + 1; </p><p> end </p><p> else </p><p> begin </p><p> cnt3 <= 0; </p><p> cl
29、k_3 <= ~clk_3; </p><p><b> end</b></p><p> assign clk_100Hz=clk_3;</p><p> always @(posedge clk_3)</p><p> if ( cnt4 < 100/2-1) ////////////
30、////////100分頻,生成1Hz標(biāo)準(zhǔn)信號</p><p> begin </p><p> cnt4<= cnt4 + 1; </p><p> end </p><p> else </p><p&
31、gt; begin </p><p> cnt4<= 0; </p><p> clk_1Hz<= ~clk_1Hz; </p><p><b> end</b></p><p><b> endmodule</b></p>
32、<p> 最終輸出的是1Hz,100Hz,1kHz的標(biāo)準(zhǔn)時鐘信號clk_1Hz ,clk_100Hz,clk_1k。</p><p><b> 2、計時模塊</b></p><p> 原理:m是模式按鍵,當(dāng)m=0時,進(jìn)入計時模式,在計時模式下可以進(jìn)行時間調(diào)整。num3,num4產(chǎn)生加速調(diào)整時間,當(dāng)其值為1時,可以快速調(diào)整時間,該調(diào)整時間的頻率由c
33、lk提供。counta,count1是手動調(diào)節(jié)時間。Turn接按鍵,可以改變當(dāng)前調(diào)節(jié)的是小時還是分鐘,長按turn鍵還可以使秒鐘信號清零。sec1,min1,hour1輸出的是計時的秒,分,時。</p><p><b> 代碼如下:</b></p><p> module jishi(clk,clk_1Hz,</p><p> turn,
34、//// turn: 接按鍵,在手動校時功能時,選擇是調(diào)整小時,還是分鐘;若長時間按住該鍵,還可使秒信號清零,用于精確調(diào)時</p><p> mode,count1,counta,sec1,min1,hour1,num3,num4);</p><p> input clk,clk_1Hz,turn,num3,num4;</p><p> input mode;
35、</p><p> input count1,counta;</p><p> output [7:0] sec1,min1;</p><p> output [7:0] hour1;</p><p> wire clk_1Hz,ct1,cta,turn,num3,num4;</p><p> reg [7:
36、0] sec1=0,min1=0;</p><p> reg [7:0] hour1=0;</p><p> reg [1:0] m;</p><p> wire count1,counta;</p><p> reg minclk,hclk;</p><p> always @(posedge mode)
37、//mode 信號控制系統(tǒng)在三種功能間轉(zhuǎn)換</p><p><b> begin</b></p><p> if(m==4) m<=0;</p><p> else m<=m+1;</p><p><b> end</b></p><p> //
38、///秒鐘計時模塊//////</p><p> always @(posedge clk_1Hz)</p><p> if((sec1==8'h59)|turn&(!m))///////若長時間按住該鍵,還可使秒信號清零,用于精確調(diào)時。</p><p><b> begin</b></p><p>
39、; sec1<=0; //按住“turn”按鍵一段時間,秒信號可清零,該功能用于手動精確調(diào)時</p><p> if(!(turn&(!m))) minclk<=1;///產(chǎn)生進(jìn)位</p><p><b> end</b></p><p> else begin</p><p> if(
40、sec1[3:0]==4'b1001) </p><p> begin sec1[3:0]<=4'b0000; sec1[7:4]<=sec1[7:4]+1; end</p><p> else sec1[3:0]<=sec1[3:0]+1;</p><p> minclk<=0;</p><
41、p><b> end</b></p><p> ////////分鐘計時模?///</p><p> assign m_clk=minclk||count1;/////m_clk產(chǎn)生進(jìn)位或校正改變</p><p> assign ct1=(num3&clk)|(!num3&m_clk); //ct1 用于計時、校
42、時中的分鐘計數(shù)</p><p> always @(posedge ct1)</p><p><b> begin</b></p><p> if(min1==8'h59) begin min1<=0; hclk<=1; end</p><p> else begin</p&g
43、t;<p> if(min1[3:0]==9)</p><p> begin min1[3:0]<=0; min1[7:4]<=min1[7:4]+1; end</p><p> else min1[3:0]<=min1[3:0]+1;</p><p><b> hclk<=0;</b>&l
44、t;/p><p><b> end</b></p><p><b> end</b></p><p> ////////小時計時模塊///</p><p> assign h_clk=hclk||counta;//////h_clk產(chǎn)生進(jìn)位或校正改變</p><p>
45、 assign cta=(num4&clk)|(!num4&h_clk); //cta 用于計時、校時中的小時計數(shù)</p><p> always @(posedge cta)</p><p> if(hour1==8'h23) hour1<=0;</p><p> elseif(hour1[3:0]==9) </p>
46、;<p> begin hour1[7:4]<=hour1[7:4]+1; hour1[3:0]<=0; end</p><p> else hour1[3:0]<=hour1[3:0]+1;</p><p><b> endmodule</b></p><p><b> 3、鬧鐘模塊
47、</b></p><p> 原理:num1,num2產(chǎn)生加速調(diào)整時間,當(dāng)其值為1時,可以快速調(diào)整時間,該調(diào)整時間的頻率由clk提供。countb,count2是手動調(diào)節(jié)鬧鐘時間。amin,ahour是輸出的鬧鐘的分鐘和小時,LD_alert指示當(dāng)前是否開啟鬧鐘。</p><p><b> 代碼如下:</b></p><p>
48、module Alarm(clk,amin,ahour,num1,num2,count2,countb,LD_alert);</p><p> input clk,num1,num2,count2,countb;</p><p> output [7:0] amin;</p><p> output [7:0] ahour;</p><p&
49、gt; output LD_alert;</p><p> wire LD_alert;</p><p> reg [7:0] amin=0;</p><p> reg [7:0] ahour=0;</p><p> assign ct2=(num1&clk)|(!num1&count2); //ct2 用于定時狀態(tài)
50、下調(diào)整分鐘信號</p><p> assign LD_alert=(ahour|amin)?1:0;//指示是否進(jìn)行了鬧鈴定時</p><p> always @(posedge ct2)</p><p> if(amin==8'h59) amin<=0;</p><p> elseif(amin[3:0]==9
51、)</p><p> begin amin[3:0]<=0; amin[7:4]<=amin[7:4]+1; end</p><p> else amin[3:0]<=amin[3:0]+1;</p><p> assign ctb=(num2&clk)|(!num2&countb); ////ctb 用于定時狀態(tài)調(diào)節(jié)
52、小時信號</p><p> always @(posedge ctb)</p><p> if(ahour==8'h23) ahour<=0;</p><p> elseif(ahour[3:0]==9)</p><p> begin ahour[3:0]<=0; ahour[7:4]<=ahour[
53、7:4]+1; end</p><p> else ahour[3:0]<=ahour[3:0]+1;</p><p><b> endmodule</b></p><p> 4、控制模塊(1)</p><p> 原理:m是模式按鍵,當(dāng)m=0時,指當(dāng)前輸出的是計時功能;當(dāng)m=1時,指當(dāng)前調(diào)整的是鬧鐘時
54、間;當(dāng)m=2時,指當(dāng)前調(diào)整的是計時時間;當(dāng)m=3時,此時turn按鍵可用于跑表的暫停與開始。change 接按鍵,手動調(diào)整時,每按一次,計數(shù)器加1;如果長按,則連續(xù)快速加 1,用于快速調(diào)時和定時;turn接按鍵,在手動校時功能時,選擇是調(diào)整小時,還是分鐘;若長時間按住該鍵,還可使秒信號清零,用于精確調(diào)時。count1,count2,counta,countb分別是用來調(diào)節(jié)計時時間和鬧鐘時間。LD_min,LD_hour,指示當(dāng)前調(diào)節(jié)的是
55、分鐘還是小時。</p><p><b> 代碼如下:</b></p><p> Module ctrol(change,turn,count1,count2,counta,countb,pause,LD_min,LD_hour,mode);</p><p> input change,mode,turn; </p><
56、p> output count1,count2,counta,countb,pause,LD_min,LD_hour;</p><p> reg [1:0] m;</p><p> reg fm=0,count1=0,count2=0,counta=0,countb=0,pause=0,LD_min=0,LD_hour=0;</p><p> wire
57、 mode,turn,change;</p><p> always @(posedge mode) //mode 信號控制系統(tǒng)在三種功能間轉(zhuǎn)換</p><p><b> begin</b></p><p> if(m==4) m<=0;</p><p> else m<=m+1;</p&g
58、t;<p><b> end</b></p><p> always @(posedge turn)//////////接按鍵,在手動校時功能時,選擇是調(diào)整小時,還是分鐘;</p><p><b> begin</b></p><p><b> fm<=~fm;</b>&l
59、t;/p><p><b> end</b></p><p> always @ (m or fm or change)</p><p><b> begin</b></p><p><b> case(m)</b></p><p> 3: beg
60、in ////////3:跑表功能;</p><p><b> if(fm) </b></p><p><b> pause=1;</b></p><p><b> else </b></p><p><b> pause=0;</b></p
61、><p><b> end</b></p><p> 2:begin ////////2:調(diào)節(jié)時間功能;</p><p><b> if(fm) </b></p><p> begincount1<=change; {LD_min,LD_hour}<=2; </p>
62、<p> end//////指示當(dāng)前調(diào)整的是分鐘</p><p><b> else </b></p><p> begin counta<=change; {LD_min,LD_hour}<=1; </p><p> end/////指示當(dāng)前調(diào)整的是小時</p><p> {co
63、unt2,countb}<=0;</p><p><b> end</b></p><p> 1:begin //////1:調(diào)節(jié)鬧鐘功能</p><p><b> if(fm) </b></p><p> begincount2<=change; {LD_min,LD_
64、hour}<=2; </p><p> end/////指示當(dāng)前調(diào)整的是分</p><p><b> else</b></p><p> begin countb<=change; {LD_min,LD_hour}<=1; </p><p> end/////指示當(dāng)前調(diào)整的是小時<
65、/p><p> {count1,counta}<=0; </p><p><b> end</b></p><p> 0: begin {count1,count2,counta,countb,LD_min,LD_hour}<=0;</p><p> end ////0:計時功能</p>&
66、lt;p><b> endcase</b></p><p><b> end</b></p><p><b> endmodule</b></p><p> 5、控制模塊(2)</p><p> 原理:此模塊是加速調(diào)節(jié)時間模塊,count1,count2,co
67、unta,countb是手動調(diào)節(jié)時間,當(dāng)長時間按這些鍵時,num1,num2,num3,num4的值會發(fā)生變化,當(dāng)他們值有為1時,對應(yīng)的調(diào)節(jié)會快速加1。</p><p><b> 代碼如下:</b></p><p> module faster(clk,num1,num2,num3,num4,count1,count2,counta,countb);</p&
68、gt;<p> input clk;</p><p> input count1,count2,counta,countb;</p><p> output num1,num2,num3,num4;</p><p> wire count1,count2,counta,countb;</p><p> reg[2:0]
69、 loop1=0,loop2=0,loop3=0,loop4=0;</p><p> reg num1,num2,num3,num4;</p><p> always @(negedge clk)//如果長時間按下“change”鍵,則生成“num*”信號用于連續(xù)快速加1</p><p> if(count2) begin</p><p&
70、gt; if(loop1==3) begin loop1<=0; num1<=1; end</p><p><b> else</b></p><p> begin loop1<=loop1+1; num1<=0; end</p><p><b> end</b></p>&l
71、t;p> else begin loop1<=0; num1<=0; end</p><p> always @(negedge clk)</p><p> if(countb) begin</p><p> if(loop2==3) begin loop2<=0; num2<=1; end</p>&l
72、t;p><b> else</b></p><p> begin loop2<=loop2+1; num2<=0; end</p><p><b> end</b></p><p> else begin loop2<=0; num2<=0; end</p>
73、<p> always @(negedge clk)</p><p> if(count1) begin</p><p> if(loop3==3) begin loop3<=0; num3<=1; end</p><p><b> else</b></p><p> begin
74、loop3<=loop3+1; num3<=0; end</p><p><b> end</b></p><p> else begin loop3<=0; num3<=0; end</p><p> always @(negedge clk)</p><p> if(cou
75、nta) begin</p><p> if(loop4==3) begin loop4<=0; num4<=1; end</p><p><b> else</b></p><p> begin loop4<=loop4+1; num4<=0; end</p><p><b&
76、gt; end</b></p><p> else begin loop4<=0; num4<=0; end</p><p><b> endmodule</b></p><p><b> 6、顯示模塊</b></p><p> 原理:同時輸入計時模塊的時
77、間和鬧鐘模塊的時間,選擇m值,當(dāng)m=0時,指當(dāng)前輸出的是計時模塊的時間;當(dāng)m=1時,指當(dāng)前輸出的是鬧鐘模塊的時間;當(dāng)m=2時,指當(dāng)前輸出的是調(diào)節(jié)計時模塊的時間;當(dāng)m=3時,指當(dāng)前輸出的是跑表計時的時間。</p><p><b> 代碼如下:</b></p><p> Module show(min1,sec1,amin,hour1,ahour,MSH,MSL,SH
78、,SL,MH,ML,min,sec,hour,mode);</p><p> input [7:0] min1,sec1,amin;</p><p> input [7:0] hour1,ahour;</p><p> input[3:0] MSH,MSL,SH,SL,MH,ML;</p><p> input mode;</p
79、><p> output [7:0] min,sec;</p><p> output [7:0] hour;</p><p> reg [7:0] min,sec;</p><p> reg [7:0] hour;</p><p> reg [1:0] m;</p><p> alwa
80、ys @(posedge mode) //mode 信號控制系統(tǒng)在三種功能間轉(zhuǎn)換</p><p><b> begin</b></p><p> if(m==4) m<=0;</p><p> else m<=m+1;</p><p><b> end</b></p&g
81、t;<p> always @(min1 or sec1 or amin or hour1 or ahour or m) </p><p><b> begin</b></p><p><b> case(m)</b></p><p> 0:begin hour<=hour1; min&l
82、t;=min1; sec<=sec1; end</p><p> 1:begin hour<=ahour; min<=amin; sec<=8'hzz; end</p><p> 2:begin hour<=hour1; min<=min1; sec<=8'hzz; end</p><
83、p> 3: begin hour<={SH,SL}; min<={MSH,MSL}; sec<={MH,ML}; end</p><p><b> endcase</b></p><p><b> end</b></p><p><b> endmodule<
84、;/b></p><p><b> 7、響鈴模塊</b></p><p> 原理:同時輸入計時模塊的時間和鬧鐘模塊的時間。當(dāng)計時模塊的時間快到達(dá)整點時,會產(chǎn)生響聲;當(dāng)計時模塊的時分同時等于鬧鐘模塊的時分時,也產(chǎn)生響鈴。這時alert為1,如果在這時按住change鍵,可以屏蔽鬧鐘響鈴。</p><p><b> 代碼如下
85、:</b></p><p> module ring(clk,clk_1k,min1,sec1,amin,hour1,ahour,change,alert);</p><p> input [7:0] min1,sec1,amin;</p><p> input [7:0] hour1,ahour;</p><p> in
86、put change,clk,clk_1k;</p><p> output alert;</p><p> wire [7:0] min1,sec1,amin;</p><p> wire [7:0] hour1,ahour;</p><p> wire change;</p><p> reg alert
87、1=0,alert2=0;</p><p> reg [1:0] sound;</p><p><b> reg ear;</b></p><p> wire alert;</p><p> wire clk_1k,clk;</p><p> always @ (posedge clk)
88、</p><p> if((min1==amin)&&(hour1==ahour)&&(amin|ahour)&&(!change))</p><p> if(sec1<30) alert1<=1;</p><p> else alert1<=0;</p><p>
89、 else alert1<=0;</p><p> always @ (posedge clk)</p><p><b> begin </b></p><p> if(sound==3) begin sound<=0; ear<=1; end</p><p> //ear 信號用于產(chǎn)生
90、或屏蔽聲音</p><p> else begin sound<=sound+1; ear<=0; end</p><p> if((min1==8'h59)&&(sec1>8'h54)||(!(min1|sec1)))</p><p> if(sec1>8'h54) alert2<
91、;=ear&clk_1k; //產(chǎn)生短音</p><p> else alert2<=!ear&clk_1k; //產(chǎn)生長音</p><p> else alert2 <= 0; //停止發(fā)聲</p><p><b> end</b></p><p> ///assign ale
92、rt=((alert1)?clk_100Hz&clk:0)|alert2;//產(chǎn)生鬧鈴音或整點報時音</p><p> assign alert=((alert1)?clk_1k&clk:0)|alert2; //產(chǎn)生鬧鈴音或整點報時音</p><p><b> endmodule</b></p><p><b>
93、; 8、跑表模塊</b></p><p> 原理:輸入該模塊的是100Hz時鐘信號。百分秒是模為100的BCD碼計數(shù)器,為方便數(shù)碼管顯示,將百分秒的兩位分別用4位的MSH(百分秒高位),MSL(百分秒低位)表示。這樣MSH,MSL就分別對應(yīng)每一個數(shù)碼管顯示的BCD碼。同理,秒信號為模為60的BCD碼計數(shù)器,兩位也用四位的SH(秒高位),SL(秒低位)。此時turn鍵可用作跑表的pause鍵,按下
94、turn鍵后跑表暫停,再按下后秒表啟動。此外clr按鍵可實現(xiàn)跑表的異步清零。</p><p> /*信號定義:clk_100Hz: clk_100Hz 為時鐘信號;clr: 為異步復(fù)位信號;pause: 為暫停信號;MSH,MSL: 百分秒的高位和低位;SH,SL: 秒信號的高位和低位;MH,ML: 分鐘信號的高位和低位。 */</p><p> module paobiao(clk_
95、100Hz,clr,pause,MSH,MSL,SH,SL,MH,ML);</p><p> input clk_100Hz,clr;</p><p> input pause;</p><p> output[3:0] MSH,MSL,SH,SL,MH,ML;</p><p> reg[3:0] MSH,MSL,SH,SL,MH,M
96、L;</p><p> reg cn1,cn2; //cn1 為百分秒向秒的進(jìn)位,cn2 為秒向分的進(jìn)位</p><p> //百分秒計數(shù)進(jìn)程,每計滿100,cn1 產(chǎn)生一個進(jìn)位</p><p> always @(posedge clk_100Hz or posedge clr)</p><p><b> begin<
97、;/b></p><p> if(clr) begin //異步復(fù)位</p><p> {MSH,MSL}<=8'h00;</p><p><b> cn1<=0;</b></p><p><b> end</b></p><p> e
98、lse if(!pause) //PAUSE 為0 時正常計數(shù),為1 時暫停計數(shù)</p><p><b> begin</b></p><p> if(MSL==9) begin</p><p><b> MSL<=0;</b></p><p> if(MSH==9) </
99、p><p> begin MSH<=0; cn1<=1; end</p><p> else MSH<=MSH+1;</p><p><b> end</b></p><p> elsebegin</p><p> MSL<=MSL+1; cn1<=
100、0;</p><p><b> end</b></p><p><b> end</b></p><p> end //秒計數(shù)進(jìn)程,每計滿60,cn2 產(chǎn)生一個進(jìn)位</p><p> always @(posedge cn1 or posedge clr)</p><
101、p><b> begin</b></p><p> if(clr) begin //異步復(fù)位</p><p> {SH,SL}<=8'h00;</p><p><b> cn2<=0;</b></p><p><b> end</b>
102、</p><p> elseif(SL==9) //低位是否為9</p><p><b> begin</b></p><p><b> SL<=0;</b></p><p><b> if(SH==5)</b></p><p> b
103、egin SH<=0; cn2<=1; end</p><p> else SH<=SH+1;</p><p><b> end</b></p><p><b> else </b></p><p> begin SL<=SL+1; cn2<=0
104、; end</p><p> end //分鐘計數(shù)進(jìn)程,每計滿60,系統(tǒng)自動清零</p><p> always @(posedge cn2 or posedge clr)</p><p><b> begin</b></p><p><b> if(clr)</b><
105、;/p><p> begin {MH,ML}<=8'h00; end //異步復(fù)位</p><p> else if(ML==9)begin</p><p><b> ML<=0;</b></p><p> if(MH==5) MH<=0;</p><p&g
106、t; else MH<=MH+1;</p><p><b> end</b></p><p> else ML<=ML+1;</p><p><b> end</b></p><p><b> endmodule</b></p>&
107、lt;p> 七、各工作模式仿真波形</p><p> 1.時鐘正常計時波形 00:00:59時刻波形</p><p> 00:59:59時刻波形</p><p> 23:59:59時刻波形</p><p><b> 2.定時鬧鐘波形</b></p><p> 如圖所示為01
108、:02:00-01:02:59的一分鐘鬧鐘波形。</p><p><b> 3.仿電臺報時波形</b></p><p> 如圖所示,在任意小時59分的51、53、55、57秒內(nèi)蜂鳴器為低頻(512Hz)信號輸出,在59秒內(nèi)蜂鳴器為高頻(1024Hz)信號輸出,實現(xiàn)模仿電臺報時功能。</p><p><b> 4.整點報時波形&l
109、t;/b></p><p> 如圖所示,在06:00:00后的6秒內(nèi),蜂鳴器前半秒無輸入,后半秒有高頻(1024Hz)輸入,達(dá)到整點報時功能。在N小時整時刻,蜂鳴器會鳴響N次。如此仿真中為六點,響六下。</p><p> 分計數(shù)器仿真波形圖:</p><p> 小時計數(shù)器仿真波形圖:</p><p> 八、在FPGA板上調(diào)試過程
110、如下:</p><p> 1.當(dāng)前m=0,輸出的是計時模塊的時間;LD_alert=0,表示沒有設(shè)置鬧鐘。</p><p> 2.當(dāng)m=1時,輸出的是鬧鐘時間。改變change的值,可以調(diào)節(jié)鬧鐘的時間??梢钥闯鲈O(shè)置得鬧鐘為8:25。LD-alert=1提示設(shè)置了鬧鐘。</p><p> 3.當(dāng)m=2or3時,輸出的是調(diào)整計時模塊的時間。改變change的值,可
111、以調(diào)節(jié)時間??梢钥闯?,時間調(diào)整為8:21。</p><p> 4.從下可以看出,LD_alert=1,表明設(shè)置有鬧鐘。alert=0,表示鬧鐘時間還沒有到。</p><p> 時間為8:25:00,鬧鐘報警,alert=1,報警時間長為30秒,如果按住change鍵,則可以屏蔽鬧鈴。</p><p> 時間為8:25:31,鬧鈴?fù)V埂?lt;/p>&
112、lt;p><b> 測試成功!</b></p><p><b> 九、總結(jié)</b></p><p> 通過這次項目設(shè)計,我初步掌握了EDA設(shè)計的基本流程(即設(shè)計輸入—編譯—調(diào)試—仿真—下載),領(lǐng)會了自頂而下結(jié)構(gòu)化設(shè)計的優(yōu)點,并具備了初步的EDA程序設(shè)計能力。根據(jù)設(shè)計內(nèi)容,對FPGA也進(jìn)行了學(xué)習(xí),對軟件總體操作步驟初步了解了,但還是要提
113、高對FPGA的掌握能力,將FPGA運用到其他方面的應(yīng)用上。另外,設(shè)計中最重要的就verilog語言的應(yīng)用,對Verilog語言的學(xué)習(xí)不僅是能讀懂別人的程序,更重要的是能寫出條理清晰的程序。通過做多功能數(shù)字鐘,我發(fā)現(xiàn)自己對Verilog語言還不是很熟悉,編寫程序也不夠熟練,在接下來的時間里我還要要加強(qiáng)verilog語言的學(xué)習(xí),多看一些語言方面的書籍。</p><p> 在做設(shè)計的過程中,我感覺,這個項目最難的地方
114、在于將各個子模塊按照原理有機(jī)地結(jié)合起來,這需要扎實的理論功底,。相比而言,子模塊的設(shè)計難度不是太大,因為Verilog語言和C語言有很多相似之處,只要明白了實驗原理,就不難完成,水平的高下只體現(xiàn)在程序的簡潔與否。但是Verilog源程序的編寫很容易出現(xiàn)錯誤,有時候在沒注意的情況下就會出現(xiàn),這就需要耐心的調(diào)試。因為很多情況下,一長串的錯誤往往是由一個不經(jīng)意的小錯誤引起的。當(dāng)程序?qū)艺{(diào)屢錯的時候,可以去尋求同學(xué)的幫助,因為自己編寫的程序往往自
115、己看不出問題所在,說不定他們不經(jīng)意的一句話,就可能給我啟發(fā),使問題迎刃而解。 </p><p> 這次項目設(shè)計,給我感觸最深的還是行為態(tài)度問題。人的能力有大有小,但只要端正態(tài)度,不拋棄,不放棄,任何人都能取得令自己滿意的成績。</p><p> 附件1: 大學(xué)本科畢業(yè)論文(設(shè)計)工作程序</p><p> 注:1.提前或推延進(jìn)行畢業(yè)論文(設(shè)計)的,各階
116、段要求相同,日程自定;</p><p> 2.畢業(yè)論文(設(shè)計)工作三個階段時間安排,可根據(jù)各專業(yè)特點適當(dāng)調(diào)整。 </p><p> 附件2: 大學(xué)本科畢業(yè)論文(設(shè)計)撰寫規(guī)范</p><p> 一、畢業(yè)論文(設(shè)計)文本結(jié)構(gòu)</p><p> 畢業(yè)論文
117、(設(shè)計)主要由8個部分組成:①封面;②目錄;③題目;④中外文摘要;⑤正文;⑥參考文獻(xiàn);⑦謝辭;⑧附錄。</p><p> 二、畢業(yè)論文(設(shè)計)各部分規(guī)范</p><p><b> 1. 封面</b></p><p> 封面按學(xué)校規(guī)定的格式填寫,包括論文(設(shè)計)題目、作者姓名、指導(dǎo)教師姓名、學(xué)科專業(yè)等內(nèi)容。</p><p
118、><b> 2. 目錄</b></p><p> 目錄由畢業(yè)論文(設(shè)計)各部分內(nèi)容的順序號、名稱和頁碼組成,目次中的內(nèi)容一般列出二級標(biāo)題即可。目錄應(yīng)該用“…………”連接名稱與頁碼。</p><p><b> 3. 題目</b></p><p> 論文(設(shè)計)題目要恰當(dāng)、簡明、凝練,能夠反映論文的主題及其內(nèi)容,
119、做到文、題貼切。題目中不使用非規(guī)范的縮略詞、符號、代號和公式,通常不采用問話的方式。題目所使用的詞語應(yīng)當(dāng)考慮到有助于選擇關(guān)鍵詞和編制題錄、索引等。</p><p> 題目的中文字?jǐn)?shù)一般不超過20個字,外文題目不超過10個實詞,中外文標(biāo)題應(yīng)一致,居中編排格式。</p><p> 4. 中外文摘要及關(guān)鍵詞 摘要是對畢業(yè)論文(設(shè)計)內(nèi)容不加注釋和評論的簡短陳述。摘要主要是說明研究工作的目
120、的、方法、結(jié)果和結(jié)論。摘要應(yīng)具有獨立性和自含性,即不閱讀全文,就能獲得畢業(yè)論文(設(shè)計)必要的信息,使讀者確定有無必要閱讀全文。摘要中應(yīng)用第三人稱的方法記述論文的性質(zhì)和主題,不使用“本文”、“作者”等作為主語,應(yīng)采用“對…進(jìn)行了研究”、“報告了…現(xiàn)狀”、“進(jìn)行了…調(diào)查”等表達(dá)方式。排除在本學(xué)科領(lǐng)域已成為常識的內(nèi)容,不得重復(fù)題目中已有的信息。語句要合乎邏輯關(guān)系,盡量同正文的文體保持一致。結(jié)構(gòu)要嚴(yán)謹(jǐn),表達(dá)要簡明,語義要確切,一般不再分段落。對
121、某些縮略語、簡稱、代號等,除了相鄰專業(yè)的讀者也能清楚理解的以外,在首次出現(xiàn)處必須加以說明。摘要中通常不用圖表、化學(xué)結(jié)構(gòu)式以及非公知公用的符號和術(shù)語。</p><p> 畢業(yè)論文(設(shè)計)的摘要包含中文摘要和外文摘要。中文摘要字?jǐn)?shù)約為200~300字,外文摘要約為200~300個實詞。</p><p> 關(guān)鍵詞(Keywords)是為了文獻(xiàn)標(biāo)引,從《漢語主題詞表》或論文中選取出來,用以表示
122、全文主題內(nèi)容信息的詞語或術(shù)語。關(guān)鍵詞不宜用非通用的代號和分子式。</p><p> 關(guān)鍵詞一般為3~6個。關(guān)鍵詞的排序,通常應(yīng)按研究的對象、性質(zhì)(問題)和采取的手段排序。中文關(guān)鍵詞兩詞之間應(yīng)留出一個漢字的空間,不加任何標(biāo)點符號;外文關(guān)鍵詞之間用分號隔開。</p><p><b> 5. 正文</b></p><p> 畢業(yè)論文(設(shè)計)的正
123、文包括前言(引言)、正文、結(jié)論三個部分。外語類專業(yè)畢業(yè)生必須用所學(xué)專業(yè)外語撰寫。</p><p> 畢業(yè)論文(設(shè)計)的篇幅一般6000字左右。</p><p><b> (1)前言(引言)</b></p><p> 前言(引言)主要說明研究工作的目的、范圍,對前人的研究狀況進(jìn)行評述分析,闡明研究設(shè)想、研究方法、實驗設(shè)計、預(yù)期結(jié)果、成果的意
124、義等。</p><p><b> (2)正文</b></p><p> 正文是對研究工作與研究內(nèi)容的詳細(xì)表述,一般由標(biāo)題、文字、表格或公式等部分組成。該部分要運用選定的研究方法分析問題、論證觀點,盡量反映出研究能力和學(xué)術(shù)水平。正文是畢業(yè)論文(設(shè)計)的核心部分,占據(jù)主要篇幅。</p><p> 正文是論文的主體,要求觀點清晰、論點正確、論據(jù)
125、可靠、論證嚴(yán)密、層次清楚。</p><p> 正文中的圖表和計量單位要規(guī)范。圖須有序號、圖題、圖例、量和單位,圖序號須用阿拉伯?dāng)?shù)字,與圖題空 1 格,寫在圖下方;表格采用 3線表,表頭線和表尾線為粗黑線,表兩邊不要串寫文字,表序號須用阿拉伯?dāng)?shù)字,與標(biāo)題空 1格,寫在表上方;一律使用法定計量單位。</p><p><b> (3)結(jié)論</b></p>
126、<p> 結(jié)論是對整個研究工作進(jìn)行歸納和總結(jié)。結(jié)論應(yīng)當(dāng)準(zhǔn)確、完整、明確、精練。如不可能導(dǎo)出應(yīng)有的結(jié)論,也可以沒有結(jié)論而進(jìn)行必要的討論,闡述本課題研究中存在的問題及進(jìn)一步開展研究的建議。</p><p><b> 6. 謝辭(致謝)</b></p><p> 謝辭(致謝)是對給予各類資助、指導(dǎo)和協(xié)助完成科研工作,以及提供各種條件的單位和個人表示的感謝。謝
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于fpga多功能數(shù)字鐘設(shè)計
- 基于fpga的多功能數(shù)字鐘課程設(shè)計
- 基于quartus的多功能數(shù)字鐘設(shè)計
- 多功能數(shù)字鐘論文設(shè)計
- 基于quartus的多功能數(shù)字鐘設(shè)計88
- 數(shù)字鐘課程設(shè)計---多功能數(shù)字鐘的設(shè)計與制作
- 基于fpga的數(shù)字鐘設(shè)計
- 數(shù)字鐘課程設(shè)計--多功能數(shù)字鐘的電路設(shè)計
- 基于fpga的數(shù)字鐘設(shè)計
- 多功能數(shù)字鐘課程設(shè)計
- 課程設(shè)計-- 多功能 數(shù)字鐘
- 多功能數(shù)字鐘畢業(yè)論文
- 多功能數(shù)字鐘設(shè)計[文獻(xiàn)綜述]
- 多功能數(shù)字鐘畢業(yè)設(shè)計
- 基于vhdl語言編寫的多功能數(shù)字鐘論文
- 畢業(yè)論文——多功能數(shù)字鐘
- 畢業(yè)論文多功能數(shù)字鐘
- 多功能數(shù)字鐘的設(shè)計及制作
- 多功能數(shù)字鐘的設(shè)計及制作
- 數(shù)字邏輯課程設(shè)計---多功能數(shù)字鐘
評論
0/150
提交評論