logo

Verilog Grey Counter

Gray-Code ist eine Art binäres Zahlensystem, bei dem sich jeweils nur ein Bit ändert. Heutzutage ist Gray-Code in der digitalen Welt weit verbreitet. Es wird bei der Fehlerkorrektur und Signalübertragung hilfreich sein. Der Gray-Zähler ist auch beim Design und der Verifizierung im VLSI-Bereich nützlich.

Verilog Grey Counter

Ein Gray-Code kodiert ganze Zahlen als Folgen von Bits mit der Eigenschaft, dass sich die Darstellungen benachbarter ganzer Zahlen in genau einer binären Position unterscheiden.

Es gibt verschiedene Arten von Gray-Codes, z. B. Balanced, Binary Reflected, Maximum Gap und Antipodal Gray-Code.

Zähler haben in erster Linie die Aufgabe, eine bestimmte Ausgabesequenz zu erzeugen und werden manchmal auch als Mustergeneratoren bezeichnet.

Design

In einem Graycode ändert sich jeweils nur ein Bit. Dieser Designcode verfügt über zwei Eingänge, Takt- und Reset-Signale, und einen 4-Bit-Ausgang, der Gray-Code generiert.

Erstens, wenn die rstn Signal hoch ist, dann ist der Ausgang Null, und sobald rstn geht niedrig, an der steigenden Flanke von clk , generiert das Design einen 4-Bit-Gray-Code und setzt die Generierung bei jeder steigenden Flanke von fort clk Signal.

Dieser Entwurfscode kann aktualisiert werden und Binärzahlen als Eingabe verwenden, und dieser Entwurf fungiert als Binär-zu-Gray-Code-Konverter.

 module gray_ctr # (parameter N = 4) ( input clk, input rstn, output reg [N-1:0] out); reg [N-1:0] q; always @ (posedge clk) begin if (!rstn) begin q <= 0; out <="0;" end else begin q + 1; `ifdef for_loop for (int i="0;" n-1; out[i] ^ q[i]; out[n-1] `else q[n-1:1] q[n-2:0]}; `endif endmodule pre> <h3>Hardware Schematic</h3> <img src="//techcodeview.com/img/verilog-tutorial/27/verilog-gray-counter-2.webp" alt="Verilog Gray Counter"> <h3>Testbench</h3> <pre> module tb; parameter N = 4; reg clk; reg rstn; wire [N-1:0] out; gray_ctr u0 ( .clk(clk), .rstn(rstn), .out(out)); always #10 clk = ~clk; initial begin {clk, rstn} <= 0; $monitor ('t="%0t" rstn="%0b" out="0x%0h&apos;," $time, rstn, out); repeat(2) @ (posedge clk); <="1;" repeat(20) $finish; end endmodule pre> <p>And it produces the following output, such as:</p> <pre> ncsim&gt; run T=0 rstn=0 out=0xx T=10 rstn=0 out=0x0 T=30 rstn=1 out=0x0 T=50 rstn=1 out=0x1 T=70 rstn=1 out=0x3 T=90 rstn=1 out=0x2 T=110 rstn=1 out=0x6 T=130 rstn=1 out=0x7 T=150 rstn=1 out=0x5 T=170 rstn=1 out=0x4 T=190 rstn=1 out=0xc T=210 rstn=1 out=0xd T=230 rstn=1 out=0xf T=250 rstn=1 out=0xe T=270 rstn=1 out=0xa T=290 rstn=1 out=0xb T=310 rstn=1 out=0x9 T=330 rstn=1 out=0x8 T=350 rstn=1 out=0x0 T=370 rstn=1 out=0x1 T=390 rstn=1 out=0x3 T=410 rstn=1 out=0x2 Simulation complete via $finish(1) at time 430 NS + 0 </pre> <h3>Balanced Gray Code</h3> <p>In balanced Gray codes, the number of changes in different coordinate positions is as close as possible.</p> <p>A Gray code is <strong> <em>uniform</em> </strong> or <strong> <em>uniformly</em> </strong> balanced if its transition counts are all equal.</p> <p>Gray codes can also be <strong> <em>exponentially</em> </strong> balanced if all of their transition counts are adjacent powers of two, and such codes exist for every power of two.</p> <p>For example, a balanced 4-bit Gray code has 16 transitions, which can be evenly distributed among all four positions (four transitions per position), making it uniformly balanced.</p> <pre> 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 </pre> <h3>n-ary Gray Code</h3> <p>There are many specialized types of Gray codes other than the binary-reflected Gray code. One such type of Gray code is the n-ary Gray code, also known as a <strong> <em>non-Boolean</em> </strong> Gray code. As the name implies, this type of Gray code uses non-Boolean values in its encodings.</p> <p>For example, a 3-ary ternary Gray code would use the values {0, 1, and 2}. The (n, k)-Gray code is the n-ary Gray code with k digits. The sequence of elements in the (3, 2)-Gray code is: {00, 01, 02, 12, 11, 10, 20, 21, and 22}.</p> <p>The (n, k)-Gray code may be constructed recursively, as the BRGC, or may be constructed iteratively.</p> <h3>Monotonic Gray Codes</h3> <p>Monotonic codes are useful in interconnection networks theory, especially for minimizing dilation for linear arrays of processors.</p> <p>If we define the weight of a binary string to be the number of 1s in the string, then although we clearly cannot have a Gray code with strictly increasing weight, we may want to approximate this by having the code run through two adjacent weights before reaching the next one.</p> <h3>Beckett-Gray Code</h3> <p>Another type of Gray code, the Beckett-Gray code, is named for Irish playwright <strong> <em>Samuel Beckett</em> </strong> , who was interested in <strong> <em>symmetry</em> </strong> . His play <strong> <em>Quad</em> </strong> features four actors and is divided into sixteen time periods. Each period ends with one of the four actors entering or leaving the stage.</p> <p>The play begins with an empty stage, and Beckett wanted each subset of actors to appear on stage exactly once. A 4-bit binary Gray code can represent the set of actors currently on stage.</p> <p>However,</p> <p>Beckett placed an additional restriction on the script: he wished the actors to enter and exit so that the actor who had been on stage the longest would always be the one to exit.</p> <p>The actors could then be represented by a first-in, first-out (FIFO) queue so that the actor being dequeued is always the one who was enqueued first.</p> <p>Beckett was unable to find a Beckett-Gray code for his play, and indeed, an exhaustive listing of all possible sequences reveals that no such code exists for n = 4. It is known today that such codes do exist for n = 2, 5, 6, 7, and 8, and do not exist for n = 3 or 4.</p> <h3>Snake-in-the-box Codes</h3> <p>Snake-in-the-box codes, or snakes, are the sequences of nodes of induced paths in an n-dimensional <strong> <em>hypercube</em> </strong> graph, and coil-in-the-box codes, or coils, are the sequences of nodes of induced cycles in a hypercube.</p> <p>Viewed as Gray codes, these sequences have the property of detecting any single-bit coding error.</p> <h3>Single-track Gray Code</h3> <p>Another kind of Gray code is the single-track Gray code (STGC) developed by <strong> <em>Norman B. Spedding</em> </strong> and refined by <strong> <em>Hiltgen, Paterson</em> </strong> and <strong> <em>Brandestini</em> </strong> in &apos;Single-track Gray codes&apos; (1996).</p> <p>The STGC is a cyclical list of P unique binary encodings of length n such that two consecutive words differ in exactly one position. When the list is examined as a P &#xD7; n matrix, each column is a cyclic shift of the first column.</p> <p>The name comes from their use with rotary encoders, where many tracks are being sensed by contacts, resulting in each in an output of 0 or 1. To reduce noise due to different contacts not switching the same moment in time, one preferably sets up the tracks so that the contacts&apos; data output is in Gray code.</p> <p>To get high angular accuracy, one needs lots of contacts; to achieve at least 1-degree accuracy, one needs at least 360 distinct positions per revolution, which requires a minimum of 9 bits of data and the same number of contacts.</p> <p>If all contacts are placed at the same angular position, then 9 tracks are needed to get a standard BRGC with at least 1-degree accuracy. However, if the manufacturer moves a contact to a different angular position but at the same distance from the center shaft, then the corresponding &apos;ring pattern&apos; needs to be rotated the same angle to give the same output.</p> <h3>Two-dimensions Gray Code</h3> <p>Two-dimensional Gray codes are used in communication to minimize the number of bit errors in quadrature amplitude modulation adjacent points in the constellation.</p> <p>In a standard encoding, the horizontal and vertical adjacent constellation points differ by a single bit, and adjacent diagonal points differ by 2 bits.</p> <hr></=></pre></=>

Ausgewogener Gray-Code

In ausgeglichenen Gray-Codes ist die Anzahl der Änderungen in verschiedenen Koordinatenpositionen so nah wie möglich.

Ein Gray-Code ist Uniform oder gleichmäßig ausgeglichen, wenn alle Übergangszahlen gleich sind.

Gray-Codes können es auch sein exponentiell ausgeglichen, wenn alle ihre Übergangszahlen benachbarte Zweierpotenzen sind und solche Codes für jede Zweierpotenz existieren.

Beispielsweise verfügt ein ausgeglichener 4-Bit-Gray-Code über 16 Übergänge, die gleichmäßig auf alle vier Positionen verteilt werden können (vier Übergänge pro Position), wodurch er gleichmäßig ausgeglichen ist.

 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 

n-ärer Gray-Code

Neben dem binär reflektierten Gray-Code gibt es viele spezielle Arten von Gray-Codes. Eine solche Art von Gray-Code ist der n-äre Gray-Code, auch bekannt als a nicht boolesch Gray-Code. Wie der Name schon sagt, verwendet dieser Gray-Code-Typ in seinen Codierungen nicht-boolesche Werte.

Beispielsweise würde ein 3-facher ternärer Gray-Code die Werte {0, 1 und 2} verwenden. Der (n, k)-Gray-Code ist der n-äre Gray-Code mit k Ziffern. Die Reihenfolge der Elemente im (3, 2)-Gray-Code ist: {00, 01, 02, 12, 11, 10, 20, 21 und 22}.

Der (n, k)-Gray-Code kann als BRGC rekursiv oder iterativ erstellt werden.

Monotone Gray-Codes

Monotone Codes sind in der Theorie der Verbindungsnetzwerke nützlich, insbesondere zur Minimierung der Dilatation für lineare Arrays von Prozessoren.

Wenn wir das Gewicht einer Binärzeichenfolge als die Anzahl der Einsen in der Zeichenfolge definieren, können wir, obwohl wir eindeutig keinen Gray-Code mit streng steigender Gewichtung haben können, dies annähern, indem wir den Code zwei benachbarte Gewichtungen durchlaufen lassen, bevor wir sie erreichen der Nächste.

Beckett-Gray-Code

Eine andere Art von Gray-Code, der Beckett-Gray-Code, ist nach einem irischen Dramatiker benannt Samuel Beckett , der sich dafür interessierte Symmetrie . Sein Stück Quad besteht aus vier Schauspielern und ist in sechzehn Zeitabschnitte unterteilt. Jede Periode endet damit, dass einer der vier Schauspieler die Bühne betritt oder verlässt.

Das Stück beginnt mit einer leeren Bühne und Beckett wollte, dass jede Untergruppe von Schauspielern genau einmal auf der Bühne erscheint. Ein binärer 4-Bit-Gray-Code kann die Gruppe der Schauspieler darstellen, die sich gerade auf der Bühne befinden.

Jedoch,

Beckett legte dem Drehbuch eine zusätzliche Einschränkung auf: Er wollte, dass die Schauspieler ein- und aussteigen, so dass der Schauspieler, der am längsten auf der Bühne war, immer derjenige war, der die Bühne verließ.

Die Akteure könnten dann durch eine First-in-First-out-Warteschlange (FIFO) dargestellt werden, sodass der aus der Warteschlange entfernte Akteur immer derjenige ist, der zuerst in die Warteschlange eingereiht wurde.

Beckett war nicht in der Lage, einen Beckett-Gray-Code für sein Stück zu finden, und tatsächlich zeigt eine ausführliche Auflistung aller möglichen Sequenzen, dass für n = 4 kein solcher Code existiert. Heute weiß man, dass solche Codes für n = 2, 5 existieren , 6, 7 und 8 und existieren nicht für n = 3 oder 4.

Snake-in-the-Box-Codes

Snake-in-the-Box-Codes oder Schlangen sind die Folgen von Knoten induzierter Pfade in einer n-Dimensionalität Hyperwürfel Graph und Coil-in-the-Box-Codes oder Coils sind die Folgen von Knoten induzierter Zyklen in einem Hyperwürfel.

Als Gray-Codes betrachtet haben diese Sequenzen die Eigenschaft, jeden einzelnen Bit-Codierungsfehler zu erkennen.

Einspuriger Gray-Code

Eine andere Art von Gray-Code ist der Single-Track-Gray-Code (STGC), der von entwickelt wurde Norman B. Spedding und verfeinert von Hiltgen, Paterson Und Brandestini in „Single-track Gray codes“ (1996).

Der STGC ist eine zyklische Liste von P eindeutigen Binärcodierungen der Länge n, sodass sich zwei aufeinanderfolgende Wörter an genau einer Position unterscheiden. Wenn die Liste als P × n-Matrix untersucht wird, ist jede Spalte eine zyklische Verschiebung der ersten Spalte.

Java ersetzt Zeichen in Zeichenfolge

Der Name kommt von ihrer Verwendung mit Drehgebern, bei denen viele Spuren von Kontakten erfasst werden, was jeweils zu einem Ausgang von 0 oder 1 führt. Um Rauschen zu reduzieren, das dadurch entsteht, dass verschiedene Kontakte nicht zum gleichen Zeitpunkt schalten, richtet man vorzugsweise die ein verfolgt, sodass die Datenausgabe der Kontakte im Gray-Code erfolgt.

Um eine hohe Winkelgenauigkeit zu erreichen, benötigt man viele Kontakte; Um eine Genauigkeit von mindestens 1 Grad zu erreichen, sind mindestens 360 unterschiedliche Positionen pro Umdrehung erforderlich, was mindestens 9 Datenbits und die gleiche Anzahl an Kontakten erfordert.

Wenn alle Kontakte in der gleichen Winkelposition platziert sind, sind 9 Spuren erforderlich, um einen Standard-BRGC mit einer Genauigkeit von mindestens 1 Grad zu erhalten. Wenn der Hersteller jedoch einen Kontakt in eine andere Winkelposition, aber im gleichen Abstand von der Mittelwelle bewegt, muss das entsprechende „Ringmuster“ um den gleichen Winkel gedreht werden, um die gleiche Ausgabe zu erzielen.

Zweidimensionaler Gray-Code

Zweidimensionale Gray-Codes werden in der Kommunikation verwendet, um die Anzahl der Bitfehler bei der Quadraturamplitudenmodulation benachbarter Punkte in der Konstellation zu minimieren.

Bei einer Standardkodierung unterscheiden sich die horizontal und vertikal benachbarten Konstellationspunkte um ein einzelnes Bit und benachbarte diagonale Punkte um 2 Bit.