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に書き込むと、どうなりましたでしょうか?
おや?と、思われたかもしれません。
「いっこも、なんにも変われヘんやん!?」
と…
その通り、見かけは何も変わりません。
変わらないはずです・・・
もし、変わったかたがおられたら、なんか問題が起こっているので、
そのまま我慢して、もう少し待ってください。
でも、内部は大きく変わっています。
どこが変わったかと言いますと、Terasicのデモ画面は、以前はTerasicのサンプル回路が
VGAに対して直接出していました。しかし、このSOFでは、Terasicのサンプル回路と、VGA出力の間にMPIBが挟まっています。
つまり、この度のTerasicのデモ画面はMPIBによって一度SDRAMの中に書き込まれてから、再度、MPIBによってSDRAMから読み出されて表示されています。
さて、必要も無いのに、この様なまどろっこしい経路を経て表示させて、
一体何の得があるのかと言われますと、これが、実に様々、数々の得があるわけです。
今日はその一つ目、ウィンドウ操作のお話です。
まず、MPIBforDE0_Default01.sofをDE0に書き込まれたら、このブログではすっかり御馴染みの、In-System Memory Content Editorを
起動してみてください。
下のようなのが現れたと思います。
もし、現れなかったら、上の赤で囲った部分がUSB-Blasterになっているかどうか、確認してみてください。
まずは、8種類あるパラメータを、一つ一つその上でF5キーを押して読み込んで見ましょう。
この様な数値になっていますでしょうか?
もし、なっていなければ、デモ画面の表示が変なことになっていると思いますが、そのときはとりあえず、ここの数字を図の通りに入力しなおすと回復します。
入力はそこにカーソルを持っていき、数値を打ち込んで、F8キーです。
さて、ここでまず、Terasicのデモ画面は、今一体どういうところに書かれ、そして読まれているのかということを説明します。
まず、SDRAMの中に、「フレーム」と呼ぶ、一つの画面を表す入れ物が用意されています。今回のSOFでは、フレームは1024ピクセルx1024ピクセルの正方形の画面です。
Terasicのデモ画面は640×480ピクセルの画像なので、これが1024ピクセルx1024ピクセルの画面の中のどこかにスポッと収まっているわけです。
で、どのように収まっているのかというと、今は下のように収まっています。
この、書き込む位置を決めているのが、以下の4つのパラメータです。
wAHP → 水平ポジション (今の値:0)
wAVP → 垂直ポジション (今の値:0))
wAHL → 水平ピクセル数 (今の値:280h → 640)
wAVL → 垂直ピクセル数 (今の値:1E0h → 480)
※In-System Memory Content Editorでは数値は16進数で表現されます。
ここでまず、試しに書き込む位置を変えてみましょう。
水平ポジション(wAHP)に、16進数の140h(つまり10進数の320)を入れてみます。
140と書いて、F8キーです。
すると…
ほらっ!
このように、書き込む位置が右の方に320ピクセル移動します。
左側に残っているのはさっきまでその位置に描かれていていた画像です。
これは、SDRAMの中の1024×1024ピクセルのフレームの中では何が起こっているかと言うと、多分、こんなことになっているハズなわけです。
しかし、今はまだ、表示できるのは、1024×1024ピクセル中の、640×480ピクセルの領域で、フレームの一部分だけです。
それで、どの部分が表示されているかと言うと、左上のピクセルが(0,0)の位置から始まる640×480ピクセルの範囲なので写真のような表示となっているわけです。
ちなみに、書き込み位置を垂直方向にもずらしてみましょう。
垂直ポジション(wAVP)に、16進数のF0h(つまり10進数の240)を入れてみます。
F0と書いて、F8キーです。
さて…、どうなるでしょう?
おおおっ!
こんなことに、なってしまいました…
これは、今どうなったかと言うと、水平方向に加えて、さらに垂直方向にも書き込み位置がずれたために、フレームの中では、多分、こんなことになっているのでしょうね。
なんかこう、ALTERAは、「ALTE」などと、中途半端な状態で3つも表示され、肝心のTerasicのロゴは、欄外に押し出されてしまいましたね…
こんなままだとあまりに申し訳ないので、何とかして差し上げなければなりません。
幸い、私の予想が正しければ、画像の見えない部分もフレームバッファに残っているはずなので、表示位置を移動させればいいということです。
この、表示位置を決めているのが、以下の4つのパラメータです。
rAHP → 水平ポジション (今の値:0)
rAVP → 垂直ポジション (今の値:0)
rAHL → 水平ピクセル数 (今の値:280h → 640)
rAVL → 垂直ピクセル数 (今の値:1E0h → 480)
では、早速移動させて見ましょう。
まず、表示位置の水平ポジション(rAHP)に、16進数の140h(つまり10進数の320)を入れてみます。
140と書いて、F8キーです。
すると…
おおおお!
アルテラロゴの復活です!
さて、次はTerasicのロゴ救出のために、
さらに表示位置を垂直方向に動かします。
垂直ポジション(rAVP)に、16進数のF0h(つまり10進数の240)を入れてみます。
F0と書いて、F8キーです。
さあ、無事復帰しますでしょうか!
来ました!
これで、また元通りです。
おっと!
見かけは元通りですが、実は、大きな違いが一つあります。
今見ているこのデモ画面は、つまり、こういうところからの表示になっているのです。
8つのパラメータには、どんな数値を入れていただいても構いません。
多分、やってみると画面がぐちゃぐちゃになったりしますが、壊れることはありませんので、泥んこ遊びのつもりで、ぐちゃぐちゃを楽しんでみてください。
でも、数値と動作の間には、必ず意味と、理由があります。
その数値で、なぜそのような動作になるのか悩んでみていただけると楽しいかと思います。
では、また次回をお楽しみに!
*******************************
DSOh! 大中庸生
URL: http://dsoh.jp
e-mail: ptsg@dsoh.jp
SecondLife:Tsuneo OHare
*******************************
という話は、語りだすとそれだけで「(その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に書き込むと、どうなりましたでしょうか?
おや?と、思われたかもしれません。
「いっこも、なんにも変われヘんやん!?」
と…
その通り、見かけは何も変わりません。
変わらないはずです・・・
もし、変わったかたがおられたら、なんか問題が起こっているので、
そのまま我慢して、もう少し待ってください。
でも、内部は大きく変わっています。
どこが変わったかと言いますと、Terasicのデモ画面は、以前はTerasicのサンプル回路が
VGAに対して直接出していました。しかし、このSOFでは、Terasicのサンプル回路と、VGA出力の間にMPIBが挟まっています。
つまり、この度のTerasicのデモ画面はMPIBによって一度SDRAMの中に書き込まれてから、再度、MPIBによってSDRAMから読み出されて表示されています。
さて、必要も無いのに、この様なまどろっこしい経路を経て表示させて、
一体何の得があるのかと言われますと、これが、実に様々、数々の得があるわけです。
今日はその一つ目、ウィンドウ操作のお話です。
まず、MPIBforDE0_Default01.sofをDE0に書き込まれたら、このブログではすっかり御馴染みの、In-System Memory Content Editorを
起動してみてください。
下のようなのが現れたと思います。
もし、現れなかったら、上の赤で囲った部分がUSB-Blasterになっているかどうか、確認してみてください。
まずは、8種類あるパラメータを、一つ一つその上でF5キーを押して読み込んで見ましょう。
この様な数値になっていますでしょうか?
もし、なっていなければ、デモ画面の表示が変なことになっていると思いますが、そのときはとりあえず、ここの数字を図の通りに入力しなおすと回復します。
入力はそこにカーソルを持っていき、数値を打ち込んで、F8キーです。
さて、ここでまず、Terasicのデモ画面は、今一体どういうところに書かれ、そして読まれているのかということを説明します。
まず、SDRAMの中に、「フレーム」と呼ぶ、一つの画面を表す入れ物が用意されています。今回のSOFでは、フレームは1024ピクセルx1024ピクセルの正方形の画面です。
Terasicのデモ画面は640×480ピクセルの画像なので、これが1024ピクセルx1024ピクセルの画面の中のどこかにスポッと収まっているわけです。
で、どのように収まっているのかというと、今は下のように収まっています。
この、書き込む位置を決めているのが、以下の4つのパラメータです。
wAHP → 水平ポジション (今の値:0)
wAVP → 垂直ポジション (今の値:0))
wAHL → 水平ピクセル数 (今の値:280h → 640)
wAVL → 垂直ピクセル数 (今の値:1E0h → 480)
※In-System Memory Content Editorでは数値は16進数で表現されます。
ここでまず、試しに書き込む位置を変えてみましょう。
水平ポジション(wAHP)に、16進数の140h(つまり10進数の320)を入れてみます。
140と書いて、F8キーです。
すると…
ほらっ!
このように、書き込む位置が右の方に320ピクセル移動します。
左側に残っているのはさっきまでその位置に描かれていていた画像です。
これは、SDRAMの中の1024×1024ピクセルのフレームの中では何が起こっているかと言うと、多分、こんなことになっているハズなわけです。
しかし、今はまだ、表示できるのは、1024×1024ピクセル中の、640×480ピクセルの領域で、フレームの一部分だけです。
それで、どの部分が表示されているかと言うと、左上のピクセルが(0,0)の位置から始まる640×480ピクセルの範囲なので写真のような表示となっているわけです。
ちなみに、書き込み位置を垂直方向にもずらしてみましょう。
垂直ポジション(wAVP)に、16進数のF0h(つまり10進数の240)を入れてみます。
F0と書いて、F8キーです。
さて…、どうなるでしょう?
おおおっ!
こんなことに、なってしまいました…
これは、今どうなったかと言うと、水平方向に加えて、さらに垂直方向にも書き込み位置がずれたために、フレームの中では、多分、こんなことになっているのでしょうね。
なんかこう、ALTERAは、「ALTE」などと、中途半端な状態で3つも表示され、肝心のTerasicのロゴは、欄外に押し出されてしまいましたね…
こんなままだとあまりに申し訳ないので、何とかして差し上げなければなりません。
幸い、私の予想が正しければ、画像の見えない部分もフレームバッファに残っているはずなので、表示位置を移動させればいいということです。
この、表示位置を決めているのが、以下の4つのパラメータです。
rAHP → 水平ポジション (今の値:0)
rAVP → 垂直ポジション (今の値:0)
rAHL → 水平ピクセル数 (今の値:280h → 640)
rAVL → 垂直ピクセル数 (今の値:1E0h → 480)
では、早速移動させて見ましょう。
まず、表示位置の水平ポジション(rAHP)に、16進数の140h(つまり10進数の320)を入れてみます。
140と書いて、F8キーです。
すると…
おおおお!
アルテラロゴの復活です!
さて、次はTerasicのロゴ救出のために、
さらに表示位置を垂直方向に動かします。
垂直ポジション(rAVP)に、16進数のF0h(つまり10進数の240)を入れてみます。
F0と書いて、F8キーです。
さあ、無事復帰しますでしょうか!
来ました!
これで、また元通りです。
おっと!
見かけは元通りですが、実は、大きな違いが一つあります。
今見ているこのデモ画面は、つまり、こういうところからの表示になっているのです。
8つのパラメータには、どんな数値を入れていただいても構いません。
多分、やってみると画面がぐちゃぐちゃになったりしますが、壊れることはありませんので、泥んこ遊びのつもりで、ぐちゃぐちゃを楽しんでみてください。
でも、数値と動作の間には、必ず意味と、理由があります。
その数値で、なぜそのような動作になるのか悩んでみていただけると楽しいかと思います。
では、また次回をお楽しみに!
*******************************
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出力 の
方法を模索していたので参考になりました。
最近、DE0購入した者です。
*.sofをDLして、SystemMemoryContentEditorで
いろいろいじって遊びました。
ちょうど、
自作CPU <-> VRAM(SDRAM) <-> VGA出力 の
方法を模索していたので参考になりました。
Posted by げっちゃん at 2011年07月26日 00:29
げっちゃんさん、はじめまして!
ご参考にしてくださって、大変嬉しいです。
自作CPU、良いですね!
私も「PTSG」にCPUライクな機能を持たせてみましたが、
”嫁さんにFPGA設計をしてもらう”というコンセプトから
逸脱しそうなシロモノになりましたので、
『これで良いのか!?』と悩んでいるところです。
しかし、それにしても、自作CPUは良いですよね。
ご参考にしてくださって、大変嬉しいです。
自作CPU、良いですね!
私も「PTSG」にCPUライクな機能を持たせてみましたが、
”嫁さんにFPGA設計をしてもらう”というコンセプトから
逸脱しそうなシロモノになりましたので、
『これで良いのか!?』と悩んでいるところです。
しかし、それにしても、自作CPUは良いですよね。
Posted by 大中庸生 at 2011年07月27日 22:28