Я пытаюсь реализовать преобразователь двоичного кода в 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;