摘 要: 根據(jù)圖像的分解、傳送、合成的原理以及STN型單色點陣液晶顯示器件的灰度顯示機理,提出了一種既能減小芯片面積、降低功耗又能提高灰度級數(shù)的多公式算法;利用Verilog HDL語言工具完成了灰度控制模塊" title="控制模塊">控制模塊的設(shè)計;利用SYNOPSYS公司的EDA工具對該灰度控制模塊進(jìn)行了仿真、綜合,并在FPGA上進(jìn)行了驗證。
關(guān)鍵詞: 灰度 公式算法 模塊設(shè)計 FPGA
由于人眼能區(qū)分光信號的強弱明暗,所以要獲得優(yōu)良的顯示效果,必須實現(xiàn)灰度顯示。特別是在圖像方面,灰度級數(shù)越多,圖像層次越分明,圖像越柔和。液晶顯示器作為一種顯示器件,總是希望它能顯示生動逼真且穩(wěn)定無閃爍的圖像,所以灰度的表達(dá)對于液晶顯示器來說是極其重要的。嵌入式系統(tǒng)要求整個芯片面積和功耗越小越好,并能實現(xiàn)集成化。因此,在支持液晶顯示板的嵌入式LCD控制器中,如何實現(xiàn)灰度控制并有效地降低整個芯片面積和功耗、降低信號損失、提高畫質(zhì)是IC設(shè)計者的一個研究熱點。
本文首先根據(jù)STN型單色點陣液晶顯示器件的灰度顯示機理并利用相鄰像素的通、斷進(jìn)行控制的規(guī)則,提出一種基于面積-幀調(diào)制的公式算法,從而利用多個公式達(dá)到減小芯片面積、降低功耗、降低成本、提高灰度級別、消除圖像閃爍的目的;然后利用Verilog HDL語言工具編寫RTL級代碼,完成灰度控制模塊的設(shè)計;最后對該模塊進(jìn)行仿真、綜合,并在FPGA上進(jìn)行驗證。
1 灰度公式算法的提出
我們知道,從圖像到顯示屏的顯示過程一般分為分解、傳送與合成三個過程[1]。也就是首先把整個畫面分解成許多黑白程度(亮度)不同的小點,即“像素”,它們具有單值的光特性(亮度)和幾何位置(x,y);然后利用人眼視覺特性,采用掃描方法,按時間順序逐一傳送空間分布的每一像素的亮度;最后再將各個像素合成為整個畫面。只要確保發(fā)送端坐標(biāo)與接收端坐標(biāo)(x,y)的一一對應(yīng)關(guān)系,就可以使被傳送的圖像不失真??梢?,這里所說的像素亮度實際上是(x,y,t)的函數(shù),t代表傳送時間。
STN型單色點陣液晶顯示器件采用的是一種無源矩陣型結(jié)構(gòu)[2],其數(shù)據(jù)位列選擇信號是處于鎖定狀態(tài)的二值(黑、白)信號,即所寫入的灰度圖像顯示數(shù)據(jù)是用“1”(選通為黑)和“0”(非選通為白)表示的脈沖信號。一個像素點的亮度是由若干幀選通該點的次數(shù)決定的,選通次數(shù)越多,該像素點越亮,否則就越暗。因此,只要在若干幀內(nèi)該像素點被選通的次數(shù)一定,不管選通和非選通的次序(即“1”和“0”的輸出順序)如何,它們的亮度是一致的。由于點陣式液晶顯示屏上相鄰像素之間相互有影響,而圖像穩(wěn)定與否又與各像素點之間能否有效配合密不可分,這就要求盡可能地使得空間上相鄰像素的激發(fā)隨時間擴(kuò)散,而同一時刻激發(fā)的像素在空間上又能擴(kuò)散。為了實現(xiàn)整幅畫面的灰度顯示效果,若從整幅畫面考慮,勢必增加控制難度,因為一幅畫可能由幾千、幾萬乃至幾百萬個像素組成。如果將顯示區(qū)域按事先預(yù)定的大小劃分成塊,對每個方陣采用相同的控制規(guī)則,那么對整幅畫面的控制將轉(zhuǎn)化為對一個方陣的控制,這樣可以大大降低對各像素點的控制難度。本文以16級灰度為例,將顯示區(qū)域劃分成15×15的方陣,以15幀為一循環(huán)周期,將16種亮度在單位時間內(nèi)的脈沖輸出次序用0、1、2、...的順序標(biāo)注,如表1所示。
16級灰度的原始圖像數(shù)據(jù)" title="圖像數(shù)據(jù)">圖像數(shù)據(jù)信號被劃分為四組:
數(shù)據(jù)信號Ⅰ(0000 1111),
數(shù)據(jù)信號Ⅱ(0101 0110 0111 1000 1001 1010),
數(shù)據(jù)信號Ⅲ(0011 0100 1011 1100),
數(shù)據(jù)信號Ⅳ(0001 0010 1101 1110)。
對于數(shù)據(jù)信號Ⅰ,所有15幀中的相應(yīng)點都置成“0”或“1”。
對于數(shù)據(jù)信號Ⅱ,脈沖序列值的計算公式如下:
k=mod[(c+r+f)/15](1)
對于數(shù)據(jù)信號Ⅲ,脈沖序列值的計算公式如下:
k=mod[(2c+r+f)/15](2)
對于數(shù)據(jù)信號Ⅳ,脈沖序列值的計算公式如下:
k=mod[(4c+r+2f)/15](3)
式中,c、r表示方陣中像素的幾何位置(c=0,1,2,...,14;r=0,1,2,...,14),f表示單位時間內(nèi)所處的幀數(shù)(f=0,1,2,...,14),mod表示取余運算,k表示脈沖序列值(k=0,1,2,...,14)。根據(jù)公式算出的脈沖序列值和代表亮度的圖像數(shù)據(jù),可從查找表" title="查找表">查找表(表1)上確定任何一個像素在任何時刻的選通情況。在這些公式中,(c,r)反映的是面積灰度調(diào)制,同一幀中不同的像素有不同的k值;而f反映的是幀灰度調(diào)制,某一個像素的f值變化時,其k值也在變化,且在一個單位時間內(nèi)其k值不重復(fù)。因此,這種公式算法使得各像素在時間上有累加的效果,同時還可利用分散激活產(chǎn)生半色調(diào)像素點來增加像素明暗變化率,從而使原始圖像在進(jìn)行灰度調(diào)制時能夠得到穩(wěn)定的顯示。
2 灰度控制模塊設(shè)計
灰度控制模塊主要控制像素灰度數(shù)據(jù)的輸出,一方面要保證LCD顯示器件上每個像素的幾何位置要與原始畫面上的每個像素的幾何位置一一對應(yīng),另一方面要保證在一定幀數(shù)之內(nèi)能夠輸出表示原始像素數(shù)據(jù)所要表示的灰度效果。
公式(1)、(2)、(3)中有三個參數(shù):c、r、f,在灰度控制模塊中可以采用三個計數(shù)器(列計數(shù)器、行計數(shù)器和幀計數(shù)器)來實現(xiàn)。前兩個計數(shù)器完成顯示區(qū)域的劃分工作,同時產(chǎn)生c、r值。而幀計數(shù)器用于產(chǎn)生f值,然后根據(jù)這三個計數(shù)器的值計算出各像素點在任何時刻的脈沖序列值k。根據(jù)此分析,可以畫出如圖1所示的灰度控制模塊的結(jié)構(gòu)圖。
本灰度控制電路實現(xiàn)兩種灰度顯示模式:2bpp和4bpp,由BPIX的值定義。在硬件中,主要實現(xiàn)4bpp模式即16級灰度。對于2bpp模式,可通過16級灰度映射實現(xiàn)。整個操作過程如下:當(dāng)異步復(fù)位信號(rst_lcd_n_a)為1時,內(nèi)核通過總線對LCD控制器中的寄存器進(jìn)行配置操作,直到配置最后一個使能信號(lcd_en)為止;當(dāng)使能信號有效時,灰度控制電路開始正常工作;當(dāng)總線數(shù)據(jù)緩沖器" title="數(shù)據(jù)緩沖器">數(shù)據(jù)緩沖器為非空(ldata_fifo_empty)且顯示數(shù)據(jù)緩沖器為非滿(rgb_fifo_full)時,灰度控制電路向總線數(shù)據(jù)緩沖器發(fā)出讀請求信號(lcd_fifo_rreq),并在控制器工作時鐘(clk_lcd)上升沿到來時讀取一個32bit數(shù)據(jù),將其鎖存在32bit的鎖存器" title="鎖存器">鎖存器中,并且在隨后的數(shù)個工作時鐘內(nèi)將數(shù)據(jù)送出;鎖存器每個工作時鐘送出一個像素的數(shù)據(jù)(由BPIX的值來定義),當(dāng)BPIX定義為2bpp時,則鎖存器每次送出2bit數(shù)據(jù),n即為2,送出32bit的數(shù)據(jù)需要16個工作時鐘;當(dāng)BPIX定義為4bpp時,鎖存器每次送出4bit數(shù)據(jù),n即為4,送出32bit的數(shù)據(jù)需要8個工作時鐘;鎖存器送出所有32bit的數(shù)據(jù)后,如果總線數(shù)據(jù)緩沖器仍為非空且顯示數(shù)據(jù)緩沖器仍為非滿時,鎖存器繼續(xù)向總線數(shù)據(jù)緩沖器讀取數(shù)據(jù)(lcd_fifo_data[31:0]);鎖存器送出的數(shù)據(jù)一方面送給列計數(shù)器再送給行、幀計數(shù)器進(jìn)行計數(shù),另一方面送給灰度級映射單元。灰度級映射單元根據(jù)BPIX值判斷所送來的數(shù)據(jù)是何種灰度模式。如果是4bpp模式,則不需要進(jìn)行數(shù)據(jù)映射,直接將數(shù)據(jù)送到灰度算法模塊;如果是2bpp模式,則進(jìn)行4級灰度數(shù)據(jù)向16灰度級映射,產(chǎn)生4bit數(shù)據(jù)并送給灰度算法模塊?;叶人惴K根據(jù)列、行、幀計數(shù)值和像素數(shù)據(jù)算出相應(yīng)的灰度數(shù)據(jù)。該灰度數(shù)據(jù)只有一位,需經(jīng)一個移位寄存器轉(zhuǎn)換成16位送給顯示數(shù)據(jù)緩沖器,并同時向顯示數(shù)據(jù)緩沖器發(fā)出寫請求信號(rgb_fifo_wreq)。上述所有的操作都是在LCD控制器工作時鐘clk_lcd下進(jìn)行的。
3 顯示區(qū)域方陣的劃分
在設(shè)計列計數(shù)器、行計數(shù)器和幀計數(shù)器時,必須保證同步性,否則就會發(fā)生顯示的錯誤。在這里,采用的方法是通過顯示的數(shù)據(jù)量進(jìn)行行計數(shù)器操作,再進(jìn)行列計數(shù)器、幀計數(shù)器操作。其狀態(tài)流程如圖2所示。具體操作過程如下: 當(dāng)LCD控制器在非使能狀態(tài)時,所有的行、列、幀計數(shù)器都清0。LCD控制器使能后,當(dāng)灰度控制模塊從顯示存儲器讀取圖像數(shù)據(jù)時,列計數(shù)器x[9:0]和c[3:0]同時開始計數(shù),其中c[3:0]進(jìn)行模15計數(shù)。當(dāng)計數(shù)器x[9:0]的值等于(xmax-1)時,x[9:0]和c[3:0]都清0并重新計數(shù),同時行計數(shù)器y[8:0]和r[3:0]作加1操作,其中r[3:0]進(jìn)行模15計數(shù)。當(dāng)x[9:0]的值等于(xmax-1)時,計數(shù)器x[9:0] 和r[3:0]清0。當(dāng)計數(shù)器y[8:0]的值為(ymax-1),且x[9:0]為(xmax-1)時,所有的行、列計數(shù)器清0,即完成一幀圖像數(shù)據(jù)的計數(shù)操作,此時幀計數(shù)器f[3:0]加1。重復(fù)上述步驟即可進(jìn)行下一幀的計數(shù)操作。由計數(shù)器x[9:0]、y[8:0]定義像素在顯示區(qū)域方陣中的位置(x[9:0],y[8:0]);由計數(shù)器c[3:0]、r[3:0]定義像素在顯示區(qū)域中的幾何位置(c[3:0],r[3:0])。由此可以保證灰度控制模塊在進(jìn)行數(shù)據(jù)處理時,原始像素的幾何位置與LCD顯示器件上每個像素的幾何位置一一對應(yīng),同時完成了顯示區(qū)域方陣的劃分。
4 灰度算法模塊的說明
灰度算法模塊主要是通過公式按預(yù)定的脈沖序列分布方式調(diào)整各幀0和1的密度,在panel上產(chǎn)生中間灰度級顏色。根據(jù)上述介紹,該灰度算法是通過三個公式實現(xiàn)的。為了減少運算量,降低芯片面積,公式(1)、(2)、(3)可以進(jìn)一步轉(zhuǎn)化為公式(4)、(5)、(6):
k=mod[(c+r+f)/15]??? (4)
p=mod[(c+k)/15]?????? (5)
w=mod[(p+p-r)/15]??? (6)
根據(jù)不同的圖像數(shù)據(jù)信號選擇相應(yīng)的運算公式,然后再根據(jù)參數(shù)c、r、f計算出各像素點在任何時刻所處的脈沖序列號,最后由該脈沖序列號和原始圖像數(shù)據(jù)從預(yù)定的脈沖序列查找表中找出相應(yīng)的脈沖(1或0)。根據(jù)上述分析,可以畫出圖3所示的灰度算法模塊的結(jié)構(gòu)圖。
該模塊共由三個運算電路、一個數(shù)據(jù)選擇器和一個脈沖查找表構(gòu)成。運算電路1、運算電路2和運算電路3分別執(zhí)行公式(4)、(5)、(6)的操作。灰度算法模塊的整個操作過程是:首先判斷圖像數(shù)據(jù)pixeldata的值,如果該值是第一組即0000或1111,則三個運算電路都不工作,直接輸出灰度數(shù)據(jù)frcdata為0或1;如果pixeldata是第二組的值,則執(zhí)行運算電路1,運算電路2、3不工作,同時數(shù)據(jù)選擇器選擇k的值并送入脈沖查找表,脈沖查找表此時根據(jù)k和pixeldata的值查出灰度數(shù)據(jù)frcdata是0還是1;如果pixeldata是第三組的值,則執(zhí)行運算電路1、2,運算電路3不工作,同時數(shù)據(jù)選擇器選擇p的值并送入脈沖查找表,脈沖查找表此時根據(jù)p和pixeldata的值查出灰度數(shù)據(jù)frcdata是0還是1;如果pixeldata是第四組的值,則三個運算電路都工作,同時數(shù)據(jù)選擇器選擇w的值并送入脈沖查找表,脈沖查找表此時根據(jù)w和pixeldata的值查出灰度數(shù)據(jù)frcdata是0還是1。這里的脈沖查找表是表1所示的15×15的查找表。這種公式算法結(jié)構(gòu)將空間灰度調(diào)制法與幀灰度調(diào)制法結(jié)合在一起,并很好地利用了相鄰像素的相互影響,從而大大提高了灰度調(diào)制能力。
5 FPGA驗證
本設(shè)計采用Verilog HDL語言工具編寫RTL級代碼,并利用SYNOPSYS公司的EDA工具對該模塊進(jìn)行功能仿真和后仿真。最后,在FPGA(Altera公司的EP20K1000E672EFC)上實現(xiàn)。由于沒有16級灰度圖像數(shù)據(jù),本次設(shè)計是將4級灰度數(shù)據(jù)映射到16級灰度的。其測試條件如下:
系統(tǒng)工作頻率:50MHz;
屏幕: 240×320;
刷新頻率:70Hz
FPGA驗證結(jié)果如圖4所示。
從圖中可以看出,圖像線條清晰,亮度層次分明,無閃爍、鬼影等干擾視覺的現(xiàn)象。這說明本文采用的基于面積-幀灰度調(diào)制的公式算法能夠得到穩(wěn)定的圖像顯示,且灰度控制模塊功能正確。
在進(jìn)行FPGA驗證的同時,利用SYNOPSYS公司的綜合工具對灰度控制模塊的面積和功耗進(jìn)行了評估,整個模塊綜合之后的門數(shù)為2042門,最大功耗工作模式下的功耗為0.941mW。同樣是實現(xiàn)16級灰度,參考文獻(xiàn)[3]中灰度控制電路綜合之后的門數(shù)為7857門,最大功耗工作模式下的功耗為1.028mW,比本文中的灰度控制電路多用5815門,功耗增加了0.087mW;參考文獻(xiàn)[4]中灰度控制電路綜合之后的門數(shù)為1635門,最大功耗工作模式下的功耗為0.757mW,比本文中灰度控制電路的面積小、功耗低,但在進(jìn)行16級灰度顯示時會出現(xiàn)閃爍現(xiàn)象。因此,采用本文中的公式算法可以有效減小芯片面積和降低功耗,且解決了參考文獻(xiàn)[4]中灰度級別低的問題。
參考文獻(xiàn)
1 李維 ,郭 強. 液晶顯示應(yīng)用技術(shù)[M]. 北京:電子工業(yè)出版社, 2000
2 應(yīng)根裕,胡文波,邱 勇.平板顯示技術(shù)[M].北京:人民郵電出版社,2002
3 丁黃勝.嵌入式微處理器中LCD控制器的設(shè)計與實現(xiàn)[碩士學(xué)位論文].南京:東南大學(xué),2003
4 張景嵩. 單色點陣液晶顯示屏上的多級灰度顯示方法及顯示裝置.專利:96103075.1996-03-22