張宏彬 紀勇
(揚州工業(yè)職業(yè)技術(shù)學院,江蘇揚州225127)
目前在各種基于Nios處理器或者M icroBlaze處理器的嵌入式系統(tǒng)中,經(jīng)常采用LCD液晶屏作為終端顯示器件,這主要因為LCD液晶屏所具有工作電壓低、功耗小、壽命長、易集成等特性。在各種類型的液晶屏中,抗抖動、色彩飽和度高、還原能力強、對比度突出的TFT類型的液晶屏,更是獲得了廣泛的應用。在本文中,提出了一種在基于Nios處理器的嵌入式系統(tǒng)中,能夠正常使用TFT-LCD類型液晶屏的控制組件的設計方法,并在某GPS數(shù)據(jù)采集系統(tǒng)中得到了實際應用。該組件具有AVALON總線的主從接口,能夠與Nios處理器進行信息交互,并依照規(guī)定的時序關(guān)系輸出正確的控制信號及像素顏色數(shù)據(jù),進而點亮液晶屏以顯示文本與圖形。
該控制組件具備兩個特點:一是組件內(nèi)各模塊采用有限狀態(tài)機實現(xiàn),以提高實時性能;二是采用參數(shù)化的設計方法,能夠適用各種型號的液晶屏,提高設計的通用型。
整個LCD顯示系統(tǒng)的結(jié)構(gòu)如圖1所示:
圖1 LCD顯示系統(tǒng)結(jié)構(gòu)圖
上圖中LCD顯示驅(qū)動電路是一個被動系統(tǒng),僅有驅(qū)動電路是不能實現(xiàn)LCD顯示的,還需要有相應的控制器提供兩組信號,一是掃描時序信號,二是像素點的顏色分量值。處理器通過對LCD控制器的操作實現(xiàn)了對LCD顯示掃描時序的設置和顯示數(shù)據(jù)的寫入,從而完成對LCD的顯示操作。
LCD控制組件的設計思路是:在Nios嵌入式系統(tǒng)的SDRAM中開辟一段存儲空間,用來存放屏幕圖像的數(shù)據(jù),這段存取空間即為幀緩存。通過恰當?shù)挠布壿嬙O計建立幀緩存與液晶屏幕像素之間一一對應的關(guān)系,并配合時序信號,將幀緩存中的數(shù)據(jù)實時地輸送給LCD屏,最后完成顯示刷新。本設計中為LCD控制器設計了一對基于Avalon總線規(guī)范的主從端口接口,通過該接口來實現(xiàn)LCD控制器與外部Avalon總線模塊的連接,繼而實現(xiàn)Nios處理器對于LCD控制器的控制。其中,從端口接口完成LCD控制器中相關(guān)寄存器的存?。恢鞫丝诮涌谕瓿蓮膸彺嬷凶x取數(shù)據(jù)的邏輯控制。幀緩存讀控制邏輯根據(jù)幀緩存地址生成邏輯所產(chǎn)生的地址發(fā)起Avalon總線的讀操作,從幀緩存中將該數(shù)據(jù)讀取到輸出緩沖(FIFO存儲器)。與此同時,時序信號生成模塊產(chǎn)生與像素數(shù)據(jù)同步的相關(guān)顯示點的橫,縱坐標,像素輸出控制邏輯再根據(jù)坐標值LCD驅(qū)動電路輸出相應的RGB顏色數(shù)據(jù)。此外LCD時序信號生成模塊也輸出必要的場同步信號與行同步信號。LCD控制器的總體結(jié)構(gòu)圖如下:
圖2 控制器總體結(jié)構(gòu)框圖
為了實現(xiàn)LCD屏幕的正常顯示,LCD驅(qū)動電路需要接收四組信號,分別是:IDATA(像素數(shù)據(jù)信號)、IDCLK(時鐘信號)、IHS(行同步信號)、IVS(場同步信號)。這四組信號必須按照驅(qū)動芯片手冊提供的規(guī)范時序進行驅(qū)動,其中行同步和場同步信號用來標記屏幕上一行和一幀圖像的開始和結(jié)束的時間,屏幕掃描線從上到下,從左到右依次掃描。在這個過程中,只需要將幀緩存中的圖像像素數(shù)據(jù)依次輸出,就可以實現(xiàn)屏幕圖像的顯示。上述行同步信號與場同步信號由LCD時序信號生成模塊產(chǎn)生,同時該模塊生成坐標數(shù)據(jù)提供給輸出控制模塊。
在一個標準行周期內(nèi)對時序信號的要求如下:一個低電平脈沖由IHS信號線輸入到LCD,標志著一行數(shù)據(jù)結(jié)束和下一行數(shù)據(jù)顯示的開始,其時間間隔計為THP。數(shù)據(jù)信號Data signal從第THE個IDCLK周期開始顯示有效,直到第(THE+THD)個IDCLK周期,在THD這段時間間隔內(nèi),一行中每個像素點的RGB數(shù)據(jù)按照像素時鐘IDCLK的頻率依次輸出,驅(qū)動像素數(shù)據(jù)信號線,這樣就完成了一行圖象的顯示。最后,在進行下一行圖象顯示之前,還需要重新關(guān)閉像素數(shù)據(jù)信號,時間間隔被定義為THF個時鐘周期。對于場周期內(nèi)信號的時序要求與行周期類似。
本設計中使用的液晶屏為TD036THEA1,屏內(nèi)驅(qū)動電路相關(guān)時序參數(shù)如下表:
表1 時序參數(shù)表
為了提高本設計的通用性,在對時序信號生成模塊進行代碼設計的時候,采取參數(shù)化的設計方法。這樣在使用其他型號TFT類型液晶屏的時候,只需在SOPC Builder開發(fā)環(huán)境中調(diào)用該控制組件時,修改以上相應參數(shù)就可以完成對控制器的復用,不需要修改源代碼,因而降低了控制器組件的移植難度。
為了提高控制信號的實時性,采用有限狀態(tài)機生成相應的時序信號。對于行同步生成狀態(tài)機Hstate,有HCYC、HBACK、HDISPLAY、HFRONT四個狀態(tài),分別對應TH、THE、THD、THF這四段時間間隔。行狀態(tài)機的狀態(tài)轉(zhuǎn)移圖分別如圖3所示。
圖3 行狀態(tài)機狀態(tài)轉(zhuǎn)移圖
該狀態(tài)機總共包含兩個輸出信號,其中IHS表示行同步時序信號,DATA為數(shù)據(jù)輸出有效信號,表示當前狀態(tài)為LCD顯示狀態(tài)。
狀態(tài)機的工作流程如下:復位后,狀態(tài)機進入行同步狀態(tài)HCYC。該狀態(tài)下,行同步信號IHS處于無效狀態(tài)。當HCount計數(shù)值到達1時,狀態(tài)機進入HBACK狀態(tài),從進入該狀態(tài)一直到下一行數(shù)據(jù)開始顯示期間,IHS信號一直保持有效。當HCount計數(shù)值到達151時,狀態(tài)機進入行數(shù)據(jù)顯示有效HDISPLAY狀態(tài),表示此時可以將像素數(shù)據(jù)顯示到LCD屏幕上。當HCount計數(shù)到1111時,狀態(tài)機進入HFRONT狀態(tài),該狀態(tài)表示一行圖象已經(jīng)顯示完成。當HCount計數(shù)滿1170時,狀態(tài)機返回到HCYC狀態(tài),同時HCount復位為1,開始下一行數(shù)據(jù)的顯示。至于場狀態(tài)機的狀態(tài)轉(zhuǎn)移關(guān)系與行狀態(tài)機類似。
為了實現(xiàn)Nios II處理器對幀緩存讀操作的控制,依照Avalon總線規(guī)范,在幀緩存讀模塊外部設計了一個Avalon主端口接口。在Avalon總線規(guī)范中,Avalon主端口可以主動發(fā)起數(shù)據(jù)傳輸,并且這個傳輸過程不需要處理器干預。由于圖像是一幀一幀輸出到LCD屏上的,而且顯示刷新的過程是無限循環(huán)的,所以必須反復執(zhí)行幀緩存讀操作,因此,選擇以流水線讀傳輸模式對主端口進行設計
分析幀緩存讀模塊的工作流程可以發(fā)現(xiàn):該模塊只存在兩個狀態(tài):空閑狀態(tài)和讀狀態(tài)。具體過程為:當讀模塊處于顯示有效的時序周期時,就進入幀緩存讀狀態(tài),當顯示有效的時序周期結(jié)束,模塊隨即進入空閑狀態(tài)。同樣使用一個master_state狀態(tài)機來表示模塊狀態(tài)。該狀態(tài)機有idle和read兩個狀態(tài)。在read狀態(tài),每次需要傳輸?shù)臄?shù)據(jù)個數(shù)在LENGTH_COUNT寄存器中設置,主端口根據(jù)讀信號m_read,地址信號m_address發(fā)起流水線讀傳輸,每讀一個幀緩存地址單元并獲取其相應數(shù)據(jù)后,地址自增1,LENGTH_COUNT寄存器值自減1。當LENGTH_COUNT的值減為0時,表示一次幀緩存讀傳輸已經(jīng)結(jié)束。狀態(tài)機進入idle狀態(tài)。此時將幀緩存中的圖像數(shù)據(jù)保存到輸出緩沖FIFO中。該FIFO具體是通過使用Quartus II軟件自帶的Mega Wizard管理器生成一個的異步FIFO來實現(xiàn),容量為1K。
將該LCD控制組件在基于Nios處理器的GPS數(shù)據(jù)接收系統(tǒng)中進行應用。在Nios IDE環(huán)境中采用C語言對串口傳輸過來的衛(wèi)星數(shù)據(jù)進行解碼、提取、轉(zhuǎn)換,并調(diào)用圖形接口函數(shù)來繪制點、直線、矩形、字符等。最終設計的硬件電路下載到FPGA開發(fā)板的配置芯片中,運行軟件后,在LCD液晶屏中顯示出正確的圖像。具體LCD顯示效果如圖4所示:
實踐證明,該LCD控制器具備Avalon總線接口,易于與其他標準IP核構(gòu)成以Nios為核心的片上系統(tǒng),同時提高了處理器的運行效率。采用IP核參數(shù)化設計,提高了控制組件的通用性和復用性。
圖4 LCD顯示效果圖
[1] 盛磊,徐科軍,陳智淵.數(shù)字在屏幕顯示控制核的設計與FPGA實現(xiàn)[J].上海交通大學學報,2006,40(5):762—766.
[2] 潘松,黃繼業(yè).SOPC技術(shù)實用教程[M].北京:清華大學出版社,2005.
[3] 侯長宏,袁慧梅.基于SOPC的NiosⅡ與液晶模塊接口及程序設計[J].液晶與顯示,2008,23(6):307-310.