Šedý kód je druh binárního číselného systému, kde se vždy mění pouze jeden bit. Dnes je šedý kód široce používán v digitálním světě. Bude to užitečné pro opravu chyb a přenos signálu. Grayův čítač je také užitečný při návrhu a ověřování v doméně VLSI.
Grayův kód kóduje celá čísla jako sekvence bitů s tou vlastností, že reprezentace sousedních celých čísel se liší právě v jedné binární pozici.
Existují různé typy šedých kódů, jako je vyvážený, binární odražený, maximální mezera a antipodální šedý kód.
Čítače mají primární funkci produkovat specifikovanou výstupní sekvenci a jsou někdy označovány jako generátory vzorů.
Design
V šedém kódu se najednou změní pouze jeden bit. Tento návrhový kód má dva vstupy, signály hodin a reset a jeden 4bitový výstup, který bude generovat šedý kód.
Za prvé, pokud rstn signál je vysoký, výstup bude nulový a jakmile rstn jde nízko, na vzestupné hraně clk , návrh vygeneruje čtyřbitový šedý kód a bude pokračovat v generování při každém vzestupném okraji clk signál.
Tento návrhový kód lze upgradovat a vložit binární čísla jako vstup a tento návrh bude fungovat jako převodník binárního kódu na šedý.
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></=>
Vyvážený šedý kód
Ve vyvážených Grayových kódech je počet změn v různých polohách souřadnic co nejblíže.
Šedý kód je jednotný nebo jednotně vyvážený, pokud jsou počty jeho přechodů všechny stejné.
Mohou být také šedé kódy exponenciálně vyvážený, pokud všechny jejich počty přechodů jsou sousedící mocniny dvojky a takové kódy existují pro každou mocninu dvojky.
Například vyvážený 4bitový Gray kód má 16 přechodů, které lze rovnoměrně rozložit mezi všechny čtyři pozice (čtyři přechody na pozici), díky čemuž je rovnoměrně 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-ární šedý kód
Existuje mnoho specializovaných typů Grayových kódů jiných než binárně reflektovaný Grayův kód. Jedním takovým typem Grayova kódu je n-ární Grayův kód, také známý jako a nelogické Šedý kód. Jak název napovídá, tento typ Grayova kódu používá ve svých kódováních jiné než booleovské hodnoty.
Například tříčlenný ternární Gray kód by používal hodnoty {0, 1 a 2}. (n, k)-Gray kód je n-ary Gray kód s k číslicemi. Posloupnost prvků v (3, 2)-Gray kódu je: {00, 01, 02, 12, 11, 10, 20, 21 a 22}.
(n, k)-Gray kód může být konstruován rekurzivně, jako BRGC, nebo může být konstruován iterativně.
Monotónní šedé kódy
Monotónní kódy jsou užitečné v teorii propojovacích sítí, zejména pro minimalizaci dilatace pro lineární pole procesorů.
Pokud definujeme váhu binárního řetězce jako počet 1s v řetězci, pak ačkoli zjevně nemůžeme mít Grayův kód s přísně rostoucí váhou, můžeme to chtít aproximovat tak, že kód projde dvěma sousedními váhami, než dosáhne další.
Beckett-Grayův kód
Další typ Grayova kódu, Beckett-Grayův kód, je pojmenován po irském dramatikovi Samuel Beckett , který měl zájem symetrie . Jeho hra Quad Hrají čtyři herci a je rozdělen do šestnácti časových úseků. Každé období končí vstupem nebo odchodem jednoho ze čtyř herců z jeviště.
Hra začíná prázdným jevištěm a Beckett chtěl, aby se každá podskupina herců objevila na jevišti přesně jednou. 4bitový binární Gray kód může představovat soubor herců, kteří jsou aktuálně na jevišti.
Nicméně,
Beckett na scénář umístil další omezení: přál si, aby herci vstupovali a vycházeli, takže herec, který byl na jevišti nejdéle, byl vždy tím, kdo odchází.
Herci by pak mohli být zastoupeni frontou první dovnitř, první ven (FIFO), takže vyřazený herec je vždy ten, kdo byl zařazen jako první.
Beckett nebyl schopen najít Beckett-Grayův kód pro svou hru a skutečně, vyčerpávající seznam všech možných sekvencí ukazuje, že žádný takový kód neexistuje pro n = 4. Dnes je známo, že takové kódy existují pro n = 2, 5 , 6, 7 a 8 a neexistují pro n = 3 nebo 4.
Kódy Snake-in-the-box
Snake-in-the-box kódy neboli hadi jsou sekvence uzlů indukovaných cest v n-rozměrném hyperkrychle graf a kódy coil-in-the-box neboli cívky jsou sekvence uzlů indukovaných cyklů v hyperkrychli.
Viděno jako Grayovy kódy, tyto sekvence mají vlastnost detekovat jakoukoli chybu jednobitového kódování.
Jednostopý šedý kód
Dalším druhem Grayova kódu je jednostopý Grayův kód (STGC) vyvinutý společností Norman B. Spedding a rafinovaný tím Hiltgen, Paterson a Brandestini v „Jednostopých šedých kódech“ (1996).
STGC je cyklický seznam P jedinečných binárních kódování délky n tak, že dvě po sobě jdoucí slova se liší přesně v jedné pozici. Když je seznam zkoumán jako matice P × n, každý sloupec je cyklickým posunem prvního sloupce.
int zdvojnásobit
Název pochází z jejich použití s rotačními enkodéry, kde je mnoho stop snímáno kontakty, což vede k tomu, že každá z nich má výstup 0 nebo 1. Pro snížení šumu kvůli tomu, že různé kontakty nespínají ve stejný okamžik, je vhodné nastavit stopy, takže výstup dat kontaktů je v šedém kódu.
Chcete-li získat vysokou úhlovou přesnost, potřebujete mnoho kontaktů; k dosažení alespoň 1-stupňové přesnosti je potřeba alespoň 360 různých pozic na otáčku, což vyžaduje minimálně 9 bitů dat a stejný počet kontaktů.
Pokud jsou všechny kontakty umístěny ve stejné úhlové poloze, pak je potřeba 9 stop k získání standardního BRGC s přesností alespoň 1 stupně. Pokud však výrobce přesune kontakt do jiné úhlové polohy, ale ve stejné vzdálenosti od středového hřídele, pak je třeba odpovídající „kroužkový vzor“ otočit o stejný úhel, aby byl zajištěn stejný výstup.
Dvourozměrný šedý kód
Dvourozměrné Grayovy kódy se používají v komunikaci k minimalizaci počtu bitových chyb v kvadraturní amplitudové modulaci sousedních bodů v konstelaci.
Ve standardním kódování se horizontální a vertikální sousední body konstelace liší o jeden bit a sousední diagonální body se liší o 2 bity.
=>=>