【正文】
000。b0001。(!sel0)amp。(!sel2)) begin if(MH==439。amp。d9) begin MH=439。 ML=439。 end else if(ML==439。b0001。b0000。b0001。amp。amp。amp。b0000。b0000。(!sel0)amp。(!sel2)) begin if(HH==439。amp。d3) begin HH=439。 HL=439。 end else if(HL==439。b0001。b0000。b0001。(!sel0)amp。(!sel2)) begin if(MH==439。amp。d9) begin MH=439。 ML=439。 end else if(ML==439。b0001。b0000。b0001。d9amp。SH==439。h0。h0。d9amp。MH==439。h0。h0。d2amp。HL==439。h0。h0。d9) begin HH=HH+439。 HL=439。 end else HL=HL+439。 end else if(ML==439。h0。b0001。b0001。d9) begin SH=SH+439。 SL=439。 end else SL=SL+439。 end end end endendmodule//秒脈沖分頻器模塊module secclk(clk_in,clk_out,nCR )。 output clk_out。d0。b0。d0。d24999999) begin clk_out=~clk_out。d0。d1。令S1=1,可見時鐘在秒脈沖的上升沿從00:00:00變?yōu)?1:00:00。源代碼如下://1224小時轉換電路module TO_12(t,t_out,switch )。 input switch。 reg [23:0]t_out。 else begin case(t[23:16]) 839。b0001_0010。b00010011:t_out[23:16]=839。 839。b0000_0010。b00010101:t_out[23:16]=839。 839。b0000_0100。b00010111:t_out[23:16]=839。 839。b0000_0110。b00011001:t_out[23:16]=839。 839。b0000_1000。b00100001:t_out[23:16]=839。 839。b0001_0000。b00100011:t_out[23:16]=839。 default:t_out[23:16]=t[23:16]。 end end endmodule波形圖如下:波形的第一行是輸出的顯示信號,第二行是輸入信號(分別輸入13:00:00和14:00:00,第三行是切換信號。模塊(3)顯示電路: 顯示電路的原理是通過高速的掃描(1000Hz)讓四個數(shù)碼管輪流顯示數(shù)字,從而讓人眼產(chǎn)生錯覺,認為數(shù)碼管一直亮著。掃描模塊用來產(chǎn)生1000Hz的信號,相當于分頻器。顯示模塊通過不斷的掃描將數(shù)字顯示出來。 input CP。 output [6:0]show。 reg [1:0] Q=239。 reg [3:0] num,sw。 always(posedge sm) begin case(Q) 239。 sw[0]=0。 sw[2]=1。 end 239。 sw[0]=1。 sw[2]=1。 end 239。 sw[0]=1。 sw[2]=0。 end 239。 sw[0]=1。 sw[2]=1。 end endcase Q=Q+239。 end translator trans(num,show)。 input clk_in。 reg [24:0]t=2539。 reg clk_out=139。 always (posedge clk_in ) begin if(t==2539。 t=139。 end else t=t+139。 endendmodule//數(shù)碼管譯碼器模塊module translator(num,led)。 output [6:0]led。 always (*) case(num) 439。b0000001。b0001:led=739。 439。b0010010。b0011:led=739。 439。b1001100。b0101:led=739。 439。b0100000。b0111:led=739。 439。b0000000。b1001:led=739。 default:led=739。 endcaseendmodule波形圖如下Show為輸入數(shù)碼管的波形,sw為數(shù)碼管掃描開關,sel為切換時分或分秒,t為時間。仿廣播電臺的報時功能是在56秒亮,57秒熄滅,58秒亮,59秒熄滅,00秒亮三秒。整點報時功能基于十二小時制。//CP為掃描信號,int為當前時間,led_out為整點報時功能,spark為仿廣播電臺報時功能input CP。output [3:0]led_out。reg [3:0]led_out。//仿廣播電臺報時功能always (posedge CP) begin if(int[15:0]==1639。 else if(int[15:0]==1639。 else if(int[15:0]==1639。else if(int[15:0]==1639。 else if(int[15:0]==1639。 else if(int[15:0]==1639。 else if(int[15:0]==1639。 else spark=0。b000000010000000000000000)led_out=439。 else if (int[23:0]==2439。b0010。b000000110000000000000000)led_out=439。 else if (int[23:0]==2439。b0100。b000001010000000000000000)led_out=439。 else if (int[23:0]==2439。b0110。b000001110000000000000000)led_out=439。 else if (int[23:0]==2439。b1000。b000010010000000000000000)led_out=439。 else if (int[23:0]==2439。b1010。b000100010000000000000000)led_out=439。 else if (int[23:0]==2439。b1100。b000100110000000000000000)led_out=439。 else if (int[23:0]==2439。b0010。b000101010000000000000000)led_out=439。 else if (int[23:0]==2439。b0100。b000101110000000000000000)led_out=439。 else if (int[23:0]==2439。b0110。b000110010000000000000000)led_out=439。 else if (int[23:0]==2439。b1000。b001000010000000000000000)led_out=439。 else if (int[23:0]==2439。b1010。b001000110000000000000000)led_out=439。 else if (int[23:0]==2439。b1100。b0000。波形檢測了在01:59:56到02:00