Впервые в 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;
Другие вопросы по тегам