MyFPGA Forum

 找回密码
 注册
搜索
查看: 34327|回复: 57
打印 上一主题 下一主题

DE1 NIOS-BASED VGA Display

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-13 20:07:29 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
此範例描述如何利用DMA建立NIOS-Based VGA Display System.
C-Level API 讓使用者可在螢幕對應對的畫布(對應到SDRAM),
劃出所要的圖案或做文字輸出.


DE1_NIOS.zip (3.2 MB, 下载次数: 2235)
2#
 楼主| 发表于 2009-9-28 22:29:44 | 显示全部楼层
因為video 對資料的頻寬要求很大, arbitation share value 要記得設定,這樣video stream 才會順暢.

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

加油!!! 只差一步了.
3#
 楼主| 发表于 2009-9-29 09:34:59 | 显示全部楼层
還有另外一個方法是在NIOS II IDE 下加入header 的Include(searching) Path, 這樣就可捨去檔案前面的path.
操作方式如下:
1. 在NIOS II IDE 上方選單, 選Project->Property, 開啟properties 對話窗
2. 加入Include Path, 如下圖:
4#
 楼主| 发表于 2009-10-5 23:14:23 | 显示全部楼层
這個我沒有實作的經驗, 不過參照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
5#
 楼主| 发表于 2009-10-12 23:00:34 | 显示全部楼层
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 起.
6#
 楼主| 发表于 2009-10-13 10:03:44 | 显示全部楼层
補充一下, 已上說的"Video source component" 其實是用memory mapped interface 的avalon-master port, 將資料寫入sdram, 不用到streaming interface.
7#
 楼主| 发表于 2009-12-24 23:10:12 | 显示全部楼层
memory mapped: 有address pin 來定址所要access 的, 屬於random acess
streaming: 只有data & flow control pin, 沒有address pin, 屬於sequence access.

streaming 可提供較高傳輸速度, 適合於影像串流資料.
8#
 楼主| 发表于 2010-1-9 10:52:51 | 显示全部楼层
之前畫布的東西如果不要, 要先呼叫"clear" function, 將畫布清空(其實是填0 到畫布對應的記憶體)
9#
 楼主| 发表于 2010-2-2 21:39:35 | 显示全部楼层
如果備景是一樣的, 將"clear dlsplay -> 貼背景圖->" 存在另一個記憶體, 然後memcpy 過去畫布就好. 可以減少memory access 的頻率.
10#
 楼主| 发表于 2010-3-7 15:40:44 | 显示全部楼层
應該可以更快才對, 一秒幾張甚至幾十張應該沒問題.
每1~3秒才能輸出圖片的瓶頸有可能來自你自己寫的"產生動畫圖片".

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

若輸出瓶頸真的是"產生動畫圖片". 應該考慮用硬體來加速.
11#
 楼主| 发表于 2010-10-24 10:58:13 | 显示全部楼层
tahomabold_20.c和tahomabold_32.c 放的是字型擋的同型檔
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-5-16 16:22 , Processed in 0.042814 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表