十字路口交通灯信号控制器设计
- 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;
num2<=red2;
end
else if(hold)
begin
light2<=3'b100;
num2<=red2;
end
else if(en)
begin
if(!tim2)
begin
tim2<=1;
case(state1)
2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end
2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end
2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end
2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end
default:light2<=3'b100;
endcase
end
2.倒数计时
该部分程序完成二极管发光时延的计数,并将计数结果送到数码管显示电路,每切换到一个状态,计数器的初值都被重置,以实现不同颜色二极管不同的时延要求。
本次设计直接用逻辑运算完成2位十进制数的计数,未采用分位器的设计。
因为主、支干道上计数器的结构完全相同,顾只列出一路的程序,其具体程序如下所示:
always @(posedge clk )
begin
else
begin //倒数计时
if(num1>0)
if(num1[3:0]==0)
begin
num1[3:0]<=4'b1001;
num1[7:4]<=num1[7:4]-1;
end
else num1[3:0]<=num1[3:0]-1;
if(num1==1) tim1<=0;
end
end
else
begin
light1<=3'b010;
num1=2'b00;
tim1<=0;
end
end
五仿真与硬件调试
在QuartursⅡ软件下创建工程,新建编辑设计文件,将程序输入,整体编译后,新建波形仿真文件。
设置仿真时间,时钟周期,输入输出端口,进行波形仿真。
具体仿真波形图及说明如下所示:
仿真截止时间:100us;时钟:clk 1us
正常工作时波形仿真图
图形说明
当rst输入高电平时,在时钟上升沿控制下,计数与控制都回到00状态,即light1=001,light2=100,计数器num1和num2从“00110101”开始递减计数。
完成时序仿真确认无误后,进行实验箱管脚设置,注意设置完成后一定要再进行一次全局仿真,使程序真正对应于硬件输出输出。
具体连接说明如下所示
输入变量:rst、clk、hold、en
其中en,hold,rst接”0-1”拨码开关,以稳定的输出可变化的电平。
计数时钟clk接实验箱上1Hz时钟。
输出变量:light1[2:0]、light2[2:0]、num1,num2
其中light1[0] 、light2[0]分别接绿色的发光二极管;light1[1]、light2[1] 分别接黄色的发光二极管;light1[2]、light2[2]分别接红色的发光二极管。
num1,num2分别接两个七段数码管。
完成接线后将程序烧写到芯片上,开始功能调试。
分辨改变使能信号,复位信号以及特殊情况信号,观察数码管以及发光二级管情况,实物照片如下所示:
六实验总结
在设计中采用V erilog HDL语言设计交通灯控制系统, 借助其功能强大的语言结构, 简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率的同时达到求解目的, 并可以通过V erilog HDL 语言的综合工具进行相应硬件电路生成, 具有传统逻辑设计方法
所无法比拟的优越性。
完成仿真后进行,进行试验箱上的硬件调试,该步骤主要是要求细心,按照引脚清单,逐一完成连线,本次设计用到两个时钟输入,注意一定要选择合适频率的时钟,以便达到期望的效果。
注意观察实物的现象,看是否满足设计要求,不满足时检查是硬件问题还是程序问题,如果是程序问题,在修改完之后必须要重新编译,重新烧入。
不断排查错误,直至达
到满意的效果。
通过这次课程设计,熟悉了简单EDA设计的整个流程,加深了对Verilog HDL硬件描述语言的理解,提高了动手能力,并且锻炼了自己的耐心,收获颇丰,我会把在本次课程设计中学到的东西应用到今后的工作学习中。
最后感谢同学及老师提供的帮助与指导。
七参考资料
[1] 夏宇闻. 复杂数字电路与系统的V erilog HDL设计技术 [M ].北京: 北京航空航天大学出版社, 1998
[2] 郭梯云. 移动通信[M ]. 西安: 西安电子科技大学出版社, 1995
[3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 数字移动通信系统[M ]. 骆健霞, 顾龙信, 徐云霄译. 北京: 电子工业出版社, 1996
[4] 张毅刚, 乔立岩. 虚拟仪器软件开发环境L abW indow söCV I 610 编程指南[M ]. 北京: 机械工业出版社, 2002
[5] 刘国权.GSM 手机的测试[J ].中国无线电管理, 2003
[6] 俞定玖, 刘湘慧. GSM 数字蜂窝移动交换系统测试[J ]. 电信科学, 2000
[7] 张明. V erilog HDL 实用教程[M ]. 成都: 电子科技大学出版社, 1999
[8] Hyde D C. Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995
[9] 康华光. 电子技术基础(数字部分) [M ]. 北京: 高等教育出版社, 1988。