Testbench要素:
clock (时钟) reset(复位)trigger(激励/触发条件)
原理框图:
编写步骤:
新建一个_tb.v文件进行testbench的编写
1,编写激励:时钟 + 复位信号
2,例化主模块
与被测模块输入端口对应的变量应该声明为reg类型,因为reg类型可以存储数据,为被测模块提供激励;与被测模块输出端口对应的变量应该声明为wire类型,即通过wire来引出被测模块的输出
即:
主模块中所有的input都在tb中定义为reg型,
所有的output都在tb中定义为wire型
3,使用时钟刻度
4,代码贴上
`timescale 1ns/1ns module uart_loopback_top; reg sys_clk ; reg sys_rst_n ; //低电平有效
reg uart_rxd ; wire uart_txd ;
initial begin sys_clk <= 1'b0; //系统时钟初始化为0 sys_rst_n <= 1'b0; uart_rxd <= 1'b1; #100 sys_rst_n <= 1'b1; //延迟100ns后拉高复位 //起始位 #10 uart_rxd <= 1'b0; //延迟避免冒险与竞争 //有效数据 #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b0; #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b0; #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b1; #8680 uart_rxd <= 1'b0; #8680 uart_rxd <= 1'b0; //停止位 #8680 uart_rxd <= 1'b1; end always #10 sys_clk =~sys_clk; //每10ns时钟翻转一次,则时钟频率为50Mhz
//例化主模块 uart_loopback_top uart_loopback_top_u( .sys_clk (sys_clk ), .sys_rst_n (sys_rst_n ), .uart_rxd (uart_rxd ),
.uart_txd (uart_txd ) );
Endmodule |