ISE 13.4 を使用する Virtex-5 のブロック RAM に格納したいベクターの配列があります。1 つの BRAM に収まるはずの 32Kb ですが、すべてロジックに格納されています。私のシステムは AMBA APB バスを使用しているので、select ラインと enable ラインをチェックします。このコードが 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
私は常に出力を駆動することができましたが、私はしたくありません。それは電力を浪費します。他のアイデアはありますか?