模为80的BCD码计数器,要求: (1) 输入clk,clear;输出qout。 (2) 行为描述,异步清零,高电平有效。(3)编写testbench
时间: 2023-11-28 15:51:03 浏览: 120
以下是符合要求的Verilog代码:
```
module bcd_counter(clk, clear, qout);
input clk, clear;
output reg [3:0] qout;
always @(posedge clk or negedge clear) begin
if (!clear) begin
qout <= 4'b0000;
end else begin
qout <= qout + 1;
if (qout >= 4'b1000) begin
qout <= 4'b0000;
end
end
end
endmodule
```
以下是对应的testbench代码:
```
module bcd_counter_tb();
reg clk, clear;
wire [3:0] qout;
bcd_counter dut(.clk(clk), .clear(clear), .qout(qout));
initial begin
clk = 0;
clear = 1;
#10 clear = 0;
#10 clear = 1;
#20 clear = 0;
#100 $finish;
end
always #5 clk = ~clk;
endmodule
```
在testbench中,我们将clear信号先拉高,然后拉低,以启动计数器。之后每隔20个时间单位,我们通过将clear信号拉低并保持一段时间来触发一次计数器。最后通过$finish指令结束仿真。
阅读全文