雑誌付録で作る音源チップ[Chimera]

Attention: Sorry,this text is Japanese Only.  
更新:2005.05.14


最後のネタか?  FM音源?+ファミコン音源?+PCM?+アナログ?のへんなやつ

DesignWave誌2005年1月号の付録のFPGAで音源チップを作ってみました。
内蔵メモリと積算器付きの贅沢な付録、回路規模は余裕かと思いきや、そうでもないもんですね。
ただ単に無駄な部分が多いだけかもしれませんが、素人工作なんでご容赦ください。

1.音源チップChimera

思いつく機能を詰め込めるだけ詰め込みました。本当はMIDI制御部やVCFも入れたいけど回路規模的に無理なので、MIDI制御部は手持ちの H8Tinyボードで、VCFは外部回路で補います。
MIDI制御は、モノフォニックなら回路でやるのも簡単そうですが、ポリフォニックになると格段に規模が大きくなるはずです。
FPGA内にCPUコアを組み込む手もありますが、現状H8Tinyで1VCOポリフォニックドライバを実装するのにROM5.6K,RAM1K(スタッ ク除 く)を使用しているため、FPGA内部だけではメモリが全然足りません。

各機能の組み合わせ、ルーティングは自由度が高く、レジスタで設定できるようにしているため、特定の音源方式固定でなくH8側のMIDIドライバープログ ラムしだいで、2OP FMにも4OP FMにも、アナログシンセっぽくも出来ます。ただしその分ドライバープログラムが複雑になります。
ちなみに名前は色々な音源方式の寄せあつめなのでキメラ[Chimera]と決めました。

1.1 基本機能

1.2 構成図

構成図
レジスタ以外のブロックは1スロット分の回路しかありません。25MHz16クロックで1スロット分の処理を行い、時分割でサンプリングレート 48.8KHzの周期間に32スロット分の処理を0番スロットから順に行いMOD_MIX内で加算ミキシングしています。そのため各レジスタや内部状態を 保存するRAMは32 スロット分の情報を保持しています。
位相や波形、エンベロープのバス幅は18bitで、波形とエンベロープはS1.16の符号付固定小数点で処理しています。

1.3 ソースコード

VHDLソース:SPARTAN3のプリミティブを積極的に使用してま す。

1.4 MOD_MIXの構造

Mod_Mix構造図
このモジュールのルーティングにより、リングモジュレーションやFM、LFOを実現します。
ラッチ0からラッチ1への転送は、入力が確定するサイクルの後になります。それまではラッチ0に前のスロットのデータが入っていることになるため、ゲート が開いていれば、前のスロットの値がカレントのスロットの位相速度に加算されます。
またこのモジュールの最終段のミキシングラッチは、サンプリングレート毎にクリアされ、各スロットの総和を計算することで各スロットのミキシングの動作を しています。

各アルゴリズムの実現方法
複数の連続するスロットをドライバーソフトでうまく組み合わせれば、リングモジュレーション付きFMやトレモロ付きの4OP FM等も構成可能となります。

1.5 制御レジスタ

制御レジスタへは、アドレス8bit、データ16bitの順で2線式クロック同期シリアルにて書き込みます。
発音スロットのパラメータレジスタは00h-9Fhまでで、00h-7Fhまでは2h毎に、制御レジスタの80h-9Fhは1h毎に1発音スロットのレジ スタが割り当ててあります。

レジスタマップ
アドレス(HEX)
奇数アドレス
偶数アドレス
上位8bit
下位8bit
上位8bit
下位8bit
FF


C0
WaveTable
B0



WaveTableBank
A0
フィルタ周波数1
フィルタ周波数0

80
制御レジスタ

60
音量レベル
発音周波数

40

20
アタックレート
ディケイレート
サスティンレベル
リリースレート

00
 

2.ボード

通常アナログシンセは、発音毎にVCAの前にVCFをかけるようですが、リソース不足でFPGA内にデジタルフィルタが実装できない都合上、DACの後段 にアナログ回路でVCFをいれました。なの で、全発音がミックスされたものにVCFをかけるので、VCFというよりはエフェクタの一つと思ってください。

2.1 回路図

準備中

2.2 フィルタ

MF10はスイッチトキャパシタ型の2次フィルターが2つ入ったICです。スイッチトキャパシタ型フィルタは、入力するクロック周波数でカットオフ周波数 (fc)が制御できるので、FPGAやマイコンなどのデジタル回路で制御するのに便利です。
フィルター部はこのICを用いて、AL=1.0,QL=1.0のLPF(フィルタ0)出力をAH=0.99,QH=1.0 のHPF(フィルタ1)で帰還させる回路を構成しています。
理論上トータルゲインはA=AL/(1-ALAH)となりfcLと fcHが近いときに、フィードバックゲインが支配的になりレゾナンスのよう な効果が得られるはずです。
検証しました。結論、レゾナンスは無理っぽい。フィードバックさせるとAHを下げても、位相補償コンデンサをいれても発振が止まり ませんでした。またMF10を実装したとたんクロックのノイズ混入し、ノイズが酷くなりました。
結局、フィードバックはあきらめ2次ローパスのみで使用することにしました。

3.ドライバー

H8/3664のMIDIドライバープログラムです。開発環境はCygwinのGccです。

3.1 シンプル 1VCO型

32音同時発音、ポリフォニック マルチティンバ:ソースコード
 演奏サンプル:Chimera 1VCO FC風:Ave Maria by Schubert[458K mp3]

3.2 2VCO型

16音同時発音、ポリフォニック マルチティンバ:ソースコード
 発音サンプル:FM2OP 縦続接続
 発音サンプル:FM2OP 並列接続
 発音サンプル:リングモジュレーション
 発音サンプル:1VCO+トレモロ


This page's Copyright (c) 2005 Sam
sam_kb@yahoo.co.jp