Cuando intento sintetizar mi diseño VHDL (usando Xilinx ISE Design Suite), recibo el mensaje:
WARNING:Cpld - The signal(s) 'e' are in combinatorial feedback loops.
These signals may cause hazards/glitches. Apply the NOREDUCE parameter to the
hazard reduction circuitry.
Timing analysis of paths involving this node may be inaccurate or incomplete.
Esto es confuso ya que mi diseño consiste simplemente en un contador 'c' que aumenta con cada tic del reloj y algunas señales que se derivan de él de una manera en la que no creo que pueda existir ningún bucle, para formar una señal de salida . Aquí está el código:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity foo is
port (
CLK : in std_logic;
A : out std_logic_vector(1 downto 0)
);
end foo;
architecture foo_arch of foo is
signal b : unsigned(1 downto 0);
signal e : std_logic;
signal c : unsigned(1 downto 0) := "00";
begin
process (CLK, c)
begin
if rising_edge(CLK) then
c <= c + 1;
end if;
end process;
b <= c(1 downto 0) - 1;
e <= '1' when b(1 downto 0) = 0 else '0';
A <= std_logic_vector(b(1 downto 0)) when e = '1' else "ZZ";
end foo_arch;
Para que puedas ver
- b se deriva de c
- e se deriva de b
- A (la salida) se deriva de b y e
¿Cuál es el problema? ¿Me estoy volviendo loco? ¿Estoy haciendo algo increíblemente estúpido o el sintetizador está jugando conmigo?