基于Verilog HDL的交通灯控制器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

第一章设计原理 (1)

1.1设计要求 (1)

1.2设计思路和原理 (1)

1.3实现方法 (1)

第二章Verilog HDL程序设计 (2)

2.1整体设计 (2)

2.2 具体设计 (3)

第三章仿真与硬件调试 (7)

3.1 波形仿真 (7)

3.2 硬件调试 (9)

第四章设计总结 (10)

程序清单 (11)

参考资料 (15)

交通灯控制器设计

第一章 设计原理

1.1设计要求

设计一个交通控制器,用LED 显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数 主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s ,支干道每次放行25s 。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s 。能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LED 灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。能实现特殊状态的功能显示, 1.2设计思路和原理

本次设计是针对十字路口,进行南北和东西直行情况下交通灯控制。设定东西方向为主干道方向,根据交通灯的亮的规则,在初始状态下四个方向的都为红灯亮启,进入正常工作状态后,当主干道上绿灯亮时,支干道上红灯亮,持续35S 后,主干道和支干道上的黄灯都亮启,持续5S 后,主干道上红灯亮启,支干道上绿灯亮启持续25S ,之后主干道和支干道上的黄灯都亮启5s ,一个循环完成。循环往复的直行这个过程。其过程如下图所示:

0s

30s

25s

主干道方向

支干道方向

图1.交通灯点亮时间控制说明

1.3实现方法

本次采用文本编辑法,即利用Verilog HDL 语言描述交通控制器,通过状态机计数法,实现设计所要求的交通灯控制及时间显示。设计中用两组红黄绿LED 模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

第二章 Verilog HDL 程序设计

2.1整体设计

根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:

状状状状状状状状状状状状00

状状10

状状11状状01状状状状状状状状状状状状状状状

状状状状状状状状状状

状状状状状状状状状状状状状状状001100010

010001010

100010

图2.交通灯控制状态转化

说明:该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态01后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。进入10状态两路黄灯亮起。结束一个循环,从00状态重新开始循环。

为实现控制与显示的功能,需要设计交通灯点亮顺序控制程序,倒数计时程序,七段数码管显示程序,数码管显示扫描程序,其系统结构图如下所示:

图3.交通灯控制系统结构图

其中rst 为复位信号,clk 为时钟信号,hold 为特殊情况控制信号,输入hold 时两个方向红灯无条件亮起。

2.2 具体设计

根据整体设计要求,编写各个功能部分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;

1.二极管点亮控制

该部分程序的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的译码电路。此外,当检测到特殊情况(hold=‘1’)发生时,无条件点亮红灯的二极管,当检测到复位信号,两个方向计数与控制回复到00状态。因为主、支干道两个方向二极管点亮的顺序与延迟时间不同,顾编写两个独立的部分来控制,具体程序如下:

1)主干道方向

always @(posedge clk )

begin

相关文档
最新文档