logo

Szary licznik Verilog

Kod Graya to rodzaj binarnego systemu liczbowego, w którym zmienia się tylko jeden bit na raz. Obecnie szary kod jest szeroko stosowany w cyfrowym świecie. Będzie pomocny przy korekcji błędów i transmisji sygnału. Licznik Graya jest również przydatny w projektowaniu i weryfikacji w domenie VLSI.

Szary licznik Verilog

Kod Graya koduje liczby całkowite jako sekwencje bitów z tą właściwością, że reprezentacje sąsiednich liczb całkowitych różnią się dokładnie o jedną pozycję binarną.

Istnieją różne typy kodów Graya, takie jak kod zrównoważony, odbity binarny, maksymalny odstęp i kod szarego antypodalnego.

Liczniki pełnią podstawową funkcję wytwarzania określonej sekwencji wyjściowej i czasami nazywane są generatorami wzorców.

Projekt

W kodzie Graya jednocześnie zmienia się tylko jeden bit. Ten kod projektowy ma dwa wejścia, sygnały zegara i resetowania oraz jedno 4-bitowe wyjście, które generuje szary kod.

Po pierwsze, jeśli pierwszy sygnał jest wysoki, wówczas wyjście będzie wynosić zero i jak tylko pierwszy spada nisko, na zboczu narastającym kl , projekt wygeneruje czterobitowy szary kod i będzie nadal generowany przy każdym narastającym zboczu kl sygnał.

Ten kod projektu można zaktualizować i wprowadzić liczby binarne jako dane wejściowe, a ten projekt będzie działał jako konwerter kodu binarnego na kod Graya.

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

Zrównoważony szary kod

W zrównoważonych kodach Graya liczba zmian w różnych pozycjach współrzędnych jest możliwie najbardziej zbliżona.

Kod Graya jest mundur Lub równomiernie zrównoważony, jeśli liczba przejść jest równa.

Szare kody również mogą być wykładniczo zrównoważone, jeśli wszystkie ich liczniki przejść są sąsiadującymi potęgami dwójki, a takie kody istnieją dla każdej potęgi dwójki.

Na przykład zrównoważony 4-bitowy kod Graya ma 16 przejść, które można równomiernie rozłożyć na wszystkich czterech pozycjach (cztery przejścia na pozycję), dzięki czemu jest on równomiernie zrównoważony.

 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 Gray Code

Istnieje wiele wyspecjalizowanych typów kodów Graya innych niż kod Graya z odzwierciedleniem binarnym. Jednym z takich typów kodu Graya jest n-ary kod Graya, znany również jako nielogiczne Szary kod. Jak sama nazwa wskazuje, ten typ kodu Graya wykorzystuje w swoim kodowaniu wartości inne niż logiczne.

Na przykład 3-składnikowy trójskładnikowy kod Graya będzie używał wartości {0, 1 i 2}. Kod (n, k)-Graya to n-arny kod Graya składający się z k cyfr. Sekwencja elementów w kodzie (3, 2)-Graya to: {00, 01, 02, 12, 11, 10, 20, 21 i 22}.

Kod (n, k)-Graya może być konstruowany rekurencyjnie, jak BRGC, lub może być konstruowany iteracyjnie.

Monotoniczne szare kody

Kody monotoniczne są przydatne w teorii sieci połączeń wzajemnych, zwłaszcza w celu minimalizacji dylatacji liniowych układów procesorów.

Jeśli zdefiniujemy wagę ciągu binarnego jako liczbę jedynek w ciągu, to chociaż oczywiście nie możemy mieć kodu Graya o ściśle rosnącej wadze, możemy chcieć to przybliżyć, przepuszczając kod przez dwie sąsiednie wagi, zanim osiągnie Następny.

Kodeks Becketta-Graya

Inny rodzaj kodu Graya, kod Becketta-Graya, został nazwany na cześć irlandzkiego dramaturga Samuela Becketta , który był zainteresowany symetria . Jego gra Kwadrat składa się z czterech aktorów i jest podzielony na szesnaście okresów czasowych. Każdy okres kończy się wejściem lub opuszczeniem sceny przez jednego z czterech aktorów.

Spektakl rozpoczyna się od pustej sceny, a Beckett chciał, aby każdy podzbiór aktorów pojawił się na scenie dokładnie raz. 4-bitowy binarny kod Graya może reprezentować zestaw aktorów znajdujących się aktualnie na scenie.

Jednakże,

Beckett nałożył na scenariusz dodatkowe ograniczenie: chciał, aby aktorzy wchodzili i wychodzili, tak aby zawsze wychodził ten, który był na scenie najdłużej.

Aktorzy mogliby wówczas być reprezentowani przez kolejkę „pierwszy przyszedł, pierwszy wyszedł” (FIFO), tak aby aktorem usuwanym z kolejki był zawsze ten, który został dodany do kolejki jako pierwszy.

Beckett nie był w stanie znaleźć kodu Becketta-Graya dla swojej sztuki i rzeczywiście, wyczerpująca lista wszystkich możliwych sekwencji pokazuje, że taki kod nie istnieje dla n = 4. Dziś wiadomo, że takie kody istnieją dla n = 2, 5 , 6, 7 i 8 i nie istnieją dla n = 3 lub 4.

Kody typu „wąż w pudełku”.

Kody typu wąż w pudełku, czyli węże, to sekwencje węzłów indukowanych ścieżek w n-wymiarowym hipersześcian wykres i kody cewki w pudełku lub cewki to sekwencje węzłów indukowanych cykli w hipersześcianie.

Sekwencje te, postrzegane jako kody Graya, mają właściwość wykrywania wszelkich jednobitowych błędów kodowania.

Jednościeżkowy Gray Code

Innym rodzajem kodu Graya jest jednościeżkowy kod Graya (STGC) opracowany przez Normana B. Speddinga i dopracowane przez Hiltgen, Paterson I Brandestiniego w „Jednotorowych kodach Graya” (1996).

STGC to cykliczna lista P unikalnych kodowań binarnych o długości n, w których dwa kolejne słowa różnią się dokładnie o jedną pozycję. Gdy lista jest rozpatrywana jako macierz P × n, każda kolumna jest cyklicznym przesunięciem pierwszej kolumny.

npm wymuszenie czyszczenia pamięci podręcznej

Nazwa pochodzi od ich zastosowania w enkoderach obrotowych, gdzie wiele ścieżek jest wykrywanych przez styki, co daje na wyjściu każdy sygnał o wartości 0 lub 1. Aby zredukować szum powodowany przez różne styki, które nie przełączają się w tym samym momencie, najlepiej ustawić śledzi, tak aby dane wyjściowe kontaktów były zapisane w kodzie Graya.

Aby uzyskać wysoką dokładność kątową, potrzeba wielu styków; aby osiągnąć dokładność co najmniej 1 stopnia, potrzeba co najmniej 360 odrębnych pozycji na obrót, co wymaga minimum 9 bitów danych i takiej samej liczby styków.

Jeśli wszystkie styki są umieszczone w tym samym położeniu kątowym, potrzeba 9 ścieżek, aby uzyskać standardowy BRGC z dokładnością co najmniej 1 stopnia. Jeśli jednak producent przesunie styk w inne położenie kątowe, ale w tej samej odległości od wału centralnego, wówczas odpowiedni „wzór pierścienia” należy obrócić o ten sam kąt, aby uzyskać tę samą moc wyjściową.

Dwuwymiarowy szary kod

Dwuwymiarowe kody Graya są wykorzystywane w komunikacji w celu zminimalizowania liczby błędów bitowych w kwadraturowej modulacji amplitudy sąsiednich punktów w konstelacji.

W standardowym kodowaniu poziome i pionowe sąsiednie punkty konstelacji różnią się o jeden bit, a sąsiednie punkty ukośne różnią się o 2 bity.