FPGA 版 FM 音源

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-A…

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) 複数タイム・スロット対応になっており、時分割で複数の…

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 : -…

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 がなく、入力…

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 音源プログラムでは、「音源チップ」に相当する部分には「ハードウェア・ビブラート」に相当するものは実装せず、「音源ドライバ」に相当する部分でソフト…

FPGA 版 FM 音源 (42) -- YMF297 (OPN3/OPL3) 測定 (7)

次の 6 つの Verilog-HDL ファイルを示します。 tb_opl3_op.v —— テストベンチ opl3_op.v —— サイン波発生部本体 opl3_slb_rom.v —— log2 magnitude サイン波 ROM slbtab_opl3.memh —— 上記 ROM の初期化データ opl3_lb2lin_rom.v —— log2 magnitude — リニ…

FPGA 版 FM 音源 (41) -- YMF297 (OPN3/OPL3) 測定 (6)

OPL3 のオペレータの EG 部分とピッチ発生部分とを除く、サイン波生成部分を Verilog-HDL で記述し、ModelSim でシミュレーションしてみました。 出力波形は、ディジタル・データとして、実チップ (OPL3 モードの YMF297) の出力を S/PDIF 経由でキャプチャ…

FPGA 版 FM 音源 (40) -- YMF297 (OPN3/OPL3) 測定 (5)

ほぼ 1 年ぶりに、OPL3 モードに設定した YMF297 の出力を S/PDIF 経由でキャプチャしてみました。 それは、下の記事に示すように、フィードバック量が多い場合に出力波形が振動的になる現象を追求するためです。 FM音源プログラム(20) -- オペレータ(1…

FPGA 版 FM 音源 (39) -- YMF297 (OPN3/OPL3) 測定 (4)

YMF297 を OPL3 モードで動作させると、1 オーディオ・フレームあたりのビット・クロック数が 68 に変化するので、DAC 出力のサンプリング周波数を 48 kHz に保つためには、YMF297 に供給するマスタークロック自体の周波数を変化させなければなりません。 そ…

FPGA 版 FM 音源 (38) -- YMF297 (OPN3/OPL3) 測定 (3)

古い MUSE-NTSC コンバータの基板から外してきた S/PDIF トランスミッタ (SONY CXD1211P) をつないで 48 kHz S/PDIF にデータを流せるようになりました。 OPNA モードでは LRCK のデューティーが 50 % ぴったりにはならないのですが、特に問題はなく、左右チ…

FPGA 版 FM 音源 (37) -- YMF297 (OPN3/OPL3) 測定 (2)

Nucleo F401RE と YMF297 との間の配線を完了させ、レジスタ・アクセスできるようにしました。 (リセット信号は 8 番ピンのみに接続しています) いろいろと探っていくうちに、OPN モードと OPL3 モードとの切り替え方法も判明しました。 N/L# (32 番ピン) は…

FPGA 版 FM 音源 (36) -- YMF297 (OPN3/OPL3) 測定 (1)

今回は、「FM音源ガチャ」で入手した YMF297 についての話題です。 このチップは、 YM2203(OPN),YM2608(OPNA),YMF288(OPN3) などの「OPN」系のモードと、 YMF262(OPL3),YMF289(OPL3-L) などの「OPL3」系のモードとの、 どちらかに切り替えて動作させること…

FPGA 版 FM 音源 (35) -- YM2151 (OPM) 測定 (3)

2011 年 2 月 11 日付けの記事 (→こちら) での YMF262 (OPL3) のアタック計算回路と同様の回路を、YM2151 (OPM) に対して書いてみました。 原理を示すもので、細かいコントロール等については表現してありません。

FPGA 版 FM 音源 (34) -- TX7 (OPS) 測定 (1)

今回は、どこのご家庭にもある TX7 のオーディオ出力を S/PDIF でキャプチャできるようにする改造の話です。 といっても、まだ初期の段階です。 TX7 は、 DX7 の音源部のみを取り出したものに相当し、YM2128 (OPS: Operator Type-S) と YM2129 (EGS: Envelop…

FPGA 版 FM 音源 (33) -- YM2151 (OPM) 測定 (2)

YM2151 (OPM) の EG の測定で、 EG の更新頻度はサンプリング周波数 fsの 1/3 (3 サンプルごとに更新) (キー・レート・スケーリング適用後の) レートの上位 4 ビット (R′) の表現で「12」が ロー・レートとハイ・レートの境界になっている ロー・レートでの…

FPGA 版 FM 音源 (32) -- YM2151 (OPM) 測定 (1)

YMF262 (OPL3) ではオペレータ出力波形に正弦波だけでなく、各種の波形を選べるので、 WS = 6 として「フルスケール矩形波」を選択 F-NUMBER = 0 (オペレータ周波数 = 0) として、フェーズ・アキュムレータを 0 に固定 することにより、波形出力としてフルス…

FPGA 版 FM 音源 (31) -- YM2151 (OPM) インターフェース回路 (1)

Nuvoton NUC120 基板上に YM2151 (OPM) のインターフェース回路を作りました。 YM2151 チップは手持ちの MSX 用 FM 音源モジュール YAMAHA SFG-01 の基板から外してきたものです。 YM2151 自身および周辺の回路の IC の「デート・コード」を見ると 1984 年製…

FPGA 版 FM 音源 (30) -- 49 kHz → 44.1 kHz サンプリング・レート・コンバータ (3)

4 月 16 日付けの記事の構成をソフトウェアで実現した C プログラムの断片を下に示します。

FPGA 版 FM 音源 (29) -- 49 kHz → 44.1 kHz サンプリング・レート・コンバータ (2)

サンプリング周波数を 49.5158 kHz から 44.1 kHz へ変換する回路は、次の 2 点、 信号レベルの約 1 dB の低下 (およびそれにともなう S/N 比の悪化) 加減算回路のビット幅が 6 ビット増加 (16 ビット幅から 22 ビット幅へ) を許容できれば、44.1 kHz レート…