可編程片上系統(tǒng)(SOPC)是一種特殊的嵌入式系統(tǒng),它設計方式靈活,具備軟硬件在系統(tǒng)可編程功能。SOPC 在設計上以集成電路IP 核為基礎,而自行開發(fā)的SOPC IP 核,根據實際硬件資源和功能任務需求來定制顯示控制功能,可以增強系統(tǒng)可靠性和設計靈活性,降低了成本。目前針對LCD顯示設計的控制器IP 核文章較多[1-2],但對于TFT-LCD 觸控屏設計的控制器IP 核文章較少[3],而且這類文章中很少見對控制器各個模塊進行仿真驗證內容。
文中提出一種針對TFT-LCD 觸控屏控制器IP 核的設計方法。該控制器具有Avalon 總線接口,與其他標準IP 核一起構成以NiosⅡ為核心的片上系統(tǒng)。針對本設計中觸控屏幀緩存讀操作的特點,選擇以Avalon 主端口接口的形式對模塊進行開發(fā),大大提高了處理器運行效率,同時實現了觸控屏控制器IP 核的參數化設計, 提高了控制器對于不同LCD 屏的可復用性,最后通過對輸出緩沖FIFO 的使用,解決了數據讀出時鐘與像素時鐘不同步問題。
1 觸控屏控制器總體結構
在SDRAM 中開辟一段儲存空間, 用來存放屏幕圖像數據,稱之為幀緩存。通過設計適當的硬件邏輯來建立幀緩存與屏幕圖像像素之間的一一對應關系,并配合觸控屏顯示所必需的行、場時序信號,將幀緩存中的數據不斷地輸送給觸控屏, 完成最終的顯示刷新, 其總體結構如圖1所示。
觸控屏控制器刷新周期開始時,主端口模塊根據幀緩存地址生成邏輯所產生的地址,完成主端口的讀操作,實現幀緩存中數據讀取,并將該數據輸送給輸出緩沖模塊。同時,時序信號生成模塊依據觸控屏的時序規(guī)范生成行、場同步信號,以及與像素同步的相關顯示點的橫、縱坐標。觸控屏控制器數據顯示模塊不斷從緩存中讀取屏幕顯示數據。
2 觸控屏控制器模塊設計
2.1 Avalon-MM Slave 接口模塊
本模塊掛載在Avalon 總線上作為從設備使用,用來對所有的用戶邏輯進行配置和控制, 核心功能是寄存器操作,包括讀、寫以及一些特殊指示與狀態(tài)信號的產生與轉換。通過從端口得到的數據分別賦值給相應的寄存器,寄存器分為:FIFO 地址寄存器、坐標寄存器、一幀數據長度寄存器。本模塊是最后在觸控屏上實現圖形顯示功能的接口電路。
2.2 Avalon-MM Master 接口模塊
LCD 控制器的本功能是產生LCD 時序信號,將幀緩存中的圖像信息進行有序輸出。由于圖形是一幀一幀地輸出到觸控屏上,而且顯示刷新過程是無限循環(huán)的,所以必須反復執(zhí)行幀緩存讀操作,因此本設計對上述讀操作進行了硬件加速。可以不斷地從FIFO 讀取圖像數據,并且在行、場和觸控屏顯示有效時間段讀取圖像數據,其它時間不讀圖像數據,這樣減少了Avalon 總線的使用,有利于圖像顯示并減少了總線負擔。分析讀幀緩存的操作可以發(fā)現,該過程總是按照一定的順序,將存儲器中的數據讀出來進行顯示輸出,規(guī)律性非常強。本模塊主要完成地址及操作時序的產生、像素數據緩存寫操作控制、數據寬度的變換等功能。
2.3 觸控屏時序產生模塊
本文的觸控屏引出信號線有5 根:像素數據信號、觸控屏時鐘信號、行同步信號、場同步信號、使能信號。為了實現觸控屏的正常顯示,必須對以上信號按照規(guī)范的時序進行驅動,其中,行、場同步信號分別用來標記屏幕上一行和一幀圖像的顯示時間,屏幕掃描線從上到下、從左到右依次掃描。在這個過程中,只需將幀緩存中的圖像像素數據依次輸出,就可以實現屏幕圖像顯示。
2.4 FIFO 幀緩存模塊
DDR 控制器隨著系統(tǒng)時鐘不斷往FIFO 寫數據, 當一幀數據寫滿時就不再進行寫狀態(tài),而等待LCD 控制器進行讀狀態(tài), 顏色處理器從FIFO 中獲取數據, 每次從FIFO 中讀取32 bit 數據并不斷送給LCD.顏色處理器將每一個字節(jié)作為一個像素數據,并將一個字節(jié)的像素數據轉換為3 個字節(jié)的RGB 數據。顏色處理器從同步FIFO緩沖器中讀取數據,當同步FIFO 緩沖器寫和讀相互不沖突時,同步FIFO 緩沖器產生讀請求,讓Avalon 主端口向Avalon 總線發(fā)起讀傳輸,從總線上獲取的數據將寫入同步FIFO 緩沖器,顏色處理器從FIFO 中讀取像素值,并且傳給LCD 顯示模塊。
3 Modelsim 仿真與測試
1)Avalon 從端口仿真與測試
由圖2 可知,從端口一位地址對應一位數據。當寫信號有效時,將數據寫入相應的寄存器;當讀信號有效時,對應寄存器地址將數據輸出。通過從端口數據寫入來控制LCD 模塊,控制LCD 讀取圖像的首地址和讀取數據的長度。
圖2 從端口仿真波形圖
2)Avalon 主端口仿真與測試
Avalon 模塊的作用是響應Avalon 主端口的讀請求,并將FIFO 中的相應數據輸出給Avalon 主端口。通過讀信號和相應地址主端口,不斷地從FIFO 中讀取圖像數據,并按照LCD時序將圖像數據輸送給LCD.圖3 為Avalon 主端口從顯存中讀取數據時的仿真波形圖。
3)LCD圖像顯示模塊測試
LCD 顯示模塊是將從FIFO 中讀出的圖像數據在觸控屏上顯示出來。從圖4 可以看出, 當DEN 有效時, 將像素數據分為R、G、B 傳送給LCD,HCount 和VCount 為行計數器和場計數器,隨著LCD 時鐘將各個像素點傳送給觸控屏。
圖4 LCD 顯示的數據
4 基于SOPC 觸控屏系統(tǒng)硬件設計
基于SOPC 觸控屏系統(tǒng)硬件設計如圖5 所示, 其中,SDRAM 控制器實現處理器和SDRAM 之間的數據存取,包括SDRAM 存儲程序和字符、圖形以及顏色等數據;JTAGUART實現PC 和開發(fā)板通信, 主要用于調試, 從鍵盤輸入相應數據,然后通過NiosⅡ軟件調試處理器,將數據通過LCD 接口傳輸到觸控屏上顯示出來[4].開發(fā)板采用大連宇華公司的H3C40-V6 開發(fā)板。板上的FPGA芯片為EP3C40F484C6, 觸控屏為4.3 英寸彩色數字TFT-LCD 觸控屏,分辨率800×484,可以顯示文字、彩圖等。板上自帶觸控屏顯示驅動器。
根據所用到的外設和器件特性,在SOPC Builder 中建立系統(tǒng)所要添加的外設模塊, 主要包括:NiosⅡ、SDRAM 控制器、JTAG UART、時鐘橋、三態(tài)橋、鎖相環(huán)PIO 等[5-6].設定好各個參數,再添加LCD 控制器,將LCD 控制器的Avalon 主端口接口連接到SDRAM 上。
創(chuàng)建的包含NiosⅡ系統(tǒng)的QuartusⅡ頂層模塊,如圖6所示。
5 基于SOPC 觸控屏系統(tǒng)軟件設計
根據硬件設計編寫軟件測試程序,以驗證LCD觸控屏顯示。首先往顯存中寫入預定的數據來初始化顯存,然后通過編程將相應的參數寫入LCD 的各個控制寄存器, 最后使能-LCD 控制器,以觀察顯示屏的顯示輸出是否正確。本設計采用C 語言編程,讓觸控屏顯示彩條。在NiosⅡIDE 軟件平臺上, 創(chuàng)建C/C++ 工程, 配置工程的系統(tǒng)屬性,然后編譯及運行程序。在編譯成功后,自動下載到硬件平臺上開始運行程序,這時在觸控屏上觀察到效果如圖7 所示, 圖中彩條顏色從上至下分別為紅、淺綠、藍、綠、粉、紅、紫、白、藍。
6 結論
采用自定義添加觸控屏接口控制模塊來定制用戶邏輯外設。使用硬件描述語言建立控制器模塊并進行仿真測試;采用參數化組件設計,使其具有較強的通用性和兼容性。該控制器IP核設計有效利用FPGA資源,節(jié)約成本,增強系統(tǒng)可靠性和設計靈活性,并且可移植性強。