Arty A7-35ボードの購入
DigilentからArty A7-35ボード(魚拓)を購入しました。このボードはUltra96と比べて本体が約半額と安いだけでなく、(弊社開発の)PMOD変換ボードも不要なので、最も安くSpace Invadersを動かすことができます。
必要な周辺
Space Invadersを動作させるには、Artyボードの他に必要なものは以下のとおりです。
- 12V電源
- PMOD I2Sインタフェース(オーディオDAC)カード
- オーディオケーブル
図269.1 PMOD I2Sインタフェースとケーブル - アンプ付きミニスピーカ
図269.2 アンプ付きミニスピーカ - PMOD VGAインタフェースカード
- VGA/HDMIインタフェース
図269.3 PMOD VGAインタフェースとVGA/HDMIインタフェース - VGA/HDMIインタフェース用5V電源
- HDMIケーブル
- PMOD JOYスティック・スイッチインタフェース(弊社開発)
図269.4 PMOD JOYスティック・スイッチインタフェース - JOYスティック・スイッチ(弊社開発)
図269.5 JOYスティック・スイッチ - Micro-B USBケーブル
図269.6 Micro-B USBケーブル 図269.7に、これら周辺を全て接続したArtyボードの写真を示します。図269.7 Artyボードに周辺を接続
Arty A7-35ボードへの移植
除算器を引き算に変換
FPGAの世代や遅延、容量は違うものの、基本的には同様に動作するはずです。ところが、一部動作がおかしかったので修正しました。まず、除算器にバグがあるようなので引き算方式に修正しました。スコアを表示する箇所において、各桁表示のため1000、100、10で割る場合がありますが、1000で割った商を誤ることがあるようです。除算をやめ、引けなくなるまで1000、100、10を引く方式に変更したところ、回路規模も小さくなり正常に動作するようになりました。
FSM clockを1/10に変更
ゲームFSMクロックを10MHzで設計し、96.4%がウェイトだと判明したので、FSMクロックを1MHzに落としました。自機増加音が無視されることがあるので、クロックを落としたのですが、原因は異なっていました(後述)。
60Hzクロックの生成
この修正により、FSMの待ち時間が影響を受けます。1tick=60HzのタイミングをとるのにFSMクロック数を数えていましたが、FSMクロックの周波数が変わるため、外部から60Hzを入力するように修正します。60Hzクロックは、上記FSMクロックである1MHzクロックをバイナリカウンタで\$411B回カウントすることで生成します。さらにFSM内での60Hzクロックとの同期は以下のように行います。countはtick(=16.67msec)の何倍待たせるかを示す引数です。
repeat(pack(extend(count))) seq
await(tick == 0);
await(tick == 1);
endseq
60Hzクロックの"L"を待ち、もし"L"であれば次に"H"を待つようにします。これにより60Hzの立ち上がりに同期して動作することになります。
このように変更した結果、FSMの処理時間は10倍の約5msecに増加し、60Hzの周期16.67msecの約30%になりました。図269.2の黄線が60Hzクロック、青線がそれによる実行(Hでウエイト中、Lで実行中)を示します。