怎么把将coe文件加载到blockrom所生成的rom中

怎么把将coe文件加载到blockrom所生成的rom中,第1张

1.在Matlab中生成正余弦波形的浮点值,并量化为16bit定点波形数值:

另一种方法:

Xilinx的ROM的初始化是一件很麻烦的事情,要导入Coe文件

Alteral是mif和hex文件,有专门的软件可以生成。

coe文件的格式如下:

MEMORY_INITIALIZATION_RADIX=10

MEMORY_INITIALIZATION_VECTOR=

512,515,518,522,525,528,531,535,538,54

。。。。。。。。12,23;

注意:前面的2行不要动,RADIX后面的数字表示的是进制,这里取10进制。结尾用的是分号

在matlab中关键的步骤如下,我们以一个周期1000个采样,位数为10位的正弦表格为例子。

n=0:999 y=round(sin(2*pi*0.001*n)*512)+512//后面加上512是为了防止出现负拆巧数

y=mod(y,1024)//因为是10位,所以,没有1024,对1024取余数,把1024转搏兆化成0

dlmwrite('b.txt',y)//dlmwrite函数是使得产生的数据之间是用逗号隔开的。

得到b.txt文件,用记事本打开,在最上面加上

MEMORY_INITIALIZATION_RADIX=10

MEMORY_INITIALIZATION_VECTOR=

同时数据结尾用分号结尾

最后另存为,选择后缀为.coe,将文件导入到ROM以后,单击show,或者是显示初始数据的按钮(各个ISE不太一样),说明数据导入正确。

对于ROM模块,主要是生成相应的.coe文件。

% 生成 ROM 的 .coe文件

clc

clear all

close all

x = linspace(0, pi/2 ,1024)% 在区间[0,2pi]之间等间隔地取1024个点

y_cos = cos(x)

y_sin = sin(x)

y_cos = y_cos * 2^16

y_sin = y_sin * 2^16

fid = fopen('D:/cos_coe.txt','wt') fprintf(fid, ' .0f \n ' , y_cos)

fclose(fid)

fid = fopen('D:/sin_coe.txt','wt')

fprintf(fid, ' .0f \n ' , y_sin)

fclose(fid)

2.生成.coe文件。在D盘根目录下,将cos_coe.txt和sin_coe.txt的后缀改成.coe。打开文件,把每一行之间的空格用文本替换功能换成“,”(这可以通过强大的UltraEdit来实现!),并在最后一行添加一个分号“;”。最后,在文件的最开始添加下面两行:

memory_initialization_radix=10

memory_initialization_vector=

然后,保存文件退出。

3.将coe文件加载到BLOCKROM所生成的ROM中。新建一个BLOCKROM的IP Core, 其位置为“Memories &Storage Elements---->RAMs &ROMs----->Block Memory Generator v2.4”。在第1页中选择“single port rom”,在第2页中选择位宽为16,深度为1024,在第3页下载coe文件,如下图,然后双击Finish,完成IP Core的生成。如果coe文件生成得不对,Browse前面的框中是显示红色的文件名,coe文件错误类型主要有数据基数不对和数据的长度不对两种。

MODELSIM下rom仿真。

利用Xilinx公司的芯片做FPGA开发的时候用到了ROM,肯定要对ROM做仿真,经过了一天的努力,总算可以做仿真了,现在把过程写出来,供大家参考一下。

1.首先需要编译XINLINX的库文件,常用有三个库xinlixcorelib,unisims,simprims,编译过程在上一个帖子中。

2.Modelsim不支持mif文件只支持HEX文件,这里需要对文件进行转换,下载DLL文件convert_hex2ver.dll下载地址为:

http://www.eccsdk.com/bbs/read.php?tid=1562&fpage=2

3.把旅银键Modelsim安装目录下的配置文件modelsim.ini文件中进行修改,把

List of dynamically loaded objects for Verilog PLI applications

Veriuser = veriuser.sl

修改为

List of dynamically loaded objects for Verilog PLI applications

Veriuser = C:/Modeltech_6.1e/win32/convert_hex2ver.dll

其中 C:/Modeltech_6.1e/win32/convert_hex2ver.dll为dll文件的保存位置

4.把rom.v和rom.mif文件拷贝到同一个目录下,在仿真时首先需要加载XIlinx的仿真库,然后按照一般仿真过程就可以了

我们首先来看看一个ROM的生成过程。当我们生成一个ROM模块时,在Memory Initialization选项中,会让开发者去指定COE文件的路径,

当我们指定好COE文件的路径,最后生成ROM后,会发现,在生成的ROM的IP核工程的文件夹列表中会同时生成MIF文件,

打开MIF文件,会发现里面内容与COE文件相同,这时不禁会让人感到疑惑:到底ROM会用哪个文件作为自己的初始化文件呢?

答案是MIF文件。

COE文件的作用,是困败生成IP核工程的时候,将其文件中的内容导入,生成MIF文件。也就是说,MIF文件是基于COE文件生成的,所以二者的内容才会相同(格式上是不汪基颤同的)。此后,在实际的使用中,只有MIF文件才会发挥作用,COE这时就已经“无用”了。由此可以推测,若想改变某个ROM模块的初始化文件,要么重新生成一遍ROM模块,导入新的COE文件,要么直接替换掉MIF文件,二者的作用是等效的,只是后者做法不太规范,由于COE文件未变,若再生成ROM模块会导致MIF文件会根据老的COE文件重生成。

总结起来,在使用过程中,需要注意以下几点:

1、  MIF文件是根据COE文件生成的。

2、  COE文件只会在锋野生成ROM模块时起作用,其作用就是根据文件内容生成相应的MIF文件,而ROM真正使用的是MIF文件。

3、  若想改变某个ROM模块的初始化内容,根本上来说是要改变MIF文件,有两种方法:一是替换掉原来的COE文件,再将ROM模块重新生成一遍;二是直接替换掉MIF文件。前者是比较规范的作法,因为后者的COE文件未变,若后面再去因为配置ROM参数而重新生成ROM模块会导致MIF文件又会回到“老样子”。切忌直接替换COE而不重新生成ROM模块的作法,这样MIF文件没变,所以初始化内容也会保持不变

你在Core generator中生成的ROM的初始化是用.coe文件编写的。搏氏然后经过core generator生成会自带一个.mif文件。可能的原因是你在生成时并没有+.coe文件,结果默认生成一乱银简个空白的ROM。而在modelsim里面你又把.mif文件添加到库中。所以会出现告警。

解决方哗裤法:重新生成一个~~~在initial content 下面选择load file。自己编写一个.coe文件。内容格式如下:

memory_initialization_radix=16//定义写入初始值的进制

memory_initialization_vector=

aa bb cc dd ee ff 00 11//我写了一个8位宽的深度为8的ROM初始值。

生成后自带一个.mif文件,modelsim中不需要添加.mif 文件即可仿真。

顺带提下:xilinx ip core在modelsim中仿真不同于altera的。还需要建个xilinx的library。如果需要可以+在问题描述里面。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12300349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存