スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

DE1-SoCにLCD(800x480)をつなげてX11を動かしてみた

DE1-SoCにHUMANDATA製 UTL-021(Terasic LTM 4.3'LCD コンパチブル)をつなげてX11のXserverを動かしてみました。



使用OSは
Linux linaro-ubuntu-desktop 3.12.0-00307-g507abb4-dirty #8 SMP Mon Jan 20 13:42:47 CST 2014 armv7larmv7l
armv7l GNU/Linux

Terasic のサイトで公開しているものです。

LCDのフレームバッファにはSDRAM(32Mx16/150MHz)を使っています。そしてHPS-to-FPGA Bridge 経由でARM側からSDRAMにアクセスしています。

Qsysの構成は以下の通り:
Qsys


LCD_FrameBufferというコンポーネントを新たに作成しています。このコンポーネントの中で、HPS-to-FPGA Bridge のAXIバスからSDRAMコントローラへの制御信号の生成を行っています。

SDRAMは、またLCDのフレームバッファになっており800x480xRGB-24bitのフルカラーの情報を保持しています。

一方、Linux側では、xorg-server-1.12.2(現時点での最新版)をダウンロードしてきてXfbdev が作成される様に configure しておきます。make; sudo make install しますが
その際、xorg-server-1.12.2/hw/kdrive/fbdev/fbdev.c のfbdevInitialize関数内でpriv->fb_base 変数にAXIバス空間がmmapされる様に変更しています:

 if( (fd_LCD=open( "/dev/mem", (O_RDWR | O_SYNC)))
   == -1){
    ErrorF( "ERROR: /dev/mem\n");
   return(FALSE);
 }

 priv->fb_base = (char *) mmap( NULL,
        priv->fix.smem_len,
        (PROT_READ|PROT_WRITE),
        MAP_SHARED, fd_LCD,
        ALT_AXI_FPGASLVS_OFST);

/dev/fb0のようなデバイスドライバを作らずに済むように、少し特殊な事をしています。

最後に、SDRAMは150MHzで駆動していますが、x16bit構成のためフルカラー24bitRGBを表示するためにメモリの帯域の6割くらいを消費しています。そのためAXIバスからのSDRAMのアクセスに時間がかかり、結果的にxengineのスコアがかなり低くなっています。

参考:FPGAマガジン No.5 pp116-127,
   http://www.altera.com/literature/hb/cyclone-v/cv_54005.pdf
スポンサーサイト

Beagle Bone Black に4.3'LCDをつなげる

秋月電子で3000円で販売されている 4.3inch(480x272)液晶ディスプレイATM0430D5 をBBBにつなげてみたので、その手順を簡単にまとめてみました。

先ず、BBBの心臓部AM3358は HDMI出力とLCDコントロール用の信号を同一のピンで共有しているので、HDMI出力機能をdisableする必要があります。disableするには、以下のサイトを参考にして、uEnv.txtファイルを書き換えます。

http://www.logicsupply.com/blog/2013/07/18/disabling-the-beaglebone-black-hdmi-cape/

次に、ssh でBBBにlogonして、

# cd /sys/devices/bone_capemgr.*
# echo BB-BONE-LCD4-01 > slots

と入力します。

以上の操作で、LCD上に以下のような画面が現れます。

BBB LCD


※配線について。

BBB側            LCD側
LCD_PCLK(P8.28) <--> CLK
LCD_AC_BIAS_E(P8.30) <--> DE
LCD_DATA <--> R,G,B
(RGB565信号を適宜RGB24bitにつなげてください。写真ではRGBの各MSBのみつなげてます。)

MacPlusToo のSpartan-3 Starter Boardへの移植

old Mac(Mac plus)のレプリカをFPGA(DE1)でインプリメントした、MacPlusToo( http://www.bigmessowires.com/plus-too/ )※1 というものを先日見つけたので、DIGILENT社製Spartan-3 Starter Board(XC3S1000版、以下S3-Boardと略します)に移植してみました。

MacPlusToo 1



移植にあたってのポイントは、メモリ(RAM,ROM)、ファイルシステム(OS)関連をどうするかにあります。
オリジナルのDE1版では、オンボード4MBのフラッシュメモリ上に128KBのROMとOS(1.6MB)を載せていますが、S3-Boardには4Mbit(512KB)のPlatform Flash(XCF04)と1MBのSRAMしか載ってません。
そこで、Mac側の128KBROMはPlatform Flash に置いて、OSは自作の外付けSDカードに置く事にしてみました。
(Platform Flashのイメージ(.mcs)作成と読み込みには、XAPP694を使用させて頂きました。)

.bitファイルと.mcsファイルを公開しますので、ご興味のある方は自己責任でお試しください。

zipファイル(.bit .mcs)

(.mcs ファイルはPlatform Flashの方に書き込みますのでご注意ください。また、Platform Flashの内容をSRAMにロードするために、JP1をFlash Read側にセットしてください。)

SDカードI/Fの結線図は以下の通りです。

[A2 connector]

A2-Pin4 -- SD_DAT3(CS)
A2-Pin6 -- SD_CMD(DI)
A2-Pin10 -- SD_CLK(SCLK)
A2-Pin14 -- SD_DAT0(DO)

MacPlusToo 2


SDカードへのOSイメージ書き込みは、ubuntuなどの上で、※1リンク先のDisk608-800K.binというファイルを

# dd if=Disk608-800K.bin of=/dev/sdc

のように書き込みます。(/dev/sdc は環境により異なりますので適宜SDカードのデバイスノード名に変更ください)

PS2マウスをつなげて、S3-BoardのBTN1を押すことでブートが始まるはずです。

Qsysを使ってDE0でVGA表示

Quartus II (12.0sp2) で使えるQsysの勉強をしてみました。
例題は、NiosII にVGA(640x480)表示機能を持たせるというものです。
FPGAボードにはDE0を使いました。

Qsysの構成は以下の通り:
Qsys構成

SDRAMはフレームバッファ用、onchip_memoryにNiosIIのプログラムを置きます。
一番下のVGA_CLKというモジュールはVGA用自作クロックジェネレータです。


sgdma_0の設定は以下の通り:
sgdma_0

Read burstcount signal widthが8ビットになってますが6ビットで充分かも。

vga_sync_generator_0の設定は以下の通り:
vga_sync_generator_0

フロントポーチなどの数値は、適当なので、モニタによっては表示がズレるかもしれません。



で、VGA表示させるためには、NiosIIからsgdmaへDMA転送命令を送る必要があるわけですが
そのプログラムは以下の通り:

NiosII側プログラム

IRQを使ってDMA命令を発行しています。



参考にさせていただいたサイト:
https://sites.google.com/site/fpgaandco/de0-nano-niosii-lcd-driver

秋月3000円液晶とSPARTAN 3E

SPARTAN 3E ボード(DW誌の付録)を使って、秋月3000円液晶にカラーバーを表示させてみました。

相変らず写真撮影が下手なので、見辛い写真になってますが、赤、緑、青、白をそれぞれ水平方向にグラデーションをつけて描画しています。

秋月3000円液晶



グラデーションの勾配が若干不自然に見えるようなので、ガンマ補正をかけたほうがいいのかな?とも思っています。

今回使ったFPGAボードは、フレームバッファ代わりに使えるメモリが載ってないので、やれる事には限界があると思います。メモリがちゃんと載ったFPGAボードを用意して、何か面白い動画を表示できるよう改良を加えて行きたいと思います。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。