英特尔 Quartus Prime Pro Edition用户指南: 设计建议

ID 683082
日期 8/03/2023
Public
文档目录

1.4.1.4. 控制RAM推断和实现

英特尔Quartus Prime综合对包含同步存储器模块的英特尔FPGA器件提供控制RAM推断和实现的选项。 综合工具通常不推断较小的RAM模块,因为如果在普通逻辑中使用寄存器,那么实现较小的RAM模块会更有效。

要指导英特尔Quartus Prime软件全局推断RAM模块(所有尺寸),需要在Advanced Analysis & Synthesis Settings对话框中使能Allow Any RAM Size for Recognition选项(Assignments > Settings > Compiler Settings > Synthesis Settings (Advanced))

或者,使用ramstyle RTL属性来指定如何实现一个推断的RAM,包括存储器模块的类型或使用普通逻辑而不是专用存储器模块。除非HDL代码指定了相应的ramstyle属性,否则英特尔Quartus Prime综合不会将推断的存储器映射到MLAB,尽管Fitter可能会将某些存储器映射到MLAB。

在RTL或者.qsf文件中设置ramstyle属性。
(* ramstyle = "mlab" *) my_shift_reg
set_instance_assignment -name RAMSTYLE_ATTRIBUTE LOGIC -to ram
此属性控制一个已推断的存储器的实现。将此属性应用于一个推断RAM、ROM或者移位寄存器的变量声明。合法值为:"M9K", "M10K", "M20K", "M144K", "MLAB, "no_rw_check", "logic"

您还可以对RTL中的RAM或ROM推断指定存储器模块的最大深度。将max_depth综合属性指定为一个变量的声明,此变量的声明表示设计文件中的RAM或ROM。例如:

// Limit the depth of the memory blocks implement "ram" to 512
// This forces the 英特尔Quartus Prime software to use two M512 blocks instead of one M4K block to implement this RAM
(* max_depth = 512 *) reg [7:0] ram[0:1023];

另外,您也可以指定no_ram综合属性以防止对特定阵列进行RAM推断。例如:

(* no_ram *) logic [11:0] my_array [0:12];