O o L después de 3 pulsos de reloj VHDL

-1

Necesito ayuda para resolver un problema de bloqueo de código en VHDL.

Lámpara abierta alta después de 3 secuencias 100,101,110 De lo contrario, la lámpara de bloqueo de alta. Cada secuencia se alimenta con un pulso de reloj. Las lámparas son altas solo con la tercera secuencia de alimentación. La tecla Restablecer debería ayudar a restablecer el proceso.

Gracias aLot.

process (R, clk, X, S1, S2, S3) begin 
if R = '1' then 
 O <= '0'; 
 L <= '0'; 
elsif (clk'event and clk = '1') then 
 if X = "100" then 
  S1 <= '1'; 
  if X = "101" then 
   S2 <= '1'; 
  else S2 <= '0'; 
   if X = "110" then 
    S3 <= '1'; 
   else 
    S3 <= '0'; 
   end if; 
  end if;
  else S1 <= '0'; 
 end if; 
end if; 
if S1 = '1' and S2 = '1' and S3 = '1' then 
 O <= '1'; 
 L <= '0'; 
elsif S1 = '0' and S2 = '0' and S3 = '0' then 
 O <= '0'; 
 L <= '1'; 
end if; 
end process; 
end behavioral; 
    
pregunta Majid Rahimi

1 respuesta

1

Ok, la primera sugerencia de mi parte es dividir el código en 2 procesos. El proceso 1 debe ser una máquina de estado que haya intentado implementar en la mitad anterior del código con las señales S1, S2 y amp; S3. El proceso 2 se debe utilizar para impulsar las lámparas de salida. Aquí hay algunas sugerencias que podría implementar en el código para que funcione:

  1. Inicializar S1, S2 y amp; S3 a '0' inicialmente y también cada vez que se aplica un reinicio R.
  2. Para cada condición de X con la que está verificando la instrucción if, agregue también una instrucción else. Por ejemplo,

                   if X = "100" then
                     S1 <= '1';
                   else
                     S1 <= '0';
                   end if;
    
  3. Modifique cada condición subsiguiente para los siguientes estados de manera que también se considere el estado anterior. es decir,                    si S1 = '1' y X="101" entonces                      S2 < = '1';                    más                      S2 < = '0';                    terminara si; como eso. Esta podría ser una de las razones por las que las lámparas empezaron a brillar antes de que se completara la secuencia.

Una vez que la máquina de estados esté correctamente codificada en el proceso 1, puede decidir cómo desea que funcione la lógica de control de la lámpara aquí. Usted es libre de utilizar la codificación lógica combinatoria o la codificación secuencial (utilizando otro proceso) para este propósito. Preferiría conducir la lámpara O con una compuerta AND combinatoria de 3 entradas como se indica a continuación: O < = S1 y S2 y S3;

Esto garantiza que cualquier cambio en el estado de S1 / S2 / S3 se refleje inmediatamente en la lámpara sin ningún retraso de pulso de reloj.

Intente simular el código una vez en ModelSim o en cualquier otro simulador para ver si está funcionando bien ahora.

    
respondido por el Avin

Lea otras preguntas en las etiquetas