TK80/BSの
シンセシステムを復活/拡張したい〜
その39
FPAGシンセの8チャンネル化
2019年
5月25日
8チャンネルで基本動作しているので、DCOとLFOを1チャンネルあたり、2個実装してみます。VivadoのソースウインドでDCOとLFOが2個つづ表示されていることを確認します。
1チャネルあたりDCOが2個になったので、パラメータ設定器の初期値を変更します。DCF前段のミキサーでDCO2をミックスします。また、FPGA内に同じ初期設定の発振器を組み込んでも、同期しているので同じ動作になってしまい、ミックスしても振幅が大きくなるだけです。DCOの1と2はデチューンして厚みを出します。LFOの1と
2は異なる周波数に設定し、DCO1をLFO1でDCO2をLFO2で周波数変調すれば、より厚みが出ます。
未実装の機能の内、DCOをEGで周波数変調する機能を組み込んだ所、スライスが足らないというエラーが出ました。この機能はあまり使わないので、後回しにします。
5月26日
FPGAシンセをケースに組み込む準備です。ACケーブルを追加し、電源スイッチを介してトランスに接続します。オペアンプ用の+5と−5Vの3端子電源、FPGAとパラメータ設定器用の非安定の6.8Vが出力されていることを確認しました。
TK80は1月の末に液晶モニタを接続した時から電源を入れていなかったので、簡易ICEを使ってRAMの全面検査を行いました。エラーはありませんでした。SDのフロッピエミュレータも動作良好です。
上記のDCOのEG変調以外にも組み込みたい機能があるので、ロジック使用量を減らします。DCFとDCAのIPの引数と戻り値を32ビットから24ビットに変更し、また、合成とインプリのストラテジをエリア縮小に設定します。Vivadoの設定ウインドで以下のようにしました。
未実装の機能はデルタシグマADCからDCF前段ミキサーへの外部入力、XADCのアナログ入力でのDCAのベロシティ制御です。これらを実装して合成、インプリして使用量を確認します。スライスが96.5%になっています。かなりぎりぎりです。インプリしたところで、夜遅くなってしまい、動作確認は次回に持ち越しです。
デバイス図です。下に少し空きが見えます。
5月29日
上記でロジック使用量がLUTは80%、スライスは96.5%になりました。LUTスライスについて調べておきます。”7シリーズFPGAが備える基本ロジック”というPDF資料内に以下のLUTスライスの図があります。6入力LUTとFFが2個とセレクタが4つセットになったものがLUTスライスです。スライスの4倍がLUT数です。F7Muxesはスライスの2倍です。上記のエラーメッセージで”残りのスライスは8177あるけど、8315必要〜”となっていて、LUTはスライス単位で使われるようです。スライス内のFFの使用量が少ないのは、組み合わせ回路が多いということです。
アパートでロジックを見直しました。代入漏れの信号があり、修正しました。合成、インプリすると、使用量が増えてスライスが99.2%になってしまい、本当にぎりぎりみたいです。デバッグ用のSPI−DACのロジックは削除できますが、簡単なロジックなので、大幅には減りそうにありません。
デバイス図です。空きは下のほんの少しです。週末に動作確認をして、他のストラテジも試してみます。
6月1日
デルタシグマADCを使って外部アナログ入力の動作確認を行います。アナログ入力はDCF前段ミキサーに接続します。色々と調整して動作良好になりました。
この時点でスライスの使用量は99.68%です。
デバイス図です。
6月2日
次はXADCアナログ入力でDCAのベロシティ制御です。以前に2chシンセで使用していたボリュームをXADCに接続します。正常にボリューム値をアナログ値に変換できていないようです。
デバッグロジックを組み込んで、SPI−DACに波形を出力してアナログディスカバリで確認します。上から、XADCの出力データ、チャンネルカウンタ、変換終了信号から作成したラッチパルスです。出力データはA0とA1に接続したボリューム値がに出て正常です。チャンネルカウンタも0〜9でカウントして正常、ラッチパルスが5個しかないように見えます。下図の赤ラインのA0とA1のボリューム値がラッチされて、デバッグポートに出力されないといけません。2chのFPGAシンセと同じロジックなのに不思議です。ガレージのPCでは合成、ビルドに30分ほどかかり、回数を多く試せません。夜遅くなってしまったので、次回に持ち越しです。下図はアナログディスカバリの波形キャプチャを合成した擬似3chです。
6月2日
会社のWin10のPCにVivadoの2019.1をインストールして8chのFPGAシンセを合成、インプリしてみました。以前と同じエリア縮小するストラテジに設定したところ、スライスの使用量は98.83%に減りました。
2019.1ではLUTとDSPが別ウインドになりました。DSPの使用量は230個の内160個で以前と同じです。
デバイス図は下側に少し空きが出ました。アパートとガレージのPCにも2019.1をインストールする予定です。
6月8日
FPGAシンセをケースに組み込む準備の続きです。デルタシグマのDAC/ADC用のオペアンプ用電源+−5Vの配線を追加します。
ア
パートでVivadoの2019.1をインストールしたノートPCをガレージに持って来たので、IPも含め再度、合成、インプリしました。新しいVivodoではXADCのベロシティ制御も正常になりました。ロジックを追加してLFO1/2の出力とEGゲートをFPGAの外部に出力して、パネル面のLEDを点灯させます。チャンネルあたりLEDを3つにします。左は追加の穴開け加工が終わったところ、右は3mmのLEDをエポキシ接着剤で固定して16個追加したところです。
LFO1/2、EGゲートはFPGAボード上の使用しないLEDとスイッチに割り当てます。LFOの出力をLEDに出力して確認します。RGBの3色LEDは元々PMW制御用で、連続点灯すると輝度が高く、クラフトテープを貼っても結構漏れてきます。正常動作しています。
LED配線用コネクタをPMODコネクタの上に増設します。必要な信号はLFO1/2が16本、EGゲートが8本です。
6月9日
ボード上のLEDやスイッチに直列に入っている抵抗を取り外し、抵抗のパッドからポリウレタン線で増設したコネクタに配線します。
RGBの3色LEDはボード上にトランジスタが入っています。その他のLEDやスイッチはデジトラを追加してLEDを点灯させます。手持ちのデジトラのRN1210を使いました。パネルの裏にデジトラと制限抵抗を12個追加します。
ボード上のトランジスタと外付けしたRN1210で同じ輝度になるか確認しておきます。問題無いです。
FPGAボードをケースに入れて、デルタシグマDACのフィルタ基板を取り付けます。8チャンネルの出力は抵抗でミックスし、音出し確認しました。正常動作しています。次回、デルタシグマDAC/ADC基板とLED配線を追加予定です。
現在実装している機能一覧です。緑文字はEGのから、DCAのスイッチ2へ移動したXADCの外部アナログ入力ベロシティ制御、緑文字はロジック容量が足らなく、現状実装できていないDCOのEGの周波数変調です。
[DCO1/2]
P1:Tune
P2:EG Mod
P3:LFO Mod
P4:Pw Offset
P5:Pw LFO Mod
P6:Pw EG Mod
P7:SW
1:Mod LFO1/LFO2
2:Pw LFO1/LFO2
3:EG Mod Nom/Inv
[MIX]
P1:Saw Lev
P2:DCO1 Pw Lev
P3:DCO1 Pw*2 Lev
P4:DCO1 Pw/2 Lev
P5:DCO2 Lev
P6:Ext Lev
P7:SW
1:DCO1 Pw 50/25%
2:DCO2 Saw/Pw
3:-
[DCF]
P1:Cutoff
P2:EG Mod
P3:LFO Mod
P4:Resonanse
P5:-
P6:-
P7:SW:
1:Mod LFO1/LFO2
2:-
3:-
[DCA]
P1:Hold
P2:EG Mod
P3:LFO Mod
P4:-
P5:-
P6:-
P7:SW
1:Mod LFO1/LFO2
2:Velo On/Off <−EGから移動
3:-
[EG]
P1:Att Time
P2:Dec Time
P3:Sus Level
P4:Rel Time
P5:Velo Lev <−廃止
P6:-
P7:SW
1:Manul Gate
2:LFO1 Gate
3:LFO2 Gate
[LFO1/2]
P1:Freq
P2:Pw
P3:Dly Att Time
P4:Dly Rel Time
P5:-
P6:-
P7:SW
1:Wave Tri/Pw
2:Mode Nom/Sync
3:Manual Gate
LED出力を追加した現状のロジック使用量です。前回より少し増えて、99.89%です。
DSPの使用量は同じ160個です。
6月10日
LUTの使用量を減らすために、DDSのロジックからDSPを使用しない指示を外します。
スライスの使用量が92.6%に減りました。
LUTの代わりにDSPが使われ、1チャンネルあたり4個増えて160個から192個になりました。
スライスが減ったところで、容量不足で実装できなかった、DCO1をEGで周波数変調するロジックを追加してみます。95.1%に増えました。これなら、DCO2も適用できそうです。会社の休み時間/アパートでの作業なので、動作確認は次回ガレージで行います。
6月18日
この週末は土日とも出勤だったため、ガレージでの作業はありません。スライスの使用量をさらに減らすために、HLSで作成したDCFでDSPを使わない指示を外します。
DCFのIPを入れ替え、DCO2にもEGで周波数変調するロジックを追加しました。スライスの使用量は97.26%になりました。
DCFのDSP使用量が1チャンネルあたり、4個増えて192個から、240個中224個になりました。
デバイス図ですが、下側に少し隙間があります。因みに、コンパイル時間は合成に約10分、インプリに約21分かかっています。一応、予定していた機能は全て入りましたがアパートでは動作確認ができないため、次回ガレージで行います。
6月22日
マルツで5個、アマゾンで1個、合計で6個揃えた25パルスのロータリエンコーダが来ました。FPGAシンセ本体が落ち着いたら、パラメータ設定器のエンコーダを25パルスに交換する予定です。50パルスはボタンを押すと、クリックが軽いので1パルス出てしまうことがあり、操作性がいまいちです。
6月23日
FPGAボードとパネル間のLEDの配線を追加しました。FPGAシンセのDCFはDSPを使う設定にしたところ不調になったので、とりあえず、元に戻しました。DCO1のみEGで周波数変調できるようにして、スライスが95.09%、DSPが192個です。
デルタシグマDAC/ADCのサブボードとパネル間の配線も追加しました。ベロシティ入力の配線が残っていますが、XADCのA0〜5と6、7で回路の抵抗値が違うため、FPGAボードの抵抗を変更する必要があり、次回行います。