logo

Verilog pelēkais skaitītājs

Pelēks kods ir sava veida bināra skaitļu sistēma, kurā vienlaikus mainīsies tikai viens bits. Mūsdienās pelēkais kods tiek plaši izmantots digitālajā pasaulē. Tas noderēs kļūdu labošanai un signāla pārraidei. Gray skaitītājs ir noderīgs arī projektēšanā un pārbaudē VLSI domēnā.

Verilog pelēks skaitītājs

Pelēks kods kodē veselus skaitļus kā bitu sekvences ar īpašību, ka blakus esošo veselo skaitļu attēlojumi atšķiras tieši vienā binārā pozīcijā.

Ir dažādi pelēko kodu veidi, piemēram, līdzsvarotais, binārais atspoguļotais kods, maksimālais atstarpe un antipodālais pelēkais kods.

Skaitītāju galvenā funkcija ir izveidot noteiktu izvades secību, un tos dažreiz sauc par modeļu ģeneratoriem.

Dizains

Pelēkā kodā vienlaikus mainās tikai viens bits. Šim dizaina kodam ir divas ieejas, pulksteņa un atiestatīšanas signāli un viena 4 bitu izeja, kas ģenerēs pelēko kodu.

Pirmkārt, ja rstn signāls ir augsts, tad izvade būs nulle, un tiklīdz rstn iet zemu, uz augošās malas klk , dizains ģenerēs četru bitu pelēko kodu un turpinās ģenerēt katrā augošajā malā klk signāls.

Šo dizaina kodu var jaunināt un kā ievadi ievietot bināros skaitļus, un šis dizains darbosies kā binārā uz pelēko kodu pārveidotājs.

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

Līdzsvarots pelēkais kods

Līdzsvarotajos pelēkajos kodos izmaiņu skaits dažādās koordinātu pozīcijās ir pēc iespējas tuvāks.

Pelēks kods ir vienveidīgs vai vienmērīgi līdzsvarots, ja tā pāreju skaits ir vienāds.

Var būt arī pelēkie kodi eksponenciāli līdzsvarots, ja visi to pāreju skaitļi ir blakus divi pakāpēm un šādi kodi pastāv katram divnieka pakāpēm.

Piemēram, sabalansētam 4 bitu pelēkajam kodam ir 16 pārejas, kuras var vienmērīgi sadalīt pa visām četrām pozīcijām (četras pārejas katrā pozīcijā), padarot to vienmērīgi līdzsvarotu.

 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-ārais pelēkais kods

Ir daudz specializētu pelēko kodu veidu, izņemot bināri atspoguļoto Grey kodu. Viens no šādiem Grey koda veidiem ir n-ary Grey kods, kas pazīstams arī kā a nav Būla Pelēks kods. Kā norāda nosaukums, šāda veida Grey kods savos kodējumos izmanto vērtības, kas nav Būla vērtības.

Piemēram, trīskāršajā pelēkajā kodā tiktu izmantotas vērtības {0, 1 un 2}. (n, k)-Gray kods ir n-ārs Grey kods ar k cipariem. Elementu secība (3, 2)-Gray kodā ir: {00, 01, 02, 12, 11, 10, 20, 21 un 22}.

(n, k)-Gray kodu var konstruēt rekursīvi kā BRGC, vai to var konstruēt iteratīvi.

Monotoniski pelēkie kodi

Monotoniskie kodi ir noderīgi starpsavienojumu tīklu teorijā, īpaši, lai samazinātu lineāro procesoru masīvu dilatāciju.

Ja mēs definējam binārās virknes svaru kā 1s skaitu virknē, tad, lai gan mums acīmredzami nevar būt Grey koda ar stingri pieaugošu svaru, mēs, iespējams, vēlēsim to tuvināt, pirms kods tiek sasniegts caur diviem blakus esošajiem svariem. nākamais.

Beketa-Greja kods

Cits Greja koda veids, Beketa-Greja kods, ir nosaukts īru dramaturga vārdā Semjuels Bekets , kuru interesēja simetrija . Viņa luga Quad darbojas četri aktieri, un tas ir sadalīts sešpadsmit laika periodos. Katrs periods beidzas ar to, ka viens no četriem aktieriem uzkāpj vai aiziet no skatuves.

Luga sākas ar tukšu skatuvi, un Bekets vēlējās, lai katra aktieru apakškopa uz skatuves parādās tieši vienu reizi. 4 bitu binārais Grey kods var attēlot aktieru kopu, kas pašlaik atrodas uz skatuves.

tomēr

Bekets scenārijam uzlika papildu ierobežojumu: viņš novēlēja aktieriem ienākt un iziet, lai vienmēr izietu tas aktieris, kurš uz skatuves bijis visilgāk.

Pēc tam aktieri varētu tikt pārstāvēti rindā pirmais iekšā, pirmais ārā (FIFO), lai aktieris, kas tiek izņemts no rindas, vienmēr būtu tas, kurš rindā tika ievietots pirmais.

Bekets nespēja atrast Beketa-Greja kodu savai lugai, un patiesi, izsmeļošs visu iespējamo secību uzskaitījums atklāj, ka šāds kods nepastāv n = 4. Mūsdienās ir zināms, ka šādi kodi pastāv n = 2, 5 , 6, 7 un 8, un tie nepastāv, ja n = 3 vai 4.

Snake-in-the-box kodi

Snake in-the-box kodi jeb čūskas ir inducētu ceļu mezglu secības n-dimensijā hiperkubs grafs un in-the-box kodi jeb spoles ir inducēto ciklu mezglu secības hiperkubā.

Šīm sekvencēm, kas tiek uzskatītas par pelēkajiem kodiem, ir īpašība atklāt jebkuru viena bita kodēšanas kļūdu.

Viena celiņa pelēkais kods

Cits pelēkā koda veids ir viena celiņa pelēkais kods (STGC), ko izstrādājis Normens B. Spedings un precizēja Hiltgens, Patersons un Brandestīni grāmatā 'Single-track Grey Codes' (1996).

STGC ir ciklisks P unikālo bināro kodējumu saraksts ar garumu n tā, ka divi secīgi vārdi atšķiras tieši vienā pozīcijā. Ja sarakstu pārbauda kā P × n matricu, katra kolonna ir pirmās kolonnas cikliska nobīde.

java ievades virkne

Nosaukums cēlies no to izmantošanas ar rotējošiem kodētājiem, kur daudzi celiņi tiek uztverti ar kontaktiem, kā rezultātā katra izvade ir 0 vai 1. Lai samazinātu troksni, ko rada dažādi kontakti, kas nepārslēdzas vienā un tajā pašā laikā, ieteicams iestatīt izseko tā, lai kontaktpersonu datu izvade būtu pelēkā kodā.

Lai iegūtu augstu leņķisko precizitāti, nepieciešams daudz kontaktu; lai sasniegtu vismaz 1 grāda precizitāti, ir nepieciešamas vismaz 360 atšķirīgas pozīcijas vienā apgriezienā, kam nepieciešami vismaz 9 biti datu un tikpat daudz kontaktu.

Ja visi kontakti ir novietoti vienā leņķiskā pozīcijā, tad, lai iegūtu standarta BRGC ar vismaz 1 grāda precizitāti, ir nepieciešami 9 celiņi. Tomēr, ja ražotājs pārvieto kontaktu citā leņķiskā stāvoklī, bet tajā pašā attālumā no centrālās vārpstas, tad atbilstošais “gredzena raksts” ir jāpagriež tādā pašā leņķī, lai iegūtu tādu pašu izvadi.

Divdimensiju pelēkais kods

Divdimensiju pelēkie kodi tiek izmantoti komunikācijā, lai samazinātu bitu kļūdu skaitu kvadrātveida amplitūdas modulācijas blakus punktos zvaigznājā.

Standarta kodējumā horizontālie un vertikālie blakus esošie konstelācijas punkti atšķiras par vienu bitu, un blakus esošie diagonālie punkti atšķiras par 2 bitiem.