Quartus 与modelSim联合仿真常见错误以及系统任务$readmemb和$readmemh解释

系统任务$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) 如果数据文件里的数据个数和系统任务中起始地址及结束地址暗示的数据个数不同的话,也要提示错误信息。

 

 

错误:

 Warning: (vsim-7) Failed to open readmem file "E:FPGAFIRmen.txt" in read mod

1.首先检查语句中的路径是否正正确,语句中的文件名是否正确,存储器的大小与文件中数据的大小以及长度是否匹配

2. 把文件名改成 *.dat试试。


3. *.data 中的数据个数和你的Vmem的个数要一致,上述程序,dat文件中要有4个数据,多一个少一个好像都不行。
 

4. $readmemb 是读二进制文件, $readmemh是16进制文件,个人觉得后面一个方便些。


5. 数据文件名那里只写文件名好了,如果找不到,把文件放在同一个工程目录下试试

你可能感兴趣的:(笔记)