2015-05-08 21 views
0

我需要強制我的合成器或編譯器使用RAM塊來存儲數據。當我編譯一下,看看編譯結果時,不使用任何RAM塊,但邏輯單元如何強制合成器使用RAM塊來存儲數據 - VHDL

type REG_Memory is array (0 to 3) of std_logic_vector(15 downto 0); 
signal Memory : REG_Memory := 
    (x"0001", 
     x"0010", 
     x"0100", 
     x"1000"); 

例如,下面的代碼中。我需要使用RAM塊作爲寄存器存儲,我該怎麼做?我使用的設備是IGLOO,我可以這樣做嗎?或者它會在設備重啓時丟失數據?,synplify pro是合成器。

+2

爲什麼你想有一個RAM目前還不清楚。在掉電時,FPGA的RAM和寄存器的內容會丟失。 IGLOO有一個可以保存內容的非易失性存儲器(http://www.microsemi.com/document-portal/doc_download/134388-ac429-smartfusion2-and-igloo2-accessing-envm-and-esram-from-fpga- fabric-libero-soc-v11-4-application-note),但使用比寄存器或內部RAM更復雜 –

回答

0

請查閱文檔。 Synplify有一本很好的FPGA參考手冊,其中包含有關如何獲得所需行爲的代碼示例和約束條件。有多種方法可以實現你想要的功能(在HDL中,在約束文件中等)。

您想了解Synopsys FPGA綜合參考手冊。特別在Microsemi部分。在同一本手冊中,您還可以找到關於RAM和ROM推斷的章節。

本手冊位於安裝的「doc」目錄中。


下面是他們提供了一個ROM的例子(也有考慮到其他的例子):

library ieee; 
use ieee.std_logic_1164.all; 
entity rom4 is 
    port (a : in std_logic_vector(4 downto 0); 
     z : out std_logic_vector(3 downto 0)); 
end rom4; 
architecture behave of rom4 is 
begin 
    process(a) 
    begin 
     if a = "00000" then 
     z <= "0001"; 
     elsif a = "00001" then 
     z <= "0010"; 
     elsif a = "00010" then 
     z <= "0110"; 
     elsif a = "00011" then 
     z <= "1010"; 
     elsif a = "00100" then 
     z <= "1000"; 
     elsif a = "00101" then 
     z <= "1001"; 
     elsif a = "00110" then 
     z <= "0000"; 
     elsif a = "00111" then 
     z <= "1110"; 
     elsif a = "01000" then 
     z <= "1111"; 
     elsif a = "01001" then 
     z <= "1110"; 
     elsif a = "01010" then 
     z <= "0001"; 
     elsif a = "01011" then 
     z <= "1000"; 
     elsif a = "01100" then 
     z <= "1110"; 
     elsif a = "01101" then 
     z <= "0011"; 
     elsif a = "01110" then 
     z <= "1111"; 
     elsif a = "01111" then 
     z <= "1100"; 
     elsif a = "10000" then 
     z <= "1000"; 
     elsif a = "10001" then 
     z <= "0000"; 
     elsif a = "10010" then 
     z <= "0011"; 
     else 
     z <= "0111"; 
     end if; 
    end process; 
end behave;