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.
module top_module (
input clk,
input reset, // Synchronous active-high reset
output reg [3:1] ena,
output reg [15:0] q);
always@(posedge clk)
if(reset)
ena <= 3'd0;
else begin
if(q[3:0]==4'd8) begin
ena <= 3'b001;
if(q[7:4]==4'd9) begin
ena <= 3'b011;
if(q[11:8]==4'd9)
ena <= 3'b111;
else
ena <= 3'b011;
end
else
ena <= 3'd001;
end
else
ena <= 3'd000;
end
always@(posedge clk)
if(reset) begin
q <= 16'd0;
end
else begin
if(q[3:0]==4'd9) begin
q[3:0] <= 4'd0;
end
else begin
q[3:0] <= q[3:0] + 1'b1;
end
if(ena[1]) begin
if(q[7:0] == 8'h99) begin
q[7:4]<=4'd0;
end
else begin
q[7:4] <= q[7:4] + 1'b1;
end
end
if(ena[2]) begin
if(q[11:0] == 12'h999)begin
q[11:8] <= 4'd0;
end
else begin
q[11:8] <= q[11:8] + 1'b1;
end
end
if(ena[3]) begin
if(q[15:0] == 16'h9999)begin
q[15:12] <= 4'd0;
end
else
q[15:12] <= q[15:12] + 1'b1;
end
end
endmodule
要将使能ena信号与计数q信号分开赋值,分别再两个always 模块中完成设计