现在我正在开发一个项目,我通过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会更好吗?
答案 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,并且它们没有被使用,我会优先使用它们(但也许只是我)。