【正文】
(posedge clk) begin if(!nCR) begin led=0。d0。 reg led。 input CP,nCR。 end end end endendmodule//鬧鐘報(bào)時(shí)模塊module time_alarm(t0,t1,led,CP,nCR )。 end else ML=ML+439。 ML=439。d9) begin MH=MH+439。b0000。b0000。ML==439。d5amp。(!sel1)amp。 end else if(S0amp。 end else HL=HL+439。 HL=439。d9) begin HH=HH+439。b0000。b0000。HL==439。d2amp。(!sel1)amp。 end else begin if(S1amp。 end else ML=ML+439。 ML=439。d9) begin MH=MH+439。b0000。b0000。ML==439。d5amp。(!sel1)amp。 end else if(AMamp。 end else HL=HL+439。 HL=439。d9) begin HH=HH+439。b0000。b0000。HL==439。d2amp。(!sel1)amp。 end else begin if(AHamp。 ML=439。 MH=439。 HL=439。 always (posedge clk) begin if(!nAR) begin HH=439。 secclk second(CP,clk,nAR)。 reg [3:0]HH,HL,MH,ML。 input S0,S1,nAR,AH,AM,CP,sel0,sel1,sel2。鬧鐘報(bào)時(shí)模塊的功能是到達(dá)特定時(shí)刻點(diǎn)時(shí)led燈亮一分鐘。模塊(5)鬧鐘電路:鬧鐘電路由鬧鐘設(shè)置模塊、鬧鐘時(shí)鐘切換模塊和鬧鐘報(bào)時(shí)模塊三個(gè)大模塊組成,其中鬧鐘設(shè)置模塊和鬧鐘報(bào)時(shí)模塊又分別各包含一個(gè)秒脈沖模塊。 endendmodule波形圖如下:第一行為整點(diǎn)報(bào)時(shí)信號led_out,第二行為仿廣播電臺報(bào)時(shí)spark,第三行為脈沖,第四行為從01:59:56到02:00:02的時(shí)鐘信號。 else led_out=439。b001001000000000000000000)led_out=439。b1011。 else if (int[23:0]==2439。b001000100000000000000000)led_out=439。b1001。 else if (int[23:0]==2439。b001000000000000000000000)led_out=439。b0111。 else if (int[23:0]==2439。b000110000000000000000000)led_out=439。b0101。 else if (int[23:0]==2439。b000101100000000000000000)led_out=439。b0011。 else if (int[23:0]==2439。b000101000000000000000000)led_out=439。b0001。 else if (int[23:0]==2439。b000100100000000000000000)led_out=439。b1011。 else if (int[23:0]==2439。b000100000000000000000000)led_out=439。b1001。 else if (int[23:0]==2439。b000010000000000000000000)led_out=439。b0111。 else if (int[23:0]==2439。b000001100000000000000000)led_out=439。b0101。 else if (int[23:0]==2439。b000001000000000000000000)led_out=439。b0011。 else if (int[23:0]==2439。b000000100000000000000000)led_out=439。b0001。 end //整點(diǎn)報(bào)時(shí)功能always (posedge CP) begin if (int[23:0]==2439。b0000000000000010)spark=1。b0000000000000001)spark=1。b0000000000000000)spark=1。b0101100101011001)spark=0。b0101100101011000)spark=1。b0101100101010111)spark=0。b0101100101010110)spark=1。reg spark。output spark。input [23:0]int。 源代碼如下://報(bào)時(shí)模塊module baoshi(CP,int,led_out,spark )。整點(diǎn)報(bào)時(shí)的功能是在整點(diǎn)用二進(jìn)制led顯示當(dāng)前時(shí)刻(如十點(diǎn)則亮1010)。模塊(4)報(bào)時(shí)電路: 報(bào)時(shí)模塊分為仿廣播電臺報(bào)時(shí)和整點(diǎn)報(bào)時(shí)。b0000000。b0000100。 439。b1000:led=739。b0001111。 439。b0110:led=739。b0100100。 439。b0100:led=739。b0000110。 439。b0010:led=739。b1001111。 439。b0000:led=739。 reg [6:0]led。//num為輸入信號,led為數(shù)碼管的顯示信號 input [3:0]num。d1。d0。d24999) begin clk_out=~clk_out。b0。d0。 output clk_out。endmodule//掃描信號分頻器模塊(生成1000Hz的掃描信號)module smCP(clk_in,clk_out )。b01。 sw[3]=0。 sw[1]=1。b11:begin num=t_now[15:12]。 sw[3]=1。 sw[1]=1。b10: begin num=t_now[11:8]。 sw[3]=1。 sw[1]=0。b01: begin num=t_now[7:4]。 sw[3]=1。 sw[1]=1。b00:begin num=t_now[3:0]。 smCP smcp(CP,sm)。b00。 output [3:0]sw。 input [15:0] t_now。源代碼如下://顯示譯碼模塊module show(show,CP ,sw,t_now )。譯碼模塊可以將時(shí)鐘信號轉(zhuǎn)化成數(shù)碼七段管的顯示信號。顯示電路中包括顯示模塊、掃描模塊和譯碼模塊??梢娫?3:00時(shí)第一行輸出的波形分別是13:00和1:00。 endcase t_out[15:0]=t[15:0]。b0001_0001。 839。b00100010:t_out[23:16]=839。b0000_1001。 839。b00100000:t_out[23:16]=839。b0000_0111。 839。b00011000:t_out[23:16]=839。b0000_0101。 839。b00010110:t_out[23:16]=839。b0000_0011。 839。b00010100:t_out[23:16]=839。b0000_0001。 839。b00000000:t_out[23:16]=839。 always(*) begin if(!switch) t_out=t。 output [23:0]t_out。//t為輸入信號,t_out為輸出信號,switch為選擇開關(guān) input[23:0]t。模塊(2)1224小時(shí)轉(zhuǎn)換電路: 1224小時(shí)轉(zhuǎn)換電路的原理是將12小時(shí)和24小時(shí)的顯示模式進(jìn)行相互轉(zhuǎn)化,得到想要的顯示。 end end