有三种实例化UltraRAM的方法:采用URAM288原语,采用手工编写RTL代码结合RAM_STYLE综合属性,采用XPM_MEMORY。相比下来,采用XPM_MEMORY最为快捷高效,因此这里只介绍这种方法。
XPM_MEMORY的位置在Vivado -> FlowNavigator -> Project Manager -> Language Templates,如下图所示。

以Simple Dual Port RAM为例,选中之后可看到相应的代码,如下图所示(这里只显示了部分代码)。

XPM_MEMORY的主要参数如下图所示(图中以_A结尾的参数换成_B即为B端口对应的参数)。这些参数中MEMORY_SIZE为Memory深度与宽度的乘积。WRITE_MODE_A有三个可选值,分别为read_first,write_first和no_change。需要注意的是当把UltraRAM配置为Simple Dual Port RAM时,WRITE_MODE_A只能是read_first或write_first,且当为write_first时,READ_LATENCY_A必须大于等于3。另一个重要的参数是READ_LATENCY_A/B,它不仅决定了输出的Latency,还影响了级联寄存器是否使用,从而影响Memory的时序性能。

OREG对Fmax的影响如下图所示(VirtexUltraScale Plus)。以-2芯片为例,使用OREG时,Fmax可达600MHz,未使用时Fmax降低至400MHz。

(图片来源:ds923,table 28)
综上所述,在使用UltraRAM时,要预先评估系统对Fmax和Latency的需求,以设置合适的READ_LATENCY_A/B,以满足系统需求。
结论:
-XPM_MEMORY是实例化UltraRAM的快捷高效方法
-使用XPM_MEMORY时,要预先评估系统对Fmax和Latency的需求
上期内容:
UltraRAM基本结构
下期内容:DSP48E2基本结构