數(shù)字時鐘verilog_第1頁
數(shù)字時鐘verilog_第2頁
數(shù)字時鐘verilog_第3頁
數(shù)字時鐘verilog_第4頁
數(shù)字時鐘verilog_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、因?yàn)楸救艘彩莿倢W(xué)習(xí)fpga的菜鳥,所以這個程序漏洞很多,僅供參考。/分頻子模塊module fenpin (clk,rst_n,en_1s,en_1ms); /產(chǎn)生1s,1ms的分頻input clk;input rst_n;output en_1s;output en_1ms;reg31:0 jishu_1s;reg15:0 jishu_1ms;parameter cnt_1s =49999999; parameter cnt_1ms =49999; always(posedge clk or negedge rst_n) begin if(!rst_n) jishu_1s<=32&#

2、39;b0;else if(jishu_1s<cnt_1s) jishu_1s<=jishu_1s+1'b1;else jishu_1s<=32'b0; endalways(posedge clk or negedge rst_n) begin if(!rst_n) jishu_1ms<=16'b0;else if(jishu_1ms<cnt_1ms) jishu_1ms<=jishu_1ms+1'b1;else jishu_1ms<=16'b0; end assign en_1s=(jishu_1s=cnt_1

3、s)? 1'b1 : 1'b0; /1sassign en_1ms=(jishu_1ms=cnt_1ms)? 1'b1 : 1'b0; /1msendmodule/按鍵控制部分module anjian(clk,rst_n,key1,key2,key1_low,key2_low);input clk;input rst_n;input key1; / 分加input key2; / 分減output key1_low; /按鍵按下消抖后的標(biāo)志位output key2_low;reg reg0_key; /key1消抖reg reg1_key;reg reg2_k

4、ey; /key2消抖reg reg3_key;always (posedge clk or negedge rst_n) begin if(!rst_n) begin reg0_key <= 1'b1; reg1_key <= 1'b1; end else begin reg0_key <= key1; reg1_key <= reg0_key; /根據(jù)非阻塞賦值的原理,reg1_key 存儲的值是reg0_key 上一個時鐘的值 end end /脈沖邊沿檢測法,當(dāng)寄存器 key1 由 1 變?yōu)?0 時,key1_an 的值變?yōu)楦撸S持一個時鐘周期

5、wire key1_an; assign key1_an = reg1_key & ( reg0_key); always (posedge clk or negedge rst_n) begin if(!rst_n) begin reg2_key <= 1'b1; reg3_key <= 1'b1; end else begin reg2_key <= key2; reg3_key <= reg2_key; end end/脈沖邊沿檢測法,當(dāng)寄存器 key2 由 1 變?yōu)?0 時,key2_an 的值變?yōu)楦?,維持一個時鐘周期 wire key2

6、_an; assign key2_an = reg3_key & ( reg2_key); reg19:0 cnt_key1; /計(jì)數(shù)寄存器 always (posedge clk or negedge rst_n) begin if (!rst_n) cnt_key1 <= 20'd0; /異步復(fù)位 else if(key1_an) cnt_key1 <=20'd0; /led1_an=1,按鍵確認(rèn)按下,cnt_key1從0開始計(jì)數(shù) else cnt_key1 <= cnt_key1 + 1'b1; end reg19:0 cnt_key2;

7、 /計(jì)數(shù)寄存器always (posedge clk or negedge rst_n) begin if (!rst_n) cnt_key2 <= 20'd0; else if(key2_an) cnt_key2 <=20'd0; else cnt_key2 <= cnt_key2 + 1'b1; end /以下為消抖程序 reg reg_low; reg reg1_low; always (posedge clk or negedge rst_n) begin if (!rst_n) begin reg_low <= 1'b1; en

8、d else if(cnt_key1 = 20'hfffff) /時鐘50mhz的話大約計(jì)時是20ms begin reg_low <= key1; /led_an=1,按鍵確認(rèn)按下,cnt_key從0開始計(jì)數(shù),這時候還有消抖動,計(jì)數(shù)20ms后抖動濾除了此時再鎖存一下key1的值 end /這時key1的值就穩(wěn)定了 end always (posedge clk or negedge rst_n) begin if (!rst_n) reg1_low <= 1'b1; else reg1_low <= reg_low; end assign key1_low

9、= reg1_low & ( reg_low); /當(dāng)寄存器 reg_low 由 1 變?yōu)?0 時,key_low 的值變?yōu)楦?,維持一個時鐘周期 reg reg2_low; reg reg3_low; always (posedge clk or negedge rst_n) begin if (!rst_n) begin reg2_low <= 1'b1; end else if(cnt_key2 = 20'hfffff) begin reg2_low <= key2; end end always (posedge clk or negedge rst_

10、n) begin if (!rst_n) reg3_low <= 1'b1; else reg3_low <= reg2_low; end assign key2_low = reg3_low & ( reg2_low); endmodule/時、分、秒module shijian(clk,rst_n,en_1s,key1_low,key2_low,shi,fen,miao);input clk;input rst_n;input en_1s;input key1_low;input key2_low;output5:0 shi;output5:0 fen;outp

11、ut5:0 miao;reg 5:0 shi;reg 5:0 fen;reg 5:0 miao;always(posedge clk or negedge rst_n) begin if(!rst_n) begin shi<=6'b0; fen<=6'b0; miao<=6'b0; endelse if(en_1s) begin miao=miao+1'b1; if(miao=60) begin miao=0; fen=fen+1'b1; if(fen=60) begin fen=0; shi=shi+1'b1; if(shi=

12、24) shi=0; end end endelse if(key1_low) begin fen=fen+1'b1; if(fen=60) begin fen=0; shi=shi+1'b1; if(shi=24) shi=0; end endelse if(key2_low) begin fen=fen-1'b1; if(fen=0) begin shi=shi-1'b1; fen=59; end end else begin shi<=shi; fen<=fen; miao<=miao; end endendmodule/顯示部分modu

13、le xianshi(clk,rst_n,en_1ms,shi,fen,miao,led_bit,dataout);input clk;input rst_n;input en_1ms;input5:0 shi;input5:0 fen;input5:0 miao;output7:0 led_bit; /位選output7:0 dataout; /段選/數(shù)碼管顯示 09 對應(yīng)段選輸出parameter num0 = 8'b11000000, num1 = 8'b11111001, num2 = 8'b10100100, num3 = 8'b10110000, n

14、um4 = 8'b10011001, num5 = 8'b10010010, num6 = 8'b10000010, num7 = 8'b11111000, num8 = 8'b10000000, num9 = 8'b10010000;reg3:0 shi1,shi2,fen1,fen2,miao1,miao2; reg7:0 led_bit; /位選reg7:0 dataout; /段選reg2:0 state; /狀態(tài)寄存器always(posedge clk or negedge rst_n) if(!rst_n) begin led_bi

15、t<=8'b1; state<=3'b0; end else if(en_1ms) begin state<=state+1'b1; shi1=shi/10; shi2=shi%10; fen1=fen/10; fen2=fen%10; miao1=miao/10; miao2=miao%10; if(state=3'b000) beginled_bit=8'b11111110;case(miao2) 0: dataout<=num0; 1: dataout<=num1; 2: dataout<=num2; 3: da

16、taout<=num3; 4: dataout<=num4; 5: dataout<=num5; 6: dataout<=num6; 7: dataout<=num7; 8: dataout<=num8; 9: dataout<=num9; default :dataout<=num0; endcase end else if(state=3'b001) beginled_bit=8'b11111101;case(miao1) 0: dataout<=num0; 1: dataout<=num1; 2: dataout

17、<=num2; 3: dataout<=num3; 4: dataout<=num4; 5: dataout<=num5; default :dataout<=num0; endcase end else if(state=3'b010) beginled_bit=8'b11110111;case(fen2) 0: dataout<=num0; 1: dataout<=num1; 2: dataout<=num2; 3: dataout<=num3; 4: dataout<=num4; 5: dataout<=n

18、um5; 6: dataout<=num6; 7: dataout<=num7; 8: dataout<=num8; 9: dataout<=num9; default :dataout<=num0; endcase end else if(state=3'b011) beginled_bit=8'b11101111;case(fen1) 0: dataout<=num0; 1: dataout<=num1; 2: dataout<=num2; 3: dataout<=num3; 4: dataout<=num4; 5

19、: dataout<=num5; endcase end else if(state=3'b100) begin led_bit=8'b10111111;case(shi2) 0: dataout<=num0; 1: dataout<=num1; 2: dataout<=num2; 3: dataout<=num3; 4: dataout<=num4; default :dataout<=num0; endcase end else if(state=3'b101) begin led_bit=8'b01111111;case(shi1) 0: dataout<=num0; 1: dataout<=num1; 2: dataout<=num2; endcase end else if(state=3'b110) beginled_bit=8'b11011011;dataout<=8'b10111111; end end else begin dataout<=dataout; led_bit<=led_bit; endendmodule/頂層模塊module Shizhong(clk,rst_n

溫馨提示

  • 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

提交評論