logo

Contor Verilog Grey

Codul gri este un fel de sistem de numere binar în care doar un bit se va schimba la un moment dat. Astăzi, codul gri este utilizat pe scară largă în lumea digitală. Va fi util pentru corectarea erorilor și transmiterea semnalului. Contorul Gray este util și în proiectare și verificare în domeniul VLSI.

Contor Verilog Grey

Un cod Gray codifică numerele întregi ca secvențe de biți cu proprietatea că reprezentările numerelor întregi adiacente diferă în exact o poziție binară.

Există diferite tipuri de coduri gri, cum ar fi codul Balanced, Binary reflected, Maximum Gap și Antipodal Gray.

Contoarele au funcția principală de a produce o secvență de ieșire specificată și sunt uneori denumite generatoare de modele.

Proiecta

Într-un cod gri, doar un bit se schimbă la un moment dat. Acest cod de proiectare are două intrări, semnale de ceas și resetare și o ieșire de 4 biți care va genera cod gri.

În primul rând, dacă rstn semnalul este ridicat, atunci ieșirea va fi zero și de îndată ce rstn coboară jos, pe marginea ascendentă a clk , designul va genera un cod gri pe patru biți și va continua să genereze la fiecare margine ascendentă a clk semnal.

Acest cod de design poate fi actualizat și poate pune numere binare ca intrare, iar acest design va funcționa ca un convertor de cod binar în gri.

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

Cod gri echilibrat

În codurile gri echilibrate, numărul de modificări în diferite poziții de coordonate este cât mai apropiat posibil.

Un cod gri este uniformă sau uniform echilibrat dacă numărul său de tranziție este egal.

Codurile gri pot fi, de asemenea exponenţial echilibrat dacă toate numărul lor de tranziție sunt puteri adiacente de doi și astfel de coduri există pentru fiecare putere de doi.

De exemplu, un cod Grey echilibrat pe 4 biți are 16 tranziții, care pot fi distribuite uniform între toate cele patru poziții (patru tranziții pe poziție), făcându-l uniform echilibrat.

 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 

Codul gri n-ary

Există multe tipuri specializate de coduri Gray, altele decât codul Gray reflectat binar. Un astfel de tip de cod Gray este codul Gray n-ary, cunoscut și sub numele de a non-boolean Cod gri. După cum sugerează și numele, acest tip de cod Gray utilizează valori non-booleene în codificări.

De exemplu, un cod Gray ternar cu trei arii ar folosi valorile {0, 1 și 2}. Codul (n, k)-Gray este codul Gray n-ari cu k cifre. Secvența de elemente din codul (3, 2)-Gray este: {00, 01, 02, 12, 11, 10, 20, 21 și 22}.

Codul (n, k)-Gray poate fi construit recursiv, ca BRGC, sau poate fi construit iterativ.

Coduri monotone de gri

Codurile monotone sunt utile în teoria rețelelor de interconectare, în special pentru a minimiza dilatarea pentru rețele liniare de procesoare.

Dacă definim greutatea unui șir binar ca fiind numărul de 1 din șir, atunci, deși în mod clar nu putem avea un cod Gray cu o greutate în creștere strictă, este posibil să dorim să aproximăm acest lucru făcând codul să ruleze prin două greutăți adiacente înainte de a ajunge urmatorul.

Codul Beckett-Gray

Un alt tip de cod Gray, codul Beckett-Gray, este numit pentru dramaturgul irlandez Samuel Beckett , care era interesat de simetrie . Piesa lui Quad prezintă patru actori și este împărțit în șaisprezece perioade de timp. Fiecare perioadă se încheie cu unul dintre cei patru actori care intră sau părăsesc scenă.

Piesa începe cu o scenă goală, iar Beckett a vrut ca fiecare subset de actori să apară pe scenă exact o dată. Un cod binar Gray pe 4 biți poate reprezenta setul de actori aflati în prezent pe scenă.

In orice caz,

Beckett a impus o restricție suplimentară scenariului: a dorit ca actorii să intre și să iasă, astfel încât actorul care a stat cel mai mult pe scenă să fie întotdeauna cel care iese.

Actorii ar putea fi apoi reprezentați printr-o coadă FIFO (primul intrat, primul ieșit), astfel încât actorul care este scos din coadă este întotdeauna cel care a fost pus primul.

Beckett nu a reușit să găsească un cod Beckett-Gray pentru piesa sa și, într-adevăr, o listă exhaustivă a tuturor secvențelor posibile dezvăluie că nu există un astfel de cod pentru n = 4. Se știe astăzi că astfel de coduri există pentru n = 2, 5. , 6, 7 și 8 și nu există pentru n = 3 sau 4.

Codurile Snake-in-the-box

Codurile Snake-in-the-box, sau șerpii, sunt secvențele de noduri ale căilor induse într-un n-dimensional hipercub graf și codurile coil-in-the-box, sau bobine, sunt secvențele de noduri ale ciclurilor induse dintr-un hipercub.

Privite ca coduri Gray, aceste secvențe au proprietatea de a detecta orice eroare de codare pe un singur bit.

Cod gri cu o singură pistă

Un alt tip de cod Gray este codul Grey cu o singură pistă (STGC) dezvoltat de Norman B. Spedding și rafinat de Hiltgen, Paterson și Brandestini în „Coduri Grey cu o singură pistă” (1996).

STGC este o listă ciclică de P codificări binare unice de lungime n, astfel încât două cuvinte consecutive diferă exact într-o singură poziție. Când lista este examinată ca o matrice P × n, fiecare coloană este o deplasare ciclică a primei coloane.

css modificând dimensiunea imaginii

Numele provine de la utilizarea lor cu codificatoare rotative, unde multe piste sunt detectate de contacte, rezultând fiecare într-o ieșire de 0 sau 1. Pentru a reduce zgomotul datorat diferitelor contacte care nu comută în același moment în timp, de preferință se configurează piste, astfel încât datele de ieșire ale contactelor să fie în cod gri.

Pentru a obține o precizie unghiulară ridicată, aveți nevoie de o mulțime de contacte; pentru a obține o precizie de cel puțin 1 grad, este nevoie de cel puțin 360 de poziții distincte pe rotație, ceea ce necesită minim 9 biți de date și același număr de contacte.

Dacă toate contactele sunt plasate în aceeași poziție unghiulară, atunci sunt necesare 9 piste pentru a obține un BRGC standard cu o precizie de cel puțin 1 grad. Cu toate acestea, dacă producătorul mută un contact într-o poziție unghiulară diferită, dar la aceeași distanță de arborele central, atunci „modelul de inel” corespunzător trebuie rotit cu același unghi pentru a da aceeași ieșire.

Cod gri cu două dimensiuni

Codurile bidimensionale Gray sunt utilizate în comunicare pentru a minimiza numărul de erori de biți în punctele adiacente de modulație în amplitudine în cuadratură din constelație.

Într-o codificare standard, punctele constelației adiacente orizontale și verticale diferă cu un singur bit, iar punctele diagonale adiacente diferă cu 2 biți.