请根据下列代码写出仿真源代码。module clk_dlv( input sys_clk , input rst_n, output reg clk_20ms ); parameter CLK_DIV =21'd2_000_000; reg [20:0] clk_cnt=0; always @(posedge sys_clk or negedge rst_n)begin if(!rst_n)begin clk_cnt <=21'd0; clk_20ms<= 21'd1; end else if(clk_cnt==CLK_DIV/2-21'd1) begin clk_cnt <= 21'd0; clk_20ms<=~clk_20ms; end else begin clk_cnt <=clk_cnt+21'd1; clk_20ms<= clk_20ms; end end endmodule
时间: 2024-01-30 11:04:04 浏览: 73
以下是仿真源代码:
```verilog
module tb_clk_dlv;
reg sys_clk, rst_n;
wire clk_20ms;
clk_dlv dut (
.sys_clk(sys_clk),
.rst_n(rst_n),
.clk_20ms(clk_20ms)
);
initial begin
sys_clk = 0;
rst_n = 0;
#10 rst_n = 1;
#100000 $finish;
end
always #5 sys_clk = ~sys_clk;
endmodule
```
在这个仿真源代码中,我们实例化了 `clk_dlv` 模块,并将其输入和输出与测试程序中的信号连接。我们使用了一个简单的测试程序,其中时钟信号 `sys_clk` 每隔 5 个时间单位就翻转一次。在模拟过程中,我们给 `rst_n` 信号一个低电平复位,然后在 10 个时间单位后将其拉高。最后,我们在仿真过程中等待 100000 个时间单位,然后结束仿真。
阅读全文