FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

DIGITAL ELECTRONICS NOTESをやってみる (3. グレイコード)

以下のデジタル回路の問題をやってみる。続き。

lancamentomerlo.my.canva.site

やり方としては、まずMSBの1を保持し、上位ビットから順番に次のビットとのXORを取っていく。

4 3 2 1 0  // bit-position
1 1 0 0 1  // オリジナルグレイコード
1 0 0 0 1  // bit[4]^bit[3] = 0 
1 0 0 0 1  // bit[3]^bit[2] = 0
1 0 0 0 1  // bit[2]^bit[1] = 0
1 0 0 0 1  // bit[1]^bit[1] = 1

というように変換する。これが成立する理由としては、グレイコード自体が、ビットの変化がたかだか1ビットしか変更しないというルールを適用する必要があるためだ。

逆に、2進数からグレイコードに変換するときは、

ja.wikipedia.org

通常の二進表現をグレイコードに変換するには、「対象の二進表現」と、「それを1ビット右シフトし、先頭に0をつけたもの」との排他的論理和をとる。

これは、隣のビットとの変化を見つけていることに相当する。うまく理論的に説明できないが、これでうまく動作するのはなんとなく感覚で分かる。

2進数
0 0 0 0 0 : 00000 ^ 00000 = 00000
0 0 0 0 1 : 00001 ^ 00000 = 00001
0 0 0 1 0 : 00010 ^ 00001 = 00011
0 0 0 1 1 : 00011 ^ 00001 = 00010
0 0 1 0 0 : 00100 ^ 00010 = 00110
0 0 1 0 1 : 00101 ^ 00010 = 00111