verilog檔案系統函式呼叫

2021-07-27 16:53:15 字數 3865 閱讀 6392

1 $open

integermulti_channel_descriptor= $fopen ( "file_name" );

返回檔案的多通道描述符,只允許寫資料,最多能開啟31個檔案,最高位保留。

注意:用

$fopen

開啟檔案會將原來的檔案清空,若要讀資料就用

$readmemb,$readmemh

就可以了,這個語句不會清空原來檔案中的資料。integerfd = $fopen ( " file_name",type);

返回檔案描述符

type列舉:

"r" or "rb"

"w" or "wb"

"a" or "ab"

"r+", "r+b", or "rb+"

"w+", "w+b", or "wb+"

"a+", "a+b", or "ab+"

以唯讀的方式開啟

清除檔案內容並以只寫的方式開啟

在檔案末尾寫資料

以可讀寫的方式開啟檔案

讀寫開啟或建立乙個檔案,允許讀寫

讀寫開啟或建立乙個文字檔案,允許讀,或在末尾追加資訊

開啟失敗可呼叫

$ferror

2 $close

關閉檔案,同時隱式終結$fmonitor、$fstrobe等任務

3 檔案寫入指令

file_output_task_name (multi_channel_descriptor , list_of_arguments ) ;

file_output_task_name ( fd , list_of_arguments ) ;

file_output_task_name ::=

$fdisplay | $fdisplayb | $fdisplayh | $fdisplayo

| $fwrite | $fwriteb | $fwriteh | $fwriteo

| $fstrobe | $fstrobeb | $fstrobeh | $fstrobeo

| $fmonitor | $fmonitorb | $fmonitorh | $fmonitoro

//$fmonitor只要有變化就一直記錄

$fmonitor(file_id,"%format_char", parameter);

$fmonitor(file_id, "%m:%t in1=%d o1=%h", $time, in1, o1);

//$fwrite需要觸發條件才記錄,不自動換行

$fwrite(file_id,"%format_char", parameter);

//$fdisplay需要觸發條件才記錄

$fdisplay(file_id,"%format_char", parameter);

$fstrobe();當該時刻的所有事件處理完後,在這個時間步的結尾寫入。推薦使用。

4 文字格式化

$sformat ( output_reg, format, list_of_arguments );

example

integer file, r, a, b;

reg [80*8:1] string;

file = $fopenw("output.log");

r = $sformat(string, "formatted %d %x", a, b);

r = $sprintf(string, "formatted %d %x", a, b);

r = $fprintf(file, "formatted %d %x", a, b);

5 從檔案中讀取資料

c = $fgetc ( fd )

從檔案中讀取乙個byte,若發聲錯誤或讀完,返回eof(-1),寬度位8位

code = $ungetc ( c, fd );

將由c指定的字元插入到由檔案描述符fd指定的緩衝區中。字元c應為

由該檔案描述符的下乙個$ fgetc呼叫返回。檔案本身不變。

integer code = $fgets ( str,fd );

從由fd指定的檔案中讀取字元到str,直到str被填滿,或換行符被讀取並傳輸到str,或遇到檔案結束條件。如果str的長度不是byte的倍數,則部分最高位將捨棄不用保證填滿整數個位元組。

integer code = $fscanf ( fd,format, args );

按照固定格式從fd制定的檔案中讀取資料,args為讀取的位置

integer code = $sscanf ( str,format, args );

$sscanf reads from the reg str

integer code = $fread( myreg,fd);

integer code = $fread( mem, fd);

integer code = $fread( mem, fd, start);

integer code = $fread( mem, fd, start, count);

integer code = $fread( mem, fd, , count);

讀取二進位製流,將資料從fd讀向myreg或mem,不可讀x,z.start是指mem的位置,

for start= 12and the memoryup[10:20],the first data would be loaded atup[12]. for the memorydown[20:10],the first location loaded would bedown[12], thendown[13]。

預設情況下myreg將mem填滿或自身讀完截至。

檔案中的資料逐字節讀取。使用乙個8位寬的儲存器載入乙個位元組,而使用每個儲存器字2個位元組寬載入9位寬的儲存器。資料是以大尾數方式從檔案中讀取;第乙個位元組讀取用於填充最重要的位置儲存元件。如果記憶體寬度不能被8(8,16,24,32)整除,則由於截斷並不是檔案中的所有資料都載入到記憶體中。

6 定位

integerpos = $ftell ( fd );

返回fd當前位元組與fd檔案開頭的偏移至pos,可以用於後續的$fseek使用,以將檔案重新定位到此點。

code= $fseek ( fd, offset, operation );

code = $rewind ( fd );

operation:

1:設定位置到當前位置加偏移量

2:設定位置到檔案結束位置$fseek(fd,0,0)

7 檔案沖洗

$fflush ( mcd );

$fflush ( fd );

$fflush ( );

將所有緩衝區的資料寫入制定的mcd或fd,若引數預設,衝寫所有開啟的檔案

8 載入檔案到儲存區

$readmemb ( " file_name ", memory_name [ , start_addr [ , finish_addr ] ] ) ;

| $readmemh ( " file_name " , memory_name [ , start_addr [ , finish_addr] ] ) ;

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 顯示任務之後會...

linux檔案系統系統呼叫 fallocate

int fallocate int fd,int mode,off t offset,off t len 為檔案預分配物理空間。include 成功返回0,失敗返回 1。fd檔案描述符 mode 目前兩種mode 1.falloc fl keep size 從offset開始分配大小為len的空間,...

Linux 檔案系統呼叫(習題)

1 設計乙個程式,要求開啟檔案 pass 如何沒有這個檔案,新建此檔案,許可權設定為只有所有者有唯讀許可權。程式 include include include int main 2 設計乙個程式,要求新建乙個檔案 hello 利用write函式將 linux下c軟體設計 字串寫入該檔案 程式 in...