El contador VHDL no se actualiza cuando se desea

0

Para un proyecto en el que estoy trabajando, necesito un contador cuyo valor aumente tan pronto como el control de incremento aumenta (es decir, en el flanco ascendente). Sin embargo, he tenido problemas para implementar esto en VHDL.

Aquí hay un código que he escrito:

IF Reset='1' THEN
        count := 0; -- Asynchronous reset
    ELSIF rising_edge(clock) THEN
        IF Enable = '1' THEN
            count := count+1; -- Increment
        END IF;
    END IF;
    q <= std_logic_vector(to_unsigned(count,12));

Aquí está la forma de onda de simulación de ModelSim:

Como puede ver, 'q' solo se actualiza en un ciclo de reloj DESPUÉS de que la entrada de Habilitar esté alta. Quiero que q se incremente tan pronto como Habilitar sea alto. ¿Hay alguna manera de hacer esto?

    
pregunta Ted X

2 respuestas

0

Todo está bien, cuando aparece el flanco ascendente, la señal debe ser estable, no elevarse por sí sola. Encontrará este problema 7 más adelante, cuando la lógica que construya no propagará la señal lo suficientemente rápido y la salida no estará lista antes del próximo reloj.

Por lo tanto, ahora los enemigos en modelosim hacen "habilitar" estable en algún lugar en medio de tu ciclo de reloj anterior.

    
respondido por el Gregory Kornblum
1

Agregando a la respuesta de Gregory: si Enable es una señal síncrona (es decir, se produce con la misma señal de reloj clock ), entonces cuando clock aumenta enable aún es bajo (aunque esto es Difícil de ver en Modelsim).

Esto no es realmente un problema, solo es algo que debes tener en cuenta en tu diseño.

    
respondido por el MBaz

Lea otras preguntas en las etiquetas