原創 鞏文宏 數字積木 2019-09-15緩存
本文講述下利用sdram緩存從攝像頭處獲得的數據,並將圖像顯示到顯示屏上的工程架構。本文不涉及具體的代碼講解,只描述其中的實現思路。架構
該工程由以下模塊組成:設計
攝像頭數據捕獲模塊,圖片
讀fifo,寫fifo,同步
讀寫仲裁模塊,it
sdram控制器配置
每一個模塊的做用以下。方法
1,攝像頭數據捕獲模塊。im
通常攝像頭傳輸的數據,一個像素是由相鄰兩個時鐘的數據拼接而成的,在數據捕獲模塊中,要根據同步控制信號,將兩個時鐘的數據拼接在一塊兒輸出。技術
2,讀fifo,寫fifo。
用於臨時緩存讀寫數據,解決數據的跨時鐘域問題。
3,讀寫仲裁模塊。
用於判斷和控制從sdram中讀寫數據。
4,sdram控制器。
用來實現sdram的初始化配置,讀寫時序的實現。
該工程的整體設計概要圖以下,從攝像圖獲取的的數據先臨時緩存到寫fifo中,而後再寫入到sdram中,須要顯示圖像時,圖像數據先從sdram臨時儲存到讀fifo中,而後顯示屏驅動模塊讀取fifo中的數據,並將圖像顯示到顯示屏上。在sdram中,將圖像數據按照從左到右,從上到下的順序儲存在一片連續地址的儲存區域內,即可以方便突發讀寫傳輸。
1,爲何要用sdram。
因爲攝像頭產生的數據時鐘速率和顯示屏的時鐘不匹配,並且當攝像頭傳來數據時,顯示屏驅動模塊不必定在此時須要數據,何況同一時刻攝像頭傳進的像素的位置不必定就是顯示屏正刷新到的位置。故不能將攝像頭的數據直接直接傳輸到顯示屏驅動模塊。
一張24bit的的全綵圖的,每一個像素點佔據3byte的空間,常見的不一樣尺寸的圖片一幀所佔空間以下:
1080*1920*3byte=6,220,800byte=5,9mbyte;
960*480*3byte=1,382,400byte=1.3mbyte
480*272*3byte=391,680byte=0.3mbyte
一般板載的sdram的大小有16MB,32MB,64MB,128MB,等等,由設計成本決定,但用於儲存一幀圖片綽綽有餘。
只有將圖像數據臨時儲存起來,這樣讀寫便互不所影響。當攝像頭傳來有效數據時,便將數據存入sdram,當顯示屏須要數據時,便從sdram中讀取數據,發送給顯示屏用於顯示。這樣即可以將讀寫儲存隔離。
低成本的板載sdram的時鐘頻率也在100MHz以上,數據寬度爲16bit,數據帶寬最小爲100M*2byte(16bit)=200Mbyte/s。按60HZ,640*480的圖片計算,一幀圖片要進行讀和寫兩次操做,一般由攝像頭傳入的圖像爲16位寬,那麼圖像傳輸的速率爲:640 * 480 * 2btye(16bit) * 2 * 60 = 70Mbyte,可見sdram的帶寬足夠,知足圖像實時顯示要求。
2,爲何要用fifo作數據的臨時緩存?
爲何不能將數據直接存入sdram,還要通過fifo臨時緩存呢?一是因爲跨時鐘域。攝像頭產生的數據的速率和sdram的寫入時鐘速率不匹配。通常而言,sdram的時鐘頻率都要大於像素時鐘的一到兩倍。故須要一個讀寫雙時鐘的fifo。將像素時鐘接入到fifo的寫時鐘端口,像素數據有效信號接入到fifo的寫使能端口,將有效的數據寫入到fifo中。將sdram的時鐘接到fifo的讀時鐘端口,用於從fifo中讀取數據。
二是因爲sdram的突發傳輸,要保證連續突發傳輸時每個數據都是有效數據。若是直接將攝像頭的數據傳輸到sdram端口 ,在連續傳輸的128個字節中,像素數據不必定是所有連續有效的數據。只將有效數據儲存進fifo中後,從fifo中讀出的連續數據必定都是連續的有效數據。
對於讀fifo,也是同理,顯示屏的驅動時鐘和sdram的時鐘也存在跨時鐘域,並且在突發讀取時,也不能保證從sdram中傳出的數據正好和顯示所須要Dev數據相匹配。故須要有一個雙時鐘端口的用於讀數據的fifo作數據的臨時緩存。
3,什麼時候將fifo中的數據寫入sdram?
sdram的突發長度設置爲128,設置當寫fifo中的數據量大於128時,進行一次寫突發傳輸,將fifo中的128個數據搬移到sdram中。圖像數據不斷從攝像頭傳入,寫進fifo中,每當寫入的數據大於預設Dev值,就進行一次寫突發傳輸。這個由讀寫仲裁模塊所控制。
4,什麼時候將sdram中的數據
顯示屏驅動模塊要從讀fifo中讀取數據,設置一個閾值,當讀fifo中的數據小於該閾時,便進行一次突發傳輸,將數據從sdram中臨時緩存到fifo中,用於顯示驅動的讀操做。
5,何爲乒乓操做,爲什麼要乒乓操做?
乒乓操做的具體方法爲,在sdram中設置兩個儲存空間,用於儲存兩張圖片。分別用於儲存攝像頭傳來的圖像數據,和顯示屏讀取數據。一幀圖片傳輸完成後,讀寫區域互換。這樣能保證在顯示屏顯示時,可以顯示一張完整的圖像。若是利用同一片儲存區域來儲存圖像,當前一幀圖像尚未讀取顯示完成,下一幀圖像的數據就將該區域覆蓋,那麼顯示屏上的畫面會出現拖影現象,兩幀圖像會交疊在一塊兒。
關注公衆號:「數字積木」,獲取更多精彩內容,技術乾貨。