Contador Johnson VHDL

Tengo un problema que me ha dado que dice:

Diseñe un contador Johnson de 4 bits y decodifique para los ocho estados usando solo cuatro flip-flops y ocho puertas. Su contador no necesita ser autocorregible.

Escribí mi código VHDL para el contador Johnson de 4 bits, pero estoy confundido en cuanto a lo que significa decodificar los ocho estados, usando ocho puertas. ¿Necesito tener lógica combinacional para implementar esto? Si es así, ¿cómo implementaría eso en vhdl?

Aquí está mi código:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;

entity eightRC is 

 port(
        CLK : in    std_logic;
        EN: in  std_logic;
        RST : in    std_logic;
        Q: out  std_logic_vector(7 downto 0)
    );

end eightRC;

architecture behavior of eightRC is
signal qs: std_logic_vector(7 downto 0);
begin
    process(CLK, RST, EN)
    begin 
        if(RST = '1') then
            QS <= "11111110";       --initial state for QS
      elsif (CLK'EVENT AND CLK = '1' and EN = '1') then     --enable starts the shifting
         QS(0) <= QS(7);            --shift '0' to the left each clock edge, Q(0) gets Q(0) bit value
         QS(7 downto 1) <= QS(6 downto 0);
      end if;                      
    Q <= QS;
    end process;
end behavior;

Respuestas (2)

No ha escrito el código para un contador Johnson de 4 bits . Ha escrito código para un contador Johnson de 8 bits .

Se le pide que cree un contador Johnson de 8 estados usando 4 flip-flips, por lo que claramente no puede usar una variable de 8 bits en su código VHDL y recorrerlo como lo ha hecho, ya que está usando 8-flip-flops.

Parece que está familiarizado con el tipo básico de contador Johnson que se ve así:

ingrese la descripción de la imagen aquí

Como probablemente pueda deducir, la entrada obtiene la salida invertida del último flip-flop. Por eso, a partir de una condición de REINICIO de todos los 0, un tren de pulsos de 4 0 o 4 1 pasa a través del contador Johnson, y la salida se ve así:

ingrese la descripción de la imagen aquí

Ahora considere que puede querer 8 bits de salida y 8 estados donde en cada caso solo 1 bit es alto, como lo produciría un contador típico, mientras usa solo estos 4 flip-flops. Para crear esa salida, debe agregar algunas puertas lógicas. Dado que debe crear esos bits de salida a partir de la salida del contador Johnson básico, puede ver que necesita alguna lógica que combine algunos de los estados de salida para crear los nuevos.

Ahora considere esta imagen. Para crear los estados requeridos, sus puertas deben estar conectadas a combinaciones de salida que son únicas

Donde está la línea roja, existe un estado único con ~Qa * ~Qd, como puede ver, el ciclo anterior a Qd era alto, y en el próximo ciclo Qa será alto, por lo tanto, este estado existe solo una vez.

Para la línea verde, existe un estado único con Qa * ~Qb, ya que en el ciclo anterior Qa era bajo y en el próximo ciclo Qb será alto, por lo tanto, el estado es único.

ingrese la descripción de la imagen aquí

Continuando, puede crear 8 estados únicos usando combinaciones lógicas simples de 2 entradas.

Ahora, como ha indicado que este es un problema de tarea, probablemente no debería simplemente darle la respuesta, sin embargo, si lee esto detenidamente y la página de origen, creo que lo entenderá lo suficientemente simple.

Finalmente, su contador Johnson con decodificación de salida se vería así:

ingrese la descripción de la imagen aquí

Y ahora lo ha decodificado en 8 estados con codificación one-hot.

ingrese la descripción de la imagen aquí

Todas las imágenes y el conocimiento provienen de este recurso fantástico y bien explicado, en Allaboutcircuits

Esto debería proporcionarle todo lo que necesita saber, sin embargo, si todavía tiene problemas con la forma exacta de implementar esto en VHDL, solo pregunte.

4 flip flop pueden tener 2^4=16 estados diferentes. en tu problema solo necesitas 8 estados. Entonces 8 estados no requieren 8 puertas.

simplemente conecte el flip flop como se muestra en el diagrama.

está trabajando con vhdl, así que vea este contador de johnson usando el tutorial de modelado estructural