Verilog篇 二 系統函式

2021-09-06 22:17:06 字數 3065 閱讀 6689

顯示任務:$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結構 資源共享 同樣結構的模組需要反覆被呼叫,但該結構模組需要占用的資源比較多,這類模組往往是基於組合電路的算數模組,比如乘法器 寬位加法器等。主要針對資料通路中耗費邏輯資源比較多的模組,通過選擇 復用的方式共享使用該模組,以減少該模組的使用個數,達到較少資源使用,優化面積的目的。並...