使用ISE时,使用IP核创建简单双端口RAM,即Simple Dual Port RAM的方法。
转自:https://jingyan.baidu.com/album/6f2f55a1681706b5b83e6c65.html?picindex=4
step1:
在项目上右键,新建,在新建界面选择IP Core(IP核),命名并创建。
然后会自动打开New Source Wizard,展开Memories & Storage Elements, 展开RAMs & ROMs,可以找到Block Memory Generator。
step2:
打开这个Generator,来到如图界面,左边是当前将要创建的Memory的输入输出。稍后的设置会调整这些端口。点击Next.
step3:
在第二步(Page 2 of 6),选择Simple Dual Port RAM,如果两个端口时钟相同也可以勾选Common Clock简化输入输出以及内部设计。
可以看到左边的端口有了地址端口ADDRA,ADDRB,输入DINA,输出DOUTB。还有A口写使能WEA,以及两个端口的CLKA和CLKB。
step4:
再下一步,设置Port A Options。包括数据宽度Write Width,和存储单元个数Write Depth。如图设置64个存储单元,对应的地址线6根。Port B只需要自动跟随A的设置即可(读端口)。
step5:
在第四步,下面的Memory Initialization设置存储器的初始化。勾选Load Init File以选择coe文件。
step6:
coe文件实质上是文本文件。我们使用记事本新建并编辑。
先写memory_initialization_radix=进制;
再写memory_initialization_vector=各单元数据逗号隔开;
编辑好后,保存并修改后缀为coe.
也可以通过Matlab生成。
step7:
如果导入成功,则会显示COE File Contents窗口,且没有红色的错误提示。
可以上下滚动查看各个Index的初始值是否符合预期。
step8:
然后点击Generate。需要等待一段时间。完成后,我们就可以在代码中使用这个名称的模块了。
比如我新建的这个是Ram,那么我就可以 Ram myram(.CLKA(clk)...)去调用它了。