Posts Tagged with "Ultra96"

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

グラフィックタイミング設計 (2)

posted by sakurai on July 25, 2019 #135

SVGAの物理画面のグラフィックタイミングは変更しないので、RTLはタイミングに関してはほとんど変更ありません。以下は元のRTLのグラフィックタイミング定義部分です。

parameter HD=800; // Phyisical Display Timing Horizontal
parameter HFP=40;
parameter HSP=128;
parameter HBP=88;
parameter HO=HFP+HSP+HBP;
parameter HL=HD+HO; // 1056

parameter VD=600; // Phyisical Display Timing Vertical
parameter VFP=1;
parameter VSP=4;
parameter VBP=23;
parameter VO=VFP+VSP+VBP;
parameter VL=VD+VO; // 628
parameter EHD=512; // Embedded Display Timing Horizontal
parameter EVD=512; // Embedded Display Timing Vertical

parameter HW=11;
parameter VW=10;
parameter EHOFF = (HD-EHD)/2; // Embedded Display Offset Horizontal
parameter EVOFF = (VD-EVD)/2; // Embedded Display Offset Vertical

このうち、論理画面のサイズについて、赤字のように修正します。

parameter EHD=640; // Embedded Display Timing Horizontal
parameter EVD=400; // Embedded Display Timing Vertical

parameter HW=12;

しかしながら、Space Invadersと異なり、Xが2の階乗でないため、アドレスカウンタがXとYについてきれいにフィールドで分かれません。従って、水平、垂直カウンタとは別に、VRAMアドレスカウンタを設け、EHD&EVDのディスプレイタイミングでカウントイネーブルをかけます。このようにすれば、表示期間のみアドレスが進み、穴が空く(表示の隣り合うビットが物理的には離れたアドレスに位置する)ことはありません。

さらに、アドレスカウンタを偶数用、奇数用に分け、水平ラインの偶数と奇数でカウンタを進み分けることで、同じアドレスを2回出力することにします。これで縦の2倍拡大が行えます。

実際に動かしてみると、データ表示のビット並びが逆順になっているようです。dual port memoryのA側(CPU側)は8bit幅、B側(ディスプレイ側)は1bit幅で、dual port memoryの内部に8:1のマルチプレクサがあるはずです。表示されたビットの並びが思ったのと逆だったので、アドレス下位3bitを反転することで正しい並びになりました。


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

グラフィックタイミング設計

posted by sakurai on July 24, 2019 #134

概略が決定できたので、詳細設計を行います。各パラメータはVGAタイミングのサイトで決定すると、以下の表のようになります。

図%%.1
図134.1 タイミング表

これに基づき、水平、垂直のタイミングチャートを書くと、以下の図のようになります。

図%%.1
図134.2 タイミングチャート

参考のため、HD (Horizontal Display Timing)及びVD (Vertical Display Timing)を示していますが、実際には不要であるため、信号は存在しません。その代わりにEHD (Embedded Horizontal Display Timing)及びEVD (Embedded Vertical Display Timing)を生成し、画面のブランキングを行っています。前稿の物理画面の中に論理画面が存在しますが、論理画面に対するディスプレイタイミングが、このEHD及びEVDとなります。


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

グラフィックメモリの設計

posted by sakurai on July 23, 2019 #133

ある目的があり、グラフィックメモリシステムの設計を再度行います。前回設計しているので、パラメータを少々変更するだけで簡単にできそうな気がします。

さて、設計仕様は、昔の8bit PCのVGAをエミュレートするものです。640dotx200dotのRGB各1bitの8色という仕様ですが、横に対して縦のドット数が小さいですね。VGAタイミングのサイトだと640x400というものはあっても、640x200というサイズはありません。

画面が横長に歪であることには理由があり、アドレス空間が16bitであることが関係していると思われます。640x400にすると、RGB各1bit(2^3=8色)だと、メモリに対して8bitアクセスの場合、96,000アドレスとなり、アドレスラインは17bit必要となり、通常の8bitマイコンの16bitアドレス空間として1bit足りません。しかたなく解像度を半分の640x200にすれば、3原色で48,000アドレスとなり、アドレスラインは16bit空間に入ります。

先のFIFOを用いたデザインを再利用して、タイミングだけを変更しようとしたのですが、再検討ついでにFIFOが削除できたので、そのデザインを再利用します。これだと計算が簡単で、dual port memoryで分離されている非同期クロックドメインであるため、ビデオ系のタイミングしか検討する必要がありません。

図%%.1
図133.1 グラフィックタイミング設計用ブロック図

画面構成が640x200なので、それに基づき前回と同じSVGA(800x600)のタイミングで設計することにします。

Space Invadersの画面設計を示します。左が論理画面、右が物理画面です。SVGAの物理画面の中央に論理画面を配置し、適宜拡大します。論理画面が256x256と小さいので、縦横2倍の拡大表示を行います。

図%%.2
図133.2 Space Invadersグラフィックタイミング設計図
次に今回の画面設計を示します。SVGAの物理画面のタイミングは同じで、論理画面のサイズが異なり、縦のみ2倍の拡大表示を行います。
図%%.3
図133.3 今回のグラフィックタイミング設計図

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

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ボードの改版 (2)

posted by sakurai on June 9, 2019 #110

あまりにもPCB製作が安いので、4層板も試作してみました。PCB業者は前回と同様Bocktechです。今回は、PCB製造に7.78日と4層のせいかかなりかかりました。PCB(SMDのみ)実装に0.90日、配送(DHL)に6.13日と、ネットでの支払い完了から数えて到着まで14.81日かかりました。またコストは、送料込み合計92.02 USDで、その内訳はPCB製造が42.19 USD、PCB実装に29.83 USD、配送(DHL)に20.00 USDです。

完成した回路図を図110.1に示します。EAGLEにより作図しました。UltraZedボードとUltra96ボードの兼用であるため、電源のORをショットキーバリアダイオードで取っています。どちらの電源がONしているかを2色LEDの色で表示しています。初版から比べてリセットSWとDIP SWを追加しました。

図110.1
図110.1 論理回路図

PCBアセンブリはSMD部品2個のみを実装してもらいました。garberデータの他にBOMのエクセルファイルをアップロードします。PCBアセンブリ費用29.83 USDの内訳は、部品費6.64 USD、セットアップ費20.00 USD、組み立て費0.92 USD、サービス費2.27 USDとのことでした。2枚SMD実装してもらって29.83 USDなら苦労してハンダリフローや手付ハンダをしなくても良いかもしれません。

図110.2
図110.2 PCB BOM

Boktechにより5枚を製造し、2枚をSMD実装したPCBです。

図110.3
図110.3 PCB表面

図110.4
図110.4 PCB

組み立てを実施したPCBです。電源や主要信号にテストポストを立てています。


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

Ultra96toPMODボードの改版

posted by sakurai on April 15, 2019 #97

Bocktechという会社にオーダーしていたPCBが届きました。 このメーカーだと、PCB製造に2.66日、PCB実装に1.02日、配送(DHL)に2.00日と、ネットでの支払い完了から数えて、わずか5.68日しかかかっていません。

それなのに、値段は送料込み合計54.83 USDと最安でした。その内訳は、PCB製造が1.00 USD、PCB実装に29.83 USD、配送(DHL)に24.00 USDとなっています。

後は品質がどうかということなので、部品を実装して、動作チェックしてみましたが、特に問題無く動作しました。2層なので電源ノイズは小さくない(300~400mVp-p)ですが、これは会社の問題では無いです。

総じて価格は最安、納期は最短ということで、当面この会社のサービスを利用することになりそうです。

図97.1
図97.1 PCB

試作なのでPCBは5枚オーダーしました。

図97.2
図97.2 PCB基板表面

そのうちの2枚にSMDを実装しています。最低の実装数量が2枚となっているためです。

図97.3
図97.3 PCB基板裏面

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

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によるレンダリング

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

FSMのダイレクトリターン

posted by sakurai on April 4, 2019 #95

さて、非リーフFSMコールの後、リーフコールがある場合は、単純に前記シーケンスの組み合わせとなります。図で示すと図95.1のようになります。

図95.1
図95.1 非リーフコールからリーフコール

ここで結構見られるのが、リーフを呼んで戻った後、何もせずにさらにcallerに戻るパターンです。これを実現するより効率的な方法として、ダイレクトリターン手法があります。これを図95.2に示すと、リーフをコールする前にスタックから戻り番地を取り出しreturnに入れ、リーフへジャンプします。リーフからは知らずにリターンすると、ダイレクトリターンが行われます。

図95.2
図95.2 ダイレクトリターン

特殊な場合として、上記のようにパラメータ設定だけしてリーフにジャンプするような場合は、そもそもリーフであるため、以下の図のような呼び出しとなります。

図95.3
図95.3 ダイレクトリターン

例として、残機表示サブFSMは、(リーフである)copyAreaを呼び出すので、returnを破壊するため非リーフですが、その後のシーケンスでcopyAreaを呼び出しダイレクトリターンを行います。その際には図95.3のダイレクトリターン手法は取れないため、図95.2のダイレクトリターン手法を取っています。


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


ページ: