最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

电子钟 (FPGA设计verilog代码)

来源:动视网 责编:小OO 时间:2025-10-03 22:05:39
文档

电子钟 (FPGA设计verilog代码)

//*****************************************//电子钟:24小时制时分秒////作者:yotain////clk50M时钟CP1Hz输出可接LED指示灯//nCR清零(必须接低电平异步清零)//Adj_Min(分校正低电平计时必须接)//Adj_Hour(时校正低电平计时必须接)//dataout(数码管输出)//en(数码管使能端)//(HourMinuteSecond可以不接也可以单独接数码管一位的)//修改bcd_decoder即可修改显示///
推荐度:
导读//*****************************************//电子钟:24小时制时分秒////作者:yotain////clk50M时钟CP1Hz输出可接LED指示灯//nCR清零(必须接低电平异步清零)//Adj_Min(分校正低电平计时必须接)//Adj_Hour(时校正低电平计时必须接)//dataout(数码管输出)//en(数码管使能端)//(HourMinuteSecond可以不接也可以单独接数码管一位的)//修改bcd_decoder即可修改显示///
//*****************************************

//电子钟:24小时制时分秒

//

//作者:yotain

//

//clk 50M时钟 CP 1Hz输出 可接LED指示灯

//nCR 清零(必须接 低电平异步清零)

//Adj_Min (分校正 低电平计时 必须接)

//Adj_Hour (时校正 低电平计时 必须接)

//dataout (数码管输出)

//en (数码管使能端)

//(Hour Minute Second 可以不接 也可以单独接数码管一位的)

//修改bcd_decoder 即可修改显示

//

//*****************************************

//************ timeclock top block*************

module top_clock ( Hour, Minute, Second, CP, nCR, EN, Adj_Min, Adj_Hour,clk,dataout,en) ;

input clk, nCR, EN, Adj_Min, Adj_Hour;

output CP;

output [7:0] Hour, Minute, Second,dataout;

output [3:0] en;

wire[7:0]Hour, Minute, Second, dataout;

supply1 Vdd;

wireMinL_EN, MinH_EN, Hour_EN;

//**************Hour, Minute, Second counter************

counter10 U1 ( Second[3:0], nCR, EN, CP);

counter6 U2 ( Second[7:4], nCR, ( Second[3:0]==4'h9), CP);

assign MinL_EN = Adj_Min? Vdd : (Second==8'h59);

assign MinH_EN = ( Adj_Min &&( Minute [3:0] ==4'h59))

|| ( Minute[3:0]==4'h9)&& (Second == 8'h59);

counter10 U3 ( Minute[3:0], nCR, MinL_EN,CP);

counter6U4 ( Minute[7:4], nCR, MinH_EN,CP);

assign Hour_EN = Adj_Hour ? Vdd: ((Minute == 8'h59)&&(Second == 8'h59));

counter24 U5 ( Hour[7:4], Hour[3:0], nCR, Hour_EN,CP);

bcd_decoder U6 (clk,nCR,Hour[7:4],Hour[3:0],Minute[7:4],Minute[3:0],dataout,en);

PULSE U7(clk,CP);

endmodule

//**************counter10 ( BCD 0~9 )*************

module counter10 ( Q, nCR, EN, CP);

inputCP, nCR, EN;

output[3 : 0]Q;

reg[3 : 0]Q;

always @ (posedge CP or negedge nCR)

begin

if( !nCR ) Q<=4'b0000;

else if ( !EN ) Q<=Q;

else if ( Q ==4'b1001) Q <= 4'b0000;

else Q <= Q+1'b1;

end

endmodule

//**************counter6 ( BCD 0~5 )************

module counter6 ( Q, nCR, EN, CP);

input CP, nCR, EN;

output[3:0]Q;

reg[3:0]Q;

always @ (posedge CP or negedge nCR )

begin

if(!nCR)Q<=4'b0000;

else if (!EN)Q<=Q;

else if (Q == 4'b0101) Q<=4'b0000;

else Q <= Q + 1'b1;

end

endmodule

//***************counter24 ( 0~23 )**************

module counter24 ( CntH, CntL, nCR, EN, CP);

input CP, nCR, EN;

output[3:0]CntH,CntL;

reg [3:0]CntH,CntL;

reg CO;

always @ (posedge CP or negedge nCR)

begin

if(!nCR){CntH,CntL} <=8'h00;

else if(!EN){CntH,CntL} <= {CntH,CntL};

else if ( (CntH>2)||(CntL>9) || ( (CntH==2)&&(CntL>=3) ) )

{CntH,CntL} <=8'h00;

else if((CntH==2)&&(CntL<3))

begin

CntH<=CntH;

CntL<=CntL+1'b1;

end

else if (CntL==9)

begin

CntH=CntH+1'b1;

CntL=4'b0000;

end

else begin

CntH<=CntH;

CntL<=CntL+1'b1;

end

end

endmodule

//*************cnt_1Hz*****************

module PULSE ( clk, clk_1Hz);

input clk;

output clk_1Hz;

reg[24:0]cnt_1Hz;

reg R_clk=0;

assign clk_1Hz=R_clk;

always @ (posedge clk)

begin

if (cnt_1Hz==50000000) cnt_1Hz<=0;

else cnt_1Hz<=cnt_1Hz+1;

end

always @ (posedge clk)

begin

if(cnt_1Hz<=25000000) R_clk<=1;

else R_clk<=0;

end

endmodule

//*************bcd_decoder*************

module bcd_decoder (clk,nCR,A,B,C,D,dataout,en);

input clk;//system clock

input nCR;//system reset,low is active

input [3:0] A,B,C,D;

output[7:0] dataout;

output[3:0] en;//enable high is active

reg[7:0] dataout;

reg[4:0] en;

reg[15:0] cnt_scan;

reg[3:0] dataout_buf;

always@(posedge clk or negedge nCR)

begin

if(!nCR) begin

cnt_scan<=0;

end

else begin

cnt_scan<=cnt_scan+1;

end

end

always@(cnt_scan)

begin

case(cnt_scan[15:14])

2'b00:

en=4'b0001;

2'b01:

en=4'b0010;

2'b10:

en=4'b0100;

2'b11:

en=4'b1000;

default:

en=4'b1111;

endcase

end

always@(en)

begin

case(en)

4'b0001:

dataout_buf=A;

4'b0010:

dataout_buf=B;

4'b0100:

dataout_buf=C;

4'b1000:

dataout_buf=D;

default:

dataout_buf=4'b0000;

endcase

end

always@(dataout_buf)

begin

case(dataout_buf)

4'b0000:

dataout=8'b1111_1100;

4'b0001:

dataout=8'b0110_0000;

4'b0010:

dataout=8'b1101_1010;

4'b0011:

dataout=8'b1111_0010;

4'b0100:

dataout=8'b0110_0110;

4'b0101:

dataout=8'b1011_0110;

4'b0110:

dataout=8'b1011_1110;

4'b0111:

dataout=8'b1110_0000;

4'b1000:

dataout=8'b1111_1110;

4'b1001:

dataout=8'b1110_0110;

4'b1010:

dataout=8'b1110_1110;

4'b1011:

dataout=8'b0011_1110;

4'b1100:

dataout=8'b1001_1100;

4'b1101:

dataout=8'b0111_1010;

4'b1110:

dataout=8'b1001_1110;

4'b1111:

dataout=8'b1000_1110;

default :

dataout=8'b0000_0010;

endcase

end

endmodule

//End of RTL code

文档

电子钟 (FPGA设计verilog代码)

//*****************************************//电子钟:24小时制时分秒////作者:yotain////clk50M时钟CP1Hz输出可接LED指示灯//nCR清零(必须接低电平异步清零)//Adj_Min(分校正低电平计时必须接)//Adj_Hour(时校正低电平计时必须接)//dataout(数码管输出)//en(数码管使能端)//(HourMinuteSecond可以不接也可以单独接数码管一位的)//修改bcd_decoder即可修改显示///
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top