基于FPGA的LED點(diǎn)陣顯示字符設計
采用現場(chǎng)可編程邏輯器件( FPGA) 作為控制器, 選擇合適的器件, 利用器件豐富的I/O 口、內部邏輯和連線(xiàn)資源, 采用自上而下的模塊化設計方法, 可以方便地設計整個(gè)顯示系統。
電子設計自動(dòng)化(EDA)技術(shù)是基于可編程器件( PLD) 的數字電子系統設計, 它是進(jìn)行系統芯片集成的新設計方法, 也正在快速地取代基于PCB 板的傳統設計方式。在EDA工具軟件MAX+PLUSⅡ的支持下, 本設計通過(guò)了編譯、適配和軟件仿真驗證。最后用載入真實(shí)實(shí)驗系統的硬件實(shí)驗證明了它的正確性。
1 系統結構及其原理
本設計結合上海航虹高科技公司生產(chǎn)的EDA實(shí)驗箱, 需要顯示的16 個(gè)字符的字模已存放在EPROM 的8000H~807FH, 采用單個(gè)8×8LED 點(diǎn)陣(WTD3088)顯示字符, 顯示控制由現場(chǎng)可編程門(mén)陣列( FPGA) EPF10K20TC144- 4 來(lái)實(shí)現。系統原理是FPGA首先產(chǎn)生點(diǎn)陣字模地址, 并從存儲器讀出數據存放在16 位寄存器中, 然后輸出到LED 點(diǎn)陣的列, 同時(shí)對點(diǎn)陣列循環(huán)掃描以動(dòng)態(tài)顯示數據, 當需要顯示數據字模的列和被選中的列能夠協(xié)調配合起來(lái), 就可以正確顯示字符。
2 FPGA設計及其原理
為在8×8LED 發(fā)光二極管點(diǎn)陣上顯示字符, 首先要把字符表示成為8×8 像素點(diǎn)( AD0~AD7) , 分別為按列抽取依序排列的字符像素信息, 均具有8 位字長(cháng)。然后依次對多字符抽取像素信息, 并按序排隊存放于EPROM 之中, 便可得到一個(gè)待顯示數據序列。進(jìn)一步通過(guò)尋址的方法來(lái)控制該數據序列的釋放過(guò)程, 就可實(shí)現在8×8LED發(fā)光二極管點(diǎn)陣上滾動(dòng)顯示多個(gè)字符信息的目的。page 控制字符顯示的滾動(dòng)速度, 它的取值范圍應為0~N, col 決定LED 點(diǎn)陣的列開(kāi)關(guān)的掃描速度,它的取值范圍應為0~7.某一時(shí)刻能在顯示數據序列中定位待顯示數據的地址指針可用下式計算: addr=page+col應當注意的是, 掃描速度應遠大于滾動(dòng)速度, 本設計中使用的掃描時(shí)鐘是1KHz, 字符的滾動(dòng)速度是1 秒/ 個(gè)。調節字符信息的滾動(dòng)速度;改變col 的重復掃描周期, 可改善在LED 點(diǎn)陣上顯示完整字符信息的穩定性。
另外還需指出, 由于addr 的運算要靠硬件實(shí)現, 故地址指針addr的模應取為N, 而且為實(shí)現全部字符信息滾過(guò)LED 點(diǎn)陣, 必須在數據N前補充8 個(gè)空數據字節。根據其工作原理, 設計了描述FPGA內核硬件功能的VHDL 語(yǔ)言程序。本設計結合了EDA實(shí)驗箱和ALTERA公司的MAX+PLUSⅡ研發(fā)工具, 并采取了行為的描述方式。
VHDL程序如下:
libraryieee;
use ieee.s td_logic_1164.all;
use ieee.s td_logic_arith.all;
use ieee.s td_logic_uns igned.all;
entityledis
port (clk1,clk2,reset: ins td_logic;
led_s: out s td_logic_vector(2downto0);
memcs,rd,wr,cs0809,sELmled:out s td_logic;
a: out s td_logic_vector(15downto0);
ad: out s td_logic_vector(7downto0));
end;
architecture led_archofledis
s ignalcol:integerrange 0to7;
s ignalpage :integerrange 0to15;
s ignaloe:s td_logic;
begin
proces s(clk2,reset,col)
begin
ifreset=''1'' then
col=0;
els if(clk2''event andclk2=''1'')then
col=col+1;
endif;
led_s = conv_s td_logic_vector(col,3);
a(2downto0)=conv_s td_logic_vector(col,3);
endproces s;
proces s(clk1,page)
begin
if(clk1''event andclk1=''1'')then
page=page+1;
endif;
a(6downto3)=conv_s td_logic_vector(page,4);
endproces s;
ad= "ZZZZZZZZ";oe = ''0'';
memcs = ''0'';rd= ''0'';
wr= ''1'';selmled=''1'';cs0809= ''1'';
a(15downto7)="100000000";
endled_arch;
3 實(shí)驗驗證
通過(guò)使用EDA工具軟件MAX+PLUSⅡ中的仿真器, 對通過(guò)編譯的字符滾動(dòng)顯示器的VHDL設計進(jìn)行了模擬仿真驗證, 證明FPGA的內核硬件工作良好。此外, 將VHDL 程序下載到由上海航虹高科技公司生產(chǎn)的EDA實(shí)驗箱上后, 能正確顯示存放于EPROM 中的字符。從而說(shuō)明了在硬件系統中字符滾動(dòng)和顯示掃描情況也均正常, 驗證了設計的正確性。
4 結束語(yǔ)
本設計為顯示單個(gè)字符系統, 若要同時(shí)顯示多個(gè)字符時(shí), 可以加入多個(gè)LED 點(diǎn)陣即可。同時(shí)采用外部譯碼器時(shí), 可以控制的字符數將大大增加, 但須注意時(shí)鐘CLK的頻率需要提高, 以眼睛看到整個(gè)字符的不閃爍為基準。此外, 由于FPGA的驅動(dòng)能力有限, 當點(diǎn)陣LED 顯示亮度不夠時(shí), 需要為L(cháng)ED 點(diǎn)陣添加驅動(dòng)電路( 如高壓大電流達林頓陣列集成電路) 以提高的LED顯示亮度。
評論