logo

Verilog Gray-teller

Grijze code is een soort binair getalsysteem waarbij slechts één bit tegelijk verandert. Tegenwoordig wordt grijze code veel gebruikt in de digitale wereld. Het zal nuttig zijn voor foutcorrectie en signaaloverdracht. De Gray-teller is ook nuttig bij ontwerp en verificatie in het VLSI-domein.

Verilog Gray-teller

Een Gray Code codeert gehele getallen als reeksen bits met de eigenschap dat de representaties van aangrenzende gehele getallen op precies één binaire positie verschillen.

Er zijn verschillende soorten grijscodes, zoals gebalanceerd, binair gereflecteerd, maximale tussenruimte en antipodale grijscode.

Tellers hebben als primaire functie het produceren van een gespecificeerde uitvoerreeks en worden soms patroongeneratoren genoemd.

Ontwerp

In een grijze code verandert er slechts één bit tegelijk. Deze ontwerpcode heeft twee ingangen, klok- en resetsignalen en één 4-bits uitgang die grijze code genereert.

Ten eerste, als de eerste signaal hoog is, dan is de uitvoer nul, en zodra eerste gaat laag, op de stijgende rand van kl , genereert het ontwerp een grijze code van vier bits en blijft dit genereren bij elke stijgende flank van kl signaal.

Deze ontwerpcode kan worden geüpgraded en binaire getallen als invoer worden ingevoerd, en dit ontwerp zal werken als een binaire naar grijze codeconverter.

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

Evenwichtige grijze code

In gebalanceerde Gray-codes ligt het aantal veranderingen in verschillende coördinaatposities zo dicht mogelijk bij elkaar.

Een grijze code is uniform of uniform evenwichtig als de transitietellingen allemaal gelijk zijn.

Grijze codes kunnen ook exponentieel gebalanceerd als al hun overgangsaantallen aangrenzende machten van twee zijn, en dergelijke codes bestaan ​​voor elke macht van twee.

Een gebalanceerde 4-bit Gray-code heeft bijvoorbeeld 16 overgangen, die gelijkmatig over alle vier de posities kunnen worden verdeeld (vier overgangen per positie), waardoor deze uniform gebalanceerd is.

 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 Gray-code

Er zijn veel gespecialiseerde soorten Gray-codes, behalve de binair gereflecteerde Gray-code. Een voorbeeld van zo'n type Gray-code is de n-ary Gray-code, ook bekend als a niet-Booleaans Grijze code. Zoals de naam al aangeeft, gebruikt dit type Gray-code niet-Booleaanse waarden in de coderingen.

Een 3-aire ternaire Gray-code zou bijvoorbeeld de waarden {0, 1 en 2} gebruiken. De (n, k)-Gray-code is de n-aire Gray-code met k cijfers. De volgorde van elementen in de (3, 2)-Gray-code is: {00, 01, 02, 12, 11, 10, 20, 21 en 22}.

De (n, k)-Gray-code kan recursief worden geconstrueerd, zoals de BRGC, of ​​kan iteratief worden geconstrueerd.

Monotone grijze codes

Monotone codes zijn nuttig in de theorie van interconnectienetwerken, vooral voor het minimaliseren van dilatatie voor lineaire arrays van processors.

Als we het gewicht van een binaire string definiëren als het aantal 1-en in de string, kunnen we, hoewel we duidelijk geen Gray-code kunnen hebben met een strikt toenemend gewicht, dit benaderen door de code door twee aangrenzende gewichten te laten lopen voordat deze wordt bereikt. de volgende.

Beckett-Gray-code

Een ander type Gray-code, de Beckett-Gray-code, is genoemd naar de Ierse toneelschrijver Samuël Beckett , waarin geïnteresseerd was symmetrie . Zijn toneelstuk Viervoudig bevat vier acteurs en is verdeeld in zestien tijdsperioden. Elke periode eindigt met het betreden of verlaten van een van de vier acteurs.

Het stuk begint met een leeg podium, en Beckett wilde dat elke subset van acteurs precies één keer op het podium zou verschijnen. Een 4-bits binaire Gray-code kan de groep acteurs vertegenwoordigen die momenteel op het podium staan.

Echter,

Beckett plaatste een extra beperking op het script: hij wilde dat de acteurs binnenkwamen en vertrokken, zodat de acteur die het langst op het podium had gestaan ​​altijd degene zou zijn die zou vertrekken.

De acteurs kunnen dan worden weergegeven door een first-in, first-out (FIFO)-wachtrij, zodat de acteur die uit de wachtrij wordt gehaald altijd degene is die als eerste in de wachtrij staat.

Beckett kon geen Beckett-Gray-code voor zijn toneelstuk vinden, en uit een uitputtende lijst van alle mogelijke reeksen blijkt dat zo'n code niet bestaat voor n = 4. Het is tegenwoordig bekend dat dergelijke codes wel bestaan ​​voor n = 2, 5 , 6, 7 en 8, en bestaan ​​niet voor n = 3 of 4.

Snake-in-the-box-codes

Snake-in-the-box-codes, of snakes, zijn de reeksen knooppunten van geïnduceerde paden in een n-dimensionale hyperkubus grafiek, en coil-in-the-box-codes, of spoelen, zijn de reeksen knooppunten van geïnduceerde cycli in een hyperkubus.

Gezien als Gray-codes hebben deze reeksen de eigenschap dat ze elke codeerfout van één bit kunnen detecteren.

Enkelsporige grijze code

Een ander soort Gray-code is de single-track Gray-code (STGC), ontwikkeld door Norman B. Spedding en verfijnd door Hiltgen, Paterson En Brandestini in 'Single-track Gray-codes' (1996).

De STGC is een cyclische lijst van P unieke binaire coderingen met een lengte n, zodat twee opeenvolgende woorden op precies één positie verschillen. Wanneer de lijst wordt onderzocht als een P × n-matrix, is elke kolom een ​​cyclische verschuiving van de eerste kolom.

tekenreeks vergelijken met Java

De naam komt van het gebruik ervan met roterende encoders, waarbij veel tracks worden waargenomen door contacten, wat resulteert in elk een uitvoer van 0 of 1. Om ruis te verminderen doordat verschillende contacten niet op hetzelfde moment schakelen, stelt men bij voorkeur de volgt zodat de gegevensuitvoer van de contacten in Gray-code is.

Om een ​​hoge hoeknauwkeurigheid te verkrijgen, heb je veel contacten nodig; om een ​​nauwkeurigheid van ten minste 1 graad te bereiken, zijn minimaal 360 verschillende posities per omwenteling nodig, waarvoor minimaal 9 bits aan gegevens en hetzelfde aantal contacten nodig zijn.

Als alle contacten op dezelfde hoekpositie worden geplaatst, zijn er 9 sporen nodig om een ​​standaard BRGC te krijgen met een nauwkeurigheid van minimaal 1 graad. Als de fabrikant een contact echter naar een andere hoekpositie maar op dezelfde afstand van de centrale as verplaatst, moet het overeenkomstige 'ringpatroon' onder dezelfde hoek worden gedraaid om dezelfde output te geven.

Tweedimensionale grijze code

Bij de communicatie worden tweedimensionale Gray-codes gebruikt om het aantal bitfouten bij kwadratuuramplitudemodulatie aangrenzende punten in de constellatie te minimaliseren.

Bij een standaardcodering verschillen de horizontale en verticale aangrenzende constellatiepunten met één bit, en aangrenzende diagonale punten met 2 bits.