logo

Compteur gris Verilog

Le code Gray est une sorte de système de nombres binaires dans lequel un seul bit change à la fois. Aujourd’hui, le code gris est largement utilisé dans le monde numérique. Cela sera utile pour la correction des erreurs et la transmission du signal. Le compteur Gray est également utile dans la conception et la vérification dans le domaine VLSI.

Compteur gris Verilog

Un code Gray code les entiers sous forme de séquences de bits avec la propriété que les représentations d'entiers adjacents diffèrent dans exactement une position binaire.

Il existe différents types de codes gris, tels que le code Balanced, Binary réfléchi, Maximum Gap et Antipodal Gray.

Les compteurs ont pour fonction principale de produire une séquence de sortie spécifiée et sont parfois appelés générateurs de modèles.

Conception

Dans un code gris, un seul bit change à la fois. Ce code de conception comporte deux entrées, des signaux d'horloge et de réinitialisation et une sortie 4 bits qui générera un code gris.

Premièrement, si le rstn Le signal est élevé, alors la sortie sera nulle, et dès que rstn descend, sur le front montant de clic , la conception générera un code gris de quatre bits et continuera à le générer à chaque front montant de clic signal.

Ce code de conception peut être mis à niveau et mettre des nombres binaires en entrée, et cette conception fonctionnera comme un convertisseur de code binaire en code gris.

 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></=>

Code gris équilibré

Dans les codes Gray équilibrés, le nombre de changements dans différentes positions de coordonnées est aussi proche que possible.

Un code Gray est uniforme ou uniformément équilibré si ses comptes de transition sont tous égaux.

Les codes gris peuvent également être exponentiellement équilibré si tous leurs comptes de transition sont des puissances de deux adjacentes, et de tels codes existent pour chaque puissance de deux.

Par exemple, un code Gray équilibré de 4 bits comporte 16 transitions, qui peuvent être réparties uniformément entre les quatre positions (quatre transitions par position), ce qui le rend uniformément équilibré.

 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 

Code Gray n-aire

Il existe de nombreux types spécialisés de codes Gray autres que le code Gray à réflexion binaire. Un de ces types de code Gray est le code Gray n-aire, également connu sous le nom de code Gray. non booléen Code gris. Comme son nom l'indique, ce type de code Gray utilise des valeurs non booléennes dans ses codages.

Par exemple, un code Gray ternaire 3-aire utiliserait les valeurs {0, 1 et 2}. Le code (n, k)-Gray est le code Gray n-aire à k chiffres. La séquence d'éléments dans le code (3, 2)-Gray est : {00, 01, 02, 12, 11, 10, 20, 21 et 22}.

Le code (n, k)-Gray peut être construit de manière récursive, comme le BRGC, ou peut être construit de manière itérative.

Codes gris monotones

Les codes monotones sont utiles dans la théorie des réseaux d'interconnexion, en particulier pour minimiser la dilatation des réseaux linéaires de processeurs.

Si nous définissons le poids d'une chaîne binaire comme étant le nombre de 1 dans la chaîne, alors même si nous ne pouvons clairement pas avoir un code Gray avec un poids strictement croissant, nous souhaiterons peut-être nous en rapprocher en faisant parcourir au code deux poids adjacents avant d'atteindre le prochain.

Code Beckett-Gray

Un autre type de code Gray, le code Beckett-Gray, doit son nom au dramaturge irlandais Samuel Beckett , qui s'intéressait à symétrie . Sa pièce Quad met en scène quatre acteurs et est divisé en seize périodes. Chaque période se termine par l'entrée ou la sortie de scène d'un des quatre comédiens.

La pièce commence avec une scène vide et Beckett souhaitait que chaque sous-ensemble d’acteurs apparaisse sur scène exactement une fois. Un code Gray binaire de 4 bits peut représenter l'ensemble des acteurs actuellement sur scène.

Cependant,

Beckett a imposé une restriction supplémentaire au scénario : il souhaitait que les acteurs entrent et sortent afin que l'acteur qui était resté le plus longtemps sur scène soit toujours celui qui sortait.

Les acteurs pourraient alors être représentés par une file d'attente premier entré, premier sorti (FIFO), de sorte que l'acteur retiré de la file d'attente soit toujours celui qui a été mis en file d'attente en premier.

Beckett n'a pas pu trouver de code Beckett-Gray pour sa pièce et, en effet, une liste exhaustive de toutes les séquences possibles révèle qu'un tel code n'existe pas pour n = 4. On sait aujourd'hui que de tels codes existent pour n = 2, 5. , 6, 7 et 8, et n'existent pas pour n = 3 ou 4.

Codes de serpent dans la boîte

Les codes Snake-in-the-box, ou serpents, sont des séquences de nœuds de chemins induits dans un environnement à n dimensions. hypercube le graphique et les codes coil-in-the-box, ou bobines, sont les séquences de nœuds de cycles induits dans un hypercube.

Considérées comme des codes Gray, ces séquences ont la propriété de détecter toute erreur de codage sur un seul bit.

Code gris à voie unique

Un autre type de code Gray est le code Gray à piste unique (STGC) développé par Norman B. Spedding et affiné par Hiltgen, Paterson et Brandestini dans « Codes gris à voie unique » (1996).

Le STGC est une liste cyclique de P codages binaires uniques de longueur n tels que deux mots consécutifs diffèrent exactement sur une position. Lorsque la liste est examinée comme une matrice P × n, chaque colonne est un décalage cyclique de la première colonne.

clé composite clé primaire

Le nom vient de leur utilisation avec des encodeurs rotatifs, où de nombreuses pistes sont détectées par des contacts, ce qui donne chacune une sortie de 0 ou 1. Pour réduire le bruit dû au fait que différents contacts ne commutent pas au même moment, il est préférable de configurer le pistes afin que la sortie des données des contacts soit en code Gray.

Pour obtenir une précision angulaire élevée, il faut beaucoup de contacts ; pour atteindre une précision d'au moins 1 degré, il faut au moins 360 positions distinctes par tour, ce qui nécessite un minimum de 9 bits de données et le même nombre de contacts.

Si tous les contacts sont placés dans la même position angulaire, alors 9 pistes sont nécessaires pour obtenir un BRGC standard avec une précision d'au moins 1 degré. Cependant, si le fabricant déplace un contact vers une position angulaire différente mais à la même distance de l'arbre central, alors le « motif d'anneau » correspondant doit pivoter du même angle pour donner le même résultat.

Code Gray bidimensionnel

Les codes Gray bidimensionnels sont utilisés dans la communication pour minimiser le nombre d'erreurs binaires dans les points adjacents de modulation d'amplitude en quadrature dans la constellation.

Dans un codage standard, les points de constellation adjacents horizontaux et verticaux diffèrent d'un seul bit, et les points diagonaux adjacents diffèrent de 2 bits.