薇儿安蓝

testbench中的显示、打印任务的使用

0
阅读(4258)

一、在Testbench中有4个最常用的显示、打印任务的系统函数:$display,$write,$strobe,$monitor。这四个函数用于在模拟中进行文本的输出操作。

①、$display函数,类似于C语言中的printf函数,其调用格式如下:$display([format_string],[argument],[argument],....);

其中[format_string]包含了普通的可打印字符输出以及“escape sequences”(控制argument格式字符)。

ie:$display("at %d ; signal x = %b", $time, x); %d和%b是"escape sequences",指定当前仿真时间($time)以及x 的输出格式分别为十进制和二进制

②、$write,与$display的含义基本一样,只是调用$write输出后不自动换行。'\n'必须添加到格式控制串中,以实现换行

ie:$wwrite("at %d ; signal x = %b\n", $time, x);

③、$strobe 与$display的含义基本一样。不过当调用$strobe时不是立即执行,而不在当前仿真时间的末尾执行,从而避免了由于竞争而引起的数据的不匹配

④、$monitor,$display, $write, $strobe这三个任务每次调用只执行一次。而$monitor任务每当其中一个参量变换时便开始执行。因此常常用于跟踪变量的变化。

 ie: $monitor ("%d           %b                     %b                %b", $time, test_in0, test_in1, test_out);             //每当三个变量中任意一个变化时,输出

二、外部数据文件的访问操作

与文件操作有关的任务函数有:$fopen, $fclose(打开与关闭文件的函数)

①写文件操作:$fdisplay, $fwrite, $fstrobe, $fmonitor与上述的4个函数的功能一摸一样,只不过调用的时候要用到文件通道描述子

interger mcd_name;

mcd_name = $fopen("abc.txt");

$fdisplay([mcd_name], [format_string], argument, argument,....);

②读文件相关的操作

有两个系统函数可以用于从外部文件读入数据:$readmemb,$readmemh。这两个任务假设外部文件中存储这一个存储阵列中的内容并将这些内容读到一个变量中。一个假定存储器中的内容为二进制,另一个假定为16进制,在这两个系统任务中,被读取的文件的内容只能包含:空白位置(空格,换行,制表符(Tab)和form_feeds),注释行(//形式和/*...*/形式的都允许)。数字中不能包含位宽说明和格式说明。对于两种任务,每个数字必须是二进制数据和十六进制数据。数字钟不定值x,高阻值z,和下划线(_)的使用方法及代表意义与一般Verilog HDL程序中的用法及意义是一样的。另外数字之间必须用空白位置或者注释行来分隔开。

其调用格式如下:

$readmemb("[file_name]", [mem_variable]);

$readmemh("[file_name]", [mem_variable]);

ie:  reg [3:0]v_mem[7:0];...

      $readmemb("vector.txt", v_mem);         //this file should contain eight 4-bit binary data separated by white spaces