TK80/BSの

シンセシステムを復活/拡張したい〜

その39

FPAGシンセの8チャンネル化
2019年
5月25日
8チャンネルで基本動作しているので、DCOLFOを1チャンネルあたり、2個実装してみます。VivadoのソースウインドでDCOとLFOが2個つづ表示されていることを確認します。


1チャネルあたりDCOが2個になったので、パラメータ設定器の初期値を変更します。DCF前段のミキサーでDCO2をミックスします。また、FPGA内に同じ初期設定の発振器を組み込んでも、同期しているので同じ動作になってしまい、ミックスしても振幅が大きくなるだけです。DCOの1と2はデチューンして厚みを出します。LFOの1と 2は異なる周波数に設定し、DCO1をLFO1でDCO2をLFO2で周波数変調すれば、より厚みが出ます。


未実装の機能の内、DCOEGで周波数変調する機能を組み込んだ所、スライスが足らないというエラーが出ました。この機能はあまり使わないので、後回しにします。


5月26日
FPGAシンセをケースに組み込む準備です。ACケーブルを追加し、電源スイッチを介してトランスに接続します。オペアンプ用の+5と−5Vの3端子電源、FPGAとパラメータ設定器用の非安定の6.8Vが出力されていることを確認しました。


TK80は1月の末に液晶モニタを接続した時から電源を入れていなかったので、簡易ICEを使ってRAMの全面検査を行いました。エラーはありませんでした。SDのフロッピエミュレータも動作良好です。


上記のDCOのEG変調以外にも組み込みたい機能があるので、ロジック使用量減らします。DCFDCAの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ではLUTDSP別ウインドになりました。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/2EGゲートは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個になりました。


スライスが減ったところで、容量不足で実装できなかった、DCO1EG周波数変調するロジックを追加してみます。95.1%に増えました。これなら、DCO2も適用できそうです。会社の休み時間/アパートでの作業なので、動作確認は次回ガレージで行います。



6月18日
この週末は土日とも出勤だったため、ガレージでの作業はありません。スライスの使用量をさらに減らすために、HLSで作成したDCFでDSPを使わない指示を外します。



DCFIPを入れ替え、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ボードの抵抗を変更する必要があり、次回行います。





back