基于VHDL的16路可调速彩灯控制器设计

时间:2022-09-17 09:21:06

基于VHDL的16路可调速彩灯控制器设计

摘 要:彩灯作为一种常见的装饰,在生活中应用广泛。为了使彩灯变得更加绚丽多彩,这里在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

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

when"01"=>clkq

when"10"=>clkq

when"11"=>clkq

end case;

end process;

----系统复位

process(clkq,rst)

begin

if rst=′1′ then present

elsif clkq′event and clkq=′1′ then

case present is

----s0模式:从左到右逐个点亮LED

when s0=>

if q1="0000000000000000"

then q1

elsif cnt="1111" then

cnt′0′);

q1

present

else q1

cnt

end if;

----s1模式:从右到左逐个点亮LED

when s1=>

if cnt="1111" then

cnt′0′);

q1

present

else q1

cnt

end if;

----s2模式:从两边到中间逐个点亮LED

when s2=>

if cnt="1111" then

cnt′0′);

q1

present

else q1(15 downto 8)

q1(7 downto 0)

cnt

end if;

----s3模式:从中间到两边逐个点亮LED

when s3=>

if cnt="1111" then

cnt′0′);

q1

else q1(15 downto 8)

q1(7 downto 0)

cnt

end if;

end case;

end if;

end process;

q

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.

上一篇:基于图像识别技术的沿岸潮汐测量方法研究 下一篇:基于多数决定逻辑非门的低功耗全加器设计