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