当 ISE 将 Verilog 中实例化的 2D 存储器映射到 BRAM 时,条件是什么?

What are the conditions when a 2D memory instantiated in Verilog is mapped to BRAM by ISE?

在多个论坛中搜索,我没有找到全面的答案。

我想了解一下,ISE 合成器何时将 [PARAM1:0] ram [PARAM2:0] 推断为块 RAM,何时不是?

此条件列表可能不完整:

  • 尺码
    如果内存太小,ISE 将使用分布式 RAM (LUT-RAM) 而不是 BlockRAM。内存的大小/区域必须可映射到单个或一组 BlockRAM。单个 BlockRAM 的每个数据端口可以有 8、9、16、18、32、36、64、72 位。如果内存行数匹配,其他大小也是可能的。
  • 端口
    BlockRAM 支持:

    • 单端口 (SP),
    • 简单双端口 (SDP),
    • 增强型简单双端口 (ESDP) 和
    • 真双端口 (TDP)

    回忆。一个写端口和 n 个读端口的组合也是可能的。

  • 重置
    BlockRAM 不支持重置。所以如果你的内存可以reset,如果可以推断为BRAM。
  • 时钟启用 (CE)、写入启用 (WE)、字节写入启用 (BWE)
    BlockRAM 支持 CE 和 WE,但通常不支持 BWE。
  • 时机
    内存必须从注册地址同步写入和同步读取或异步读取。
  • 输出寄存器(OUT_REG)
    输出寄存器是可选的,但可以改善整体时序。合成器可能会将 OUT_REG 从逻辑移动到具有嵌入式输出寄存器的 BlockRAM。

我们的开源库 PoC 包含 4 个可能的 on-chip RAM implementations written in generic VHDL code, which can be mapped to Xilinx BlockRAMs. I assume you can read and understand these VHDL snippets, to translate it into Verilog code :). Alternatively, Xilinx offers a synthesis guide(UG 626,v14.4,第 73 页)),其中列出了可综合代码的 VHDL 和 Verilog 设计模式。