testbench写法(以串口通信为例)

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

 

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值