多路彩灯控制器设计EDA课设.docx
- 文档编号:1276226
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:14
- 大小:139.15KB
多路彩灯控制器设计EDA课设.docx
《多路彩灯控制器设计EDA课设.docx》由会员分享,可在线阅读,更多相关《多路彩灯控制器设计EDA课设.docx(14页珍藏版)》请在冰点文库上搜索。
多路彩灯控制器设计EDA课设
目录
1、设计要求概述………………………………………………………1
2、功能模块整体结构设计……………………………………………1
3、各模块详细设计……………………………………………………1
4、逻辑仿真与时序仿真的实现………………………………………8
5、设计结论……………………………………………………………10
6、参考文献……………………………………………………………12
一、设计要求概述
利用EDA设计方法设计彩灯控制器,设计平台采用MAXPLUS
或QUARTUS,设计语言采用VHDL,具体功能如下
1.要有多种花型变化(至少设计4种)
2.多种花型可以自动变换,循环往复。
3.彩灯变换的快慢节拍可以选择。
4.具有清零开关。
二、功能模块整体结构设计
整个系统有三个输入信号,分别为控制快慢的信号OPT,复位清零信号CLR,输出信号是16路彩灯输出状态。
主要模块组成:
时序控制电路模块和显示电路模块,时序控制电路是根据输入信号的设置得到相应的输出信号,并将此信号作为显示电路的时钟信号;显示电路输入时钟信号的周期,有规律的输出设定的十六种彩灯变化类型。
三、各模块详细设计
时序控制模块:
CLK为输入时钟信号,电路在时钟上升沿变化;CLR为复位清零信号,高电平有效,一旦有效时,电路无条件的回到初始状态;OPT为频率快慢选择信号,低电平节奏快,高电平节奏慢;CLKOUT为输出信号,CLR有效时输出为零,否则,随OPT信号的变化而改变。
我们假设时序控制电路所产生的控制时钟信号的快慢两种节奏分别为输入时钟信号频率的1/4和1/8,因而输出时钟控制信号可以通过对输入时钟的计数来获得。
当opt为低电平时,输每经过两个时钟周期进行翻转,实现四分频的快节奏;当opt为高电平时,输出每经过四个时钟周期进行翻转,实现把八分频的慢节奏。
输入信号clk和clr的定义与时序控制电路一样,输入信号led[15-0]能够循环输出16路彩灯16种不同状态的花型。
对状态的所对应的彩灯输出花型定义如下:
S1:
0001000100010001
S2:
0010001000100010
S3:
0011001100110011
S4:
0100010001000100
:
010*********
S6:
0110011001100110
S7:
0111011101110111
S8:
1000100010001000
S9:
1001100110011001
S10:
1010101010101010
S11:
1011101110111011
S12:
1100110011001100
S13:
110111*********1
S14:
1110111011101110
S15:
111111*********1
多路彩灯在多种花型之间的转换可以通过状态机实现,当复位信号clr有效时,彩灯恢复初始状态s0,否则,每个时钟周期,状态都将向下一个状态发生改变,并对应输出的花型,这里的时钟周期即时时序控制电路模块产生的输出信号,它根据opt信号的不同取值得到两种快慢不同的时钟频率。
(1)时序控制电路模块程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entitymetronomeis--定义实体
port(
clk:
instd_logic;--时钟信号
clr:
instd_logic;--复位信号
opt:
instd_logic;--快慢控制信号
clkout:
outstd_logic--输出时钟信号
);
endmetronome;
architectureoneofmetronomeis
signalclk_tmp:
std_logic;
signalcounter:
std_logic_vector(1downto0);--定义计数器
begin
process(clk,clr,opt)
begin
ifclr='1'then--清零
clk_tmp<='0';
counter<="00";
elsifclk'eventandclk='1'then
ifopt='0'then--四分频,快节奏
ifcounter="01"then
counter<="00";
clk_tmp<=notclk_tmp;
else
counter<=counter+'1';
endif;
else--八分频,慢节奏
ifcounter="11"then
counter<="00";
clk_tmp<=notclk_tmp;
else
counter<=counter+'1';
endif;
endif;
endif;
endprocess;
clkout<=clk_tmp;--输出分频后的信号
endarchitectureone;
metronome:
u1
(2)显示模块电路程序如下:
libraryieee;
useieee.std_logic_1164.all;
entityoutputis
port(
clk:
instd_logic;--输入时钟信号
clr:
instd_logic;--复位信号
led:
outstd_logic_vector(15downto0));--彩灯输出
endoutput;
architecturertlofoutputis
typestatesis--状态机状态列举
(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);
signalstate:
states;
begin
process(clk,clr)
begin
ifclr='1'then
state<=s0;
led<="0000000000000000";
elsifclk'eventandclk='1'then
casestateis
whens0=>
state<=s1;
whens1=>
state<=s2;
led<="0001000100010001";
whens2=>
state<=s3;
led<="0010001000100010";
whens3=>
state<=s4;
led<="0011001100110011";
whens4=>
state<=s5;
led<="0100010001000100";
whens5=>
state<=s6;
led<="0101010101010101";
whens6=>
state<=s7;
led<="0110011001100110";
whens7=>
state<=s8;
led<="0111011101110111";
whens8=>
state<=s9;
led<="1000100010001000";
whens9=>
state<=s10;
led<="1001100110011001";
whens10=>
state<=s11;
led<="1010101010101010";
whens11=>
state<=s12;
led<="1011101110111011";
whens12=>
state<=s13;
led<="1100110011001100";
whens13=>
state<=s14;
led<="1101110111011101";
whens14=>
state<=s15;
led<="1110111011101110";
whens15=>
state<=s0;
led<="1111111111111111";
whenothers=>
null;
endcase;
endif;
endprocess;
endrtl;
output:
u2
(3)顶层模块设计程序:
libraryieee;
useieee.std_logic_1164.all;
entitycolorledis
port(
clk:
instd_logic;
clr:
instd_logic;
opt:
instd_logic;
led:
outstd_logic_vector(15downto0));--八路彩灯输出
endcolorled;
architectureoneofcolorledis
componentmetronomeis--定义元件:
时序控制电路
port(
clk:
instd_logic;
clr:
instd_logic;
opt:
instd_logic;
clkout:
outstd_logic);
endcomponentmetronome;
componentoutputis--定义元件:
显示电路
port(
clk:
instd_logic;
clr:
instd_logic;
led:
outstd_logic_vector(7downto0));
endcomponentoutput;
signalclk_tmp:
std_logic;
begin
u1:
metronomeportmap(clk=>clk,clr=>clr,opt=>opt,clkout=>clk_tmp);
--例化时序控制模块
u2:
outputportmap(clk=>clk_tmp,clr=>clr,led=>led);--例化显示电路模块
endarchitectureone;
(4)整体电路图如下:
metronome:
u1output:
u2
四、逻辑仿真与时序仿真的实现
(1)时序控制模块仿真波形:
从图中可以看出,当复位信号为高电平时,电路时钟输出清零,当快慢信号OPT为低电平时,时序控制电路四分频起作用,当快慢信号OPT为高电平时,时序控制电路八分频起作用,仿真结果符合电路要求。
(2)显示模块仿真波形:
当复位信号有效时彩灯输出为零,否则,显示电路在十六种不同状态间转换。
(3)多路彩灯控制仿真波形:
从图中可以看出当OPT为高电平时彩灯状态转换慢,为低电平时转换要快,当复位信号有效时,所用输出都清零。
综上所述,本次设计实现了设计要求中的要求。
五、设计结论
本次课程设计我共花了一周的时间,从上网搜集资料和查阅书籍,再到编写程序代码,波形仿真,最后形成文档。
多路彩灯控制器的设计可以通过很多种方法实现,既可以通过数字电路的芯片如555定时器,74LS194,74LS161等,也可以通过单片机,在这里主要采用硬件描述语言VHDL进行设计,关键在于计数器和分频器的设计。
通过这次课程设计对EDA技术有了更进一步的熟悉,VHDL语言和C语言等其他语言还是有很大的区别。
VHDL是EDA技术的重要组成部分,其具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。
其主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。
在实际操作中发现设计和课本上的知识有很大联系,但又高于课本,一个简单的原理要把它应用以及和其他功能综合起来就有些困难。
通过设计也巩固了我们的书本知识以及通过借阅书籍和上网查找资料,也丰富了自己对EDA的了解。
这次课程设计还使我了解到未来的逻辑电路设计将主要采用硬件语言(VHDL、Verilog)描述,并使用可编程逻辑器件来实现,随着可编程逻辑器件功能越来越强大,成本越来越低、以其接近专用集成芯片的速度和较短的开发周期,将在未来后不久成为专用集成芯片和51单片机的替代品。
六、参考文献
1.潘松黄继业《EDA技术使用教程》科学出版社2011年
2.吕晓兰《基于VHDL实现的十六路彩灯控制系统》2007年
3.范秋华赵艳秋何香玲《基于VHDL的彩灯控制》2004年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 彩灯 控制器 设计 EDA
![提示](https://static.bingdoc.com/images/bang_tan.gif)