1. 程式人生 > 其它 >VERILOG——FPGA模擬時的檔案讀寫互動

VERILOG——FPGA模擬時的檔案讀寫互動

一、檔案讀取

載入二進位制檔案 $readmemb("fname", mem, start_addr, finish_addr)
fname 為資料檔名字,mem 為陣列型/儲存器型變數,start_addr、finish_addr 分別為起始地址和終止地址,start_addr、finish_addr 可以省略,此時載入資料的停止條件為儲存器變數 mem 被填充完畢,或檔案讀取完畢,檔案內容只應該有空白符(或換行、空格符)、二進位制或十六進位制資料 註釋用"//"進行標註,資料間建議用換行符區分
載入十六進位制檔案 $readmemh("fname", mem, start_addr, finish_addr)
module file_tb;

reg [8-1:0] filerom [14-1:0];
initial begin
    $readmemh("filetest.txt",filerom);
end

endmodule

Bin_s檔案

01
02
03
04
05
06
07
08
09
0A
0B
1A
1B
1C

三、檔案寫入

系統任務 呼叫格式 任務描述
檔案開啟 fd = $fopen("fname", mode) ; fname 為開啟檔案的名字,fd 為返回的 32bit 檔案描述符--- 正確開啟時,fd 為非零值--- 打開出錯時,fd為零值
mode 用於指定檔案開啟的方式
檔案關閉 $fclose(fd) ; 關閉 fd 描述的對應檔案
mode 描述
r 只讀開啟一個文字檔案,只允許讀資料。
w 只寫開啟一個文字檔案,只允許寫資料。如果檔案存在,則原檔案內容會被刪除。如果檔案不存在,則建立新檔案。
a 追加開啟一個文字檔案,並在檔案末尾寫資料。如果檔案如果檔案不存在,則建立新檔案。
rb 只讀開啟一個二進位制檔案,只允許讀資料。
wb 只寫開啟或建立一個二進位制檔案,只允許寫資料。
ab 追加開啟一個二進位制檔案,並在檔案末尾寫資料。
r+ 讀寫開啟一個文字檔案,允許讀和寫
w+ 讀寫開啟或建立一個文字檔案,允許讀寫。如果檔案存在,則原檔案內容會被刪除。如果檔案不存在,則建立新檔案。
a+ 讀寫開啟一個文字檔案,允許讀和寫。如果檔案不存在,則建立新檔案。讀取檔案會從檔案起始地址的開始,寫入只能是追加模式。
rb+ 讀寫開啟一個二進位制文字檔案,功能與 "r+" 類似。
wb+ 讀寫開啟或建立一個二進位制文字檔案,功能與 "w+" 類似。
ab+ 讀寫開啟一個二進位制文字檔案,功能與 "a+" 類似。
呼叫格式 任務描述
$fdisplay(fd, arguments) ; 按順序或條件寫檔案,自動換行
$fwrite(fd, arguments) ; 按順序或條件寫檔案,不自動換行
輸入 輸入
%h 或 %H 十六進位制格式輸出 %c 或 %C ASCII 碼格式輸出
%d 或 %D 十進位制格式輸出 %e 或 %E 指數格式輸出
%o 或 %O 八進位制格式輸出 %f 或 %F 浮點數 (real 型) 格式輸出
%b 或 %B 二進位制格式輸出 %t 或 %T 當前時間格式輸出
%s 或 %S 字串格式輸出 %m 或 %M 當前層次訪問路徑輸出
\n 換行符 %% 百分號"%"
\t 製表符(Tab 鍵) \0 八進位制代表的字元
\ 反斜槓""符 \0x 十六進位制代表的字元
" 雙引號
integer fd;
integer i = 0;
reg [31-1:0] dat = 0;
initial begin
    #(10 * CYCLE);
    fd = $fopen("wfile.txt","w");
    while(i < 10)begin
        @(posedge clk)
        $fdisplay(fd,"%h",dat);
        dat = dat + 2;
        i = i + 1;
    end
    $fclose(fd);
end