日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog读写文件

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog读写文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在通過編寫Verilog代碼實現ram功能時,需要自己先計算寄存器的位數和深度再編寫代碼。

而如果需要在編寫的ram中預置值的話,就需要使用Verilog語言編寫程序讀寫文件,來將相應的數據賦給寄存器。

這里給出Verilog實現ram的代碼:

module dpram(rclk,raddr,dout,wclk,we,waddr,din);parameter aw = 16; //address widtthparameter dw = 12; //data addressinput rclk; //read clockinput [aw-1:0] raddr; //read addressoutput [dw-1:0] dout; //data outputinput wclk; //write clockinput we; //write enableinput [aw-1:0] waddr; //write addressinput [dw-1:0] din; //data inputreg [dw-1:0] mem[(1<<aw)-1:0]; //block-ramreg [aw-1:0] ra; //register read addressalways @(posedge rclk)beginra <= #1 raddr;endassign dout = mem[ra];always @(posedge wclk)beginif(we)mem[waddr] <= #1 din;end//讀取mem文件存取程序中的mem寄存器initial $readmemh("bmp_64K.mem",mem);endmodule

下面的程序定義了ram中寄存器的位數和深度,決定了ram的大小:

reg [dw-1:0] mem[(1<<aw)-1:0]; //block-ram

整段程序不是很復雜,其他部分主要是用于實現ram的讀寫控制功能,這里不做贅述。

Verilog實現讀寫文件功能的部分代碼如下:

//讀取mem文件存取程序中的mem寄存器initial $readmemh("bmp_64K.mem",mem);

這段程序的功能是從文件名是“bmp_64K.mem”的文件中讀取其中的數據并置入前面定義的mem寄存器,即將數據置入ram中。

$readmemh("file_name.xxx",data)

就是將file_name.xxx中的數據讀入到data數組中。

使用格式有6種:

$readmemb("<數據文件名>",<存貯器名>); $readmemb("<數據文件名>",<存貯器名>,<起始地址>); $readmemb("<數據文件名>",<存貯器名>,<起始地址>,<結束地址>); $readmemh("<數據文件名>",<存貯器名>); $readmemh("<數據文件名>",<存貯器名>,<起始地址>); $readmemh("<數據文件名>",<存貯器名>,<起始地址>,<結束地址>); $readmemb要求數據格式必須是二進制形式,$readmemh則要求數據格式必須是16進制格式。

下面一些用法格式:(摘自https://wenku.baidu.com/view/81075c1f964bcf84b9d57b57.html)

1,打開文件

integer file_id; file_id = fopen("file_path/file_name");

2,寫入文件

//$fmonitor只要有變化就一直記錄 $fmonitor(file_id, "%format_char", parameter); eg:$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();

3,讀取文件

integer file_id; file_id = $fread("file_path/file_name", "r");

4,關閉文件

$fclose(fjile_id);

5,由文件設定存儲器初值

$readmemh("file_name", memory_name"); //初始化數據為十六進制 $readmemb("file_name", memory_name"); //初始化數據為二進制

總結

以上是生活随笔為你收集整理的Verilog读写文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。