5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Tang-Nano-9Kで動作するNESの音声HDMI出力化とSDカード起動

Last updated at Posted at 2023-03-01

目的

 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)なのだろう。
nes-dq+m.jpg

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シリーズは今回で終わりだろう(多分)。
 まだまだ動かないカートリッジも有ると思うが、其処は各自で頑張ってください。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?