シンセ・アンプラグド RSSフィード

2017-01-23

FPGA 版 FM 音源 (57) -- YMF297 (OPN3/OPL3) 測定 (23) -- FPGA 版 EG (1)

EG 部分を Verilog HDL で記述し、Altera (無印) Cyclone (EP1C3T100C8) 上にインプリメントしました。 (具体的には CQ 出版「デザインウェーブマガジン」 2003 年 10 月号付属基板)

開発環境としては、

  • Quartus II Version 11.0 sp1 Web Edition
  • ModelSim-ALTERA Starter Edition 6.6d

という古いものを使っています。 これ以降のバージョンでは、無印 Cyclone のサポートが打ち切られているためです。

EG モジュールを 4 つのサブモジュールに分割して記述しています。 それぞれを単独でコンパイルした場合のロジック・エレメント (LE) 使用量の表を下に示します。

続きを読む

2017-01-11

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

エンベロープ計算関数の「EG_module()」の宣言部分を下に示します。

int EG_module(uint16_t *eg_mem_p, int fs_en, 
              int kon_rise, int kon_fall, int egt, 
              int ar, int dr, int sl, int rr, 
              int rof)

複数タイム・スロット対応になっており、時分割で複数のエンベロープを生成することができます。

「スロット・クロック」ごとに関数を呼び出して、関数の返り値として EG アキュムレータの値を得ます。

EG アキュムレータ (9 ビット) および EG ステート (3 ビット) の計 12 ビットのデータは各スロットごとに確保しておいたメモリに収納する必要があり、関数の第 1 引数の「eg_mem_p」でメモリへのポインタを渡します。

関数内では最初にポインタの指すメモリから値を読み込んで処理を行い、最後に結果をポインタの指すメモリに書き戻しています。

続きを読む

2016-12-30

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

C 言語で書いた「フル機能」の EG シミュレーションプログラムができました。

詳しい説明は後に回して、今回は結果のグラフとソースのみ掲載します。

(2016 年 12 月 31 日追記: プログラムに RATE = 0 の場合の動作に関するバグがあったのを修正しました)

(2017年 1 月 1 日追記: 上記バグを再修正。 「fs_en」信号を追加。)

(2017年 1 月 11 日追記: 上記とは別の RATE = 0 に関するバグを修正。)

続きを読む

2016-12-10

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

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

まず、CLK_EN の波形です。

続きを読む

2016-12-08

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

EG をディケイの DR = 13、Rof = 0〜3 の範囲に限りハイレートに対応させました。

アタックに関してはハイレートでは EG アキュムレータ部に (パラレルな実現では) バレルシフタが必要になりますが、ディケイについては EG アキュムレータの増分の定数が「1」と「2」の 2 種になるだけなのでハードウェアの増加量を抑えられます。

続きを読む

2016-12-06

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

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

回路図を下に示します。 (図をクリックすると拡大します)

続きを読む

2016-12-03

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

前回の psc4 コンポーネントによるプリスケーラ部に加え、バレルシフタ部も実装して EG クロック・イネーブル出力を得る回路全体を PSoC5LP の UDB 上に作成しました。

オシロで出力波形の確認および周波数カウンタでの出力周波数の確認をしてあります。

回路図を下に示します。 (図をクリックすると拡大します)

続きを読む