2014-09-16 7 views
0

Код не работает корректно. Я получаю следующие ошибки:VHDL Конфигурация не найдена

** Error: HA_Config.vhd(38): Component instance "HA_Inst : HA_Comp" not found. ** Error: HA_Config.vhd(40): VHDL Compiler exiting

library ieee; 
use ieee.std_logic_1164.all; 

entity HA_Entity is 
    port (
    i_bit1 : in std_logic; 
    i_bit2 : in std_logic; 
    -- 
    o_sum : out std_logic; 
    o_carry : out std_logic 
    ); 
end HA_Entity; 


architecture HA_Arch of HA_Entity is 

    component HA_Comp is 
    port (
     i_bit1 : in std_logic; 
     i_bit2 : in std_logic; 
     -- 
     o_sum : out std_logic; 
     o_carry : out std_logic 
    ); 
    end component HA_Comp; 

begin 

    o_sum <= i_bit1 xor i_bit2; 
    o_carry <= i_bit1 and i_bit2; 

end HA_Arch; 

configuration HA_Config of HA_Entity is 
    for HA_Arch 
    for HA_Inst : HA_Comp 
     use entity HA_Entity(HA_Arch); 
    end for; 
    end for; 
end HA_Config; 

ответ

1

Конфигурация связывает экземпляр компонента с конкретным объектом и архитектуры. Связывание часть в конфигурации:

for HA_Inst : HA_Comp 
    use entity HA_Entity(HA_Arch); 
end for; 

Но нет экземпляра компонента имени HA_Inst компонента HA_Comp, просто объявленный компонент HA_Comp в архитектуре части HA_Arch, таким образом ошибка:

Component instance "HA_Inst : HA_Comp" not found.

HA_Comp фактически не используется нигде, поэтому его можно удалить. Кроме того, он выглядит как круговая ссылка, так как HA_Entity указан для использования внутри сам с configuration ... HA_Entity ... use entity HA_Entity ....

Если намерение состоит в том, чтобы позволить различные реализации HA_Arch, то может выглядеть следующим образом:

library ieee; 
use ieee.std_logic_1164.all; 

entity HA_Entity is 
    port (
    i_bit1 : in std_logic; 
    i_bit2 : in std_logic; 
    -- 
    o_sum : out std_logic; 
    o_carry : out std_logic 
    ); 
end HA_Entity; 


architecture HA_Arch of HA_Entity is 

    component HA_Comp is 
    port (
     i_bit1 : in std_logic; 
     i_bit2 : in std_logic; 
     -- 
     o_sum : out std_logic; 
     o_carry : out std_logic 
    ); 
    end component HA_Comp; 

begin 

    HA_Inst : component HA_Comp 
    port map(
     i_bit1 => i_bit1, 
     i_bit2 => i_bit2, 
     o_sum => o_sum, 
     o_carry => o_carry); 

end HA_Arch; 


library ieee; 
use ieee.std_logic_1164.all; 

entity HA_Comp_Entity is 
    port (
    i_bit1 : in std_logic; 
    i_bit2 : in std_logic; 
    -- 
    o_sum : out std_logic; 
    o_carry : out std_logic 
    ); 
end HA_Comp_Entity; 

architecture HA_Comp_Arch_1 of HA_Comp_Entity is 
begin 

    o_sum <= i_bit1 xor i_bit2; 
    o_carry <= i_bit1 and i_bit2; 

end HA_Comp_Arch_1; 


use work.all; 

configuration HA_Config of HA_Entity is 
    for HA_Arch 
    for HA_Inst : HA_Comp 
     use entity HA_Comp_Entity(HA_Comp_Arch_1); 
    end for; 
    end for; 
end HA_Config; 
+0

«HA_Comp фактически нигде не используется, поэтому он может быть удален.» Я попытался удалить его, но тогда, что я вставляю в эту строку: 'для HA_Inst: HA_Comp'? – Russell

+1

Если 'HA_Comp' не используется, то не требуется создавать какую-либо конфигурацию, которая связывает его с сущностью и архитектурой, поэтому весь' для HA_Inst ... end for' - это иголки. Однако это, вероятно, не намерение, поэтому подумайте, почему «HA_Comp» существует в первую очередь, и обновите дизайн, чтобы использовать его по назначению. Приведенный примерный код может быть полезным шаблоном. –

Смежные вопросы