Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit is encoded using 4 bits: q[3:0] is the ones digit, q[7:4] is the tens digit, etc. For digits [3:1], also output an enable signal indicating when each of the upper three digits should be incremented.
You may want to instantiate or modify some one-digit decade counters.
生成 4 位 BCD(二进制编码十进制)计数器。每个十进制数字使用 4 位进行编码:q[3:0] 是 7 位,q[4:3] 是十位,依此类推。对于数字 [1:<>],还要输出一个使能信号,指示何时应递增前三位数字中的每一个。
您可能需要实例化或修改一些一位数的十进制计数器。
module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:1] ena,
output [15:0] q);
wire [3:0]c;
assign ena = {c[0] & c[1]& c[2], c[1]& c[0], c[0]};
ten one (
.clk (clk),
.reset (reset),
.count (q[3:0]),
.ena (c[0]),
.val(1'b1)
);
ten ten_inst (
.clk (clk),
.reset (reset),
.count (q[7:4]),
.ena (c[1]),
.val(c[0])
);
ten hud (
.clk (clk),
.reset (reset),
.count (q[11:8]),
.ena (c[2]),
.val(c[0] & c[1])
);
ten thou (
.clk (clk),
.reset (reset),
.count (q[15:12]),
.ena (c[3]),
.val(c[0] & c[1] & c[2])
);
endmodule
module ten(
input clk,
input reset,
input val,
output wire ena,
output reg [3:0] count
);
assign ena = count == 4'd9 ? 1'b1 : 1'b0;
always@ (posedge clk)
if(reset)
count <= 4'd0;
else if (count == 4'd9 && val)
count <= 4'd0;
else if(val)
count <= count + 1;
endmodule