スポンサーサイト

上記の広告は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

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー) URL

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