建立工程后,首先我们要生成一个coe文件,方法有很多,比如:matlab、excel表格生成数据等等。然而我们的coe文件是有一定格式的,格式如下:
memory_initialization_radix=16;
memory_initialization_vector=
第一行是规定数据的进制,如果是16进制,就在等号后面写上16,二进制就写2,其他同理。第二行是数据,在第二行下面开始把数据一个一个的写出来,数据之间用逗号隔开,最后一个数据后面加分号。
内容编写完成后,另存为.coe文件。如图:
我们这里数据从0到255,地址默认。
点击保存,coe文件就已经制作完成。
当然,如果数据很多,我们是不可能一个一个的来写的,那么我们有没有其他的方法呢,肯定是有的。下面向大家介绍一种简单的方法,那就是用MATLAB来写coe文件。
首先我们打开MATLAB,在命令窗口输入以下代码:
代码输入无误后,保存文件,会看到有一个名字为data.coe的文件生成。我们用编辑器打开,会看到我们的数据文件是没有问题的。
ISE工具中,调用IP核的方法跟新建文件类似,所以我们在调用IP核的时候,点击Hierarchy中的rom_test,右键选择New Source。选择文件类型为IP (CORE Generator & Architecture Wizard)。文件名为my_rom。
在搜索界面,搜索block memory。会看到有两个选项,我们选择RAMs & ROMs里面的Block Memory Generator7.3。点击Next。然后点击Finish。
然后我们会看到如图界面,点击Next。弹出如下图示:
存储器类型选择单端口ROM。
ROM分为单端口(1-port)和双端口(2-port)。ROM是一个只读存储器,通过给予地址和读使能,就可以得出对应的地址的数据。在FPGA中,ROM可是配置两套端口,这两套端口相同,都可以通过给予地址和读使能,得出对应的地址的数据,并且相互独立,但是共用同一段存储空间。
在此选择ROM :1-port。点击Next
这里我们以我们之前设置的数据文件为例,数据位宽为8,数据深度为256,使能ENA打开,如图设置。点击next。
此界面为数据设置界面,因为ROM为只读存储器,所以我们需要在使用前提前配置好数据。这里就需要我们之前做好的.coe文件。在Memeory Initialization下方把Load Init File勾选上。点击Browse,找到我们的文件位置。选好之后,点击Next。
此界面是配置端口的界面,第一栏是复位端口的设置,我们这里不使用该端口,保持默认设置,点击Next。
此界面保持默认设置,点击Generate。
顶层模块负责例化my_rom。my_rom的例化代码在ipcore_dir -> my_rom.veo中。
设计代码为:
设计仿真文件时,将所有的地址轮询一遍,查看输出的数据是否正确,rden信号设置为随机值,在不同的地址随机决定是否读出。
仿真代码为:
repeat语句为重复语句,相当于把begin end中间的语句重复执行N次。
仿真编译通过后,运行仿真。
从波形图中可以看出,当rden为高电平时,rdata输出数据,当rden为低电平时,rdata不输出新数据。
将ROM设置为双端口时,addr、rden和rdata会多出一套,操作时序和方法是相同的。