VERILOG——FPGA模擬時的檔案讀寫互動
阿新 • • 發佈:2022-05-28
一、檔案讀取
載入二進位制檔案 | $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