路紅娟,蔣偉
(無錫工藝職業(yè)技術(shù)學(xué)院,江蘇 宜興 214206)
隨著科技的發(fā)展以及環(huán)保的需求,現(xiàn)在各行各業(yè)逐漸向無紙化時(shí)代進(jìn)軍,如辦公無紙化,無紙實(shí)訓(xùn)室等等。所以現(xiàn)在美術(shù)專業(yè)的學(xué)生,小孩子的涂鴉學(xué)畫畫等,都轉(zhuǎn)向了無紙環(huán)保的電子畫圖板?,F(xiàn)在市場上電子畫圖板都是在電腦上安裝畫圖軟件來實(shí)現(xiàn)的,而電腦一來昂貴,二來笨重不易攜帶。為此,本文設(shè)計(jì)了一種基于FPGA 的電子畫圖板,可彌補(bǔ)電腦畫圖板的上述不足,特點(diǎn)是便攜易帶,成本低廉。由于是純硬件設(shè)計(jì),所以響應(yīng)快,穩(wěn)定性高。使用時(shí)只要接上鼠標(biāo)和帶VGA 的顯示器就可以工作。
如圖1 所示,本作品的硬件結(jié)構(gòu)分為三大部分:基于FPGA 的Spartan 3E-100[1-3]硬件電路板,帶有VGA 接口的顯示器以及Ps/2 口的鼠標(biāo)。
圖1 結(jié)構(gòu)框圖
FPGA 的內(nèi)部硬件VHDL 語言編程分為4 個(gè)部分:1)鼠標(biāo)驅(qū)動模塊,F(xiàn)PGA 來檢測鼠標(biāo)的位置以及左中右鍵的按鍵信息。2)顯示屏的VGA 顯示模塊,此模塊接收顯示顏色的位置和信息,并通過VGA 硬件接口顯示。3)存儲模塊,分為ROM 和雙口RAM 兩個(gè)部分。ROM 用于顯示初始界面的“無錫工藝學(xué)院”六個(gè)字;雙口RAM 用于實(shí)時(shí)記錄畫圖的數(shù)據(jù)信息,并將其顏色信息傳送給VGA 接口顯示模塊。4)控制和算法模塊:此模塊既可協(xié)調(diào)各個(gè)邏輯程序的運(yùn)行,又通過巧妙的算法對讀寫存儲地址的運(yùn)算,解決了FPGA Spartan 3E-100 的資源不足,基本滿足了對整個(gè)屏幕的畫畫或?qū)懽植僮饕蟆?/p>
原理如圖2 所示,DispCtrl 是顯示模塊,用于接受鼠標(biāo)的位置信號,并且從RAM 和ROM 讀出數(shù)據(jù),通過RGB 端口在顯示屏上正確的顯示;MouseRefComp 是鼠標(biāo)控制模塊,作用是將鼠標(biāo)的位置信息,左中右鍵的按鍵信息接收過來,并且形成事件觸發(fā),傳到顯示模塊以及整體模塊。而在DispCtrl 顯示模塊中,disprom_core 是rom 模塊,里面存儲的內(nèi)容是用于在初始界面上顯示“無錫工藝學(xué)院”六個(gè)大字。print_core 是雙口RAM 模塊:當(dāng)工作在寫字板模式時(shí),即鼠標(biāo)的左鍵按下時(shí),便將鼠標(biāo)的位置翻譯成RAM_A 的地址,并將對應(yīng)的顏色數(shù)據(jù)實(shí)時(shí)寫進(jìn)RAM 中。顯示模塊實(shí)時(shí)讀出RAM 中的顏色數(shù)據(jù),在屏幕上顯示出來。對于顯示控制器來說,將存儲器中的數(shù)據(jù)讀出來在CRT顯示器上顯示。將圖像控制模塊分為這樣幾部分:二分頻電路、VGA 時(shí)序控制模塊、存儲器讀出模塊。其中二分頻把50 Hz 時(shí)鐘頻率分成25 Hz 并提供給其他模塊作為時(shí)鐘;VGA 時(shí)序控制模塊用于產(chǎn)生640 ×480 顯示范圍,并控制顯示范圍和消隱范圍以及產(chǎn)生水平同步時(shí)序信號hs和垂直同步時(shí)序信號vs 的值;存儲器讀出模塊提供給ROM 或雙口RAM 地址,并按地址讀出1 位數(shù)據(jù)(顏色標(biāo)識),然后得到R,G,B 的值,并把R,G,B 的值通過VGA接口傳到CRT 顯示器。
圖2 原理框圖
本系統(tǒng)的設(shè)計(jì)硬件分為2 個(gè)部分:鼠標(biāo)和顯示器的硬件及驅(qū)動,分別介紹如下。
標(biāo)準(zhǔn)的PS/2 鼠標(biāo),支持的輸入x(左右)位移、y(上下)位移、左鍵、中鍵和右鍵鼠標(biāo)以一個(gè)固定的頻率讀取這些輸入,并更新不同的計(jì)數(shù)器,然后標(biāo)記出反映的移動和按鍵狀態(tài)。標(biāo)準(zhǔn)的鼠標(biāo)有兩個(gè)計(jì)數(shù)器,保持位移的跟蹤,x 位移計(jì)數(shù)器和y 位移計(jì)數(shù)器??纱娣? 位的2 進(jìn)制補(bǔ)碼,并且每個(gè)計(jì)數(shù)器都有相關(guān)的溢出標(biāo)志,它們的內(nèi)容連同三個(gè)鼠標(biāo)按鈕的狀態(tài)一起以三字節(jié)移動數(shù)據(jù)包的形式發(fā)送給主機(jī)。位移計(jì)數(shù)器表示從最后一次位移數(shù)據(jù)包被送往主機(jī)后,有位移量發(fā)生。
當(dāng)鼠標(biāo)讀取它的輸入時(shí),則記錄按鍵的當(dāng)前狀態(tài),然后檢查位移,如果位移發(fā)生它就增加(對正位移)或減少(對負(fù)位移)x 或y 位移計(jì)數(shù)器的值。如果有一個(gè)計(jì)數(shù)器溢出了就設(shè)置相應(yīng)的溢出標(biāo)志。
標(biāo)準(zhǔn)的PS/2 鼠標(biāo),發(fā)送位移和按鍵信息給主機(jī)采用如表1 的3 字節(jié)數(shù)據(jù)包格式(表1)。
表1 3 字節(jié)數(shù)據(jù)包格式
根據(jù)鼠標(biāo)工作的模式來處理的數(shù)據(jù)報(bào)告有4 種標(biāo)準(zhǔn)的工作模式。
1)Reset——鼠標(biāo)在通電或收到“Reset”(0xFF)命令后進(jìn)入Reset 模式。
2)Stream——這是缺省模式在Reset 執(zhí)行完成后,也是多數(shù)軟件使用鼠標(biāo)的模式。如果主機(jī)先前把鼠標(biāo)設(shè)置到了Remote 模式,那它可以發(fā)送Set Stream Mode(0xEA)命令給鼠標(biāo),讓鼠標(biāo)重新進(jìn)入Stream 模式。
3)Remote——在某些情況下Remote 模式很有用,可以通過發(fā)送Set Remote Mode(0xF0)命令進(jìn)入。
4)Wrap——除了為測試鼠標(biāo)和它的主機(jī)之間的連接外,這個(gè)模式不是特別有用。
PS2 通訊協(xié)議是一種雙向同步串行通訊協(xié)議。通訊的兩端通過Clock(時(shí)鐘腳)同步,并通過Data(數(shù)據(jù)腳)交換數(shù)據(jù)。任何一方如果想抑制另外一方通訊時(shí),只需要把Clock(時(shí)鐘腳)拉到低電平。如果是PC 機(jī)和PS2 鍵盤間的通訊,則PC 機(jī)必須做主機(jī),也就是說,PC 機(jī)可以抑制PS2 鍵盤發(fā)送數(shù)據(jù),而PS2 鍵盤則不會抑制PC 機(jī)發(fā)送數(shù)據(jù),即主機(jī)總是在總線上有優(yōu)先權(quán)。一般兩設(shè)備間傳輸數(shù)據(jù)的最大時(shí)鐘頻率是33 kHz,大多數(shù)PS2 設(shè)備工作在10 kHz~20 kHz。每一數(shù)據(jù)幀包含11~12 個(gè)位,具體含義如表2 所列。
表2 PS/2 通訊數(shù)據(jù)幀格式
表中,如果數(shù)據(jù)位中1 的個(gè)數(shù)為偶數(shù),校驗(yàn)位就為1;如果數(shù)據(jù)位中1 的個(gè)數(shù)為奇數(shù),校驗(yàn)位就為0;總之,數(shù)據(jù)位中1 的個(gè)數(shù)加上校驗(yàn)位中1 的個(gè)數(shù)總為奇數(shù),因此總進(jìn)行奇校驗(yàn)。設(shè)備到主機(jī)的通訊和主機(jī)到設(shè)備的通訊的時(shí)序如圖3。
圖3 主機(jī)到設(shè)備的通訊
常見的彩色顯示器,一般由CRT(陰極射線管)構(gòu)成。彩色是有R,G,B(紅:RED,綠:GREEN,藍(lán):BLUE)三基色組成。顯示是用逐行掃描的方式解決,陰極射線槍發(fā)出電子束打在涂有銀光粉的熒光屏幕上,產(chǎn)生R,G,B 三基色,合成一個(gè)彩色像素。掃描從屏幕的左上方開始,從左到右,從上到下,進(jìn)行掃描,每掃完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT 對電子束進(jìn)行消隱,每行結(jié)束時(shí),用行同步信號進(jìn)行同步,掃描完所有行,用場同步信號進(jìn)行場同步,并使掃描回到屏幕的左上方,同時(shí)進(jìn)行場消隱,預(yù)備下一場的掃描。
行場掃描時(shí)序如圖4 所示。以正極性為例,說明CRT的工作過程:R,G,B 為正極性信號,即高電平有效。當(dāng)VS=0,HS=0 時(shí),CRT 顯示的內(nèi)容為亮的過程,即正向掃描過程約為26 us。當(dāng)一行掃描完畢,行同步HS=1,約需6 us,期間,CRT 掃描產(chǎn)生消隱,電子束回到CRT 的左邊下一行的起始位置(x=0,y=1);當(dāng)掃描完480 行后,CRT的場同步VS=1,產(chǎn)生場同步是掃描線回到CRT 的第一行第一列(C=0,y=0 處,約為兩個(gè)行周期)。HS 和VS 的時(shí)序圖。T1 為行同步消隱(約為6 us);T2 為行顯示時(shí)間。
圖4 行場掃描時(shí)序示意圖
如果要單色顯示整個(gè)屏幕的話,需要640 ×480=307 200的儲存位數(shù),而basys2 上的spartan 3-100 的FPGA 是不夠的。為了在整個(gè)屏幕上都可以畫畫,解決方案是,通過算法,將相鄰的4 個(gè)點(diǎn)作為1 個(gè)點(diǎn)來進(jìn)行讀和寫:首先將鼠標(biāo)發(fā)出的位置信息轉(zhuǎn)化為坐標(biāo)(Xpos,Ypos),然后將兩個(gè)信號定義為整型,利用整型信號做除法運(yùn)算之后,只有整數(shù)沒有小數(shù)的特性,將(Xpos,Ypos)都除以2,這樣屏幕上的上下左右4 個(gè)點(diǎn)的坐標(biāo)都變?yōu)榱送粋€(gè)值,然后再轉(zhuǎn)化為地址去寫雙口RAM,這樣就節(jié)省了4 倍的存儲空間,大大地節(jié)約了FPGA 的資源。
本文介紹了一種基于FPGA 的電子畫圖板,由于系統(tǒng)內(nèi)部都是由硬件搭建而成,使得整個(gè)系統(tǒng)響應(yīng)速度很快。并且采用了較巧妙的控制算法大大節(jié)約了FPGA 資源,降低了成本。經(jīng)過測試,性能穩(wěn)定,加上體積較小,后期可以根據(jù)不同需要進(jìn)行相關(guān)IO 設(shè)計(jì)和控制算法設(shè)計(jì),以滿足市場需求。
[1]田耘,徐文波.Xinlinx FPGA 開發(fā)實(shí)用教程[M].北京:清華大學(xué)出版社,2008:5-7.
[2]褚振勇.FPGA 設(shè)計(jì)及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2004:90-94.
[3]廖日坤.CPLD/FPGA 嵌入式應(yīng)用開發(fā)技術(shù)白金手冊[M].北京:中國電力出版社,2005.18-46.