0 引言
現(xiàn)代文明的一個顯著特征是城市中隨處可見的五顏六色的廣告宣傳,,其中大多都是由LED點陣制作的漢字或圖形廣告,,廣泛應(yīng)用在銀行、醫(yī)院,、酒店,、火車站、體育場館等各種公共場所。
漢字滾動顯示器的傳統(tǒng)設(shè)計方法是用單片機來控制的,,雖然單片機方案具有價格低廉,,程序編程靈活等特點,但由于單片機硬件資源的限制,,未來對設(shè)計的變更和升級,,總是要付出較多研發(fā)經(jīng)費和較長投放市場周期的代價,甚至有可能需要重新設(shè)計,。況且,,在以顯示為主的系統(tǒng)中,單片機的運算和控制等主要功能的利用率很低,,單片機的優(yōu)勢得不到發(fā)揮,,相當(dāng)于很大的資源浪費。
采用EDA技術(shù)的自頂向下的模塊化設(shè)計方法,,借助相關(guān)開發(fā)軟件,,例如QualtusⅡ軟件,將硬件描述語言——VHDL程序固化于具有豐富I/O口,、內(nèi)部邏輯和連線資源的FPGA(現(xiàn)場可編程門陣列)中。該技術(shù)具有系統(tǒng)設(shè)計效率高,、集成度好,、保密性強、易于修改,、易于實現(xiàn)等優(yōu)點,,成為當(dāng)今數(shù)字系統(tǒng)設(shè)計主流技術(shù)。此方式所制作的LED點陣控制器,,由于是純硬件行為,,具有速度快、可靠性高,、抗干擾能力強,、開發(fā)周期短等顯著優(yōu)點。
1 EDA點陣顯示漢字原理
以8×8的LED點陣為例,,8×8的LED點陣是由64個發(fā)光二極管按矩陣形式排列而成,,每一行上的發(fā)光管有一個公共的陽極(或陰極),每一列上的發(fā)光管有一個公共的陰極(或陽極),,一般按動態(tài)掃描方式顯示漢字或圖形,。掃描分為點掃描、行掃描和列掃描三種方式,。行掃描需要按行抽取字型碼,,列掃描則需要按列抽取字型碼。為滿足視覺暫留要求,,若使用點掃描方式,,其掃描頻率必須大于16×64=1 024Hz,,周期小于1ms。若使用行或列掃描,,則頻率必須大于16×8=128Hz,,周期小于7.8ms。由于所用實驗板上提供有1 kHz的時鐘,,本例設(shè)計中利用該時鐘進行掃描,,使每行掃描時間為1 ms,實驗結(jié)果顯示亮度合適?,F(xiàn)以行掃描為例簡單說明動態(tài)掃描顯示的原理,。圖1給出漢字“熱”在點陣為列共陽時的行字模。工作時先將要掃描行的點陣字模從各列上輸出,,再讓譯碼器選中(掃描)該行,,使本行得以顯示,接著再送下一行數(shù)據(jù),,再使下一行有效,,直到8行全被掃描一遍。至此,,一幅完整的文字信息就顯現(xiàn)出來,,然后再反復(fù)掃描這8行直至顯示新的信息。以下設(shè)計采用行掃描方式實現(xiàn)滾動顯示,。
2 硬件原理圖
整個電路由五大部分組成:時鐘計數(shù)模塊GEL_CLK,,存儲漢字字模的ROM模塊ROMZI,數(shù)據(jù)分配器模塊MUX,,移位模塊YW及顯示模塊XIANSH-I,。時鐘計數(shù)模塊用于產(chǎn)生整個電路所需要的時鐘及其對時鐘的計數(shù)值,例如:移位時鐘CLK YW,,移位計數(shù)器CNT YW,,字計數(shù)器CNT WORD,顯示掃描計數(shù)器CNT SM,。ROMZI模塊是由QualtusⅡ中的LPM 1PORT ROM定制成,,用來存儲8個待顯示的漢字。MUX模塊用于在掃描時鐘及掃描計數(shù)器的作用下,,從ROM中讀出一個漢字的8個行字模信息,,送給移位模塊YW,YW模塊在移位時鐘及移位計數(shù)器作用下,,根據(jù)SELECT信號選擇對讀出的字模信息,,進行相應(yīng)的移位(左移、右移、上移,、下移)后,,最后送顯示模塊DISP驅(qū)動LED點陣顯示漢字。原理圖如圖2所示,。
3 模塊設(shè)計及時序仿真
3.1 時鐘計數(shù)產(chǎn)生模塊
時鐘計數(shù)產(chǎn)生模塊由1 kHz的輸人時鐘為基準,,進行17位的循環(huán)計數(shù)CNT[16..O]。該時鐘,,既是動態(tài)掃描顯示的時鐘,,也是從ROM中取一個字8個字模的時鐘,對之進行的3位循環(huán)計數(shù)作為掃描顯示計數(shù)器和取一個字的字型碼計數(shù)器,。CNT[16..O]中的CNT[9]是對該時鐘的1 024分頻,,將其作為移位時鐘CNT_YW,周期約為l s,。CNT[13…lO]作為4位的移位計數(shù)器,,是對移位時鐘CLK_YW的計數(shù),也是對移位位數(shù)的統(tǒng)計,。16個狀態(tài)使一個漢字逐列移進點陣,,又逐列移出。每經(jīng)過16個移位時鐘,,將會顯示完一個漢字,。CNT[16..14]作為3位的取字計數(shù)器。
CNT[16…14]&CNT[2..O]作為ROM地址發(fā)生器,。
3.2 ROMZI模塊
利用LPM參數(shù)化模塊庫中單口ROM,利用QualtusⅡ中的MegaWizard Plug-In Manager定制而成,,定制前首先要制作LPM ROM初始化文件,,其中存儲待顯示漢字的字模數(shù)據(jù),然后按照LPM MegaWizardPlug-In Manager的向?qū)崾?,結(jié)合設(shè)計要求進行定制,。
圖3為所定制ROM中的初始化漢字“元旦生日開心快樂”的字型碼。數(shù)據(jù)分配模塊MUX要求能在8個時鐘作用下,,從ROM中讀出一行(一個漢字的8個字型碼)分別送到數(shù)據(jù)分配器中的WLl~WL8輸出端,。圖4為數(shù)據(jù)分配模塊在掃描時鐘作用下讀取的字模數(shù)據(jù),比較圖3和圖4可知,,仿真結(jié)果正確,,能滿足題目要求。
3.3 移位模塊YW
移位模塊YW是整個設(shè)計的核心,,行掃描實現(xiàn)左移,,是通過每來一個移位時鐘,將每一行的字模按位左移一位,掃描時鐘到來時送出移位后的新字模,。通過8次移位,,可將一個漢字移出點陣平面,按類似的道理,,也可以將一個漢字經(jīng)8次移位后移進點陣平面,。本例(圖2)中,CNT YW為移位時鐘的計數(shù)值,,以WLl~WL8為欲顯示漢字的原始字模,,L10~L80為移位后從列上送出的8行顯示字模信息,LLl~LL8為8個原始字模信息未送出位的暫存信號,。設(shè)計中需要16個移位時鐘,,通過前8個時鐘將WLl~WL8字模移進LED點陣平面,再經(jīng)后8個時鐘,,將漢字又一位一位地移出,。移位設(shè)計參考文獻中有關(guān)移位寄存器的設(shè)計,分計數(shù)值為“0000"和非"0000"兩部分處理,,對第一行字模的處理為:
其他行可按相同方法處理,,具體參見如下的程序:
右移處理方法與上面左移相反,如對第一行可按如下方法處理:
上移時的部分程序按以下思路編制:L10~L70在CNT_YW為初態(tài)“0000”時,,各信號均賦值X“00”,,非初態(tài)時,均進行上移一位,。即:L10<=L20,;L20<=L30;…,;L60<=L70,;L70<=L80;對于L80,,在漢字移進LED過程中即前8個狀態(tài)各移進一個新行,,在移出LED即后8個狀態(tài)時,都補進X“00”,。程序如下:
下移程序可按相反思路去編,。
3.4 顯示模塊DISP設(shè)計
顯示模塊DISP是以CNT_SM為掃描計數(shù)器,是對1kHz進行三位循環(huán)計數(shù),,由前述的時鐘計數(shù)產(chǎn)生模塊產(chǎn)生,,WLl~WL8為待送出顯示的8個8位字型碼,由前述的移位模塊YW提供,;SW[7..O]為行掃描輸出信號,,連接至點陣的8個行,;DATA[7..0]為行掃描時對應(yīng)的列輸出字型碼,對外連至點陣的8列,。該模塊參考文獻中數(shù)碼管動態(tài)顯示程序進行設(shè)計如下:
4 硬件實現(xiàn)
上述各模塊分別在QualtusⅡ中通過了仿真驗證,,最后對整體設(shè)計進行了硬件驗證。將設(shè)計載入KH31001開發(fā)板的Cyclone工系列EPlC6Q-240C8FPGA器件中,,實驗證明漢字滾動顯示掃描情況均正常,,能夠按照預(yù)想進行移位顯示,這說明,。FPGA的內(nèi)核硬件工作良好,,可以正確地實現(xiàn)所要求的設(shè)計功能。
5 系統(tǒng)擴展
本文是針對8×8點陣設(shè)計,,故每次取8個字形碼,,如果是16×16點陣,將RONZI中存儲的字形碼改為16位,,數(shù)據(jù)線改為16位,,一個漢字需要16個16位的字形碼,數(shù)據(jù)分配模塊MUX,、移位模塊YW,、顯示模塊DISP,均要將輸入輸出數(shù)據(jù)中的原來的8位改成相應(yīng)的16位,。掃描及取字型碼計數(shù)器CNT_SM應(yīng)改為CNT計數(shù)器的低4位,。一個16×16點陣漢字的移進移出共需32個狀態(tài)。由5位的計數(shù)器提供,。如用CNT[16..0]中的14~10位作為該計數(shù)器,,這可在時鐘計數(shù)器產(chǎn)生單元CLK_GE中應(yīng)做相應(yīng)修改,字計數(shù)器CNT WORD按照每取16個字進行加1統(tǒng)計,。顯示DISP部分的譯碼器要由3-8譯碼改為4-16譯碼,。顯示的漢字信息越多,ROM的地址線位數(shù)越多,,字計數(shù)器CNT_WORD應(yīng)在時鐘計數(shù)器產(chǎn)生單元GE_CLK中,,將相應(yīng)的計數(shù)器位數(shù)擴展,,由CNT計數(shù)器的最高位到位15來承擔(dān),。若還是8個漢字,計數(shù)器應(yīng)為CNT[17..O],,CNT[17..15]為字計數(shù)器,;若為16個漢字,計數(shù)器應(yīng)為CNT[18..O],,CNT[18..15]為字計數(shù)器,,…,,依次類推。
6 結(jié)語
本文在KH31001開發(fā)板上實現(xiàn)了基于Altera公司的Cyclone I系列FPGA器件EPlC6Q240C8硬件及VHDL硬件描述語言設(shè)計的LED點陣漢字滾動顯示,,能在8×8點陣上滾動顯示“元旦生日開心快樂”8個漢字,。文中從LED點陣顯示漢字的原理闡述出發(fā),給出了點陣漢字滾動顯示控制器的原理圖,,部分模塊的VHDL源程序及時序仿真圖,,并能由按鍵選擇其滾動方式:左移、右移,、上移,、下移等,給出了系統(tǒng)擴展成16×16點陣漢字滾動的改動思路,。從文中描述的系統(tǒng)擴展方案中看出,,當(dāng)系統(tǒng)顯示字符個數(shù)變化時,只需對控制邏輯和連接關(guān)系做適當(dāng)?shù)男薷?,再將修改完成的程序下載到器件即可,,顯然,系統(tǒng)的維護和修改是極其方便和容易的,,本文對同類設(shè)計也具有一定的參考價值,。