Впервые в VHDL / MODELSIM: невозможно скомпилировать компонент [(vcom-1576), ожидающий END.]
Я приходил сюда из-за проблем с C и / или Java.
Сейчас я изучаю VHDL, и сейчас я застрял в очень маленькой проблеме. Я подумал, может быть, свежий взгляд может дать мне решение. Я так близок к тому, чтобы это понять.
Это простой 1-БИТНЫЙ ADDER [отлично работает]
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
entity ADDC1 is
port ( A, B, CIN : in std_logic;
COUT, SUM : out std_logic);
end entity;
architecture DF of ADDC1 is
begin
SUM <= A XOR B XOR CIN;
COUT <= (A AND B) OR (B AND CIN) OR (A AND CIN);
end architecture;
Моя цель - создать цепной 4-битный сумматор с этим в качестве компонента.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;
entity ADDC4 is
port (
I1, I2: in std_logic_vector(3 downto 0);
CIN : in std_logic;
SUM : out std_logic_vector(3 downto 0);
COUT : out std_logic );
end entity ADDC4;
architecture STRUCT of ADDC4 is
component ADDC1(DF) is
port ( A: in std_logic;
B: in std_logic;
CIN: in std_logic;
COUT: out std_logic;
SUM : out std_logic);
end component;
signal COI1,COI2,COI3 : std_logic;
begin
AD1: work.ADCC1 port map (A => I1(0), B => I2(0), CIN => CIN, SUM => SUM(0), COUT => COI1);
AD2: work.ADCC1 port map (A => I1(1), B => I2(1), CIN => COI1, SUM => SUM(1), COUT => COI2);
AD3: work.ADCC1 port map (A => I1(2), B => I2(2), CIN => COI2, SUM => SUM(2), COUT => COI3);
AD4: work.ADCC1 port map (A => I1(3), B => I2(3), CIN => COI3, SUM => SUM(3), COUT => COUT);
end architecture STRUCT;
Я проверил несколько сайтов, потерял час, я знаю, что это, должно быть, глупая простая вещь, которую я не вижу, потому что я не знаком с языком.
Хотя в целом идея кажется хорошей.
Не могли бы вы помочь?
1 ответ
Некоторые вещи были неправильными.
Добавил это вверху
LIBRARY work;
Кроме того, ошибка новичка после 10 часового рабочего дня и грязь в глазах.
AD1: work.ADCC1 port map (A => I1(0), B => I2(0), CIN => CIN, SUM => SUM(0), COUT => COI1);
НЕПРАВИЛЬНО!!!
Во-первых: ADDC1 - правильное имя!!! (Будьте осторожны со своими именами, если читаете это в поисках решения)
Во-вторых: есть 3 способа написать это
AD1: entity work.ADDC1 port map (A => I1(0), B => I2(0), CIN => CIN, SUM => SUM(0), COUT => COI1);
или
AD1: entity work.ADDC1(DF) port map (A => I1(0), B => I2(0), CIN => CIN, SUM => SUM(0), COUT => COI1);
или просто
AD1: ADDC1 port map (A => I1(0), B => I2(0), CIN => CIN, SUM => SUM(0), COUT => COI1);
Последнее: даже если бы мой учитель так сказал...
component ADDC1(DF) is
это неправильный способ писать, вам нужно только сделать
component ADDC1 is
а затем выберите один из вышеперечисленных
Надеюсь, этот пост когда-нибудь поможет кому-нибудь;)
Всем привет,
PS: если вы хотите сохранить строки в своем коде, вам следует сделать
component ADDC1 is
port ( A, B, CIN: in std_logic;
COUT, SUM: out std_logic);
end component;