Testbench编写指南是博主新开的一个系列,主要介绍在编写testbench时使用到的技巧,让编写者的水平不再仅仅停留在时钟信号、复位信号等简单信号的设置上,更好的完成对设计的仿真工作。

第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;读取十六进制格式文件使用readmemb;读取十六进制格式文件使用readmemh。其命令为$readmemb(“filename”, mem_name),将filename中的内容读取到mem_name中。

注意filename文件路径中应该用反斜杠“/”,与windows系统中的文件路径使用的“\”不同。如果不指定路径,向上面程序一样直接写文件名字,那么该文件必须和testbench文件在同一路径下。

repeat(n) begin … end中的内容应该根据设计的需要编写。


将数据写入txt文件

示例代码如下:

integer file_out;
initial
beginfile_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则表示打开文件失败。

如果原来不存在该文件,则会自动创建该文件。

打开文件之后便可以用得到的句柄和$fdisplay系统任务向文件中写入数据。这个系统任务和我们在C++中常用的fprintf函数的用法很像。

上面的程序中是将数据转换为带符号数signed后再写入,必须说明转换与否是有差别的,如果按默认的unsigned的格式写入txt的是无符号数。

另外,每使用一次$fdisplay,都会在数据后插入一个换行符。

Testbench编写指南(2)文件的读写操作相关推荐

  1. r语言读取C盘的csv文件,R语言开发之CSV文件的读写操作实现

    在R中,我们可以从存储在R环境外部的文件读取数据,还可以将数据写入由操作系统存储和访问的文件.这个csv文件应该存在于当前工作目录中,以方便R可以读取它, 当然,也可以设置自己的目录,并从那里读取文件 ...

  2. 第五天2017/04/06(上午:文件的“读写操作”)

    文件的"读"."写"的理解不是站在"程序"的角度,而是站在"文件"的角度读:从文件中读取数据,输出到程序中写:从程序中读 ...

  3. python3 读取文本文件_python3文件的读写操作

    open函数:对文件进行读写操作前,先打开文件,获取文件的句柄: open(file, mode, encoding, buffering) 参数说明 file_name:一个包含了你要访问的文件路径 ...

  4. Python小练习1:.txt文件常用读写操作

    .txt文件常用读写操作 本文通过一个实例来介绍读写txt文件的各种常用操作,问题修改自coursera上南京大学的课程:用Python玩转数据. 直接进入正题,考虑下面为练习读写txt文件的各种操作 ...

  5. java 二进制 文件比较_Java中对文件的读写操作之比较

    Java 中对文件的读写操作之比较 作者:Jeru Liu 日期:November 29,2000 版本:1.0 纪念在chinaasp积分过一百呕心原创一篇(Java 中对文件的读写操作之比较)拿分 ...

  6. python文件下载速度 装饰器_python使用装饰器对文件进行读写操作'及遍历文件目录...

    '''使用装饰器对文件进行读写操作''' #def check_permission(func):#'''演示嵌套函数定义及使用'''#def wrapper(*args,**kwargs):#''' ...

  7. 文件的读写操作 c# 1614992256

    文件的读写操作 c# 1614992256 读操作 写操作

  8. AndroidStudio_android中实现对properties文件的读写操作_不把properties文件放在assets文件夹中_支持读写---Android原生开发工作笔记238

    这个东西还挺麻烦,因为是android中,我们一般把文件放到assets文件夹中去,但是实际上,这个raw文件夹和assets文件夹 是只读的,对,就是只读的只能读取,不能写入,所以一定要把文件写入到 ...

  9. Java 使用 POI 对 Excel文件 进行读写操作

    Java 使用 POI 对 Excel文件 进行读写操作 一.背景 目前正在做一个问卷功能模块,收集完问卷信息后,需要将数据库中的数据导出到Excel数据表中进行留存,因此就学习了在Java中如何对E ...

最新文章

  1. RuntimeWarning: overflow encountered in power
  2. mysql dba系统学习(12)mysql的数据文件 mysql dba系统学习(13)mysql的体系结构
  3. 聊聊近期的感受和10月文章精选!
  4. 基于虚拟日志压缩的数据同步方案
  5. plsql本机不安装数据库连接远程数据库
  6. js 去空格 和 获得字节数
  7. rm mysql 数据日志文件恢复
  8. iMeta | 南医大余光创组ggtree最新文章-系统发育树存储与可视化的数据结构
  9. 误差函数erf matlab,matlab求解erf误差函数方法(有详细注释 )
  10. Pyhon3 批量合并哔哩哔哩缓存的m4s视频文件
  11. 计算机的通讯方式有哪些特点,1.串行通信有几种方式?它们的特点分别是什么...
  12. 华为服务器怎么查看系统日志,云服务器怎么查看系统日志
  13. python xlrd使用_在Python中使用xlrd以文本形式读取数值Excel数据
  14. 1星《微信软文营销实战技巧》:标题党,作者没有实战经验
  15. chrome插件,装这个就够了
  16. 7-1 厘米换算英尺英寸(基础编程题)
  17. 非劣效性 等效性 有效性临床试验
  18. 秦皇岛集训,ACM比赛第一场
  19. mysql报错:Column count doesn‘t match value count at row 1
  20. 插入排序java_排序算法之直接插入排序Java实现

热门文章

  1. 波克定律:好的想法必需经得起辩论
  2. 为金融而生的区块链Injective(INJ)
  3. 区域和检索 - 数组不可变(前缀和)
  4. 你敢信?这样炫黑的界面居然是一款数据库管理工具?
  5. 图像分类:从13个Kaggle竞赛中总结技巧
  6. px 、 rem 、 vw学习
  7. fastboot常用指令
  8. Windows下字符串替换操作java.lang.IllegalArgumentException: character to be escaped is missing
  9. webapp通过点击调用高德地图或百度地图导航
  10. Linux之进程的前后台切换