FPGA 版 FM 音源 (2) -- クロックの選定

YAMAHA の OPL 系列の FM 音源チップのうち、データシートの pdf が入手可能なものについて、チップに外部から供給するマスタークロック周波数と、サンプリング周波数との関係についてまとめると、下の表のようになります。
ここで、サンプリング周波数や分周比については、推測により求めたもので、実測した数値ではありません。

タイプ名 チップ名 OP 数 クロック
[MHz]
fs
[kHz]
分周比
OPLL YM2313B 18 3.59545 49.7159 144 = 18 *  4
OPLII YM3812 18 3.59545 49.7159 144 = 18 *  4
OPL3 YMF262 36 14.31818 49.7159 288 = 36 *  8
OPL3-SA3 YMF715x 36 33.8688 49.5158 684 = 36 * 19

サンプリング周波数について、正確な数値を示しているデータシートは少なく、たとえば、YM3812 (OPLII) のデータシートには、マスタークロック 3.58 MHz でサンプリング周波数 50 kHz と記載されています。
また、YMF262 (OPL3) のデータシートでは、マスタークロック 14.32 MHz でサンプリング周波数 49.7 kHz となっています。
唯一、桁数の多い記載があるのが
"YMF715x (OPL3-SA3) - Register Description Document-"
で、33.8688 MHz クロックに対し、F-NUMBER の計算式中で 49.518 kHz と記されています。
しかし、おそらくこれはミスプリントで、上の表のように

  • 33.8688 [MHz] / 684 = 49.515789... [kHz]

となるのが正しいと思われます。
これらの数値は、マスタークロックからサンプリング周波数を得るための分周比は、回路を簡単にするためにも、全オペレータ数 (スロット数) の倍数になっているはずだという推定から導き出したものです。
OPL の「正統」な系列である、上の表の上3つのチップでは、

  • NTSC のカラー・サブキャリア周波数 fsc = 3.579545... [MHz]
  • あるいは、その 4 倍の 4 fsc = 14.31818... [MHz]

をマスタークロックとし、1 スロットあたり 4 または 8 クロックで、オペレータひとつ分の計算をしていることになります。
YMF715x (OPL3-SA3) では、PC の PCM コーデックも集積しているために、

  • fs = 48 kHz の 512 倍の 24.576 MHz
  • fs = 44.1 kHz の 768 倍の 33.8688 MHz

のクロックを入力するようになっていて、カラー・サブキャリア周波数は使用していません。
49.7 kHz 程度のサンプリング周波数を得るための分周比を計算してみると、24.576 MHz からではスロット数 36 の倍数では良好な数値が得られませんが、33.8688 MHz からは、スロット数 36 の倍数 684 = 19 x 36 で分周すると、

  • 33.8688 MHz / 684 = 49.5158 kHz

が得られ、「正統」的な fs = 49.7159 kHz から -0.4 % (-7 セント) 程度の誤差になります。 (1 オクターブ = 1200 セント、半音 = 100 セント)
上の表には載せていませんが、YMF289 (OPL3-L) では、内部に線形補間によるサンプルレート・コンバータを持ち、fs = 44.1 kHz のレートで外部 DAC へデータが出力されます。
マスタークロックは 44.1 [kHz] x 768 = 33.8688 [MHz] の1種類だけが入力されており、内部で PLL により他の周波数を作り出している様子もないので、当然、FM オペレータはマスタークロック 33.8688 MHz から作り出したタイミングで動作しているものと思われます。
したがって、YMF289 は YMF715x と同様の分周比となっているはずです。
FPGA により FM 音源を実現する場合は、マスタークロックの分周比をスロット数の倍数にすることにこだわる必要はありません。
サンプリング周波数を作り出すカウンタと、スロット関連のタイミングを作り出すカウンタとを分け、スロット・タイミングのカウンタは「フリーラン」させておいて、サンプリング周期で 1 周するカウンタで「リセット」をかけて同期を取れば十分です。
もちろん、カウンタを 2 重化するのでハードウェア量は増えることになりますが、気にするほどのものではありません。
ただし、ディジタル・オーディオ用シリアル入力ステレオ DAC を外付けして利用する場合、デューティー 50 % の LRCK を発生させる必要がありますから、分周比は「偶数」でなければなりません。
シグマ・デルタ DAC などを内蔵して利用する場合には分周比は奇数でもかまいません。
よく使われる各種の周波数について計算した表を下に示します。

クロック
[MHz]
分周比 fs
[kHz]
誤差
[cent]
12.000 241 = 36 * 6.69 49.7925 +2.67
14.31818 288 = 36 * 8 49.7159   0
16.000 322 = 36 * 8.94 49.6894 -0.92
18.432 371 = 36 * 10.31 49.6819 -1.18
19.6608 395 = 36 * 10.97 49.7742 +2.03
20.000 402 = 36 * 11.17 49.7512 +1.23
24.576 494 = 36 * 13.72 49.7490 +1.15
27.000 543 = 36 * 15.08 49.7238 +0.27
27.000 540 = 36 * 15 50.0000 +9.86
32.000 644 = 36 * 17.89 49.6894 -0.92
33.000 664 = 36 * 18.44 49.6988 -0.60
33.3333 670 = 36 * 18.61 49.7512 +1.23
48.000 966 = 36 * 26.83 49.6894 -0.92

この中で、手持ちがあり、秋月では単価 100 円で販売されている、48 MHz の 5 V 仕様のクリスタル・オシレータを使うことにしました。
電源電圧 5 V 仕様のクリスタル・オシレータを 3.3 V で動作させたとき、精度や安定度、温度特性などを別にして、単に動く/動かないというレベルで見た場合、3.3 V で動かなかった経験はありません。
クロック 48 MHz では、1 スロットあたり 26 クロックが確保できますから、1 オペレータ分の計算をこのクロック・カウント内に実行できればよいことになります。