Intel® Quartus® Prime Pro Edition用户指南: 设计建议

ID 683082
日期 9/28/2020
Public

本文档可提供新的版本。客户应 单击此处 前往查看最新版本。

文档目录

1.4.1.3. 检查Read-During-Write行为

确保在HDL设计中描述的存储器模块的read-during-write行为与目标器件体系结构一致。

当在同一时钟周期内从同一存储器地址进行读写时,HDL源代码将指定存储器行为。读取将返回此地址处的旧数据或写入此地址的新数据。这称为存储器模块的read-during-write行为。根据不同的目标器件系列,存储器模式和模块类型,Intel FPGA存储器模块具有不同的read-during-write行为。

综合工具保留了源代码中描述的功能。因此,如果源代码对RAM模块指定了不受支持的read-during-write行为,那么与专用RAM硬件相反, Intel® Quartus® Prime软件在常规逻辑单元中实现逻辑。

HDL代码中的连续读取

当在HDL代码中有连续读取时,会出现一个常见问题,如以下示例所示。请避免使用以下编码样式:

//Verilog HDL concurrent signal assignment
assign q = ram[raddr_reg];
-- VHDL concurrent signal assignment
q <= ram(raddr_reg);

这种类型的HDL表示,在进行写操作时,读操作立即在与读时钟无关的地址上反映新数据,这是异步存储器模块的行为。综合不能直接将此行为映射到同步存储器模块。如果写入时钟和读取时钟相同,那么综合可以推断存储器模块并添加额外的旁路逻辑,以使器件行为与HDL行为匹配。如果写时钟和读时钟不同,那么综合不能可靠地添加旁路逻辑,因此它将在常规逻辑单元中而不是专用RAM模块中实现逻辑。以下章节中的示例讨论了read-during-write条件的一些差异。

此外,某些器件逻辑阵列模块(LAB)中的MLAB存储器对于专用器件体系结构中的read-during-write而言,不容易支持旧数据或新数据行为。实现额外的逻辑以支持此行为会大大降低通过存储器的时序性能。

注: 为了在MLAB存储器中获得最佳性能,请确保您的设计在写操作期间不依赖于读数据。

在很多综合工具中,您可以声明read-during-write行为对您的设计并不重要(例如,如果您从未从同一地址(在同一时钟周期写入此地址)进行读取)。在 Intel® Quartus® Prime Pro Edition synthesis中,将综合属性ramstyle设置为no_rw_check,以允许 Intel® Quartus® Prime软件定义RAM的read-during-write行为,而不使用HDL代码指定的行为。此属性可以防止综合工具使用额外的逻辑来实现存储器模块,或者可以在其他情况下支持存储器推断。