周 婷
(重庆师范大学涉外商贸学院,中国 重庆 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=´1´ then st <= s0;
elsif clk´event and clk=´1´ 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=´0´ then yn <= "1000000010000000";
elsif en=´1´ then yn <= "1000000010000000";
else yn <= "0000000000000000";
end if;
when s1 =>
if en=´0´ then yn <= "0100000001000000";
elsif en=´1´ then yn <= "0000000100000001";
else yn<= "0000000000000000";
end if;
when s2 =>
if en=´0´ then yn <= "0010000000100000";
elsif en=´1´ then yn <= "0000001000000010";
else yn <= "0000000000000000";
end if;
when s3 =>
if en=´0´ then yn <= "0001000000010000";
elsif en=´1´ then yn<= "0000010000000100";
else yn<= "0000000000000000";
end if;
when s4 =>
if en=´0´ then yn<= "0000100000001000";
elsif en=´1´ then yn <="0000100000001000";
else yn <= "0000000000000000";
end if;
when s5 =>
if en=´0´ then yn <= "0000010000000100";
elsif en=´1´ then yn<= "0001000000010000";
else yn<= "0000000000000000";
end if;
when s6 =>
if en=´0´ then yn <= "0000001000000010";
elsif en=´1´ then yn<="0010000000100000";
else yn <= "0000000000000000";
end if;
when s7 =>
if en=´0´ then yn <= "0000000100000001";
elsif en=´1´ then yn<="0100000001000000";
else yn <= "0000000000000000";
end if;
when others => yn <= "0000000000000000";
end case ;
if clk´event and clk=´1´ 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.
[责任编辑:杨玉洁]