《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 基于FPGA及VHDL的LED點(diǎn)陣漢字滾動(dòng)顯示設(shè)計(jì)方案
基于FPGA及VHDL的LED點(diǎn)陣漢字滾動(dòng)顯示設(shè)計(jì)方案
摘要: 漢字滾動(dòng)顯示器的傳統(tǒng)設(shè)計(jì)方法是用單片機(jī)來(lái)控制的,,雖然單片機(jī)方案具有價(jià)格低廉,,程序編程靈活等特點(diǎn),,但由于單片機(jī)硬件資源的限制,,未來(lái)對(duì)設(shè)計(jì)的變更和升級(jí),,總是要付出較多研發(fā)經(jīng)費(fèi)和較長(zhǎng)投放市場(chǎng)周期的代價(jià),,甚至有可能需要重新設(shè)計(jì),。況且,,在以顯示為主的系統(tǒng)中,單片機(jī)的運(yùn)算和控制等主要功能的利用率很低,,單片機(jī)的優(yōu)勢(shì)得不到發(fā)揮,,相當(dāng)于很大的資源浪費(fèi)?! 〔捎肊DA技術(shù)的自頂向下的模塊化設(shè)計(jì)方法,,借助相關(guān)開(kāi)發(fā)軟件,,例如QualtusⅡ軟件,,將硬件描述語(yǔ)言——VHDL程序固化于具有豐富I/O口、內(nèi)部邏輯和連線資源的FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)中,。該技術(shù)具有系統(tǒng)設(shè)計(jì)效率高,、集成度好、保密性強(qiáng),、易于修改,、易于實(shí)現(xiàn)等優(yōu)點(diǎn),成為當(dāng)今數(shù)字系統(tǒng)設(shè)計(jì)主流技術(shù),。此方式所制作的LED點(diǎn)陣控制器,,由于是純硬件行為,具有速度快,、可靠性高,、抗干擾能力強(qiáng)、開(kāi)發(fā)周期短等顯著優(yōu)點(diǎn),?! ? EDA點(diǎn)陣顯示漢字原理  以8×8的LED點(diǎn)陣為例,8×8的LED點(diǎn)陣是由64個(gè)發(fā)光二極管按矩陣形式排列而成,,每一行上的發(fā)光管有一個(gè)公共的陽(yáng)極(或陰極),,每一列上的發(fā)光管有一個(gè)公共的陰極(或陽(yáng)極),一般按動(dòng)態(tài)掃描方式顯示漢字或圖形,。掃描分為點(diǎn)掃描,、行掃描和列掃描三種方式。
Abstract:
Key words :

  漢字滾動(dòng)顯示器的傳統(tǒng)設(shè)計(jì)方法是用單片機(jī)來(lái)控制的,,雖然單片機(jī)方案具有價(jià)格低廉,,程序編程靈活等特點(diǎn),但由于單片機(jī)硬件資源的限制,,未來(lái)對(duì)設(shè)計(jì)的變更和升級(jí),,總是要付出較多研發(fā)經(jīng)費(fèi)和較長(zhǎng)投放市場(chǎng)周期的代價(jià),甚至有可能需要重新設(shè)計(jì)。況且,,在以顯示為主的系統(tǒng)中,,單片機(jī)的運(yùn)算和控制等主要功能的利用率很低,單片機(jī)的優(yōu)勢(shì)得不到發(fā)揮,,相當(dāng)于很大的資源浪費(fèi),。

  采用EDA技術(shù)的自頂向下的模塊化設(shè)計(jì)方法,借助相關(guān)開(kāi)發(fā)軟件,,例如QualtusⅡ軟件,,將硬件描述語(yǔ)言——VHDL程序固化于具有豐富I/O口、內(nèi)部邏輯和連線資源的FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)中,。該技術(shù)具有系統(tǒng)設(shè)計(jì)效率高,、集成度好、保密性強(qiáng),、易于修改,、易于實(shí)現(xiàn)等優(yōu)點(diǎn),成為當(dāng)今數(shù)字系統(tǒng)設(shè)計(jì)主流技術(shù),。此方式所制作的LED點(diǎn)陣控制器,,由于是純硬件行為,具有速度快,、可靠性高,、抗干擾能力強(qiáng)、開(kāi)發(fā)周期短等顯著優(yōu)點(diǎn),。

  1 EDA點(diǎn)陣顯示漢字原理

  以8×8的LED點(diǎn)陣為例,,8×8的LED點(diǎn)陣是由64個(gè)發(fā)光二極管按矩陣形式排列而成,每一行上的發(fā)光管有一個(gè)公共的陽(yáng)極(或陰極),,每一列上的發(fā)光管有一個(gè)公共的陰極(或陽(yáng)極),,一般按動(dòng)態(tài)掃描方式顯示漢字或圖形。掃描分為點(diǎn)掃描,、行掃描和列掃描三種方式,。行掃描需要按行抽取字型碼,列掃描則需要按列抽取字型碼,。為滿足視覺(jué)暫留要求,,若使用點(diǎn)掃描方式,其掃描頻率必須大于16×64=1 024Hz,,周期小于1ms,。若使用行或列掃描,則頻率必須大于16×8=128Hz,,周期小于7.8ms,。由于所用實(shí)驗(yàn)板上提供有1 kHz的時(shí)鐘,,本例設(shè)計(jì)中利用該時(shí)鐘進(jìn)行掃描,使每行掃描時(shí)間為1 ms,,實(shí)驗(yàn)結(jié)果顯示亮度合適?,F(xiàn)以行掃描為例簡(jiǎn)單說(shuō)明動(dòng)態(tài)掃描顯示的原理。圖1給出漢字“熱”在點(diǎn)陣為列共陽(yáng)時(shí)的行字模,。工作時(shí)先將要掃描行的點(diǎn)陣字模從各列上輸出,,再讓譯碼器選中(掃描)該行,使本行得以顯示,,接著再送下一行數(shù)據(jù),,再使下一行有效,直到8行全被掃描一遍,。至此,,一幅完整的文字信息就顯現(xiàn)出來(lái),然后再反復(fù)掃描這8行直至顯示新的信息,。以下設(shè)計(jì)采用行掃描方式實(shí)現(xiàn)滾動(dòng)顯示,。

  

 

  2 硬件原理圖

  整個(gè)電路由五大部分組成:時(shí)鐘計(jì)數(shù)模塊GEL_CLK,,存儲(chǔ)漢字字模的ROM模塊ROMZI,,數(shù)據(jù)分配器模塊MUX,移位模塊YW及顯示模塊XIANSH-I,。時(shí)鐘計(jì)數(shù)模塊用于產(chǎn)生整個(gè)電路所需要的時(shí)鐘及其對(duì)時(shí)鐘的計(jì)數(shù)值,,例如:移位時(shí)鐘CLK YW,移位計(jì)數(shù)器CNT YW,,字計(jì)數(shù)器CNT WORD,,顯示掃描計(jì)數(shù)器CNT SM。ROMZI模塊是由QualtusⅡ中的LPM 1PORT ROM定制成,,用來(lái)存儲(chǔ)8個(gè)待顯示的漢字,。MUX模塊用于在掃描時(shí)鐘及掃描計(jì)數(shù)器的作用下,從ROM中讀出一個(gè)漢字的8個(gè)行字模信息,,送給移位模塊YW,,YW模塊在移位時(shí)鐘及移位計(jì)數(shù)器作用下,根據(jù)SELECT信號(hào)選擇對(duì)讀出的字模信息,,進(jìn)行相應(yīng)的移位(左移,、右移、上移,、下移)后,,最后送顯示模塊DISP驅(qū)動(dòng)LED點(diǎn)陣顯示漢字。原理圖如圖2所示,。

  

 

  3 模塊設(shè)計(jì)及時(shí)序仿真

  3.1 時(shí)鐘計(jì)數(shù)產(chǎn)生模塊

  時(shí)鐘計(jì)數(shù)產(chǎn)生模塊由1 kHz的輸人時(shí)鐘為基準(zhǔn),,進(jìn)行17位的循環(huán)計(jì)數(shù)CNT[16..O],。該時(shí)鐘,既是動(dòng)態(tài)掃描顯示的時(shí)鐘,,也是從ROM中取一個(gè)字8個(gè)字模的時(shí)鐘,,對(duì)之進(jìn)行的3位循環(huán)計(jì)數(shù)作為掃描顯示計(jì)數(shù)器和取一個(gè)字的字型碼計(jì)數(shù)器。CNT[16..O]中的CNT[9]是對(duì)該時(shí)鐘的1 024分頻,,將其作為移位時(shí)鐘CNT_YW,,周期約為l s。CNT[13…lO]作為4位的移位計(jì)數(shù)器,,是對(duì)移位時(shí)鐘CLK_YW的計(jì)數(shù),,也是對(duì)移位位數(shù)的統(tǒng)計(jì)。16個(gè)狀態(tài)使一個(gè)漢字逐列移進(jìn)點(diǎn)陣,,又逐列移出,。每經(jīng)過(guò)16個(gè)移位時(shí)鐘,將會(huì)顯示完一個(gè)漢字,。CNT[16..14]作為3位的取字計(jì)數(shù)器,。

  CNT[16…14]&CNT[2..O]作為ROM地址發(fā)生器。

  3.2 ROMZI模塊

  利用LPM參數(shù)化模塊庫(kù)中單口ROM,,利用QualtusⅡ中的MegaWizard Plug-In Manager定制而成,,定制前首先要制作LPM ROM初始化文件,其中存儲(chǔ)待顯示漢字的字模數(shù)據(jù),,然后按照LPM MegaWizardPlug-In Manager的向?qū)崾?,結(jié)合設(shè)計(jì)要求進(jìn)行定制。

  

 

  

 

  圖3為所定制ROM中的初始化漢字“元旦生日開(kāi)心快樂(lè)”的字型碼,。數(shù)據(jù)分配模塊MUX要求能在8個(gè)時(shí)鐘作用下,,從ROM中讀出一行(一個(gè)漢字的8個(gè)字型碼)分別送到數(shù)據(jù)分配器中的WLl~WL8輸出端。圖4為數(shù)據(jù)分配模塊在掃描時(shí)鐘作用下讀取的字模數(shù)據(jù),,比較圖3和圖4可知,,仿真結(jié)果正確,能滿足題目要求,。

  3.3 移位模塊YW

  移位模塊YW是整個(gè)設(shè)計(jì)的核心,,行掃描實(shí)現(xiàn)左移,是通過(guò)每來(lái)一個(gè)移位時(shí)鐘,,將每一行的字模按位左移一位,,掃描時(shí)鐘到來(lái)時(shí)送出移位后的新字模。通過(guò)8次移位,,可將一個(gè)漢字移出點(diǎn)陣平面,,按類(lèi)似的道理,也可以將一個(gè)漢字經(jīng)8次移位后移進(jìn)點(diǎn)陣平面,。本例(圖2)中,,CNT YW為移位時(shí)鐘的計(jì)數(shù)值,,以WLl~WL8為欲顯示漢字的原始字模,L10~L80為移位后從列上送出的8行顯示字模信息,,LLl~LL8為8個(gè)原始字模信息未送出位的暫存信號(hào),。設(shè)計(jì)中需要16個(gè)移位時(shí)鐘,通過(guò)前8個(gè)時(shí)鐘將WLl~WL8字模移進(jìn)LED點(diǎn)陣平面,,再經(jīng)后8個(gè)時(shí)鐘,,將漢字又一位一位地移出。 移位設(shè)計(jì)參考文獻(xiàn)中有關(guān)移位寄存器的設(shè)計(jì),,分計(jì)數(shù)值為“0000"和非"0000"兩部分處理,,對(duì)第一行字模的處理為:

  

 

  其他行可按相同方法處理,具體參見(jiàn)如下的程序:

  

 

  

 

  右移處理方法與上面左移相反,,如對(duì)第一行可按如下方法處理:

  

 

  上移時(shí)的部分程序按以下思路編制:L10~L70在CNT_YW為初態(tài)“0000”時(shí),,各信號(hào)均賦值X“00”,非初態(tài)時(shí),,均進(jìn)行上移一位,。即:L10<=L20;L20<=L30;…;L60<=L70;L70<=L80;對(duì)于L80,在漢字移進(jìn)LED過(guò)程中即前8個(gè)狀態(tài)各移進(jìn)一個(gè)新行,,在移出LED即后8個(gè)狀態(tài)時(shí),,都補(bǔ)進(jìn)X“00”。程序如下:

  

 

  下移程序可按相反思路去編,。

  3.4 顯示模塊DISP設(shè)計(jì)

  顯示模塊DISP是以CNT_SM為掃描計(jì)數(shù)器,,是對(duì)1kHz進(jìn)行三位循環(huán)計(jì)數(shù),,由前述的時(shí)鐘計(jì)數(shù)產(chǎn)生模塊產(chǎn)生,,WLl~WL8為待送出顯示的8個(gè)8位字型碼,由前述的移位模塊YW提供;SW[7..O]為行掃描輸出信號(hào),,連接至點(diǎn)陣的8個(gè)行;DATA[7..0]為行掃描時(shí)對(duì)應(yīng)的列輸出字型碼,,對(duì)外連至點(diǎn)陣的8列。該模塊參考文獻(xiàn)中數(shù)碼管動(dòng)態(tài)顯示程序進(jìn)行設(shè)計(jì)如下:

  

 

  

 

  4 硬件實(shí)現(xiàn)

  上述各模塊分別在QualtusⅡ中通過(guò)了仿真驗(yàn)證,,最后對(duì)整體設(shè)計(jì)進(jìn)行了硬件驗(yàn)證,。將設(shè)計(jì)載入KH31001開(kāi)發(fā)板的Cyclone工系列EPlC6Q-240C8FPGA器件中,實(shí)驗(yàn)證明漢字滾動(dòng)顯示掃描情況均正常,,能夠按照預(yù)想進(jìn)行移位顯示,,這說(shuō)明。FPGA的內(nèi)核硬件工作良好,,可以正確地實(shí)現(xiàn)所要求的設(shè)計(jì)功能,。

  5 系統(tǒng)擴(kuò)展

  本文是針對(duì)8×8點(diǎn)陣設(shè)計(jì),故每次取8個(gè)字形碼,,如果是16×16點(diǎn)陣,,將RONZI中存儲(chǔ)的字形碼改為16位,,數(shù)據(jù)線改為16位,一個(gè)漢字需要16個(gè)16位的字形碼,,數(shù)據(jù)分配模塊MUX,、移位模塊YW、顯示模塊DISP,,均要將輸入輸出數(shù)據(jù)中的原來(lái)的8位改成相應(yīng)的16位,。掃描及取字型碼計(jì)數(shù)器CNT_SM應(yīng)改為CNT計(jì)數(shù)器的低4位。一個(gè)16×16點(diǎn)陣漢字的移進(jìn)移出共需32個(gè)狀態(tài),。由5位的計(jì)數(shù)器提供,。如用CNT[16..0]中的14~10位作為該計(jì)數(shù)器,這可在時(shí)鐘計(jì)數(shù)器產(chǎn)生單元CLK_GE中應(yīng)做相應(yīng)修改,,字計(jì)數(shù)器CNT WORD按照每取16個(gè)字進(jìn)行加1統(tǒng)計(jì),。顯示DISP部分的譯碼器要由3-8譯碼改為4-16譯碼。顯示的漢字信息越多,,ROM的地址線位數(shù)越多,,字計(jì)數(shù)器CNT_WORD應(yīng)在時(shí)鐘計(jì)數(shù)器產(chǎn)生單元GE_CLK中,將相應(yīng)的計(jì)數(shù)器位數(shù)擴(kuò)展,,由CNT計(jì)數(shù)器的最高位到位15來(lái)承擔(dān),。若還是8個(gè)漢字,計(jì)數(shù)器應(yīng)為CNT[17..O],,CNT[17..15]為字計(jì)數(shù)器;若為16個(gè)漢字,,計(jì)數(shù)器應(yīng)為CNT[18..O],CNT[18..15]為字計(jì)數(shù)器,,…,,依次類(lèi)推。

  6 結(jié)語(yǔ)

  本文在KH31001開(kāi)發(fā)板上實(shí)現(xiàn)了基于Altera公司的Cyclone I系列FPGA器件EPlC6Q240C8硬件及VHDL硬件描述語(yǔ)言設(shè)計(jì)的LED點(diǎn)陣漢字滾動(dòng)顯示,,能在8×8點(diǎn)陣上滾動(dòng)顯示“元旦生日開(kāi)心快樂(lè)”8個(gè)漢字,。文中從LED點(diǎn)陣顯示漢字的原理闡述出發(fā),給出了點(diǎn)陣漢字滾動(dòng)顯示控制器的原理圖,,部分模塊的VHDL源程序及時(shí)序仿真圖,,并能由按鍵選擇其滾動(dòng)方式:左移、右移,、上移,、下移等,給出了系統(tǒng)擴(kuò)展成16×16點(diǎn)陣漢字滾動(dòng)的改動(dòng)思路,。從文中描述的系統(tǒng)擴(kuò)展方案中看出,,當(dāng)系統(tǒng)顯示字符個(gè)數(shù)變化時(shí),只需對(duì)控制邏輯和連接關(guān)系做適當(dāng)?shù)男薷?,再將修改完成的程序下載到器件即可,,顯然,,系統(tǒng)的維護(hù)和修改是極其方便和容易的,本文對(duì)同類(lèi)設(shè)計(jì)也具有一定的參考價(jià)值,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。