模块posedge_detection(输入rst_n,输入i_data_in,输出o_rising_edge);注册r_data_in0;注册r_data_in1;分配o_rising_edge=~ r_data_in0 & r_data_in1;总是 @(posedge clk , negedge rst_n) 如果 (! rst_n) 开始 r_data_in0 <=0;r_data_in1 <=0;结束否则开始 r_data_in0<= r_data_in1;r_data_in1<= i_data_in;end end end endmodule为以上代码编写测试激励
时间: 2023-08-10 07:08:59 浏览: 97
假设输入的rst_n和i_data_in分别为1位二进制数,可以编写以下测试激励:
```
module test;
reg rst_n;
reg i_data_in;
wire o_rising_edge;
posedge_detection dut (
.rst_n(rst_n),
.i_data_in(i_data_in),
.o_rising_edge(o_rising_edge)
);
initial begin
$dumpfile("test.vcd");
$dumpvars(0, test);
// Test case 1 - no rising edge
rst_n = 1'b1;
i_data_in = 1'b0;
#10;
$display("Test case 1: no rising edge. o_rising_edge = %b", o_rising_edge);
// Test case 2 - rising edge
rst_n = 1'b1;
i_data_in = 1'b1;
#10;
$display("Test case 2: rising edge. o_rising_edge = %b", o_rising_edge);
// Test case 3 - reset
rst_n = 1'b0;
i_data_in = 1'b1;
#10;
$display("Test case 3: reset. o_rising_edge = %b", o_rising_edge);
// Test case 4 - no rising edge after reset
rst_n = 1'b1;
i_data_in = 1'b0;
#10;
$display("Test case 4: no rising edge after reset. o_rising_edge = %b", o_rising_edge);
// Test case 5 - rising edge after reset
rst_n = 1'b1;
i_data_in = 1'b1;
#10;
$display("Test case 5: rising edge after reset. o_rising_edge = %b", o_rising_edge);
end
endmodule
```
这个测试激励将模拟5个测试用例:
1. 没有上升沿,o_rising_edge应该为0。
2. 有一个上升沿,o_rising_edge应该为1。
3. 发生复位,o_rising_edge应该为0。
4. 复位后没有上升沿,o_rising_edge应该为0。
5. 复位后有一个上升沿,o_rising_edge应该为1。
阅读全文