資源描述:
《基于veriloghdl的數(shù)字時鐘》由會員上傳分享,免費在線閱讀,更多相關內容在學術論文-天天文庫。
1、/**************************************************************頂層模塊信號定義:clk:基準時鐘信號輸入;keysel:校時狀態(tài)/正常計時狀態(tài)選擇鍵輸入;key_s:校秒信號選擇鍵輸入;key_m:校分信號選擇鍵輸入;key_h:校時信號選擇鍵輸入;keyclr:計時清零鍵;keyen:計時開始鍵;buzzout:聲響輸出;sled:4位數(shù)碼管段碼輸出;sl:4位數(shù)碼管位碼輸出;seg:單個數(shù)碼管輸出;*************************************************
2、**************/moduleclock(clk,keysel,key_s,key_m,key_h,keyen,keyclr,sled,sl,seg,buzzout);output[7:0]sled;output[3:0]sl;output[7:0]seg;outputbuzzout;inputclk;inputkeysel,key_s,key_m,key_h,keyen,keyclr;reg[24:0]count;wire[23:0]min;wiresec;wiresec_s,sec_m,sec_h,sec_narmal;divclkQ1(clk,
3、sec_narmal,sec_s,sec_m,sec_h);modifyQ2(clk,keysel,key_s,key_m,key_h,sec,sec_narmal,sec_s,sec_m,sec_h);counttimeQ3(sec,keyclr,keyen,min);displayQ4(clk,sec,min,sled,sl,seg);musicQ5(clk,min,buzzout,sec_narmal);endmodule/**************************************************************分頻模塊信
4、號定義:clk:基準時鐘信號輸入;sec_narmal:周期為1的信號輸出;sec_s:周期為0.5s的信號輸出;sec_m:周期為0.05s的信號輸出;sec_h:周期為0.0005s的信號輸出;***************************************************************/moduledivclk(clk,sec_narmal,sec_s,sec_m,sec_h);inputclk;outputsec_narmal,sec_s,sec_m,sec_h;reg[23:0]count1;reg[22:0]count
5、2;reg[19:0]count3;reg[12:0]count4;regsec_narmal,sec_s,sec_m,sec_h;always@(negedgeclk)begincount1=count1+1'b1;if(count1==24'd12000000)begincount1=24'h0;sec_narmal=~sec_narmal;endendalways@(negedgeclk)begincount2=count2+1'b1;if(count2==23'd6000000)begincount2=23'h0;sec_s=~sec_s;endenda
6、lways@(negedgeclk)begincount3=count3+1'b1;if(count3==20'd600000)begincount3=20'h0;sec_m=~sec_m;endendalways@(negedgeclk)begincount4=count4+1'b1;if(count4==13'd6000)begincount4=13'h0;sec_h=~sec_h;endendendmodule/**************************************************************計時處理模塊信號定義:
7、sec:計時信號輸入;keyclr:計時清零鍵;keyen:計時開始鍵;min:計時結果輸出;***************************************************************/modulecounttime(sec,keyclr,keyen,min);inputsec;inputkeyclr,keyen;output[23:0]min;reg[23:0]min;always@(posedgesec)beginif(!keyclr)beginmin=24'h0;endelseif(!keyen)beginmin=min
8、+1'b1;if(min