EDA交通信号灯控制电路设计.docx
《EDA交通信号灯控制电路设计.docx》由会员分享,可在线阅读,更多相关《EDA交通信号灯控制电路设计.docx(19页珍藏版)》请在冰点文库上搜索。
EDA交通信号灯控制电路设计
北华航天工业学院
《EDA技术综合设计》
课程设计报告
报告题目:
交通信号灯控制电路设计
作者所在系部:
电子工程系
作者所在专业:
通信工程
作者所在班级:
B10231
作者姓名:
指导教师姓名:
陈刚、褚越强
完成时间:
2012.11.29
内容摘要
EDA技术是现代电子信息工程领域的一门新技术,它是在先进的计算机平台上开发出来的一整套电子系统设计的软硬件工具,并提供了先进电子系统设计方法。
当今的技术,开发人员完全可以通过自己的电子系统设计来制定芯片内部的电路功能,使之成为设计者自己的专用集成电路芯片。
这种技术中常用软件有maxplusII和quartusII,而程序的编辑是用VHDL语言实现逻辑功能的。
本实验试验系统中可用可编程逻辑器件为FPGA,本实验的交通信号灯的设计:
首先在quartusII软件当中编辑程序,编译完成之后仿真,当仿真结果正确时下载到试验箱的系统中。
最终的目的要在实验板上用红路灯表示出来,并且同时要用数码管显示出人们的等待时间,交通灯的状态变化和显示时间同步……
关键词:
EDA、VHDL、交通灯、控制电路
目录
一、设计任务…………………………………………………………………………5
二、设计结构…………………………………………………………………………5
1、clk时钟秒脉冲发生电路或分频器………………………………………6
2、六十进制计数器……………………………………………………………6
3、次态发生器………………………………………………………………6
4、状态寄存器及等待时间输出……………………………………………6
5、时间显示电路………………………………………………………………6
6、时钟扫描电路………………………………………………………………6
三、原理图……………………………………………………………………………6
四、程序………………………………………………………………………………7
五、心得体会……………………………………………………………………10
课程设计任务书
课题名称
交通信号灯的控制电路设计
完成时间
12/11/29
指导教师
陈刚
职称
教授
学生姓名
班级
B10231
总体设计要求和技术要点
设计一个交通信号灯控制电路。
要求:
1、主干道和支干道交替放行,主干道每次放行30秒,支干道每次放行20秒;
2、每次绿灯变红灯时,黄灯先亮5秒钟,此时原红灯不变;
3、用十进制数字(递增计数)显示放行和等待时间。
技术要点:
1、主(支)干道红灯时间等于支(主)干道红绿黄灯时间之和;
2、用时钟数据扫描通过视觉暂留来数码管显示等待时间;
3、状态寄存器和状态寄存器的结合灵活运用;
4、计数时间值要译成七段译码值。
工作内容及时间进度安排
工作内容:
在软件上编辑、编译程序,并仿真到达实验要求。
进度安排;
周一到周四编写程序,并要求程序能通过编译仿真;
周四下午在实验板上下载调试程序;
周五周六验收。
课程设计成果
1.与设计内容对应的软件程序
2.课程设计报告书
3.成果使用说明书
4.设计工作量要求
交通信号控制器的VHDL的设计
一、设计任务
模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,用数码管显示等待时间。
设计一个交通信号灯控制器。
能达到的要求:
(1)交通灯从绿变红时,有5秒黄灯亮的间隔时间;
(2)交通灯红变绿是直接进行的,没有间隔时间;
(3)主干道上的绿灯时间为30秒,支干道的绿灯时间为20秒;
(4)在任意时间,显示等待时间。
支干道
主干道
图1路口交通管理示意图
S0
S1
S2
S3
主干道交通灯
绿(30秒)
黄(5秒)
红(20秒)
红(5秒)
支干道交通灯
红
红
绿
黄
表1交通信号灯的4种状态
二、设计结构
学习EDA开发软件和Quartus
的使用方法,熟悉可编程逻辑器件的使用。
通过制作来了解交通灯控制系统,交通灯控制系统主要是实现城市十字交叉路口红绿灯的控制。
设计说明
(1)第一模块:
clk时钟秒脉冲发生电路
在红绿灯交通信号系统中,大多数情况是通过自动控制的方式指挥交通的。
因此为了避免意外事件的发生,电路必须给一个稳定的时钟(clock)才能让系统正常运作。
模块说明:
系统输入信号:
Clk:
由外接信号发生器提供153的时钟信号;
系统输出信号:
CLK:
产生每秒一个脉冲的信号;
(2)第二模块:
计数秒数选择电路
计数电路最主要的功能就是记数负责显示倒数的计数值,对下一个模块提供状态转换信号。
模块说明:
系统输入:
CLK:
接收由clk电路的提供的1hz的时钟脉冲信号;
系统输出信号:
tm:
产生显示电路状态转换信号
tl:
倒计数值秒数个位变化控制信号
th:
倒计数值秒数十位变化控制信号
(3)第三模块:
红绿灯状态转换电路
本电路负责红绿灯的转换。
模块说明:
系统输入信号:
CLK:
接收由clk电路的提供的1hz的时钟脉冲信号;
tm:
接收计数秒数选择电路状态转换信号;
系统输出信号:
da_out:
负责红绿灯的状态显示。
(4)第四模块:
时间显示电路
本电路负责红绿灯的计数时间的显示。
模块说明:
系统输入信号:
tl:
倒计数值秒数个位变化控制信号;
th:
倒计数值秒数十位变化控制信号;
系统输出信号:
led7s1:
负责红绿灯的显示秒数个位。
led7s2:
负责红绿灯的显示秒数十位。
三、原理图
信号灯输出
分频计
计数器
时间显示
状态寄存器
七段段码
数码管片选
次态发生器
时钟扫描
四、实验程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytrafficis
port(clk_in:
instd_logic;
selout:
outstd_logic_vector(6downto0);-------定义数码管的七段显示
sel:
outstd_logic_vector(1downto0);------数码管个位十位选择段
da_out:
outstd_logic_vector(5downto0));------定义主次干道的红绿灯(主红黄绿支红黄绿)
endtraffic;
architectureoneoftrafficis
typedmis(s0,s1,s2,s3);--------自定义状态四种
signalcurrent_state,next_state:
dm;----当前状态与次态均在四种状态之间变化
signalclk:
std_logic;------一秒时钟信号
signalcount:
std_logic_vector(1downto0);-----个十位选择端(sel)
signalled7s1:
std_logic_vector(6downto0);----十位数码管控制端
signalled7s2:
std_logic_vector(6downto0);----个位数码管控制端
signaltime0:
std_logic_vector(6downto0);-----递增计数
signaltm:
std_logic_vector(6downto0);----剩余时间倒计时
signaltl:
std_logic_vector(6downto0);-----个位数码管显示情况控制
signalth:
std_logic_vector(1downto0);-----十位数码管显示情况控制
begin
sel<=count;
fen:
process(clk_in)
variablecnt:
std_logic_vector(16downto0);
begin
ifclk_in'eventandclk_in='1'then-------产生153hz分频,上升沿有效产生clk
ifcnt="10011000100101101"then
cnt:
="00000000000000000";
clk<='1';
elsecnt:
=cnt+1;
clk<='0';
endif;
endif;
endprocessfen;
a:
process(clk_in,count)----------不断扫描出现count的00和01的选择
begin
ifclk_in'eventandclk_in='1'then
ifcount="01"then
count<="00";
elsecount<=count+1;
endif;
endif;
casecountis
when"00"=>selout<=led7s2;
when"01"=>selout<=led7s1;
whenothers=>null;
endcase;
endprocessa;
process(clk)
begin
ifclk'eventandclk='1'then------60秒的循环设计
iftime0="0111100"then
time0<="0000001";
elsetime0<=time0+1;
endif;
endif;
endprocess;
reg:
process(clk,current_state)------定义当前状态与次态的关系
begin-----产生上升沿时次态把自己的状态赋予当前状态
ifclk='1'andclk'eventthen
current_state<=next_state;
endif;
endprocessreg;
com:
process(current_state,time0)
begin
casecurrent_stateis
whens0=>da_out<="001100";tm<=30-time0;-----主绿和支红状态,当计时到29
iftime0=29thennext_state<=s1;----秒时将s1状态赋给次态,此时
elsenext_state<=s0;----当前状态还是s0,等到下一个
endif;---上升沿后次态将s1赋给当前状
whens1=>da_out<="010100";tm<=35-time0;---态
iftime0=34thennext_state<=s2;
elsenext_state<=s1;
endif;
whens2=>da_out<="100001";tm<=55-time0;
iftime0=54thennext_state<=s3;
elsenext_state<=s2;
endif;
whens3=>da_out<="100010";tm<=60-time0;
iftime0=59thennext_state<=s0;
elsenext_state<=s3;
endif;
endcase;
endprocesscom;
process(tm)
begin
iftm>=30THENth<="11";tl<="0000000";
elsiftm>=20THENth<="10";tl<=tm-20;
elsiftm>=10THENth<="01";tl<=tm-10;
elseth<="00";tl<=tm;
endif;
endprocess;
process(th,tl)
begin
casethis
when"00"=>led7s1<="1111110";
when"01"=>led7s1<="0110000";
when"10"=>led7s1<="1101101";
when"11"=>led7s1<="1111001";
whenothers=>null;
endcase;
casetlis
when"0000000"=>led7s2<="1111110";
when"0000001"=>led7s2<="0110000";
when"0000010"=>led7s2<="1101101";
when"0000011"=>led7s2<="1111001";
when"0000100"=>led7s2<="0110011";
when"0000101"=>led7s2<="1011011";
when"0000110"=>led7s2<="1011111";
when"0000111"=>led7s2<="1110000";
when"0001000"=>led7s2<="1111111";
when"0001001"=>led7s2<="1111011";
whenothers=>null;
endcase;
endprocess;
endone;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtrafficIS
PORT(CLK:
instd_logic;
led7s:
outstd_logic_vector(6downto0);
sel:
outstd_logic_vector(1downto0);
comb_out:
outstd_logic_vector(5downto0));
ENDtraffic;
ARCHITECTUREoneOFtrafficIS
TYPEdmIS(s0,s1,s2,s3);
SIgnalcurrent_state,next_state:
dm;
SIGNALFULL:
STD_LOGIC;
Signalcount:
std_logic_vector(1downto0);
Signalled7s1:
std_logic_vector(6downto0);
Signalled7s2:
std_logic_vector(6downto0);
SIGNALtl:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALth:
STD_LOGIC_VECTOR(1DOWNTO0);
SIGNALtm:
STD_LOGIC_VECTOR(6DOWNTO0);
SIGNALtime1:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
Sel<=count;
P_REG:
PROCESS(CLK)
VARIABLECNT8:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNT8="11111111"THEN
CNT8:
="00000000";
FULL<='1';
ELSECNT8:
=CNT8+1;
FULL<='0';
ENDIF;ENDIF;
ENDPROCESSP_REG;
A:
process(CLK,count)
Begin
IfCLK'eventandCLK='1'then
Ifcount="01"then
Count<="00";
Elsecount<=count+1;
Endif;
Endif;
Casecountis
When"00"=>led7s<=led7s2;
When"01"=>led7s<=led7s1;
Whenothers=>null;
Endcase;
EndprocessA;
PROCESS(full)
BEGIN
IFfull'EVENTANDfull='1'THEN
IFtime1="0111100"THEN
time1<="0000001";
ELSetime1<=time1+1;
ENDIF;
ENDIF;
ENDPROCESS;
REG:
process(full,current_state)
BEGIN
IFfull='1'ANDfull'EVENTTHEN
current_state<=next_state;
ENDIF;
ENDprocessREG;
COM:
process(current_state,time1)
begin
casecurrent_stateis
whens0=>comb_out<="001100";tm<=30-time1;
iftime1=29thennext_state<=s1;
elsenext_state<=s0;
endif;
whens1=>comb_out<="010100";tm<=35-time1;
iftime1=34thennext_state<=s2;
elsenext_state<=s1;
endif;
whens2=>comb_out<="100001";tm<=55-time1;
iftime1=54thennext_state<=s3;
elsenext_state<=s2;
endif;
whens3=>comb_out<="100010";tm<=60-time1;
iftime1=59thennext_state<=s0;
elsenext_state<=s3;
endif;
endcase;
endprocessCOM;
PROCESS(tm)
BEGIN
IFtm>=30THENth<="11";tl<=tm-30;
ELSIFtm>=20THENth<="10";tl<=tm-20;
ELSIFtm>=10THENth<="01";tl<=tm-10;
ELSEth<="00";tl<=tm;
ENDIF;
ENDPROCESS;
process(th,tl)
begin
casethis
when"00"=>led7s1<="1111110";
when"01"=>led7s1<="0110000";
when"10"=>led7s1<="1101101";
when"11"=>led7s1<="1111001";
whenothers=>null;
endcase;
casetlis
when"0000000"=>led7s2<="1111110";
when"0000001"=>led7s2<="0110000";
when"0000010"=>led7s2<="1101101";
when"0000011"=>led7s2<="1111001";
when"0000100"=>led7s2<="0110011";
when"0000101"=>led7s2<="1011011";
when"0000110"=>led7s2<="1011111";
when"0000111"=>led7s2<="1110000";
when"0001000"=>led7s2<="1111111";
when"0001001"=>led7s2<="1111011";
whenothers=>null;
endcase;
endprocess;
end;
五、心得体会
六,参考书目
《EDA技术与实验》机械工业出版社李国洪、胡辉、沈明山
《EDA技术实验与课程设计》清华大学出版社曹新燕、周凤臣、聂春燕
《EDA技术综合应用实例与分析》西安电子科技大学出版社谭会生、翟遂春
网上资源:
XX文库、豆丁、维基百科、中国电子设计在线等
指导教师评语及设计成绩
评语
课程设计成绩:
指导教师:
日期:
年月日