顺序延时关断三盏灯开关资料.docx
- 文档编号:28251514
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:12
- 大小:156.61KB
顺序延时关断三盏灯开关资料.docx
《顺序延时关断三盏灯开关资料.docx》由会员分享,可在线阅读,更多相关《顺序延时关断三盏灯开关资料.docx(12页珍藏版)》请在冰豆网上搜索。
顺序延时关断三盏灯开关资料
设计题目:
顺序延时关断三盏灯开关
院系:
电子信息与电气工程系
学生姓名:
学号:
200902070006
专业班级:
09电子信息工程(专升本)
2010年10月04日
顺序延时关断三盏灯开关
1.设计背景和设计方案
设计一个开关装置,该开关装置在第一次按下按钮k时,三盏灯x、y和z同时点亮;当再次按下按钮k是,x灯立刻熄灭;y灯5s后熄灭,在y灯熄灭8s后,z灯熄灭。
1.1设计原理框图与状态图
由设计要求,该数字系统的原理框图如图—1所示。
按下按钮k是,输出低电平。
图—1顺数延时关断三盏灯开关的原理框图
根据功能要求,可以画出如图—2所示的状态图。
图—2顺数延时关断三盏灯开关的状态图
1.2设计方法
(1)图形输入法:
使用图形方式输入数字系统,底层和顶层模块都用图形输入;
(2)硬件描述语言输入法:
使用硬件描述语言VHDL或VerilogHDL输入数字系统进行设计的方法,底层和顶层模块都使用硬件描述语言进行描述;
(3)混合输入法:
使用硬件描述语言输入底层模块,使用图形输入顶层模块。
2.方案实施
本设计课题使用混合输入法设计该数字系统。
根据系统要求,该系统分为状态机、5s计数器、8s计数器和译码器4个模块。
2.1状态机设计
(1)用VHDL描述状态机
首先启动软件,然后创建新文件,根据图—2所示的状态图,在文本编辑窗口输入状态机的VHDL语言描述,如下所示。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitystateis
port(td5,td8,clk,k:
instd_logic;
x,y,z,t5,t8:
outstd_logic);
end;
architecturestate_archofstateis
typezt_typeis(z0,z1,z2,z3,z4);
signalzt_now,zt_next:
zt_type;
begin
n1:
process(clk)
begin
ifclk'eventandclk='1'then
zt_now<=zt_next;
endif;
endprocess;
n2:
process(td5,td8,k,zt_now)
begin
casezt_nowis
whenz0=>x<='0';y<='0';z<='0';t5<='0';t8<='0';
ifk='0'thenzt_next<=z1;
elsezt_next<=z0;
endif;
whenz1=>x<='1';y<='1';z<='1';t5<='0';t8<='0';
ifk='1'thenzt_next<=z2;
elsezt_next<=z1;
endif;
whenz2=>x<='1';y<='1';z<='1';t5<='0';t8<='0';
ifk='0'thenzt_next<=z3;
elsezt_next<=z2;
endif;
whenz3=>x<='0';y<='1';z<='1';t5<='1';t8<='0';
iftd5='1'thenzt_next<=z4;
elsezt_next<=z3;
endif;
whenz4=>x<='0';y<='0';z<='1';t5<='0';t8<='1';
iftd8='1'thenzt_next<=z0;
elsezt_next<=z4;
endif;
whenothers=>x<='0';y<='0';z<='0';t5<='0';t8<='0';zt_next<=z0;
endcase;
endprocess;
endstate_arch;
程序运行结束后生成状态机模块,且此状态机的功能完全满足实验的具体要求。
程序运行正确后,运用调用功能生成调用模块,以便在顶层设计时调用。
仿真结果如图—3所示
图—3状态机的仿真结果
可以看出,在输入信号k的作用之下,状态开始从状态0转换到状态3;随后td5的高电平使状态传换到4;td8信号使状态机从状态4返回到状态0。
在状态0,输出x、y和z都是低电平(表示三盏灯灭);在状态1和2,输出x、y和z都是高电平(表示三盏灯亮);在状态3,x灯灭;在状态4,x、y灯灭;最后,返回状态0,三盏灯同时灭。
2.25s减法计数器模块设计
5s减法计数器用于5s定时,设计方法与状态机的设计相同。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjishu5is
port(t5,clk:
instd_logic;
td5:
outstd_logic;
shuchu:
outstd_logic_vector(0to3));
end;
architectureds5_archofjishu5is
signalqq:
std_logic_vector(0to3);
begin
process(clk,t5)
begin
ift5='0'thenqq<="0101";
elsifclk'eventandclk='1'then
ifqq/="0000"thenqq<=qq-1;
elseqq<=qq;
endif;
endif;
endprocess;
td5<='1'whenqq="0000"else'0';
shuchu<=qq(0to3);
endds5_arch;
程序运行结束后生成5s减法计数器模块,且此减法计数器的功能完全满足实验的具体要求。
程序运行正确后,运用调用功能生成调用模块,以便在顶层设计时调用。
仿真结果如图—4所示
图—45s减法计数器的仿真结果
可以看出,在信号clk、td5和t5的作用下,信号shuchu及qq依次从5递减到0,且在信号td5高电平时二者一直为0。
当下一个信号t5的下降沿时进入下一个循环。
2.38s减法计数器模块设计
8s减法计数器用于8s定时,设计方法与5s的设计相同。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjishu8is
port(t8,clk:
instd_logic;
td8:
outstd_logic;
shuchu:
outstd_logic_vector(0to3));
end;
architectureds8_archofjishu8is
signalqq:
std_logic_vector(0to3);
begin
process(clk,t8)
begin
ift8='0'thenqq<="1000";
elsifclk'eventandclk='1'then
ifqq/="0000"thenqq<=qq-1;
elseqq<=qq;
endif;
endif;
endprocess;
td8<='1'whenqq="0000"else'0';
shuchu<=qq(0to3);
endds8_arch;
程序运行结束后生成8s减法计数器模块,且此减法计数器的功能完全满足实验的具体要求。
程序运行正确后,运用调用功能生成调用模块,以便在顶层设计时调用。
仿真结果如图—5所示
图—58s减计数器的仿真结果
可以看出,在信号clk、td8和t8的作用下,信号shuchu及qq依次从8递减到0,且在信号td8高电平时二者一直为0。
当下一个信号t8的下降沿时进入下一个循环。
2.4译码器设计
译码器是将计数器的数值转换成共阳极数码管7段码的模块。
输入是十六进制码,输出是数码管需要的7段码,VHDL语言描述就是一个表格,该表格能够将十六进制码值转换成7段码。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyimaqiis
port(bcd:
instd_logic_vector(0to3);
abc:
outstd_logic_vector(0to6));
end;
architectureyima_archofyimaqiis
signalbb:
std_logic_vector(0to6);
begin
process(bcd)
begin
casebcdis
when"0000"=>bb<="0000001";
when"0001"=>bb<="1001111";
when"0010"=>bb<="0010010";
when"0011"=>bb<="0000110";
when"0100"=>bb<="1001100";
when"0101"=>bb<="0100100";
when"0110"=>bb<="0100000";
when"0111"=>bb<="0001111";
when"1000"=>bb<="0000000";
when"1001"=>bb<="0000100";
when"1010"=>bb<="0001000";
when"1011"=>bb<="1100000";
when"1100"=>bb<="0110001";
when"1101"=>bb<="1000010";
when"1110"=>bb<="0110000";
when"1111"=>bb<="0111000";
whenothers=>bb<="1111111";
endcase;
endprocess;
abc<=bb;
endyima_arch;
程序运行结束后生成译码器模块,且此译码器的功能完全满足实验的具体要求。
程序运行正确后,运用调用功能生成调用模块,以便在顶层设计时调用。
仿真结果如图—6所示
图—6译码器的仿真结果
可以看出,信号bcd从状态0一直到状态F,并依次循环。
而与之对应的信号abc的状态依次为01,4F,12,06,4C,24,20,0F,00,04,08,60,31,42,30,38。
当信号bcd进入下一个0状态时,信号abc也进入下一个循环状态。
2.5顶层模块设计
顶层模块是采用图形输入法实现的。
当VHDL语言描述的模块编译成功后,软件将自动生成这个模块的符号,所以在图形编辑窗口中调用模块,就像调用数字元器件一样。
图—7顶层模块原理图
程序运行结束后生成顺序延时关断三盏灯开关模块,且此开关模块的功能完全满足实验的具体要求——顺序延时关断三盏灯。
图—8顶层电路的仿真结果
可以看出,当信号zt_now从状态0进入状态1时,信号x、y和z从高电平转换到低电平;当信号zt_now从状态1进入状态2时,信号x和y产生冲激信号;当信号zt_now从状态2进入状态3时,信号x从低电平转换到高电平;当信号zt_now从状态3进入状态4时,信号x和z产生冲激信号,信号y从低电平转换到高电平;当信号zt_now从状态4进入下一个状态0时,信号z从低电平转换到高电平,信号x和y保持高电平不变,且信号x、y和z随同信号zt_now一起进入下一个循环状态。
当信号zt_now进入状态3时,信号clk下一个上升沿作用下,5s减法计数器的shuchu信号从状态5装换到状态4,并在信号z产生冲激信号时进入下一个循环;与5s减法计数器的shuchu信号对应,信号shuma5[0..6]从状态24装换到状态4c,且依次经过状态06,12,4F,01,并和5s减法计数器的shuchu信号一起进入下一个循环状态。
信号z产生冲激信号的下一个clk信号上升沿时,信号shuma8[0..6]从状态00转换的状态0F,并以此经过状态20,24,4C,06,12,4F,01,且随同信号zt_now一起进入下一个循环状态。
当信号shuma8[0..6]从状态00转换的状态0F时,8s减法计数器的shuchu信号从状态8装换到状态7,并和信号shuma8[0..6]一起进入下一个循环状态。
3.结果和结论
运行试验程序,三盏灯同时点亮。
由于实验设备中的发光二极管是低电平亮,所以在输出量x、y和z前串联了反相器。
当信号zt_now从状态2转换到状态3时,x灯灭;当信号zt_now从状态3转换到状态4时,y灯灭;当信号zt_now从状态4转换到下一个状态0时,z灯灭——三盏灯依次顺序延时关断。
经过本实验的实际操作,对时序信号的作用有了进一步的认识——顺序延时实在顺序的状态下进行延时的。
4.参考文献
[1]夏路易.基于EDA的电子技术课程设计.电子工业出版社.
[2]潘松,黄继业.EDA技术实用教程.科学出版社.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 顺序 延时 关断三盏灯 开关 资料