Elemento de retardo variable [cerrado]

1

Este código si está compilado tiene un error aparece con el símbolo (k). Necesito implementar este bloque simple. k (que representa la cantidad de retraso) vendrá a mi bloque del bloque anterior.

library ieee;
use ieee.std_logic_1164.all;
entity delay is 
port( in_delay : in std_logic ;
       k : time ;
      out_delay : out std_logic);

end delay;
architecture behave of delay is

begin 
  process (in_delay )
   begin
   out_delay <= in_delay  after k ns;
  end process ; 
end behave;
    
pregunta user38707

2 respuestas

4

El problema es con el ns , que es un indicador de unidades que se usa solo cuando se especifica un tiempo literal. No puedes usarlo después de un nombre de variable. Cambia esa línea a:

out_delay <= in_delay after k;

Por cierto, este tipo de declaración está bien como parte de, por ejemplo, un banco de pruebas de simulación, pero cualquier declaración que incluya una cláusula after no se puede sintetizar en hardware real.

    
respondido por el Dave Tweed
0

Como dice Dave, su k ya es de tipo time y, por lo tanto, ya sabe en qué unidades se encuentra (puede pasar en 1 us y obtener un retraso de 1000 ns, por ejemplo). Si desea pasar un entero y que se lo interprete como un número de nanosegundos, puede hacer esto:

out_delay <= in_delay after some_int * 1 ns;
    
respondido por el Martin Thompson

Lea otras preguntas en las etiquetas