module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:1] ena,
output [15:0] q);
reg [3:0]unit,ten,hun,thu;
//个位循环0~9
always@(posedge clk)begin
if(reset)
unit <= 4'b0;
else if(unit == 9)
unit <= 4'b0;
else
unit <= unit + 1'b1;
end
// 十位循环,先判断十位上是不是9,是就接着判断个位上是不是9,个位数是9,十位为0,个位不是9,十位保持不变。不是就在个位是9的时候+1
always@(posedge clk)begin
if(reset)
ten <= 4'b0;
else if(ten==9)
begin if(unit==9)
ten <= 4'b0;
else
ten<= ten;
end
else if(unit ==9)
ten <= ten +1'b1;
else
ten <= ten;
end
// 百位循环,先判断百位上是不是9,是就接着判断十位个位上是不是99,是99,百位为0,不是99,百位保持不变。不是就在个位和十位是99的时候+1。因为百位数是逢100进一
always@(posedge clk)begin
if(reset)
hun <= 4'b0;
else if(hun==9)
begin if(ten==9&unit==9)
hun <= 4'b0;
else
hun <= hun;
end
else if(ten==9&unit==9)
hun <= hun + 1'b1;
else
hun <= hun;
end
always@(posedge clk)begin
if(reset)
thu <= 4'b0;
else if(thu==9)begin
if(hun==9&ten==9&unit==9)
thu <= 4'b0;
else
thu <= thu;
end
else if(hun==9&ten==9&unit==9)
thu <= thu + 1'b1;
else
thu <= thu;
end
assign q = {thu,hun,ten,unit};
assign ena = {hun==9&ten==9&unit==9,ten==9&unit==9,unit ==9};
endmodule
HDLbits 4位BCD计数器2
最新推荐文章于 2023-11-13 20:58:11 发布