Asignación predeterminada en VHDL

1

Estoy un poco confundido acerca de este concepto de asignación predeterminado. Normalmente, para evitar un latch, deberíamos dar explícitamente un valor a una señal en cada caso. Por ejemplo:

-- Assuming a is std_ulogic and b is std_ulogic_vector(3 downto 0)
process(a, b)
begin
    if a = '1' then
        b <= "1010";
    else
        b <= "0101";
    end if;
end process;

Pero, ¿por qué en el siguiente proceso, una declaración else no es necesaria?

process(clock, reset)
begin
    if reset = '1' then
        b <= "0000";
    elsif rising_edge(clock) then
        b <= b_next;
-- Why don't we need an else statement here?
    end if;
end process;

¿Puede alguien ayudarme? Gracias!

    
pregunta S. Li

1 respuesta

1

Dentro de su dispositivo de destino, ya sea FPGA, CPLD, ASIC o PLA, la lógica digital configurable se implementa (a) por puertas combinatorias o (b) por registros (pestillos o flip-flops).

La lógica combinatoria implementa las funciones AND, OR, XOR y NOT y sus derivadas, como mux, NAND, NOR, etc. Un circuito lógico combinatorio puede transformar su patrón de entrada en un nuevo patrón de salida. Un circuito lógico combinatorio siempre produce una salida repetible para cada combinación de sus entradas.

Un registro es una memoria de 1 bit. Simplemente puede copiar su entrada de datos a su salida de datos en respuesta a un borde (flip-flop) o nivel (latch) en su entrada de reloj. Los registros también pueden tener entradas de configuración y restablecimiento asíncronas que cambian la salida sin cambiar el reloj.

En VHDL, usted describe (modela) el comportamiento que le gustaría y la herramienta de software de síntesis intenta crear un circuito para hacerlo usando la lógica digital configurable en su dispositivo objetivo. Tu VHDL implica el comportamiento del circuito que quiere. La herramienta de síntesis intenta deducir estas funciones de su VHDL y producir el circuito lógico deseado.

En su VHDL, las funciones combinatorias deben estar implícitas por sentencias concurrentes o por un proceso que siempre produce una salida para cada combinación de sus entradas. Los registros deben estar implícitos en un proceso que solo cambia en respuesta a (a) un evento de nivel o borde en una sola entrada que representa el reloj de registro y (b) una entrada que representa el ajuste / restablecimiento que carga 1 o 0 (pero no otras señales) en las señales de salida.

Si su VHDL contiene un proceso que pretende ser combinatorio pero no produce una salida para cada patrón en sus entradas, inferirá que se requiere un pestillo porque se muestra que al menos una salida permanece igual.

Entonces, en tus ejemplos, el proceso que cuestionas implica un Flip-Flop tipo D (DFF). En las condiciones en que el restablecimiento está inactivo y el reloj no se ha elevado, la salida del registro lógico digital debe permanecer igual. En consecuencia, este proceso no debe contener un término 'else' que describa qué hacer cuando el restablecimiento está inactivo y el reloj no se ha incrementado.

    
respondido por el TonyM

Lea otras preguntas en las etiquetas