グレイ コードは、一度に 1 ビットだけが変化する一種の 2 進数システムです。現在、グレーコードはデジタル世界で広く使用されています。エラー訂正や信号伝送に役立ちます。グレイ カウンタは、VLSI ドメインの設計と検証にも役立ちます。
グレイ コードは、隣接する整数の表現がちょうど 1 つのバイナリ位置で異なるという特性を備えたビットのシーケンスとして整数をエンコードします。
グレイ コードには、バランス グレイ コード、バイナリ反射グレイ コード、最大ギャップ グレイ コード、対蹠グレイ コードなど、さまざまな種類があります。
カウンタには、指定された出力シーケンスを生成するという主な機能があり、パターン ジェネレータと呼ばれることもあります。
デザイン
グレイコードでは、一度に 1 ビットだけが変化します。このデザイン コードには、クロック信号とリセット信号の 2 つの入力と、グレイ コードを生成する 1 つの 4 ビット出力があります。
まず、 最初の 信号が High の場合、出力はゼロになります。 最初の の立ち上がりエッジで低くなります カチカチ の場合、デザインは 4 ビットのグレイ コードを生成し、すべての立ち上がりエッジで生成し続けます。 カチカチ 信号。
この設計コードをアップグレードして、入力として 2 進数を入力することができ、この設計はバイナリからグレイ コードへのコンバーターとして機能します。
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></=>
バランスの取れたグレイコード
バランスの取れたグレイ コードでは、さまざまな座標位置の変化の数が可能な限り近くなります。
グレイコードとは、 ユニフォーム または 均一に 遷移数がすべて等しい場合はバランスが取れています。
グレイコードも可能です 指数関数的に すべての遷移カウントが隣接する 2 の累乗であり、そのようなコードが 2 の累乗ごとに存在する場合、バランスが取れています。
たとえば、バランスの取れた 4 ビット グレイ コードには 16 個の遷移があり、4 つの位置すべてに均等に分散され (位置ごとに 4 つの遷移)、均一なバランスが保たれます。
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進グレイコード
グレイ コードには、バイナリ反射グレイ コード以外にも多くの特殊なタイプがあります。このようなタイプのグレイ コードの 1 つは n 進グレイ コードであり、別名グレイ コードとも呼ばれます。 非ブール値 グレーコード。名前が示すように、このタイプのグレイ コードはエンコーディングで非ブール値を使用します。
たとえば、3 値の 3 値グレイ コードでは、値 {0、1、および 2} が使用されます。 (n, k)-グレイ コードは、k 桁の n 進グレイ コードです。 (3, 2)-Gray コードの要素のシーケンスは、{00、01、02、12、11、10、20、21、および 22} です。
(n, k)-Gray コードは、BRGC のように再帰的に構築することも、反復的に構築することもできます。
単調グレーコード
単調コードは、相互接続ネットワーク理論、特にプロセッサの線形アレイの膨張を最小限に抑えるのに役立ちます。
バイナリ文字列の重みを文字列内の 1 の数として定義する場合、重みを厳密に増加させるグレイ コードを使用することはできないことは明らかですが、コードに到達する前に 2 つの隣接する重みを実行させることで、これを近似することができます。次のもの。
ベケット・グレイ・コード
グレイ コードの別のタイプであるベケット グレイ コードは、アイルランドの劇作家にちなんで名付けられました。 サミュエル・ベケット に興味を持った人 対称 。彼の劇 クワッド 4 人の俳優が出演し、16 の期間に分かれています。各ピリオドは、4 人の俳優のうちの 1 人が舞台に出入りすることで終了します。
劇は空の舞台から始まり、ベケットは俳優の各サブセットが一度だけ舞台に登場することを望んでいました。 4 ビットのバイナリ グレイ コードは、現在ステージ上の俳優のセットを表すことができます。
しかし、
ベケットは脚本に追加の制限を設けました。彼は、俳優が出入りできるようにして、最も長く舞台上にいた俳優が常に退場するようにしたいと考えました。
その後、アクターを先入れ先出し (FIFO) キューで表すことができるため、デキューされるアクターが常に最初にキューに入れられたアクターになります。
ベケットは自分の劇のベケット・グレイ符号を見つけることができませんでした。実際、考えられるすべてのシーケンスを網羅的にリストした結果、n = 4 にはそのような符号が存在しないことが明らかになりました。今日では、n = 2、5 にはそのような符号が存在することが知られています。 、6、7、8 であり、n = 3 または 4 の場合は存在しません。
スネークインザボックスコード
スネーク・イン・ザ・ボックス・コード、またはスネークは、n 次元で誘導されたパスのノードのシーケンスです。 ハイパーキューブ グラフ、およびコイルインザボックス コード (コイル) は、ハイパーキューブ内の誘導サイクルのノードのシーケンスです。
グレイ コードとして表示されるこれらのシーケンスには、単一ビットのコーディング エラーを検出する特性があります。
シングルトラックグレイコード
もう 1 つの種類のグレイ コードは、によって開発されたシングルトラック グレイ コード (STGC) です。 ノーマン・B・スペディング そして洗練された パターソン・ヒルトゲン そして ブランデスティニ 「シングルトラックグレイコード」(1996)。
STGC は、2 つの連続するワードがちょうど 1 つの位置で異なる、長さ n の P 個の一意のバイナリ エンコーディングの循環リストです。リストを P × n 行列として調べると、各列は最初の列の巡回シフトになります。
int から文字列への変換
この名前は、多くのトラックが接点によって感知され、それぞれの出力が 0 または 1 になるロータリー エンコーダでの使用に由来しています。異なる接点が同じ瞬間に切り替わらないことによるノイズを低減するには、好ましくは、接点のデータ出力がグレイコードになるように追跡します。
高い角度精度を得るには、多くの接触が必要です。少なくとも 1 度の精度を達成するには、1 回転あたり少なくとも 360 の異なる位置が必要で、これには最低 9 ビットのデータと同じ数の接点が必要です。
すべてのコンタクトが同じ角度位置に配置されている場合、少なくとも 1 度の精度で標準 BRGC を取得するには 9 つのトラックが必要です。ただし、メーカーが中心軸から同じ距離にある異なる角度位置にコンタクトを移動した場合、同じ出力を得るには、対応する「リング パターン」を同じ角度で回転する必要があります。
二次元グレイコード
2 次元グレイ コードは、コンスタレーション内の隣接点にある直交振幅変調におけるビット エラーの数を最小限に抑えるために通信に使用されます。
標準的なエンコーディングでは、水平および垂直に隣接するコンスタレーション ポイントは 1 ビット異なり、隣接する対角点は 2 ビット異なります。
=>=>