Grå kode er en slags binært talsystem, hvor kun én bit vil ændre sig ad gangen. I dag er grå kode meget udbredt i den digitale verden. Det vil være nyttigt til fejlkorrektion og signaltransmission. Den grå tæller er også nyttig i design og verifikation i VLSI-domænet.
En grå kode koder heltal som sekvenser af bit med den egenskab, at repræsentationerne af tilstødende heltal adskiller sig i nøjagtig én binær position.
Der er forskellige typer grå koder, såsom Balanceret, Binært reflekteret, Maximum Gap og Antipodal Grey-kode.
Tællere har en primær funktion med at producere en specificeret outputsekvens og omtales nogle gange som mønstergeneratorer.
Design
I en grå kode ændres kun én bit ad gangen. Denne designkode har to indgange, ur- og nulstillingssignaler og en 4 bit udgang, der genererer grå kode.
For det første, hvis rstn signalet er højt, så vil outputtet være nul, og så snart rstn går lavt, på den stigende kant af clk , vil designet generere en fire-bit grå kode og fortsætte med at generere ved hver stigende kant af clk signal.
Denne designkode kan opgraderes og indsætte binære tal som input, og dette design vil fungere som en binær til grå kodekonverter.
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></=>
Balanceret grå kode
I balancerede grå koder er antallet af ændringer i forskellige koordinatpositioner så tæt som muligt.
En grå kode er uniform eller ensartet afbalanceret, hvis dets overgangstal alle er lige store.
Grå koder kan også være eksponentielt afbalanceret, hvis alle deres overgangstællinger er tilstødende topotenser, og sådanne koder findes for hver potens af to.
For eksempel har en afbalanceret 4-bit grå kode 16 overgange, som kan fordeles jævnt mellem alle fire positioner (fire overgange pr. position), hvilket gør den ensartet afbalanceret.
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-ær grå kode
Der er mange specialiserede typer af Gray-koder ud over den binært reflekterede Gray-kode. En sådan type grå kode er den n-ære grå kode, også kendt som en ikke-boolesk Grå kode. Som navnet antyder, bruger denne type Gray-kode ikke-booleske værdier i sine kodninger.
For eksempel vil en 3-ær ternær grå kode bruge værdierne {0, 1 og 2}. (n, k)-Gray-koden er den n-ære Gray-kode med k cifre. Sekvensen af elementer i koden (3, 2)-Grå er: {00, 01, 02, 12, 11, 10, 20, 21 og 22}.
(n, k)-Gray-koden kan være konstrueret rekursivt, som BRGC, eller kan være konstrueret iterativt.
Monotone grå koder
Monotoniske koder er nyttige i teori om sammenkoblingsnetværk, især for at minimere dilatation for lineære arrays af processorer.
Hvis vi definerer vægten af en binær streng til at være antallet af 1'ere i strengen, så selvom vi tydeligvis ikke kan have en grå kode med strengt stigende vægt, vil vi måske tilnærme dette ved at lade koden køre gennem to tilstødende vægte, før vi når den næste.
Beckett-grå kode
En anden type Gray-kode, Beckett-Gray-koden, er opkaldt efter irsk dramatiker Samuel Beckett , som var interesseret i symmetri . Hans skuespil Quad har fire skuespillere og er opdelt i seksten tidsperioder. Hver periode afsluttes med, at en af de fire skuespillere træder ind eller forlader scenen.
Stykket begynder med en tom scene, og Beckett ønskede, at hver undergruppe af skuespillere skulle optræde på scenen præcis én gang. En 4-bit binær grå kode kan repræsentere det sæt af skuespillere, der i øjeblikket er på scenen.
Imidlertid,
Beckett satte en yderligere begrænsning på manuskriptet: han ønskede, at skuespillerne skulle komme ind og ud, så den skuespiller, der havde været længst på scenen, altid ville være den, der forlod.
Skuespillerne kunne så være repræsenteret af en først-ind, først-ud-kø (FIFO), således at den skuespiller, der bliver sat ud af kø, altid er den, der var først i kø.
Beckett var ikke i stand til at finde en Beckett-Gray-kode til sit spil, og en udtømmende liste over alle mulige sekvenser afslører, at der ikke findes en sådan kode for n = 4. Det er kendt i dag, at sådanne koder eksisterer for n = 2, 5 , 6, 7 og 8, og eksisterer ikke for n = 3 eller 4.
Slange-i-boksen-koder
Snake-in-the-box-koder, eller slanger, er sekvenserne af noder af inducerede stier i en n-dimensional hyperkube graf, og coil-in-the-box-koder, eller coils, er sekvenserne af noder af inducerede cyklusser i en hyperkube.
Set som grå koder har disse sekvenser egenskaben til at detektere enhver enkelt-bit kodningsfejl.
Enkeltsporet grå kode
En anden form for grå kode er enkeltsporet grå kode (STGC) udviklet af Norman B. Spedding og forfinet af Hiltgen, Paterson og Brandestini i 'Single-track Grey codes' (1996).
STGC'en er en cyklisk liste af P unikke binære kodninger af længden n, således at to på hinanden følgende ord adskiller sig i nøjagtig én position. Når listen undersøges som en P × n matrix, er hver kolonne et cyklisk skift af den første kolonne.
scan.nextstring java
Navnet kommer fra deres brug med roterende encodere, hvor mange spor bliver registreret af kontakter, hvilket resulterer i, at hver af dem giver en udgang på 0 eller 1. For at reducere støj på grund af forskellige kontakter, der ikke skifter samme tidspunkt, sætter man fortrinsvis op sporer, så kontakternes dataoutput er i grå kode.
For at få høj vinkelnøjagtighed har man brug for masser af kontakter; for at opnå en nøjagtighed på mindst 1 grad, har man brug for mindst 360 forskellige positioner pr. omdrejning, hvilket kræver minimum 9 bits data og det samme antal kontakter.
Hvis alle kontakter er placeret i samme vinkelposition, er der brug for 9 spor for at få en standard BRGC med mindst 1-grads nøjagtighed. Men hvis producenten flytter en kontakt til en anden vinkelposition, men i samme afstand fra midterakslen, skal det tilsvarende 'ringmønster' drejes i samme vinkel for at give det samme output.
Todimensionel grå kode
Todimensionelle gråkoder bruges i kommunikation for at minimere antallet af bitfejl i kvadraturamplitudemodulation tilstødende punkter i konstellationen.
I en standardkodning adskiller de vandrette og lodrette tilstødende konstellationspunkter sig med en enkelt bit, og tilstødende diagonale punkter adskiller sig med 2 bit.
=>=>