eda交通灯课程设计.docx
- 文档编号:30392644
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:26
- 大小:157.90KB
eda交通灯课程设计.docx
《eda交通灯课程设计.docx》由会员分享,可在线阅读,更多相关《eda交通灯课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
eda交通灯课程设计
湖南工程学院
课程设计
课程名称嵌入式系统
课题名称十字路口的交通信号灯的控制电路设计
专业电子信息工程
班级电子信息0703
学号200701030309
姓名李海
指导教师贺攀峰
2010年12月20日
湖南工程学院
课程设计任务书
课程名称:
嵌入式系统
题目:
十字路口的交通信号灯的控制电路设计
专业班级:
电信0703班
学生姓名:
李海
指导老师:
贺攀峰
审批:
任务书下达日期2010年12月20日
设计完成日期2010年12月31日
设计内容与设计要求
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。
有关知识可参见相关教材或参考书。
一.设计内容
1.设计制作一块十字路口的交通信号灯的控制电路的专用芯片。
2.A方向和B方向各设置红(R)、黄(Y)、绿(G)三盏灯,三盏灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的方式显示出来。
3.两个方向各灯的时间可方便地进行设置和修改。
假设A方向为主干道,车流量大,A方向通行时间比B方向长。
设A方向每次至少通行t1秒,B方向每次至多通行t2秒,黄灯亮t秒。
二、设计要求:
1、设计思路清晰,给出整体设计框图;
2、在QUARTUSⅡ中设计各单元电路,完成其功能仿真和编译并生成低层模块;
3、在QUARTUSⅡ中完成顶层设计并编译通过;
4、在QUARTUSⅡ中完成设计下载并调试电路;
5、写出设计报告;
主要设计条件
1.提供EDA实验室;
2.提供EL实验箱和CPLD芯片;
3.提供ALTERA公司的QUARTUSII设计软件
说明书格式
1.课程设计封面;
2.任务书;
3.说明书目录;
4.设计总体思路,基本原理和框图(顶层电路图);
5.单元电路设计(各次级模块电路图);
6.设计仿真;
7.编程下载;
8.总结与体会;
9.附录;
10.参考文献。
进度安排
星期一、二:
下达设计任务书,介绍课题内容与要求;
介绍QUARTUSⅡ软件的使用;查找资料,确定总体设计方案和单元电路设计;
星期三~第二周星期一:
单元电路设计与仿真,硬件下载;
第二周星期二、三:
硬件下载;
第二星期四、五:
书写设计报告,打印相关图纸;答辩
参考文献
1.康华光主编.电子技术基础(数字部分),高等教育出版社。
2.阎石主编.电子技术基础(数字部分),清华大学出版社。
3.陈大钦主编,电子技术基础实验,高等教育出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.QUARTUSⅡ入门
8.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社
目录
1.总体设计1
1.1设计总体思路1
1.2总体框图2
2.单元电路设计2
2.1控制模块2
2.2计数模块5
2.2.125进制递减计数器的VHDL源文件6
2.2.23进制递减计数器的VHDL源文件8
2.2.335进制递减计数器的VHDL源文件10
2.2.430进制递减计数器的VHDL源文件12
2.2.545进制递减计数器的VHDL源文件14
2.3显示模块16
3.总电路设计20
3.1仿真结果20
3.2仿真结果分析21
4.总结与体会22
5.参考文献23
1.总体设计
1.1设计总体思路
用FPGA为核心器件,用VHDL为设计手段设计制作一个十字路口交通管理器。
该管理器控制甲、乙两道(乙道为主干道)的左转灯、直行灯和等待黄灯,用以指挥车辆有序安全通过。
交通管理器示意图如图所示:
图1-1交通管理示意图
图中R1、G1、Y1分别表示甲道左转、直行、等待灯(灭表示通行,亮表示禁止);R2、Y2、G2分别表示乙道左转、直行、等待灯(灭表示通行,亮表示禁止)。
定时器分别确定甲道和乙道左转及直行的通行时间和等待黄灯亮的时间。
具体设计要求如下:
用四位数码显示器分别显示甲乙两道左转、直行、等待时间(每边两位);其计时间隔为1S。
交通灯控制器工作流程如下:
甲道左转通行(甲道直行禁止,乙道全禁止)25S-等待(甲黄灯亮)3S-甲道直行通行(甲道左转禁止,乙道全禁止)35S--等待(甲黄灯亮)3S-乙道左转通行(乙道直行禁止,甲道全禁止)30S-等待(乙黄灯亮)3S-乙道直行通行(乙道左转禁止,甲道全禁止)45S---等待(乙黄灯亮)3S-重复……因此,我设置7个状态,用w0到w4控制状态的转换。
c1到c5、b1到b5控制计数器计数。
同时,c1到c5控制数码管显示方式。
1.2总体框图
图1-2总体框图
2.单元电路设计
2.1控制模块
控制模块是整个模块的核心。
控制着各种状态之间的转换,从而实现设计要求实现的功能。
控制模块的VHDL源文件如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYjiaotongIS
PORT(
clk:
INSTD_LOGIC;
c1,c2,c3,c4,c5,b1,b2,b3,b4,b5:
OUTSTD_LOGIC;
w0,w1,w2,w3,w4:
INSTD_LOGIC;
R1,R2:
OUTSTD_LOGIC;
Y1,Y2:
OUTSTD_LOGIC;
G1,G2:
OUTSTD_LOGIC;
reset:
INSTD_LOGIC);
ENDjiaotong;
ARCHITECTUREaOFjiaotongIS
TYPESTATE_SPACEIS(S0,S1,S2,S3,s4,s5,s6,s7);
SIGNALstate:
STATE_SPACE;
BEGIN
PROCESS(clk)
BEGIN
IF(reset='1')THEN
state<=S0;
ELSIF(clk'eventandclk='1')THEN
CASEstateis
WHENs0=>IF(w0='1')THENstate<=s1;--25s
ENDIF;
b1<='0';IF(w0='0')THENb1<='1';
ENDIF;
WHENs1=>IF(w1='1')THENstate<=s2;--3s
ENDIF;
b2<='0';IF(w1='0')THENb2<='1';
ENDIF;
WHENs2=>IF(w2='1')THENstate<=s3;--35s
ENDIF;
b3<='0';IF(w2='0')THENb3<='1';
ENDIF;
WHENs3=>IF(w1='1')THENstate<=s4;--3s
ENDIF;
b2<='0';IF(w1='0')THENb2<='1';
ENDIF;
WHENs4=>IF(w3='1')THENstate<=s5;--30s
ENDIF;
b4<='0';IF(w3='0')THENb4<='1';
ENDIF;
WHENs5=>IFw1='1'THENstate<=s6;--3s
ENDIF;
b2<='0';IF(w1='0')THENb2<='1';
ENDIF;
WHENs6=>IF(w4='1')THENstate<=s7;--45s
ENDIF;
b5<='0';IF(w4='0')THENb5<='1';
ENDIF;
WHENs7=>IF(w1='1')THENstate<=s0;--3s
ENDIF;
b2<='0';IF(w1='0')THENb2<='1';
ENDIF;
ENDCASE;
ENDIF;
ENDPROCESS;
c1<='1'whenstate=s0else'0';
c2<='1'whenstate=s1orstate=s3orstate=s5orstate=s7else'0';
c3<='1'whenstate=s2else'0';
c4<='1'whenstate=s4else'0';
c5<='1'whenstate=s6else'0';
R1<='0'whenstate=s0else'1';
G1<='0'whenstate=s2else'1';
Y1<='0'whenstate=s1orstate=s3else'1';
R2<='0'whenstate=s4else'1';
G2<='0'whenstate=s6else'1';
Y2<='0'whenstate=s5orstate=s7else'1';
ENDa;
2.2计数模块
计数模块主要是为实现各种状态的计数时间。
这里需要的计数器的计数范围为0-80。
计到80后,下一个时钟沿回复到0,开始下一轮计数。
此外,当检测到特殊情况(EMI=‘1’)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。
图2.1计数器模块
2.2.125进制递减计数器的VHDL源文件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYjcnt20IS
PORT
(clk:
INSTD_LOGIC;
cr:
INSTD_LOGIC;
EN1:
INSTD_LOGIC;
J0:
OUTSTD_LOGIC;
q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
y10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjcnt20;
ARCHITECTUREaOFjcnt25IS
SIGNALbcd1n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd10n:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
bcd1n<="0000";
ELSIF(EN1='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0andvcd10n/=0)THEN
bcd1n<="1001";
ELSif(bcd1n=0andvcd10n=0)THEN
bcd1n<="0000";
ELSE
bcd1n<=bcd1n-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
q1<=bcd1n;
y10<=vcd10n;
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
vcd10n<="0010";
ELSIF(EN1='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0)THEN
IF(vcd10n=0)THEN
vcd10n<="0000";
ELSE
vcd10n<=vcd10n-1;
ENDIF;
ENDIF;
ENDIF;ENDIF;
ENDPROCESS;
PROCESS(bcd1n,vcd10n)
BEGIN
J0<='0';
if(bcd1n=0andvcd10n=0)THEN
J0<='1';
ENDIF;
ENDPROCESS;
enda;
2.2.23进制递减计数器的VHDL源文件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYjcnt3IS
PORT
(clk:
INSTD_LOGIC;
cr:
INSTD_LOGIC;
EN2:
INSTD_LOGIC;
J1:
OUTSTD_LOGIC;
q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjcnt3;
ARCHITECTUREaOFjcnt3IS
SIGNALbcd1n:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
bcd1n<="0011";
ELSIF(EN2='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0)THEN
bcd1n<="0000";
ELSE
bcd1n<=bcd1n-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
q1<=bcd1n;
PROCESS(bcd1n)
BEGIN
J1<='0';
if(bcd1n=0)THEN
J1<='1';
ENDIF;
ENDPROCESS;
enda;
2.2.335进制递减计数器的VHDL源文件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYjcnt35IS
PORT
(clk:
INSTD_LOGIC;
cr:
INSTD_LOGIC;
EN3:
INSTD_LOGIC;
J2:
OUTSTD_LOGIC;
q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
y10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjcnt35;
ARCHITECTUREaOFjcnt35IS
SIGNALbcd1n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd10n:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
bcd1n<="0101";--J1<='1';
ELSIF(EN3='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0andvcd10n/=0)THEN
bcd1n<="1001";
ELSif(bcd1n=0andvcd10n=0)THEN
bcd1n<="0000";
ELSE
bcd1n<=bcd1n-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
q1<=bcd1n;
y10<=vcd10n;
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
vcd10n<="0011";--J1<='1';
ELSIF(EN3='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0)THEN
IF(vcd10n=0)THEN
vcd10n<="0000";
ELSE
vcd10n<=vcd10n-1;
ENDIF;
ENDIF;
ENDIF;ENDIF;
ENDPROCESS;
PROCESS(bcd1n,vcd10n)
BEGIN
J2<='0';
if(bcd1n=0andvcd10n=0)THEN
J2<='1';
ENDIF;
ENDPROCESS;
enda;
2.2.430进制递减计数器的VHDL源文件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYjcnt30IS
PORT
(clk:
INSTD_LOGIC;
cr:
INSTD_LOGIC;
EN4:
INSTD_LOGIC;
J3:
OUTSTD_LOGIC;
q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
y10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjcnt30;
ARCHITECTUREaOFjcnt30IS
SIGNALbcd1n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd10n:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
bcd1n<="0000";--J1<='1';
ELSIF(EN4='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0andvcd10n/=0)THEN
bcd1n<="1001";
ELSif(bcd1n=0andvcd10n=0)THEN
bcd1n<="0000";
ELSE
bcd1n<=bcd1n-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
q1<=bcd1n;
y10<=vcd10n;
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
vcd10n<="0011";--J1<='1';
ELSIF(EN4='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0)THEN
IF(vcd10n=0)THEN
vcd10n<="0000";
ELSE
vcd10n<=vcd10n-1;
ENDIF;
ENDIF;
ENDIF;ENDIF;
ENDPROCESS;
PROCESS(bcd1n,vcd10n)
BEGIN
J3<='0';
if(bcd1n=0andvcd10n=0)THEN
J3<='1';
ENDIF;
ENDPROCESS;
enda;
2.2.545进制递减计数器的VHDL源文件
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
ENTITYjcnt45IS
PORT
(clk:
INSTD_LOGIC;
cr:
INSTD_LOGIC;
EN5:
INSTD_LOGIC;
J4:
OUTSTD_LOGIC;
q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
y10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDjcnt45;
ARCHITECTUREaOFjcnt45IS
SIGNALbcd1n:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALvcd10n:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
bcd1n<="0101";
ELSIF(EN5='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0andvcd10n/=0)THEN
bcd1n<="1001";
ELSif(bcd1n=0andvcd10n=0)THEN
bcd1n<="0000";
ELSE
bcd1n<=bcd1n-1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
q1<=bcd1n;
y10<=vcd10n;
PROCESS(clk,cr)
BEGIN
IF(cr='0')THEN
vcd10n<="0100";
ELSIF(EN5='1')THEN
IF(clk'EVENTANDclk='1')THEN
IF(bcd1n=0)THEN
IF(vcd10n=0)THEN
vcd10n<="0000";
ELSE
vcd10n<=vcd10n-1;
ENDIF;
ENDIF;
ENDIF;ENDIF;
ENDPROCESS;
PROCESS(bcd1n,vcd10n)
BEGIN
J4<='0';
if(bcd1n=0andvcd10n=0)THEN
J4<='1';
ENDIF;
ENDPROCESS;
enda;
2.3显示模块
显示模块是把计数模块传过来的数字转变成对应的十进制数显示出来。
显示模块的V
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda 交通灯 课程设计