Gray koda je nekakšen binarni številski sistem, kjer se naenkrat spremeni samo en bit. Danes se siva koda pogosto uporablja v digitalnem svetu. V pomoč bo pri odpravljanju napak in prenosu signala. Gray števec je uporaben tudi pri načrtovanju in preverjanju v domeni VLSI.
Gray Code kodira cela števila kot zaporedja bitov z lastnostjo, da se predstavitve sosednjih celih števil razlikujejo v točno enem binarnem položaju.
Obstajajo različne vrste sivih kod, kot so uravnotežena, binarno odbita, največja vrzel in antipodna siva koda.
Primarna funkcija števcev je ustvarjanje določenega izhodnega zaporedja in jih včasih imenujemo generatorji vzorcev.
Oblikovanje
V sivi kodi se naenkrat spremeni le en bit. Ta oblikovalska koda ima dva vhoda, signala ure in ponastavitve ter en 4-bitni izhod, ki bo ustvaril sivo kodo.
Prvič, če rstn je signal visok, bo izhod enak nič in takoj ko rstn gre nizko, na naraščajočem robu clk , bo zasnova ustvarila štiribitno sivo kodo in nadaljevala z ustvarjanjem na vsakem naraščajočem robu clk signal.
To oblikovno kodo je mogoče nadgraditi in kot vhod postaviti binarna števila, ta zasnova pa bo delovala kot pretvornik binarne v sivo kodo.
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'," $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> 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 'Single-track Gray codes' (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 × 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' 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 'ring pattern' 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></=>
Uravnotežena siva koda
Pri uravnoteženih Grayevih kodah je število sprememb različnih koordinatnih položajev čim bližje.
Grayeva koda je uniforma oz enakomerno uravnotežen, če so vsi njegovi prehodi enaki.
Lahko so tudi sive kode eksponentno uravnoteženi, če so vsa njihova števila prehodov sosednje potence dvojke in takšne kode obstajajo za vsako potenco dvojke.
Na primer, uravnotežena 4-bitna Grayeva koda ima 16 prehodov, ki jih je mogoče enakomerno porazdeliti med vse štiri položaje (štirje prehodi na položaj), zaradi česar je enakomerno uravnotežen.
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-arna Grayeva koda
Obstaja veliko specializiranih tipov Grayevih kod, razen binarno odražene Grayeve kode. Ena taka vrsta Grayeve kode je n-arna Grayeva koda, znana tudi kot a nelogični Siva koda. Kot pove že ime, ta vrsta Grayeve kode v svojih kodiranjih uporablja vrednosti, ki niso logične.
Na primer, 3-arna ternarna Grayeva koda bi uporabljala vrednosti {0, 1 in 2}. (n, k)-Grayeva koda je n-arna Grayeva koda s k števkami. Zaporedje elementov v (3, 2)-Grayovi kodi je: {00, 01, 02, 12, 11, 10, 20, 21 in 22}.
(n, k)-Grayeva koda se lahko konstruira rekurzivno, kot BRGC, ali pa se lahko konstruira iterativno.
Monotone sive kode
Monotone kode so uporabne v teoriji povezovalnih omrežij, zlasti za zmanjšanje dilatacije za linearna polja procesorjev.
Če definiramo težo binarnega niza kot število 1 s v nizu, čeprav očitno ne moremo imeti Grayeve kode s striktno naraščajočo težo, bomo morda želeli to približati tako, da koda teče skozi dve sosednji uteži, preden doseže naslednji.
Beckett-Grayjev kodeks
Druga vrsta Grayeve kode, Beckett-Grayeva koda, je poimenovana po irskem dramatiku Samuel Beckett , ki ga je zanimalo simetrija . Njegova igra Quad igra štiri igralce in je razdeljena na šestnajst časovnih obdobij. Vsako obdobje se konča z enim od štirih igralcev, ki vstopijo ali zapustijo oder.
Predstava se začne s praznim odrom in Beckett je želel, da se vsaka podskupina igralcev pojavi na odru točno enkrat. 4-bitna binarna Grayeva koda lahko predstavlja nabor igralcev, ki so trenutno na odru.
vendar
Beckett je scenariju postavil še dodatno omejitev: zaželel je, da igralci vstopajo in izstopajo, tako da vedno izstopa igralec, ki je bil na odru najdlje.
Akterje bi nato lahko predstavljali s čakalno vrsto prvi vstopi, prvi ven (FIFO), tako da je igralec, ki je izključen iz čakalne vrste, vedno tisti, ki je bil prvi v vrsti.
Beckett ni mogel najti Beckett-Grayeve kode za svojo igro in dejansko izčrpen seznam vseh možnih zaporedij razkrije, da taka koda ne obstaja za n = 4. Danes je znano, da takšne kode obstajajo za n = 2, 5. , 6, 7 in 8 in ne obstajajo za n = 3 ali 4.
Kode kača v škatli
Kode Snake-in-the-box ali kače so zaporedja vozlišč induciranih poti v n-dimenzionalnem hiperkocka graf in coil-in-the-box kode ali tuljave so zaporedja vozlišč induciranih ciklov v hiperkocki.
Gledano kot Grayeve kode, imajo ta zaporedja lastnost zaznavanja vsake enobitne napake kodiranja.
Enosmerna siva koda
Druga vrsta Grayeve kode je enosledna Grayeva koda (STGC), ki jo je razvil Norman B. Spedding in izpopolnjen s Hiltgen, Paterson in Brandestini v 'Single-track Gray codes' (1996).
STGC je cikličen seznam P edinstvenih binarnih kodiranj dolžine n, tako da se dve zaporedni besedi razlikujeta na točno enem mestu. Ko seznam pregledamo kot matriko P × n, je vsak stolpec ciklični premik prvega stolpca.
spremenljivke nginx
Ime izvira iz njihove uporabe z rotacijskimi kodirniki, kjer kontakti zaznavajo številne sledi, pri čemer je vsaka izhodna vrednost 0 ali 1. Za zmanjšanje hrupa zaradi različnih kontaktov, ki se ne preklopijo v istem trenutku, je najbolje, da nastavite sledi, tako da so izhodni podatki stikov v Grayevi kodi.
Da bi dosegli visoko kotno natančnost, potrebujemo veliko kontaktov; da bi dosegli vsaj 1-stopinjsko natančnost, potrebujemo vsaj 360 različnih položajev na obrat, kar zahteva najmanj 9 bitov podatkov in enako število kontaktov.
Če so vsi kontakti nameščeni v istem kotnem položaju, je potrebnih 9 sledi, da dobimo standardni BRGC z najmanj 1-stopinjsko natančnostjo. Vendar, če proizvajalec premakne kontakt v drugačen kotni položaj, vendar na enako razdaljo od središčne gredi, potem je treba ustrezen 'obročast vzorec' zasukati pod enakim kotom, da se zagotovi enak izhod.
Dvodimenzionalna siva koda
Dvodimenzionalne Grayeve kode se uporabljajo v komunikaciji za zmanjšanje števila bitnih napak v kvadraturni amplitudni modulaciji sosednjih točk v konstelaciji.
Pri standardnem kodiranju se vodoravne in navpične sosednje konstelacijske točke razlikujejo za en sam bit, sosednje diagonalne točke pa za 2 bita.
=>=>