Elemento de retardo variable [cerrado]

Este código, si se compila, tiene un error que aparece con el símbolo (k). Necesito implementar este bloque simple. k (que representa la cantidad de retraso) llegará a mi bloque desde el 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;
¿Has probado con otro identificador? 'k' es el sufijo x1000, por lo que podría no funcionar.
cambio k a otra variable y aparece el error. mmmmmmmmmm.vhd(16): cerca de "ns": esperando ';' si cambio la variable a una constante, funciona, pero necesito un retraso variable

Respuestas (2)

El problema es con el ns, que es un indicador de unidades que se usa solo cuando se especifica un tiempo literal. No puede 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, digamos, un banco de pruebas de simulación, pero cualquier declaración que incluya una aftercláusula no se puede sintetizar en hardware real.

Como dice Dave, su ktipo ya es de timetipo y, por lo tanto, ya sabe en qué unidades está (puede pasar 1 usy obtener un retraso de 1000 ns, por ejemplo). Si desea pasar un número entero y que se interprete como una cantidad de nanosegundos, puede hacer esto:

out_delay <= in_delay after some_int * 1 ns;