十字路口交通灯信号控制器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字集成电路
实验报告
班级:0220905
姓名:王翔
学号:2009211006
2012年6月4日
课程设计
实验报告
班级:0220905
姓名:王翔
学号:2009211006
2012年6月4日
十字路口交通灯信号控制器设计
一 设计要求
为一条主干道和一条支干道汇合成的十字路口设计一个交通信号灯控制器。主干道处于常允许通行的状态,支干道有车来时才允许支干道通行。主、支干道均有车时,两者交替允许通行。 在每次由绿灯亮到红灯亮的转换过程中,要亮黄灯作为过渡。
二 设计思路和原理
本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。循环往复的直行这个过程。
三 状态机设计
根据设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:
主干道方向支干道方向状态00
状态10
状态11状态01红、黄、绿红、黄、绿红、黄、绿红、黄、绿红、黄、绿红、黄、绿红、黄、绿红、黄、绿001100010
010001010
100010
图2.交通灯控制状态转化
说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束一个循环,从00状态重新开始循环。
为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:
四具体设计
根据整体设计要求,编写各个功能部分Verilog HDL程序,设置各输入输出变量说明如下
clk:为计数时钟;
en:使能信号,为1 的话,则控制器开始工作;
rst:复位信号,为1的话,控制及技术回到初始状态;
hoid:特殊情况控制信号,为1的话,则两个方向无条件显示为红灯;
light1:控制主干道方向四盏灯的亮灭;其中,light1[0]~light[2],分别控制主干道方向的
绿灯、黄灯和红灯;
light2:控制支干道方向四盏灯的亮灭;其中,light2[0] ~ light2[2],分别控制支干道方向的
绿灯、黄灯和红灯;
num1:用于主干道方向灯的时间显示,8 位,可驱动两个数码管;
num2:用于支干道方向灯的时间显示,8 位,可驱动两个数码管;
如输入输出及中间变量设置下:
module traffic(en,clk,rst,hold,num1,num2,light1,light2);
input en,clk,rst,hold;
output[7:0] num1,num2;
output[2:0] light1,light2;
reg tim1,tim2;
reg[1:0]state1,state2,ste;
reg[2:0]light1,light2;
reg[3:0]num;
reg [7:0] sum=0;
reg[7:0] num1,num2;
reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
1.二极管点亮控制
该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。此外,当检测到特殊情况(h old=‘1’)发生时,无条件点亮红灯的二极管,当检测到复位信号,两个方向计数与控制回复到00状态。因为主、支干道两个方向二极管点亮的顺序与延迟时间不同,顾编写两个独立的部分来控制,具体程序如下:
1)主干道方向
always @(posedge clk )
begin
if(rst) //复位与特殊情况控制
begin
light1<=3'b001;
num1<=green1;
end
else if(hold)
begin
light1<=3'b100;
num1<=green1;
end
else if(en)
begin //使能有效开始控制计数
if(!tim1) //
begin //主干道交通灯点亮控制
tim1<=1;
case(state1)
2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end
2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end
2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end
2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end
default:light1<=3'b100;
endcase
end
2)支干道方向
always @(posedge clk )
begin
if(rst) //复位与特殊情况控制
begin
light2<=3'b100;