Верхний объект ожидает вывода "Вход", в то время как нижний объект использует вывод "Вывод" - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь реализовать преобразователь двоичного кода в bcd, и я думал, что у меня все в порядке, но когда я пытаюсь его скомпилировать, я получаю

«Ошибка (12012): Несоответствие направления порта для объекта» Add3 : a1 "в порту" BCD ". Верхний объект ожидает вывода" Input ", в то время как нижний объект использует вывод" Output "."

Я не уверен, где я ошибаюсь.

Library ieee;
USE ieee.std_logic_1164.all;


ENTITY convert2bcd IS 
PORT(binary : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
      bcd : OUT STD_LOGIC_VECTOR(11 DOWNTO 0)); 

END convert2bcd;

Architecture behaviour of convert2bcd is


Signal bcd1, bcd2, bcd3, bcd4, bcd5, bcd6, bcd7 :   std_logic_vector(3 downto 0);
Signal xbcd1, xbcd2, xbcd3, xbcd4, xbcd5, xbcd6, xbcd7  :   std_logic_vector(3 downto 0);

Component Add3 is
PORT(Bin    :   std_logic_vector(3 downto 0);
      BCD   :   std_logic_vector(3 downto 0)
      );
      
End Component;

Begin   

a1  :   add3 Port map(bcd1, xbcd1);
a2  :   add3 Port map(bcd2, xbcd2);
a3  :   add3 Port map(bcd3, xbcd3);
a4  :   add3 Port map(bcd4, xbcd4);
a5  :   add3 Port map(bcd5, xbcd5);
a6  :   add3 Port map(bcd6, xbcd6);
a7  :   add3 Port map(bcd7, xbcd7);


bcd1 <= '0' & binary(7 downto 5);
bcd2 <= xbcd1(2 downto 0) & binary(4);
bcd3 <= xbcd2(2 downto 0) & binary(3);
bcd4 <= '0' & xbcd1(3) & xbcd2(3) & xbcd3(3);
bcd5 <= xbcd3(2 downto 0) & binary(2);
bcd6 <= xbcd4(2 downto 0) & xbcd5(3);
bcd7 <= xbcd5(2 downto 0) & binary(1);
bcd <= '0' & '0' & xbcd4(3) & xbcd6 & xbcd7 & binary(0);

 end behaviour; 

Это основной дизайн, а вот мой компонент add3

Library ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_std.all;

Entity Add3 is
PORT(Bin    :   in std_logic_vector(3 downto 0);
      BCD   :   out std_logic_vector(3 downto 0)
      );
      
End Add3;

Architecture behaviour of Add3 is

Begin

process(Bin)
begin

if (Bin < "0101") then
    BCD <= Bin;
else
    BCD <= std_logic_vector(unsigned(bin) + "0011");
    
end if;

end process;

end behaviour;
...