3.2.2.1 Four-bit binary counter
问题描述
构建一个从 0 到 15(含)计数的 4 位二进制计数器,周期为 16。复位输入是同步的,复位将计数器复位为 0。
代码:
module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:0] q);
always @(posedge clk) begin
if(reset)
q<=0;
else if(q==4'd15)
q<=0;
else
q<=q+4'd1;
end
endmodule
3.2.2.2 Decade counter
问题描述
构建一个从 0 到 9(含)计数的十进制计数器,周期为 10。复位输入是同步的,应将计数器复位为 0。
代码:
module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:0] q);
always @(posedge clk) begin
if(reset)
q<=0;
else if(q==4'd9)
q<=0;
else
q<=q+4'd1;
end
endmodule
3.2.2.3 Decade counter again
问题描述
制作一个从 1 到 10 的十进制计数器,包括 1 到 10。复位输入是同步的,应将计数器复位为 1。
代码:
module top_module (
input clk,
input reset,
output [3:0] q);
always @(posedge clk) begin
if(reset)
q<=4'd1;
else if(q==4'd10)
q<=4'd1;
else
q<=q+4'd1;
end
endmodule
3.2.2.4 Slow decade counter
问题描述
构建一个从 0 到 9 计数的十进制计数器,周期为 10。复位输入是同步的,应该将计数器复位为 0。我们希望能够暂停计数器,而不是总是在每个时钟周期递增,所以slowena输入指示计数器何时应该增加。
提示:这是一个带有启用控制信号的常规十进制计数器
代码:
module top_module (
input clk,
input slowena,
input reset,
output [3:0] q);
always @(posedge clk) begin
if(reset)
q<=0;
else if(slowena) begin
if(q==4'd9)
q<=0;
else
q<=q+4'd1;
end
end
endmodule