logo

Contador Verilog Cinza

O código Gray é um tipo de sistema numérico binário onde apenas um bit muda por vez. Hoje o código cinza é amplamente utilizado no mundo digital. Será útil para correção de erros e transmissão de sinal. O contador Gray também é útil no projeto e verificação no domínio VLSI.

Contador Verilog Cinza

Um Código Gray codifica inteiros como sequências de bits com a propriedade de que as representações de inteiros adjacentes diferem em exatamente uma posição binária.

Existem diferentes tipos de códigos de cinza, como código de cinza balanceado, binário refletido, lacuna máxima e código de cinza antípoda.

Os contadores têm a função principal de produzir uma sequência de saída especificada e às vezes são chamados de geradores de padrões.

Projeto

Em um código cinza, apenas um bit muda por vez. Este código de projeto possui duas entradas, sinais de clock e reset e uma saída de 4 bits que irá gerar código cinza.

Primeiro, se o primeiro sinal for alto, então a saída será zero, e assim que primeiro vai baixo, na borda ascendente de clique , o design gerará um código cinza de quatro bits e continuará a gerar em cada borda ascendente do clique sinal.

Este código de design pode ser atualizado e colocar números binários como entrada, e este design funcionará como um conversor de código binário para cinza.

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

Código Gray Balanceado

Em códigos Gray balanceados, o número de alterações em diferentes posições de coordenadas é o mais próximo possível.

Um código Gray é uniforme ou uniformemente equilibrado se suas contagens de transição forem todas iguais.

Os códigos cinza também podem ser exponencialmente equilibrado se todas as suas contagens de transição forem potências adjacentes de dois, e tais códigos existirem para cada potência de dois.

Por exemplo, um código Gray balanceado de 4 bits possui 16 transições, que podem ser distribuídas uniformemente entre todas as quatro posições (quatro transições por posição), tornando-o uniformemente balanceado.

 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 

Código Gray n-ário

Existem muitos tipos especializados de códigos Gray além do código Gray refletido em binário. Um desses tipos de código Gray é o código Gray n-ário, também conhecido como código Gray n-ário. não booleano Código cinza. Como o nome indica, este tipo de código Gray utiliza valores não booleanos em suas codificações.

Por exemplo, um código Gray ternário 3-ário usaria os valores {0, 1 e 2}. O código (n, k) -Gray é o código Gray n-ário com k dígitos. A sequência de elementos no código (3, 2)-Gray é: {00, 01, 02, 12, 11, 10, 20, 21 e 22}.

O código (n, k)-Gray pode ser construído recursivamente, como o BRGC, ou pode ser construído iterativamente.

Códigos Cinza Monotônicos

Os códigos monotônicos são úteis na teoria de redes de interconexão, especialmente para minimizar a dilatação de matrizes lineares de processadores.

Se definirmos o peso de uma string binária como o número de 1s na string, então, embora claramente não possamos ter um código Gray com peso estritamente crescente, podemos querer aproximar isso fazendo o código passar por dois pesos adjacentes antes de atingir o proximo.

Código Beckett-Gray

Outro tipo de código Gray, o código Beckett-Gray, recebeu o nome do dramaturgo irlandês Samuel Beckett , que estava interessado em simetria . Sua peça quádruplo apresenta quatro atores e está dividido em dezesseis períodos de tempo. Cada período termina com um dos quatro atores entrando ou saindo do palco.

A peça começa com um palco vazio e Beckett queria que cada subconjunto de atores aparecesse no palco exatamente uma vez. Um código Gray binário de 4 bits pode representar o conjunto de atores atualmente no palco.

No entanto,

Beckett colocou uma restrição adicional ao roteiro: ele desejava que os atores entrassem e saíssem para que o ator que estivesse no palco por mais tempo fosse sempre aquele que saísse.

Os atores poderiam então ser representados por uma fila FIFO (primeiro a entrar, primeiro a sair), de modo que o ator que está sendo retirado da fila seja sempre aquele que foi enfileirado primeiro.

Beckett não conseguiu encontrar um código Beckett-Gray para sua peça e, de fato, uma listagem exaustiva de todas as sequências possíveis revela que tal código não existe para n = 4. Sabe-se hoje que tais códigos existem para n = 2, 5 , 6, 7 e 8, e não existem para n = 3 ou 4.

Códigos de cobra na caixa

Códigos Snake-in-the-box, ou cobras, são sequências de nós de caminhos induzidos em um sistema n-dimensional. hipercubo gráfico e códigos coil-in-the-box, ou bobinas, são as sequências de nós de ciclos induzidos em um hipercubo.

Vistas como códigos Gray, essas sequências têm a propriedade de detectar qualquer erro de codificação de um único bit.

Código Gray de trilha única

Outro tipo de código Gray é o código Gray de trilha única (STGC) desenvolvido por Norman B. Spedding e refinado por Hiltgen, Paterson e Brandestini em 'Códigos Gray de faixa única' (1996).

O STGC é uma lista cíclica de P codificações binárias únicas de comprimento n, tais que duas palavras consecutivas diferem exatamente em uma posição. Quando a lista é examinada como uma matriz P × n, cada coluna é um deslocamento cíclico da primeira coluna.

administrador do PowerShell

O nome vem de seu uso com codificadores rotativos, onde muitas trilhas são detectadas por contatos, resultando em cada uma uma saída de 0 ou 1. Para reduzir o ruído devido ao fato de diferentes contatos não alternarem no mesmo momento no tempo, é preferível configurar o rastreia para que a saída de dados dos contatos esteja em código Gray.

Para obter alta precisão angular, são necessários muitos contatos; para atingir pelo menos 1 grau de precisão, são necessárias pelo menos 360 posições distintas por revolução, o que requer um mínimo de 9 bits de dados e o mesmo número de contatos.

Se todos os contatos forem colocados na mesma posição angular, serão necessárias 9 trilhas para obter um BRGC padrão com precisão de pelo menos 1 grau. No entanto, se o fabricante mover um contato para uma posição angular diferente, mas à mesma distância do eixo central, então o 'padrão de anel' correspondente precisa ser girado no mesmo ângulo para fornecer a mesma saída.

Código Gray bidimensional

Códigos Gray bidimensionais são usados ​​na comunicação para minimizar o número de erros de bits em pontos adjacentes de modulação de amplitude em quadratura na constelação.

Em uma codificação padrão, os pontos da constelação adjacentes horizontais e verticais diferem em um único bit e os pontos diagonais adjacentes diferem em 2 bits.