Testbench的一些技巧

  • 1.基本概念
  • Testbech是一种验证的手段,但是在软环境中没有激励输入,也不会对你设计的输出正确性进行评估。那么此时便有一种,模拟实际环境的输入激励和输出校验的一种“虚拟平台”的产生。在这个平台上你可以对你的设计从软件层面上进行分析和校验,这个就是testbench的含义
  • 2.初步认识
  • Testbech像是一个激励的产生器。例如一个ram可能有几个input和output:clk(时钟输入),addr(地址输入),wen(写使能),data(数据输入),dataout(数据输出)。可以写一个文件,给clk,addr,wen,data送入预想的一些信号,然后观察输出,看看ram是否工作正常。这个文件就是一个testbench.在quartus、Modelsim等仿真软件中添加.v文件,可以提供debug及波形显示接口进行结果观察,这里的激励都是根据某个协议、某种通信方式预先设定好进行传输的。
  • 3.编写技巧
  • Testbech是一个没有输入输出端口的模块,与待测模块输入端相连接的变量定义为reg,与输出端口相连接的定义为wire,必须在initial块中初始化变量,用$stop$finish暂停或结束仿真,wait(z==1'b1)//等待变量值改变
  • 时钟产生的一种技巧:initial repeate(13) #5 clk = ~clk;控制只产生13个时钟周期
  • 同步数据:initial forever @(posedge clk) #3 x = $random;为了降低多个输入同时翻转的概率,对时序电路的输入一般采用素数作为时间间隔。
  • 同步显示:initial $monitor("%d is changed at %t",MUT.current,$time);一般在initial中调用,采用$monitor显示模块MUT内部current的值以及发生变化的时间,$monitor是一个后台运行任务函数,多个模块下,任意时间只能有一个$monitor起作用。
  • always @(z)$display(“Output changed at %t to %b”,$time,z);当z发生变化输出z值以及变化时间,自动换行
  • always @(z)$strobe(“Output changed at %t to %b”,$time,z);仿真结束后显示输出,查看非阻塞赋值变量的值
posted @ 2022-07-15 12:29  million_yh  阅读(261)  评论(0编辑  收藏  举报