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

2023-05-16

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

这两天学习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_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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 计算数组中的个数

    我试图在 Verilog 中计算 4 位二进制数中 1 的数量 但我的输出是意外的 我尝试了几种方法 这是我认为应该有效的方法 但事实并非如此 module ones one in input 3 0 in output 1 0 one a
  • Verilog HDL ?操作员

    什么是 用 Verilog 做什么 例如 以下命令是什么意思 input first din input 7 0 din output 127 0 parity reg 127 0 parity wire 7 0 feedback assi
  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar
  • [Verilog] Verilog 基本格式和语法

    主页 元存储博客 全文 3000 字 文章目录 1 声明格式 1 1 模块声明 1 2 输入输出声明 1 3 内部信号声明 1 4 内部逻辑声明
  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • x 和 z 值在 Verilog 中到底代表什么?

    Verilog 标准定义了四种类型的位值 0 1 x 和 z 其中 0 表示低 1 表示高 x 表示未知 z 表示未驱动网络 有几个问题 x 是否意味着我们不知道该值是 0 还是 1 0 或 1 或 z 或者该值是未知的并且可以是 0 1
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 「HDLBits题解」Gates4

    本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接 Gates4 HDLBits module top module input 3 0 in out
  • verilog 中的“<<”运算符

    我有一个verilog代码 其中有一行如下 parameter ADDR WIDTH 8 parameter RAM DEPTH 1 lt lt ADDR WIDTH 这里将存储什么RAM DEPTH以及什么是 lt lt 操作员在这里做
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • 从测试台访问 uvm_config_db 的最佳方式?

    我想在我的顶级测试平台中创建一个时钟 其周期可以通过测试进行控制 我所做的是将周期设置到 uvm config db 中并将其返回到测试台中 我必须输入 1 以确保构建阶段已完成 否则 get 返回错误值 module testbench
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 如何使用 don't cares 参数化 case 语句?

    我有一条称为输入的电线 我想检测前导的数量 我正在尝试创建一个模块 该模块使用下面的 case 语句根据前导零的数量更改输出数据 然而 输入的大小是可参数化的 如果 X 是固定值 4 我将创建一个 case 语句 case input 4
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • 开始后跟冒号和变量是什么意思?

    什么是data mux意思是这里 它只是块的名称吗 if PORT CONFIG 32 P0 1 b1 begin data mux end 这些是块名称 它们特别适用于generate块 例如 您可以定义一个generate块如 genv
  • 在 Verilog 中判断总线是否包含单个 x 的最佳方法是什么?

    我有一个监控总线的测试台 总线内的一些信号 位 可以是 1 bx 由于多种原因 我需要知道总线内是否有任何信号是 1 bx 如果总线包含任何 x 测试 不用于综合 仅用于模拟目的 的最佳方法是什么 我曾希望我可以使用减少或然后使用 但这似乎
  • 如何在Verilog中将二维数组中的所有位设置为0?

    我构建了一个 8 2bits 数组来表示 Verilog 中的一块内存 reg 1 0 m 0 7 该存储器有一个复位信号 如果复位为1 则该存储器中的所有位都应重置为0 但是我不知道如何以简洁的方式设置m的所有位 因为如果有数百个内存中有
  • 使用正则表达式进行 Verilog 端口映射

    我有一个很长的端口映射 我想在其中替换一堆 SignalName i with SignalName SignalName i 我想我可以用正则表达式轻松地做到这一点 但我无法弄清楚如何做到这一点 有任何想法吗 假设 SignalData

随机推荐