全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

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

时间:2023-09-02 09:21

人气:

作者:admin

标签: 存储器  十六  HDL 

导读:用“数组”来表述Verilog HDL中的定义并不准确,但对大多数人来说应该更好理解。...

读取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`,都会在数据后插入一个换行符。







审核编辑:刘清

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信