月別アーカイブ: 2022年8月

シフトレジスタによるノイズジェネレータのフィードバックと周期

デジタル回路の簡単なノイズジェネレータとして、シフトレジスタを使ったいわゆる Shift Register Generator Counter が使われます。シフトレジスタの出力を XOR を通して入力にフィードバックすることで、長い周期のカウンタが得られます。カウンタ周期 N が大きいとき、シフトレジスタの出力は (入力周波数 / N) より高い周波数成分をもつホワイトノイズに近づくので、サウンドジェネレータのノイズ音発生器によく使われます。

2入力の XORを使ったフィードバック回路では、SREG 出力が 0x00 のとき入力も 0 になってしまうため、この状態を避ける必要があります。一般的にはリセット後の初期値を適当な値に設定します。

74164 などの SIPO シフトレジスタは、出力 0x00 にするリセット入力しかありません。出力が 0x00 を有効なステートとするためには、上図のように XNOR を使えば OK です。これは、出力 0xFF から XOR によるフィードバックで動作させたときと等価になります。

2入力 XNOR の入力元 bit の接続先を M,N として、得られるカウンタの周期を下表に示します。N bit のシフトレジスタのとりうる状態は 2^N で、全 bit が 1 のときは無効な状態なので、周期 2^N-1 が N bit SREG の最大周期となります。この最大周期となるカウンタを Maximum Length Counter と呼びます。Maximum Length Counter となるフィードバック接続は、表中で太字で示しています。

M
N/M 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
N 0
1 3
2 7 7
3 15 6 15
4 21 31 31 21
5 63 14 9 14 63
6 127 93 127 127 93 127
7 63 30 217 12 217 30 63
8 73 465 21 511 511 21 465 73
9 889 42 1023 62 15 62 1023 42 889
10 1533 2047 1953 1533 595 595 1533 1953 2047 1533
11 3255 126 45 28 819 18 819 28 45 126 3255
12 7905 1785 8001 7161 6141 7665 7665 6141 7161 8001 1785 7905
13 11811 254 5115 186 5461 254 21 254 5461 186 5115 254 11811
14 32767 4599 63 32767 35 93 32767 32767 93 35 32767 63 4599 32767
15 255 126 57337 60 16383 434 63457 24 63457 434 16383 60 57337 126 255