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;
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 after
cláusula no se puede sintetizar en hardware real.
Como dice Dave, su k
tipo ya es de time
tipo y, por lo tanto, ya sabe en qué unidades está (puede pasar 1 us
y 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;
David
usuario38707