这两天学习verilog语言时,对 $readmemb和 $readmemh怎么读文件里的数据产生了疑问,网上大多数资料都是inter下quartus里的描述【参考文档1】,也看到一篇vivado开发环境下的文档【参考文档2】,这里也就结合自己的学习汇总一下。
- vivado中verilog里关于$readmemb和 $readmemh的使用方法
- 格式与规则
- 参考文档
在Verilog语法中,$readmemb和 $readmemh一共有以下六种用法:
(1)$readmemb(“<数据文件名>”,<存储器名>);
(2)$readmemb(“<数据文件名>”,<存储器名>,<起始地址>);
(3)$readmemb(“<数据文件名>”,<存储器名>,<起始地址>,<终止地址>);
(4)$readmemh(“<数据文件名>”,<存储器名>);
(5)$readmemh(“<数据文件名>”,<存储器名>,<起始地址>);
(6)$readmemh(“<数据文件名>”,<存储器名>,<起始地址>,<终止地址>);
这里说一下常见的第一种用法和第四种用法:
在vivado里面总共有两种方式实现对指定文件数据的阅读:
1、相对路径访问:就是把要目标文件放在vivado指定文件键里面,优点不需要特定说明文件位置,缺点就是文件只能放在指定位置下。具体的是在你所建工程的.sim文件夹,然后依次进入sim_1,behav,xsim
D:vivado_myselfproject_38project_38.simsim_1behavxsim文本内容如下:
程序如下:
然后行为仿真,控制台输出如下:
2、绝对路径访问
可以把目标文件放在系统任意位置,但在 $readmemb和 $readmenh的调用语句里必须指明文件路径。
还是上面的file1文件,将其放在桌面。路径为:
程序修改如下:
输出结果如下:
然后$readmemh就是读十六进制数据,你比如还是读四位一组数据的话,哪里目标文件数据格式应该是像15a0这样的,在语言使用上和前面介绍的一样。