vivado中verilog里关于$readmemb和 $readmemh的使用方法

vivado中verilog里关于$readmemb和 $readmemh的使用方法

这两天学习verilog语言时,对 $readmemb和 $readmemh怎么读文件里的数据产生了疑问,网上大多数资料都是inter下quartus里的描述【参考文档1】,也看到一篇vivado开发环境下的文档【参考文档2】,这里也就结合自己的学习汇总一下。

格式与规则

在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_myself\project_38\project_38.sim\sim_1\behav\xsim

文本内容如下:
每组数据用空格隔开,下划线在vivado处理读取过程中忽略不计,不足四位的高位补零

程序如下:

module test;
reg[3:0] memory_b[0:7];//申请八个四位的存储单元
reg[4:0] i;
initial
	begin
		$readmemb("file1.txt",memory_b); 
        for(i=0;i<8;i=i+1)
        begin
		     $display("%memory_b[%0d]=%b",i,memory_b[i]);
		end
	end
endmodule

然后行为仿真,控制台输出如下:
在这里插入图片描述
2、绝对路径访问
可以把目标文件放在系统任意位置,但在 $readmemb和 $readmenh的调用语句里必须指明文件路径。
还是上面的file1文件,将其放在桌面。路径为:在这里插入图片描述程序修改如下:
这里一定在指定文件路径时一定要把windows下默认路径描述方式的  \  换成  /  ,否者会找不到文件。

module test;
reg[3:0] memory_b[0:7];//申请八个四位的存储单元
reg[4:0] i;
initial
	begin
		$readmemb("C:/Users/dear  jing/Desktop/file1.txt",memory_b); 
        for(i=0;i<8;i=i+1)
        begin
		     $display("%memory_b[%0d]=%b",i,memory_b[i]);
		end
	end
endmodule

输出结果如下:
在这里插入图片描述
然后$readmemh就是读十六进制数据,你比如还是读四位一组数据的话,哪里目标文件数据格式应该是像15a0这样的,在语言使用上和前面介绍的一样。

参考文档

链接: link1

链接: link2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值