基于VHDL的16路可调速彩灯控制器设计
基于 VHDL 的 16 路可调速彩灯控制器设计
张喜凤, 屈宝鹏
( 陕西国防工业职业技术学院, 陕西 西安 710300)
摘 要: 彩灯作为一种常见的装饰, 在生活中应用广泛。为了使彩灯变得更加绚丽多彩, 这里在 Quart us 开发环境下,
用 VH DL 语言设计了一种可用于控制 16 路彩灯, 具有 4 种彩灯变换模式, 且变换速度可调的彩灯控制器。仿真结果表明,
所设计的彩灯控制器成功地实现了 4 种变换模式的循环和各种变换速度的调节。最后, 以 ACEX1K 系列 EP1K30QC208 芯
片为硬件环境, 验证了各项设计功能的正确性。
关键词: VH DL; 彩灯控制器; 变换模式; EP1K30QC208
中图分类号: TN710; TP332. 1 文献标识码: A 文章编号: 1004373X( 2010) 14018003
Design of Adjustable Speed Sixteen Groups Illuminations Controller Based on VHDL
ZH ANG Xifeng, QU Baopeng
( Electronics Engineer Department , Shaanxi Inst itute of T echnology, Xi'an 710300, China)
Abstract: The FPGA/ CPLD is applied in digital system development extensively wit h the development of large scale inte
grated circuit. Illuminations w hich are common decorations have a broad application in daily life. In order to make the illumi
nat ions colorful, a switch speed adjust able cont roller w hich can control 16 groups of illuminations and has 4 sw itch patterns
w as designed with the language of VH DL in t he environment of Quartus II. The simulation result s indicate that the designed
controller realized the cycle of 4 sw itch pat terns and all sorts of speeds adjust able. The validity of w hole designed funct ions is
verified w ith the EP1K30QC208 chip of ACEX1K series.
Keywords: VH DL; illuminations; controller; sw itch mode; EP1K30QC208
收稿日期: 20100319
0 引 言
近年来, FPGA/ CPLD 发展迅速, 随着集成电路制
造工艺的不断进步, 高性价比的 FPGA/ CPLD 器件推
陈出新[ 13] , 使 FPGA/ CPLD 成为当今硬件设计的重要
途径, 与传统电路设计方法相比, FPGA / CPLD 具有功
能强大、开发周期短、投资少, 便于追踪市场变化及时修
改产品设计以及开发工具智能化等特点[ 4] 。在诸多
FPGA/ CPLD 的设计语言中, VHDL 语言作为一种主
流的硬件描述语言, 具有很强的电路描述和建模能力,
能从多个层次对数字系统进行建模和描述, 从而大大简
化了硬件设计任务, 提高了设计效率和可靠性, 并在语
言易读性和层次化、结构化设计方面, 表现出了强大的
生命力和应用潜力[ 56] 。
Quartus 是 Altera 公司在 21 世纪初推出的
FPGA/ CPLD 集成开发环境, 是 A ltera 公司前一代
FPGA/ CPLD集成开发环境 M ax+ Plus 的更新换代
产品, 其界面友好, 使用便捷, 功能强大, 为设计者提供
了一种与结构无关的设计环境, 使设计者能方便的进行
设计输入、快速处理和器件编程[ 78] 。
本文在 Quartus 开发环境下, 用 VHDL 语言设
计了一种可用于控制 16 路彩灯, 具有 4 种彩灯变换模
式, 且变换速度可调的彩灯控制器。
1 16 路可调速彩灯控制器设计思路
16 路可调速彩灯控制器根据功能可分为 3 个部
分, 如图 1 所示。其中, 8 Hz 分频部分用于对频率为
10 M Hz的时钟信号进行分频, 获得频率为 8 Hz 的时
钟信号 CLK8。CLK8 作为速度控制部分的基准时钟,
通过计数分频方式又可获得频率分别为 4 Hz, 2 Hz 和
1 Hz的时钟信号, 然后由调速信号选择其中之一作为
彩灯时钟信号 CLKQ, CLKQ 即为彩灯控制部分的基
准时钟, 用于决定彩灯变换的速度, 由此实现调速信号
SPD 对彩灯变换速度的控制, 使彩灯可调速。
图 1 16 路可调速彩灯原理图
180
元器件与应用 张喜凤等: 基于 VHDL 的 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 M Hz 时钟信号输入端,
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 st d_logic_vector( 1 dow nto 0) ;
q: out std_logic_vector( 15 dow nto 0) ) ;
END lights16;
ARCH ITECT URE 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_vect or( 15 downto 0) ;
signal cnt: std_logic_vector( 3 dow nto 0) ;
BEGIN
process( clk) - - - - 8Hz 分频
variable count: integer range 0 to 624999;
begin
if clk?event and clk= ?1? t hen
if count= 624999
then clk8hz< = not clk8hz; count: = 0;
else count: = count+ 1;
end if;
end if;
end process;
process( clk8H z) - - - - 速度控制
variable count1: std_logic_vector( 2 downto 0) ;
begin
if clk8H z?event and clk8H z= ?1?
then count1: = count1+ 1;
end if;
case spd is
w hen"00"= > clkq< = count1( 2) ;
w hen"01"= > clkq< = count1( 1) ;
w hen"10"= > clkq< = count1( 0) ;
w hen"11"= > clkq< = clk8H z;
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
w hen s0= >
if q1= "0000000000000000"
then q1< = "1000000000000000";
elsif cnt= "1111" then
cnt< = ( others= > ?0?) ;
q1< = "0000000000000001";
present< = s1;
else q1< = q1( 0) & q1( 15 dow nt o 1) ;
cnt< = cnt + 1; present< = s0;
end if;
- - - - s1 模式: 从右到左逐个点亮 LED
w hen 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
w hen s2= >
if cnt= "1111" then
cnt< = ( others= > ?0?) ;
q1< = "0000000110000000";
present< = s3;
else q1( 15 downto 8) < = q1( 8) & q1( 15 dow nto 9) ;
q1( 7 dow nto 0) < = q1( 6 downto 0) & q1( 7) ;
cnt< = cnt + 1; present< = s2;
end if;
- - - - s3 模式: 从中间到两边逐个点亮 LED
181
#现代电子技术?2010 年第 14 期总第 325 期 新型元器件
w hen s3= >
if cnt= "1111" then
cnt< = ( others= > ?0?) ;
q1< = "1000000000000000"; present< = s0;
else q1( 15 dow nto 8) < = q1( 14 dow nt o 8) & q1( 15) ;
q1( 7 downto 0) < = q1( 0) & q1( 7 dow nto 1) ;
cnt< = cnt+ 1; present< = s3;
end if;
end case;
end if;
end process;
q< = q1;
END ARCHIT ECT URE one;
值得注意的是, 本文设计的 16 路可调速彩灯控制
器使用了数据循环算法, 较以往的 case w hen 语句[ 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 路可调速彩灯控制器在Q uartus 开发
环境下进行了仿真验证后, 下载到湖北众友科技实业股
份有限公司的 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] 卢毅, 赖杰. VH DL 与数字电路设计[ M] . 北京: 科学出版
社, 2001.
[ 7] 李志, 田永清, 朱仲英. VH DL 的设计特点与应用研究[ J] .
微型电脑应用, 2002( 10) : 58.
[ 8] 周润景, 图雅, 张丽敏. 基于 Quartus 的 FPGA/ CPLD 数
字系统设计实例[ M] . 北京: 电子工业出版社, 2007.
[ 9] 吕晓兰. 基于 VHDL 实现的 16 路彩灯控制系统[ J] . 电子技
术, 2007( 2) : 5759.
作者简介: 张喜凤 女, 内蒙古萨拉齐人, 助教, 硕士。主要从事半导体材料及集成电路方面的科研与教学工作。
屈宝鹏 男, 陕西佳县人, 讲师。现主要从事半导体材料及集成电路方面的科研与教学工作。
182
元器件与应用 张喜凤等: 基于 VHDL 的 16 路可调速彩灯控制器设计
基于VHDL的16路可调速彩灯控制器设计.pdf