2015-09-03 1 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;') ваш образец кода не анализирует. Агрегат, используемый для подачи значения по умолчанию, не имеет соответствующего элемента для каждого элемента в типе массива ПЗУ. (Вы должны были добавить другой выбор). – user1155120

ответ

1

Вам необходимо определить адрес и сигнал данных для подключения к объекту ПЗУ в этой архитектуре. Например;

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 сигнал, чтобы получить данные из соответствующих адресов в вашем диске.

То, что вы могли бы сделать, - объявить этот объект как компонент в пакете или в архитектуре, из которой будет создаваться экземпляр. Декларация компонента выглядит так:

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

Смежные вопросы