顯示任務:$display,$write, 前者總會輸出一個換行符,后者不會。
固定輸出格式版:$displayb/$displayo/$displayh/$writeb/$writeo/$writeh。
只是固定默認的輸出格式,也可以通過%0x執行輸出方式。
(%m 顯示模塊路徑, \轉義字符)
(%p 可以直接打印出,enum,struct,array)
$fmonitor(file, "%m:%t addr = %h data = %h", $realtime, addr, data);
監控任務:$strobe, 在某一時刻,記錄變量的值到log和STDOUT,在該時刻所有Event已經觸發,仿真時間將向前走時。forever @(negedge clock)
$strobe("At time %t, data is %h", $time,data);
也是在postpone區域內被執行。
$monitor,同一仿真時候只能觸發一個task,還有控制任務$monitoron, $monitoroff,觸發之后,在每個toggle時刻都會輸出log。在postpone區域被執行。
文件讀寫:$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--$)
@address in hex data
@2f ff(十六進制)
$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選擇)。
第一組,檢查時序窗口的穩定性,包括:setup、hold、recovery和removal。
setup:$setup (data_event, reference_event, limit, notifier);
當reference_event time - limit < data_event time < reference_event time時,就會報告setup time violations。
hold: $hold (reference_event, data_event, limit, notifier);
當reference_event time < data_event time < reference_event time + limit時,就會報告hold time violations。
setup/hold:$setuphold (reference_event, data_event, setup_limit, hold_limit, notifier);
$setuphold是$setup和$hold兩者的聯合。例如:
$setuphold (posedge clk, negedge d, 2, 1, notifier); 等於
$setup (negedge d, posedge clk, 2, notifier); 和 $hold (posedge clk, negedge d, 1, notifier);
數據事件常常是數據信號,而參考事件常常是時鍾信號。
參考:http://www.cnblogs.com/poiu-elab/archive/2012/08/25/2655937.html
仿真控制:$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
verilog中的ifdef和ifndef后加name,但是endif之后不能加。
verilog中的行分隔符,之間換行即可,靠";"分行。
標識符可以放在begin...end/ fork...join/ module...endmodule/ task...endtask/ function...endfunction中來更明確。