现在我正在做一个项目,在这个项目中,我使用fpgas通过i2c将字节从主设备发送到从设备。现在在我的slave中,我想存储进来的数据,我计划有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,但分布式ram应该用于小型内存。现在我的问题是,如果我使用这些类型的数组,它是否足够小,可以使用分布式?或者直接使用Block会更好?
发布于 2017-02-26 20:26:47
这取决于您的设计和您正在使用的特定FPGA。合成工具通常可以为你决定什么是最好的。只是,如果您希望该工具能够为您做出决定,您必须以一种可以同时实现它的方式来实现它。例如,对于Xilinx FPGA,您可以参考The sysnthesis user guide,它在"RAM HDL Coding Techniques“中描述了正确的VHDL语法。即不可能同时访问多个条目(除了以双端口RAM方式)。并且您需要一定量的时钟周期用于数据存储和/或检索。
更多链接:
发布于 2017-02-27 17:07:51
在你的例子中,这并不重要--分布式内存还是块内存。这可能是一个非常低速的设计,需要几百位内存。
发布于 2017-02-28 15:06:52
现在我的问题是,如果我使用这些类型的数组,它是否足够小,可以使用分布式?
这取决于您正在使用的特定FPGA以及您想要使用它的模式。例如,7系列设备将提供许多不同的访问配置(单、双、四),这些配置具有不同的内存配置(例如,单个片可以潜在地提供256×1位的单端口RAM)。
根据您提供的示例,您可能会将其中一个数组放入分布式RAM中,而其余的数组则需要多个BRAM或一个BRAM。值得注意的是,如果您混合使用DRAM/BRAM,则需要了解DRAM的读取语义(异步,而不是BRAM的同步),这是您需要考虑的。
如果你的设备上有DRAM,但没有人使用它们,我会优先使用它们,而不是DRAM(但这可能只是我自己的习惯)。
https://stackoverflow.com/questions/42462162
复制相似问题