module Divider( input wire clk_in, input wire rst, input wire [1:0] pwm, output wire out ); reg [25:0] counter; reg out_reg; always @(posedge clk_in or posedge rst) begin if (rst) counter <= 0; else if (counter == 100000) begin counter <= 0; out_reg <= (counter < pwm); end else begin counter <= counter + 1; end end assign out = out_reg; endmodule 写相对应的仿真代码
时间: 2024-04-09 17:29:00 浏览: 114
仿真代码如下:
```verilog
module Divider_tb;
reg clk_in;
reg rst;
reg [1:0] pwm;
wire out;
Divider dut (
.clk_in(clk_in),
.rst(rst),
.pwm(pwm),
.out(out)
);
initial begin
clk_in = 0;
forever #5 clk_in = ~clk_in;
end
initial begin
rst = 1;
#10 rst = 0;
#100 $finish;
end
initial begin
pwm = 2'b00;
#50 pwm = 2'b01;
#50 pwm = 2'b10;
#50 pwm = 2'b11;
#100 $finish;
end
endmodule
```
以上是一个简单的Divider模块的仿真测试台代码。模块实例化了Divider模块,并通过reg类型的输入信号(clk_in, rst, pwm)和wire类型的输出信号(out)连接到模块的对应端口。仿真代码中使用initial块来控制时钟信号(clk_in)的变化和输入信号(rst, pwm)的变化。在仿真中,clk_in信号每5个时间单位变化一次,rst信号在10个时间单位后变为0,pwm信号在仿真开始后的不同时间单位中依次变化。仿真结束后,使用$finish结束仿真过程。
阅读全文