ソラマメ
QRコード
QRCODE
アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
オーナーへメッセージ

2010年07月27日

MPIB超入門(その1)

 【「MPIB」とはなんぞや?】

 という話は、語りだすとそれだけで「(その18)」位まで一気に行ってしまい、
今のペースですと、その話が終わるのは11月頃になってしまう計算になります。
しかも、「(その12)」くらいまでは、自慢話と、宗教的ウンチクと、下ネタ
エンエンと続くだろうと言うのは想像に難くありません。
こうなりますともう、10月ごろには1日のPVが、「3」とかになっていて、
顕著な読者離れ状態に陥ってしまうのは火を見るよりも明らかです。

 しかし、それよりも何よりも問題は、11月まで経営がもつのか…
と言うことですが、そう問われると、私としては今のところ

「う~ん・・・・」

としか言いようが無いというのが現実で、これはもう、一刻も早く本題に突入するに限ると、
判断せざるを得ません。

 従いまして、「MPIB」とはなんぞや?と言うことについては
ここでは、3つだけ羅列するに留めたいと思います。

1、MPIBとは、マルチ・ポート・イメージ・バッファの略号です。
2、MPIBとは、画像用フレームバッファシステムを構築するためのIPです。
3、MPIBは、内蔵デュアルポートメモリ付きのFPGAと、SDRAMと、クロックがあれば構成できます。




 【MPIBを埋め込んだDE0】

 ED0をお持ちのかたは、以下のSOFファイルMPIBforDE0_Default01.sof)をダウンロードして、コンフィグレーションしてみてください。

 http://dsoh.jp/PTSG/MPIBforDE0_Default01.sof



 【MPIB機能その1・ウィンドウ操作】

 上のSOFファイルをUSBからDE0に書き込むと、どうなりましたでしょうか?
おや?と、思われたかもしれません。

MPIB超入門(その1)

「いっこも、なんにも変われヘんやん!?」

と…

 その通り、見かけは何も変わりません
変わらないはずです・・・
もし、変わったかたがおられたら、なんか問題が起こっているので、
そのまま我慢して、もう少し待ってください。

 でも、内部は大きく変わっています。
どこが変わったかと言いますと、Terasicのデモ画面は、以前はTerasicのサンプル回路
VGAに対して直接出して
いました。しかし、このSOFでは、Terasicのサンプル回路と、VGA出力の間にMPIBが挟まっています。
つまり、この度のTerasicのデモ画面はMPIBによって一度SDRAMの中に書き込まれてから、再度、MPIBによってSDRAMから読み出されて表示されています。

 さて、必要も無いのに、この様なまどろっこしい経路を経て表示させて、
一体何の得があるのかと言われますと、これが、実に様々、数々の得があるわけです。
今日はその一つ目、ウィンドウ操作のお話です。


 まず、MPIBforDE0_Default01.sofDE0に書き込まれたら、このブログではすっかり御馴染みの、In-System Memory Content Editor
起動してみてください。

 MPIB超入門(その1)

 下のようなのが現れたと思います。
 MPIB超入門(その1)

 もし、現れなかったら、上の赤で囲った部分がUSB-Blasterになっているかどうか、確認してみてください。

 まずは、8種類あるパラメータを、一つ一つその上でF5キーを押して読み込んで見ましょう。

 MPIB超入門(その1)

 この様な数値になっていますでしょうか?
もし、なっていなければ、デモ画面の表示が変なことになっていると思いますが、そのときはとりあえず、ここの数字を図の通りに入力しなおすと回復します。
 入力はそこにカーソルを持っていき、数値を打ち込んで、F8キーです。


 さて、ここでまず、Terasicのデモ画面は、今一体どういうところに書かれ、そして読まれているのかということを説明します。

 まず、SDRAMの中に、「フレーム」と呼ぶ、一つの画面を表す入れ物が用意されています。今回のSOFでは、フレームは1024ピクセルx1024ピクセルの正方形の画面です。

 MPIB超入門(その1)

 Terasicのデモ画面は640×480ピクセルの画像なので、これが1024ピクセルx1024ピクセルの画面の中のどこかにスポッと収まっているわけです。
で、どのように収まっているのかというと、今は下のように収まっています。

 MPIB超入門(その1)

 この、書き込む位置を決めているのが、以下の4つのパラメータです。

wAHP → 水平ポジション (今の値:0)
wAVP → 垂直ポジション (今の値:0))
wAHL → 水平ピクセル数 (今の値:280h → 640)
wAVL → 垂直ピクセル数 (今の値:1E0h → 480)

 ※In-System Memory Content Editorでは数値は16進数で表現されます。


 ここでまず、試しに書き込む位置を変えてみましょう。
水平ポジション(wAHP)に、16進数の140h(つまり10進数の320)を入れてみます。
140と書いて、F8キーです。

 MPIB超入門(その1)

すると…
ほらっ!

MPIB超入門(その1)

このように、書き込む位置右の方に320ピクセル移動します。
左側に残っているのはさっきまでその位置に描かれていていた画像です。

 これは、SDRAMの中の1024×1024ピクセルのフレームの中では何が起こっているかと言うと、多分、こんなことになっているハズなわけです。
MPIB超入門(その1)

しかし、今はまだ、表示できるのは、1024×1024ピクセル中の、640×480ピクセルの領域で、フレームの一部分だけです。
それで、どの部分が表示されているかと言うと、左上のピクセルが(0,0)の位置から始まる640×480ピクセルの範囲なので写真のような表示となっているわけです。


 ちなみに、書き込み位置を垂直方向にもずらしてみましょう。
垂直ポジション(wAVP)に、16進数のF0h(つまり10進数の240)を入れてみます。
F0と書いて、F8キーです。

MPIB超入門(その1)

さて…、どうなるでしょう?

MPIB超入門(その1)

おおおっ!
こんなことに、なってしまいました…

これは、今どうなったかと言うと、水平方向に加えて、さらに垂直方向にも書き込み位置がずれたために、フレームの中では、多分、こんなことになっているのでしょうね。

MPIB超入門(その1)

 なんかこう、ALTERAは、「ALTE」などと、中途半端な状態で3つも表示され、肝心のTerasicのロゴは、欄外に押し出されてしまいましたね…
こんなままだとあまりに申し訳ないので、何とかして差し上げなければなりません。

幸い、私の予想が正しければ、画像の見えない部分もフレームバッファに残っているはずなので、表示位置を移動させればいいということです。

 この、表示位置を決めているのが、以下の4つのパラメータです。

rAHP → 水平ポジション (今の値:0)
rAVP → 垂直ポジション (今の値:0)
rAHL → 水平ピクセル数 (今の値:280h → 640)
rAVL → 垂直ピクセル数 (今の値:1E0h → 480)

 では、早速移動させて見ましょう。
まず、表示位置の水平ポジション(rAHP)に、16進数の140h(つまり10進数の320)を入れてみます。
140と書いて、F8キーです。

MPIB超入門(その1)

すると…

MPIB超入門(その1)

おおおお!
アルテラロゴの復活です!

さて、次はTerasicのロゴ救出のために、
さらに表示位置を垂直方向に動かします。
垂直ポジション(rAVP)に、16進数のF0h(つまり10進数の240)を入れてみます。
F0と書いて、F8キーです。

MPIB超入門(その1)

さあ、無事復帰しますでしょうか!

MPIB超入門(その1)

 来ました!
これで、また元通りです。

 おっと!
見かけは元通りですが、実は、大きな違いが一つあります。
今見ているこのデモ画面は、つまり、こういうところからの表示になっているのです。
MPIB超入門(その1)



 8つのパラメータには、どんな数値を入れていただいても構いません。
多分、やってみると画面がぐちゃぐちゃになったりしますが、壊れることはありませんので、泥んこ遊びのつもりで、ぐちゃぐちゃを楽しんでみてください。
 でも、数値と動作の間には、必ず意味と、理由があります。
その数値で、なぜそのような動作になるのか悩んでみていただけると楽しいかと思います。

MPIB超入門(その1)


 では、また次回をお楽しみに!



 *******************************
 DSOh!  大中庸生
       URL: http://dsoh.jp
      e-mail: ptsg@dsoh.jp

       SecondLife:Tsuneo OHare
 *******************************





Posted by 大中庸生 at 18:53│Comments(2)
Comments
はじめまして。

最近、DE0購入した者です。
*.sofをDLして、SystemMemoryContentEditorで
いろいろいじって遊びました。

ちょうど、
自作CPU <-> VRAM(SDRAM) <-> VGA出力 の
方法を模索していたので参考になりました。
Posted by げっちゃん at 2011年07月26日 00:29
げっちゃんさん、はじめまして!
ご参考にしてくださって、大変嬉しいです。

自作CPU、良いですね!
私も「PTSG」にCPUライクな機能を持たせてみましたが、
”嫁さんにFPGA設計をしてもらう”というコンセプトから
逸脱しそうなシロモノになりましたので、
『これで良いのか!?』と悩んでいるところです。

しかし、それにしても、自作CPUは良いですよね。
Posted by 大中庸生 at 2011年07月27日 22:28
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。