código VHDL y pestillos no deseados

3

Estoy trabajando en la codificación de un Regsiter a1 con las señales de entrada b1,rst y wra1 el registro a1 se inicializa a un valor específico al reiniciar. a1 solo cambia su valor a b1 cuando wra1 es 1 ; de lo contrario, mantiene el valor anterior

process(clk,regrst)
begin
    if(regrst='1')then  
        a1 <= (others =>'0');
    elsif(clk'event and clk='1') then       
        if(wra1='1')then
            a1 <= b1;
        end if;
    end if;
end process;

En esta declaración, escribí el proceso de registro para actualizar la señal wra1 necesaria, pero estoy confundido sobre cómo hacer que se mantenga el valor antiguo de la salida en caso de que esta señal de escritura sea 0 ¿Este concepto genera pestillos no intencionados para almacenar el valor anterior? en caso afirmativo, ¿qué puedo agregar como asignación de registro predeterminada al inicio del proceso? y debo incluir la sentencia else con

a1<=a1; 

Gracias

    
pregunta chaosmind

1 respuesta

1

Como lo menciona Paebbels en su comentario, su proceso funciona exactamente como lo pretende.

Obtienes un flip-flop, y no un pestillo, debido a la condición en clk en tu sentencia if, que especifica que a1 se asigna solo cuando aumenta clk. clk'event significa que un cambio acaba de suceder en clk , por lo que clk'event and clk='1' significa " clk acaba de cambiar y ahora es uno", es decir, un flanco ascendente.

Una asignación predeterminada como la que usted propone no es necesaria porque una señal mantiene su valor anterior si no se asigna explícitamente una. Esto simplifica los procesos secuenciales como el que usted publicó, pero también es la fuente de cierres no deseados en los procesos combinatorios.

El siguiente es un pestillo:

process(wra1, b1) begin
    if(wra1='1')then
        a1 <= b1;
    end if;
end process;

Tenga en cuenta que 1) este proceso no tiene reloj (es decir, no tiene una condición de flanco ascendente en una señal), como un proceso que describe lógica combinatoria, pero 2) no se asigna ningún valor a a1 cuando wra1 no es 1, lo que significa que mantiene su valor actual hasta que wra1 vuelva a ser 1, incluso si cambia b1 . Esa es la semántica de un pestillo.

    
respondido por el Philippe Aubertin

Lea otras preguntas en las etiquetas