logo

Verilog Grey laskuri

Harmaa koodi on eräänlainen binäärilukujärjestelmä, jossa vain yksi bitti muuttuu kerrallaan. Nykyään harmaata koodia käytetään laajasti digitaalisessa maailmassa. Siitä on apua virheiden korjaamisessa ja signaalin siirrossa. Gray-laskuri on hyödyllinen myös VLSI-alueen suunnittelussa ja todentamisessa.

Verilog Grey laskuri

Gray Code koodaa kokonaisluvut bittisarjoiksi, joilla on ominaisuus, että vierekkäisten kokonaislukujen esitykset eroavat täsmälleen yhdessä binääripaikassa.

Harmaakoodeja on eri tyyppejä, kuten tasapainotettu, heijastettu binaarinen, maksimiväli ja antipodaalinen harmaa koodi.

Laskurien ensisijainen tehtävä on tuottaa määrätty lähtösekvenssi, ja niitä kutsutaan joskus kuviogeneraattoreiksi.

Design

Harmaan koodissa vain yksi bitti muuttuu kerrallaan. Tässä suunnittelukoodissa on kaksi tuloa, kello- ja nollaussignaalit sekä yksi 4-bittinen lähtö, joka tuottaa harmaata koodia.

Ensinnäkin, jos rstn signaali on korkea, lähtö on nolla, ja heti kun rstn menee alas, nousevalla reunalla clk , suunnittelu luo nelibittisen harmaan koodin ja jatkaa generoimista jokaisella nousevalla reunalla clk signaali.

Tämä suunnittelukoodi voidaan päivittää ja laittaa binäärinumeroita syötteeksi, ja tämä malli toimii binäärikoodin muuntimena harmaaksi.

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

Tasapainoinen harmaa koodi

Tasapainotetuissa Grey-koodeissa muutosten määrä eri koordinaatistoissa on mahdollisimman lähellä.

Harmaa koodi on yhtenäinen tai tasaisesti tasapainoinen, jos sen siirtymämäärät ovat samat.

Harmaa koodit voivat myös olla eksponentiaalisesti tasapainotettu, jos kaikki niiden siirtymämäärät ovat vierekkäisiä kahden potenssit ja tällaiset koodit ovat olemassa jokaiselle kahden potenssille.

Esimerkiksi tasapainotetussa 4-bittisessä Grey-koodissa on 16 siirtymää, jotka voidaan jakaa tasaisesti kaikkien neljän paikan kesken (neljä siirtymää per sijainti), mikä tekee siitä tasaisen tasapainoisen.

 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-ary Grey Code

Gray-koodeja on monia erikoistuneita tyyppejä kuin binääriheijastettu Gray-koodi. Yksi tällainen Gray-koodityyppi on n-ary Gray-koodi, joka tunnetaan myös nimellä a ei-looginen Harmaa koodi. Kuten nimestä voi päätellä, tämän tyyppinen Gray-koodi käyttää ei-boolean-arvoja koodauksissaan.

Esimerkiksi kolmivaiheinen harmaakoodi käyttäisi arvoja {0, 1 ja 2}. (n, k)-Gray-koodi on n-aarinen Gray-koodi, jossa on k numeroa. (3, 2)-Gray-koodin elementtien järjestys on: {00, 01, 02, 12, 11, 10, 20, 21 ja 22}.

(n, k)-Gray-koodi voidaan rakentaa rekursiivisesti, kuten BRGC, tai se voidaan rakentaa iteratiivisesti.

Monotoniset harmaat koodit

Monotoniset koodit ovat hyödyllisiä liitäntäverkkoteoriassa, erityisesti prosessorien lineaaristen ryhmien laajenemisen minimoimiseksi.

Jos määritämme binäärimerkkijonon painoksi merkkijonon ykkösten lukumäärän, niin vaikka meillä ei selvästikään voi olla tiukasti kasvavaa painoarvoa olevaa Gray-koodia, saatamme haluta likimäärittää tämän antamalla koodin ajaa kahden vierekkäisen painon läpi ennen kuin saavuttaa. seuraava.

Beckett-Gray koodi

Toinen Grey-koodin tyyppi, Beckett-Gray-koodi, on nimetty irlantilaisen näytelmäkirjailijan mukaan Samuel Beckett , joka oli kiinnostunut symmetria . Hänen näytelmänsä Quad sisältää neljä näyttelijää, ja se on jaettu kuuteentoista aikajaksoon. Jokainen jakso päättyy siihen, että yksi neljästä näyttelijästä tulee lavalle tai poistuu sieltä.

Näytelmä alkaa tyhjällä näyttämöllä, ja Beckett halusi jokaisen näyttelijöiden esiintyvän lavalla täsmälleen kerran. 4-bittinen binääri Grey-koodi voi edustaa tällä hetkellä lavalla olevien näyttelijöiden joukkoa.

Kuitenkin,

Beckett asetti käsikirjoitukseen lisärajoituksen: hän toivoi näyttelijöiden tulevan sisään ja poistumaan, jotta pisimpään lavalla ollut näyttelijä olisi aina se, joka poistuu.

Näyttelijät voitaisiin sitten edustaa FIFO-jonossa, jolloin jonosta poistettava näyttelijä on aina se, joka joutui ensimmäisenä.

Beckett ei löytänyt Beckett-Gray-koodia näytelmälleen, ja todellakin, tyhjentävä luettelo kaikista mahdollisista jaksoista paljastaa, että sellaista koodia ei ole olemassa arvolle n = 4. Nykyään tiedetään, että tällaisia ​​koodeja on olemassa n = 2, 5 , 6, 7 ja 8, eikä niitä ole n = 3 tai 4.

Snake-in-the-box -koodit

Snake-in-the-box -koodit tai käärmeet ovat indusoitujen polkujen solmusekvenssiä n-ulotteisessa hyperkuutio graafi ja coil-in-the-box -koodit tai kelat ovat hyperkuution indusoitujen syklien solmusekvenssit.

Gray-koodeina katsottuna näillä sarjoilla on ominaisuus havaita mikä tahansa yksibittinen koodausvirhe.

Yksiraitainen harmaa koodi

Toinen Grey-koodin tyyppi on yksiraitainen harmaakoodi (STGC), jonka on kehittänyt Norman B. Spedding ja tarkentanut Hiltgen, Paterson ja Brandestini teoksessa 'Single-track Gray codes' (1996).

STGC on syklinen luettelo P yksilöllisistä binäärikoodauksista, joiden pituus on n siten, että kaksi peräkkäistä sanaa eroavat täsmälleen yhdessä paikassa. Kun listaa tarkastellaan P × n -matriisina, jokainen sarake on ensimmäisen sarakkeen syklinen siirto.

"mitä eroa on leijonalla ja tiikerillä"

Nimi tulee niiden käytöstä pyörivien enkoodereiden kanssa, joissa koskettimet havaitsevat monia raitoja, jolloin jokaisen ulostulo on 0 tai 1. Melun vähentämiseksi, koska eri koskettimet eivät kytkeydy samalla hetkellä, mieluiten asetetaan jäljittää niin, että yhteystietojen ulostulo on harmaakoodia.

Korkean kulmatarkkuuden saavuttamiseksi tarvitaan paljon koskettimia; vähintään 1 asteen tarkkuuden saavuttamiseksi tarvitaan vähintään 360 erillistä paikkaa kierrosta kohti, mikä vaatii vähintään 9 bittiä dataa ja saman määrän kontakteja.

Jos kaikki koskettimet on sijoitettu samaan kulma-asentoon, tarvitaan 9 raitaa, jotta saadaan standardi BRGC vähintään 1 asteen tarkkuudella. Jos valmistaja kuitenkin siirtää koskettimen eri kulma-asentoon, mutta samalle etäisyydelle keskiakselista, vastaavaa 'rengaskuviota' on käännettävä samassa kulmassa saman tehon saamiseksi.

Kaksiulotteinen harmaa koodi

Kaksiulotteisia Gray-koodeja käytetään viestinnässä minimoimaan bittivirheiden lukumäärä kvadratuuriamplitudimodulaation viereisissä pisteissä konstellaatiossa.

Vakiokoodauksessa vaaka- ja pystysuorat vierekkäiset konstellaatiopisteet eroavat yhden bitin verran ja vierekkäiset diagonaalipisteet eroavat 2 bitin verran.