目的
fpganesのTang-Nano-9Kへの適用により、NESを動作させる事は上手く行った。
Tang-Nano-9Kには音声出力は無いので、DeltaSigma処理によりお茶を濁した。
しかし、音がちんけで一寸聞くに堪えない。
でも、DACとアンプを外付けするのもちょっち。
◆◆◆ そうだ、HDMIで繋いだモニターから音を出そう ◆◆◆
参考資料は見つかったが、Tang-Nano-9K用なんてのが有るはず無いが其処は根性で。
実施内容
HDMI接続での音声接続は見本が有るが、どうやつてTang-Nano-9Kへ適用するかが課題であった。
しかし、下記の文献のサンプル中に「GW_IDE」の文字を発見。
「SystemVerilog code for HDMI 1.4b video/audio output on an FPGA.」
もしやと思い、ものは試しとGW_IDEを定義したら、音が出るじゃ無いですか。
※HDMIの出力ドライバーの追加は必要。
これにNESの音声出力を繋げば、ゲームから音が出る筈である。
※解決すべき別の問題が発生したが。
ついでに、SDカードから読出し起動が出来るように機能を追加。
これで、モニターさえあればPCレスで何処でもNESで遊べる。
SDカードを交換すれば、ゲームの選択も可能だし。
※なんて書いたが、購入した小型モニターからはNESの音は出なかった。PCに繋げば出るのだけど。
まず、間口の広いPCモニタで動作を確認してね。
参照資料
※格納位置は前回と同じ。
※通信速度を従来の4倍に上げたので、ロードが失敗する場合は速度を下げてください。
「fpganes Tang-Nano-9K バージョン」
「fpganes Tang-Nano-9K ローダー」
「fpganes Tang-Nano-9K モニター」
「Tang-Nano-9K 音声HDMI出力化例」
音声出力の機能概説
音声出力化自体はサンプルの微修正で実現できたが、NESへの適用で問題発生。
元々のHDMI化は、VGAの同期信号をHDMIが受け付けて変換する形で有ったが、サンプルはHDMI側で同期信号などを発生していたので、信号を繋ぐと同期が取れず画面が流れてしまった。
そこでVGA側で作製している同期信号で、HDMI側に強制同期を掛けると言う荒業で解決。
※HDMI側で何しているのか理解して無いので、此処に落ち着くまが一苦労。
画面と音声は出たが、NESクロックで作製していた画面が汚くなったので、Pixelクロック同期に変更。
※こんな感じ、画面横方向に縮んだが、之が正規サイズ(4:3)なのだろう。
SDカードからの起動概説
リセット直後にカードの初期化に成功すれば、カードデータを書込むと言う単純な処理。
カードデータ読み込み後も、PCからのダウンロードは受け付ける。
SDカードはiNES形式のままで、先頭からベタ書きして作成する。
※win32diskimageを使用する場合、512byteに満たないデータは書き込まない様なので要注意。
末尾の16byteが書込まれないので、ダミーデータを496byte追加しておく必要が有る。
Tang-Nano-9K 音声HDMI出力化サンプル
NESに組み込んだ形では音声HDMI出力の方法が判り難いと思ったので、簡単な例を示す。
元ネタをTang-Nano-9Kに組み込み、ビープ音源を追加しただけである。
※音声出力の動作確認に使用した。
「hdmi+a」のSRCのtop.sv内の、audio_sample_wordに音声データを入れれば発音する。
※画面が出ない(同期が取れない)と、音も出ない。
※見本では音量を絞っている。
リソースとコンパイル時間
今回のリソース(LUT)の使用率は88%、アナライザも組み込むと97%に達していた。
流石に激重で、コンパイルに5分以上かかってしまう。
※配置配線を繰り返しているのだろう。
[80%] Routing から数分間ピクリとも動かない、フリーズしたのかと思ったよ。
Tang-Nano-9KのLUTは8640有るが、その利用は下記となっていた。
NES 2727
DRAM 1231
HDMI 908
UKP 438
SD 432
※Hierarchy画面を右側に引き延ばせば、数字が表示される。つい最近まで知らなかった。
NES本体は約3割なので、周辺回路が結構重い。
もし再コンパイルするのなら、define UseSDCardとdefine UseGamepadのコメントアウトを勧める。
これなら、2分前後でコンパイルが完了する。
感想
音声出力とSD化によりPCの軛を脱した事だし、NESシリーズは今回で終わりだろう(多分)。
まだまだ動かないカートリッジも有ると思うが、其処は各自で頑張ってください。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。