Esta es la función de un Conversor de tiempo a digital .
La idea es que inicie un contador cuando el sensor 1 le da un 1 y lo detiene cuando el sensor 2 le da un 1. La precisión está determinada por la frecuencia de reloj del contador. Incluso es posible tener una mayor precisión si agrega un interpolador (el método Nutt), pero no creo que lo necesite.
Para detectar el flanco ascendente, implementar detectores de borde:
signal sensor1delay : std_logic;
signal sensor1r_edge : std_logic;
begin
sensor1delay <= sensor1 when rising_edge(clk);
sensor1r_edge <= '1' when sensor1='1' and sensor1delay='0' else '0';
editar: La construcción Q <= D when rising_edge(CLK);
es VHDL perfectamente legal (desde VHDL93) y es compatible con todo el software de síntesis moderno afaik. Más personas lo están utilizando, solo Google it . También se describe en "Codificación efectiva con VHDL" por Ricardo Jasinski
entonces solo cuenta:
signal counter : natural;
signal output : natural;
begin
clock_proc: process(clk)
begin
if rising_edge(clk) then
if sensor1r_edge='1' then
counter <= 0;
else
counter <= counter+1; -- overflow error in simulation, not in synthesis
end if;
if sensor2r_edge='1' then
output <= counter;
end if;
end if;
end process;
Su última parte no está clara: a qué se refiere con "después de que un objeto en movimiento se mueva delante de él, no puedo almacenar el tiempo"
Editar:
Es probable que también sea necesario implementar sincronizadores (dominio de reloj) para las entradas del sensor.