ディジタル信号処理による信号発生とエイリアス(14)

D-Number の応用例として、MIDI to CV コンバータ + VCO をディジタル的に実現する実験として組んだ回路を紹介します。
ソフトウェア部分は、V850 版のFM音源プログラムに処理を追加する形で実現し、ハードウェア部は、「トランジスタ技術」2006 年 4 月号付録基板の Altera製 CPLD である MAXII シリーズの EPM240T100C5 (240 ロジック・エレメント) 上に実現しました。 まだ、Web 上で公開はしていません。
この CPLD 部のブロック・ダイアグラムを下に示します。

マイコン側とは、SPI を使った3線式のインターフェースで結ばれ、2 バイト = 16 ビットを単位として音程データを受け取ります。
16 ビット中の 4 ビットをオクターブのコードとして使用し、11 オクターブ分をサポートしています。
残りの 12 ビット分を D-Number として、プログラマブル・ディバイダの分周数の設定に使っています。
F-Number テーブルの精度は 16 ビットで、その下側 4 ビットを切り捨てているので、周波数設定の分解能には劣りますが、分周で必要な周波数を作り出しているので、スプリアスおよびジッタは、マスタークロックの精度に準じるものとなり、高精度です。
マスタークロック周波数は 64 MHz です。
プログラマブル・ディバイダは、実際にはプリセッタブル・アップカウンタを使用しており、その Q 出力を 2 進数に見立てて、CPLD 内に作成したシグマ・デルタ型 1 ビット DAC で、のこぎり波に変換しています。
シグマ・デルタ DAC 以外の部分は、Altera の 74 シリーズのロジック IC 相当のライブラリを利用して作成してあり、その気になれば、CMOS ロジックの 74HC シリーズおよび 74AC シリーズの IC を利用して回路を製作することも可能です。
まあ、その気になることは、ないと思いますが。
回路の構成としては、まず、オクターブ・コードにしたがって、マスタークロックの 64 MHz を、1/2, 1/4, 1/8, ... と、2 のべき乗で分周して、32 MHz 〜 31.25 kHz のクロックにします。
これは、実際にロジック IC を組み合わせて作る場合には、クロック周波数は低い方が作りやすいからです。(実際には作りませんが)
単に、2 進カウンタの出力をマルチプレクサで選択するような回路だと、各分周出力の位相の同期が取れていないので、低い周波数に切り換えたのにマスタークロック1周期分の細いパルス (ハザード) が出力される場合があります。
それを避けるため、アキュムレータで位相を保持する DDS (Direct Digital Synthesizer) 方式の分周回路としてあります。
オクターブによって周波数が変化するクロックを、プリセッタブル・アップカウンタ (74161) でカウントして、目的の周波数の音を得ます。
オクターブ内の音程を指定する D-Number として 12 ビット分を割り当ててありますから、最小で 0x800 = 2048 分周、最大で 0xFFF = 4095 分周になります。
アップカウンタを使用していますから、カウンタが最大カウントになった次のクロックでカウンタへの値のロードが行われます。
このアップカウンタにロードする値は、必要な分周比の 2 の補数、つまり、全ビットを反転した後に 1 を足す操作をして求める必要があります。 たとえば、

  • 2048 分周:
    (0x800 ^ 0xFFF) + 1 = 0x7FF + 1 = 0x800
  • 4095 分周:
    (0xFFF ^ 0xFFF) + 1 = 0x000 + 1 = 0x001

となります。
この計算は、マイコン側のプログラムで実行し、その結果を CPLD 側に渡しています。
CPLD 側では反転もインクリメントもせず、SPI 経由で渡された値をそのままカウンタにロードしています。
最小の分周比と、最大の分周比の場合、カウンタ出力は、

  • 2048 分周: 0x800 〜 0xFFF
  • 4095 分周: 0x001 〜 0xFFF

になります。
これをそのまま DAC でアナログ値に変換すると、分周比によって振幅と DC レベルが変化する波形になってしまいますが、1 ビットシグマ・デルタ DAC量子化後の値をフィードバックする部分を細工して、DA 変換後のアナログ波形の振幅が変わらないようにしてあります。
全体の写真を下に示します。

左下の基板が MAXII CPLD で、中央の基板が V850 マイコンです。
DAC 出力に付ける LPF は、3 次バタワース特性のパッシブ・LC フィルタを使っていますが、CPLD 基板の下に実装していますので、写真では見えません。