MyFPGA Forum

标题: DE1 NIOS-BASED VGA Display [打印本页]

作者: rich    时间: 2009-5-13 20:07
标题: DE1 NIOS-BASED VGA Display
此範例描述如何利用DMA建立NIOS-Based VGA Display System.
C-Level API 讓使用者可在螢幕對應對的畫布(對應到SDRAM),
劃出所要的圖案或做文字輸出.


DE1_NIOS.zip (3.2 MB, 下载次数: 2235)
作者: huguangheng    时间: 2009-5-14 12:34
恩,可以参考下
作者: kc92305031    时间: 2009-5-28 13:15
2009年Altera亞洲創新大賽的南部地區演講 有了相當的收穫
趕緊來去參考一下
多謝~
作者: huguangheng    时间: 2009-5-28 15:23
2009年Altera亞洲創新大賽的南部地區演講 有了相當的收穫
趕緊來去參考一下
多謝~
kc92305031 发表于 2009-5-28 13:15



请问有演讲的资料么?
作者: kc92305031    时间: 2009-5-29 23:10
请问有演讲的资料么?
huguangheng 发表于 2009-5-28 15:23

请问有演讲的资料么?A: 有
作者: fpgaxxxx    时间: 2009-6-9 04:18
谢谢楼主了                                
作者: ynujjt    时间: 2009-7-22 10:10
谢谢分享了!!
作者: freewind123    时间: 2009-8-10 02:42
谢谢楼主分享咯~~
作者: kay54068    时间: 2009-8-18 16:28
請問要此專案要如何貼一張圖(如.bmp檔)??要使用到何種函數??請樓主指導一下,謝謝!!
作者: ynujjt    时间: 2009-8-26 11:03
谢谢楼主分享,拿去看下!
作者: xlbian    时间: 2009-8-29 06:45
谢谢分享!下来学习!
作者: jiayue198509    时间: 2009-9-13 19:24
看看  谢谢分享
作者: 兵临城下    时间: 2009-9-16 22:10
1# rich


能否把DMA控制的原理讲清楚
作者: kay54068    时间: 2009-9-28 20:30
請問我自己依rich大大提供的核心,自己重做一份,VGA會有很大的閃爍現象,這是怎麼問題呢?
作者: rich    时间: 2009-9-28 22:29
因為video 對資料的頻寬要求很大, arbitation share value 要記得設定,這樣video stream 才會順暢.

在SOPC builder 下, 選擇上方的選單View->Show Arbitration. 就可看到component 之間的connection 出現數字(default 1), click 該數字可進行數字的變更.

加油!!! 只差一步了.
作者: kay54068    时间: 2009-9-29 01:19
謝謝rich大大,在請問你一下,我在NIOSII IDE 我建一個專案 我在include 的時候 ,在#include "xxx.h"
前必須加   資料夾名稱/xxx.h   例如:#include "alt_video_display/alt_video_display.h",IDE才可接受
請問是否要設定一些參數呢?
作者: rich    时间: 2009-9-29 09:34
還有另外一個方法是在NIOS II IDE 下加入header 的Include(searching) Path, 這樣就可捨去檔案前面的path.
操作方式如下:
1. 在NIOS II IDE 上方選單, 選Project->Property, 開啟properties 對話窗
2. 加入Include Path, 如下圖:

作者: kay54068    时间: 2009-10-5 00:45
感謝rich大大的指教,目前已自己重建專案,並且測試成功。在請問rich大大一下,本人想用TRDB_DC2 130萬像素相機模組將抓取到的資料存到sdram再透過VGA輸出(利用DE1 NIOS-BASED VGA Display 的DMA概念),請問我該如何下手,是在利用一組DMA單獨對TRDB_DC2抓到的資料作控制還是....??麻煩rich大大了!!
作者: rich    时间: 2009-10-5 23:14
這個我沒有實作的經驗, 不過參照Display DMA 的方式來作Camera Capture我想應該是可行的.
首先, 你要自建一個video source 的custom sopc component.
(要加start of package & end of package signal)
還有dma 是streaming to memory.

不過我想兩者合併時, 可能會遇到SDRAM 頻寬的問題.
640x480 的影像資料流為640x480x60x4(4 byte per pixel) =74MB/s.
read & write = 74x2 = 128MB/s (如果camera input 也是640x480)
sdram 可提供100(MHZ) x 2 (16bit data width) x 0.8 (假設效率為80%) = 160 MB/s.
sdram access 的頻寬要大概符合以下條件
    CPU SDRAM access(MB/s)  + 128MB/s < 160MB/s
作者: kay54068    时间: 2009-10-7 01:11
在冒昧的請問rich大大,我有3個問題想請問您
問題1:
您說的sdram access 的頻寬條件式設定arbitation share value 嗎?
以Display DMA這個範例來說,SDRAM data_master=8、arbitation share value : descriptor_read=100、descriptor_write=100、m_read=50。這些設定值有規則性嗎?
問題2:
例外我Camera Capture 是否要依照DMA streaming to memory 的格式寫 ...
1.csr ,2.descriptor_read ,3.descriptor_write ,4.m_write ,5 sink in 。 還是直接規劃為avalon streaming source 然後接 DMA 的 avalon streaming sin, 然後再跟SDRAM相連接。
問題3:
我是否還要另外寫Camera Capture to DMA 的軟體規劃。

以上問題有點繁雜,請見諒。
作者: kay54068    时间: 2009-10-12 14:57
本帖最后由 kay54068 于 2009-10-12 15:00 编辑

rich 大大有空是否可以為我解答呢!!~~(問題在#20)
作者: rich    时间: 2009-10-12 23:00
1. 關於arbitration share value, 基本上你要依照資料流量來分配, 是有規則性的. 由於vga display 是real time 的, 所以DMA 相關data flow一定要給足夠的頻寬, 最好再外加20~40%, 否則會看到雪花.

2/3. 關於D5M, 我建議先作最簡的作法是, 先作capture 的功能. 寫一個video source component, 先將一個畫面的Bayer pattern 放到另一顆SDRAM (跟VGA 用同一顆, 可能會頻寬不夠), 然後用nois 將bayer pattern 轉成24-bits RGB 畫到vga display 對應的writen frame buffer, 畫完後, 作display & writen buffer 的switch 將該影像顯示出來(這部分, 全部使用C code), 先把這些打通, 掌握一些D5M的技術後, 再加DMA 來作real-time capture 會比較容易些, 否則會太複雜, 不知如何debug 起.
作者: rich    时间: 2009-10-13 10:03
補充一下, 已上說的"Video source component" 其實是用memory mapped interface 的avalon-master port, 將資料寫入sdram, 不用到streaming interface.
作者: withoutwing    时间: 2009-10-23 21:11
谢谢楼主分享
作者: kay54068    时间: 2009-12-6 23:24
請問一下,我在此範例中寫........
display = alt_video_display_init( LCD_SGDMA_NAME,   
                                    800,//ALT_VIDEO_DISPLAY_COLS,               // int width(640)
                                    600,//ALT_VIDEO_DISPLAY_ROWS,               // int height(480)
                                    32,//ALT_VIDEO_DISPLAY_COLOR_DEPTH,
                                    ALT_VIDEO_DISPLAY_USE_HEAP,           
                                    ALT_VIDEO_DISPLAY_USE_HEAP,        
                                    2 );  
vid_draw_round_corner_box ( 100, 100, 200, 200, 10, COLOR_G, DO_FILL, display);
while(1)
{
     vid_draw_round_corner_box ( 440, 10, 520, 80, 10, COLOR_R, DO_FILL, display);
      alt_video_display_register_written_buffer( display );
        while(alt_video_display_buffer_is_available(display) != 0);
}

會有很大的閃爍問題,請問是哪裡出錯了呢?
作者: Strength    时间: 2009-12-23 16:50
請問一下rich大大,此de1採用streaming與一般使用memory mapped的差異?
作者: Strength    时间: 2009-12-23 16:50
請問一下rich大大,此de1採用streaming與一般使用memory mapped的差異?
作者: xlbian    时间: 2009-12-24 21:26
下了,谢谢分享!!!
作者: rich    时间: 2009-12-24 23:10
memory mapped: 有address pin 來定址所要access 的, 屬於random acess
streaming: 只有data & flow control pin, 沒有address pin, 屬於sequence access.

streaming 可提供較高傳輸速度, 適合於影像串流資料.
作者: kay54068    时间: 2010-1-9 01:28
請問rich 大大 我先規劃好某一個畫布(沒寫入),之後重覆畫某個畫布,最之前的資料也會被顯現出來,而形成兩個資料交替(畫面閃爍)的問題EX:
vid_draw_round_corner_box ( 100, 100, 200, 200, 10, COLOR_G, DO_FILL, display);
while(1)
{
     vid_draw_round_corner_box ( 440, 10, 520, 80, 10, COLOR_R, DO_FILL, display);
      alt_video_display_register_written_buffer( display );
        while(alt_video_display_buffer_is_available(display) != 0);
}

請問這該如何修正??
作者: rich    时间: 2010-1-9 10:52
之前畫布的東西如果不要, 要先呼叫"clear" function, 將畫布清空(其實是填0 到畫布對應的記憶體)
作者: kay54068    时间: 2010-1-19 16:41
本帖最后由 kay54068 于 2010-1-19 16:43 编辑

回复 31# rich

請問rich大大若我先前規畫的畫布要保留(類試背景圖,新舊畫布都必須顯現),要如何處理。
PS: 目前我使用的方法:
clear dlsplay -> 貼背景圖->變動的圖,螢幕才不會閃爍,但速度會很"慢"(如果顯示範都很大的話)

以上問題,煩請指教。
作者: kay54068    时间: 2010-1-28 18:36
本帖最后由 kay54068 于 2010-1-28 18:37 编辑

回复 32# kay54068

RICH 大大可以幫我解惑嗎?
問題在#32
作者: rich    时间: 2010-2-2 21:39
如果備景是一樣的, 將"clear dlsplay -> 貼背景圖->" 存在另一個記憶體, 然後memcpy 過去畫布就好. 可以減少memory access 的頻率.
作者: kay54068    时间: 2010-3-4 15:27
請問大大,這個專案可以建構出一個的動畫出來嗎?(目前測試3張640x480的圖片更新頻率大概每1~3秒才能輸出圖片,畫面會停頓。)
以上問題,煩請指教。
作者: rich    时间: 2010-3-7 15:40
應該可以更快才對, 一秒幾張甚至幾十張應該沒問題.
每1~3秒才能輸出圖片的瓶頸有可能來自你自己寫的"產生動畫圖片".

你可已試著用example 提供的API, 產生這樣的動畫圖:"黑色background" + "數字Counter"  
我想一秒鐘, 應該可以count 很多張才對.

若輸出瓶頸真的是"產生動畫圖片". 應該考慮用硬體來加速.
作者: lixiaod    时间: 2010-4-21 10:53
谢谢楼主,资料太有用了,正是需要的。
作者: Frank36988    时间: 2010-5-6 10:55
谢谢楼主了  
作者: xlbian    时间: 2010-5-14 13:36
好贴,学习了!!!
作者: flyfpga    时间: 2010-6-14 12:16
谢谢 我正在找这方面的资料,不知道各位用uclinux驱动VGA、ps2经验可否共享一下?
作者: flyfpga    时间: 2010-6-21 22:14
请楼主讲解一下tahomabold_20.c和tahomabold_32.c好吗?呵呵我看不懂
作者: flyfpga    时间: 2010-6-21 22:15
请楼主讲解一下tahomabold_20.c和tahomabold_32.c好吗?呵呵我看不懂
作者: dingyanyan    时间: 2010-7-11 16:17
非常感谢,已下载!!
作者: yuanhuayong    时间: 2010-8-3 18:54
感谢分享
请问有没有SGDMA的详细讲解啊?工作流程之类的
作者: yuanhuayong    时间: 2010-8-5 09:39
本帖最后由 yuanhuayong 于 2010-8-5 09:42 编辑

请问版主,我在做这个试验的时候,用flash作为SGDMA的buffer ,之后的跟例程里一样,但是在使用VGA_SINK时提示如下错误:
Error (10112): Ignored design unit "VGA_SINK" at VGA_SINK.v(4) due to previous errors
Error (10228): Verilog HDL error at vga_time_generator.v(108): module "vga_time_generator" cannot be declared more than once
这个怎么解决呢?
就只在sopc builder里面用到了这个
作者: hailiang0001    时间: 2010-8-25 09:13
感谢分享
作者: wushimin6    时间: 2010-9-17 09:52
谢谢楼主
作者: doer@qd    时间: 2010-10-12 08:55
谢谢楼主分享
作者: rich    时间: 2010-10-24 10:58
tahomabold_20.c和tahomabold_32.c 放的是字型擋的同型檔
作者: leona1527    时间: 2011-1-14 11:26
学习学习
作者: CrazyBingo    时间: 2011-4-15 11:46
我试试看  灰常不错
作者: youngsh    时间: 2011-4-15 17:08
一直在弄VGA,我直接采用的是友晶提供的VGA IP,但是编译都编不过去,直接报错,我下了你的DE1的程序打开看了一下,发现你不是用的他的程序,但是你的display 里面怎么有VGA 控制器,我的没有 不知道是不是软件的问题,我用的是9.1 sp1,不知道你用的是哪个版本。
作者: youngsh    时间: 2011-4-19 17:09
楼主的代码我下了看了下,你的好像是9.0的版本吧,你用的VGA的控制器好像没有用友晶,我用友晶公司提供的VGA  ip控制器打开后的设置界面跟你的不一样,这其实没什么,关键是我在SOPC中弄好后 在quartus中编译不过去,下面是我的链接,希望高手指教一笑!
http://www.myfpga.org/discuz/viewthread.php?tid=100813
作者: leona1527    时间: 2011-4-25 19:11
不错 我下来 跑一下
作者: kemi450    时间: 2011-6-3 13:34
参考参考先,嘿嘿
作者: 天勤    时间: 2012-2-25 22:36
新手学习学习
作者: jiayu    时间: 2012-9-4 11:24
研究研究
作者: lgeorge123    时间: 2012-9-8 21:18
看看  谢谢分享了!!!




欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/) Powered by Discuz! X3