Кодът на Грей е вид двоична бройна система, при която само един бит ще се променя наведнъж. Днес сивият код се използва широко в дигиталния свят. Ще бъде полезно за коригиране на грешки и предаване на сигнал. Броячът на Грей също е полезен при проектиране и проверка в областта на VLSI.
Кодът на Грей кодира цели числа като последователности от битове със свойството, че представянията на съседни цели числа се различават точно в една двоична позиция.
Има различни типове сиви кодове, като балансиран, бинарен отразен, максимален разрив и антиподален сив код.
Броячите имат основна функция да произвеждат определена изходна последователност и понякога се наричат генератори на шаблони.
Дизайн
В сив код само един бит се променя наведнъж. Този дизайнерски код има два входа, часовник и сигнали за нулиране и един 4-битов изход, който ще генерира сив код.
Първо, ако rstn сигналът е висок, тогава изходът ще бъде нула и веднага щом rstn отива ниско, на нарастващия ръб на clk , дизайнът ще генерира четирибитов сив код и ще продължи да генерира при всеки нарастващ ръб на clk сигнал.
Този дизайнерски код може да бъде надграден и да постави двоични числа като вход и този дизайн ще работи като конвертор на двоичен към сив код.
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></=>
Балансиран сив код
При балансираните кодове на Грей броят на промените в различни координатни позиции е възможно най-близък.
Кодът на Грей е униформа или равномерно балансиран, ако всичките му преходи са равни.
Сиви кодове също могат да бъдат експоненциално балансирани, ако всички техни преброявания на преходите са съседни степени на две и такива кодове съществуват за всяка степен на две.
Например, балансиран 4-битов код на Грей има 16 прехода, които могат да бъдат равномерно разпределени между четирите позиции (четири прехода на позиция), което го прави равномерно балансиран.
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-аричен код на Грей
Има много специализирани типове кодове на Грей, различни от двоично отразения код на Грей. Един такъв тип код на Грей е n-арният код на Грей, известен също като a небулева Сив код. Както подсказва името, този тип код на Грей използва не-булеви стойности в своите кодировки.
Например 3-реден троичен код на Грей ще използва стойностите {0, 1 и 2}. (n, k)-кодът на Грей е n-арният код на Грей с k цифри. Последователността от елементи в (3, 2)-кода на Грей е: {00, 01, 02, 12, 11, 10, 20, 21 и 22}.
Кодът (n, k)-Gray може да бъде конструиран рекурсивно, като BRGC, или може да бъде конструиран итеративно.
Монотонни сиви кодове
Монотонните кодове са полезни в теорията на мрежите за взаимно свързване, особено за минимизиране на дилатацията за линейни масиви от процесори.
Ако дефинираме теглото на двоичен низ като броя на 1s в низа, тогава въпреки че очевидно не можем да имаме код на Грей със строго нарастващо тегло, може да искаме да приближим това, като накараме кода да премине през две съседни тегла, преди да достигне следващият.
Код на Бекет-Грей
Друг вид код на Грей, кодът на Бекет-Грей, е кръстен на ирландския драматург Самюел Бекет , който се интересуваше от симетрия . Неговата игра Quad включва четирима актьори и е разделен на шестнадесет времеви периода. Всеки период завършва с влизане или излизане на един от четиримата актьори на сцената.
Пиесата започва с празна сцена и Бекет искаше всяка подгрупа от актьори да се появи на сцената точно веднъж. 4-битов двоичен код на Грей може да представи набора от актьори в момента на сцената.
Въпреки това,
Бекет постави допълнително ограничение на сценария: той пожела актьорите да влизат и излизат, така че актьорът, който е бил на сцената най-дълго, винаги да излиза.
След това актьорите могат да бъдат представени от опашка първи влязъл, първи излязъл (FIFO), така че актьорът, който е изключен от опашката, винаги е този, който е бил поставен първи в опашката.
Бекет не успя да намери код на Бекет-Грей за своята пиеса и наистина, изчерпателен списък на всички възможни последователности разкрива, че не съществува такъв код за n = 4. Днес е известно, че такива кодове наистина съществуват за n = 2, 5 , 6, 7 и 8 и не съществуват за n = 3 или 4.
Кодове на змия в кутията
Кодовете на змия в кутията, или змии, са последователности от възли на индуцирани пътища в n-измерно хиперкуб графика, а кодовете coil-in-the-box, или намотки, са последователностите от възли на индуцирани цикли в хиперкуб.
Разгледани като кодове на Грей, тези последователности имат свойството да откриват всяка еднобитова грешка в кодирането.
Еднопистов сив код
Друг вид код на Грей е еднопистовият код на Грей (STGC), разработен от Норман Б. Спединг и рафинирани от Хилтген, Патерсън и Брандестини в „Single-track Gray codes“ (1996).
STGC е цикличен списък от P уникални двоични кодирания с дължина n, така че две последователни думи да се различават точно в една позиция. Когато списъкът се изследва като P × n матрица, всяка колона е циклично изместване на първата колона.
css променя размера на изображението
Името идва от използването им с въртящи се енкодери, където много песни се усещат от контакти, което води до изход от 0 или 1. За да се намали шумът, дължащ се на това, че различните контакти не се превключват в един и същи момент във времето, за предпочитане е да се настрои проследява, така че изходните данни на контактите да са в код на Грей.
За да се получи висока ъглова точност, са необходими много контакти; за да се постигне най-малко 1 градус точност, са необходими поне 360 различни позиции на оборот, което изисква минимум 9 бита данни и същия брой контакти.
Ако всички контакти са поставени в една и съща ъглова позиция, тогава са необходими 9 писти, за да се получи стандартен BRGC с най-малко 1 градус точност. Въпреки това, ако производителят премести контакт в различна ъглова позиция, но на същото разстояние от централния вал, тогава съответният „модел на пръстена“ трябва да бъде завъртян на същия ъгъл, за да даде същата мощност.
Двуизмерен код на Грей
Двуизмерните кодове на Грей се използват в комуникацията за минимизиране на броя на битовите грешки в квадратурната амплитудна модулация на съседни точки в съзвездието.
При стандартно кодиране хоризонталните и вертикалните съседни точки на съзвездие се различават с един бит, а съседните диагонални точки се различават с 2 бита.
=>=>