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...