最好使用Block RAM还是分布式RAM?

时间:2017-02-25 22:09:48

标签: vhdl fpga ram

现在我正在开发一个项目,我通过i2c使用fpgas从主站向从站发送字节。现在在我的奴隶中我想存储数据,我计划在3-5个数组之间,如下所示,每个数组的索引范围从0到71不等:

type array1 is array(0 to 49) of std_logic_vector(7 downto 0);

type array2 is array(0 to 23) of std_logic_vector(7 downto 0);

type array3 is array(0 to 71) of std_logic_vector(7 downto 0);

正在进行一些研究,我知道xilinx有两种不同类型的ram,称为Block和Distributed,但分布式应该用于小型存储器。现在我的问题是,如果我使用这些类型的数组是否小到足以使用分布式?或者选择Block会更好吗?

3 个答案:

答案 0 :(得分:1)

这取决于您的设计和您使用的特定FPGA。 综合工具通常可以为您决定什么是最好的。 只有,如果您希望工具能够为您做出决定,您必须以可以同时实现的方式实现它。对于Xilinx FPGA,您可以参考The sysnthesis user guide,它描述了" RAM HDL编码技术中的正确VHDL语法"。 即不可能同时访问多个条目(除了双端口RAM方式)。并且您需要一定的时钟周期来进行数据存储和/或检索。

更多链接:

答案 1 :(得分:1)

在你的情况下,它并不重要 - 分布式或阻止内存。它可能是一种需要几百位内存的超低速设计。

答案 2 :(得分:0)

  

现在我的问题是,如果我使用这些类型的数组是否小到足以使用分布式?

这取决于您使用的特定FPGA以及您要使用它的模式。例如,7系列器件将提供许多不同的访问配置(单,双,四),它们具有不同的存储器配置(例如,单个片可能提供256 x 1位单端口RAM)。 / p>

根据您提供的示例,您可能会在分布式RAM中安装一个阵列,其余阵列需要多个DRAM或单个BRAM。值得注意的是,如果您确实使用了DRAM / BRAM的混合,则需要了解DRAM的读取语义(异步,而不是BRAM的同步),您需要考虑这些语义。

如果设备上有BRAM,并且它们没有被使用,我会优先使用它们(但也许只是我)。