Testbench编写指南(2)文件的读写操作
读取txt文件数据
将数据写入txt文件
第2篇的题材是文件的读写控制,仿真时经常需要从文件中读取测试激励,还要将仿真结果存取在文件中供其它程序读取调用。
读取txt文件数据
示例代码如下:
integer i; //数组坐标 reg [9:0] stimulus[1:data_num]; //数组形式存储读出的数据 initial begin $readmemb("SinIn.txt", stimulus); //将txt文件中的数据存储在数组中 i = 0; repeat(data_num) begin //重复读取数组中的数据 i = i + 1; din = stimulus[i]; #clk_period; //每个时钟读取一次 end end
用“数组”来表述Verilog HDL中的定义并不准确,但对大多数人来说应该更好理解。可以将stimulus视作一个存储器,[9:0]定义了数据的位宽,[1:data_num]定义了存储器的深度。stimulus的定义应该与txt文件中的数据相匹配。txt文件中每行存储一个数据,则上述定义对应的是txt中存储了data_num个数据,每个数据的最大位宽为10bit。
读取二进制格式的文件是用系统任务readmemb;读取十六进制格式文件使用readmemb;读取十六进制格式文件使用readmemh。其命令为$readmemb(“filename”, mem_name),将filename中的内容读取到mem_name中。
注意filename文件路径中应该用反斜杠“/”,与windows系统中的文件路径使用的“”不同。如果不指定路径,向上面程序一样直接写文件名字,那么该文件必须和testbench文件在同一路径下。
repeat(n) begin … end中的内容应该根据设计的需要编写。
将数据写入txt文件
示例代码如下:
integer file_out; initial begin file_out = $fopen("mixer_out.txt"); if (!file_out) begin $display("can't open file"); $finish; end end wire signed [19:0] dout_s = dout; wire rst_write = clk & rst_n; //复位期间不应写入数据 always @ (posedge rst_write) $fdisplay(file_out, "%d", dout_s);
写入文件需要先用$fopen系统任务打开文件,这个系统任务在打开文件的同时会清空文件,并返回一个句柄,如果句柄为0则表示打开文件失败。
如果原来不存在该文件,则会自动创建该文件。
打开文件之后便可以用得到的句柄和KaTeX parse error: Expected 'EOF', got '&' at position 55: …printf函数的用法很像。
上面的程…fdisplay`,都会在数据后插入一个换行符。
责任编辑:lq
-
存储器
+关注
关注
39文章
7753浏览量
172164 -
函数
+关注
关注
3文章
4421浏览量
67822 -
数组
+关注
关注
1文章
420浏览量
27458
原文标题:Testbench编写指南(2)文件的读写操作
文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
使用EB示例工程操作Flash出现读写错误怎么解决?
集成式RFID读写器与非集成RFID读写器
飞凌嵌入式ElfBoard-文件I/O的了解探究之Linux系统的文件管理机制
在verilog testbench中运行测试用例时,运行到make run_test出错怎么解决?
求助,关于testbench仿真的问题求解
语法纠错和testbench的自动生成
如何利用Verilog HDL在FPGA上实现SRAM的读写测试
飞凌嵌入式ElfBoard-Linux系统基础入门-文件操作相关shell命令
双UFS4.1 4Lane,速度可达8.6GB/s,大型文件读写速率提升达70%+
求助各位大佬,关于如何读写编码格式为UTF-16LE的配置文件?
SFUD操作w25q256,无法正常读写是什么原因导致的?
ESP32驱动SPIFFS进行文件操作
SI522/RC522读卡器如何读写操作ST25TA64K NFC卡?
第二十五章 SDIO——SD卡读写测试
基于RK3576开发板的INI文件操作
Testbench编写文件的读写操作
评论