Asignación y condición de VHDL en el mismo límite de reloj en procesos paralelos

0

Supongamos que tengo dos procesos en VHDL: un proceso se activa en el borde ascendente del reloj y es una máquina de estados que establece una bandera en uno de sus estados. El segundo proceso también se activa en el flanco ascendente del reloj y tiene una declaración de condición que lee este indicador para ver si es '1'. ¿Cuándo será "verdadera" la condición en el segundo proceso? ¿En el mismo reloj que está configurada la bandera, o en el siguiente reloj?

Aquí hay un ejemplo:

-- state machine 
process (clk)
begin
    if rising_edge (clk) then       
        case StateMachine is
            when '0' =>
                flagA <= '0';
                StateMachine <= '1';
            when '1' =>
                flagA <= '1';
                StateMachine <= '1'; -- loop forever
        end case;
    end if;
end process;

-- condition
process (clk)
begin
    if rising_edge (clk) then       
        if (flagA = '1') then
            flagB <= '1';
        else
            flagB <= '0';
        end if;
    end if;
end process;

En este ejemplo, ¿se convertirá flagB en '1' en el mismo reloj que flagA se convirtió en '1'? ¿O será flagB convertido en '1' en el siguiente reloj?

    
pregunta Vadim

1 respuesta

3

El estado del indicador se muestreará en el siguiente borde del reloj. En el diseño síncrono, todas las condiciones están (o deben estar) "preparadas" antes de que se produzca el borde del reloj y, cuando se produce, el circuito pasa al estado nuevo dentro de un período de tiempo muy corto. Así, en situaciones como la suya, el circuito verá una condición previamente "preparada", por lo tanto, el estado anterior de la bandera. En el próximo borde del reloj, el nuevo valor del indicador se "preparará" y se muestreará.

Pasas todo el ciclo para obtener el nuevo valor del indicador propagado; puede considerar activar un proceso en el flanco ascendente y otro proceso en el flanco descendente, de esta manera solo pasará la mitad del ciclo.

Actualización (según los comentarios a continuación): al diseñar circuitos controlados por los dos bordes del reloj, debe prestar mucha atención al ciclo de trabajo del reloj, no solo a su período.

    
respondido por el Anonymous

Lea otras preguntas en las etiquetas