简易交通灯控制器设计实验六报告格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江万里学院实验报告
成绩:
教师:胡俊杰
课程名称: 可编程逻辑器件应用
实验名称: 实验六 简易交通灯控制器设计 专业班 姓名: 学号: 实验日期一、实验目的:掌握有限状态机的描述,掌握Verilog语言的多个过程语句(always)的应用,练习复杂时序电路设计。
二、实验内容:
简易交通信号控制器设计
1)设计目标:
1、在交通灯系统中,路口需要红、黄、绿三盏灯,并且每个路口都有倒数的计时器。
2、假设绿灯每次维持的时间是30s,黄灯为6s,红灯36s,绿灯亮
时最后3秒以0.5s亮灭的频率闪烁。
3、A方向绿灯或黄灯亮时,B方向红灯亮;B方向绿灯或黄灯亮时,
A方向红灯亮。
2)提高要求:(可以完成其中一项或两项)
1、A向和B向的绿灯、黄灯亮的时间可以通过端口预置成不同时间,红灯亮的时间由模块内计算得到。
2、计数器用2位十进制倒计时,并且经显示译码用数码管显示。
3、红灯状态开始时,最初2秒不显示。
三、设计过程
1)交通灯工作过程时序分析
本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S后,主干道和支干道上的黄灯都亮启,持续5S后,主干道上红灯亮启,支干道上绿灯亮启持续25S,之后主干道和支干道上的黄灯都亮启5s,一个循环完成。循环往复的直行这个过程。其过程如下图所示:
图1.交通灯点亮时间控制说明
2)工作状态划分以及状态转换
根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:
图2.交通灯控制状态转化
说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束一个循环,从00状态重新开始循环。
为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:
图3.交通灯控制系统结构图
其中rst为复位信号,clk为时钟信号,hold为特殊情况控制信号,输入hold时两个方向红灯无条件亮起。
3)每个状态对应红黄绿等的工作分析
根据整体设计要求,编写各个功能部分Verilog HDL程序,设置各输入输出变量说明如下
clk:为计数时钟;
qclk:为扫描显示时钟;
en:使能信号,为1 的话,则控制器开始工作;
rst:复位信号,为1的话,控制及技术回到初始状态;
hoid:特殊情况控制信号,为1的话,则两个方向无条件显示为红灯;
light1:控制主干道方向四盏灯的亮灭;其中,light1[0]~light[2],分别控制主干道方向的绿灯、黄灯和红灯;
light2:控制支干道方向四盏灯的亮灭;其中,light2[0] ~ light2[2],分别控制支干道方向的
绿灯、黄灯和红灯;
num1:用于主干道方向灯的时间显示,8 位,可驱动两个数码管;
num2:用于支干道方向灯的时间显示,8 位,可驱动两个数码管;
counter:用于数码管的译码输出;
st1,st2:数码管扫描信号。
输入输出及中间变量设置如下:
module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);
input en,clk,qclk,rst,hold,rst1;
output st1,st2;
output[7:0] num1,num2;
output[6:0]counter;
output[2:0] light1,light2;
reg tim1,tim2,st1,st2;
reg[1:0]state1,state2,ste;
reg[2:0]light1,light2;
reg[3:0]num;
reg[6:0]counter;
reg[7:0] num1,num2;
reg[7:0] red1,red2,green1,green2,yellow1,yellow2;
4)整个设计的模块划分以及每个模块的功能说明
定义了两个输入,三个输出。两个输入分别是时钟信号和紧急情况信号。输出信号分别
是南北,东西,以及led灯信号。具体实现方式是先给紧急情况下定义个状态,然后通过计数器
来实现各个状态的改变。
5)分模块程序设计和调试
module djs(clk_1hz,d0,d1,state,start);
input clk_1hz,start;
output[1:0]state;
output[3:0] d1,d0;
parameter s1=2'b00,s2=2'b01,s3=2'b10,s4=2'b11;
parameter
t_lda1=3,t_lda0=0,t_hda1=0,t_hda0=6,t_ldb1=4,t_ldb0=5,t_hdb1=0,t_hdb0=5; reg [1:0] state;
reg [3:0] d1,d0;
reg [3:0] s_d1,s_d0;
always @(posedge clk_1hz )
begin