多路彩灯控制器的设计说明书
课程设计
语言
题目:
班级:
姓名:
学号:
指导教师:
成绩:
电子与信息工程学院
信息与通信工程系
多路彩灯控制器
[摘要]:现代电子设计技术的核心已日趋转向基于计算机的电子设计自动化技术,即EDA技术。EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。EDA技术式的设计者的工作仅限于利用软件的方式,即利用硬件语言和EDA软件来完成对系统硬件功能的实现,这是电子设计的一个巨大进步。
[关键词]:电子设计自动化(EDA);VHDL;彩灯控制器;
目录
1 解决方案 (1)
1.1 方案 (1)
1.2 说明 (1)
2 模块设计及其功能描述 (1)
2.1模块功能描述 (1)
2.2时序控制模块 (2)
2.3 显示控制模块 (4)
3 多路彩灯控制器的实现 (7)
3.1整体功能描述 (7)
3.2设计原理 (7)
4 总结 (10)
1 解决方案
1.1 方案
我用VHDL语言设计了一个十六路彩灯控制器,六种花型循环变化,有异步清零开关,并且可以选择快慢两种节拍。本控制电路采用VHDL语言设计。运用自顶而下的设计思想,按功能逐层分割实现层次化设计。根据多路彩灯控制器的设计原理,将整个控制器分为两个部分,分别为时序控制模块和显示控制模块。时序控制模块实现的功能是产生1/4和1/8的时钟信号。显示控制模块中实现的六种花型分别为:
"1010101010101010"
"1100110011001100"
"1110001110001110"
"1111000011110000"
"1111100000111110"
"1111110000001111"
整个电路仅有时序控制和显示控制两个模块。
1.2 说明
我们可以从两方面入手。先写时序控制模块,再写显示控制模块。最后用例化语句。把他们结合在一起。实现元器件的组合。
2 模块设计及其功能描述
2.1模块功能描述
时序控制模块的功能是产生输入脉冲的1/4分频脉冲信号和1/8分频脉冲信号,以此控制十六路彩灯的快慢节奏变化。
时序模块有3个输入1个输出。CHOOSE是控制彩灯变换快慢的。CHOOSE=1时,输出1/4/分频脉冲信号。CHOOSE=0时,输出1/8分频脉冲信号。CLK_IN是输入的脉冲信号。RESET是置位信号。高电平有效。CLKOUT是输出信号。
显示控制模块的功能是使电路产生六种花型并且循环显示,以此实现本次课程设计要求实现的多路彩灯控制器的花型循环显示功能。
显示模块有2输入1个输出。CLK是时钟输入信号。RESET是置位信号,高电平有效。Q是输出信号,输出6种彩灯变化。
2.2时序控制模块
1.时序控制模块VHDL文本输入和截图:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fenpin IS
PORT(CHOOSE:IN STD_LOGIC;
CLK:IN STD_LOGIC;
RESET:IN STD_LOGIC;
CLKOUT:OUT STD_LOGIC);
END fenpin;
ARCHITECTURE BEHAV OF fenpin IS
SIGNAL CLLK:STD_LOGIC;
BEGIN
PROCESS(CLK,RESET,CHOOSE)IS
VARIABLE COUNT:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN
IF RESET='1' THEN CLLK<='0';COUNT:="000"; ELSIF RISING_EDGE(CLK)THEN
IF CHOOSE='1' THEN
IF COUNT="011"THEN COUNT:="000";CLLK<=NOT CLLK; ELSE
COUNT:=COUNT+'1';
END IF;
ELSE
IF COUNT="111"THEN COUNT:="000";CLLK<=NOT CLLK; ELSE
COUNT:=COUNT+'1';
END IF;
END IF;
END IF;
END PROCESS;
CLKOUT<=CLLK;
END ARCHITECTURE BEHAV;
2.时序控制模块波形仿真截图:
2.3 显示控制模块
1.时序控制模块VHDL文本输入和截图:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY machine IS
PORT(CLK:IN STD_LOGIC;
RESET:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));
END machine;
ARCHITECTURE BEHAV OF machine IS
TYPE STATE IS(S0,S1,S2,S3,S4,S5,S6);
SIGNAL CURRENT_STATE:STATE;
SIGNAL QQ:STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
PROCESS(RESET,CLK)IS
CONSTANT F1:STD_LOGIC_VECTOR(15 DOWNTO 0):="1010101010101010"; CONSTANT F2:STD_LOGIC_VECTOR(15 DOWNTO 0):="1100110011001100";
CONSTANT F3:STD_LOGIC_VECTOR(15 DOWNTO 0):="1110001110001110";
CONSTANT F4:STD_LOGIC_VECTOR(15 DOWNTO 0):="1111000011110000"; CONSTANT F5:STD_LOGIC_VECTOR(15 DOWNTO 0):="1111100000111110"; CONSTANT F6:STD_LOGIC_VECTOR(15 DOWNTO 0):="1111110000001111"; BEGIN
IF RESET='1' THEN
CURRENT_STATE<=S0;
ELSIF RISING_EDGE(CLK) THEN
CASE CURRENT_STATE IS
WHEN S0=>
QQ<="0000000000000000";
CURRENT_STATE<=S1;
WHEN S1=>QQ<=F1;
CURRENT_STATE<=S2;
WHEN S2=>QQ<=F2;
CURRENT_STATE<=S3;
WHEN S3=>QQ<=F3;
CURRENT_STATE<=S4;
WHEN S4=>QQ<=F4;
CURRENT_STATE<=S5;
WHEN S5=>QQ<=F5;
CURRENT_STATE<=S6;
WHEN S6=>QQ<=F6;
CURRENT_STATE<=S1;
END CASE;
END IF;
END PROCESS;
Q<=QQ;
END ARCHITECTURE BEHAV;
2.显示控制模块波形仿真截图:
3 多路彩灯控制器的实现
3.1整体功能描述
1.在时序控制电路fenpin的设计中,利用计数器计数达到分频值时,对计数器进行清零,同时将输出信号反向,这就非常简洁地实现了对输入基准信号的分频,并且分频信号的占空比为0.5。
2.在显示控制电路machine的设计中,利用状态机非常简洁地实现了六种花型的循环变换,同时利用六个十六位常数的设计,可非常方便地设置和修改六种花型。
3.对于顶层程序的设计,若为模块较多的系统,最好使用文本的程序设计方式。但因本系统模块较少,既可使用文本的程序设计方式,也可以使用原理图的设计方式。
彩灯显示控制电路是整个设计的核心 , 彩灯显示控制模块能进行彩灯的图案控制 ,它负责整个设计的输出效果即各种彩灯图案的样式变化。在电路中以 1 代表灯亮,以 0 代表灯灭,由 0,1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,从而实现多种图案多种频率的花样功能显示。该程序充分地说明了用 VHDL设计电路的简单易修改,即可通过适当地改变程序中输出变量来改变彩灯的花型。时序控制模块对灯闪的速度控制有两种速度:一是1/4分频时钟脉冲 ,二是1/8分频时钟脉冲。并且还可以通过改变CLKIN的时钟输入信号来产生更多的频率。
3.2设计原理
1.整体模块VHDL文本输入和截图:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY AAA IS
PORT(CLK:IN STD_LOGIC;
RESET:IN STD_LOGIC;
C:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));
END AAA;
ARCHITECTURE one OF AAA IS
COMPONENT fenpin IS
PORT(CHOOSE:IN STD_LOGIC;
CLK:STD_LOGIC;
RESET:IN STD_LOGIC;
CLKOUT:OUT STD_LOGIC);
END COMPONENT fenpin;
COMPONENT machine IS
PORT(CLK:IN STD_LOGIC;
RESET:IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));
END COMPONENT machine;
SIGNAL S1:STD_LOGIC;
BEGIN
U1:fenpin PORT MAP(CHOOSE=>C,CLK=>CLK,RESET=>RESET,CLKOUT=>S1); U2:machine PORT MAP(CLK=>S1,RESET=>RESET,Q=>Q);
end one;
2. 整体模块RTL电路图截图:
3.整体控制模块波形仿真截图:
4 总结
此次EDA课程设计时间比较紧张。同学们因为刚入手所以都不怎么会用Quartus II 4.0这个软件。通过我们不停的上网找资料,我终于大致了解了如何将整个系统根据不同的功能化分成模块,再分别进行设计,逐个攻破,最后再将其整合。
用VHDL进行设计,首先应该理解,VHDL语言是一种全方位硬件描述语言,包括系统行为级,寄存器传输级和逻辑门级多个设计层次。应充分利用VHDL“自顶向下”的设计优点以及层次化的设计概念,层次概念对于设计复杂的数字系统是非常有用的,它使得我们可以从简单的单元入手,逐渐构成庞大而复杂的系统。通过使用EDA编程既方便有快捷的实现了程序本次设计的程序已经在硬件系统上得到了验证 ,实验表明 ,此设计方法能够满足多种不同花样彩灯的变化要求 ,并且该方法便于扩展不同变化模式的彩灯花样。但是试验中也出现了一些不熟练的操作问题和一些复杂程序的不能完全理解都需要我在平时多学习,进一步的完善自己。在实习中经常会遇到一些自己可能暂时无法想明白的问题,请教同学或老师是很好的做法,节省时间也会从别人上上学到更多。在设计时和同学相互交流各自的想法也是很重要的,不同的人对问题的看法总有差异,我们可以从交流中获得不同的思路,其他人的设计一定有比你出色的地方,很好的借鉴,并在大家的商讨中选择最优方案最终一定会得到最好的设计方法。电子技术课程设计是配合电子技术基础课程与实验教学的一个非常重要的教学环节。它不但能巩固我们已所学的电子技术的理论知识,而且能提高我们的电子电路的设计水平,还能加强我们综合分析问题和解决问题的能力,
进一步培养我们的实验技能和动手能力,启发我们的创新意识几创新思维。
参考文献
[1] 潘松黄继业.EDA技术与VHDL.清华大学出版社,2009.9
[2] 边计年.用VHDL设计电子线路.清华大学出版社,2000