📄 counter55.v
字号:
module counter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out);
output C_out; //计数满后脉冲输出
output [3:0] D_OUT1;//计数器高位输出
output [3:0] D_OUT0;//计数器地位输出
input C_CLK; //1hz的方波信号
input RST; //低电平复位
input C_EN; //高电平计数器工作
reg [3:0] D_OUT1;
reg [3:0] D_OUT0;
reg C_out;
reg [3:0] CData1; //计数值
reg [3:0] CData0;
reg [7:0] DATA;
always @(posedge C_CLK) //采用加计数,然后转换成到计数当前的值
begin
if(RST==0||C_EN==0)//系统复位或者未工作状态
begin
C_out <= 1'b0;
CData1 <= 4'b0000;
CData0 <= 4'b0000;
end
else //加计数器
begin
if(CData0 == 4'b0101 && CData1 == 4'b0101)
begin
CData1 <= 4'b0000;
CData0 <= 4'b0000;
C_out = 1'b1;
end
else if(CData0 != 4'b1001)
begin
CData0 <= CData0 + 1;
C_out <= 1'b0;
end
else if(CData0 == 4'b1001 && CData1 != 4'b0110)
begin
CData1 <= CData1 + 1;
CData0 <= 4'b0000;
C_out <= 1'b0;
end
else
begin
CData1 <= 4'b0000;
CData0 <= 4'b0000;
C_out = 1'b1;
end
end
end
always //加计数器的计数值到倒计时的数值转换
begin
DATA <= 8'b01010101-((CData1<<4)+CData0);//55-当前计数值为倒计时值(BCD码表示的)
if(((DATA>>4)&4'b1111)>4'b0101) //如果倒计时值高位大于5
D_OUT1 <= (DATA>>4)&4'b1111-4'b1111;//
else
D_OUT1 <= (DATA>>4)&4'b1111;//
if((DATA&4'b1111)>4'b1001)//
D_OUT0 <= (DATA&4'b1111)-4'b0110;//
else
D_OUT0 <= DATA&4'b1111;//
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -