VHDL - несвязанные компоненты в верхнем модуле

Я работаю над проектом, и мне не удается подключить компоненты в верхнем модуле. Я просто не вижу, что я делаю неправильно. Любые предложения высоко ценятся.

Помимо невозможности увидеть компоненты на схеме RTL, я получаю несколько предупреждений:

WARNING:Xst:1290 - Hierarchical block <u0> is unconnected in block <TOP>.
   It will be removed from the design.
WARNING:Xst:1290 - Hierarchical block <u1> is unconnected in block <TOP>.
   It will be removed from the design.

WARNING:Xst:2677 - Node <u1/calc_deb> of sequential type is unconnected in block <TOP>.
WARNING:Xst:2677 - Node <u1/flipflops_1> of sequential type is unconnected in block <TOP>.
WARNING:Xst:2677 - Node <u1/flipflops_0> of sequential type is unconnected in block <TOP>.

Итак, вот реализация верхнего модуля:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity TOP is
port(
    calc: in std_logic;
    OP: in std_logic_vector(1 downto 0);
    inValue: in std_logic_vector(3 downto 0);
    clk: in std_logic
    );
end TOP;

architecture Behavioral of TOP is

component alu port(
        OP : in  std_logic_vector(1 downto 0);
      inValue : in  std_logic_vector(3 downto 0);
      regValue : in  std_logic_vector(3 downto 0);
      result: out std_logic_vector(4 downto 0);
      clk : in  STD_LOGIC
        );
end component;

component debouncer port(
    calc : in  STD_LOGIC;
    calc_deb : out  STD_LOGIC;
    clk: in std_logic
);  
end component;

signal calc_debaux: std_logic;
signal regValueaux: std_logic_vector(3 downto 0);
signal resultaux: std_logic_vector(4 downto 0);
--signal OP: std_logic_vector(1 downto 0);
--signal OP: std_logic_vector(3 downto 0);


begin

u0: alu port map(OP => OP,  inValue=>inValue,   regValue=>regValueaux,  result=>resultaux, clk=>clk);

u1: debouncer PORT MAP(calc=>calc, alc_deb=>calc_debaux, clk=>clk);

end Behavioral;

А вот две сущности, которые я создаю в верхнем модуле:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ALU is
    Port ( OP : in  std_logic_vector(1 downto 0);
           inValue : in  std_logic_vector(3 downto 0);
           regValue : in  std_logic_vector(3 downto 0);
           result: out std_logic_vector(4 downto 0);
           clk : in  STD_LOGIC
              );
end ALU;

architecture archi of alu is

signal res_temp: std_logic_vector(4 downto 0);
signal aux1, aux2: std_logic_vector(4 downto 0);

begin

aux1 <= ('0' & inValue);
aux2 <= ('0' & regValue);
result <= res_temp; 

process (inValue, OP)
begin
        case OP is
            when "00" =>
                res_temp <=  (aux1) + (aux2) ;
            when "01" =>
                res_temp <= aux1 - aux2; 
            when "10" =>
                res_temp <= (inValue and regValue);
            when others =>
                res_temp <= '0' & (regValue(0) & regValue(3 downto 1));   
        end case;
end process;
end archi ; 

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity debouncer is
    Port ( calc : in  STD_LOGIC;
           calc_deb : out  STD_LOGIC;
              clk: in std_logic);
end debouncer;

architecture Behavioral of debouncer is
  SIGNAL flipflops   : STD_LOGIC_VECTOR(1 DOWNTO 0); --input flip flops
  SIGNAL counter_set : STD_LOGIC;                    --sync reset to zero
  SIGNAL counter_out : STD_LOGIC_VECTOR(8 DOWNTO 0) := (OTHERS => '0'); --counter output
BEGIN

  counter_set <= flipflops(0) xor flipflops(1);   --determine when to start/reset counter

  PROCESS(clk)
  BEGIN
    IF(clk'EVENT and clk = '1') THEN
      flipflops(0) <= calc;
      flipflops(1) <= flipflops(0);
      If(counter_set = '1') THEN                  --reset counter because input is changing
        counter_out <= (OTHERS => '0');
      ELSIF(counter_out(8) = '0') THEN --stable input time is not yet met
        counter_out <= counter_out + 1;
      ELSE                                        --stable input time is met
        calc_deb <= flipflops(1);
      END IF;    
    END IF;
  END PROCESS;

end Behavioral;

Я также получаю еще несколько предупреждений:

Synthesizing Unit <TOP>.
    Related source file is "D:/Mestrado/1o ano/1o semestre/PSD/Projectos/andgates/TOP.vhd".
WARNING:Xst:646 - Signal <resultaux> is assigned but never used. This unconnected signal will be trimmed during the optimization process.
WARNING:Xst:653 - Signal <regValueaux> is used but never assigned. This sourceless signal will be automatically connected to value 0000.
WARNING:Xst:646 - Signal <calc_debaux> is assigned but never used. This unconnected signal will be trimmed during the optimization process.
Unit <TOP> synthesized.

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

Спасибо за уделенное время.


person Rui Moreno    schedule 08.11.2014    source источник
comment
u1: debouncer PORT MAP(calc=>calc, alc_deb=>calc_debaux, clk=>clk); должно быть u1: debouncer PORT MAP(calc=>calc, calc_deb=>calc_debaux, clk=>clk); (формальное alc_deb в списке ассоциаций должно быть calc_deb). Коллективные спецификации проекта VHDL анализируются и уточняются после исправления.   -  person    schedule 09.11.2014
comment
Вы можете выполнить поиск в Stackoverflow по сообщениям, содержащим 'warning:xst:1290'. Есть также Google и, в частности, сайт поддержки Xilinx. alu и debouncer участвуют в вашем проекте?   -  person    schedule 09.11.2014
comment
См. также [ПРЕДУПРЕЖДЕНИЕ:Xst:1290](forums.xilinx.com/t5/Synthesis/) на веб-сайте поддержки Xilinx.   -  person    schedule 09.11.2014
comment
Привет Давид, спасибо! Но после исправления я получаю точно такие же предупреждения, опубликованные здесь, в сводном отчете. Как вы могли заметить, я новичок в VHDL и не понимаю смысла этих предупреждений. Обратите внимание, что я не собираюсь создавать файл стимула для имитации. Скорее буду запускать проект на спартанце-3е.   -  person Rui Moreno    schedule 09.11.2014
comment
Привет Дэвид, я не заметил ваши другие 2 комментария. Я проверю эти ссылки и вернусь к вам. И да, debouncer и ALU находятся в моем проекте под верхним деревом модулей   -  person Rui Moreno    schedule 09.11.2014
comment
Примечание top не имеет вывода. Все будет съедено.   -  person    schedule 09.11.2014


Ответы (2)


Ваш объект верхнего уровня, TOP, похоже, не имеет выходных контактов. ISE довольно умен, когда дело доходит до попытки сэкономить ресурсы FPGA во время синтеза. Любая логика, которая каким-либо образом не используется для определения состояния выходного вывода в объекте верхнего уровня, будет синтезирована. Я предполагаю, что он думает, что весь ваш дизайн (из-за отсутствия лучшего слова) бесполезен, поскольку ни один из них не используется для управления выходным выводом TOP.

Попробуйте подключить выходные сигналы resultaux и/или calc_debaux к выходным портам самого TOP. Надеюсь, это проясняет ваши предупреждения.

person pwolfsberger    schedule 09.11.2014
comment
Ознакомьтесь с комментарием Примечание top не имеет вывода. Все будет съедено на самом вопросе. Спрашивающий отметил ранее в ответе, что он заставил его работать. Он отозвал ответ, потому что он был бесполезен (он не объяснил, что не так). - person ; 09.11.2014
comment
Вы правы @DavidKoontz. Извините, я не увидел ваш последний комментарий. Пока у него все работает, я думаю. - person pwolfsberger; 10.11.2014

Некоторые проблемы в вашем коде включают:

  • Опечатка в имени порта alc_deb должна быть calc_deb в экземпляре u1. Это тяжелая ошибка.
  • Неполный список конфиденциальности для process (inValue, OP). Должно быть: process (inValue, OP, aux1, aux2, regValue)
  • clk не используется в объекте ALU
  • Ни один из сигналов в TOP никогда не читается. (Это связано с тем, что у TOP нет выходных портов.)
  • Бонус (любимая мозоль): замените IEEE.STD_LOGIC_UNSIGNED.ALL на IEEE.NUMERIC_STD. Первый не стандартизирован и имеет множество проблем.
person Philippe    schedule 10.11.2014