2014-02-14 6 views
6
module johnson #(parameter N=8) 
    (output logic [N-1:0] q, input logic clk,reset); 

    always_ff @(posedge clk,posedge reset) 
    if(reset) 
     q<=0; 
    else 
     q<={~q[0],q[N-1:1]}; 

endmodule 

Oben ist der Systemverilog HDL für einen 8-Bit-Johnson-Zähler. Ich lese aus einem Lehrbuch, dass es eine große Anzahl von unbenutzten Zuständen aufweist, die einen eigenen Zähler bilden, d. H. Eine parasitäre Zustandsmaschine. Was genau ist diese parasitäre Zustandsmaschine?Was ist parasitäre State Machine in Johnson Zähler

Antwort

6

Das Problem hier ist, dass, wenn diese Schaltung aus irgendeinem Grund in einen der unbenutzten Zustände eintrat, Sie in einer Schleife stecken würden, dann nie zu einem der verwendeten Zustände zurückkehren. Dieser Zähler hat die folgenden Zustände:

00000000 
10000000 
11000000 
11100000 
11110000 
... 
00001111 
00000111 
00000011 
00000001 

Wenn eine kosmische Strahlung Ihren Chip trifft und dreht eines des Bits dann könnte man mit den Staaten am Ende, die im Normalbetrieb nicht existieren:

00010000 
10001000 
11000100 
11100010 
11110001 
01111000 
10111100 
.... 

Der einzige Weg, um wieder normal zu werden, besteht darin, das Zurücksetzen zu bestätigen. Sie haben zwei Optionen, um damit umzugehen: entweder fügen Sie eine Menge Logik hinzu, um die Situation zu erkennen, oder Sie gehen davon aus, dass ein zufälliges Umdrehen nicht passieren wird. Ich würde sagen, dass Sie sich darüber keine Sorgen machen müssen, es sei denn, dass dieses umgelegte Stück eine Rakete abfeuern wird.