Everyday is Sunday !

趣味満載のブログ #電子工作 #東方 #アニメ #音楽

ゲーム製作日記 Trion FPGA実装サンプル基板の設計

aki-fpga.com
プロジェクト概要はこちら

ゲーム機サンプル基板の完成品

卵焼き用の四角い鉄製フライパンにアルミホイルを敷いて、ガスコンロでリフローしました。

設計方針

まず、ソフトを動かすにはハードが必要になるので基板設計を行います。
初めて使用する FPGA なので、本番用ではなく、動作検証や開発が進められる汎用基板にします。
Efinix は FPGAベンダーとしては歴史が浅く、データシートに必要な情報が全て記載されているわけでは ないです。
そのため、FPGA が起動しなかったりと色々問題が起きやすいので、改造しやすい形にしました。
ピンソケットが備わっており、別基板を上にスタックしていくことで機能を追加する形式にしています。

回路説明

各種データシートとにらめっこしながら設計していきます。

FPGAリセット、外部オシレータ、コンフィグROM部分

FPGA の Reference CLK は25MHz にしました。
コンフィグROM は 4MB にしたのですが、RISC-V を動作させるプログラムデータの書き込みアドレスが 0x38000 とかなので、11MB ぐらいに必要になります。16MB〜32MB にするべきでした。(本番では変更予定です)
リセット回路は、Ti180 評価キットを真似ていて、電源投入後リセットをある程度の期間維持する必要があるので、リセットIC を実装しています。
CDONE ピンは、コンフィグモードからユーザモードに移行するのにプルアップが必要です。
最初は プルアップしておらず、ずっとコンフィグモードのままで焦りました。

電源、USB <-> UART変換部分

電源は USB-Type-C で 5V電源を供給できるようにしました。
スタックを行う拡張基板も単体の電源を使用可能にするので、ダイオードOR にしています。
今回使用の Trion はスピードグレード C3 のため コア電源は1.2V を使用しています。(IOは3.3V)
"500mA 以上出力可能なものを使用せよ"と書いてあったので、1A のスイッチング電源を使いました。
失敗したと思ったのが、MCP2221A の I2C,GPIO を未配線にしたことと、
VDDIO をジャンパなどで切り替え可能にしておけばよかったことです。

FPGA パスコン部分

推奨個数とかは特にないので、電源ピン1つに付きパスコン1個付けました。
Min1.15V, Max1.25V, ±0.05V とシビアで、LVDS や MIPI の高速信号を使う場合は、0.1uF 以外も入れたほうが良いと思います。

外部 SRAM 部分

外付けに 16MB の SRAM を実装しています。フレームバッファやマップチップの画像データ、サウンドの音源データ格納用途に使用します。
HyperRAM や DDRメモリにしようかとも思いましたが、今回のシステムではシステムクロックを 50[MHz] で動かす予定で、 数100[MHz] のクロックまで上げないつもりなので、システムクロックに対してレイテンシなく動かすことができる 非同期SRAM にしました。
本番では 2つ実装して 32bit 幅にするつもりです。

ピンソケット部分

特に記載することはありませんが、反射が気になるならばダンピング抵抗を入れたほうがいいかもしれません。

ユーザー I/F 部分

ゲームデータは Flash ROM に保存するため、家に余っていた 128MB の ROM を使用しています。
あとはデバッグ用の LED と JTAG ピンがあります。TFT 部分は使用しないので消す予定です。

メイン FPGA 部分

Trion (T20) には LQFP のパッケージがあるため、BGA と比べて検証が格段にしやすいやめ採用しました。
プルアップ している CBUS0~2 pin を LED に繋げるというミスをやらかしています。
コンフィグや LVDS 関連のピンアサインはデータシート通りになります(FPGA が ROMから読み込むモード)。

おわりに

まずは正常に動いて一安心です。
音源再生のアンプ回路や Display 表示回路は、また別の記事で作成予定です。