顯示任務:$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區域被執行。
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);
資料事件常常是資料訊號,而參考事件常常是時鐘訊號。
參考:**控制:$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();
endverilog中的ifdef和ifndef後加name,但是endif之後不能加。
verilog中的行分隔符,之間換行即可,靠";"分行。
識別符號可以放在begin...end/ fork...join/ module...endmodule/ task...endtask/ function...endfunction中來更明確。
verilog系統呼叫函式 display
timescale 1ns 1ns module display write task reg 7 0 r data reg 15 8 0 r str initial begin r data 8 d100 r str i love verilog end initial begin 顯示任務之後會...
verilog檔案系統函式呼叫
1 open integermulti channel descriptor fopen file name 返回檔案的多通道描述符,只允許寫資料,最多能開啟31個檔案,最高位保留。注意 用 fopen 開啟檔案會將原來的檔案清空,若要讀資料就用 readmemb,readmemh 就可以了,這個語...
Verilog系統設計優化
資源優化 rtl結構 資源共享 同樣結構的模組需要反覆被呼叫,但該結構模組需要占用的資源比較多,這類模組往往是基於組合電路的算數模組,比如乘法器 寬位加法器等。主要針對資料通路中耗費邏輯資源比較多的模組,通過選擇 復用的方式共享使用該模組,以減少該模組的使用個數,達到較少資源使用,優化面積的目的。並...