Systemverilog 檔案I O小結

2021-10-03 15:28:15 字數 2044 閱讀 5984

一、檔案開啟和關閉

fopen和fclose操作:

不同的type含義:

二、檔案內容掃瞄

從檔案中讀取內容:

$fgetc每次讀取乙個字元(8bits);

$fgets每次讀取一行裡的部分或者全部內容,用作字串輸出,每次讀的內容的bit數目或多少取決於str的大小(有多少bit);

$fscanf從讀檔案中讀取內容,按給定的格式輸出;

$fread用於從檔案讀取二進位制資料,每次讀取的資料位寬或者多少取決於integral_var的大小(有多少bit);

三、檔案定位

四、檔案內容輸出

$fflush

將寫buffer的內容(需要寫出的內容),一次性寫到檔案裡;如果沒有指定檔案,將會寫到所有開啟的檔案中。

五、檔案尾判斷

$feof:檢測檔案結束標誌eof,這個使用的時候需要注意,遇到過類似的問題:

使用while迴圈判斷eof,結果進入死迴圈:

c語言中的案例:

sv中的案例:

while(! $feof(f1) && ! $ferror(f1))的使用方法如果底下接的是%fscanf的時候容易出現死迴圈的問題,譬如:

while(! $feof(f1) && ! $ferror(f1))

a = $fscanf(f1,"%d",&al)

能讀出第乙個整數,但讀到字元時就出現死迴圈。fscanf(f1,"%d",&al)讀到字元的時候,因為讀取不到整數,檔案指標不會往下走的。所以while(! $feof(f1) && fer

ror(

f1))

一直為真

,進入死

迴圈。這

種情況下

一般使用

ferror(f1)) 一直為真,進入死迴圈。這種情況下一般使用

ferror

(f1)

)一直為

真,進入

死迴圈。

這種情況

下一般使

用fgets或者$fread可以避免這樣的問題。

還有看到過用feof判斷while迴圈多讀一次的問題:

這裡有案例:

執行如下程式:

char c;

while(!feof(fp))

會發現多輸出了乙個ff,原因就是在讀完最後乙個字元後,fp->flag仍然沒有被置為_ioeof,因而feof()仍然沒有探測到檔案結尾。直到再次呼叫fgetc()執行讀操作,feof()才能探測到檔案結尾。這樣就多輸出了乙個-1(即ff)。

正確的寫法應該是:

char c;

c = fgetc(fp);

while(!feof(fp))

while(!feof(fp))是判斷的前一次從檔案中讀取的字元,所以在最後乙個字元那裡,讀取列印出來,再到while判斷一次,這一次讀取的就是檔案結尾-1(而判斷迴圈的卻是最後乙個字元)。

system Verilog 跳轉操作

在verilog中,使用disable宣告來從執行流程中的某一點跳轉到另一點。特別地,disable宣告使執行流程跳轉到標註名字的宣告組末尾,或者乙個任務的末尾。verilog中的disable命令用法有很多,下面是乙個簡單的例子,解釋了disable的作用範圍 1 find first bit s...

System Verilog任務 函式

在system verilog中,begin end是可選的 task mytask1 output logic x,input logic y endtask還可以使用ref型別的引數對變數進行引用,類似於c中的指標,但ref不允許進行陣列引數的傳遞 還可以使用預設引數 增加了return語句 方...

SystemVerilog語言簡介 二

6.使用者定義的型別 verilog不允許使用者定義新的資料型別。systemverilog通過使用typedef提供了一種方法來定義新的資料型別,這一點與c語言類似。使用者定義的型別可以與其它資料型別一樣地使用在宣告當中。例如 typedef unsigned int uint uint a,b ...