2015-09-03 69 views
1

我需要從定義的VHDL(.vhd)文件中讀取數據。該文件是這樣的:從另一個體繫結構中讀取VHDL數據

entity ROM is 
    port (address : in std_logic_vector(3 downto 0); 
      data : out std_logic_vector(7 downto 0)); 
end entity ROM; 

architecture behavioral of ROM is 
    type ROM is array (0 to 2**4 - 1) of std_logic_vector(7 downto 0); 
    constant my_ROM : ROM := (
     0 => "00000000", 
     1 => "00000001"); 

begin 

    data <= my_ROM(to_integer(unsigned(address))); 

end architecture behavioral; 

我知道類似的問題已發佈,How to read data from rom_type in VHDL?,但我想我還需要它的幫助。假設我有另一個.vhd文件,我應該如何獲取存儲在這個ROM實體中的數據?

+0

除了缺少上下文條款(例如'庫IEEE;使用ieee.std_logic_1164.all;使用ieee.numeric_std.all;')您的代碼示例不分析。用於提供默認值的聚合對於ROM陣列類型中的每個元素都沒有匹配的元素。 (你應該添加一個其他的選擇)。 – user1155120

回答

1

您需要定義一個地址和數據信號以連接到此架構中的ROM實體。例如;

signal rom_address : std_logic_vector(3 downto 0); 
signal rom_data : std_logic_vector(7 downto 0); 

然後,您可以將以下實例添加到您的體系結構中。

somelabel : entity work.ROM 
    port map (
    address => rom_address, 
    data => rom_data 
); 

您需要驅動rom_address信號讓你的ROM,從相應的地址中的數據。

你也可以做的是將這個實體聲明爲一個包中的一個組件或者將要實例化它的體系結構中的一個組件。 組件聲明如下所示;

component ROM is 
    port (
    address : in std_logic_vector(3 downto 0); 
    data : out std_logic_vector(7 downto 0) 
); 
end component; 

這允許您將此實體實例化爲您架構中的組件。

somelabel : ROM 
    port map (
    address => rom_address, 
    data => rom_data 
); 
+4

實體的直接實例化也可以通過'somelabel:entity work.ROM'來替換'somelabel:ROM',從而可以跳過對包或體系結構中組件的繁瑣聲明。 –

+0

好點!我已經更新了答案。 – 0xMB

相關問題