logo

Verilog Gray Counter

Šedý kód je druh binárneho číselného systému, v ktorom sa vždy mení iba jeden bit. Dnes je šedý kód široko používaný v digitálnom svete. Bude to užitočné pri oprave chýb a prenose signálu. Gray counter je tiež užitočný pri návrhu a overovaní v doméne VLSI.

Verilog Gray Counter

Grayov kód kóduje celé čísla ako sekvencie bitov s vlastnosťou, že reprezentácie susedných celých čísel sa líšia presne v jednej binárnej pozícii.

Existujú rôzne typy šedých kódov, ako napríklad vyvážený, binárny odraz, maximálna medzera a antipodálny šedý kód.

Počítadlá majú primárnu funkciu vytvárania špecifikovanej výstupnej sekvencie a niekedy sa označujú ako generátory vzorov.

Dizajn

V sivom kóde sa naraz mení iba jeden bit. Tento dizajnový kód má dva vstupy, signály hodín a reset a jeden 4-bitový výstup, ktorý bude generovať šedý kód.

Po prvé, ak rstn signál je vysoký, potom bude výstup nulový a akonáhle rstn ide nízko, na stúpajúcej hrane clk , návrh vygeneruje štvorbitový šedý kód a bude pokračovať v generovaní pri každom stúpajúcom okraji clk signál.

Tento dizajnový kód možno upgradovať a vložiť binárne čísla ako vstup a tento dizajn bude fungovať ako prevodník binárneho kódu na sivý.

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

Vyvážený šedý kód

Vo vyvážených Grayových kódoch je počet zmien v rôznych polohách súradníc čo najbližšie.

Šedý kód je uniforma alebo jednotne vyvážené, ak sú všetky počty prechodov rovnaké.

Môžu byť aj sivé kódy exponenciálne vyvážené, ak všetky ich počty prechodov sú susediace mocniny dvojky a takéto kódy existujú pre každú mocninu dvojky.

Napríklad vyvážený 4-bitový Gray kód má 16 prechodov, ktoré môžu byť rovnomerne rozdelené medzi všetky štyri pozície (štyri prechody na pozíciu), vďaka čomu je rovnomerne vyváž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-ary Grey Code

Existuje mnoho špecializovaných typov Grayových kódov iných ako binárne odrážaný Grayov kód. Jedným z takýchto typov Grayovho kódu je n-árny Grayov kód, tiež známy ako a nelogické Sivý kód. Ako už názov napovedá, tento typ Grayovho kódu používa vo svojich kódovaniach iné ako boolovské hodnoty.

Napríklad trojčlenný ternárny Grayov kód by používal hodnoty {0, 1 a 2}. (n, k)-Gray kód je n-árny Grayov kód s k číslicami. Poradie prvkov v kóde (3, 2)-Gray je: {00, 01, 02, 12, 11, 10, 20, 21 a 22}.

(n, k)-Gray kód môže byť konštruovaný rekurzívne, ako BRGC, alebo môže byť konštruovaný iteratívne.

Monotónne šedé kódy

Monotónne kódy sú užitočné v teórii prepojovacích sietí, najmä na minimalizáciu dilatácie pre lineárne polia procesorov.

Ak definujeme váhu binárneho reťazca ako počet 1 s v reťazci, potom aj keď jasne nemôžeme mať Grayov kód so striktne rastúcou hmotnosťou, možno by sme to chceli aproximovať tak, že kód prebehne cez dve susedné váhy, kým dosiahne ďalší.

Beckettov-Grayov kód

Ďalší typ Grayovho kódu, Beckettov-Grayov kód, je pomenovaný pre írskeho dramatika Samuel Beckett , ktorý mal záujem symetria . Jeho hra Quad účinkujú štyria herci a je rozdelený do šestnástich časových úsekov. Každé obdobie sa končí vstupom alebo odchodom jedného zo štyroch hercov z javiska.

Hra sa začína prázdnou scénou a Beckett chcel, aby sa každá podskupina hercov objavila na javisku presne raz. 4-bitový binárny Gray kód môže reprezentovať množinu hercov, ktorí sú momentálne na scéne.

však

Beckett dal scenáru ďalšie obmedzenie: želal si, aby herci vstupovali a odchádzali, aby vždy odchádzal herec, ktorý bol na javisku najdlhšie.

Herci by potom mohli byť zastúpení vo fronte prvý dnu, prvý von (FIFO), takže vyradeným hercom je vždy ten, kto bol zaradený ako prvý.

Beckett nebol schopný nájsť Beckettov-Grayov kód pre svoju hru a skutočne, vyčerpávajúci zoznam všetkých možných sekvencií ukazuje, že žiadny takýto kód neexistuje pre n = 4. Dnes je známe, že takéto kódy existujú pre n = 2, 5 , 6, 7 a 8 a neexistujú pre n = 3 alebo 4.

Kódy Snake-in-the-box

Snake-in-the-box kódy alebo hady sú sekvencie uzlov indukovaných dráh v n-rozmernom hyperkocka graf a coil-in-the-box kódy alebo cievky sú sekvencie uzlov indukovaných cyklov v hyperkocke.

Tieto sekvencie vnímané ako Grayove kódy majú tú vlastnosť, že detegujú akúkoľvek jednobitovú chybu kódovania.

Jednostopový Grey Code

Ďalším druhom Grayovho kódu je jednostopový Grayov kód (STGC) vyvinutý spoločnosťou Norman B. Spedding a rafinované tým Hiltgen, Paterson a Brandestini v „Jednostopových šedých kódoch“ (1996).

STGC je cyklický zoznam P jedinečných binárnych kódovaní dĺžky n tak, že dve po sebe idúce slová sa líšia presne v jednej polohe. Keď sa zoznam skúma ako matica P × n, každý stĺpec predstavuje cyklický posun prvého stĺpca.

kali linuxový terminál

Názov pochádza z ich použitia s rotačnými enkodérmi, kde je veľa stôp snímaných kontaktmi, čo vedie k tomu, že každá z nich má výstup 0 alebo 1. Na zníženie šumu spôsobeného rôznymi kontaktmi, ktoré nespínajú v rovnakom čase, je najlepšie nastaviť stopy, takže výstup údajov kontaktov je v sivom kóde.

Na dosiahnutie vysokej uhlovej presnosti potrebujete veľa kontaktov; na dosiahnutie presnosti aspoň 1 stupňa je potrebných aspoň 360 rôznych pozícií na otáčku, čo si vyžaduje minimálne 9 bitov dát a rovnaký počet kontaktov.

Ak sú všetky kontakty umiestnené v rovnakej uhlovej polohe, potom je potrebných 9 stôp na získanie štandardného BRGC s presnosťou aspoň 1 stupňa. Ak však výrobca presunie kontakt do inej uhlovej polohy, ale v rovnakej vzdialenosti od stredového hriadeľa, potom je potrebné príslušný „kruhový vzor“ otočiť o rovnaký uhol, aby sa dosiahol rovnaký výstup.

Dvojrozmerný šedý kód

Dvojrozmerné Grayove kódy sa používajú v komunikácii na minimalizáciu počtu bitových chýb v kvadratúrnej amplitúdovej modulácii susedných bodov v konštelácii.

V štandardnom kódovaní sa horizontálne a vertikálne susedné konštelačné body líšia o jeden bit a susedné diagonálne body sa líšia o 2 bity.