摘 要:彩燈作為一種常見的裝飾,在生活中應用廣泛。為了使彩燈變得更加絢麗多彩,這里在Quartus Ⅱ開發環境下,用VHDL語言設計了一種可用于控制16路彩燈,具有4種彩燈變換模式,且變換速度可調的彩燈控制器。仿真結果表明,所設計的彩燈控制器成功地實現了4種變換模式的循環和各種變換速度的調節。最后,以ACEX1K系列EP1K30QC208芯片為硬件環境,驗證了各項設計功能的正確性。
關鍵詞:VHDL; 彩燈控制器; 變換模式; EP1K30QC208
中圖分類號:TN710; TP332.1 文獻標識碼:A
文章編號:1004-373X(2010)14-0180-03
Design of Adjustable Speed Sixteen Groups Illuminations Controller Based on VHDL
ZHANG Xi-feng,QU Bao-peng
(Electronics Engineer Department, Sh
nxi Institute of Technology, Xi'an 710300,China)
Abstract: The FPGA/CPLD is applied in digital system development extensively with the development of large scale integrated circuit. Illuminations which are common decorations have a broad application in daily life. In order to make the illuminations colorful, a switch speed adjustable controller which can control 16 groups of illuminations and has 4 switch patterns was designed with the language of VHDL in the environment of Quartus II. The simulation results indicate that the designed controller realized the cycle of 4 switch patterns and all sorts of speeds adjustable. The validity of whole designed functions is verified with the EP1K30QC208 chip of ACEX1K series.
Keywords: VHDL; illuminations; controller; switch mode; EP1K30QC208
0 引 言
近年來,FPGA/CPLD發展迅速,隨著集成電路制造工藝的不斷進步,高性價比的FPGA/CPLD器件推陳出新[1-3],使FPGA/CPLD成為當今硬件設計的重要途徑,與傳統電路設計方法相比,FPGA/CPLD具有功能強大、開發周期短、投資少,便于追蹤市場變化及時修改產品設計以及開發工具智能化等特點[4]。在諸多FPGA/CPLD的設計語言中,VHDL語言作為一種主流的硬件描述語言,具有很強的電路描述和建模能力,能從多個層次對數字系統進行建模和描述,從而大大簡化了硬件設計任務,提高了設計效率和可靠性,并在語言易讀性和層次化、結構化設計方面,表現出了強大的生命力和應用潛力[5-6]。
Quartus Ⅱ是Altera公司在21世紀初推出的FPGA/CPLD集成開發環境,是Altera公司前一代FPGA/CPLD集成開發環境Max+PlusⅡ的更新換代產品,其界面友好,使用便捷,功能強大,為設計者提供了一種與結構無關的設計環境,使設計者能方便的進行設計輸入、快速處理和器件編程[7-8]。
本文在Quartus Ⅱ開發環境下,用VHDL語言設計了一種可用于控制16路彩燈,具有4種彩燈變換模式,且變換速度可調的彩燈控制器。
1 16路可調速彩燈控制器設計思路
16路可調速彩燈控制器根據功能可分為3個部分,如圖1所示。其中,8 Hz分頻部分用于對頻率為10 MHz的時鐘信號進行分頻,獲得頻率為8 Hz的時鐘信號CLK8。CLK8作為速度控制部分的基準時鐘,通過計數分頻方式又可獲得頻率分別為4 Hz,2 Hz和1 Hz的時鐘信號,然后由調速信號選擇其中之一作為彩燈時鐘信號CLKQ,CLKQ即為彩燈控制部分的基準時鐘,用于決定彩燈變換的速度,由此實現調速信號SPD對彩燈變換速度的控制,使彩燈可調速。
圖1 16路可調速彩燈原理圖
彩燈控制部分通過輸出1個16位二進制數(即彩燈輸出信號Q)來控制16個彩燈,每一位二進制數對應1個彩燈的開關,當該位數字為“1”時燈亮,該位數字為“0”時燈滅。彩燈的變換共設置4種模式:
s0模式:只亮1個燈,從最左端逐個移動到最右端,即輸出信號Q從第15位開始將1個“1”依次移動到第0位;
s1模式:只亮1個燈,從最右端逐個移動到最左端,即輸出信號Q從第0位開始將1個“1”依次移動到第15位;
s2模式:亮2個燈,同時從左右兩端向中間移動,即輸出信號Q從第15位開始將1個“1”依次移動到第8位,同時從第0位開始將1個“1”依次移動到第7位;
s3模式:亮2個燈,同時從中間向左右兩端移動,即輸出信號Q從第8位開始將1個“1”依次移動到第15位,同時從第7位開始將1個“1”依次移動到第0位。
四種模式依次循環,若復位信號RST輸入為高電平,則循環中斷,輸出信號Q置零,彩燈全滅,RST恢復為低電平后,再次從s0模式開始循環。
2 16路可調速彩燈控制器的實現
本文所設計的16路可調速彩燈控制器,其電路符號如圖2所示,其中clk為10 MHz時鐘信號輸入端,rst為復位控制端,spd為調速信號輸入端,q為彩燈控制信號輸出端。
圖2 16路可調速彩燈控制器的電路符號
本文所設計的16路可調速彩燈控制器的VHDL代碼如下所示:
LIBRARY IEEE;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY lights16 IS
PORT(clk: in std_logic;----10MHz時鐘輸入信號
rst: in std_logic;----復位信號
spd: in std_logic_vector(1 downto 0);
q: out std_logic_vector(15 downto 0));
END lights16;
ARCHITECTURE one OF lights16 IS
type states is (s0,s1,s2,s3);----定義4種模式
signal present:states;
signal clk8hz:std_logic;
signal clkq:std_logic;
signal q1:std_logic_vector(15 downto 0);
signal cnt:std_logic_vector(3 downto 0);
BEGIN
process(clk)----8Hz分頻
variable count:integer range 0 to 624999;
begin
if clk′event and clk=′1′ then
if count=624999
then clk8hz<=not clk8hz;count:=0;
else count:=count+1;
end if;
end if;
end process;
process(clk8Hz)----速度控制
variable count1:std_logic_vector(2 downto 0);
begin
if clk8Hz′event and clk8Hz=′1′
then count1:=count1+1;
end if;
case spd is
when\"00\"=>clkq<=count1(2);
when\"01\"=>clkq<=count1(1);
when\"10\"=>clkq<=count1(0);
when\"11\"=>clkq<=clk8Hz;
end case;
end process;
----系統復位
process(clkq,rst)
begin
if rst=′1′ then present<=s0;q1<=(others=>′0′);
elsif clkq′event and clkq=′1′ then
case present is
----s0模式:從左到右逐個點亮LED
when s0=>
if q1=\"0000000000000000\"
then q1<=\"1000000000000000\";
elsif cnt=\"1111\" then
cnt<=(others=>′0′);
q1<=\"0000000000000001\";
present<=s1;
else q1<=q1(0)q1(15 downto 1);
cnt<=cnt+1;present<=s0;
end if;
----s1模式:從右到左逐個點亮LED
when s1=>
if cnt=\"1111\" then
cnt<=(others=>′0′);
q1<=\"1000000000000001\";
present<=s2;
else q1<=q1(14 downto 0)q1(15);
cnt<=cnt+1;present<=s1;
end if;
----s2模式:從兩邊到中間逐個點亮LED
when s2=>
if cnt=\"1111\" then
cnt<=(others=>′0′);
q1<=\"0000000110000000\";
present<=s3;
else q1(15 downto 8)<=q1(8)q1(15 downto 9);
q1(7 downto 0)<=q1(6 downto 0)q1(7);
cnt<=cnt+1;present<=s2;
end if;
----s3模式:從中間到兩邊逐個點亮LED
when s3=>
if cnt=\"1111\" then
cnt<=(others=>′0′);
q1<=\"1000000000000000\";present<=s0;
else q1(15 downto 8)<=q1(14 downto 8)q1(15);
q1(7 downto 0)<=q1(0)q1(7 downto 1);
cnt<=cnt+1;present<=s3;
end if;
end case;
end if;
end process;
q<=q1;
END ARCHITECTURE one;
值得注意的是,本文設計的16路可調速彩燈控制器使用了數據循環算法,較以往的case when語句[10],更加簡潔,實現的功能更加強大,其具有如下特點:
(1) 在硬件驗證時,將速度控制端spd的pin腳接到撥碼開關上,從而實現彩燈變換速度快慢的手動控制,在更進一步的設計中,也可以通過對spd信號的內部控制,實現各種變換速度的自動調整。
(2) 該設計采用數據移位的方式實現彩燈的變換,更有利于彩燈變換模式的擴展。該設計雖然只設計了4種變換模式,但可以根據需要輕松的擴展至6~8種模式,甚至更多。
(3) 8 Hz分頻部分的分頻比很大,不適于計算機仿真驗證,在仿真時需要調小分頻比,在硬件驗證時再恢復較大的分頻比。
3 仿真結果分析
本文設計的16路可調速彩燈控制器在Quartus Ⅱ開發環境下進行了仿真驗證,仿真波形如圖3所示。仿真結果分析如下:
(1) clk為時鐘信號,由時鐘信號的上升沿觸發分頻器計數;
(2) rst為復位信號輸入端,當其為高電平時,彩燈控制輸出信號q清零,rst恢復為低電平后彩燈控制輸出信號q從s0模式重新開始循環;
(3) spd為調速信號輸入端,對應于spd的“00”,“01”,“10”,“11”這4個數值,彩燈變換的速度分別為1 Hz,2 Hz,4 Hz,8 Hz;
(4) q為彩燈控制信號輸出端,由圖3可知,該設計成功地實現了4種變換模式的循環和各種變換速度的調節。
圖3 16路可調速彩燈控制器仿真波形
4 結 語
設計的16路可調速彩燈控制器在Quartus Ⅱ開發環境下進行了仿真驗證后,下載到湖北眾友科技實業股份有限公司的ZY11EDA13BE實驗箱中進行了硬件驗證,該實驗箱使用ACEX1K系列EP1K30QC208芯片作為核心芯片,實驗證明設計正確,功能完整,運行穩定。另外,本文所設計的16路可調速彩燈控制器可根據需要增加更多的變換模式,使彩燈更加絢麗多姿。
參考文獻
[1]潘松,黃繼業.EDA技術實用教程[M].北京:科學出版社,2004.
[2]康華光.電子技術基礎(數字部分)[M].北京:高等教育出版社,2004.
[3]馬或,王丹利,王麗英.CPLD/FPGA可編程邏輯器件實用教程[M].北京:機械工業出版社,2006.
[4]侯伯亨,顧新.VHDL硬件描述語言與數字邏輯電路設計[M].西安:西安電子科技大學出版社,2000.
[5]李國麗,朱維勇,欒銘.EDA與數字系統設計[M].北京:機械工業出版社,2005.
[6]盧毅,賴杰.VHDL與數字電路設計[M] .北京:科學出版社,2001.
[7]李志,田永清,朱仲英.VHDL的設計特點與應用研究[J].微型電腦應用,2002(10):5-8.
[8]周潤景,圖雅,張麗敏.基于Quartus Ⅱ的FPGA/CPLD數字系統設計實例[M].北京:電子工業出版社,2007.
[9]呂曉蘭.基于VHDL實現的16路彩燈控制系統[J].電子技術,2007(2):57-59.