根据下列代码,写出仿真源代码。module clk_div( input clk, input rst_n, output reg clk_20ms ); parameter CLK_DIV =21'd2_000_000; reg [20:0] clk_cnt; always @(posedge 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 19:01:55 浏览: 82
以下是根据代码编写的仿真源代码:
```verilog
module clk_div_sim;
reg clk, rst_n;
wire clk_20ms;
parameter CLK_DIV = 21'd2_000_000;
reg [20:0] clk_cnt;
clk_div uut (
.clk(clk),
.rst_n(rst_n),
.clk_20ms(clk_20ms)
);
initial begin
clk = 0;
rst_n = 0;
#10 rst_n = 1;
repeat(10000) begin
#5 clk = ~clk;
end
end
always @(posedge clk) begin
if (rst_n == 0) begin
clk_cnt <= 21'd0;
end else if (clk_cnt == (CLK_DIV/2) - 21'd1) begin
clk_cnt <= 21'd0;
end else begin
clk_cnt <= clk_cnt + 21'd1;
end
end
endmodule
```
在此仿真中,我们使用 `clk_div` 模块,并将其实例化为 `uut`。我们使用 `initial` 块来生成时钟和重置信号,并在仿真期间重复时钟。我们使用 `always` 块来模拟 `clk_div` 模块的行为。
阅读全文