Testbench编写指南(2)读取txt文件数据

读取txt文件数据
将数据写入txt文件
  第2篇的题材是文件的读写控制,仿真时经常需要从文件中读取测试激励,还要将仿真结果存取在文件中供其它程序读取调用。
读取txt文件数据
  示例代码如下:
integer i;   //数组坐标reg [9:0] stimulus[1:data_num];  //数组形式存储读出的数据initialbegin    $readmemb(sinin.txt, stimulus);  //将txt文件中的数据存储在数组中    i = 0;    repeat(data_num) begin   //重复读取数组中的数据        i = i + 1;        din = stimulus[i];        #clk_period;         //每个时钟读取一次    endend    
  用“数组”来表述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`,都会在数据后插入一个换行符。


华米科技召开首届AI创新大会
智能交通冲锋在前 接受着“新基建”带来的新挑战
如何辨别连接器的好坏
芯岭充电宝方案介绍
最新!Yole 发布全球汽车传感器市场趋势版图【附130份报告】
Testbench编写指南(2)读取txt文件数据
硕贝德预计5G在2020年会实现大规模商用
科学家研发巨型量子,可使量子信息处理和量子通讯成为一体
如何使用中继组网功能?
自适应比特率( ABR )缩放和高密度转码的挑战与解决方案
ACTB系列电流互感器过电压保护器
如何实现一种基于STM32单片机的电子密码锁设计?
接地变压器与电力变压器的区别
中国移动公布了2019年集中网络云资源池工程硬件采购项目中标结果
新零售的互联网公司和传统零售商心照不宣的合谋
人工智能时代下 安防加速释放实战价值
知乎信息流推荐系统的技术演进
iPhone X摄像头+AR、显示屏和Face ID成产品主要卖点
如何使用AES加密防止固件泄露?
智能家居基础知识