Внедрение ПЗУ в xilinx (vhdl)

Я пытаюсь реализовать модуль ПЗУ и построил для него тестовый стенд. Синтаксис проверки для rom.vhd показывает «правильно», и он также показывает «правильно» файл тестового стенда, но когда я нажимаю на simluate, он показывает некоторую ошибку.

Ниже приведен код и отображаемая ошибка.

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
----------------

entity rom is 
port ( clk : in std_logic ;
     address : in integer range 0 to 15 ;
     data_out : out std_logic_vector( 7 downto 0 )) ;
end entity ;

------------------
architecture arch of rom is 

signal reg_address : integer range 0 to 15 ;
type memory is array ( 0 to 15 ) of std_logic_vector( 7 downto 0 ) ;
constant myrom : memory := (
2 => "11111111" , --255
3 => "11010101" , 
4 => "01101000" , 
6 => "10011011" , 
8 => "01101101" , 
9 => "00110111" , 
others => "00000000" ) ;
begin 
process(clk)
begin 
if( clk'event and clk = '1' ) then
    reg_address <= address ;
end if ;
end process ;
---------------
data_out <= myrom(reg_address) ;
 end architecture ;

файл тестового стенда:

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
----------------

entity rom_tb is 
end entity ;

-----------------------
architecture tb of rom_tb is 
component rom is 
port ( clk : in std_logic ;
     address : in integer range 0 to 15 ;
     data_out : out std_logic_vector( 7 downto 0 )) ;
end component ;
--------------------------
signal clk_tb : std_logic := '0' ;
signal address_tb : integer := 0 ; 
signal data_out_tb : std_logic_vector( 7 downto 0 ) ;
--------------------------
begin 
dut : rom port map (
    clk => clk_tb ,
    address => address_tb ,
    data_out => data_out_tb ) ;
------------------
clk_tb <= not clk_tb after 20ns ;
address_tb <= 1 after 30ns ,
                 2 after 60ns ,
                 3 after 90ns ,
                  4 after 120ns ,
                 5 after 150ns ,
                 6 after 180ns ,
                 7 after 210ns ,
                 8 after 240ns ,
                 9 after 270ns ,
                10 after 300ns ,
                11 after 330ns ,
                12 after 360ns ,
                13 after 390ns ,
                14 after 420ns ,
                15 after 450ns ;
 end architecture ; 

ошибка:

ОШИБКА: Симулятор: 29 - при 0 нс: в rom_tb(tb), файл D:/VHDLPrograms/Tb/ROM/rom_tb.vhd: карта портов по умолчанию для ПЗУ объекта в ПЗУ компонента подключает локальный адрес порта типа INTEGER к std_logic_vector тип порта объекта.


person abkds    schedule 10.07.2013    source источник
comment
Я только что создал код, который у вас есть в новом проекте Xilinx, используя ISE 14.4 и ISim, и я не могу воссоздать вашу проблему.   -  person Bill Lynch    schedule 11.07.2013
comment
Значит работает. вы получаете вывод.   -  person abkds    schedule 11.07.2013
comment
i.stack.imgur.com/Q7MhE.png   -  person Bill Lynch    schedule 11.07.2013
comment
Хорошо ! Моделирование поведения запущено, но моделирование после маршрута не работает.   -  person abkds    schedule 11.07.2013
comment
Вы знаете, что такие вещи, как clk_tb <= not clk_tb after 20ns;, не могут быть синтезированы, верно?   -  person Bill Lynch    schedule 11.07.2013
comment
О, теперь я знаю, на самом деле я прикасался к vhdl после долгого времени, поэтому я забыл некоторые основные вещи. Теперь я помню!   -  person abkds    schedule 11.07.2013
comment
@sharth, я не думаю, что он пытается синтезировать тестовый стенд...   -  person user_1818839    schedule 11.07.2013
comment
Я проверил ваш tb на modelsim 10.2, и он работает нормально. Однако я получил следующее предупреждение: «Предупреждение: [4] rom_tb.vhd(26): (vcom-1207) Между абстрактным литералом и идентификатором должен быть разделитель».   -  person Passepartout    schedule 11.07.2013
comment
[...] послемаршрутная симуляция не работает. Вам понадобится другой тестовый стенд для симуляции после маршрута. После маршрута ваш целочисленный порт станет портом std_logic_vector, поэтому, естественно, ваш тестовый стенд больше не работает. Вам нужно будет создать имитационную модель Post-Place & Route и перейти оттуда.   -  person FRob    schedule 18.07.2013


Ответы (1)


Убедитесь, что (хороший) тестовый стенд, который вы разместили выше, на самом деле является тем, который вы моделируете.

Если вы используете инструменты Xilinx для создания тестового стенда для объекта VHDL, такого как ваше ПЗУ, он автоматически преобразует все ваши типы данных порта в std_logic[_vector], так что полученный тестовый стенд не будет работать, пока вы его не исправите. Ошибка, о которой вы сообщаете, звучит так, как будто в вашем проекте более одного файла «rom_tb». Если это не проблема, попробуйте «перезапустить все» или «Проект/Очистить файлы проекта», а затем «перезапустить все», чтобы удалить устаревшие скомпилированные версии всех ваших файлов.

РЕДАКТИРОВАТЬ: симуляция после маршрута имеет противоположную проблему. Целочисленный порт был преобразован в std_logic_vector процессом синтеза/P&R. Одним из решений является создание файла-оболочки, который выглядит как ваш объект «Rom», но в котором архитектура преобразует порт адреса в «unsigned», а затем в «std_logic_vector» и передает его версии ROM после PAR.

Хорошо запустить симуляцию после PAR один или два раза, чтобы обрести уверенность в инструментах, но это не должно быть рутиной. Обычно поведенческого моделирования и статического временного анализа после PAR достаточно, если только вы не ищете ошибки инструмента (неправильный синтез) или асинхронную логику (пересечение доменов часов).

person user_1818839    schedule 10.07.2013