El código Gray es una especie de sistema numérico binario en el que sólo cambiará un bit a la vez. Hoy en día el código gris se utiliza mucho en el mundo digital. Será útil para la corrección de errores y la transmisión de señales. El contador Gray también es útil en el diseño y verificación en el dominio VLSI.
Un Código Gray codifica números enteros como secuencias de bits con la propiedad de que las representaciones de números enteros adyacentes difieren exactamente en una posición binaria.
Existen diferentes tipos de códigos grises, como el código gris equilibrado, binario reflejado, espacio máximo y antípoda.
Los contadores tienen la función principal de producir una secuencia de salida específica y, a veces, se les denomina generadores de patrones.
Diseño
En un código gris, sólo cambia un bit a la vez. Este código de diseño tiene dos entradas, señales de reloj y reinicio y una salida de 4 bits que generará código gris.
Primero, si el primero la señal es alta, entonces la salida será cero, y tan pronto como primero baja, en el borde ascendente de clk , el diseño generará un código gris de cuatro bits y continuará generándose en cada flanco ascendente de clk señal.
Este código de diseño se puede actualizar y poner números binarios como entrada, y este diseño funcionará como un conversor de código binario a gris.
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></=>
Código gris equilibrado
En códigos Gray equilibrados, el número de cambios en diferentes posiciones de coordenadas es lo más cercano posible.
Un código Gray es uniforme o uniformemente equilibrado si sus recuentos de transición son todos iguales.
Los códigos grises también pueden ser exponencialmente equilibrado si todos sus recuentos de transición son potencias de dos adyacentes, y dichos códigos existen para cada potencia de dos.
Por ejemplo, un código Gray equilibrado de 4 bits tiene 16 transiciones, que se pueden distribuir uniformemente entre las cuatro posiciones (cuatro transiciones por posición), lo que lo hace uniformemente equilibrado.
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-ario
Existen muchos tipos especializados de códigos Gray además del código Gray reflejado binario. Uno de esos tipos de código Gray es el código Gray n-ario, también conocido como código Gray. no booleano Código gris. Como su nombre lo indica, este tipo de código Gray utiliza valores no booleanos en sus codificaciones.
Por ejemplo, un código Gray ternario triario usaría los valores {0, 1 y 2}. El código (n, k)-Gray es el código Gray n-ario con k dígitos. La secuencia de elementos en el código (3, 2)-Gray es: {00, 01, 02, 12, 11, 10, 20, 21 y 22}.
El código (n, k)-Gray puede construirse de forma recursiva, como BRGC, o puede construirse de forma iterativa.
Códigos grises monótonos
Los códigos monótonos son útiles en la teoría de redes de interconexión, especialmente para minimizar la dilatación de conjuntos lineales de procesadores.
Si definimos el peso de una cadena binaria como el número de unos en la cadena, entonces, aunque claramente no podemos tener un código Gray con un peso estrictamente creciente, es posible que queramos aproximarnos a esto haciendo que el código se ejecute a través de dos pesos adyacentes antes de alcanzar el siguiente.
Código Beckett-Gray
Otro tipo de código Gray, el código Beckett-Gray, lleva el nombre del dramaturgo irlandés. Samuel Beckett , que estaba interesado en simetría . su juego Patio cuenta con cuatro actores y se divide en dieciséis periodos de tiempo. Cada período termina con uno de los cuatro actores entrando o saliendo del escenario.
La obra comienza con un escenario vacío y Beckett quería que cada subconjunto de actores apareciera en el escenario exactamente una vez. Un código Gray binario de 4 bits puede representar el conjunto de actores que se encuentran actualmente en el escenario.
Sin embargo,
Beckett impuso una restricción adicional al guión: deseaba que los actores entraran y salieran para que el actor que hubiera estado más tiempo en el escenario fuera siempre el que saliera.
Luego, los actores podrían representarse mediante una cola de primero en entrar, primero en salir (FIFO), de modo que el actor que se retira de la cola sea siempre el que se puso en cola primero.
Beckett no pudo encontrar un código Beckett-Gray para su obra y, de hecho, una lista exhaustiva de todas las secuencias posibles revela que no existe tal código para n = 4. Hoy se sabe que tales códigos sí existen para n = 2, 5 , 6, 7 y 8, y no existen para n = 3 o 4.
Códigos de serpiente en la caja
Los códigos de serpiente en la caja, o serpientes, son secuencias de nodos de caminos inducidos en una dimensión n. hipercubo El gráfico y los códigos de bobina en la caja, o bobinas, son las secuencias de nodos de ciclos inducidos en un hipercubo.
Consideradas como códigos Gray, estas secuencias tienen la propiedad de detectar cualquier error de codificación de un solo bit.
Código Gray de pista única
Otro tipo de código Gray es el código Gray de pista única (STGC) desarrollado por Norman B. Spedding y refinado por Hiltgen, Paterson y Brandestini en 'Códigos Gray de vía única' (1996).
El STGC es una lista cíclica de P codificaciones binarias únicas de longitud n tales que dos palabras consecutivas difieren exactamente en una posición. Cuando la lista se examina como una matriz P × n, cada columna es un desplazamiento cíclico de la primera columna.
llamar a la función js desde html
El nombre proviene de su uso con codificadores rotatorios, donde muchas pistas son detectadas por contactos, lo que da como resultado cada una una salida de 0 o 1. Para reducir el ruido debido a que diferentes contactos no cambian en el mismo momento en el tiempo, es preferible configurar el rastrea para que la salida de datos de los contactos esté en código Gray.
Para obtener una alta precisión angular, se necesitan muchos contactos; Para lograr al menos una precisión de 1 grado, se necesitan al menos 360 posiciones distintas por revolución, lo que requiere un mínimo de 9 bits de datos y la misma cantidad de contactos.
Si todos los contactos se colocan en la misma posición angular, entonces se necesitan 9 pistas para obtener un BRGC estándar con una precisión de al menos 1 grado. Sin embargo, si el fabricante mueve un contacto a una posición angular diferente pero a la misma distancia del eje central, entonces el 'patrón de anillo' correspondiente debe girarse en el mismo ángulo para obtener el mismo resultado.
Código Gray bidimensional
Los códigos Gray bidimensionales se utilizan en la comunicación para minimizar el número de errores de bits en puntos adyacentes de modulación de amplitud en cuadratura de la constelación.
En una codificación estándar, los puntos de la constelación adyacentes horizontales y verticales difieren en un solo bit, y los puntos diagonales adyacentes difieren en 2 bits.
=>=>