基于VHDL彩灯控制器设计

  • 投稿菜花
  • 更新时间2015-09-23
  • 阅读量567次
  • 评分4
  • 64
  • 0

周 婷

(重庆师范大学涉外商贸学院,中国 重庆 401520)

【摘 要】随着计算机技术的飞速发展,EDA技术也有了巨大的发展,被广泛应用于电子、通信、医学、军事等各个领域。本文介绍了基于VHDL硬件描述语言设计彩灯控制器的思维与技巧,在MAX+plusⅡ开发工具软件中进行源文件的编辑、逻辑综合、适配、仿真及编程下载。仿真和验证的结果表明,该设计方法切实可行,该判决器具有一定的实际应用性。

教育期刊网 http://www.jyqkw.com
关键词 EDA; VHDL;彩灯控制器;MAX+plusⅡ

※基金项目:重庆师范大学涉外商贸学院校级科研项目(KY2014008)。

作者简介:周婷(1988—),重庆合川人,硕士研究生。

0 引言

电子设计自动化(EDA)技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑优化和仿真测试,直至实现既定的电子线路系统功能[1]。由美国国防部主持开发的VHDL语言是一种可用于数字电路描述和综合的高级语言[2],如果结合VHDL语言仿真电路进行仿真和验证,可以尽早发现电路设计中的错误,从而缩短开发的周期,降低开发成本,提高系统的设计效率。

VHDL语言是目前应用最广泛的硬件描述语言之一。它是一种人和机器都能理解的高级语言,与具体的硬件电路没有关系,具有较高的易读性。它支持层次化结构设计,从系统整体要求出发,从上至下逐层设计直到最终生成器件,完成电路系统。一个完整的VHDL程序包括有库、包集合、实体、结构体,另外还有配置块[3]。它的最大特点是将一项工程设计分成了内部和外部,工程可以是目标系统、电路模块甚至一个元件。其中外部是系统的端口;内部则是不可视部分,其功能用程序设计好后可直接调用。

1 彩灯控制器的功能分析与设计

彩灯在生活中经常能够看到,并且给我们的生活增添了许多色彩。尤其在节假日,不仅闪烁着美丽耀眼的光芒,还能够烘托出节日的气氛。本文采用EDA技术,使用VHDL语言实现彩灯的控制。

在美国ALTERA公司的MAX+PLUSⅡ平台上,使用VHDL硬件描述语言实现的彩灯控制电路的设计如下:在电路中以1代表灯亮,以0代表灯灭,由0、1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。彩灯控制器的元件,Y[15..0]是彩灯控制器的输出端。reset是彩灯控制器的复位信号输入端,当复位信号reset=‘1’时,彩灯状态会和s0相同;否则,当有时钟信号来临时,会根据程序设置显示出彩灯的亮灭状态。en是彩灯循环方式控制信号输入端,当en=‘0’时,彩灯自左边第一个灯和中间分别向右边循环闪烁;当en=‘1’时,彩灯自右边第一个灯和中间分别向左边循环闪烁;否则,彩灯会呈现熄灭状态。

2 彩灯控制器VHDL语言设计

十六路彩灯显示系统控制器的主要VHDL语言程序代码如下所示:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity colorlamp is

port(clk,reset,en:in std_logic;

   y:out std_logic_vector(15 downto 0));

end;

architecture beha of colorlamp is

type states is (s0,s1,s2,s3,s4,s5,s6,s7);

signal st:states;

signal yn:std_logic_vector(15 downto 0);

begin

one:process(clk,reset)

begin

if reset=&acute;1&acute; then st <= s0;

elsif clk&acute;event and clk=&acute;1&acute; then

case st is

       when s0 => st <= s1;

      when s1 => st <= s2;

       when s2 => st <= s3;

      when s3 => st <= s4;

       when s4 => st <= s5;

      when s5 => st <= s6;

       when s6 => st <= s7;

       when s7 => st <= s0;

      when others => st <= s0;

end case;

end if;

end process one;

two:process(st,en,clk)

begin

case st is

when s0 =>

if en=&acute;0&acute; then yn <= "1000000010000000";

elsif en=&acute;1&acute; then yn <= "1000000010000000";

else yn <= "0000000000000000";

end if;

when s1 =>

if en=&acute;0&acute; then yn <= "0100000001000000";

elsif en=&acute;1&acute; then yn <= "0000000100000001";

else yn<= "0000000000000000";

end if;

when s2 =>

if en=&acute;0&acute; then yn <= "0010000000100000";

elsif en=&acute;1&acute; then yn <= "0000001000000010";

else yn <= "0000000000000000";

end if;

when s3 =>

if en=&acute;0&acute; then yn <= "0001000000010000";

elsif en=&acute;1&acute; then yn<= "0000010000000100";

else yn<= "0000000000000000";

end if;

when s4 =>

if en=&acute;0&acute; then yn<= "0000100000001000";

elsif en=&acute;1&acute; then yn <="0000100000001000";

else yn <= "0000000000000000";

end if;

when s5 =>

if en=&acute;0&acute; then yn <= "0000010000000100";

elsif en=&acute;1&acute; then yn<= "0001000000010000";

else yn<= "0000000000000000";

end if;

when s6 =>

if en=&acute;0&acute; then yn <= "0000001000000010";

elsif en=&acute;1&acute; then yn<="0010000000100000";

else yn <= "0000000000000000";

end if;

when s7 =>

if en=&acute;0&acute; then yn <= "0000000100000001";

elsif en=&acute;1&acute; then yn<="0100000001000000";

else yn <= "0000000000000000";

end if;

when others => yn <= "0000000000000000";

end case ;

if clk&acute;event and clk=&acute;1&acute; then y<= yn ;

end if;

end process two;

end beha;

3 仿真结果

利用MAXPLLUS2的原理图输入,以原理图的形式形成最后的十六路彩灯显示系统器件并且进行仿真。图1分别是彩灯自右边第一个灯和中间分别向左边循环闪烁,彩灯自左边第一个灯和中间分别向右边循环闪烁的仿真时序图(如图1)。

4 结束语

通过上述实验可知,本设计是可行的。仿真正确后通过下载电缆下载到CPLD/FPGA芯片上即可。芯片可以重复使用无数次。只要拥有计算机,配上相应的软件就可以随心所欲的改变彩灯的方式,而且不受时间的限制。

教育期刊网 http://www.jyqkw.com
参考文献

[1]赵刚,编.EDA技术简明教程[M].成都:四川大学出版社,2004.

[2]宋文好,等.数字电路的VHDL综合技术[J].现代计算机,2001(111):22-25.

[3]李光超.基于VHDL的循环码编译码器的设计[D].河北:北华航天工业学院,2012.

[责任编辑:杨玉洁]