数字电路课程设计 交通灯.docx
- 文档编号:3202867
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:16
- 大小:90.08KB
数字电路课程设计 交通灯.docx
《数字电路课程设计 交通灯.docx》由会员分享,可在线阅读,更多相关《数字电路课程设计 交通灯.docx(16页珍藏版)》请在冰豆网上搜索。
数字电路课程设计交通灯
数字电路课程设计
课题:
基于FPGA和VHDL语言的交通灯控制系统设计
设计者:
张东
小组其他成员:
相守绪
日期:
2014年6月4日
交通灯控制器功能描述:
通过两组交通灯来模拟控制十字路口东西、南北两条道路上的车辆通行,所有功能在FPGA实验操作平台上模拟通过,其主要功能如下:
1.根据要求显示模拟路口东西、南北两个方向上的红灯、黄灯和绿灯的指示状态。
2.在LED指示的同时,实现正常的倒计时功能。
3.控制实现一种特殊状态并用交通灯加以显示。
4.能实现系统总清零。
5.具有一定的扩展功能。
设计任务:
1.用红、黄、绿三色发光二极管做信号灯,主干道A为东西向,设红、黄、绿三色灯为AR、AG、AY;支干道B为南北向,三色灯为BR、BG、BY。
2.主干道上车辆较多,所以亮绿灯的时间设为70s;支干道亮绿灯的时间设为40s。
当主干道允许通行亮绿灯时则支干道亮红灯;相反,支干道允许通行亮绿灯时则主干道亮红灯。
每次由绿灯转变为红灯时,期间要亮3s的黄灯作为过渡,以便行驶中的车辆有时间停到禁止线以内。
3.交通灯正常运行时,在LCD显示屏上显示主干道和支道的倒计时时间,ES主干道在当前状态的剩余时间,SN显示支干道在当前状态的剩余时间。
4.能实现系统清0,清0后计数器由初始状态开始计数,指示灯指示主干道亮绿灯。
5.能实现特殊状态的显示,用开关S作为特殊信号传感器,S为1时进入特殊状态并实现以下功能:
(1)东西、南北方向的交通灯全显示黄色状态。
(2)特殊状态解除后能继续返回正常工作状态。
设计要求
1.分析设计任务,拟定多种设计方案,根据当时的制作条件,选定适合的方案绘制框图和设计流程。
2.设计各部分单元电路或编写VHDL描述程序。
3.对制作的电路进行功能测试,分析各项技术指标;或对设计的电路进行功能仿真,分析仿真波形。
4.总结设计资料,但因包括原理电路、VHDL描述、仿真波形的设计报告,校验并演示电路装置。
状态顺序与灯亮对应表
态序(S1S0)
主干道(A)
支干道(B)
亮灯时间
1(00)
黄灯亮
红灯亮
3S
2(01)
红灯亮
绿灯亮
40S
3(10)
红灯亮
黄灯亮
3S
4(11)
绿灯亮
红灯亮
70S
译码器真值表
SS1S0AGARAYBGBRBY
1XX001001
000001010
001010100
010010001
011100010
E
W
S
N
R
4
2
R
G
4
0
N
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
在LCD上显示的格式
交通灯控制状态图
系统设计输入:
本实验采用VHDL硬件语言输入,其交通灯控制模块VHDL源文件与LCD接口模块VHDL语言描述如下,其中“S0”“S1”“S2”“S3”为事先设定的四种状态
交通灯控制模块VHDL源文件
--Filename:
Traffic_Light
--目的:
实现十字路口交通灯的控制
--编程包佳斌2010年12月
--输入:
CPRSSPECP-时钟信号(0.6HZ)RS-复位信号SPE-特殊状态控制信号
--输出:
EWRYG[2..0]、SNRYG[2..0]东西南北的红绿灯信号,顺序为红黄绿
--EW[7..0]SN[7..0]东西南北的交通灯倒计时信号
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityTraffic_Lightsis
port(CP,RS,SPE:
INSTD_LOGIC;--输入端口CP-时钟信号RS-复位信号SPE-特殊状态控制信号
E_RYG,S_RYG,W_RYG,N_RYG:
OUTSTD_LOGIC_VECTOR(2DOWNTO0);--东西、南北方向上的交通灯颜色显示
EW,SN:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)--ASCII码LCD显示(倒计时)
);
endTraffic_Lights;
architectureJGTofTraffic_LightsIS
TYPESTATESIS(S0,S1,S2,S3);--定义交通灯的4个状态
SIGNALS:
STATES;
SIGNALA1,A2,B2:
STD_LOGIC_VECTOR(7DOWNTO0);--BCD转换输入信号
SIGNALA1RYG,A2RYG,B1RYG,B2RYG:
STD_LOGIC_VECTOR(2DOWNTO0);--BCD码显示在LCD上的信息
FUNCTIONCHG(BIN:
STD_LOGIC_VECTOR(7DOWNTO0))--2位16进制转2位BCD码函数
RETURNSTD_LOGIC_VECTORIS
VARIABLES_BCD,ADD_BCD:
STD_LOGIC_VECTOR(7DOWNTO0);--定义BCD转换码中间变量
VARIABLEN:
INTEGERRANGE0TO8;--N表示输入BIN的位数
BEGIN
N:
=0;S_BCD:
="00000000";
IFBIN<"01100100"THEN--当输入BIN大于十进制100时,输出为0
LOOP
IFBIN(N)='1'THEN--根据BIN的每一位选择加上对应的压缩型BCD码
CASENIS
WHEN0=>ADD_BCD:
="00000001";
WHEN1=>ADD_BCD:
="00000010";
WHEN2=>ADD_BCD:
="00000100";
WHEN3=>ADD_BCD:
="00001000";
WHEN4=>ADD_BCD:
="00010110";
WHEN5=>ADD_BCD:
="00110010";
WHEN6=>ADD_BCD:
="01100100";
WHENOTHERS=>ADD_BCD:
="00000000";
ENDCASE;
S_BCD:
=S_BCD+ADD_BCD;
IFS_BCD(3DOWNTO0)>"1001"THEN--进行BCD码加法调整
S_BCD:
=S_BCD+"0110";
ENDIF;
ENDIF;
N:
=N+1;
EXITWHENN=8;--当N=8时从当前循环中推退出
ENDLOOP;--结束循环
RETURNS_BCD;
ELSE
RETURN"00000000";
ENDIF;
ENDFUNCTIONCHG;
BEGIN
PROCESS(CP,RS,SPE)
BEGIN
IFRS='1'THEN
S<=S0;--复位后进入S0状态
A1<=X"00";A1RYG<="001";B1RYG<="100";A2RYG<="001";B2RYG<="100";A2<=X"00";B2<=X"00";--颜色及倒计时赋值
ELSIFCP='1'ANDCP'EVENTTHEN--时钟上升沿到来
IFSPE='1'THEN--进入深夜状态
A1<=X"00";A1RYG<="010";B1RYG<="010";A2RYG<="010";B2RYG<="010";A2<=X"00";B2<=X"00";--保持4盏灯均为黄灯状态,时间保持为0
ELSE
CASESIS
WHENS0=>
IFA1>0THEN
A1<=A1-1;A1RYG<=A2RYG;B1RYG<=B2RYG;A2<=A2-1;B2<=B2-1;
ELSE
A1<=X"27";S<=S1;A1RYG<="100";B1RYG<="001";A2RYG<="100";B2RYG<="001";A2<=X"2A";B2<=X"27";--转次态S1,主红支绿倒计时40s
ENDIF;
WHENS1=>
IFA1>0THEN
A1<=A1-1;A1RYG<=A2RYG;B1RYG<=B2RYG;A2<=A2-1;B2<=B2-1;
ELSE
A1<=X"02";S<=S2;A1RYG<="100";B1RYG<="010";A2RYG<="100";B2RYG<="010";A2<=X"02";B2<=X"02";--转次态S2,主红次黄倒计时3s
ENDIF;
WHENS2=>
IFA1>0THEN
A1<=A1-1;A1RYG<=A2RYG;B1RYG<=B2RYG;A2<=A2-1;B2<=B2-1;
ELSE
A1<=X"45";S<=S3;A1RYG<="001";B1RYG<="100";A2RYG<="001";B2RYG<="100";A2<=X"45";B2<=X"48";--转次态S3,主绿次红倒计时70s
ENDIF;
WHENS3=>
IFA1>0THEN
A1<=A1-1;A1RYG<=A2RYG;B1RYG<=B2RYG;A2<=A2-1;B2<=B2-1;
ELSE
A1<=X"02";S<=S0;A1RYG<="010";B1RYG<="100";A2RYG<="010";B2RYG<="100";A2<=X"02";B2<=X"02";--转次态S0,主黄支红倒计时3s
ENDIF;
ENDCASE;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(A2,B2)
BEGIN
EW<=CHG(A2);SN<=CHG(B2);
ENDPROCESS;
PROCESS(A1RYG,A2RYG,B1RYG,B2RYG)
BEGIN
E_RYG<=A1RYG;
W_RYG<=A2RYG;
S_RYG<=B1RYG;
N_RYG<=B2RYG;
ENDPROCESS;
ENDJGT;
LCD接口模块
--FilenameJTDLCD
--目的:
在LCD上按格式显示交通灯的2个2位BCD码,红绿黄灯
--编程周冰航2008年11月修改:
包佳斌
--输入:
EW[7..0]、SN[7..0]东西、南北向的2个2位BCD码
--EWRYG[2..0]、SNRYG[2..0]东西南北的红绿灯信号,顺序为红黄绿
--CPIN时钟脉冲输入按10MHz设计;复位R
--注意:
每个总线形式的输入均为LOGIC_VECTOR形式,因此,相应电路的输出要定义为LOGIC
--VECTOR形式,整型形式不能使用。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
entityJTDLCDis
port(CPIN,R,BUSY:
INSTD_LOGIC;
EW,S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路课程设计 交通灯 数字电路 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)