verilog中readmem能对寄存器变量读值吗

作者&投稿:子车萱 (若有异议请与网页底部的电邮联系)
在Verilog HDL中如何使用系统任务$readmemb~

系统任务$readmemb和$readmemh
这两个系统任务用来从文件中读取数据到存储器中。可以在仿真的任何时刻被执行使用,使用格式共六种:
(1) $readmemb(“”,);
(2) $readmemb(“”,,);
(3) $readmemb(“”,,,);
(4) $readmema(“”,);
(5) $readmema(“”,>);
(6) $readmema(“”,,,);
在这两个系统任务中,被读取的数据文件的内容只能包含:空白位置(空格、换行、制表格、注释行、二进制或十六进制的数字。数字中不能包含位宽说明和格式说明,对于$readmemb系统任务,每个数字必须使二进制数字,对于$readmemh系统任务,每个数字必须使十六进制数字。数字中不定值x或X,高阻值z或Z,和在下划线(_)的使用方法及代表的意义与一般Verilog HDL程序中的用法和意义是一样的。另外,数字必须用空白位置或注释行来分隔开。
对于上面6种系统任务格式,需补充说明一下5点:
(1) 如果系统任务声明语句中和数据文件里都没有进行地址说明,则默认存放起始地址为该存储器定义语句中的起始地址。数据文件里的数据被连续存放到该存储器中,直到该存储单元存满为止或数据文件里的数据存完。
(2) 如果系统任务中说明了存放的起始地址,没有说明存放的结束地址,则数据从起始地址开始存放,存到该存储器定义语句中的结束地址为止。
(3) 如果系统任务声明语句中,结束地址和起始地址都进行了说明,则数据文件里的数据按该起始地址开始存放到存储单元中,直到该结束地址,而不考虑该存储器的定义语句的起始地址和结束地址。
(4) 如果地址信息在系统任务和数据文件里面都进行了说明,那么数据文件里的地址必须在系统任务中地址参数声明的范围之内。否则提示错误,并且装载数据到存储器中的操作被中断。
(5) 如果数据文件里的数据个数和系统任务中起始地址及结束地址暗示的数据个数不同的话,也要提示错误信息。

系统任务$readmemb和$readmemh 这两个系统任务用来从文件中读取数据到存储器中。可以在仿真的任何时刻被执行使用,使用格式共六种: (1) $readmemb(“<数据文件名>”,<存储器名>); (2) $readmemb(“<数据文件名>”,<存储器名>,<起始地址>); (3) $readmemb(“<数据文件名>”,<存储器名>,<起始地址>,<结束地址>); (4) $readmema(“<数据文件名>”,<存储器名>); (5) $readmema(“<数据文件名>”,<存储器名,<起始地址>>); (6) $readmema(“<数据文件名>”,<存储器名>,<起始地址>,<结束地址>); 在这两个系统任务中,被读取的数据文件的内容只能包含:空白位置(空格、换行、制表格、注释行、二进制或十六进制的数字。数字中不能包含位宽说明和格式说明,对于$readmemb系统任务,每个数字必须使二进制数字,对于$readmemh系统任务,每个数字必须使十六进制数字。数字中不定值x或X,高阻值z或Z,和在下划线(_)的使用方法及代表的意义与一般Verilog HDL程序中的用法和意义是一样的。另外,数字必须用空白位置或注释行来分隔开。 对于上面6种系统任务格式,需补充说明一下5点: (1) 如果系统任务声明语句中和数据文件里都没有进行地址说明,则默认存放起始地址为该存储器定义语句中的起始地址。数据文件里的数据被连续存放到该存储器中,直到该存储单元存满为止或数据文件里的数据存完。 (2) 如果系统任务中说明了存放的起始地址,没有说明存放的结束地址,则数据从起始地址开始存放,存到该存储器定义语句中的结束地址为止。 (3) 如果系统任务声明语句中,结束地址和起始地址都进行了说明,则数据文件里的数据按该起始地址开始存放到存储单元中,直到该结束地址,而不考虑该存储器的定义语句的起始地址和结束地址。 (4) 如果地址信息在系统任务和数据文件里面都进行了说明,那么数据文件里的地址必须在系统任务中地址参数声明的范围之内。否则提示错误,并且装载数据到存储器中的操作被中断。 (5) 如果数据文件里的数据个数和系统任务中起始地址及结束地址暗示的数据个数不同的话,也要提示错误信息。

$readmemb和$readmemh读取的是文本文件 扩展名无所谓 可以随便写 只要在参数中写明就可以
这两个函数可以读取文本文件中的数据 然后赋值给定义的变量
例如 文件名是test.xxx
内容是
1001001010
0100100101

verilog代码是

reg [9:0] a [1:0];

initial
$readmemb("test.xxx", a);

执行结果就是
a[0] = 10'b1001001010
a[1] = 10'b0100100101


h5中div属性加载不出背景图片
iVBORw0KGgoAAAANSUhEUgAAAToAAAA4CAYAAABt\/TTjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAC6lJREFUeNrtnUuS3MYRQHkEHAFHQIRt2aL4AUUfAJvx0CZFgj+vcQQcAeH1LLB2OBztsBWyQ5RdoiXr5wUWPgCWXmItRTSMHlczIEyhKqsqs1A9k4sMfmYaXd1VeMh\/3hrH8Zat\/PLfv00nq...

梁爱萍的代表性论著
1. Liang, A.-P. & Wang, R.-R. 2008. The Asian planthopper genus Sogana Matsumura (Hemiptera: Fulgoromorpha: Tropiduchidae) with descriptions of three new species. Zootaxa 1732: 29-44.2. Wang, R.-R., Liang, A.-P. & Webb, M.D. 2008. Description of a new ...

克山县19242328929: 如何利用verilog实现将一个文件中的数据写入mem -
源屈川芎: readmemh例子: Verilog代码 `timescale 1ns/100ps module readmem_tb; reg [7:0] Mem[0:'h7ff]; initial begin $readmemh ("frame.mif",Mem); end endmodule 用到的frame.mif文件: 从文件可以看出@后面跟的是地址,文件中可以有//这样的注释

克山县19242328929: Verilog 怎样生成加有高斯白噪声的正弦信号 -
源屈川芎: 用MATLAB生成你所说的加了高斯白噪声的正弦波信号,定点采样,采样周期根据要求来,一般2倍以上,然后在MATLAB中将定点结果打印到txt文件或随便什么纯文本文件.在verilog中,用readmem函数读入该文档,将数据存到寄存器组中,然后用一个时钟驱动每拍从寄存器组中读出一个数据,在仿真波形中选择模拟模式显示即可.

克山县19242328929: verilog中定义了一个reg[19:0] a[0:255];,那么能向下面这样给其赋值吗? -
源屈川芎: 你是要给初始值对不对,如果是可综合的话,初始值是不好复制的,一般的方式是采用memory+mif文件.如果你是编写不可综合的,也就是testbench是可以采用系统函数处理readmemh..处理,希望对你有用.

克山县19242328929: 如何编写testbench的总结 -
源屈川芎: 您好,激励的设置 相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理.方法1:为双向端口设置中间变量inout_reg作为该inout的输出寄存,inout口在testbench中要定义为wire型变量,然...

克山县19242328929: Xilinx Verilog 硬件仿真 warning -
源屈川芎: 目测你这个会有问题,因为initial不能被综合,只能仿真的时候用..你把initial这段先注释掉,试试综合后还会出这个警告不..还有for语句最好要综合的程序里不要用这个,用if和计数语句代替吧..还有interger也是,用reg比较好..你最好去查查verilog中什么语句是不能被综合的..还有你的时序逻辑里用了阻塞赋值,不太好吧...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网