ご希望の方は、お問い合わせページから資料閲覧パスワードをお問い合わせ頂きログインをお願い致します。アカウント名は"opendocument"です。2019Vivadoによる6809サブシステム回路図です。RESETが負論理で現れますが、正論理なので与えるリセットの論理に注意します。前稿のプログラムを6809で実行した結果を下図に示します。6809は2MHzで動作させています。画面書き換えが上から下に進むのがはっきり見えますが、これは2MHz動作の6809だからであり、8MHzに上げて見ると書き換えがほとんど見えなくなるほど速くなりました。00;というテキストファイルのCOEファイルが生成されるので、これをROMデータとしてFPGAに組み込みます。本プログラムはVRAMのアドレスにデータを書き込み、次のアドレスに別のデータを書き込みという処理を繰り返し、VRAMをランダムなデータで埋めるものです。RGBで異なるデータを書き込むために、カラフルな縞模様を表示します。ここでは使用するソフトウェアの関係上6809を取り上げます。Coresで、VivadoにはRTLとして取り込みます。https://opencores.org/projects/6809_6309_compatible_core開発ツールが必要ですが、6809アセンブラを以下から入手します。start;endとして、以下のようにアセンブルします。test.o以下のアセンブルリストのようにアセンブルされ、合わせてバイナリファイルが生成されます。2019SVGAの物理画面のグラフィックタイミングは変更しないので、RTLはタイミングに関してはほとんど変更ありません。以下は元のRTLのグラフィックタイミング定義部分です。Verticalこのうち、論理画面のサイズについて、赤字のように修正します。Invadersと異なり、Xが2の階乗でないため、アドレスカウンタがXとYについてきれいにフィールドで分かれません。従って、水平、垂直カウンタとは別に、VRAMアドレスカウンタを設け、EHD&EVDのディスプレイタイミングでカウントイネーブルをかけます。このようにすれば、表示期間のみアドレスが進み、穴が空く(表示の隣り合うビットが物理的には離れたアドレスに位置する)ことはありません。アドレスカウンタを偶数用、奇数用に分け、水平ラインの偶数と奇数でカウンタを進み分けることで、同じアドレスを2回出力することにします。これで縦の2倍拡大が行えます。実際に動かしてみると、データ表示のビット並びが逆順になっているようです。memoryの内部に8:1のマルチプレクサがあるはずです。表示されたビットの並びが思ったのと逆だったので、アドレス下位3bitを反転することで正しい並びになりました。2019概略が決定できたので、詳細設計を行います。各パラメータはVGAタイミングのサイトで決定すると、以下の表のようになります。タイミング表これに基づき、水平、垂直のタイミングチャートを書くと、以下の図のようになります。Timing)を示していますが、実際には不要であるため、信号は存在しません。Timing)を生成し、画面のブランキングを行っています。前稿の物理画面の中に論理画面が存在しますが、論理画面に対するディスプレイタイミングが、このEHD及びEVDとなります。2019ある目的があり、グラフィックメモリシステムの設計を再度行います。前回設計しているので、パラメータを少々変更するだけで簡単にできそうな気がします。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が削除できたので、そのデザインを再利用します。memoryで分離されている非同期クロックドメインであるため、ビデオ系のタイミングしか検討する必要がありません。画面構成が640x200なので、それに基づき前回と同じSVGA(800x600)のタイミングで設計することにします。Invadersの画面設計を示します。左が論理画面、右が物理画面です。SVGAの物理画面の中央に論理画面を配置し、適宜拡大します。論理画面が256x256と小さいので、縦横2倍の拡大表示を行います。次に今回の画面設計を示します。SVGAの物理画面のタイミングは同じで、論理画面のサイズが異なり、縦のみ2倍の拡大表示を行います。2019前稿で設計したグラフィックディスプレイコントローラですが、あとから振り返るとFIFOが無駄であることに気づきました。リファクタリングします。リファクタリング前のクロックドメインが3つあるのに比べて、リファクタリング後は2つに減っています。それだけでなく、FIFOとメモリをリードしてFIFOに入れる回路の2つを削減しています。memoryが本来FIFOの役割を果たすためです。リファクタリング後の回路FIFOとメモリ読み出し回路を削減し、メモリ読み出し回路から出ていたメモリアドレスをグラフィックコントローラから出す変更により、問題なくリファクタリングが達成できました。2及び4に関して、0.5がどこにいったかが謎でした。Editionの規格式という式が出ており、無くなったことが謎だった0.5が戻っています。どちらかと言えば、こちらのほうが(少しだけ)正しい式です。結論としては両者とも誤っているのには違いないのですが、謎の部分が無くなったことで、規格式の誤りが明確になりました。誤りの原因は、初期状態において、IFまたはSMのいずれかがアンリペアラブルと固定している点です。実際に弊社がこの条件で計算すると、図130.1の式と一致します。本来は初期状態においてIF、SMの両方ともリペアラブルとしなければなりません。Editionの規格式の誤りは以下の2か所あると思われます。2019FPGAの設計トライアルとしてスペースインベーダを取り上げたブログ記事を書いてきましたが、最初はAvnetのMicroZedボードで、PMOD-VGAとPMOD-I2Sのインタフェースを購入して、入力はボード上のスイッチを使用していました。ボードが発売されたので、さっそく購入し移植しようとしましたが、Ultra96はPMODインタフェースを搭載していないため、インタフェースボードを設計せざるを得なくなりました。そのため、Eagleを使用して、PCBを設計し、さらに格安でPCBを製造するベンダを探しました。中国からボードが送られて来て、それに部品を実装し、今度はジョイスティックによりゲームを動作させることができました。この経緯をQiitaに投稿しました。Qiita合わせてYouTubeにも上げています。全ての部品を二重化しておき、片方が壊れてももう片方がそれを引き継ぐことができるという、スタンバイシステムについて平均PUD計算する必要があります。常に両方が稼働する冗長(2重化)と異なり、主系がフォールトしたときに初めて従系が稼働するものです。IF、SM1からなるサブシステムがあり、IF、SM1の両方ともアンリペアラブルだとします。それぞれの故障率は、$\lambda_\text{IF}$及び$\lambda_\text{SM}$とします。上記のように、IFもSM1も$t=0$から同時に動作している冗長系ではなく、時刻$t$において主系であるIFがダウンし、即座にスタンバイ系であるSM1が引き続いて動作するものとします。以上から、前稿の2重化での簡易計算と完全一致します。