Posts Tagged with "Space Invaders"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

BSVの設計トライアル

posted by sakurai on April 7, 2020 #234

スペースインベーダーのモジュールの入れ替え

過去にスペースインベーダーをRTLで開発しました。今回はBSVのトライアルとして既存のverilogモジュールの入れ替えを実施します。小さめのFSMであるサウンドFSMを入れ替えますが、合わせて仕様も高級なものにしようと思います。RTLで記述したときは、サウンドチャネルは1個で、優先度判定を行いサウンド割込みを行いました。今回は、サウンドチャネルを複数持って、サウンド重畳を行うことを考えます。そのため、複数の音を出し音量を平均化するような、サウンドミックス回路を新設します。

サウンドチャネルの決定

さて、音は以下の10種類ですが、同時発生を考えて、自機音、インベーダ音1, 2、UFO音の4チャネルとします。また、サウンド演奏中に割込みが入るため、プリエンプティブに設計する必要があります。

表234.1 音データとサウンドチャネルの関係
サウンドの説明 CODE番号 サウンドチャネル バイト数 先頭オフセット+16
ON OFF
自機弾発射音 1 自機音チャネル(#0) 4,318 0 + 16
自機爆発音 2 8,776 4,318 + 16
自機増加音 9 5,500 13,094 + 16
インベーダ爆発音 3 インベーダ音チャネル(#1) 4,622 0 + 16
インベーダ歩行音1 4 インベーダ音チャネル(#2) 1,266 0 + 16
インベーダ歩行音2 5 1,570 1,266 + 16
インベーダ歩行音3 6 1,570 2,836 + 16
インベーダ歩行音4 7 2,180 4,406 + 16
UFO爆発音 8 UFO音チャネル(#3) 25,968 0 + 16
UFO飛行音 10 16 + 10 1,846 25,968 + 16

変更前後のブロック図

現状のRTL設計でのブロック図をVivadoで表示したものを図234.1に示します。

図%%.1
図234.1 現サウンドシステムブロック図

新仕様のブロック図は図234.2のようになります。色付けの部分が新規設計モジュールです。

図%%.2
図234.2 新サウンドシステムブロック図

左矢前のブログ 次のブログ右矢

posted by sakurai on July 22, 2019 #132

前稿で設計したグラフィックディスプレイコントローラですが、あとから振り返るとFIFOが無駄であることに気づきました。早速リファクタリングします。

リファクタリング前のクロックドメインが3つあるのに比べて、リファクタリング後は2つに減っています。それだけでなく、FIFOとメモリをリードしてFIFOに入れる回路の2つを削減しています。これはdual port memoryが本来FIFOの役割を果たすためです。

図%%.1
図132.1 リファクタリング前の回路

図%%.2
図132.2 リファクタリング後の回路

FIFOとメモリ読み出し回路を削減し、メモリ読み出し回路から出ていたメモリアドレスをグラフィックコントローラから出す変更により、問題なくリファクタリングが達成できました。


左矢前のブログ 次のブログ右矢

posted by sakurai on July 13, 2019 #129

FPGAの設計トライアルとしてスペースインベーダを取り上げたブログ記事を書いてきましたが、最初はAvnetのMicroZedボードで、PMOD-VGAとPMOD-I2Sのインタフェースを購入して、入力はボード上のスイッチを使用していました。

開発がほぼ完了した段階で、AvnetからUltra96 ボードが発売されたので、さっそく購入し移植しようとしましたが、Ultra96はPMODインタフェースを搭載していないため、インタフェースボードを設計せざるを得なくなりました。

そのため、Eagleを使用して、PCBを設計し、さらに格安でPCBを製造するベンダを探しました。中国から送られてきたボードに部品を実装し、ジョイスティックを作成し、ゲームを動作させることができました。

この経緯をQiitaに投稿しました。

図%%.1
図129.1 Qiitaの投稿記事

合わせてYouTubeにも上げています。


左矢前のブログ 次のブログ右矢

Ultra96toPMODボードの改版 (3)

posted by sakurai on June 13, 2019 #111

組み立てたPCBをUltra96と組み合わせ動作確認を行います。4層だから電源、グラウンドノイズが抑えられるかと思いましたが、2層とあまり変わらず、400mVp-pくらいありました。やや大きい気がします。

2層と言えどもベタ電源、ベタグラウンドとしているので4層と変わらないのか、それとも3端子レギュレータのノイズがかなり強力で、バイパスしきれていないのか不明です。パスコンをかなり入れている割にはあまり効いていない感じがします。

3端子レギュレータの温度上昇が心配だったので、デジタル温度計を繋ぎ、数時間動作させてみました。39度までは上がらないようです。12Vから3.3Vに落としているのでドロップ電圧が大きく、ドロップ電圧×電流の電力を熱として消費するため熱暴走が心配でした。このレベルの消費電力であれば、ヒートシンクは不要のようです。

図111.1
図111.1 PCB基板

ところで、前回使用したFusion PCBは実装費用が(BokTechに比べたら)高額だったのですが、今回実装費用を約65 USDも値下げしてきました。比較してみると、この基板を製造費、実装費、部品費、配送料込みで、

ベンダー Fusion PCB BokTech
2層板(5枚製造、2枚SMD実装) 89.13⇒23.52 USD 54.83 USD
4層板(5枚製造、2枚SMD実装) 129.13⇒63.52 USD 92.02 USD
2019年5月調べ

図111.2
図111.2 PCB基板価格

と競合であるBokTechを下回る価格を打ち出してきました。従来はBokTechよりも約35 USD高かったのですが、BokTechよりも約30 USDも安くなっています。

そもそも実装費用がこれだけ安ければ、全てSMDにして実装を任せても良くなります。また、部品費用はそのほうが安いものが多いため、メリットがあるでしょう。手ハンダを前提としたスルーホール中心の考え方まで変える必要がありそうです。

追記:セールは2019.8.1で終了したとのこと、ただし、その後も時々セールを実施しているようです。


左矢前のブログ 次のブログ右矢

Ultra96toPMODのPCBの完成

posted by sakurai on April 7, 2019 #96

FusionPCBにオーダーしていたメインPCBが届きました。実装も依頼したので、基板だけよりは時間がかかります。受注から実装完成まで18.94日、DHLによる配送が0.95日でした。FusionPCBは若干高いようですが、DHLの配送料込みなので、他社と価格比較する際はトータルで見る必要があります。

コストを抑えるため、実装はSMD部品のみ依頼し、残りのスルーホール部品はマニュアルによるハンダ付けとしました。

図96.1
図96.1 完成したPCB

部品を実装したボードをUltra96ボード、PMOD-VGAボード、PMOD-I2S(サウンド)ボード、PMOD-JOY-SWボードと組み合わせて、Space Invadersが正常に動作することを確認しました。

基板図の表、裏の両面を示します。

図96.2
図96.2 ガーバーデータ表

図96.3
図96.3 ガーバーデータ裏

UltraZedボードでは電源ONでリセットがかかったのですが、プロトタイプボードを実装して電源を入れたところ、電源スイッチをONしなければならないことが分かりました。ところが、Ultra96ボードの電源スイッチがインタフェースボードで隠されて押しにくいことが分かったので、新たに電源スイッチとついでに敵の強さを設定するDIP SWを設けました。回路は他は基本的には変えていません。ソルダーレジスト色は黒にしてみました。

図96.4
図96.4 SketchUPによる3D化

図96.5
図96.5 IndigoRTによるレンダリング

左矢前のブログ 次のブログ右矢

posted by sakurai on March 24, 2019 #93

FusionPCBにオーダーしていた基板が届きました。以前の設計時のブログの続きです。

非常に小さい基板で、以下に基板の100円硬貨との比較写真を示します。基板業者は前回と同じFusionPCBで、今回はOSCという速達配送業者を利用して9.9USDでした。基板のみで製造に7.94日、OSCによる配送にシンセンから日本まで3.13日かかっています。シンガポール郵便よりはだいぶ早いですね。9.9USDの内訳は、7.9USDが基板制作代、2.0USDがOSCの配送料のようです。

前回はソルダーレジストを白で製造しましたが、今回は黒にしてみました。Ultra96toPMODボードもオーダーしています。レベル変換ICのみSMDだったので、手ハンダはマイクロスコープ下のハンダ付け作業となり厳しいため、レベル変換ICのみ実装もオーダーしました。

図93.1
図92.1 基板写真

これに部品を実装したものを次の図に示します。

図93.2
図92.2 基板に部品を実装した

UltratoPMODボードに取り付けて正常に動作することを確認しました。


左矢前のブログ 次のブログ右矢

posted by sakurai on February 8, 2019 #86

ゲームの完成

以前の記事で実装したインベーダゲームを、Ultra96及びUltra96toPMODインタフェースボードの組み合わせと、ジョイスティックで動作させることができました。絵も音も、UltraZedボードと全く同様に出ています。

動画のフルキーボードは全く使用していません。Ultra96に上記PMODインタフェースボードを接続し、それにPMOD-VGAボード、PMOD-I2Sボード、自作PMODジョイスティックSWボードを接続し、動画中のジョイスティック及びスイッチにより操作しています。

図86.1
図86.1 Ultra96のインベーダゲーム

共通シーケンス

ゲーム自体はまだ改良の余地があり、共通ステートシーケンスをソフトで言うところのサブルーチン化する等のリファクタリングを実施中です。図86.2にその一例を示します。パターンROMからいろいろな形、例えばインベーダ、自機、ベース、UFO等をVRAMに矩形転送するシーケンスは、多用されますが、それぞれにシーケンサを用意していると大変なロジック量になります。これをサブルーチンのように、{ソースX座標、ソースY座標、横幅、縦幅、デスティネーションX座標、デスティネーションY座標}の6個を入力パラメータとして、シーケンスを呼びだすことでシーケンスの共通化が可能です。呼び出す前には戻り番地をリターンレジスタに退避してから呼び出します。呼び出し先で戻るときにはリターンレジスタをステートに代入して戻ります。

図86.2
図86.2 共通シーケンス(=サブルーチン)

本来はプロセッサのソフトウェアで実行する、十分複雑なシーケンス制御をハードウェアで実装してみて判明したのは、まさにプロセッサの進化のリバース(逆行)だということです。FSMシーケンスを共用化する目的で、前述のようにリターンレジスタを実装しましたが、これはプロセッサのリンクレジスタと同じです。

水平マイクロ

現在マイクロプログラム処理をあまり見なくなったのは論理合成のためだと思います。論理合成が無い時代はハードウェア論理を変更するのは大変な作業で、それを簡単にするために、FSMではなくマイクロプログラム処理を考え、ROMの内容を書き換えることで、処理の変更を行ったわけです。今回のFSMシーケンス記述は、いわば、インベーダ処理プロセッサの超水平マイクロを書いているようなものです。ちなみに水平マイクロには、普通プロセッサレベルのISAには存在しない、マルチウェイ分岐等の強力な命令があります。

ESDAツール

最近ではSDSoCなりVivado-HLSなりが使えるので、Cで書こうかとも思いましたが、今回はVerilogで記述してみました。VerilogはCに対するアセンブラとも言われますが、コード量的にはそれほどの差はありません。20年ほど前にESDAツールがあったのですが、最近はどこへ行ってしまったのでしょうか。動作合成が進んだのでなくなったのかもしれません。同じアルゴリズムをCで書いてみると、ESDAが不要かどうかが分かると思います。


左矢前のブログ 次のブログ右矢

posted by sakurai on February 5, 2019 #85

Ultra96対応だけであれば変換ボードに吸収しても良いのですが、 スイッチ類をUltraZedボードに差し替えて使用する場合には、前述のとおりインタフェースが必要になります。その理由は、遠い場所にあるスイッチは単なるロジックではなく電装線路扱いとしなければ、反射が起き、正常に動作しないためです。

この反射を抑えるために、図85.1のような回路を設計しました。

図85.1
図85.1 回路図

このボードを作成しました。手ハンダでも作成できるようにSMDは使用しないようにしています。

図85.2
図85.2 ボードレイアウト図

EagleUpを用いて3D化します。

図85.3
図85.3 ボードイメージ

前々回作成したUltra96からPMODへのインタフェースボードと組み合わせ、レンダリングしたものが図85.4です。フラットケーブルの先(反対側)には前回のジョイスティック及びスイッチを接続します。

図85.4
図85.4 結合ボードイメージ

左矢前のブログ 次のブログ右矢

posted by sakurai on February 3, 2019 #84

ジョイスティックとスイッチの入力装置を作成します。ジョイスティックもプッシュスイッチも単なるマイクロスイッチですが、問題は遠いところにあることです。例えば線長が1m程度もあります。そのままだと反射が激しくなり、電装線路の終端が必要になります。今回の場合終端しなければ、しばしば50MHz程度の定常波が発生しました。

図84.1
図84.1 ジョイスティックとスイッチ入力装置

写真のジョイスティックやプッシュスイッチはパーツショップで1,000円程度で購入できます。またそれらを取り付ける台は100円ショップで半透明のPPケースを購入しました。以下に、ボード以外で必要な部品表を示します。

品名 単価 数量 備考
ジョイスティック 980円 1 http://akizukidenshi.com/catalog/g/gP-10992/
プッシュスイッチ 150円 2 http://akizukidenshi.com/catalog/g/gP-07248/
PPケース 100円 1 https://cdn-ak.f.st-hatena.com/images/fotolife/s/simplehome/20170303/20170303152651.jpg
ネジM4x6mm 5円 4 http://akizukidenshi.com/catalog/g/gP-07326/(100個入り500円)
ナットM4 10円 4 http://akizukidenshi.com/catalog/g/gP-11730/(50個入り500円)
フラットケーブル5芯 79円 1.0m https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-04N5(158円)
配線材料 - 少々 http://akizukidenshi.com/catalog/g/gP-11641/(1mx10本入り300円)


左矢前のブログ 次のブログ右矢

posted by sakurai on January 29, 2019 #83

生基板

今回はSeeed Fusion PCBという会社に基板を発注し、約22日で届きました。製造に13.16日、配送は最安のシンガポール郵便で9.67日となっています。

費用は送料込みで$7.9でした。送料込み約860円くらいで試作基板が5枚作成できるので、ユニバーサルボード一枚が200円前後することを考えると、非常にお得です。

図83.1
図83.1 PCB

組み立て

部品をハンダ付けにより実装していきます。試作のため手ハンダを前提としたことにより、SMDを極力避けたのですが、レベル変換ICのTXS0108EPWRはDIPの製品が存在せず、SMDとなってしまいました。

図83.2
図83.2 組み立てたPCB

SMDのアマチュア的ハンダ付けには、手ハンダ、ホットプレート法、トースター法等がありますが、今回は手ハンダでやってみます。手付けでなんとかきれいに付けることができました。図83.3にTXS0108EPWRの手ハンダ実装後の顕微鏡写真を示します。

図83.3
図83.3 SMDのハンダ付け後の端子の顕微鏡写真

以下の動画を参考にさせて頂きました。
https://www.youtube.com/watch?v=5uiroWBkdFY


左矢前のブログ 次のブログ右矢


ページ: