摘 要: 主要闡述了以Altera公司的FPGA為核心的基于NiosⅡ軟核的嵌入式LCD圖形顯示設計方法。從系統的角度提出在LCD上顯示圖形的設計過程,給出搭建NiosⅡ軟核的系統整體結構圖,并最終實現了圖形以及漢字在LCD上的顯示,最后總結出利用FPGA技術實現LCD圖形顯示的優勢。
關鍵詞: LCD顯示; NiosⅡ軟核; 現場可編程門陳列(FPGA)
隨著工藝技術的發展與市場的需要,超大規模、高速、低功耗的FPGA不斷推出,并且被廣泛地應用在高速、高密度的數字電路設計領域。SoPC[1](System on a Programmable Chip)是一種基于FPGA 的SoC設計方案,它將FPGA及微處理器的核心嵌在同一芯片上,構成一個可編程的SoPC系統框架,具有高度的集成能力,很大程度上減小了產品體積以及外部信號對系統的干擾,大大增加了系統的可靠性、穩定性和靈活性。本文介紹一種基于Nios Ⅱ軟核處理器實現對LCD控制顯示圖形的方法。在設計中,利用Altera的FPGA的SoPC Builder定制Nios Ⅱ軟核處理器及其與顯示功能相關的“軟”硬件模塊,來協同實現控制顯示的軟硬件設計。
1 系統設計
在工業控制和消費電子領域,LCD的顯示技術呈現出越來越多的方式。本設計采用基于NiosⅡ處理器的液晶顯示圖形的設計方法,在SoPC Builder中以自定義接口的形式利用總線方式對LCD控制器進行設計,LCD控制器[2]一端接收用戶控制,一端實現LCD復雜時序,并集成多種功能。用戶只需要與控制器的簡單接口交互,便能達到控制LCD的目的,進而編寫應用程序,實現顯示漢字、圖片、畫圖等功能。本文的設計方法大大降低了工作量,加快了數據的處理速度和掃描頻率,提高了各個功能模塊的集成度,改善了系統的性能和可靠性。
本設計最終實現了一個基于Altera公司的DE2 開發板的TFT—LCD 控制器對已知圖形的顯示。
2 硬件設計
2.1 系統的整體結構
SoPC系統基于Avalon 總線與其他系統構件來通信,整個SoPC系統設計中的外設通過Avalon總線模塊連接起來,并且總線規范為外設端口與總線模塊之間的數據傳輸提供了互連模型。
本設計的SoPC系統整體結構如圖1所示。
2.2 SoPC系統建立
基于FPGA的SoPC方案[3]的可配置性表現在搭建硬件平臺時,用戶可以根據自己要實現的功能來靈活選擇所需要的存儲器以及外圍接口設備,而不用把所有提供的元件添加到系統中,這樣就可以因功能不同而有針對性地設計每一個系統,從而也避免了添加無用元件占用FPGA資源而引起浪費。例如,由系統的整體結構可知,本系統所需要的基本組件有CPU、SDRAM控制器、JTAG-UART、SRAM、定時器以及用三態橋來連接的CPI-FLASH,因為在TFT-LCD已經帶有控制器了,所以就不需要以自定義組件的形式在SoPC Builder中添加該元件的控制器。
本系統的構建基于QuartusⅡ8.0版本的SoPC Builder工具,它使用CPU、存儲器接口和外圍設備(例如本設計中添加的掛接在三態橋上的接口gx_tft_lcd)生成系統模塊,并在Avalon總線模塊和所有系統組件上的從屬設備端口之間自動生成互連邏輯。由于利用總線方式來訪問已經帶有控制器(TCB8000A)的TFT LCD,因此需要在Nios Ⅱ系統模塊中手動添加一個三態接口gx_tft_lcd。因為是只創建一個接口,因此不需要HDL文件和HAL文件,但是在信號設置時,應根據Avalon總線三態從端口寫時序圖和TCB8000A的控制接口來添加需要的信號。
設置生成新元件后就可以將新定制的gx_tft_lcd添加到Nios系統中,產生Nios II 系統模塊,并添加到工程中。保存編譯,通過之后可將編譯生成的sof文件下載到FPGA芯片,至此硬件方面的工作基本完成。
圖2所示為搭建本設計的硬件平臺中使用SoPC Builder工具來添加生成的系統模塊。
3 軟件設計
Nios II處理器的軟件程序設計使用HAL (Hardware Abstraction Layer)系統庫。HAI系統庫[4]為程序員提供了應用程序與底層硬件交互的設備驅動接口,簡化了應用程序的開發,同時還為應用程序與底層硬件驅動劃分了一條很清晰的分界線,從而大大提高了應用程序的可復用性,使得應用程序不受底層硬件變化的影響實現系統硬件和應用程序之間的通信。HAI API[5](Application Program Interface)集成了ANSI C標準庫,使上層程序像訪問C函數庫一樣訪問系統硬件和軟件。軟件設計不用考慮底層硬件實現的細節而直接編寫應用程序。系統軟件結構如圖3所示。
軟件系統主要分為兩部分:系統的初始化對LCD控制器的控制以及顯示數據的處理。
系統初始化,調用HAL的各模塊初始化程序,并定義在后面程序當中要用到的各個對LCD顯示屏背景顏色、字體顏色設置的函數。
本設計采用總線方式[6]對LCD控制器(TCB8000A)的時序進行控制,利用SoPC Builder添加完一個掛接在三態橋上的接口,將TCB8000A的控制引腳與Avalon總線相關聯。由于TCB8000A的控制時序與Avalon總線三態接口的時序吻合,因此只需在定制接口時調整等待、建立時間便可以達到控制目的。在Nios程序內用簡單的寫操作產生Avalon總線時序,需要注意的是TCB8000A只需一個地址控制線A1,且與總線的A1相連,因此寫操作應使總線上的地址線A1符合TCB8000A對A1管腳的時序要求。即在并行模式下,MPU首先把完整的命令包送入地址為F004H的只寫寄存器(A1=0),然后將“1”送到地址為F006H的寄存器(A1=1),結束一個命令包,并打開顯示。對于地址線A0,A2~A17使用的控制板已經設定好了,所以只需要控制A1便可完成命令的送入。流程圖如圖4所示。
代碼如下:
void SdCmd(alt_u8 Command) //send command
{
IOWR(GX_TFT_LCD_BASE, 0, Command); //A1=0
}
void CmdEnd() //send command
{
IOWR(GX_TFT_LCD_BASE, 2, 1); //A1=1
}
在控制時序的基礎上,程序中的顯示圖片部分[7]首先把要顯示的圖片用Bmp2HexPro.exe軟件工具轉換成數據信息, 把圖片的數據信息以頭文件的形式(picture.h)添加在工程中。
對儲存的多張圖片進行分類標號(例如picx1、picx2、picx3等),然后在C主程序中用switch語句[8]來分別調用表示該圖片信息的索引號碼,示例程序如下:
void ShowBMP160(alt_u32 X,alt_u32 Y, alt_u8 picIndex)
{
alt_u8 i,j,k,Buffer[5],*pic;
alt_u16 p;
alt_u32 addr;
switch(picIndex){
case 1: pic=picx1;break;
case 2: pic=picx2; break;
case 3: pic=picx3; break;
default: break;
}
接下來就是給LCD的RAM分配地址,把要顯示的圖片的數據信息以數據指針的方式從左到右依次寫入目的地址。而SdCmd()函數為自己編寫的發送數據命令的子函數。
addr=Y*5;
addr=addr<<7;
addr=addr+X*2; //same as addr=X*2+Y*320*2
p=0; //Data ROM pointer
for(j=0;j<10;j++) //sprit one line data to 8 packet
{
SdCmd(0x84);
//send data packet,送一個像素的數據到內存
SdCmd(40);
//no of byte in one packet,結束一個命令包
for(k=0;k<20;k++) //no of pixels in one packet
{
SdCmd(pic[p+1]); //low byte
SdCmd(pic[p]); //high byte
p+=2;
}
CmdEnd();
}
addr+=640; //next line
}
}
對于漢字以及字符的顯示也是通過定義PrintGB()函數,類似上述程序以命令包的形式把要顯示的信息送入目的地址,在后面的程序中直接調用該子函數來進行顯示。
隨著LCD顯示越來越多地應用于生產生活的各個方面,各種各樣的處理器控制LCD顯示的方案也相繼出現,本文通過整個系統設計和在硬件平臺上實驗提出了一種基于FPGA的SoPC方案,并最終在平臺上面驗證了其可行性。該方案的優勢在于系統功能改進的靈活性, 在不改變硬件平臺的情況下對系統進行增刪和優化,降低了系統成本,這是傳統ARM方案無法達到的。由于微處理器和用戶邏輯接口都集成在一塊Cyclone芯片上, 編程人員可以靈活地定義I/O接口, 基于FPGA有更好的靈活性和可靠性[9]。對基于NiosⅡ的微處理器, 用戶能根據顯示屏的大小靈活調整硬件邏輯設計以實現對顯示屏的控制,而不需要改變其原有硬件構成。但是16位微控制器卻只能對固定大小的顯示屏進行控制。從長遠來看,基于NiosⅡ的微處理器, 可以通過更改其硬件邏輯配置方便地進行版本升級,節省了成本。開發人員通過處理器[10]指令集中增加定制指令, 可以加速軟件算法, 定制指令可以在一個周期的時間內完成復雜的處理任務,為系統優化提供了一種高性價比的解決方案。
參考文獻
[1] 潘松,黃繼業,曾毓.SoPC技術實用教程[M].北京:清華大學出版社,2005.
[2] 王剛,張瀲.基于FPGA的SoPC嵌入式系統設計與典型實例[M].北京:電子工業出版社,2009.
[3] 王曉迪,張景秀.SoPC系統設計與實踐[M].北京:北京航空航天大學出版社,2008.
[4] 蔡偉剛.NiosⅡ軟件架構解析[M].西安:西安電子科技大學出版社,2007.
[5] 田秀偉,鄭喜鳳,丁鐵夫.基于SoPC的LED顯示屏控制器設計[J].液晶與顯示,2007,22(6):737-741.
[6] 孫愷,程世恒.NiosⅡ系統開發設計與應用實例[M]. 北京:北京航空航天大學出版社,2007.
[7] 郭強.液晶顯示應用技術[M].北京:電子工業出版社, 2003.
[8] 郭書軍,王玉龍,葛紉秋.嵌入式處理器原理及應用— Nios系統設計和C語言編程[M].北京:清華大學出版
社,2004.
[9] 孫偉,龔兆崗,楊忠根.基于NiosⅡ的LED顯示屏控制系統[J].上海海事大學學報,2005,26(2).
[10] 高兵,陳莉平.液晶和矩陣鍵盤SoPC外設組件設計開發[J].微計算機信息,2008,3(2):152-154.