摘要: 本文介紹一種利用可編程邏輯器件實(shí)現(xiàn)VGA圖像顯示控制的方法,設(shè)計(jì)中采用了Verilog HDL語(yǔ)言對(duì)賽靈思Basys開發(fā)板進(jìn)行編程設(shè)計(jì)。首先通過(guò)Image2Lcd軟件分別提取兩幅圖片的色彩信息數(shù)據(jù),將得到的數(shù)據(jù)存儲(chǔ)到開發(fā)板的FPGA內(nèi)嵌塊ROM中,然后讀取塊ROM中的圖片信息送到LCD顯示器顯示。利用FPGA完成VGA顯示控制,可以使圖像的顯示脫離PC機(jī)的控制。
如今隨著液晶顯示器的出現(xiàn),越來(lái)越多的數(shù)字產(chǎn)品開始使用液晶作為顯示終端?;赩GA標(biāo)準(zhǔn)的顯示器仍是目前普遍使用的顯示器。若驅(qū)動(dòng)此類顯示器,需要很高的掃面頻率,以及極短的處理時(shí)間。正是由于這些特點(diǎn),所以可以用FPGA來(lái)實(shí)現(xiàn)對(duì)VGA顯示器的驅(qū)動(dòng)。
雖然VGA專用芯片具有更穩(wěn)定的VGA時(shí)序和更多的顯示模式可供選擇,但設(shè)計(jì)和使用VGA顯示控制更具有以下優(yōu)勢(shì):
① 使用芯片更少,節(jié)省板上資源,減小布線難度;
② 當(dāng)進(jìn)行高速數(shù)據(jù)傳輸時(shí),具有更小的高頻噪聲干擾;
③ FPGA(現(xiàn)場(chǎng)可編程門陣列)設(shè)計(jì)VGA接口可以將要顯示的數(shù)據(jù)直接送到顯示器,節(jié)省了計(jì)算機(jī)的處理過(guò)程,加快了數(shù)據(jù)的處理速度,節(jié)約了硬件成本。
1 系統(tǒng)整體設(shè)計(jì)框架
VGA顯示控制整體設(shè)計(jì)方案框圖如圖1所示,將其劃分為電源模塊、時(shí)鐘電路模塊、VGA接口模塊、字庫(kù)/圖庫(kù)模塊、顯示器等。再利用Verilog語(yǔ)言對(duì)FPGA的各個(gè)子模塊進(jìn)行編程設(shè)計(jì),同時(shí)對(duì)各個(gè)子模塊的功能分別進(jìn)行調(diào)試,最后將所有調(diào)試成功的子模塊并在一個(gè)頂層模塊下,最終實(shí)現(xiàn)VGA顯示控制設(shè)計(jì)。
?
圖1 VGA顯示控制整體設(shè)計(jì)方案框圖
2 VGA顯示控制的FPGA實(shí)現(xiàn)
2.1 存儲(chǔ)功能模塊
存儲(chǔ)功能模塊的主要功能是存儲(chǔ)圖片色彩信息, 其存儲(chǔ)媒介為FPGA內(nèi)部的硬核塊RAM, 塊RAM 是以硬核的方式內(nèi)嵌到FPGA 芯片中的, 不占用芯片的邏輯資源, 是FPGA 芯片內(nèi)部的一種寶貴資源。FPGA 內(nèi)嵌的塊RAM 組件可配置為單口RAM、雙口RAM、分布式ROM、塊ROM和先進(jìn)先出存儲(chǔ)器FIFO等存儲(chǔ)結(jié)構(gòu)。
本文只進(jìn)行圖片的顯示,所以使用單口的塊ROM存儲(chǔ)圖片信息,如果想實(shí)現(xiàn)更復(fù)雜的設(shè)計(jì),如文字的滾動(dòng)顯示、圖片的動(dòng)畫顯示等,可以使用雙口RAM 進(jìn)行設(shè)計(jì)。由于圖片信息比較大,而BASYS板子上的資源又有限,這就要求圖片不易過(guò)大。搜集的各種資料和不斷的實(shí)驗(yàn)結(jié)果表明,大小在8 192字節(jié)內(nèi)的圖片是可以顯示的。這里第一幅圖選用自己的名字徐彬。圖片信息大小為:63×32×8=16 128位。第二幅選用江西科技師范大學(xué)。圖片信息大小為120×50×8=48 000位。尋找到圖片后,利用Xilinx ISE中的IP核生成工具Core Generator生成單口ROM,如圖2所示。
?
圖2 單口ROM圖
將要顯示的圖片信息存儲(chǔ)到塊ROM中。第一幅圖片選擇數(shù)據(jù)寬度為8,深度為2 016的ROM。第二幅圖片選擇的ROM數(shù)據(jù)寬度為8,深度為6 000。在工程里使用IP核生成工具生成單口ROM,在生成過(guò)程中處理好ROM的數(shù)據(jù)寬度和深度。塊存儲(chǔ)的時(shí)候,需要加載的是一個(gè).coe文件來(lái)初始化存儲(chǔ)器的內(nèi)容,這時(shí)候需要用到Image2Lcd軟件,取圖片的色彩信息保存為.coe文件初始化到ROM中。
2.2 VGA控制模塊
時(shí)序的驅(qū)動(dòng)是設(shè)計(jì)VGA顯示控制的一個(gè)重要問(wèn)題,關(guān)系到設(shè)計(jì)是否成功。時(shí)序若不正確,則不能夠正確地顯示,有時(shí)候甚至還會(huì)損害顯示設(shè)備。因此, 時(shí)序的設(shè)計(jì)必須嚴(yán)格遵循VGA的標(biāo)準(zhǔn), 在此設(shè)計(jì)中使用的分辨率為800×600,要求像素時(shí)鐘為50 MHz。
?
圖3 VGA時(shí)序圖
根據(jù)VGA 時(shí)序的標(biāo)準(zhǔn)行、場(chǎng)同步信號(hào)有4種狀態(tài),時(shí)序圖如圖3所示,具有同步脈沖信號(hào)(Sync)、顯示后沿信號(hào)( Back porch)、I顯示的時(shí)間間隔(Display interval) 、顯示前沿( Front porch),這4種狀態(tài)具有很清晰的時(shí)序規(guī)律。設(shè)置兩個(gè)計(jì)數(shù)器,模為1056 的行計(jì)數(shù)器和模628的列計(jì)數(shù)器,系統(tǒng)時(shí)鐘為50 MHz用來(lái)控制行計(jì)數(shù)器,通過(guò)計(jì)數(shù)器的值來(lái)控制行信號(hào)HSYNC,然后在通過(guò)行信號(hào)HSYNC來(lái)控制列計(jì)數(shù)器,通過(guò)計(jì)數(shù)器的值來(lái)控制列信號(hào)VSYNC。
ROM讀取控制模塊e#
2.3 ROM讀取控制模塊
ROM讀取控制模塊是VGA顯示設(shè)備和存儲(chǔ)數(shù)據(jù)信息ROM之間的通道, 為了使VGA顯示設(shè)備能夠準(zhǔn)確地顯示圖片信息,必須嚴(yán)格遵循顯示設(shè)備的掃描規(guī)律,產(chǎn)生相應(yīng)的顯示信息。
首先,在程序中通過(guò)兩次例化分別調(diào)用存儲(chǔ)在FPGA內(nèi)嵌ROM中的兩幅圖,然后在程序中通過(guò)坐標(biāo)定位將圖片顯示到想要顯示的區(qū)域。本文的兩幅圖片分別將顯示區(qū)域定在從屏幕的(500, 350)坐標(biāo)到( 563, 382)坐標(biāo)區(qū)域內(nèi)從屏幕的(400,350)坐標(biāo)到(520,400)坐標(biāo)區(qū)域內(nèi)。
因?yàn)樵O(shè)計(jì)實(shí)現(xiàn)的功能是利用鍵盤上的按鍵對(duì)兩幅圖進(jìn)行切換,所以不必?fù)?dān)心顯示區(qū)域有重疊而產(chǎn)生覆蓋現(xiàn)象。在圖片的顯示過(guò)程中,每當(dāng)坐標(biāo)計(jì)數(shù)器刷新到圖片顯示指定區(qū)域內(nèi)時(shí),就要判斷相應(yīng)掃描點(diǎn)所包含的圖片信息,將其賦給RGB進(jìn)行色彩的顯示。
3 PS2顯示控制器的FPGA實(shí)現(xiàn)
3.1 PS/2傳輸協(xié)議
PS/2鍵盤到主機(jī)單向通信的原理如下:PS/2主從設(shè)備之間采用雙向同步串行的機(jī)制進(jìn)行數(shù)據(jù)傳輸,從設(shè)備的晶振時(shí)鐘信號(hào)作為通信過(guò)程中的同步時(shí)鐘信號(hào),鍵盤發(fā)送到主機(jī)的每一幀數(shù)據(jù)包含11位二進(jìn)制代碼,每位數(shù)據(jù)在鍵盤時(shí)鐘的下降沿被主機(jī)從數(shù)據(jù)線上讀走。PS/2傳輸協(xié)議如圖4所示。
圖4 PS/2傳輸協(xié)議
這11位數(shù)據(jù)的含義分別是:START為起始位,總是為0,以作設(shè)備同步之用;8個(gè)數(shù)據(jù)位DATA0~DATA7低位在前;PARTTY為奇校驗(yàn)位;STOP為停止位,總是為1。正如鍵按下就會(huì)有掃描碼(通碼)發(fā)往主機(jī)一樣,只要鍵一釋放,就會(huì)有掃描碼(斷碼)發(fā)往主機(jī)。
每個(gè)按鍵都被分配了唯一的通碼和斷碼。PS/2鍵盤第二套掃描碼中,大多數(shù)按鍵的通碼只有一個(gè)字節(jié),一幀就可以發(fā)完,這些按鍵的斷碼一般是在通碼前面加個(gè)F0h,所以這些兩個(gè)字節(jié)的斷碼就需要兩幀來(lái)發(fā)送。比如G鍵的通碼34h、G鍵的斷碼F0h 34h,按下G鍵后,然后松開G鍵,鍵盤就會(huì)依次向主機(jī)發(fā)送34h、F0h 34h。但此次設(shè)計(jì)所用到的輸入按鍵是通碼有兩個(gè)字節(jié),斷碼有三個(gè)字節(jié)的特殊按鍵。
3.2 鍵盤按鍵控制實(shí)現(xiàn)
設(shè)計(jì)中只用到了兩個(gè)按鍵——左鍵和右鍵,而且實(shí)驗(yàn)只需用左鍵控制第一幅圖片的顯示,右鍵控制第二幅圖片的顯示。因此,只需要在程序中檢測(cè)到這兩個(gè)按鍵的通碼即可,即檢測(cè)到左鍵的通碼到來(lái)即顯示徐彬二字的圖片,當(dāng)松開按鍵時(shí),不需要考慮其斷碼需要帶來(lái)某種操作,繼續(xù)保持第一幅圖片的顯示。
當(dāng)檢測(cè)到右鍵的通碼到來(lái)即顯示江西科技師范大學(xué)的圖片,當(dāng)松開按鍵時(shí),也不需要考慮其斷碼需要帶來(lái)的某種操作,繼續(xù)保持住第二幅圖片的顯示。而對(duì)其余的按鍵在本次設(shè)計(jì)中暫不需要考慮。
4 數(shù)碼管動(dòng)態(tài)顯示控制
4.1 數(shù)碼管點(diǎn)亮控制
數(shù)碼管按其段數(shù)分可七段數(shù)碼管和八段數(shù)碼管,它們的區(qū)別在于八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光的二極管單元,即多一個(gè)小數(shù)點(diǎn)顯示段。按照顯示“8”的個(gè)數(shù),又可分為1位、2位、4位等數(shù)碼管。
數(shù)碼管按發(fā)光二極管的連接方式可分為共陽(yáng)極數(shù)碼管和共陰極數(shù)碼管。共陽(yáng)數(shù)碼管指將所有發(fā)光二極管的陽(yáng)極連接到一起形成一個(gè)公共陽(yáng)極數(shù)碼管。共陽(yáng)數(shù)碼管應(yīng)用時(shí),應(yīng)將公共陽(yáng)極接到+5 V或+3.3 V,若某一段的發(fā)光二極管的陰極為低電平,則相應(yīng)段就點(diǎn)亮,若為高電平,則相應(yīng)段就不被點(diǎn)亮。共陰數(shù)碼管指將所有發(fā)光二極管的陰極接到一起形成一個(gè)公共陰極的數(shù)碼管。共陰數(shù)碼管應(yīng)用時(shí)應(yīng)將公共陰極接地,若某一段發(fā)光二極管的陽(yáng)極為高電平,則相應(yīng)段就被點(diǎn)亮,若某段的陽(yáng)極為低電平時(shí),則相應(yīng)段就不被點(diǎn)亮。
可以看出數(shù)碼管是共陽(yáng)極的4位數(shù)管碼,即給低電平時(shí)數(shù)碼管點(diǎn)亮,如圖5所示。
?
圖5 數(shù)碼管點(diǎn)亮
4.2 數(shù)碼管數(shù)字顯示控制:
由于所有數(shù)碼管共用一個(gè)段選,為了能夠獨(dú)立顯示每位數(shù)碼管,只能用位選來(lái)區(qū)分不同的數(shù)碼管。即每次只將某一位數(shù)碼管的位選置為有效,其他的數(shù)碼管位選都無(wú)效。此時(shí)的段選決定了該位數(shù)碼管的顯示內(nèi)容,然后在下一時(shí)刻,置下一位數(shù)碼管的位選有效,而其他的數(shù)碼管位選都無(wú)效。依此類推,不斷循環(huán)往復(fù)。
每次位選刷新速度比較快,同時(shí)由于數(shù)碼管自身的余輝特性,使每位數(shù)碼管在其變暗之前就又會(huì)被重新刷新,因此人眼則無(wú)法感覺到數(shù)碼管變暗。如果刷新頻率低于一定值,則人眼會(huì)感覺到數(shù)碼管在閃爍。所以,一般刷新頻率會(huì)在60 Hz~1 kHz之間,這樣多位數(shù)碼管顯示比較理想。
該設(shè)計(jì)是在開發(fā)板Basys上進(jìn)行實(shí)驗(yàn),其是共陽(yáng)極的4位數(shù)碼管,而在此項(xiàng)目工程中只需使用到1個(gè)數(shù)碼管,所以在動(dòng)態(tài)顯示中將其他的3位數(shù)碼管置1屏蔽不亮。程序如下:
case(cnt[16:15])//大約每1 ms刷新一次
2’d0:wei xuan<=4’b1110;//第一個(gè)數(shù)碼管點(diǎn)亮
2’d1:wei xuan<=4’b1111;
2’d2:wei xuan<=4’b1111;
2’d3:wei xuan<=4’b1111;//其他三個(gè)數(shù)碼管不亮
default:wei xuan<=wei xuan;
endcase
這樣即實(shí)現(xiàn)了實(shí)驗(yàn)所想達(dá)到的要求。
以上是對(duì)位選的一個(gè)介紹,而對(duì)于段選,數(shù)碼管可以顯示從0到f這16個(gè)字符,只需要分別對(duì)0到f進(jìn)行編碼顯示。本次設(shè)計(jì)不需要如此復(fù)雜,由于只用到1和2兩個(gè)數(shù)字,因此,對(duì)1和2進(jìn)行段選編碼即可。程序如下:
case(image)//image是用來(lái)控制要選擇的圖片
2’d0:duan xuan<=8’hf9;//數(shù)碼管顯示1時(shí)的編碼
2’d1:duan xuan<=8’ha4;//數(shù)碼管顯示2時(shí)的編碼
default:duan xuan<=duan xuan;//數(shù)碼管保持狀態(tài)
endcase
這樣即實(shí)現(xiàn)了實(shí)驗(yàn)所想達(dá)到的要求。
5 實(shí)驗(yàn)結(jié)果
5.1 實(shí)驗(yàn)的環(huán)境
實(shí)驗(yàn)的環(huán)境包括:
① 開發(fā)工具:Xilinx ISE 9.1。
② 開發(fā)語(yǔ)言:硬件描述語(yǔ)言verilog HDL。
③ 目標(biāo)板:Xilinx公司Basys開發(fā)板。
5.2 實(shí)驗(yàn)結(jié)果
如圖6、圖7所示,屏幕上顯示兩幅圖片,利用鍵盤,通過(guò)控制鍵盤的左右鍵實(shí)現(xiàn)對(duì)兩幅圖片的切換,并使用數(shù)碼管顯示。當(dāng)按下左鍵的時(shí)候屏幕出現(xiàn)第一幅圖片(徐彬)并且數(shù)碼管顯示為1,當(dāng)按下右鍵的時(shí)候屏幕出現(xiàn)第二幅圖片(江西科技師范大學(xué))并且數(shù)碼管顯示為2。
?
圖6 實(shí)驗(yàn)圖一
?
?
圖7 實(shí)驗(yàn)圖二
實(shí)驗(yàn)結(jié)果已經(jīng)達(dá)到了預(yù)想的效果。如果增加塊ROM的容量,則可以顯示更大的圖片,更改方便,也可以調(diào)整圖片的顯示位置。
結(jié)語(yǔ)
利用FPGA完成VGA顯示控制,可以使圖像的顯示脫離PC機(jī)的控制,形成體積小、功耗低的格式嵌入式系統(tǒng)(便攜式設(shè)備或手持設(shè)備),應(yīng)用于地面勘測(cè)、性能檢測(cè)等方面,具有重要的現(xiàn)實(shí)意義。該技術(shù)方案已經(jīng)在工業(yè)現(xiàn)場(chǎng)中有多種實(shí)際應(yīng)用。
參考文獻(xiàn)
[1] 張亞平, 賀占莊. 基于FPGA的VGA顯示模式設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2007,17(6).
[2] 劉福奇.FPGA嵌入式項(xiàng)目開發(fā)實(shí)踐[M].北京:電子工業(yè)出版社,2009.
[3] 張明. Verilog HDL實(shí)用教程[M].成都: 電子科技大學(xué)出版社, 1999.
[4] 潘松,黃繼業(yè). EDA 技術(shù)實(shí)用教程[M].北京:科學(xué)出版社,1999:262265.
[5] 基于IP Core的Block RAM 設(shè)計(jì)[EB/OL].[201308].
[6] 夏宇聞.Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2006.
[7] 夏宇聞.復(fù)雜數(shù)字電路與系統(tǒng)的Verilog HDL設(shè)計(jì)技術(shù)[M].北京:北京航空航天大學(xué)出版社,1998.
[8] 王志輝,林水生.基于FPGA的鍵盤掃描模塊的設(shè)計(jì)實(shí)現(xiàn)[J].集成電路應(yīng)用,2006,67(5).
[9] 吳蓬勃,張啟民,王朝陽(yáng),等.基于FPGA 的VGA 圖像控制器設(shè)計(jì)[J].東北電力大學(xué)學(xué)報(bào),2006,26(4).
[10] XILINX ROM 使用教程[EB/OL].[201308].
詹華群(教授),研究方向?yàn)楝F(xiàn)代信號(hào)與信息處理;徐彬(碩士研究生), 研究方向?yàn)檫\(yùn)動(dòng)控制及數(shù)控系統(tǒng)。
評(píng)論
查看更多