多功能時鐘設(shè)計報告_第1頁
多功能時鐘設(shè)計報告_第2頁
多功能時鐘設(shè)計報告_第3頁
多功能時鐘設(shè)計報告_第4頁
多功能時鐘設(shè)計報告_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、. . . 基于FPGA的多功能時鐘設(shè)計報告專業(yè):電子與信息工程系班級:通信11級01班學(xué)號:u201113247電 子 與 信 息 工 程 系2012年8月4日- 26 - / 27目錄設(shè)計目的.2設(shè)計容與要求.2設(shè)計(代碼)分析.3實(shí)驗(yàn)過程與步驟.4實(shí)驗(yàn)結(jié)果的測試與仿真10實(shí)驗(yàn)總結(jié).13參考文獻(xiàn).13附錄(原代碼).141 設(shè)計目的在學(xué)習(xí)verilog語言與數(shù)電的相關(guān)知識后,運(yùn)用所學(xué)知識與查閱資料完成對多功能時鐘的設(shè)計,以鞏固以前所學(xué)知識,提高解決和分析問題的能力以與掌握稍復(fù)雜邏輯電路的設(shè)計方法;深刻理解verilog語言的思路,并進(jìn)一步掌握操作BASYS2板的使用;掌握計數(shù)器的設(shè)計方法,

2、模塊之間的協(xié)調(diào)方式,了解電路設(shè)計層次。2 設(shè)計容與要求 多功能時鐘設(shè)計分為基本電路部分和拓展功能部分和特色部分。Ø 基本電路部分l 以數(shù)字形式顯示時、分、秒的時間;(要求可切換顯示)l 小時計數(shù)器為同步24進(jìn)制;(同步計數(shù)器)l 可精確手動校時,包括小時,分鐘,秒;設(shè)有按鈕,每按一次相應(yīng)按鈕可使對應(yīng)的時間循環(huán)改變,以校時用 手動校時時,長按按鈕可加速校時速度。Ø 拓展部分l 可設(shè)定24小時任意時刻鬧鐘(精確到秒),設(shè)定按鈕與校時按鈕共用。設(shè)有鬧鐘開關(guān)鍵l 整點(diǎn)報時 59分51秒 59分53秒 59分55秒59分57秒 led7:4流水燈式依次點(diǎn)亮以模仿電臺播音(頻率為1HZ

3、)59分59秒時 led燈led3點(diǎn)亮 頻率為10HZØ 特色部分 stopwatch可儲存記憶10組59分59秒99時間數(shù)據(jù)的秒表??娠@示記錄的數(shù)據(jù)個數(shù)和對應(yīng)順序精確到1/100秒設(shè)有 swo(秒表模式開啟鍵) K3 swp(暫停鍵) L3scrl(數(shù)據(jù)控制鍵)B4Ncr(清零復(fù)位鍵) A7 counter(記錄數(shù)據(jù)鍵) M4 - (數(shù)據(jù)加鍵) C11 + (數(shù)據(jù)減鍵)G12Switch (顯示切換鍵)-P113代碼分析 top_clock 總共分為頂層和底層l 頂層 top.v計時部分:調(diào)用底層模塊10位計數(shù)器 6位計數(shù)器 3位計器 4*6=24位寄存器 t23:0Cnt3:0

4、second0 t7:4 second1Cnt11:8 minute0 t15:12 minute1Cnt19:16 hour0 t23:20 hour1校時部分:設(shè)計為信號選擇器 ad=1時為計時模式,信號為校時信號 ad =0時 為正常計時模式數(shù)據(jù)顯示部分: 設(shè)有切換switch端 數(shù)碼管掃描自動掃描 1KHZ4*8=32位寄存器Temp31:0 分為校時模式顯示 ad=1 set=0 swo=0 - t鬧鐘設(shè)置模式顯示 ad=0 set=1 swo=0- t1秒表計時模式顯示 ad=0 set=0 swo=1- t2正常走時模式顯示 其余- tl 底層部分 計數(shù)器 counter10.v

5、 counter6.v counter3.v/ counter10.v(09)module counter10(en,ncr,clk,q); input en,ncr,clk;output 3:0 q;reg 3:0 q;always(posedge clk )beginif(ncr) q<=4'd0;/ncr=0時,異步清零else if(en) q<=q;/ EN=0,暫停計數(shù)else if (q=4'b1001) q<=4'b0000; else q<=q+1;/計數(shù)器加1endendmodule鬧鐘設(shè)定模塊 bell.v t1 代碼見附錄

6、仿電臺報時 radio.v 代碼見附錄秒表 stopwatch.v t2 代碼見附錄4實(shí)驗(yàn)容與步驟(1) 創(chuàng)建工程 命名為 top_clock(2) 選擇BASYS2型號 并完成創(chuàng)建(3)新建verilogmodule文件 命名為top(3) 添加完整代碼完整代碼見附錄(4) 檢查語法直至通過 雙擊 SynthesizeXST (5) 創(chuàng)建時鐘信號約束 即CLK (6) 創(chuàng)建管腳約束 雙擊 管腳設(shè)置為管腳分布a0-a3-àK14 F12 J12 M13 數(shù)碼管掃描信號 adj0adj3-àG12 C11 M4 A7 校時與鬧鐘設(shè)定與秒表按鈕 led0-led7-à

7、M5 M11 P7 P6 N5 N4 P4 G1 led燈 segs0-segs6-àL14 H12 N14 N11 P12 L13 M12 數(shù)碼管 rcrlàF3 仿電臺播報開關(guān) scrl-àB4 秒表顯示切換開關(guān) bcrlàN3 鬧鈴開關(guān) setàE2 鬧鐘設(shè)定按鈕 adàG3 校時按鈕 switchàP11 顯示切換按鈕 swoàK3 秒表開關(guān) swpàL3 秒表暫停開關(guān) CLKàB8 時鐘信號 50MHz(7) 邏輯綜合 (8) 下載到BASYS2板上打開bit文件 下載到板子上在板子上

8、試驗(yàn)(5) 實(shí)驗(yàn)結(jié)果的測試和仿真 仿真波形如下:Counter10Counter6Counter3BellRadio 實(shí)驗(yàn)結(jié)果與說明: (詳見視頻)(1) 正常走時模式Switch=1 時顯示 分分:秒秒Switch=0時顯示 時時:分分;(2) 手動校時模式 ad=1 set=0 swo=0使ad=1,每按一下 switch=1,每按一下循環(huán)加一(分分秒秒) A7 M4 C11 G12 A7 M4 C11 G12 switch=0,每按一下循環(huán)加一(時時分分) A7 M4 C11 G12例如設(shè)定為20:12:08(3) 鬧鐘設(shè)定和開關(guān)模式 (brcl) N3 ->鬧鈴(led燈 )開關(guān)

9、 鬧鈴響時 M11 M5亮燈以10MHZ 閃爍 鬧鈴設(shè)定 ad=0 set=1 swo=0 設(shè)置方法和校時方法共用鍵(A7 M4 C11 G12) 方法一樣(4) 秒表模式 ad=0 set=0 swo=1(swp) 暫停鍵 低電平有效A7 清零鍵 (包括數(shù)據(jù)清零)M4 記錄數(shù)據(jù)鍵 每按一次 記錄一個時間數(shù)據(jù)(59分59秒99以)可記錄10組數(shù)據(jù) 并可顯示當(dāng)前數(shù)據(jù)的序號Switch=0時 顯示C 數(shù)據(jù)序號 分 分Switch=1時 秒 秒 0.1秒 0.01秒 C11 () 數(shù)據(jù)減鍵 序號循環(huán)減一 最小為1G12(+) 數(shù)據(jù)加鍵 序號循環(huán)加一 最大為9 序號即為數(shù)據(jù)記錄 的順序(5) 其他按法

10、 皆為正常走時模式6實(shí)驗(yàn)總結(jié)通過多功能時鐘的設(shè)計過程,我深刻的感覺到復(fù)雜電路設(shè)計的思路和方法特別重要,好的方法不僅省時省力,也可使程序運(yùn)行更穩(wěn)定快速高效。此次的多功能時鐘分為好幾個大的模塊,怎樣能恰當(dāng)好處的連接這些模塊是需要經(jīng)驗(yàn)的,通過這次試驗(yàn)我也初步積累到了一些經(jīng)驗(yàn):端口盡量不要太多,能調(diào)用模塊盡量調(diào)用,可省時省力,模塊與模塊之間盡量獨(dú)立,但又要設(shè)置好端口之間的連接,中間變量不宜過多,但適當(dāng)?shù)闹虚g變量省下不好麻煩。例如我就設(shè)置啦顯示的中間變量temp31:0 通過不同的模式轉(zhuǎn)換將不同的值賦給temp變量,這樣顯示的代碼就可重復(fù)使用。與此同時,在設(shè)計中也還有值得改進(jìn)的地方,就是按鈕使用過多,操

11、作方法顯得有些復(fù)雜,可以進(jìn)一步優(yōu)化改進(jìn)。 遇到的最主要的問題:秒表設(shè)計模塊中的1/100秒在數(shù)碼管上無常快速顯示(由于led燈的余輝效應(yīng)造成)記錄數(shù)據(jù)時的準(zhǔn)確度也就下降 ,人們正常按鍵時間或大于0.01秒 所以秒表的十分位為準(zhǔn)確位 百分位不準(zhǔn)確7參考文獻(xiàn)【1】 Verilog hdl與數(shù)字asic設(shè)計基礎(chǔ)8.4 和8.5(羅杰主編)(8)附錄(源代碼)module top(set,ad,swo,swp,switch,bcrl,rcrl,scrl,clk,adj,segs,a,led); input ad,set,swo,bcrl,rcrl,scrl,swp,switch,clk;/定義輸入端口

12、 input 3:0 adj; output 6:0 segs;/數(shù)碼管 output 3:0 a;/掃描輸出 output 7:0 led;/led燈 reg 3:0 a; reg 6:0 segs;/shu ma guan reg 31:0 temp; wire 23:0t;/走時模式和校時模式臨時變量 wire 23:0t1;/鬧鐘模式臨時變量 wire 31:0t2;/ 秒表模式臨時變量 /使能信號 initial begin a=4'b1110; end /chu shi hua wire eno,enp1,enp2,enp3,enp4,enp5; in50MHz_out1H

13、z u0(clk,cp1);/輸出頻率1HZ in50MHz_out1kHz u7(clk,cp2);/輸出頻率1kHZ掃描信號 in50MHz_out10Hz u8(clk,cp3);/輸出頻率10HZ in50MHz_out100Hz u12(clk,cp4);/100Hz counter10 u1(en0,0,cp,cnt3:0); /second個位計數(shù) counter6 u2(enp1,0,cp,cnt7:4);/second十位計數(shù) counter10 u3(enp2,0,cp,cnt11:8);/minutes個位計數(shù) counter6 u4(enp3,0,cp,cnt15:12

14、);/minutes十位計數(shù) counter10 u5(enp4,0,cp,cnt19:16);/hours個位計數(shù) counter3 u6(enp5,0,cp,cnt23:20); /hours十位計數(shù) bell u9(switch,set,bcrl,adj,cp3,cnt,cnt1,led1:0);/鬧鐘模塊 radio u10(rcrl,cnt15:0,cp1,cp3,led7:3);/仿真報時模塊 stopwatch u11(swo,scrl,swp,adj,cp4,cp3,cnt2);/秒表模塊 assign cp= ad?cp3:cp1, en0=(ad)|(switch&

15、adj0), enp1=ad?(cnt3:0=4'h9):(adj1&switch),/產(chǎn)生second十位計數(shù)使能信號 enp2=ad?(cnt7:4=4'd5)&(cnt3:0=4'd9):(adj0&switch=0),/產(chǎn)生minutes個位計數(shù)使能信號 enp3=ad?(enp2&(cnt11:8=4'd9):(adj1&switch=0),/產(chǎn)生minutes十位計數(shù)使能信號 enp4=ad?(enp3&(cnt15:12=4'd5):(adj2&switch=0),/產(chǎn)生hours個位

16、計數(shù)使能信號 enp5=ad?(enp4&cnt19:16=4'd9):(adj3&switch=0),/產(chǎn)生hours十位計數(shù)使能信號led2=0; always(ad or set or swo) /顯示模式選擇 if(ad)&set&(swo) begin temp15:0<=cnt115:0;temp31:16<=cnt123:8;end else if( (ad)&(set)&swo) temp<=cnt2; else begin temp15:0<=cnt;temp31:16<=cnt23:8;e

17、nd always(posedge cp2) / 掃描信號循環(huán)變化 if(a=4'b1110) a<=4'b1101;/J12 else if(a=4'b1101) a<=4'b1011;/M13 else if(a=4'b1011) a<=4'b0111;/k14 else a<=4'b1110;/F12 always(posedge cp2) /數(shù)碼管顯示譯碼 if(switch=1'b0) begin if(a=4'b1110) begin case(temp19:16) 4'd0:

18、segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b1111000;4'd8: segs <=

19、7'b0000000;4'd9: segs <= 7'b0010000;default segs <= 7'b1111111; endcase end else if(a=4'b1101) begin case(temp23:20) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: se

20、gs <= 7'b0011001;4'd5: segs <= 7'b0010010;default segs <= 7'b1111111; endcase end else if(a=4'b1011) begin case(temp27:24)/hours個位 4'h0: segs <= 7'b1000000;4'h1: segs <= 7'b1111001;4'h2: segs <= 7'b0100100;4'h3: segs <= 7'b0110

21、000;4'h4: segs <= 7'b0011001;4'h5: segs <= 7'b0010010;4'h6: segs <= 7'b0000010;4'h7: segs <= 7'b1111000;4'h8: segs <= 7'b0000000;4'h9: segs <= 7'b0010000;4'ha: segs <= 7'b0001000;default segs <= 7'b1111111; endcase e

22、nd else begin case(temp31:28)/hours十位 4'h0: segs <= 7'b1000000;4'h1: segs <= 7'b1111001;4'h2: segs <= 7'b0100100;4'h3: segs <= 7'b0110000;4'h4: segs <= 7'b0011001;4'h5: segs <= 7'b0010010;4'h6: segs <= 7'b0000010;4'h7:

23、segs <= 7'b1111000;4'h8: segs <= 7'b0000000;4'h9: segs <= 7'b0010000;4'ha: segs <= 7'b0001000;4'hb: segs <= 7'b0000011;4'hc: segs <= 7'b1000110;default segs <= 7'b1111111; endcase end end else if(switch=1) begin if(a=4'b1110) c

24、ase(temp3:0) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b111100

25、0;4'd8: segs <= 7'b0000000;4'd9: segs <= 7'b0010000;default segs <= 7'b1111111; endcase else if(a=4'b1101) case(temp7:4) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4

26、'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b1111000;4'd8: segs <= 7'b0000000;4'd9: segs <= 7'b0010000; default segs <= 7'b1111111; endcase else if(a=4'b1011) case(temp11:8) 4&#

27、39;d0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011001;4'd5: segs <= 7'b0010010;4'd6: segs <= 7'b0000010;4'd7: segs <= 7'b1111000;4'd8: segs

28、 <= 7'b0000000;4'd9: segs <= 7'b0010000; default segs <= 7'b1111111; endcase else case(temp15:12) 4'd0: segs <= 7'b1000000; 4'd1: segs <= 7'b1111001;4'd2: segs <= 7'b0100100;4'd3: segs <= 7'b0110000;4'd4: segs <= 7'b0011

29、001;4'd5: segs <= 7'b0010010;default segs <= 7'b1111111; endcase endendmodule/ counter10.v(09) module counter10(en,ncr,clk,q); input en,ncr,clk;output 3:0 q;reg 3:0 q;always(posedge clk )beginif(ncr) q<=4'd0;/ncr=0時,同步清零else if(en) q<=q;/ EN=0,暫停計數(shù)else if (q=4'b1001)

30、q<=4'b0000; else q<=q+1;/計數(shù)器加1endendmodule/ counter6.v(05)module counter6(en,ncr,clk,q); input en,ncr,clk;output 3:0 q;reg 3:0 q;always(posedge clk )beginif(ncr) q<=4'b0000;/NCR=0,同步清零else if(en) q<=q;/EN=0,暫停計數(shù)else if(q=4'b0101) q<=4'b0000;else q<=q+1'b1;/計數(shù)器增1

31、endendmodule/counter3.vmodule counter3(en,ncr,clk,q); input en,ncr,clk; output 3:0 q; reg 3:0 q; always(posedge clk )begin if(ncr) q<=4'b0000;/NCR=0,同步清零 else if(en=0) q<=q;/EN=0,暫停計數(shù) else if(q=4'd2) q<=4'b0000; else q<=q+1'b1;/計數(shù)器增1 endendmodule/分頻模塊1Hzmodule in50MHz_out

32、1Hz(in_50MHz,out_1Hz); input in_50MHz; output out_1Hz; reg out_1Hz; reg 31:0cnt; /uset to count always(posedge in_50MHz) begin if(cnt < 32'd24999999)/計數(shù)到24999999begin cnt <=t + 1'B1; end else begint <= 32'b0; out_1Hz <= out_1Hz; /頻率為1HZ end endendmodule/分頻模塊1KHzmodule in50MHz

33、_out1kHz(in_50MHz,out_1kHz); input in_50MHz; output out_1kHz; reg out_1kHz; reg 31:0cnt; /uset to count always(posedge in_50MHz) begin if(cnt < 32'd24999)/計數(shù)到24999begin cnt <=t + 1'B1; end else begint <= 32'b0; out_1kHz <= out_1kHz; /頻率為1kHZ end endendmodule module in50MHz_ou

34、t10Hz(in_50MHz,out_10Hz); input in_50MHz; output out_10Hz; reg out_10Hz; reg 31:0cnt; /uset to count always(posedge in_50MHz) begin if(cnt < 32'd2499999)/計數(shù)到2499999begin cnt <=t + 1'B1; end else begint <= 32'b0; out_10Hz <= out_10Hz; /頻率為10HZ end endendmodule module in50MHz_o

35、ut100Hz(in_50MHz,out_100Hz); input in_50MHz; output out_100Hz; reg out_100Hz; reg 31:0cnt; /uset to count always(posedge in_50MHz) begin if(cnt < 32'd249999)/計數(shù)到249999begin cnt <=t + 1'B1; end else begint <= 32'b0; out_100Hz <= out_100Hz; /頻率為100HZ end endendmodule module bel

36、l(switch,set,crl,p,clk,cnt,cnt1,led ); /鬧鐘模塊 input switch,set,crl,clk; input 23:0t; input 3:0 p; output 23:0t1; output 1:0 led; reg led; reg cl; adjust f(clk,set,switch,p,cnt1); always(negedge clk) if(cnt>=cnt1)&(cnt1+22'h59>=cnt)&crl) cl=1; else cl=0; always(negedge clk) if (cl) l

37、ed<=led; else led<=2'b00; endmodulemodule adjust(clk,ad,switch,adj,cnt1); /鬧鐘里面的定時模塊 input switch,ad,clk; input 3:0 adj; output 23:0t1; reg 23:0t1; always(posedge clk) if(switch=0&ad=1) case(adj) 4'b0001:begin if(cnt111:8=4'd9)t111:8<=4'd0; else t111:8<=cnt111:8+1'

38、;d1;end 4'b0010:begin if(cnt115:12=4'd5)t115:12<=4'd0; else t115:12<=cnt115:12+1'd1;end 4'b0100:begin if(cnt119:16=4'd9)t119:16<=4'd0; else t119:16<=cnt119:16+1'd1;end 4'b1000:begin if(cnt123:20=4'd2)t123:20<=4'd0; else t123:20<=cnt123:20

39、+1'd1;end default t1<=cnt1; endcaseelse if(switch=1&ad=1) case(adj) 4'b0001:begin if(cnt13:0=4'd9)t13:0<=4'd0; else t13:0<=cnt13:0+1'd1;end 4'b0010:begin if(cnt17:4=4'd5)t17:4<=4'd0; else t17:4<=cnt17:4+1'd1;end 4'b0100:begin if(cnt111:8=4&#

40、39;d9)t111:8<=4'd0; else t111:8<=cnt111:8+1'd1;end 4'b1000:begin if(cnt115:12=4'd5)t115:12<=4'd0; else t115:12<=cnt115:12+1'd1;end default t1<=cnt1; endcase else t1<=cnt1;endmodule/radio.vmodule radio(rcrl,cnt,clk1,clk2,led); /仿真報時模塊 input rcrl,clk1,clk2; in

41、put 15:0t; output 4:0 led; reg c; reg c2; reg led; always(cnt) if(cnt15:8=8'h59) case(cnt7:0) 8'h50, 8'h52, 8'h54, 8'h56: c<=1; 8'h59: c2<=1; default :begin c<=0;c2<=0;endendcaseelse begin c<=0;c2<=0;end always(posedge clk1) if(c&c2&rcrl) case(cnt7:0

42、) 8'h50:led4:1<=4'b1000; 8'h52:led4:1<=4'b0100; 8'h54:led4:1<=4'b0010; 8'h56:led4:1<=4'b0001; default: led4:1<=4'b0000; endcase else led4:1<=4'b0000; always(posedge clk2) if(c&c2&rcrl) led0<=1;else led0<=0;endmodule/stopwatch.v /秒表模塊module stopwatch(start,crl,en,p,clk1,clk2,temp ); input start,crl,en,clk1,clk2; input 3:0 p; output 31:0 temp; wire 23:0 t; wire enp0,enp1,enp2,enp3,enp4,enp5,cp1,cp2,cp3; reg 23:0 temp1,temp2,temp3,temp4,temp5,temp6,temp7, temp8,temp9; reg 31:0 temp; reg 3:

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論