用Verilog语言设计一个同步复位、使能、预置数功能的60进制计数器。
时间: 2024-03-20 17:44:44 浏览: 28
下面是一个同步复位、使能、预置数功能的60进制计数器的 Verilog 设计代码,其中计数器位数为 6,即能够表示 0-59 的数字。
```verilog
module counter(
input clk, // 时钟信号
input rst_n, // 复位信号,低电平有效
input en, // 使能信号,高电平有效
input [5:0] preset, // 预置数,取值范围 0~59
output reg [5:0] cnt // 计数器输出
);
always @(posedge clk) begin
if (!rst_n) begin
cnt <= 6'b0;
end else if (en) begin
cnt <= cnt + 1'b1;
if (cnt == 6'h3C) begin // 判断是否达到 60
cnt <= 6'b0;
end
end
end
// 预置数逻辑
always @(posedge clk) begin
if (!rst_n) begin
cnt <= 6'b0;
end else if (en == 0 && preset != cnt) begin
cnt <= preset;
end
end
endmodule
```
以上代码中,我们使用了两个 always 块。第一个 always 块用于计数,并在计数达到 60 时自动清零。第二个 always 块用于处理预置数,当使能信号为 0 且预置数和计数器的值不相等时,将计数器的值设为预置数。