黑金AX301開發板視頻圖像處理:探索
阿新 • • 發佈:2018-04-10
SDR 補充 cnblogs 一次 防止 創建 sdram 都是 tro OV7670攝像頭:
SCCB協議:https://www.cnblogs.com/aslmer/p/5965229.html
SCCB協議有兩線也有三線,兩線為SIO_C與SIO_D,三線為SIO_E、SIO_C與SIO_D。
2線的SCCB總線只能是一個主器件對一個從器件控制,但3線SCCB接口可以對多個從器件控制,因此當只有一個從機(slave device)時用兩線,有多個從機時用三線。
其中SIO_C只能由主機配置(FPGA),SIO_D是一個三態門,雙向數據線,既可以由主機控制,也可以由從機控制。
在創建fifo的設置中wrfifo和rdfifo的讀和寫時鐘需要設置為獨立;增加同步清零;增加wr的read-side usedw引腳,增加rd的write-side usedw引腳。
vga的數據引腳需註意 :順序為r[4:0]:g[5:0]:b[4:0]
顏色太藍,不知為何,嘗試將引腳順序修改為b[4:0]:g[5:0]:r[4:0]後,發現太紅。可能是其他問題?
直接復制demo的代碼是沒有問題的,查看demo的引腳接法就是r[4:0]:g[5:0]:b[4:0]
對比之後查明原因,fifo的寬度應該是16bit(直接對應vga的rgb565),我設置的時候搞成了8bit
程序執行的輸入和輸出只看主程序的IO,其他IO是使用的程序內變量,或者子程序內變量:
在進行vga視頻顯示的圖像灰度化處理時,rgb2gray部分的輸入數據是lcd_rgb,輸出是vgad。vgad也是主程序的輸出;lcd_rgb是sdram_vga_top的輸出。sdram_vga_top的作用是從sdram讀取圖像數據到fifo並從fifo輸出給vga接口,如果沒有rgb2gray部分則輸出為vgad,否則輸出為lcd_rgb以方便轉化為灰度圖再輸出數據vgad給vga引腳用於顯示。
視頻的采集30hz與圖像的顯示幀率60hz不一致,一般是中間使用一個快速的存儲機構sdram來實現匹配。
想對圖像做卷積 ,發現采集的圖像是640*480*16bit的圖像,要一次取3行數據,發現移位寄存器內存不夠。
1.需要使用(3個bank+3個fifo)*2的方式來嗎?
2.或者將fifo深度增加,然後直接讀出到3個移位寄存器?這種方法看起來可行性比較高。但是,要通過fifo中間寄存器來補充3個移位寄存器,比較麻煩,還可能影響速度。
3.或者將wrfifo的數據直接存儲到sdram的3個bank中,然後直接從3個bank中並行讀出數據進行處理?看起來最簡便。
rdfifo的作用是防止數據拖影?那麽這種方式下也需要一個fifo吧,將卷積結果存放於fifo中,然後fifo數據給vga顯示。
實際在bank中每次都是存儲完一幀圖像再進行乒乓切換的。
4.創建3個rdfifo,並行讀出,然後計算卷積並送給vga顯示。這個看起來才比較可行。
黑金AX301開發板視頻圖像處理:探索