我有一个向量数组,我想使用 ISE 13.4 将它们存储在 Virtex-5 上的 Block RAM 中。它是 32Kb,应该适合 1 个 BRAM,但它都存储在逻辑中。我的系统使用 AMBA APB 总线,所以我检查选择线和启用线。请帮助我理解为什么这段代码不能推断出 BRAM。注意:这是一个更容易理解的虚拟示例,应该可以帮助我处理其他代码。
architecture Behavioral of top is
type memory_array is array (63 downto 0) of std_logic_vector(31 downto 0);
signal memory : memory_array;
attribute ram_style: string;
attribute ram_style of memory : signal is "block";
begin
process(Clk)
begin
if(rising_edge(Clk)) then
if(Sel and Wr_en and Enable) = '1' then
memory(to_integer(Paddr(5 downto 0))) <= Data_in;
elsif(Sel and not Wr_en and Enable) = '1' then
Data_out <= memory(to_integer(Paddr(5 downto 0)));
end if;
end if;
end process;
end Behavioral;
我ram_style
将数组声明为,block
但 XST 报告说:WARNING:Xst:3211 - Cannot use block RAM resources for signal <Mram_memory>. Please check that the RAM contents is read synchronously.
问题似乎在于 read_enable 条件,但 Virtex 5 用户指南听起来好像 BRAM 硬块上有一个enable
和一个write_enable
。我可以一直驱动输出,但我不想这样做,那样会浪费功率。还有其他想法吗?