软件平台
Vivado 2016.4
属性设置说明
1在 ip catalog -> block memory generator .
这里仅介绍真双口RAM, 真双口RAM支持A/B两个口可读可写。
属性1 operating mode
包含 writing first(WF), reading first(RF), no chang(NC)三种模式
参考手册如下:
当选择简单双口RAM时,即A口只能写,B口只能读,会发现A口默认设置为NC模式,则A口无法读数据。
属性2 ENx/WEx 型号
en是时钟使能,任何操作(读,写,复位)时,都要同时将en置位。即 ena=wea = 1时为写操作, ena=1(wea=0)时为读操作。
属性3 optional output register
primitives /core output register 具体功能如下图:
相当于两级寄存器。
默认选择A/B口都是primitives
如图所示,
step1: A口向地址0写入 0X0001,
step2: B口读取地址0, 读使能后两拍数据被读出(这里有个奇怪现象,enb必须保持两拍以上才能读出数据,否则读不出数据,仿真结果如下)
查看RAM的内部结构图,应该是REGCE导致的。
勾选regce,然后设置为1, 后才能读出数据。
取消primitives 和core(都不勾选)
仿真如下:
step1:A口向地址0写入0x0001,
step2: B口读地址0, 下一拍出数据(注意这里enb只有一拍)。
选择core output
step1: A口向地址0写入 0X0001,
step2: B口读取地址0, 读使能后两拍数据被读出(这里有个奇怪现象,enb必须保持两拍以上才能读出数据,否则读不出数据。未开启regce)
操作冲突
总结:
xilinx RAM的使用还是有些需要注意的地方,建议生成ip的时候,取消primitives output register配置, 这样数据在读使能的下一拍放出,寄存操作,放在自己逻辑里面去控制。