2016-01-01から1年間の記事一覧

FPGA 版 FM 音源 (55) -- YMF297 (OPN3/OPL3) 測定 (21) -- EG シミュレーション・プログラム (1)

C 言語で書いた「フル機能」の EG シミュレーション・プログラムができました。 詳しい説明は後に回して、今回は結果のグラフとソースのみ掲載します。 (2016 年 12 月 31 日追記: プログラムに RATE = 0 の場合の動作に関するバグがあったのを修正しました)…

FPGA 版 FM 音源 (54) -- YMF297 (OPN3/OPL3) 測定 (20) -- EG クロック・プリスケーラ (7)

EG プリスケーラ部の CLK_EN 信号と SFT_SEL 信号の波形写真を示します。 まず、CLK_EN の波形です。

FPGA 版 FM 音源 (54) -- YMF297 (OPN3/OPL3) 測定 (19) -- EG クロック・プリスケーラ (6)

EG をディケイの DR = 13、Rof = 0〜3 の範囲に限りハイレートに対応させました。 アタックに関してはハイレートでは EG アキュムレータ部に (パラレルな実現では) バレルシフタが必要になりますが、ディケイについては EG アキュムレータの増分の定数が「1…

FPGA 版 FM 音源 (53) -- YMF297 (OPN3/OPL3) 測定 (18) -- EG クロック・プリスケーラ (5)

PSoC5LP UDB 上にローレート専用の EG アキュムレータ部分も実装して、連続してアタックとディケイを交互に繰り返す回路を作りました。 回路図を下に示します。 (図をクリックすると拡大します)

FPGA 版 FM 音源 (52) -- YMF297 (OPN3/OPL3) 測定 (17) -- EG クロック・プリスケーラ (4)

前回の psc4 コンポーネントによるプリスケーラ部に加え、バレルシフタ部も実装して EG クロック・イネーブル出力を得る回路全体を PSoC5LP の UDB 上に作成しました。 オシロで出力波形の確認および周波数カウンタでの出力周波数の確認をしてあります。 回…

FPGA 版 FM 音源 (51) -- YMF297 (OPN3/OPL3) 測定 (16) -- EG クロック・プリスケーラ (3)

標準ロジック・ファミリではバイナリ・レート・マルチプライア IC として、TTL の 74 シリーズでは 7497 (6 ビット)、メタルゲート CMOS の 4000B シリーズでは 4089B (4 ビット) などがあります。 それらの機能を一部簡略化し、ほぼ同等の PSoC コンポーネ…

FPGA 版 FM 音源 (50) -- YMF297 (OPN3/OPL3) 測定 (15) -- EG クロック・プリスケーラ (2)

2016 月 11 月 18 日付けの記事 (→こちら) で述べた EG クロック・プリスケーラの動作は、よく考えればレート・マルチプライア (rate multiplier) そのものでした。 パイプライン方式で複数オペレータを実現する場合に各オペレータ固有の内部変数として 8 進…

FPGA 版 FM 音源 (49) -- YMF297 (OPN3/OPL3) 測定 (14) -- EG ミュート状態

リニア出力のアナログ EG では、ディケイ/リリース回路に 1 次 RC 回路の放電特性のエクスポネンシャル・カーブを利用していれば、時間の経過とともに出力電圧はサステインあるいはグラウンド・レベルへ限りなく接近していきます。 リリース状態で「放置」し…

FPGA 版 FM 音源 (48) -- YMF297 (OPN3/OPL3) 測定 (13) -- EG パラメタ・レジスタ

今回の小ネタは、OPL3 の EG パラメタ (AR/DR/RR) の値が有効になる (参照される) タイミングについてです。 結論から言えば、アタック/ディケイ/リリースで、その状態に対応するレート・レジスタ AR/DR/RR が選択されている限り、ラッチされることはなく常…

FPGA 版 FM 音源 (47) -- YMF297 (OPN3/OPL3) 測定 (12) -- サステイン・レベル

今回は、OPL3 の音色パラメタの「SL」(Sustain Level) と実際の EG 出力のサステイン・レベルの不一致についての話です。 音色パラメタの SL は 4 ビットの値で、dB 単位の出力レベルと各ビットとが下の表のように対応づけられています。 b3 : -24 dB b2 : -…

ICSP 接続で PIC32MX のフラッシュに書き込む (16)

単価 380 円で秋月で販売されている PIC32MX270F256B-50I/SP (クロック 50 MHz / フラッシュ 256 KB / SRAM 64 KB) に LPC1114FN28/102 使用の ICSP ライタで書き込めることを確認しました。 PIC32MX220F032B 用の USB MIDI ホスト・プログラムの HEX ファイ…

FPGA 版 FM 音源 (46) -- YMF297 (OPN3/OPL3) 測定 (11) -- EG クロック・プリスケーラ (1)

OPL3 の EG では、AR/DR/RR で指定するレートが 13 の場合に fs クロックごとに EG アキュムレータの値が変化するようになり、レートが 12 を含んでそれ以下になる場合には、EG アキュムレータを更新するクロックが fs を分周したもの (プリスケールされたも…

FPGA 版 FM 音源 (45) -- YMF297 (OPN3/OPL3) 測定 (10) -- モジュレーション入力

ほぼ 1 年前 (→2015 年 9 月 20 日の記事) に OPL3 モードに設定した YMF297 で、セルフ・フィードバックの経路に FIR LPF が存在することを確認しました。 そのときから気になっていたのですが、「普通」のモジュレーション入力のパスには LPF がなく、入力…

PSoC UDB 内 PLD/マクロセル キャリー・チェイン・コンポーネント

今回の小ネタは「cy_psoc3_carry()」モジュールの「ラッパー」となる「cy_p3_carry」コンポーネントです。 cy_psoc3_carry() モジュールは、arithmetic / carry-chain モードのマクロセル 1 個分なので、実際の複数ビットの加減算回路を構成するには複数個並…

PSoC UDB 内 PLD/マクロセルによる乗算器

今回も PSoC3/4/5LP の UDB (Universal Digtal Block) 内の PLD/マクロセルによる回路の小ネタです。 LPM (Library of Parameterized Modules) ライブラリの「mmult()」コンポーネントによる乗算回路です。 mmult() は result = (dataa * datab) + sum の「…

PSoC UDB 内 PLD/マクロセルによるアップダウン・カウンタ (6)

OPL3 の AM LFO を構成する要素のうち、周期 210 のアップダウン・カウンタ部を PSoC の UDB (Universal Digital Block) の PLD/マクロセル部で実現してみた回路を下に示します。 この回路全体で、UDB ひとつ (PLD 2 組、マクロセル 8 個) におさまっていま…

PSoC UDB 内 PLD/マクロセルによるアップダウン・カウンタ (5)

実際に 32 ビット・アダーのコンポーネントを作って、キャリー・チェインの中を下から上まで 32 段分キャリーが抜ける時間を測定してみました。 全体の回路図を下に示します。

PSoC UDB 内 PLD/マクロセルによるアップダウン・カウンタ (4)

PSoC Creator がインストールされているフォルダの . . .\PSoC Creator\. . .\warp\lib\lcpsoc3\cpsoc3.vhdの中に arithmetuc / carry-chain モードのマクロセルひとつに「ほぼ」1 対 1 に対応する VHDL コンポーネントが以下のように宣言されています。 com…

PSoC UDB 内 PLD/マクロセルによるアップダウン・カウンタ (3)

PSoC Creator に組み込みの論理合成ソフトウェア「Warp」に関しては、PSoC Creator 付属のドキュメントとしては「小冊子」レベルの "warp_verilog_reference.pdf" しかありませんが、ググっていて Warp のユーザーガイドを見つけました。 Windows 95 や Wind…

PSoC UDB 内 PLD/マクロセルによるアップダウン・カウンタ (2)

論理合成ソフトウェアでは、ゲート・レベルのランダム・ロジックで描いた加算/減算器回路からマクロセルの arithmetic / carry-chain モードを利用する回路に自動的に変換されるようにはなっていないので、ユーザが verilog コードで明示的に示してやる必要…

PSoC UDB 内 PLD/マクロセルによるアップダウン・カウンタ (1)

OPL3 の AM LFO を構成する 7 ビット・アップダウン・カウンタ部分を、 PSoC 5LP の UDB (Universal Digital Block) 内の PLD/マクロセルのみを使う方法で実装したところ 1 UDB 内のリソースで実現することができました。 7 ビット・カウンタなので、本来 UD…

FPGA 版 FM 音源 (44) -- YMF297 (OPN3/OPL3) 測定 (9) -- トレモロ

今回は OPL3 のオペレータ出力レベルを LFO で振幅変調する機能の話です。 シンセ的には LFO による「音量変化」は「トレモロ」(tremolo)と呼ばれていますが、OPL3 関係のドキュメントでは一貫して技術寄りの用語として AM (amplitude modulation) を使って…

FPGA 版 FM 音源 (43) -- YMF297 (OPN3/OPL3) 測定 (8) -- ビブラート

OPN / OPL 等の FM 音源チップにはハードウェアによるビブラート機能が搭載されています。 現在の FM 音源プログラムでは、「音源チップ」に相当する部分には「ハードウェア・ビブラート」に相当するものは実装せず、「音源ドライバ」に相当する部分でソフト…

新版FM音源プログラム (12)

2016 年 1 月 1 日付けの記事 (→こちら) の 4 K エントリの場合と同様に、テーブル・インデクスを「マスク」する方法により、テーブル・サイズを 3.75 K (3840) エントリまで削減することができました。 また、4 K エントリの場合と同様に、符号の操作も併用…

新版FM音源プログラム (11)

2016 年 1 月 1 日付けの記事 (→こちら) の 8 K (8192) エントリの「ウェーブテーブル」を用いる方式で、波形の一部を共有するすることによりテーブル容量を 6 K (6144) エントリまで減らすことができました。 サンプルごとの処理では、8 K エントリ方式と同…

1/12 オクターブバンド・フィルタ (12)

DUT (Device Under Test: 被測定デバイス) をコンデンサだけに限らず、一般の 2 端子回路とすると、2 端子間の電位差と回路を流れる電流との関係を測定できれば、それらの商としてインピーダンス (およびアドミタンス) を求めることができます。 DUT 以外の…

1/12 オクターブバンド・フィルタ (11)

tan δ の値がマイナスになる問題は、データ処理の部分で「平均化」するサンプル・サイズを大きくしてもあまり改善されないので、「ランダム・ノイズ」によるものではなく、「系統的」な要因によるものと思われます。 ハードウェア部分を、あまり複雑にならな…

1/12 オクターブバンド・フィルタ (10)

ポリプロピレン・フィルム・コンデンサは 103 (10nF) をひとつしか持っていなかったので、他の容量についてもいくつか買ってきました。 インピーダンス・アナライザや LCR メータは持っていないので、簡易的な測定回路/ソフトウェアを作成して、各種コンデン…

1/12 オクターブバンド・フィルタ (9)

2016 年 3 月 30 日の記事 (→こちら) で検証したように、PSoC5LP の DFB (Digital Filter Block) のデータ RAM 容量 (128 ワード) の制限のため、一般的な IIR バイクアッド・フィルタを使用する場合には 1/12 オクターブバンド・フィルタ 8 バンド分 (IIR 2…

1/12 オクターブバンド・フィルタ (8)

DABP (Dual Amplifier BandPass) フィルタの実験をしていて、目的の Q の設計値約 35 に対して、実測すると Q が約 27 と 30 % 近くも低い値になってしまう現象に悩まされていました。 OP アンプを交換してみても、コンデンサを交換してみてもあまり改善せず…