您现在正在浏览:首页 > 职教文章 > 职教论文 > 基于VHDL的16路可调速彩灯控制器设计

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

日期: 2011/1/8 浏览: 179 来源: 学海网收集整理 作者: 张喜凤

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

张喜凤, 屈宝鹏

( 陕西国防工业职业技术学院, 陕西 西安 710300)

摘 要: 彩灯作为一种常见的装饰, 在生活中应用广泛。为了使彩灯变得更加绚丽多彩, 这里在 Quart us 开发环境下,

用 VH DL 语言设计了一种可用于控制 16 路彩灯, 具有 4 种彩灯变换模式, 且变换速度可调的彩灯控制器。仿真结果表明,

所设计的彩灯控制器成功地实现了 4 种变换模式的循环和各种变换速度的调节。最后, 以 ACEX1K 系列 EP1K30QC208 芯

片为硬件环境, 验证了各项设计功能的正确性。

关键词: VH DL; 彩灯控制器; 变换模式; EP1K30QC208

中图分类号: TN710; TP332. 1    文献标识码: A   文章编号: 1004373X( 2010) 14018003

Design of Adjustable Speed Sixteen Groups Illuminations Controller Based on VHDL

ZH ANG Xifeng, QU Baopeng

( 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

收稿日期: 20100319

0  引 言

近年来, FPGA/ CPLD 发展迅速, 随着集成电路制

造工艺的不断进步, 高性价比的 FPGA/ CPLD 器件推

陈出新[ 13] , 使 FPGA/ CPLD 成为当今硬件设计的重要

途径, 与传统电路设计方法相比, FPGA / CPLD 具有功

能强大、开发周期短、投资少, 便于追踪市场变化及时修

改产品设计以及开发工具智能化等特点[ 4] 。在诸多

FPGA/ CPLD 的设计语言中, VHDL 语言作为一种主

流的硬件描述语言, 具有很强的电路描述和建模能力,

能从多个层次对数字系统进行建模和描述, 从而大大简

化了硬件设计任务, 提高了设计效率和可靠性, 并在语

言易读性和层次化、结构化设计方面, 表现出了强大的

生命力和应用潜力[ 56] 。

Quartus  是 Altera 公司在 21 世纪初推出的

FPGA/ CPLD 集成开发环境, 是 A ltera 公司前一代

FPGA/ CPLD集成开发环境 M ax+ Plus  的更新换代

产品, 其界面友好, 使用便捷, 功能强大, 为设计者提供

了一种与结构无关的设计环境, 使设计者能方便的进行

设计输入、快速处理和器件编程[ 78] 。

本文在 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) : 58.

[ 8] 周润景, 图雅, 张丽敏. 基于 Quartus 的 FPGA/ CPLD 数

字系统设计实例[ M] . 北京: 电子工业出版社, 2007.

[ 9] 吕晓兰. 基于 VHDL 实现的 16 路彩灯控制系统[ J] . 电子技

术, 2007( 2) : 5759.

作者简介: 张喜凤 女, 内蒙古萨拉齐人, 助教, 硕士。主要从事半导体材料及集成电路方面的科研与教学工作。

屈宝鹏 男, 陕西佳县人, 讲师。现主要从事半导体材料及集成电路方面的科研与教学工作。

182

元器件与应用 张喜凤等: 基于 VHDL 的 16 路可调速彩灯控制器设计


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

返回顶部