YM2413のFPGA向けVerilogコアです。ヤマハのデータシートとMadovさんとTravis Goodspeedさんのダイショットを見て、リバースエンジニアリングしました。9ビットデジタル出力のデザインとVRC7パッチはnukeyktさんのソースを参考にしました。© 2024 Sehyeon Kim(Raki)
著作権のあるイメージです。ヘッダー画像としての使用の許可済。絵師はSEONGSU。
- cycle-accurate、シリコン解析基盤の、BSD2ライセンスコア。
- 実際のチップの大体の信号を正確にエミュレート。
- 3つのデジタル出力を用意。
- 全てのLSIテストビットを実装。
- 使いやすい、LPFが必要ない16ビットアキュムレート出力とミキサーを内装。
インスタンス化の方法は、英語版のREADMEをご参照ください。
パラメータ
FULLY_SYNCHRONOUS
1 コア全体をマスタークロック同期します。(基本、おすすめ)全ての非同期制御信号入力に2-FFシンクロナイザーが付けられます。従って、全ての書き込み動作は2クロック遅延されます。0の場合、10個のラッチが使われます。書き込みリクエ用のSRラッチをエミュレートする2つのunsafe Ⅾラッチと、データバスの書き込み値を一時的に格納する8ビットⅮラッチがです。ラッチを使用する際は、ラッチ・イネーブル信号に適切なクロックまたはグローバル信号の属性がちゃんと与えられているか、確認する必要があります。Quartusはいくつかのwarningを表示し、この信号をGCLKとして扱います。ラッチ・イネーブル信号は、コンパイラーにより、クロックとみなされるので、タイミングアナライザの設定ファイルに条件を追加する必要があります。FAST_RESET
を0に設定すると、IKAOPLLの全てのパイプラインのリセットを保証するためには、i_EMUCLK
とi_phiM_PCEN_n
の動作中に少なくとも「phiM」72サイクル分の長さのi_IC_n
のアサートが必要です。 1 の場合、i_IC_n
がロジックLOWであれば、内部分周器のクロックイネーブルである「phi1_cen」を強制的にイネーブルし、i_EMUCLK
と同じスピードでパイプラインがリセットされます。チップ全体をリセットするのには「phiM」18サイクル分の長さのリセットが必要です。ALTPATCH_CONFIG_MODE
1に設定すると、テストレジスタのD[4]を1に設定することで、パッチを切り替えます。0にすると、セカンドパッチ(VRC7)のイネーブル信号を外部から提供する必要があります。USE_PIPELINED_MULTIPLIER
コンパイラがリソースを効率的に利用できるようにします。オリジナルのチップは加算と乗算を「phi1」1サイクルで処理します。
IOポート
i_EMUCLK
はシステムクロックです。i_phiM_PCEN_n
は「phiM」のポジティブエッジのクロックイネーブル(負論理)です。i_IC_n
は同期リセットです。リセット仕様については、上の説明をご参照ください。o_D_OE
はFPGAのトライステートIOドライバの出力イネーブルです。O_DAC_EN_MO
とo_DAC_EN_RO
はオリジナルチップのDAC出力をイネーブルするために使われる信号です。IMP_NOFLUC_SIGN
はオリジナルチップのstring DACのVrefソース切り替えスイッチをトグルするための信号です。o_IMP_NOFLUC_MAG
はオリジナルチップのstring DACのタップスイッチを有効にするための信号です。o_IMP_FLUC_SIGNED_MO
とo_IMP_FLUC_SIGNED_RO
は最終的なサウンドの9ビットデジタル出力です。オリジナルDAC設計の欠陥によるゼロレベルの揺らぎをエミュレートします。ACC_SIGNED_STRB
は16ビットaccumulatedデジタル出力のストローブ信号です。このストローブ信号のポジティブエッジで、外部DFFを使用したデータのサンプリングが可能です。デューティサイクルは50%固定です。o_ACC_SIGNED
は16ビットaccumulatedデジタル出力です。オリジナルDACはリズム音のインパルスを2回出力するので、符号あり5ビットのスケーリングファクターを与えることで、各チャンネルの音量を調整することができます。デフォルト値はFMが+2、リズムが+3です。