陳自龍,湯勇明
(東南大學(xué) 電子科學(xué)與工程學(xué)院,江蘇 南京210096)
我院先后在“可編程邏輯器件的基礎(chǔ)與應(yīng)用”和“電子系統(tǒng)設(shè)計”等課程建設(shè)中開展了PLD 教學(xué)實驗的開發(fā)[1]。本文介紹了一個基于PLD 的VGA(Video Graphics Array)顯示器字符顯示實驗設(shè)計,它利用PS/2 鍵盤輸入字符,然后在VGA 顯示器上依次顯示(可以換行)。其中涉及到的知識點包括:VGA 接口時序,RAM/ROM 讀寫和PS/2 鍵盤接口解碼等。本實驗涉及到PLD 設(shè)計多項通用關(guān)鍵知識點,對PLD 實驗平臺的資源要求相對較少,可移植推廣到不同類型的PLD 實驗平臺開展教學(xué)應(yīng)用。
本實驗設(shè)計的目標(biāo)是PLD 開發(fā)平臺適用的綜合開發(fā)案例,通過PS/2 鍵盤實現(xiàn)字符輸入,在VGA顯示器上顯示英文字符的功能。本實驗的設(shè)計可以劃分為五大模塊:VGA 顯示接口模塊、顯示緩存RAM 模塊、字模存儲ROM 模塊、PS/2 鍵盤解碼模塊和核心控制模塊等,如圖1所示。
圖1 整體模塊劃分圖
核心控制模塊負(fù)責(zé)其余四大模塊之間的協(xié)調(diào)和數(shù)據(jù)傳送,而這四大模塊功能獨立并相互分工。涉及到的知識點包括:VGA 接口標(biāo)準(zhǔn)時序的發(fā)生,顯示緩存RAM 的輸出與VGA 顯示的同步,基于流水線的ROM 讀取和RAM 寫入技術(shù)和PS/2 鍵盤接口解碼技術(shù)。
本實驗的VGA 顯示需要外接VGA 兼容顯示器,輸入需要外接PS/2 鍵盤。本實驗中PLD 芯片需要具有一定的片上存儲資源,以用作顯示緩存RAM 和字模ROM,建議采用FPGA 而不是CPLD。存儲資源的需求大小可以調(diào)節(jié),對于存儲資源相對緊張的PLD 芯片,可以在實驗設(shè)計中減少顯示字符的個數(shù),以減小顯存RAM 消耗的存儲資源。字模ROM 消耗的存儲資源大小固定(當(dāng)然也可以減小支持顯示的字符個數(shù)來減小),相對顯存RAM 其消耗不大。
本實驗選取了我院自主開發(fā)的FPGA DSK 開發(fā)平臺設(shè)計。FPGA DSK 開發(fā)平臺的核心為Altera 公司CycloneII 系列型號為EP2C8Q208C8 的FPGA 芯片,邏輯資源、存儲資源以及引腳資源較為豐富,同時,開發(fā)板上具有PS/2 鍵盤接口和VGA 顯示接口,滿足本實驗要求。
VGA 是IBM 在1987年推出的一種視頻傳輸標(biāo)準(zhǔn),具有分辨率高、顯示速率快和顏色豐富等優(yōu)點,在彩色顯示器領(lǐng)域得到廣泛應(yīng)用[2,3]。
VGA 接口共五路信號:紅、綠、藍(lán)三路數(shù)據(jù)信號,場同步和行同步兩路控制信號。
Verilog 實現(xiàn)VGA 時序的主要思想是,利用像素時鐘(pixel_clock)生成行同步信號,在行同步信號的基礎(chǔ)上,生成場同步信號。并輸出水平坐標(biāo)和垂直坐標(biāo)。時序信號產(chǎn)生原理如圖2所示。
圖2 VGA 時序信號產(chǎn)生原理圖
FPGA DSK 實驗平臺允許R、G、B 三基色各自1bit 編碼,實現(xiàn)8 色顯示。本實驗中為了節(jié)省存儲資源,對VGA 每點像素的顏色值進(jìn)行二值化處理,即每個像素只有黑白兩色。程序設(shè)計中引入顯存RAM 模塊,存儲VGA 顯示屏幕上任一像素點的顏色值。
顯存RAM 可調(diào)用Quartus II 的宏功能(Mega-Function)模塊庫,自動生成雙口RAM,其讀時序如圖3所示。
圖3 雙口RAM 讀時序
從上圖可以看到,在第一個時鐘的上升沿,讀數(shù)據(jù)地址為0,表示要讀取地址0 的數(shù)據(jù),此時輸出q無效,讀地址被鎖存。到第二個時鐘上升沿時,數(shù)據(jù)輸出q 端開始輸出地址0 的數(shù)據(jù)(F0)??梢?,雙口RAM 從鎖存讀地址到輸出相應(yīng)數(shù)據(jù)需要經(jīng)歷(延遲)一個時鐘周期。程序設(shè)計中需要處理好該信號輸出延遲,保證圖像顯示時位置對應(yīng)。
包括英文字母、數(shù)字、標(biāo)點等在內(nèi)的鍵盤輸入字模數(shù)據(jù)均存放在字模ROM 中,核心控制模塊根據(jù)鍵盤輸入信息將對應(yīng)的字模數(shù)據(jù)讀出并寫入到顯存RAM 中合適的位置。ROM 的讀延時也是一個時鐘周期,為了解決讀延時和數(shù)據(jù)穩(wěn)定問題,需要合理地設(shè)計“讀ROM—寫RAM”的時序。該時序設(shè)計如圖4所示[4]。
圖4 “讀ROM—寫RAM”時序圖
從圖中第一個時鐘下降沿開始,設(shè)置ROM 讀地址的起始地址(這里是地址0),到下個時鐘上升沿時,該地址被ROM 鎖存,再經(jīng)過一個時鐘周期后,該地址的數(shù)據(jù)(F0)被讀出。在F0 被讀出后的時鐘下降沿,設(shè)置RAM 的寫地址(假定為地址0),并置RAM 的寫使能信號有效(高電平)。同時,將ROM 的讀地址加一。當(dāng)下一個(從0 時刻開始的第4 個)時鐘上升沿到來時,RAM 鎖存寫地址,存儲F0,并且在第5 個時鐘上升沿處會自動加載ROM的新地址處的數(shù)據(jù),以便下次RAM 寫入。由于一個字模數(shù)據(jù)有8 ×12 =96bit,程序中ROM 和RAM的位寬都是8,所以需要讀寫12 次,才能完成一個字模數(shù)據(jù)的寫入。
PS/2 是電腦上常見的接口之一,多用于鼠標(biāo)、鍵盤等輸入設(shè)備。PS/2 的時序如圖5所示。
圖5 PS/2 時序圖
當(dāng)PS/2 設(shè)備需要傳輸數(shù)據(jù)時,會在PS/2 時鐘(CLOCK)的第一個下降沿拉低PS/2 數(shù)據(jù)線,表示一幀PS/2 數(shù)據(jù)傳輸?shù)拈_始。接著是8 個數(shù)據(jù)位(都是在時鐘的下降沿有效),然后是奇偶校驗位,最后是停止位(高電平)。主機在接收完一幀數(shù)據(jù)后,需要將接收到的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)[5],這就是PS/2 鍵盤的掃描碼。
PS/2 鍵盤掃描碼有兩種不同的類型:通碼(make code)和斷碼(break code)。當(dāng)按鍵被按下或持續(xù)按住時,鍵盤會發(fā)送該鍵的通碼;而當(dāng)一個鍵被釋放時,鍵盤會發(fā)送該鍵的斷碼。根據(jù)鍵盤按鍵掃描碼的不同,可將按鍵分為如下三類。
(1)一類按鍵:通碼為一個字節(jié),斷碼為0xF0 +通碼的形式。例如對于A 鍵,其通碼為0x1C;斷碼為0xF0 0x1C;
(2)二類按鍵:通碼為兩字節(jié)0xE0 +0xXX 形式,斷碼為0xE0 +0xF0 +0xXX 形式。如Right Ctrl鍵,其通碼為0xE0 0x14;斷碼為0xE0 0xF0 0x14;
(3)三類特殊按鍵有兩個:①Print Screen 鍵,其通碼為0xE0 0x12 0xE0 0x7C,其斷碼為0xE0 0xF0 0x7C 0xE0 0xF0 0x12;②Pause 鍵,其通碼為0xE1 0x14 0x77 0xE1 0xF0 0xl4 0xF0 0x77,斷碼為空。
本設(shè)計中只支持第一類和第二類按鍵,并且認(rèn)為按鍵被按下直至彈起才是一次按鍵事件。
當(dāng)按下按鍵時,PS/2 解碼模塊先將按鍵通碼保存,然后一直等待按鍵松開,直到接收按鍵斷碼,此時一次按鍵事件結(jié)束。接著,按照第二套按鍵掃描碼的規(guī)定,將按鍵通碼轉(zhuǎn)換為ASCII 碼,并產(chǎn)生一個按鍵事件信號,等待其他模塊處理。PS/2 鍵盤事件響應(yīng)流程如圖6所示。
圖6 PS/2 鍵盤事件響應(yīng)流程圖
本實驗案例設(shè)計目標(biāo)是在VGA 顯示器上顯示20 行40 列,共800 個寬8 像素、高12 像素的字符(支持47 個常用的英文字符),經(jīng)VerilogHDL 語言編程實現(xiàn),已使用Altera 公司的Quartus II 9.0 SP2開發(fā)工具進(jìn)行驗證,其編譯綜合結(jié)果如表1所示。
表1 程序編譯綜合結(jié)果
從表1中可見,在FPGA DSK 開發(fā)板上最終消耗的存儲資源是88192 比特,占芯片總存儲資源的53%;使用的邏輯單元數(shù)目僅是401 個,占總邏輯單元的5%;使用FPGA 芯片IO 端口9 個,占總端口數(shù)的6.5%。程序下載到開發(fā)平臺后,系統(tǒng)能順利實現(xiàn)接收和顯示26 個英文字母、10 個數(shù)字和11 個常用標(biāo)點共47 個常用字符,行末自動換行等功能。其它一些鍵盤輸入功能,如刪除上一個字符、回車換行和大小寫輸入切換等,可以作為教學(xué)實驗中的提高性功能加以要求。
EP2C8 芯片在FPGA 芯片中屬于中低端產(chǎn)品,其內(nèi)部邏輯資源數(shù)量較少,從上述編譯結(jié)果可見,本實驗對PLD 開發(fā)平臺要求不高,可移植到其它多種PLD 實驗平臺上進(jìn)行,適宜進(jìn)行教學(xué)推廣應(yīng)用。
目前很多高校PLD 教學(xué)實驗平臺給出了采用VGA 接口顯示靜態(tài)圖形或者靜態(tài)文字的案例。本文介紹了一個基于PLD 的VGA 顯示器字符顯示實驗的設(shè)計,并且就其中涉及到的VGA 視頻接口、PS/2 鍵盤接口和RAM/ROM 控制等一些關(guān)鍵技術(shù)做了詳細(xì)說明。該實驗對PLD 開發(fā)平臺硬件要求低,可移植性強。通過該實驗可實現(xiàn)綜合性PLD 開發(fā)訓(xùn)練,有助于讓學(xué)生對PLD 開發(fā)和應(yīng)用有更深層次理解,為以后從事PLD 設(shè)計和開發(fā)打下堅實的基礎(chǔ)。
[1] 湯勇明,鄭姚生,吳忠.“可編程邏輯器件的基礎(chǔ)與應(yīng)用”課程建設(shè)與教學(xué)實踐[J]. 南京:電氣電子教學(xué)學(xué)報,2007,29(02):7-9.
[2] Video Graphics Array[online]. http://en. wikipedia. org/wiki/Video_Graphics_Array
[3] 廖永清等. 基于FPGA 的VGA 圖像動態(tài)顯示控制器的設(shè)計與實現(xiàn)[J]. 北京:電視技術(shù),2011,35(17):52-54.
[4] 秦鴻剛,劉京科,吳迪. 基于FPGA 的雙口RAM 實現(xiàn)及應(yīng)用[J]. 西安:電子設(shè)計工程,2010,18(2):72-74.
[5] 陸一鳴,閆華,鐘銳. 基于FPGA 的嵌入式系統(tǒng)PS/2 接口的實現(xiàn)[J]. 南京:電子器件,2007,30(03):1105-1108.