PIC32MZ PROJECT(1) |
更新日:2022年6月10日 |
|
PIC32MZ PROJECT始動 |
少し前に発表させて頂いた新システムの正式名称が「PIC32MZ PROJECT」に決定いたしました。簡単にポイントを記します。 1)画面サイズ640x480ドットのVGA出力 2)PIC32MXbox-WIDEのソフトにも対応 3)バックカラーを4色の内から1色を選択 の大きく三つです。画面サイズからPIC32MXでは能力不足になりますので、PIC32MZを使用します。RAMも大きいので全く心配はありません。そしてクロックも200MHzにアップしているので処理も早くなるはず。 |
しかしながらここに大きな落とし穴があったのです。以下にPIC32のHARMONY CONFIGで生成されるクロック設定画面で説明いたします。私の理解の範囲なので間違っていたらごめんなさい。まずPIC32MZよりシステムクロックは全てのクロックのベースにはないということです。例えばCPUクロックはPBCLK7を使用して200MHzとなっています。これはPIC32MXの約2倍にアップしています。 |
これまでの経緯は PIC32MX HARMONY へ |
(CPUクロック:PBCLK=200MHz) |
このスピードなら640x480ドット画面への描画で転送データが今までの倍になっても耐えられると勝手に思っていました。しかしプログラムを実行してみると全く2倍にはなっていませんでした。これでは遅すぎてゲームになりません。良く調べるとクロックは別にあることが判明しました。PICからCPLDへデータを転送するにはI/Oポートを叩くのが主な仕事です。データが倍になって処理時間も倍になりました。これは何故か。クロックが異なるのです。 |
(I/Oクロック:PBCLK4=100MHz) |
I/Oを叩くクロックはPBCLK4で100MHzにしかなっていません。構造上これはどうにもならないのです。これではPIC32MXと同じではないですか。私は数日考えました。そこで導かれたものとは。そうです、今まで8bit単位でI/O出力していたのを16bit出力することでデータが倍になっても同じ時間で処理出来るのではないかと。 |
(640x480ドットのVGA出力ブロック図) |
画面の構成上2Mbit分のSRAMエリアが必要になりますが、ビット幅が16bitのものを使うことで実現出来ると考えました。早速16bit幅の2Mbit SRAMを探しましょう。 |
(CYPRESS製2Mbit 16bit幅 SRAM) |
Mouserさんであっさりと見つかりました。8bit幅のものの兄弟品でしょうか。ハイスピード10ns品で電源電圧は3.3Vです。 |
(SRAMのピン配置) |
(2Mbit 16bit幅 SRAM着弾) |
USAから一週間程度で着弾です。送料が結構高いので今回も2個の購入としました。半導体不足の世の中でありながらこうして最速で部品入手出来るMouserさんに感謝です。 |
データが16bit幅になるとどうなるのか。私の場合16色インデックスカラーを採用していますので、16bitですと4ドットの描画が可能です。この場合のCPLDの動作をまとめてみました。 |
(データ16bit幅の横640ドット表示のタイミングチャート) |
データが16biy幅になったのでCPLD内部のタイミングも16回で一周するようにタイミングを見直しました。基本の動作は全く変わっていませんのでこの辺りを書き直せばCPLDもなんとか動きそうな感じがします。というかこのタイミングで正しく動くのを確認済みです。 |
(CPLD_SRAM_VGA_電源回路) |
データが16bit幅になっているのでPICとの接続もピン数が増えています。一応CPLD基板は過去のトランジスタ技術の付録のものです。この回路は現在基板発注をしていますので、後日公開出来ると思います。 |
(CPLDの内部構成) |
CPLD内部の構成図です。7種類のモジュールで出来ています。詳細については後日公開いたします。現在細かい部分を詰めています。データが16bit幅になっている部分のタイミングを改造しました。我ながら大変良く出来ました。 |
(CPLD内部のロジック間配線) |
今回も「デジタルは裏切らない」を実感しました。正しいロジック設計には正しい回答が得られます。このサイズのCPLDは本当に重宝しますよね。 |
(CPLDのピンアサイン) |
追加のピンを新しく割り当てています。基本のピン割り当ては過去と全く同じです。 |
(回路合成完了) |
ロジック使用率は86%でした。かなり詰まってきました。でもこれくらいのサイズが趣味には丁度良いかと。MAX2のチップがどこかに転がってないかなあ。 |
(PIC32MZマイコン) |
今回よりPIC32MZマイコンを使用します。RAMが大きいので640x480ドットの世界を充分に描けることが出来ます。PIC32MZは秋月さんより購入しました。現時点で1種類しか選べませんので迷うことはないと思います。0.4mmピッチですが、変換基板に載せてなんとかはんだ付け出来ました。 |
(PIC32MZのマイコンカード側回路図) |
まずはユニバーサル基板に組んで動作を確認することにします。うまく行けばプリント基板化したいと思います。MZマイコンになったことで単価も上がりましたが、フラッシュROMの容量も増えたので1ゲーム1マイコンではなく、1マイコンに複数ゲームを入れることも考えています。効果音はひょっとしたらPIC32MZマイコンからも出せるとは思いますが、まずは従来通りに効果音用にPIC24Fマイコンを搭載します。 |
(PIC32MZマイコンのポート割り付け) |
将来的な配線の関係上、I2Cのポートを移動しました。と言ってもマイコンがMXからMZに変わっているのであんまり関係なかったかもです。でもプログラミングするときは重要です。PIC32マイコンはHARMONYで諸設定を行うのでとても使いやすくなっています。 |
(PIC32MZ PROJECTをまずはバラック状態で確認) |
一部基板化した物も使用してバラック状態で動作を確認。CPLDのモジュールに若干の修正は残っていますが、まずは大きな難関を超えたと思っています。640x480ドットの世界の完成に向けて開発を進めて行きたいと考えます。 |
(ラーメン状態の2Mbit SRAMへの配線) |
バラック状態でまず判ったことはCPLDとSRAMの配線が長すぎてかなりラーメン状態になっていることです。CPLDのプログラムが悪いのかかなり悩みましたが、基板化すれば大丈夫だろうと決心して開発を進めてきました。多分大丈夫です。 |
(PIC32MZマイコンカード) |
マイコンカードの接続ピン数は40ピンになりました。16bitバスになったので仕方がないことです。その分空き端子も出るので将来を考えて有効に配線をする予定です。まあ色々使えると思います。でもまだその効果は発揮されてはいません。 |
(IN_SETの設定) |
バックカラーを4色から選べるようになったことで少し不便な部分もありますので、IN_SET端子で画面下32ドットを黒のままにするのか、バックカラーに合わせるのかを設定出来るようにしています。32ドットのエリアはCPLDで固定してありますので、私が作製するゲームしか使えないかもですね。以下は開発中の画面ですが、IN_SETがどういう意味か理解して頂けると思います。 |
(開発中画面:IN_SET=0の例) |
(開発中画面:IN_SET=1の例) |
毎度おなじみの「PLANET PILOT 2022」ですが、現在PIC32MZ PROJECT用に鋭意開発中です。画面が縦に広がったので新しいアイテムも加えていきたいと考えています。あくまでも自己満足の世界の話ですが。これからもご期待下さい。 |
|
「PIC32MZ PROJECTの表紙」へ戻る |
|