彩灯控制器.docx
《彩灯控制器.docx》由会员分享,可在线阅读,更多相关《彩灯控制器.docx(19页珍藏版)》请在冰豆网上搜索。
彩灯控制器
北华航天工业学院
《EDA技术与实验》
综合课程设计报告
报告题目:
彩灯控制器
作者系部:
电子工程系
作者专业:
完成时间:
前言
随着科技发展,在现代生活中,彩灯作为一种景观应用越来越广泛。
EDA技术的应用引起电子产品即系统开发的革命性变革,先介绍以VHDL为基础的16路彩灯控制系统。
本文介绍了基于EDA的多路彩灯控制器的设计与分析。
要求该控制器可靠性高、调节灵活、多功能、多花案、使用灵活方便,并且彩灯图案能定时切换。
在Quartus环境下采用VHDL语言实现,论述了基于VHDL语言在FPGA芯片的数字设计思想与实现过程。
电子设计自动化技术EDA的发展给电子系统的设计带来了革命性变化,EDA软件设计工具,硬件描述语言,可编程逻辑器件(PLD)使得EDA技术的应用走向普及。
VHDL语言是EDA的关键技术之一,它采用自顶向下的设计方法,完成系统的整体设计。
目录
一、设计要求……………………………………………………4
二、十六路彩灯控制系统的实现………………………………4
1功能描述
2设计原理
3、模块设计及功能……………………………………………6
1分频器
2状态机
3三选一数据选择器
四程序下载与实现………………………………………………13
1下载
2硬件测试
五、心得体会………………………………………………………13
课程设计任务书
任务:
同组两个人共同完成《彩灯控制器》的设计要求
一设计要求
1系统设计要求
(1)要有2种花型
(2)两种花型可以自动变换,循环往复
(3)具有清零开关
用给定IC设计、安装与调试彩灯控制器,具体要求如下:
(1)控制器有四组输出,每组至少能驱动四只LED。
(2)设计用十六只LED组成的彩灯图案。
图案的状态变换至少有三种,并且能定时自动切换。
(3)彩灯图案状态变换的速度至少有快、慢两种。
(4)安装并调试彩灯控制器。
二八路彩灯控制系统的实现
1功能描述
在电路中以1代表灯亮,0代表灯灭。
由0,1按不同的规律组合代表不同的彩灯图案,同时使其选择不同的频率,从而实现多种图案快慢的花样功能显示。
此16路彩灯控制系统设定三种花样变化,三种花样可以进行自动切换,每种花样都有快慢两种显示方法。
2设计原理
用VHDL进行设计16路彩灯控制器,应充分利用VHDL“自顶向下”的设计优点以及层次化的设计对于设计复杂的数字系统是非常有用的,它使得我们可以从简单的单元入手,逐渐构成复杂而庞大的系统。
首先应进行系统模块的划分,规定每一模块的功能以及各模块之间的接口。
最终设计方案为:
以一个分频器,三个状态机,一个三选一数字选择器构成。
整个16路彩灯控制系统设计的模块图如下图所示。
顶层文件
libraryieee;
useieee.std_logic_1164.all;
entityzongis
port(
clk:
instd_logic;
clr:
instd_logic;
opt:
instd_logic;
sel:
outstd_logic_vector(1downto0);
y:
outstd_logic_vector(15downto0)
);
endzong;
architectureoneofzongis
componentsxkz
port(clk:
instd_logic;
clr:
instd_logic;
opt:
instd_logic;
clkout,clkout1:
outstd_logic);
endcomponent;
componentflo1
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0)
);
endcomponent;
componentflo2
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0)
);
endcomponent;
componentflo3
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0)
);
endcomponent;
componentseltime
port(
clk:
instd_logic;
clr:
instd_logic;
d0:
instd_logic_vector(15downto0);
d1:
instd_logic_vector(15downto0);
d2:
instd_logic_vector(15downto0);
sel:
outstd_logic_vector(1downto0);
y:
outstd_logic_vector(15downto0));
endcomponent;
signalt1,t2,t3:
std_logic;
signalt4,t5,t6:
std_logic_vector(15downto0);
begin
y0:
sxkzportmap(clk=>clk,
clr=>clr,
opt=>opt,
clkout=>t1,
clkout1=>t2);
y1:
flo1portmap(clk=>t1,
clr=>t3,
led=>t4);
y2:
flo2portmap(clk=>t1,
clr=>t3,
led=>t5);
y3:
flo3portmap(clk=>t1,
clr=>t3,
led=>t6);
y4:
seltimeportmap(clk=>t2,
clr=>t3,
d0=>t6,
d1=>t5,
d2=>t4);
endone;
三模块设计及功能
本次设计分为三个模块,即一个分频器,三个状态机,一个三选一数字选择器。
个自模块功能即程序如下:
1分频器
本次设计中,彩灯图案状态变换的速度有快、慢两种,而只有一个输入时钟信号,所以对输入时钟信号要进行2分频,4分频,对应彩灯图案变换的快慢。
而彩灯图案之间要能定时切换,就还要对输入信号进行65分频,使彩灯图案实现定时切换。
SXKZ模块实现此功能,程序如下:
libraryieee;------IEEE库使用说明
useieee.std_logic_1164.all;------定义元件库
useieee.std_logic_unsigned.all;------定义元件库
entitysxkzis------定义一个名sxkz为的实体
port(clk:
instd_logic;------描述输入输出
clr:
instd_logic;
opt:
instd_logic;
clkout,clkout1:
outstd_logic);
endsxkz;------结束实体
architectureartofsxkzis------结构体说明,定义了一个名为art的结构体
signalcllk:
std_logic;------定义信号
signalcllk1:
std_logic;
begin
ab:
process(clk,clr,opt)
variabletemp:
std_logic_vector(3downto0);--------------定义变量
begin
ifclr='1'then--------清零-信号
cllk<='0';temp:
="0000";
elsifclk'eventandclk='1'then----------上升沿有效
ifopt='1'then
iftemp="0001"then
temp:
="0000";
cllk<=notcllk;
else
temp:
=temp+'1';
endif;---------2分频
else
iftemp="0011"then
temp:
="0000";
cllk<=notcllk;
else
temp:
=temp+'1';
endif;---------4分频
endif;
endif;
endprocessab;
ac:
process(clk,clr)
variabletemp:
std_logic_vector(6downto0);
begin
ifclr='1'then
cllk1<='0';temp:
="0000000";
elsifclk'eventandclk='0'then
iftemp="1000000"then
temp:
="0000000";
cllk1<=notcllk1;
else
temp:
=temp+'1';
endif;---------65分频
endif;
endprocessac;
clkout<=cllk;
clkout1<=cllk1;
endart;
2状态机
状态机设计的就是彩灯的图案,三个状态机分别对应三个不同的图案,三种图案分别为奇数位灯上下两排交替亮,偶数位灯上下两排交替亮,上排下排两排交替亮,flo1,flo2,flo3模块实现此功能。
下面只列写其中一种花型。
三种花型内容大同小异而已。
程序段如下:
(1)第一种花型
libraryieee;
useieee.std_logic_1164.all;
entityflo1is
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0)
);
endflo1;
architectureGYXofflo1is
typestatesis
(s0,s1);
signalstate:
states;
begin
process(clk,clr)
begin
ifclr='1'then
state<=s0;
led<="0000000001010101";
elsifrising_edge(clk)then
casestateis
whens0=>
state<=s1;
led<="0101010100000000";
whens1=>
state<=s0;
led<="0000000001010101";
endcase;
endif;
endprocess;
endGYX;
(2)第二种花型
libraryieee;------IEEE库使用说明
useieee.std_logic_1164.all;------定义元件库
entityflo2is------定义一个名为flo2的实体
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0)
);
endflo2;
architectureGYXofflo2istypestatesis
(s0,s1);
signalstate:
states;
begin
process(clk,clr)
begin
ifclr='1'then
state<=s0;
led<="0000000010101010";
elsifrising_edge(clk)then
casestateis
whens0=>
state<=s1;
led<="1010101000000000";
whens1=>
state<=s0;
led<="0000000010101010";
endcase;
endif;
endprocess;
end
GYX;
(3)第三种花型
libraryieee;
useieee.std_logic_1164.all;
entityflo3is
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(15downto0)
);
endflo3;
architectureGYXofflo3is
typestatesis
(s0,s1);
signalstate:
states;
begin
process(clk,clr)
begin
ifclr='1'then
state<=s0;
led<="0000000011111111";
elsifclk'eventandclk='1'then
casestateis
whens0=>
state<=s1;
led<="1111111100000000";
whens1=>
state<=s0;
led<="0000000011111111";
endcase;
endif;
endprocess;
endGYX;
3三选一数字选择器
三选一数字选择器由定时信号控制,从三个状态机里面选出要显示的图案,由SEITIME1模块实现。
程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseltimeis
port(
clk:
instd_logic;
clr:
instd_logic;
d0:
instd_logic_vector(15downto0);
d1:
instd_logic_vector(15downto0);
d2:
instd_logic_vector(15downto0);
sel:
outstd_logic_vector(1downto0);
y:
outstd_logic_vector(15downto0));
endseltime;
architecturethreeofseltimeis
signalm:
std_logic_vector(1downto0);
signaln:
std_logic_vector(15downto0);
begin
n<="0000000000000000"whenclr='1'
elsed0whenm="00"
elsed1whenm="01"
elsed2;
ab:
process(clr,clk,d0,d1,d2)
begin
ifclk'eventandclk='1'then
ifm="10"thenm<="00";
elsem<=m+1;
endif;
endif;
endprocessab;
sel<=m;
y<=n;
endthree;
四程序下载与实现
1下载
以上的仿真正确无误,则可以将设计编程下载到选定的目标器件中做进一步的硬件测试,以便最终了解设计的正确性。
2硬件测试
经检查没有错误后下载成功在实验箱中连线成功后室验箱中的彩灯按照程序依次亮灭。
五心得体会
1通过这次课程设计我有以下几点收获:
2同组合作分工很重要,每个人都有不同的重点,最后组合在一起
3先分析课设要求,划分出各个模块进行编程,仿真等
4仿真过程,要理解透彻,与元件图或程序对应。
5下载前硬件插线要连接好,别虚接,漏接
6清楚明白下载过程等等
评语
课程设计成绩:
指导教师:
日期:
年月日