原创 Testbench编写技巧

2010-3-9 16:53 3474 4 5 分类: FPGA/CPLD

测试平台是个没有输入输出端口的模块。仿真在一个模块设计中是很关键的步骤,而testbench是仿真的很好工具。


与待测模块接口<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


与输入端口相连接的变量定义为reg


与输出端口相连的定义为wire


 


initial块中初始化变量,必须的。


$stop$finish暂停或结束仿真


wait(z==<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1’b1);//等待变量值改变,变量可以是待测试模块的输出或者内部变量


时钟产生:


always # 10 clk =~clk;产生时钟


initial repeat(13) #5 clk =~clk; //控制只产生13个时钟。


 


同步数据:


initial forever @ (posedge clk) #3 x = $random;


为了降低多个输入同时翻转的概率,对时序电路的输入一般采用素数作为时间间隔。


同步显示:


l         initial $monitor (“%d is changed at %t”,MUT.current,$time);//


一般在 initial中调用,采用$monitor显示模块MUT内部current的值以及发生变化的时间,$monitor是一个后台运行任务函数,多个模块下,任意时间只能有一个$monitor起作用,可用$monitoron $monitoroff来控制。


l         always @(z) $display(“Output changed at %t to %b”,$time,z);z发生变化输出z值以及变化时间,自动换行。


l         always @(z) $strobe(“Output changed at %t to %b”,$time,z);//仿真结束后显示输出,查看非阻塞赋值变量的值。


 


随机数据


initial repeat(5) #7 x = $random;


a = $random%60; //产生-59~59之间随机数


a = {$random}%60; //产生0~59之间随机数


 


产生随机时间间隔


always begin


       t= $random;


#(t) x = $random;


end


 


数据缓存


initial buffer = 16’b1110_0001_1011_0101;//将测试数据进行初始化


always @ ( posedge clk) #1 {x,buffer} = {buffer,x};//可以在控制的数据下输入信号x


 


读取数据文件


reg [7:0] mem1[0:1024];


initial begin


       $readmemh( “data1.dat” , mem1);


 


模板:


`timescale 1ns/100ps


`include “*.v”


module t;


参数定义


输入测试模块的测试信号定义 reg,wire


内部变量定义


initial begin


初始化变量


$monitor (“%d is changed at %t”,MUT.current,$time);//监控数据


forever @ (posedge clk) #3 x = $random;//同步数据


repeat(5) #7 x = $random;


end


always @(z) $display(“Output changed at %t to %b”,$time,z);


always @(z) $strobe(“Output changed at %t to %b”,$time,z);


always # 10 clk =~clk;//产生时钟


always begin//


       t= $random;


#(t) x = $random;


end


 模块实例化


       defparam module. WIDTH = 32;


endmodule


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1413281 2011-9-15 16:05

顶,写的非常好,感谢博主。
相关推荐阅读
用户180508 2011-08-08 22:29
运算放大器指标
1.输入失调电压VIO(input offset voltage) :输入电压为零时,将输出电压除以电压增益,再加上负号,即为折算到输入端的失调电压。亦即使输出电压为零时在输入端所加的补偿电压。VIO...
用户180508 2011-02-18 22:21
UDE(u盘超级加密2008)失效解决
UDE伪装成唐诗三百首的加密软件,在忘记密码资料还没有丢失,操作系统改变时加密文件没有显示在加密区内。此时文件也没有丢失。 采用R-Studio(注册后)可以探测到隐藏的文件,并恢复。 本人遇到的隐藏...
用户180508 2011-02-01 12:35
Altea公司FPGA开发软件安装指南与注意
Quartus II安装点击Setup,和安装其他应用程序一样。可以根据自己的需要决定安装的大小。比如可以选择是否安装某种型号的器件 QuartusII8.0 破解补丁1将sys_cpt.dll覆盖掉...
用户180508 2011-02-01 12:02
Altea公司FPGA开发软件安装指南与注意
Quartus II安装点击Setup,和安装其他应用程序一样。可以根据自己的需要决定安装的大小。比如可以选择是否安装某种型号的器件QuartusII8.0 破解补丁1将sys_cpt.dll覆盖掉安...
用户180508 2011-02-01 12:01
Altea公司FPGA开发软件安装指南与注意
Quartus II安装点击Setup,和安装其他应用程序一样。可以根据自己的需要决定安装的大小。比如可以选择是否安装某种型号的器件QuartusII8.0 破解补丁1将sys_cpt.dll覆盖掉安...
用户180508 2010-12-30 10:18
VC安装错误解决
安装VC++6.0时候总是说我的安装程序无法创建一个DCOM用户来注册? 右击我的电脑-》管理-》本地用户和组-》用户-》删除VSA Sever Account项 再安装,成功!...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条