干 莽, 齊貴寶, 陳 捷, 宋占偉
(吉林大學(xué) 電子科學(xué)與工程學(xué)院, 長春 130012)
LCD(Liquid Crystal Display)液晶顯示屏以其體積小、 色彩豐富、 亮度高和響應(yīng)時間快等特色在消費電子產(chǎn)品的顯示器中逐漸占據(jù)了主導(dǎo)地位[1]。國內(nèi)液晶面板生產(chǎn)線雖然每年在逐步增加, 然而多為組裝生產(chǎn), 特別是大型LCD顯示屏, 其驅(qū)動與控制IC(Integrated Circuit)采購權(quán)通常掌握在外方手中, 其技術(shù)為外方所壟斷。而中小型顯示面板與驅(qū)動控制IC的配合度較低, 廠家一般采用飛利浦、 NEC等半導(dǎo)體公司推出的一些專用控制芯片, 其成本較高, 但性能可得到一定保障。為節(jié)約成本, 許多廠商面向用戶需求自行研發(fā)控制芯片。而控制芯片技術(shù)參差不齊, 導(dǎo)致了產(chǎn)品性能間較大差距[2,3]。筆者提出了一種將LCD控制芯片集成到FPGA(Field-Programmable Gate Array)中作為圖形處理模塊的解決方案, 其刷新效率高, 肉眼無法辨別圖像刷新過程, 很好地實現(xiàn)了所需的功能。
系統(tǒng)分為外部輸入接收、 SDRAM(Synchronous Dynamic Random Access Memory)控制器、 顯示輸出控制器三大部分, 考慮到SDRAM與外部數(shù)據(jù)輸入設(shè)備、 LCD輸出控制部分的時鐘頻率不一致, 筆者使用FIFO(First In First Out)實現(xiàn)不同速度的時鐘匹配。系統(tǒng)總體模塊的基本結(jié)構(gòu)如圖1所示。
圖1 LCD控制器模塊結(jié)構(gòu)
由于設(shè)計中使用液晶的像素點較多, 加上像素的顏色位寬一般為16位或24位, 考慮到多緩沖區(qū)容量設(shè)計以及最大工作頻率必須適應(yīng)系統(tǒng)時鐘要求, 通常選擇的緩存容量至少是像素點個數(shù)的幾倍以上。緩存通常使用SRAM或SDRAM作為隨機存儲芯片。對于大量像素點顏色信息的存儲, SDRAM相比SRAM具有工作頻率高、 存儲容量大和成本低的特點, 然而SDRAM操作更復(fù)雜, 且必須保證一定時間間隔的刷新才能維持?jǐn)?shù)據(jù)穩(wěn)定[4,5]。使用SRAM作為緩存, 其容量太小, 實現(xiàn)雙緩沖方式需要的存儲容量太大, 成本較高。因此, 筆者改用一片8 MByte的Hynix SDRAM存儲顏色, 數(shù)據(jù)總線寬度為16位, 最高時鐘頻率為143 MHz。
液晶的分辨率將決定驅(qū)動LCD需要的時鐘頻率, 筆者使用控制芯片為AT070TN83的5英寸液晶, 雖然屏幕較小, 但其分辨率達(dá)到800×480像素。因為FPGA的輸出管腳已被其他存儲設(shè)備占用了許多, 所以顯示數(shù)據(jù)位寬只能使用16位565格式, 電源要求3.3 V, 背光電源5 V。根據(jù)規(guī)格書給定參數(shù), 單幀行同步脈沖為NH=928個, 場同步脈沖為NV=525個, 因此, 當(dāng)刷新率Nf=60幀/s時, 根據(jù)
freq=NH×NV×Nf
計算時鐘頻率freq至少為29.3 MHz。系統(tǒng)時鐘使用133.3 MHz工作, 將系統(tǒng)時鐘四分頻為33.3 MHz作為LCD的驅(qū)動時鐘即可達(dá)到要求。此時畫面刷新率約為68幀/s。
數(shù)字邏輯電路中, 數(shù)據(jù)建立時間(Tsu)過程中電平處于不穩(wěn)定狀態(tài), FPGA管腳對輸入信號管腳電平的跳變敏感。如果在建立時間中采樣, 則容易造成錯誤的數(shù)據(jù)輸入[6,7]。為保證數(shù)據(jù)的準(zhǔn)確性, 對輸入信號采樣采用延后半個時鐘周期的采樣方式。當(dāng)信號在時鐘下降沿建立數(shù)據(jù)時, FPGA在時鐘上升沿處進(jìn)行采樣, 在輸入信號、 SDRAM與FIFO之間信號傳遞時都必須遵循該原則(見圖2)。
使用指令集方式, 通過NiosII系統(tǒng)內(nèi)部AVALON總線從CPU中將命令與數(shù)據(jù)寫入FIFO, 筆者依照機器語言的思路定義一套標(biāo)準(zhǔn)指令集, 從FIFO中讀出指令, 經(jīng)過狀態(tài)機分析得出指令后, 根據(jù)需要從FIFO中讀出所需的起始寄存器地址和數(shù)據(jù)。狀態(tài)機的工作流程如圖3所示。
指令代號、 指令功能和指令數(shù)據(jù)格式的對應(yīng)關(guān)系如表1所示。
圖2 數(shù)據(jù)采樣時鐘 圖3 狀態(tài)機工作流程
由于SDRAM的數(shù)據(jù)總線讀寫共用, 顯示輸出控制器要定時讀取顯示緩存內(nèi)的數(shù)據(jù), 而SDRAM控制器要對緩存數(shù)據(jù)進(jìn)行修改。如果不加處理將會出現(xiàn)總線沖突。筆者比照計算機直接內(nèi)存存取的理論, 將SDRAM控制器認(rèn)為是主控單元, 在顯示輸出需要占用總線的過程中給SDRAM控制器一個DMA(Direct Memory Access)請求, 使之放棄SDRAM總線的控制權(quán), 一行顏色數(shù)據(jù)讀取結(jié)束后釋放總線控制權(quán)給SDRAM控制器, 繼續(xù)其任務(wù)。在FPGA中專門設(shè)置了一個使能位RE, 以決定總線的歸屬權(quán)。
液晶顯示器消隱時間不必輸出數(shù)據(jù), 然而行消隱和場消隱的時間過于短暫, 寫操作通常使用的時間較長, 對高速刷新的畫面往往造成畫面暫留或刷新不及時的現(xiàn)象, 表現(xiàn)為肉眼能看到刷新過程。因此為增加寫操作時間, 提高刷新率, 使用FIFO預(yù)讀每行的信息, 預(yù)讀結(jié)束后, 控制器收回SDRAM數(shù)據(jù)總線控制權(quán), 顯示部分通過預(yù)讀的信息輸出。SDRAM的工作頻率至少是液晶輸出頻率的4倍, 最高能達(dá)到143 MHz。FIFO的工作頻率與SDRAM工作頻率一致, 所以, 將數(shù)據(jù)讀取到FIFO中所需的時間只是原本顯示一行所需時間的1/4, 剩余的3/4時間以及行消隱可作為空閑時間被寫命令等操作使用。開始每項操作前都需要根據(jù)狀態(tài)流程(見圖3)計算空閑時間, 只有時間充足時才能進(jìn)行操作。因為每種操作的時間不會超過一行的空閑時間, 因此不會出現(xiàn)死鎖等待現(xiàn)象。寫數(shù)據(jù)時序圖如圖4所示, 邏輯分析儀的采樣頻率為66.7 MHz。RE為低時FIFO從SDRAM讀取數(shù)據(jù), RE為高時執(zhí)行寫操作, WE[0]為寫過程的計數(shù)器。每行的空閑時間基本上能保證寫入3行的顏色數(shù)據(jù)。
按照現(xiàn)今嵌入式GPU(Graphic Processing Unit)的像素填充率指標(biāo)衡量數(shù)據(jù)刷新速度, 若忽略行消隱時間及SDRAM數(shù)據(jù)寫入的緩沖時間, 則在每幀非場消隱時間段(480行)內(nèi)的每行可寫入2 400像素點的彩色數(shù)據(jù), 在場消隱時間段(45行)內(nèi)可寫入3 200像素點的數(shù)據(jù)。按照使用33.3 MHz時鐘的刷新率68幀/s計算設(shè)備最大像素填充率為
(480×2 400+45×3 200)×68=88 128 000像素/s
假設(shè)控制器以一般嵌入式GPU的400 MHz時鐘速率工作, 可得到像素填充率為
(480×8 800+45×9 600)×68=316 608 000像素/s
該數(shù)值僅次于主流嵌入式GPU PowerVR SGX系列(5億像素/s填充率)水平, 高于Adreno205系列(2.4億像素/s填充率)水平。如果使用多條管線并行填充, 則將具有更高的性能。
SDRAM突發(fā)讀寫的最大長度只有單頁256個地址, 每次讀寫前必須有一段充電和指定行列地址的等待時間。數(shù)據(jù)手冊中SDRAM的特性顯示可通過讀寫時間對非工作區(qū)域充電, 采用使能方式消除讀寫前的等待時間[8,9]。根據(jù)這一原理, 可有效利用SDRAM多工作區(qū)域的特性, 采用突發(fā)方式連續(xù)讀寫較長的數(shù)據(jù)。
直接對顯示緩存數(shù)據(jù)的更新會破壞當(dāng)前顯示幀內(nèi)容的完整性, 對視覺效果造成影響, 采用多緩沖數(shù)據(jù)的方式可避免這個問題。筆者將SDRAM緩存的一部分作為顯示幀保存修改前的幀數(shù)據(jù), 剩下部分可作為多個緩沖幀保存其他待顯示幀的數(shù)據(jù)。上一幀結(jié)束后, 只需通過指令修改緩沖區(qū)首地址即可實現(xiàn)兩個緩沖幀之間的快速切換。由于受單幀填充像素最大值的限制, 如果只使用一個緩沖區(qū)提前準(zhǔn)備修改, 則無法利用高像素填充率的優(yōu)勢; 而使用多緩沖區(qū)方式則更能充分利用像素填充率, 在刷新一幅圖片的過程中完成多幅圖片的緩沖過程[10]。在應(yīng)用中有時需要在當(dāng)前顯示幀基礎(chǔ)上進(jìn)行修改, 可在硬件幀同步過程中復(fù)制該幀內(nèi)容。在顯示輸出控制器發(fā)出DMA請求的同時如果幀同步被使能, 則顯示幀的數(shù)據(jù)內(nèi)容被同時讀入兩個FIFO中, 其中同步的FIFO負(fù)責(zé)讀取數(shù)據(jù)并將數(shù)據(jù)寫到待同步的緩存中, 實現(xiàn)1幀同步。同步過程中對同步幀的修改被系統(tǒng)禁止。
SDRAM在寫數(shù)據(jù)前需預(yù)充電和刷新等過程, 在單數(shù)據(jù)突發(fā)時寫1個數(shù)據(jù)需要約35個系統(tǒng)時鐘, 如果使用頁突發(fā)方式, 則寫800個數(shù)據(jù)只需要約850個時鐘。但采用頁突發(fā)模式無法直接通過地址對輸入數(shù)據(jù)進(jìn)行定位輸入, 如果輸出數(shù)據(jù)個數(shù)已達(dá)到要求, 則可以隨時停止輸入。因此, 筆者設(shè)計時從首頁地址開始, 使用SDRAM的DQM位禁能不需要的輸出數(shù)據(jù), 直到到達(dá)指定起始輸出地址為止。DQM禁能時間為損失的時間。根據(jù)應(yīng)用的需要, 筆者在NiosII的程序中加入了規(guī)劃方式, 如繪制圖片的邊框等較小數(shù)據(jù)量的輸入過程使用單數(shù)據(jù)形式, 而繪制大幅圖片則使用頁突發(fā)方式。
圖5 LCD控制器實際應(yīng)用效果
設(shè)計中選用CycloneII系列的EP2C8F256C8N芯片, 擁有8 256門和182個IO管腳, 165 888個Memory bit。選擇1 MByte×16 bit×4 Banks的K4S641632H-UC70作為顯存, 該SDRAM存儲容量為8 MByte,工作頻率最高能達(dá)到143 MHz。定制了NiosII系統(tǒng), 系統(tǒng)運行時鐘頻率為133.3 MHz。運行狀況穩(wěn)定, 經(jīng)受住72 h連續(xù)運行的測試。LCD控制器實際應(yīng)用效果如圖5所示。實驗中在設(shè)備的NandFlash中存儲30張不同的圖片進(jìn)行循環(huán)刷新, 在8 MByte的SDRAM中每次可以緩存5張圖片快速刷新, 刷新一幅圖片的時間內(nèi)可緩存2~3幅圖片數(shù)據(jù)。由于采用了多頁緩存, 響應(yīng)速度快,在點擊畫面中圖片時, 能在肉眼察覺不到行掃描過程的情況下瞬間切換圖片。像素填充率基本達(dá)到目標(biāo)值88 128 000像素/s。此外, 800×480像素分辨率的液晶屏在本應(yīng)用中已經(jīng)遠(yuǎn)超過多數(shù)5寸屏幕使用的480×272像素分辨率。系統(tǒng)中使用的命令狀態(tài)機可自行定制所需的圖形處理命令, 自由添加硬件并對緩存圖片進(jìn)行處理, 具有很強的靈活性。
筆者設(shè)計的系統(tǒng)最終工作頻率為133.3 MHz, 能正確讀取外部輸入的指令并迅速作出反應(yīng), 輸出圖像不失真, 刷新率達(dá)到60幀/s以上, 理論像素填充率達(dá)到8.8千萬像素/s。在使用高分辨率LCD顯示器的出租車拼車系統(tǒng)設(shè)計中作為顯示模塊, 效果出色。該設(shè)計方案也可用于其他大型LCD顯示器的應(yīng)用設(shè)計中, 具有較高實用價值。
參考文獻(xiàn):
[1]FU Xian-cheng, ZOU Xue-cheng, LEI Jian-ming. Improved Dithering Algorithms and Its Circuit Implementing for STN-LCD [J]. The Journal of China Universities of Posts and Telecommunications, 2006, 13(4): 86-90.
[2]林明. 基于FPGA的數(shù)字圖像顯示系統(tǒng) [J]. 單片機與嵌入式系統(tǒng)應(yīng)用, 2002(9): 43-45.
LIN Ming. FPGA-Based Digital Image Display System [J]. Microcont Roller & Embedded System, 2002(9): 43-45.
[3]楊海濤, 蘇濤, 巫幪, 等. 基于FPGA的SDRAM控制器的設(shè)計與實現(xiàn) [J]. 電子科技, 2007(1): 8-12.
YANG Hai-tao, SU Tao, WU Meng, et al. The Design and Implementation of the SDRAM Controller Based on the FPGA [J]. IT Age, 2007(1): 8-12.
[4]黃德勇, 張揚, 楊云志. 高速電路設(shè)計中的信號完整性研究 [J]. 電訊技術(shù), 2004(2): 149-152.
HUANG De-yong, ZHANG Yang, YANG Yun-zhi. Signal Integrity in the Design of High Speed Circuit [J]. Telecommunication Engineering, 2004(2): 149-152.
[5]Samsung Electronics. Samsung Device Operation Handbook [EB/OL]. (2006-07). [2013-03]. http://www.Samsung.com/.
[6]Altera Corporation. Cyclone Device Handbook [EB/OL]. (2008-08). [2013-03]. http://www.altera.com/.
[7]李冬梅, 王延杰, 王長宇, 等. 基于FPGA的高速實時圖像采集和自適應(yīng)閾值算法 [J]. 吉林大學(xué)學(xué)報: 工學(xué)版, 2010, 40(2): 535-538.
LI Dong-mei, WANG Yan-jie, WANG Chang-yu, et al. High-Speed Real-Time Image Acquisition and Auto-Adapted Threshold Processing Based on FPGA [J]. Journal of Jilin University: Engineering and Technology Edition, 2010, 40(2): 535-538.
[8]YING Wen-bai, CHANG Chi-liu. The Performance Improvement of a Photo Card Reader by the Use of a High integration Chip Solution with Double FIFO Buffers [J]. IEEE Transactions on Consumer Electronics, 2005, 51(2): 329-334.
[9]ALTERA CORPORATION. Single-and Dual-Clock FIFO Megafunction User Guide Handbook [EB/OL]. (2009-02). [2013-03]. http://www.altera.com/.
[10]唐徐立, 黃君凱, 劉明峰. 基于FPGA的TFT-LCD控制器設(shè)計與實現(xiàn) [J]. 半導(dǎo)體技術(shù), 2010, 35(11): 1134-1137.
TANG Xu-li, HUANG Jun-kai, LIU Ming-feng. Design and Realization of the TFT-LCD Controller Based on FPGA [J]. Semiconductor Technology, 2010, 35(11): 1134-1137.