EDA课程设计交通灯的设计.docx
- 文档编号:6439183
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:18
- 大小:460.26KB
EDA课程设计交通灯的设计.docx
《EDA课程设计交通灯的设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计交通灯的设计.docx(18页珍藏版)》请在冰豆网上搜索。
EDA课程设计交通灯的设计
EDA课程设计
题目:
交通灯控制器VHDL设计
专业:
通信工程
班级:
通信082
姓名:
谢振峰
学号:
0810920213
一、设计题目:
交通灯控制器VHDL设计
二、设计目标:
1、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
2、红、绿、黄发光二极管作信号灯,。
3、主干道处于常允许通行的状态,支干道有车来时才允许通行。
主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
4、主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,支干道每次放行25秒,设立45秒、25秒计时、显示电路。
5、在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。
三、设计原理
1.原理图框图如下:
图1、原理图框图
2.原理图说明
交通灯状态控制模块内部设置有一个状态机和一个秒计数器。
状态用来控制主干道路、支干道路交通灯状态的切换;定时器用来控制5秒、25秒、45秒定时器的启动。
定时器模块同时集成有主干道路、支干道路的时间定时。
时间选择显示模块根据交通灯状态的转变而让主、支道路显示不同的定时时间。
四、设计内容
1)交通灯状态控制模块
图2
该模块由时钟信号输入端口clk、复位端口rst及主干道路状态灯输出端口south_red(主红灯)、south_yellow(主黄灯)、south_green(主绿灯),支干道路状态灯输出端口east_red(支红灯)、east_yellow(支黄灯)、east_green(支绿灯),5秒、25秒、45秒定时使能输出端口EN5OUT、EN25OUT、EN45OUT组成。
里面设置有一个状态机和一个秒计数器,用来控制主、支道路交通灯状态的转换,状态转换图如下图所示:
图3
状态机说明
源状态
目的状态
转换条件
输出
A
A
计数时间小于45s
主绿灯亮,支红灯亮,计数器清零,EN45OUT=‘1’
A
B
计数时间等于45s
主黄灯亮,支红灯亮,计数器清零,EN5OUT=’1’
B
B
计数时间小于5秒
主黄灯亮,支红灯亮,计数器清零,EN5OUT=’1’
B
C
计数时间等于5秒
主红灯亮,支绿灯亮,计数器清零,
EN25OUT=’1’
C
C
计数时间小于25s
主红灯亮,支绿灯亮,计数器清零,
EN25OUT=’1’
C
D
计数时间等于25s
主红灯亮,支黄灯亮,计数器清零,
EN5OUT=’1’
D
D
计数时间小于25s
主红灯亮,支黄灯亮,计数器清零,
EN5OUT=’1’
A/B/C/D
A
Reset=’1’
主绿灯亮,支红灯亮,计数器清零,EN45OUT=‘1’
模块仿真图如图所示:
图4
2)定时模块
定时模块有5s、25s、45s三个定时模块。
2.1)5s定时模块
图5
模块由时钟输入信号clk、复位信号rst、使能输入端EN05及定时数据输出端DOUT5组成。
5秒定时模块仿真图如图所示:
图6
2.2)25s定时模块
图7
模块由时钟输入信号clk、复位信号rst、使能输入端EN25及主干路定时数据输出端DOUT25M、支路定时数据输出端DOUT25B组成。
其中主干路从30秒倒计时到6秒,支干路从25秒计时到1秒。
25秒定时模块仿真图如图所示:
图8
2.3)45秒定时模块
图9
模块由时钟输入信号clk、复位信号rst、使能输入端EN45及主干路定时数据输出端DOUT45M、支路定时数据输出端DOUT45B组成。
其中主干路从45秒倒计时到1秒,支干路从50秒计时到6秒。
45秒定时模块仿真图如图所示:
图10
3)时间选择显示模块
图11
该模块由时间选择显示使能输入信号EN5、EN25、EN45,时钟数据输入端口AIN及主、支道路时间输出端口DOUT组成。
通过交通灯状态控制器输入的计时时间使能信号,选择输出主、支道路的时间数据,DOUT端口接数码管译码器即可完成时间显示。
五、仿真结果
1.原理图设计
图12
2.仿真结果
(1):
正常显示
图13
仿真结果
(2):
系统复位
图14
六、总结
本设计完整的实现了交通灯控制器的VHDL设计,能实现题目所要求的交通灯状态控制及系统复位功能。
通过本次课程设计让我加深了对硬件描述语言VHDL的理解,提高了我对电子设计的兴趣。
在设计过程中遇到了很多问题,通过查阅资料,提高了我发现问题、解决问题的能力。
七、附录
1.交通灯状态控制器源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYJTDKZIS
PORT(CLK,RST:
INSTD_LOGIC;
south_red,south_yellow,south_green:
OUTSTD_LOGIC;
east_red,east_yellow,east_green:
outstd_logic;
EN45OUT,EN25OUT,EN5OUT:
OUTSTD_LOGIC);
ENDENTITYJTDKZ;
ARCHITECTUREARTOFJTDKZIS
TYPESTATE_TYPEIS(A,B,C,D);
SIGNALSTATE:
STATE_TYPE;
BEGIN
CNT:
PROCESS(CLK,RST)IS
VARIABLES:
INTEGERRANGE0TO45;
VARIABLECLR,EN:
BIT;
BEGIN
if(CLK'EVENTANDCLK='1')THEN
if(RST='1')thenSTATE<=A;S:
=0;
elsifCLR='0'THENS:
=0;
elsifEN='0'THENS:
=S;
ELSE
S:
=S+1;
ENDIF;
CASESTATEIS
WHENA=>EN45OUT<='1';
south_red<='0';
south_yellow<='0';
south_green<='1';--greenon45s
east_red<='1';--redon45s
east_yellow<='0';
east_green<='0';
IFS=45THEN
EN45OUT<='0';
STATE<=B;
CLR:
='0';
EN:
='0';
ELSE
STATE<=A;
CLR:
='1';
EN:
='1';
ENDIF;
WHENB=>EN5OUT<='1';
south_red<='0';
south_yellow<='1';--yellowon5s
south_green<='0';
east_red<='1';--redon
east_yellow<='0';
east_green<='0';
IFS=5THEN
EN5OUT<='0';
STATE<=C;
CLR:
='0';
EN:
='0';
ELSE
STATE<=B;
CLR:
='1';
EN:
='1';
ENDIF;
WHENC=>EN25OUT<='1';
south_red<='1';--redon
south_yellow<='0';
south_green<='0';
east_red<='0';
east_yellow<='0';
east_green<='1';--greenon25s
IFS=25THEN
EN25OUT<='0';
STATE<=D;
CLR:
='0';
EN:
='0';
ELSE
STATE<=C;
CLR:
='1';
EN:
='1';
ENDIF;
WHEND=>EN5OUT<='1';
south_red<='1';--redon
south_yellow<='0';
south_green<='0';
east_red<='0';
east_yellow<='1';--yellowon5s
east_green<='0';
IFS=5THEN
EN5OUT<='0';
STATE<=A;
CLR:
='0';
EN:
='0';
ELSE
STATE<=D;
CLR:
='1';
EN:
='1';
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESSCNT;
ENDARCHITECTUREART;
2.时间选择显示模块源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYXSKZIS
PORT(EN45,EN25,EN05M,EN05B:
INSTD_LOGIC;
AIN45M,AIN45B:
INSTD_LOGIC_VECTOR(7DOWNTO0);
AIN25M,AIN25B,AIN05:
INSTD_LOGIC_VECTOR(7DOWNTO0);
DOUTM,DOUTB:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYXSKZ;
ARCHITECTUREARTOFXSKZIS
BEGIN
PROCESS(EN45,EN25,EN05M,EN05B)IS
BEGIN
IFEN45='1'THEN
DOUTM<=AIN45M(7DOWNTO0);DOUTB<=AIN45B(7DOWNTO0);
ELSIFEN05M='1'THEN
DOUTM<=AIN05(7DOWNTO0);DOUTB<=AIN05(7DOWNTO0);
ELSIFEN25='1'THEN
DOUTM<=AIN25M(7DOWNTO0);DOUTB<=AIN25B(7DOWNTO0);
ELSIFEN05B='1'THEN
DOUTM<=AIN05(7DOWNTO0);DOUTB<=AIN05(7DOWNTO0);
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
3.5秒定时模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT05SIS
PORT(
RST,CLK,EN05M,EN05B:
INSTD_LOGIC;
DOUT5:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYCNT05S;
ARCHITECTUREARTOFCNT05SIS
SIGNALCNT3B:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
PROCESS(CLK,EN05M,EN05B,RST)IS
BEGIN
ifRST='1'thenCNT3B<="000";
elsif(CLK'EVENTANDCLK='1')THEN
IFEN05M='1'OREN05B='1'THEN
ifCNT3B<4THEN
CNT3B<=CNT3B+1;
ELSE
CNT3B<="000";
ENDIF;
ENDif;
ENDIF;
ENDPROCESS;
PROCESS(CNT3B)IS
BEGIN
CASECNT3BIS
WHEN"000"=>DOUT5<="00000101";
WHEN"001"=>DOUT5<="00000100";
WHEN"010"=>DOUT5<="00000011";
WHEN"011"=>DOUT5<="00000010";
WHEN"100"=>DOUT5<="00000001";
WHENOTHERS=>DOUT5<="00000000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;
4.25秒定时模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT25SIS
PORT(
RST,CLK,EN25:
INSTD_LOGIC;
DOUT25B,DOUT25M:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDENTITYCNT25S;
ARCHITECTUREARTOFCNT25SIS
SIGNALCNT5B:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
PROCESS(CLK,EN25,RST)IS
BEGIN
ifRST='1'thenCNT5B<=(others=>'0');
elsif(CLK'EVENTANDCLK='1')
THEN
IFEN25='1'
THEN
ifCNT5B<24thenCNT5B<=CNT5B+1;
elseCNT5B<=(others=>'0');
ENDIF;
endif;
ENDIF;
ENDPROCESS;
PROCESS(CNT5B)IS
BEGIN
CASECNT5BIS
WHEN"00000"=>DOUT25B<="00100101";DOUT25M<="00110000";
WHEN"00001"=>DOUT25B<="00100100";DOUT25M<="00101001";
WHEN"00010"=>DOUT25B<="00100011";DOUT25M<="00101000";
WHEN"00011"=>DOUT25B<="00100010";DOUT25M<="00100111";
WHEN"00100"=>DOUT25B<="00100001";DOUT25M<="00100110";
WHEN"00101"=>DOUT25B<="00100000";DOUT25M<="00100101";
WHEN"00110"=>DOUT25B<="00011001";DOUT25M<="00100100";
WHEN"00111"=>DOUT25B<="00011000";DOUT25M<="00100011";
WHEN"01000"=>DOUT25B<="00010111";DOUT25M<="00100010";
WHEN"01001"=>DOUT25B<="00010110";DOUT25M<="00100001";
WHEN"01010"=>DOUT25B<="00010101";DOUT25M<="00100000";
WHEN"01011"=>DOUT25B<="00010100";DOUT25M<="00011001";
WHEN"01100"=>DOUT25B<="00010011";DOUT25M<="00011000";
WHEN"01101"=>DOUT25B<="00010010";DOUT25M<="00010111";
WHEN"01110"=>DOUT25B<="00010001";DOUT25M<="00010110";
WHEN"01111"=>DOUT25B<="00010000";DOUT25M<="00010101";
WHEN"10000"=>DOUT25B<="00001001";DOUT25M<="00010100";
WHEN"10001"=>DOUT25B<="00001000";DOUT25M<="00010011";
WHEN"10010"=>DOUT25B<="00000111";DOUT25M<="00010010";
WHEN"10011"=>DOUT25B<="00000110";DOUT25M<="00010001";
WHEN"10100"=>DOUT25B<="00000101";DOUT25M<="00010000";
WHEN"10101"=>DOUT25B<="00000100";DOUT25M<="00001001";
WHEN"10110"=>DOUT25B<="00000011";DOUT25M<="00001000";
WHEN"10111"=>DOUT25B<="00000010";DOUT25M<="00000111";
WHEN"11000"=>DOUT25B<="00000001";DOUT25M<="00000110";
WHENOTHERS=>DOUT25B<="00000000";DOUT25M<="00000000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;
5.45秒定时模块
--CNT45S.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT45SIS
PORT(
RST,CLK,EN45:
INSTD_LOGIC;
DOUT45M,DOUT45B:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));--,DOUT45B
ENDENTITYCNT45S;
ARCHITECTUREARTOFCNT45SIS
SIGNALCNT6B:
STD_LOGIC_VECTOR(5DOWNTO0);
BEGIN
PROCESS(RST,CLK,EN45)IS
BEGIN
ifRST='1'thenCNT6B<=(others=>'0');
elsif(CLK'EVENTANDCLK='1')
THEN
IFEN45='1'
THEN
ifCNT6B<44thenCNT6B<=CNT6B+1;
elseCNT6B<=(others=>'0');
endif;
endif;
ENDIF;
ENDPROCESS;
PROCESS(CNT6B)IS
BEGIN
CASECNT6BIS
WHEN"000000"=>DOUT45M<="01000101";DOUT45B<="01010000";
WHEN"000001"=>DOUT45M<="01000100";DOUT45B<="01001001";
WHEN"000010"=>DOUT45M<="01000011";DOUT45B<="01001000";
WHEN"000011"=>DOUT45M<="01000010";DOUT45B<="01000111";
WHEN"000100"=>DOUT45M<="01000001";DOUT45B<="01000110";
WHEN"000101"=>DOUT45M<="01000000";DOUT45B<="01000101";
WHEN"000110"=>DOUT45M<="00111001";DOUT45B<="01000100";
WHEN"000111"=>DOUT45M<="00111000";DOUT45B<="01000011";
WHEN"001000"=>DOUT45M<="00110111";DOUT45B<="01000010";
WHEN"001001"=>DOUT45M<="00110110";DOUT45B<="01000001";
WHEN"001010"=>DOUT45M<="00110101";DOUT45B<="01000000";
WHEN"001011"=>DOUT45M<="00110100";DOUT45B<="01101001";
WHEN"001100"=>DOUT45M<="00110011";DOUT45B<="00111000";
WHEN"001101"=>DOUT45M<="00110010";DOUT45B<="00110111";
WHEN"001110"=>DOUT45M<="00110001";DOUT45B<="00110110";
WHEN"001111"=>DOUT45M<="00110000";DOUT45B<="00110101";
WHEN"010000"=>DOUT45M<="00101001";DOUT45B<="00110100";
WHEN"010001"=>DOUT45M<="00101000";DOUT45B<="00110011";
WHEN"010010"=>DOUT45M<="00100111";DOUT45B<="00110010";
WHEN"010011"=>DOUT45M<="00100110";DOUT45B<="00110001";
WHEN"010100"=>DOUT45M<="00100101";DOUT45B<="00110000";
WHEN"010101"=>DOUT45M<="00100100";DOUT45B<="00101001";
WHEN"010110"=>DOUT45M<="00100011";DOUT45B<="00101000";
WHEN"010111"=>DOUT45M<="00100010";DOUT45B<="00100111";
WHEN"011000"=>DOUT45M<="00100001";DOUT45B<="00100110";
WHEN"011001"=>DOUT45M<="00100000";DOUT45B<="00100101";
WHEN"011010"=>DOUT45M<="00011001";DOUT45B<="00100100";
WHEN"011011"=>DOUT45M<="00011000";DOUT45B<="00100011";
WHEN"011100"=>DOUT45M<="00010111";DOUT45B<="00100010";
WHEN"011101"=>DOUT45M<="00010110";DOUT45B<="00100001";
WHEN"011110"=>DOUT45M<="00010101";DOUT45B<="00100000";
WHEN"011111"=>DOUT45M<="00010100";DOUT45B<="00011001";
WHEN"100000"=>DOUT45M<="00010011";DOUT45B<="00
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 交通灯 设计