甚于ARM和FPGA的全彩獨立視頻LED系統(tǒng)
3 視頻數(shù)據(jù)分發(fā)
由于控制器采用陣列模式,因此需要對視頻源提供的數(shù)據(jù)進(jìn)行分發(fā),將不同行列的數(shù)據(jù)正確地送入不同的控制器。
3.1 數(shù)據(jù)分發(fā)單元方案
本系統(tǒng)中的LED控制器灰度級高達(dá)3×12位(可顯示多達(dá)64G種顏色)、控制區(qū)域為128×128點。系統(tǒng)播放單元提供的數(shù)據(jù)為320×240像素,因此需要分解成6個LED控制器來控制(見圖1)。因此,需要將PXA255提供的RGB數(shù)據(jù)分3組發(fā)送到這6塊控制器,以FPGA實現(xiàn),方案如圖2所示。
圖2 數(shù)據(jù)分發(fā)單元方案
LCD接口子模塊接收PXA255 LCD接口的數(shù)據(jù)和控制信號,將這些輸入的數(shù)據(jù)進(jìn)行逐點校正之后存入SDRAM,然后將該場數(shù)據(jù)分成3 組,每組128行(最后一組只有64行,為了后面控制板的一致性,此處由總線調(diào)度器補零),同時發(fā)送,之后由LED顯示控制器處理。
3.2 存儲器分配和總線調(diào)度
為了方便各模塊間的接口,有利于不同時鐘域的數(shù)據(jù)同步,系統(tǒng)的存儲器采用兩級存儲模式,即SDRAM作為主存儲器,而各模塊也有相應(yīng)FIFO作為Cache, SDRAM具有容量大、帶寬高、價格便宜等優(yōu)點;但是控制比較復(fù)雜,每次讀寫有多個控制和等待周期。因此為了提高效率,通常采用地址遞增的碎發(fā)讀寫方式,而不能像SRAM那樣隨時讀取任意地址的數(shù)據(jù)。
本方案采用完全動態(tài)的內(nèi)存分配機制,即每個模塊請求時,如果不是同一場數(shù)據(jù),則可以分配到一塊新的內(nèi)存,而一旦該內(nèi)存的數(shù)據(jù)不再有效,則釋放這塊內(nèi)存。這樣,每塊內(nèi)存都有自己的屬性,標(biāo)志是使用中的內(nèi)存,還是空閑內(nèi)存,以及當(dāng)前內(nèi)存中的數(shù)據(jù)是否在等待被使用的隊列中,因此內(nèi)存需要分成3塊。其中一塊存儲逐點校正參數(shù),一塊存儲當(dāng)前場數(shù)據(jù),另一塊存儲上一場數(shù)據(jù)(即正在發(fā)送的數(shù)據(jù))。這就要求在一個場同步周期內(nèi)需要將數(shù)據(jù)發(fā)送完畢,而這一要求是完全可以達(dá)到的。
總線調(diào)度是本模塊的核心部分,必須精確計算總線帶寬的占用情況,確定各部分FIFO的深度,以保證各個FIFO不會出現(xiàn)溢出或讀空的現(xiàn)象。
總線調(diào)度器需要調(diào)度3塊存儲器,還需要為每一個模塊維護一個偏移地址的首地址,以及一個偏移地址計數(shù)寄存器。為了便于計算偏移地址,用SDRAM物理上的兩行存儲一行的數(shù)據(jù),而將多余部分空余。
總線調(diào)度器的仲裁算法為:逐點校正參數(shù)與校正后數(shù)據(jù)寫人SDRAM的優(yōu)先級一樣,采用先來先得的方式占用總線,分別由各自FIFO的指針來觸發(fā)總線占用。一場數(shù)據(jù)寫入SDRAM完畢之后,開始發(fā)送。需要依次讀出第n,n+ 128,n+ 256行的數(shù)據(jù)給數(shù)據(jù)發(fā)送FIFO0,1,2,等待數(shù)據(jù)發(fā)送單元啟動發(fā)送。
3.3 LCD接口和逐點校正
PXA255 的LCD接口配置為smart panel形式,具體時序關(guān)系可參考PXA255的手冊。FPGA根據(jù)這些時序關(guān)系,將數(shù)據(jù)讀入,進(jìn)行下一步的處理。
由于在生產(chǎn)過程中LED管的參數(shù)不可能完全一致,因此為了獲得良好的圖像顯示效果,必須對LED管進(jìn)行篩選。這也是LED屏價格昂貴的一個重要原因。
采用逐點校正技術(shù),可逐點調(diào)節(jié)LED的亮度,將顯示屏亮度的一致性提高一個數(shù)量等級,從而可以使采購廠商放寬LED在亮度和顏色方面的要求,LED采購的成本也隨之大大降低。此外,系統(tǒng)采用的逐點校正技術(shù),可以在線修改校正參數(shù),使得LED屏在投入運營之后也可以修改校正參數(shù),補償由于LED管老化對顯示效果的影響,提高LED屏的使用壽命。因此,逐點校正技術(shù)使LED模塊作為室內(nèi)外全彩色顯示屏的基本元件成為理想方案。
逐點校正參數(shù)存于SD卡中,在系統(tǒng)上電之后,ARM首先將該數(shù)據(jù)通過LCD接口(此時配置為GPIO)傳送到FPGA, FPGA將其存入SDRAM 中。此后,即可對LCD接口輸入的數(shù)據(jù)進(jìn)行校正。
3.4 數(shù)據(jù)發(fā)送
在數(shù)據(jù)發(fā)送時,每行數(shù)據(jù)作為1幀,加入特定的幀頭之后開始發(fā)送。為了減少總線數(shù)量,采用串行總線形式,每組信號共有4路,分別是源同步時鐘和RGB三基色的串行數(shù)據(jù)。信號均以LVDS(Low Voltage Differential Signal,低電壓差分信號)的形式傳輸。LVDS采用差分方式傳送數(shù)據(jù),有比單端傳輸更強的共模噪聲抑制能力,可實現(xiàn)長距離、高速率和低功耗的傳輸。Altera公司的Cyclone II系列FPGA可以方便地通過I/O配置獲得LVDS的能力。
發(fā)送幀頭由4字節(jié)的同步頭+數(shù)據(jù)當(dāng)前行號+ID號組成。由于圖像的連續(xù)像素值的相關(guān)性比較高,因此使用偽隨機碼作為同步頭,其同步性能比較可靠。當(dāng)前行號用于控制器判斷是否出現(xiàn)丟幀,并根據(jù)當(dāng)前的行號決定當(dāng)前數(shù)據(jù)的存儲地址。由于每一組數(shù)據(jù)實際上由兩個控制器分別處理(見圖1),所以需要判斷標(biāo)志來截取不同的數(shù)據(jù)部分。ID號即是不同控制器截取某行中不同列數(shù)的標(biāo)準(zhǔn),數(shù)據(jù)在發(fā)送時ID為零。
評論