logo

Verilog grå räknare

Gråkod är ett slags binärt talsystem där endast en bit ändras åt gången. Idag används grå kod flitigt i den digitala världen. Det kommer att vara till hjälp för felkorrigering och signalöverföring. Gråräknaren är också användbar vid design och verifiering i VLSI-domänen.

Verilog grå räknare

En grå kod kodar heltal som sekvenser av bitar med egenskapen att representationerna av intilliggande heltal skiljer sig åt i exakt en binär position.

Det finns olika typer av grå koder, som Balanced, Binary reflected, Maximum Gap och Antipodal Grey-kod.

Räknare har en primär funktion att producera en specificerad utdatasekvens och kallas ibland för mönsterritare.

Design

I en grå kod ändras bara en bit åt gången. Denna designkod har två ingångar, klock- och återställningssignaler och en 4-bitars utgång som genererar grå kod.

Först, om rstn signalen är hög, då blir utsignalen noll, och så snart som rstn går lågt, på stigande kant av clk , kommer designen att generera en fyra-bitars grå kod och fortsätta att generera vid varje stigande kant av clk signal.

Denna designkod kan uppgraderas och sätta binära tal som indata, och denna design kommer att fungera som en binär till grå kodkonverterare.

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

Balanserad grå kod

I balanserade gråkoder är antalet förändringar i olika koordinatpositioner så nära som möjligt.

En grå kod är enhetlig eller enhetligt balanserad om dess övergångsantal är lika.

Gråkoder kan också vara exponentiellt balanserad om alla deras övergångsantal är närliggande potenser av två, och sådana koder finns för varje potens av två.

Till exempel har en balanserad 4-bitars grå kod 16 övergångar, som kan fördelas jämnt mellan alla fyra positioner (fyra övergångar per position), vilket gör den jämnt balanserad.

 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

Det finns många specialiserade typer av gråkoder förutom den binärreflekterade gråkoden. En sådan typ av Gray-kod är den n-ary Gray-koden, även känd som a icke-booleska Grå kod. Som namnet antyder använder den här typen av Gray-kod icke-booleska värden i sina kodningar.

Till exempel skulle en 3-är ternär grå kod använda värdena {0, 1 och 2}. (n, k)-Gray-koden är den n-ary Grey-koden med k siffror. Sekvensen av element i koden (3, 2)-Grå är: {00, 01, 02, 12, 11, 10, 20, 21 och 22}.

(n, k)-Gray-koden kan konstrueras rekursivt, som BRGC, eller kan konstrueras iterativt.

Monotona grå koder

Monotona koder är användbara i teorin om sammankopplingsnätverk, speciellt för att minimera dilatation för linjära processorer.

Om vi ​​definierar vikten av en binär sträng som antalet 1:or i strängen, så även om vi uppenbarligen inte kan ha en grå kod med strikt ökande vikt, kanske vi vill approximera detta genom att låta koden köras genom två intilliggande vikter innan vi når nästa.

Beckett-Gray kod

En annan typ av grå kod, Beckett-Gray-koden, är uppkallad efter irländsk dramatiker Samuel Beckett , som var intresserad av symmetri . Hans pjäs Quad har fyra skådespelare och är indelad i sexton tidsperioder. Varje period avslutas med att en av de fyra skådespelarna går in eller lämnar scenen.

Pjäsen börjar med en tom scen, och Beckett ville att varje delmängd av skådespelare skulle dyka upp på scenen exakt en gång. En 4-bitars binär grå kod kan representera uppsättningen av skådespelare som för närvarande är på scenen.

Dock,

Beckett satte ytterligare en begränsning på manuset: han ville att skådespelarna skulle gå in och ut så att den skådespelare som varit längst på scenen alltid skulle vara den som lämnade.

Skådespelarna skulle då kunna representeras av en först in, först ut (FIFO)-kö så att skådespelaren som ställs ur kö alltid är den som ställdes i kö först.

Beckett kunde inte hitta en Beckett-Gray-kod för sitt pjäs, och en uttömmande lista över alla möjliga sekvenser avslöjar faktiskt att det inte finns någon sådan kod för n = 4. Det är känt idag att sådana koder existerar för n = 2, 5 , 6, 7 och 8, och finns inte för n = 3 eller 4.

Snake-in-the-box-koder

Snake-in-the-box-koder, eller ormar, är sekvenserna av noder av inducerade banor i en n-dimensionell hyperkub graf och coil-in-the-box-koder, eller coils, är sekvenserna av noder av inducerade cykler i en hyperkub.

Sett som gråkoder har dessa sekvenser egenskapen att detektera eventuella enbitars kodningsfel.

Enkelspårig gråkod

En annan typ av Gray-kod är single-track Gray code (STGC) utvecklad av Norman B. Spedding och förfinad av Hiltgen, Paterson och Brandestini i 'Single-track Grey codes' (1996).

STGC är en cyklisk lista av P unika binära kodningar med längden n så att två på varandra följande ord skiljer sig åt i exakt en position. När listan undersöks som en P × n matris, är varje kolumn ett cykliskt skift av den första kolumnen.

tar bort från arraylist

Namnet kommer från deras användning med roterande omkodare, där många spår avkänns av kontakter, vilket resulterar i att var och en får en utsignal på 0 eller 1. För att minska bruset på grund av att olika kontakter inte växlar samma ögonblick, ställer man helst upp spårar så att kontakternas datautgång är i grå kod.

För att få hög vinkelnoggrannhet behöver man massor av kontakter; för att uppnå minst 1-grads noggrannhet behöver man minst 360 distinkta positioner per varv, vilket kräver minst 9 databitar och samma antal kontakter.

Om alla kontakter är placerade i samma vinkelläge, så behövs 9 spår för att få en standard BRGC med minst 1 grads noggrannhet. Men om tillverkaren flyttar en kontakt till en annan vinkelposition men på samma avstånd från mittaxeln, måste motsvarande 'ringmönster' vridas i samma vinkel för att ge samma effekt.

Tvådimensionell grå kod

Tvådimensionella gråkoder används i kommunikation för att minimera antalet bitfel i kvadraturamplitudmodulering intill punkter i konstellationen.

I en standardkodning skiljer sig de horisontella och vertikala angränsande konstellationspunkterna med en enda bit och intilliggande diagonala punkter skiljer sig med 2 bitar.