原创 XILINX IP核定制ROM

2010-4-10 11:32 6643 1 3 分类: FPGA/CPLD

        FPGA内部有BLOCK RAM和分布式RAM,这些资源都可以作为ROM(ROM只是有初始值的RAM,而且该初始值不能改变)。有些低端的FPGA可能没有BLOCK RAM。本文主要介绍ROM的使用方法,RAM的使用方法类同。
        打开XILINX的ISE,NEW SOURCE中选择IP,写好NAME,点击下一步。


1d92e9ae-7dfe-4088-80c2-d85e9a0e8bae.JPG

 
在下图中选择你要的IP核。

0e964bd6-ae27-4641-bf7f-06a58dae677b.JPG



第一个是使用分布式ROM-如果你的ROM不是很大的话,而且内部BLOCK RAM资源有限的情况下,使用分布式ROM可以为你节约不少BLOCK RAM,但是它会占用一些逻辑资源。
第二个是双口BLOCK RAM.
第三个是单口BLOCK RAM.
选择你想要使用的IP核,(以常用的单口BLOCK RAM为例)点击NEXT:


7d28d722-6cbb-459d-8c19-cce9e64ba11c.JPG



点击完成。
进入如下图界面。


点击看大图


在component name内填写模块名(要小写)
第二项选择READ ONLY(选READ AND WRITE 就是RAM),表示要生成只读的ROM。
Memory size 里填好ROM的宽度和深度,上图是一个256×16BIT的ROM。
点击NEXT进入下图。


点击看大图


这里默认就可以了。
再NEXT:


点击看大图


这里可以选择是CLK上升沿读数据还是下降沿读。
继续NEXT:


点击看大图


这里比较关键,要导入ROM的值。
在LOAD INIT FILE 项上打勾,点击LOAD FILE……出现下图,要你选择一个文件。


7170df8f-202d-4ba6-8f9a-13532504284a.JPG



这个文件就是你要放在ROM中的数据,文件的后缀名是.COE。你可以自己建一个空的文本文件,然后把后缀名该为.COE即可。
文件内容的格式如下:
MEMORY_INITIALIZATION_RADIX=10;
MEMORY_INITIALIZATION_VECTOR=
32767,
32766,
32766,
32765,
32764,
32763,
32761,
32759,
32757,
……
32754;
注意:
第一行定义文件中的数据采用什么进制。可以使用10进制,2进制,16进制,数据大小不能超过你定义的数据宽度。
第二行照抄。
第三行开始就是数据了,每个数据用逗号","隔开,可以不分行,建议分行写,便于统计个数。
最后一个数据后用分号";"结束。
数据的个数必须和你定义的数据深度相同,否则会出错。
写好这个文件后,保存。
然后在点击LOAD FILE……,选择这个文件,点打开。
如果没有错误,可以点击旁边的show coefficients查看数据。如果数据很多(>512),建议不要使用此功能,可能会因数据太大而无法响应。

现在,可以点击GENERATE,产生代码了。
产生的代码中有个.MIF文件,就是ROM的数据的二进制文件。
其中的.V文件或.VHD就是生成的可综合的代码。


点击看大图



如上图的ROM_COS.XCO,选择它,双击VIEW HDL FUNCTIONAL MODEL
就可查看Verilog代码。
接下来,要删除ROM_COS.XCO,然后把ROM_COS.V添加进来。
接下来就可以综合了。


点击看大图

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2015-4-13 09:51

博主写的不错,适合初学者。

用户380725 2013-9-25 10:04

有用
相关推荐阅读
用户531580 2010-05-13 13:29
海明码详解
海明码是奇偶校验的一种扩充。它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。<...
用户531580 2010-04-17 23:19
又进一步
        终于有时间写日志了,这几周还真是忙啊,呵呵!        高速数据传输方面有了新的进展。我将向导生成的例子从头到尾研究了几遍,发现它包含以下几个模块:ROCKETIO模块,发送数据模...
用户531580 2010-03-27 16:59
摸索中前进
        忙碌的一周又过去了,上周计划的LCD没有调通,很是郁闷,不过令我欣慰的是高速数据传输方面有了新的进展,呵呵……       先说说LCD吧,如下图所示,是一块1602液晶,我以前用单片...
用户531580 2010-03-21 14:51
我们为什么要写testbench?
与写testbench相对应的功能手段还有画波形图,两者相比,画波形图的方法更加直观和易于入门,那为什么我们还要写Testbench呢?原因有以下五点:第一,画波形图只能提供极低的功能覆盖。! \  ...
用户531580 2010-03-20 15:02
开工
       搬到老校区已有一周了,这学期我的主要任务是做毕业设计,题目是用FPGA实现宽带信号的可靠传输,其实题目上学期已经拿到,但之前一直在做38所DSP函数库的项目,因此也就没有时间准备这个课题...
我要评论
2
1
关闭 站长推荐上一条 /3 下一条