显示任务:$display,$write, 前者总会输出一个换行符,后者不会。固定输出格式版:$displayb/$displayo/$displayh/$writeb/$writeo/$writeh。
(%m 显示模块路径, \转义字符) $fmonitor(file, "%m:%t addr = %h data = %h", $realtime, addr, data);
监控任务:$monitor, $strobe, 前者同一仿真时候只能触发一个task,还有控制任务$monitoron, $monitoroff。后者在某一时刻,记录变量的值到log和STDOUT,在该时刻所有Event已经触发,仿真时间将向前走时。forever @(negedge clock) $strobe("At time %t, data is %h", $time,data);
文件读写:$fopen, $fclose 句柄必须是一个interger类型。类型r/w/a(append),r+/w+/a+ 缺省时,默认是写。
interger Write_Out_file; Write_out_file = $fopen("Write_Out_File.txt"); $fdisplay (Write_Out_File, "%h\n%h", addr, data); $fclose(Write_Out_File);
$fdisplay, $fwrite, $fstrobe, $fmonitor 用法类似,只需要加一个文件句柄。类似的有$fwriteo, $fwriteb, $fwriteh等。
其他几个特殊的任务:
c = $fgetc (fd); 读一个byte到c中。
$swrite, $sformat(output_reg, formal_string, list_of_argument) 按字符串格式输出到一个reg variable。
$fgets(str, fd);读入一行字符到str中。
$fscanf(fd, format, args); 按标准输入到文件fd。
$sscanf(str, format, args);按标准输入到reg str。
$fflush(fd); 将buffer立即输出到fd文件中。
写入memory:$readmemb/readmemh 二进制与16进制。 reg[7:0] mem[1:256]; initial $readmemh("mem_data", mem, 128, 1);
(mem_data中只能有空格,制表符等,注释,2进制/16进制数据。第三位起始地址,第四位结束地址,不特殊写明时,默认从0--$)
$sdf_annotate("sdf_file",,,,,,):将sdf文件读入设计中。可选参数module_instance(反标module,缺省当前模块),log_file(指定输出log的名字),mtm_spec(min/typ/max反标种类),scale_factor(scale因子),scale_type(scale在min/typ/max选择)。
仿真控制:$finish, $stop
随机数产生:$random(seed), $dist_uniform(seed, start, end); 返回有符号32位的随机数。
command line input:$test$plusargs(string)
Run simulator with +HELLO initial begin
if ($test$pluargs("HELLO")) $display();
end
$value$pluargs(user_string, variable)
Run simulator with +TESTNAME = THIS TEST initial begin
if ($value$pluargs("TESTNAME = %s", testname)) start_test();
end