logo_MicroDIYS_url3.png
TOPページへ


YM2151の内部処理を考える
 32個のオペレータの乗算器について

知る人ぞ知る YM2151 4オペレータ8音のFM音源ICですが、
MSX発売当時から、どのような信号処理が内部で行われているのか関心がありました。
ここ数年、いくつかの資料が見受けられるようになり、内部構造について憶測ながら考えを巡らせることができるようになりました。
今の私は、PCM音源一つ作っているだけですが、マイコンによるものとはいえ、大小100回を超えそうな変更をしてきましたので、
とてもとてもFPGAのようは純粋なハードウェアロジックを弄ることは、気がめいるだけで、もはやないと思うのですが、いろいろと考えを巡らすことは、楽しいでしょう。

断片的な話になると思いますが、ここでは、好き勝手な想像をしていくことにします。
私は、メーカーとは関係がありませんので間違いは許してください。

MSXが発表されたのは私が学生だった1982年ころだったと思います。80年代初期はYAMAHAがFM音源を製品化しています。
MSXのオプションFM音源ユニットSFG-01も発表されました。
早速分解しています。EPROM 27128とOPMと記されたチップが目立ちます。
当時は、Z80周辺ICやいくつかのワンチップマイコンなどのアーキテクチャは理解していたので、およそそれぞれのチップの機能はわかってしまいました。
しかし、YM2151(OPM)の内部処理が思い描けなかったのです。それは、こんな理由でした。

BlockDiagram.png
YM2151は(4オペx8音)32個のオペレータの出力を計算する。供給されるクロックは4MHz。
DAC(YM3012)はおよそ30KHz位ではないか?(のちにその倍くらい速いと分かります)
すると1オペレータあたり1μSの時間で処理しなければならない。それは4MHz4クロックしかないのです。

ここで、お話しているオペレータとは、図のOPの部分です。
OPにはサイン波メモリがあり、そのアドレスを読み出す深度に変調をかけてFM波を出力するものです。
PGは変調フェーズに応じたサイン波メモリのアドレスを出力していそうです。
2op.png


話が飛びますが、最も処理時間がかかるのが乗算機能であって、当時のマイコンの乗算命令などはこんなもんでした。
Z80 乗算命令なし
MC6801 8bitx8bit = 16bit 10クロック
TMS9995 16bitx16bit = 32ビット 23〜28クロック

これは、乗算器が加算器とシフトレジスタの繰り返し演算によるものだから、ビット数に相当するクロックが必要だったのです。
ハードウェア乗算器は当時は希少なものだったのです。
あるいは、TRW、AMDのようなメーカーの用途の限定された分野の演算用乗算器があることしか想像できません。
そう、わすれてはいけない。唯一1980年にNECがDSP μPD7720を生産しました。
固定小数演算とはいえ、民生用に16ビット乗算を250nsで行えるものは他になかったのです。

ともかく、つまり、このような時代でしたから、以下のような構成のハードウェア乗算器がYM2151に載るのかという疑問が残りました。
このような構造であると、桁上がり、上段への遅延量は数十ゲートの伝搬時間になります。
これが1μS以内の確定するとなると、20個のフルアダーを通過するとして1個当たり50ns以内に通過できればよいのですが
、まあなんとなるのでしょうか?

multiplier8x8.png

最近になって、OPからのシリアルクロック2MHzに同期して、DAC(YM3012)に16x2(LRステレオ)ビットを出力(62.5KHzになる)しているらしいことも知って、
逆算するとYM2151の1オペレータの処理は、62.5KHz*32オペレータ=2MHz置き(500nS)かもしれないと考えています。
その場合、ハードウェア乗算器のフルアダー1個当たり25ns以内に通過しなければなりません。
あるいは、上記のハードウェア8x8乗算器を半分にして、2回(2クロック)使用すれば、資源を抑えることは出来そうです。

しかし、ヤマハには、当時もデジタル音響製品もありますから、社内でDAC用のFIRフィルタ等の開発もしているので、そのような乗算器の転用も可能だったのでしょうか?
いろいろ手法はあるようなんですね。


ここ最近10年くらいになると

AVRマイコンでも2オペ、4オペレータのFM音源を作成されている方もいます。
ATmega8は2002年に発売され、8ビット乗算を16MHz2クロックを実行できます。
\200くらいのマイコンでこのようなことができるようになりました。

ARMに至っては100MHzのCortex-M4ならば32ビット乗算を1,2クロックで実行します。
このくらいになると、1つ1つの命令の処理よりも全体のデータ処理の分担について考えていくようになってきました。
これら組み込みCPUは、携帯機器やスマホの開発に牽引されて、かつてのDSPやデスクトップCPUに匹敵する能力を持ちつつあるのです。
それも手のひらに収まる電池で動くのです。
ところで、4オペレータのFM音源シンセをヤマハが昨年、発売しましたが、こちらも電池駆動ですし、きっとコンパクトに収まっているのでしょう。
それは、ゲートアレーでもASICでもFPGAでもなく、ありふれたマイコンかもしれません。