FPGA中testbench特殊调试语句用法
1、 三态信号
inout在testbench中定义为wire型变量,利用assign语句来实现数据的读写
wire a; //将双向接口变量定义为wire型
reg b ; //定义一个reg型的中间变量,作为双向口的输出寄存
reg c ; //定义输出使能,用于控制传输的方向
assign a = (c)?b:1'bz;
2、 仿真模块控制语句
$stop //中断运行仿真,modelsim中可以通过窗口控制继续仿真
$stop(n) //带参数系统任务,根据参数0,1,或2不同,输出仿真信息
$finish //结束运行仿真,不可继续仿真
$finish(n) //带参数系统任务,根据参数的不同:0,1或2,输出仿真信息
// 0: 不输出任何信息
// 1: 输出当前仿真时刻和位置
// 2:输出房前仿真时刻、位置和仿真过程中用到的memory以及cpu时间的统计
$random //产生随机数
$random%n //产生范围-n到n之间的随机数
{$random}%n //产生范围0到n之间的随机数
3、在modelsim窗口中打印信息
语法与C语言printf函数类似,
$monitor //仿真打印输出,打印出仿真过程中的变量,使其终端显示
/* $monitor($time,,,"clk = %d reset = %d out = %d",clk,reset,out); */
$display //终端打印字符串,显示仿真结果等
/* $display("Simulation start !");
$display("At time %t,input is %b %b %b,output is %b",$time,a,b,en,z); */
$time //返回64位整型时间
$stime //返回32位整型时间
$realtiime //实行实型模拟时间
4、文本数据的输入和输出
文本的读取与MATLAB类似,采用readmem函数。一般涉及到读入文本时都是需要一些特殊的无规律的数据。
$readmemb/$readmemh("<数据文件名>",<存储器名>);
$readmemb/$readmemh("<数据文件名>",<存储器名>,<起始地址>);
$readmemb/$readmemh("<数据文件名>",<存储器名>,<起始地址>,<结束地址>);
$readmemb:/*读取二进制数据,读取文件内容只能包含:空白位置,注释行,二进制数 数据中不能包含位宽说明和格式说明,每个数字必须是二进制数字。*/
$readmemh: /*读取十六进制数据,读取文件内容只能包含:空白位置,注释行,十六进制数数据中不能包含位宽说明和格式说明,每个数字必须是十六进制数字。*/