verilog_HDL交通灯控制电路
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
青岛农业大学
理学与信息科学学院
电子设计自动化及专用集成电路课程设计
报告
设计题目__________ 用状态机设计交通灯控制器___________ 学生专业班级_____ 通信工程2008级1班 _______________ 学生姓名(学号)孙鹏飞(20082715)_____________ 扌旨导教师________________ 刘金梅_____________________ 完成时间2011-9-9 ________________________ 实习(设计)地点工程楼405 __________________
2011年9月9日
、课程设计目的和任务
课程设计目的:本次课程设计是在学生学习完数字电路、模拟电路、电子设 计自动化的相关课程之后进行的。通过对数字集成电路或模拟集成电路的模拟与 仿真等,熟练使用相关软件设计具有较强功能的电路, 提高实际动手,为将来设
计大规模集成电路打下基础。
课程设计任务:设计一个交通控制器,用 LED 显示灯表示交通状态,并以 7 段数码显示器显示当前状态剩余秒数
主干道绿灯亮时,支干道红灯亮;反之亦
然,二者交替允许通行,主干道每次放行 35s ,支干道每次放行25s 。每次由绿 灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为 5s o 能进行特殊状 态显示,特殊状态时东西、南北路口均显示红灯状态。用
LED 灯显示倒计时,并
且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。
二、分析与设计
1、设计任务分析
本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。 设定东 西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红 灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续 35S 后,主干道和支干道上的黄灯都亮启,持续 5S 后,主干道上红灯亮启,支 干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启 5s ,一个循环完 成。循环往复的直行这个过程。其过程如下图所示:
图1•交通灯点亮时间控制说明
2、设计方案论证
主干道方向
支干道方向
本次采用文本编辑法,即利用 Verilog HDL
语言描述交通控制器,通过状态 机计数法,实现设计所要求的交通灯控制及时间显示。 设计中用两组红黄绿LED 模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余 时间,控制时钟由试验箱上频率信号提供。
根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的 时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化, 其真 值表及状态转化图如下所示:
图2.交通灯控制状态转化
说明:该状态图为交通灯在正常情况下的状态转化图, 进入控制后,状态00 时主干道绿灯及支干道红灯亮起, 进入状态01后两路黄灯亮起,状态11时主干道 红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束一个循环,从00状态重 新开始循环。
为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程 序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:
图3•交通灯控制系统结构图
其中resets 复位信号,elk 为时钟信号,hold 为特殊情况控制信号,输入hold 时两个 方向红灯无条件亮起。
3、详细设计
根据整体设计要求,编写各个功能部分 Verilog HDL 程序,设置各输入输出 变量说明如下
主干道方向 支干道方向 状态00 红、黄、绿 -001 状态01 红、黄、绿 -010
状态11 红、黄、绿
-100 状态10
红、黄、绿 -010
红、黄、绿 100 红、黄、绿 010 红、黄、绿 001 红、黄、绿 010
状态00
状态01
10 状态11
clk:为计数时钟;
qclk :为扫描显示时钟;
en:使能信号,为 1 的话,则控制器开始工作;
reset: 复位信号,为 1 的话,控制及技术回到初始状态;
hold :特殊情况控制信号,为1的话,则两个方向无条件显示为红灯;
light1: 控制主干道方向四盏灯的亮灭;其中, light1[0]~light[2] ,分别控制
主干道方向的
绿灯、黄灯和红灯;
light2: 控制支干道方向四盏灯的亮灭;其中, light2[0] ~ light2[2] ,分别控
制支干道方向的
绿灯、黄灯和红灯;
num1: 用于主干道方向灯的时间显示, 8 位,可驱动两个数码管;
num2: 用于支干道方向灯的时间显示, 8 位,可驱动两个数码管;
counter:用于数码管的译码输出;
stl, st2:数码管扫描信号。
输入输出及中间变量设置如下:
module
traffic(en,clk,qclk,reset,reset1,hold,num1,num2,light1,light2,counter,st1,st2);
input en,clk,qclk,reset,hold,reset1;
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;
3.1二极管点亮控制该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值
给七段数码管的译码电路。此外,当检测到特殊情况( hold= ‘)1'发生时,无条件点亮
红灯的二极管,当检测到复位信号,两个方向计数与控制回复到00 状态。因为主、支干道两个方向二
极管点亮的顺序与延迟时间不同,顾编写两个独立的部分来控制,具体
程序如下:
1)主干道方向 always @(posedge clk ) begin
if(reset) //复位与特殊情况控制
begin light1<=3'b001; num1<=green1;
end