Johnson Counter VHDL

Ich habe ein Problem, das mir gegeben wurde, das besagt:

Entwerfen Sie einen 4-Bit-Johnson-Zähler und Dekodierung für alle acht Zustände mit nur vier Flip-Flops und acht Gattern. Ihr Zähler muss nicht selbstkorrigierend sein.

Ich habe meinen VHDL-Code für den 4-Bit-Johnson-Zähler geschrieben, aber ich bin verwirrt, was es bedeutet, alle acht Zustände mit acht Gattern zu decodieren? Muss ich kombinatorische Logik haben, um dies zu implementieren? Wenn ja, wie würde ich das in vhdl implementieren?

Hier ist mein Code:

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;

Antworten (2)

Sie haben den Code für einen 4-Bit- Johnson-Zähler nicht geschrieben. Sie haben Code für einen 8-Bit- Johnson-Zähler geschrieben.

Sie werden gebeten, einen 8-State-Johnson-Zähler mit 4 Flip-Flops zu erstellen. Sie können also offensichtlich nicht einfach eine 8-Bit-Variable in Ihrem VHDL-Code verwenden und sie wie bisher durchschleifen, da dies 8-Flip-Flops verwendet.

Es sieht so aus, als ob Sie mit dem grundlegenden Typ von Johnson-Zähler vertraut sind, der so aussieht:

Geben Sie hier die Bildbeschreibung ein

Wie Sie wahrscheinlich ableiten können, erhält der Eingang den invertierten Ausgang des letzten Flip-Flops. Aus diesem Grund geht ausgehend von einem RESET-Zustand mit lauter Nullen eine Impulsfolge von 4 Nullen oder 4 Einsen durch den Johnson-Zähler, und die Ausgabe sieht so aus:

Geben Sie hier die Bildbeschreibung ein

Stellen Sie sich nun vor, Sie möchten vielleicht 8 Ausgangsbits und 8 Zustände, in denen jeweils nur 1 Bit hoch ist, wie es ein typischer Zähler erzeugen würde, während Sie nur diese 4 Flip-Flops verwenden. Um diesen Ausgang zu erstellen, müssen Sie einige Logikgatter hinzufügen. Da Sie diese Ausgangsbits aus dem Ausgang des einfachen Johnson-Zählers erstellen müssen, können Sie sehen, dass Sie eine Logik benötigen, die einige der Ausgangszustände kombiniert, um die neuen zu erstellen.

Betrachten Sie nun dieses Bild. Um die erforderlichen Zustände zu erzeugen, müssen Ihre Gates mit einzigartigen Ausgangskombinationen verbunden werden

Wo die rote Linie ist, existiert ein eindeutiger Zustand mit ~Qa * ~Qd, wie Sie den Zyklus sehen können, bevor Qd hoch war, und beim nächsten Zyklus wird Qa hoch, daher existiert dieser Zustand nur einmal.

Für die grüne Linie existiert ein eindeutiger Zustand mit Qa * ~Qb, da in dem Zyklus, bevor Qa niedrig war, und im nächsten Zyklus Qb hoch wird, daher ist der Zustand eindeutig.

Geben Sie hier die Bildbeschreibung ein

Im Folgenden können Sie 8 eindeutige Zustände erstellen, indem Sie einfache 2-Eingangslogikkombinationen verwenden.

Da Sie nun angedeutet haben, dass dies ein Hausaufgabenproblem ist, sollte ich Ihnen wahrscheinlich nicht nur die Antwort geben, aber wenn Sie dies und die Quellseite gründlich lesen, werden Sie es meiner Meinung nach einfach genug verstehen.

Schließlich würde Ihr Johnson-Zähler mit Ausgangsdecodierung so aussehen:

Geben Sie hier die Bildbeschreibung ein

Und jetzt haben Sie es mit One-Hot-Codierung in 8 Zustände decodiert.

Geben Sie hier die Bildbeschreibung ein

Alle Bilder und Kenntnisse stammen aus dieser fantastischen und gut erklärten Ressource bei Allaboutcircuits

Dies sollte Ihnen alles geben, was Sie wissen müssen. Wenn Sie jedoch immer noch Probleme haben, dies in VHDL genau zu implementieren, fragen Sie einfach.

4 Flipflops können 2^4=16 verschiedene Zustände haben. In Ihrem Problem benötigen Sie nur 8 Zustände. 8 Zustände erfordern also keine 8 Gatter.

Schließen Sie einfach das Flip-Flop wie im Diagramm gezeigt an.

Sie arbeiten mit VHDL, also sehen Sie sich dieses Tutorial von Johnson Counter Using Structural Modeling an