2016-05-10 4 views
-1

Я определил объект с входным и выходным портами как типа std логического вектора.VHDL - ошибка отображения порта порта

В архитектуре выполняется процесс, который изменяет значение выходного порта и проверяет, какое значение имеет порт.

Теперь, в моем другом файле vhdl, называемом top.vhd, я создаю несколько таких объектов, используя цикл for generate.

Что мне нужно, так это связать значение порта вывода с портом, но я просто не могу понять, как это сделать.

Допустим, что объект в мой первый файл VHD, выглядит следующим образом:

entity testt1 is 

    Port ( 
     var_in  : in STD_LOGIC_VECTOR (3 downto 0); 
     var_out : out STD_LOGIC_VECTOR (3 downto 0); 
    ); 
end testt1; 

architecture Behavioral of testt1 is 

.....process that changes the value of the var_out port and checks the value of the in port..... 

end Behavioral; 

Теперь в моем главном файле VHD, называемой top.vhd, после того как я порт отобразить их мне нужно, чтобы быть в состоянии установить значение порта в значении порта вывода, но я просто не могу понять, как это сделать.

Был бы рад за любую помощь.

+0

Объявите сигнал того же типа, и когда вы создаете экземпляр 'testt1', используйте карту порта для подключения сигнала к обоим портам. –

+0

Thats, что я пытался сделать, но это не позволит мне синтезировать по какой-то причине, хотя я не получаю никаких ошибок. – Daeto

+0

Но этот подход должен быть в порядке, не так ли? Сопоставление обоих из них с одним сигналом, так что, когда внешний порт изменяется, так же как и в порту, правильно? – Daeto

ответ

1

вы можете использовать для этого массивы. Например, вы хотите иметь N = 8 тестовых единиц, созданных в верхнем модуле. Вам понадобится массив из K = N + 1 = 9 элементов, чтобы соединить все вместе.

entity top() 

architecture rtl of top is 
    component testt1 
    port(var_in : in std_logic_vector(3 downto 0); 
     var_out : out std_logic_vector(3 downto 0)); 
    end component; 

    type my_array is array (8 downto 0) of std_logic_vector(3 downto); 
    signal var : my_array; 

begin 

    var(0) <= "0001"; -- input val to first test1 unit 

    GEN_REG: 
    for i in 0 to 7 generate 
     gen_unit : testt1 port map 
     (var_in => var(i), 
      var_out => var(i+1)); 
    end generate GEN_REG; 

    -- var(8) will be output of last test1 unit 

end rtl; 
+0

Я подозреваю, что это ответ, который задает вопрошающий, но поскольку вопрос не очень ясен, трудно сказать. Это ответ, который я имел в виду. –

+0

Но почему я не могу просто подключить оба из них к одному и тому же сигналу? Я использую упрощенный код, потому что оригинал слишком сложный. Допустим, я хочу иметь 25 единиц, что означает 25x4 = 100.Мне нужен вектор 99 downto 0, где я подключу 4 бита и в var каждого блока. Не так ли? – Daeto