testbench
textbench的写法中,主要就是对信号进行初始化(时钟,输入数据等),时钟信号的生成。这里这介绍一些基础的用法。在后面,要结合python写一下脚本对结果进行一些比对等。
基础写法
这个是延时的符号,表示延时多久才进行操作,只能在仿真中使用,没有对应实际的电路。
方法1
1 2 3 4 5 6 7 8 9 10
| module top_module ( ); parameter clk_period = 10; reg clk; initial begin clk = 0; forever #(clk_period/2) clk = ~clk; end dut dut_inst1(clk); endmodule
|
方法2
1 2 3 4 5 6 7 8 9
| module top_module ( ); parameter clk_period = 10; reg clk; initial begin clk = 0; end always #(clk_period/2) clk = ~clk; dut dut_inst1(clk); endmodule
|
编写激励[^2]
基础的部分还是通过延时来解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| module top_module ( output reg A, output reg B ); parameter A_period_1 = 10; parameter A_period_2 = 10; parameter B_period_1 = 15; parameter B_period_2 = 25; initial begin A = 0; #A_period_1; A = 1; #A_period_2; A = 0; end initial begin B = 0; #B_period_1; B = 1; #B_period_2; B = 0; end endmodule
|
一个简单的testbench
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| module top_module(); parameter clk_period = 10; reg in; reg clk; reg [2:0] s; reg [2:0] qs [7:0]; reg [2:0] i = 3'd1; reg out; initial begin clk = 0; qs[0] = 3'd2; qs[1] = 3'd6; qs[2] = 3'd2; qs[3] = 3'd7; qs[4] = 3'd0; s = qs[0]; forever #(clk_period/2) clk = ~clk; end initial begin in = 0; #(2*clk_period); in = 1; #(clk_period); in = 0; #(clk_period); in = 1; #(3*clk_period); in = 0; end always @(negedge clk) begin if(i<3'd4)begin s <= qs[i]; i <= i + 3'd1; end else begin s <= qs[4]; end end q7 inst( clk, in, s, out ); endmodule
|
参考资料
[^2]: Verilog testbench总结(一)_坚持-CSDN博客_testbench怎么写