基于Verilog_HDL的交通灯控制器设计(报告参考)

时间:2024.5.4

目 录

第一章 设计原理 ....................................................................................................................................... 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,一个循环完成。循环往复的直行这个过程。其过程如下图所示:

基于VerilogHDL的交通灯控制器设计报告参考

0s

主干道方向25s30s支干道方向

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

1.3实现方法

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

1

第二章 Verilog HDL程序设计

2.1整体设计

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

基于VerilogHDL的交通灯控制器设计报告参考

状状00

状状01状状11状状10

状状状状状状状状状状001状状状状状010状状状状状100状状状状状010

状状状状状状状状状状100状状状状状010状状状状状001状状状状状010

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

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

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

基于VerilogHDL的交通灯控制器设计报告参考

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

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

2

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

3

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)

4

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

3. 数码管的译码及扫描显示

该段程序主要完成4个7段数码管的译码显示及扫描,使系统能正常显示主、支干道两个方向上的剩

5

余时间。译码的时钟频率要低,为Hz级。扫描的时钟频率要高,最低不得小于人眼分辨频率50Hz,具体程序如下所示:

always @(posedge qclk)

begin //数码管扫描

if(rst1)

begin

st1=0;

st2=0;

end

else

begin

case({st2,st1})

2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01; end

2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10; end

2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11; end

2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00; end

endcase

end

end

always @(posedge qclk)

begin //数码管译码显示

case(num)

4'b0000: counter<=7'b0111111; //0

4'b0001: counter<=7'b0000110; //1

4'b0010: counter<=7'b1011011; //2

4'b0011: counter<=7'b1001111; //3

4'b0100: counter<=7'b1100110; //4

4'b0101: counter<=7'b1101101; //5

4'b0110: counter<=7'b1111101; //6

4'b0111: counter<=7'b0000111; //7

4'b1000: counter<=7'b1111111; //8

4'b1001: counter<=7'b1101111; //9

default: counter<=7'b0111111; //0

endcase

end

endmodule

总体程序见程序清单所示

6

第三章 仿真与硬件调试

3.1 波形仿真

在QuartursⅡ软件下创建工程,新建编辑设计文件,将程序输入,整体编译后,新建波形仿真文件。设置仿真时间,时钟周期,输入输出端口,进行波形仿真。具体仿真波形图及说明如下所示:

仿真截止时间:100us;

时钟:clk 1us,qclk 0.1us

1. 正常工作时波形仿真图

基于VerilogHDL的交通灯控制器设计报告参考

图4. 正常工作时波形仿真图

图形说明

波形仿真主要完成了控制与计数以及数码管显示的波形图。en为低电品时,计数器置初值,高电平时开始正常控制与计数。控制发光二极管首次输出为“light1=001,light2=100”,表示主干道路绿灯亮,支杆道路红灯亮,计数器num1和num2从“00110101”开始递减计数,计数至“00000000”时,进入下一个状态,控制输出量为light=010,light2=010,表示主、支干道黄灯均亮起,计数器num1和num2从“00000101”开始计数递减,计数至”00000000”时进入下一个状态,light=100,light2=001,表示主干道路红灯亮,支杆道路绿灯亮。Counter根据num1,num2变化随时钟上升沿输出译码后的数据。由于屏幕显示大小有限,未仿真出一个完整周期。

2. 特殊情况仿真波形

7

图5. 特殊情况仿真波形

图形说明

当hold输入高电平时,在时钟上升沿的控制下,light 1与light2被强制置位为”100”,表示两路红灯均亮起

3. 复位情况仿真波形

基于VerilogHDL的交通灯控制器设计报告参考

图6. 复位情况仿真波形

图形说明

8

基于VerilogHDL的交通灯控制器设计报告参考

当rst输入高电平时,在时钟上升沿控制下,计数与控制都回到00状态,即light1=001,light2=100,计数器num1和num2从“00110101”开始递减计数。

3.2 硬件调试

完成时序仿真确认无误后,进行实验箱管脚设置,注意设置完成后一定要再进行一次全局仿真,使程序真正对应于硬件输出输出。具体连接说明如下所示

输入变量:rst、clk、qclk、hold、en

其中en,hold,rst接”0-1”拨码开关,以稳定的输出可变化的电平。计数时钟clk接实验箱上1Hz时钟,扫描显示时钟qclk接125Khz时钟。

输出变量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2

其中light1[0] 、light2[0]分别接绿色的发光二极管;light1[1]、light2[1] 分别接黄色的发光二极管;light1[2]、light2[2]分别接红色的发光二极管。counter[0]~counter[6],分别接七段数码管的a~f,st1、st2分别接试验箱上”4-16”译码器的低两位。

完成接线后将程序烧写到芯片上,开始功能调试。分辨改变使能信号,复位信号以及特殊情况信号,观察数码管以及发光二级管情况,实物照片如下所示:

基于VerilogHDL的交通灯控制器设计报告参考

图7. 硬件实物图

9

第四章 设计总结

在设计中采用V erilog HDL语言设计交通灯控制系统, 借助其功能强大的语言结构, 简明的代码描述复杂控制逻辑设计, 与工艺无关特性, 在提高工作效率的同时达到求解目的, 并可以通过V erilog HDL 语言的综合工具进行相应硬件电路生成, 具有传统逻辑设计方法所无法比拟的优越性。

在设计过程中,觉得最难的部分是波形仿真部分,虽然程序编译通过但仿真出不了正确的波形,不是计数器无法正常计数,就是控制输出无法进入到下一个状态,每次出现问题就必须返回重新修改程序。实践证明,在编写一个较复杂的程序时,一开始一定要画流程图,弄清楚各个功能及实现它们的逻辑算法,做到心中有数后在开始下笔写编写程序。在编写的时候要尤其要注意语言的规范,如本次设计中编写的V erilog在Quartus7.0中可以正常生成时序图,而在低版本的软件中却无法生成,原因就是语言使用不规范,在解决这个问题时我总结了一些经验,首先程序要逻辑清晰,简洁明了,避免不必要的嵌套与条用,其次要适当地给程序加上注解文字,提高可读性,以方便之后的程序出错时进行查找,最后充分利用仿真软件提供的各项编译工具与报错消息,按图索骥,有方向的完成程序调试。

完成仿真后进行,进行试验箱上的硬件调试,该步骤主要是要求细心,按照引脚清单,逐一完成连线,本次设计用到两个时钟输入,注意一定要选择合适频率的时钟,以便达到期望的效果。注意观察实物的现象,看是否满足设计要求,不满足时检查是硬件问题还是程序问题,如果是程序问题,在修改完之后必须要重新编译,重新烧入。不断排查错误,直至达到满意的效果。

通过这次课程设计,熟悉了简单EDA设计的整个流程,加深了对Verilog HDL硬件描述语言的理解,提高了动手能力,并且锻炼了自己的耐心,收获颇丰,我会把在本次课程设计中学到的东西应用到今后的工作学习中。最后感谢同学及老师提供的帮助与指导。

10

程序清单

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;

always @(en )

if(!en)

begin //设置计数初值

green1<=8'b00110101;

red1<=8'b00100101;

yellow1<=8'b00000101;

green2<=8'b00100101;

red2<=8'b00110101;

yellow2<=8'b00000101;

end

always @(posedge clk )

begin

if(rst) //复位与特殊情况控制

begin

light1<=3'b001;

num1<=green1;

end

else if(hold)

begin

light1<=3'b100;

11

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

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

always @(posedge clk )

begin

if(rst) //复位与特殊情况控制

begin

12

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

else

begin //倒数计时

if(num2>0)

if(num2[3:0]==0)

begin

num2[3:0]<=4'b1001;

num2[7:4]<=num2[7:4]-1;

end

else num2[3:0]<=num2[3:0]-1;

if(num2==1) tim2<=0;

end

end

else

begin

tim2<=0;

state2<=2'b00;

light2<=3'b010;

13

end

end

always @(posedge qclk)

begin //数码管扫描

if(rst1)

begin

st1=0;

st2=0;

end

else

begin

case({st2,st1})

2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01; end 2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10; end 2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11; end 2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00; end endcase

end

end

always @(posedge qclk)

begin //数码管译码显示

case(num)

4'b0000: counter<=7'b0111111; //0

4'b0001: counter<=7'b0000110; //1

4'b0010: counter<=7'b1011011; //2

4'b0011: counter<=7'b1001111; //3

4'b0100: counter<=7'b1100110; //4

4'b0101: counter<=7'b1101101; //5

4'b0110: counter<=7'b1111101; //6

4'b0111: counter<=7'b0000111; //7

4'b1000: counter<=7'b1111111; //8

4'b1001: counter<=7'b1101111; //9

default: counter<=7'b0111111; //0

endcase

end

endmodule

14

参考资料

[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

15

更多相关推荐:
单片机交通灯设计报告[1]

河南理工大学电子设计综合训练报告单片机控制的交通灯控制系统设计姓名:***学号:***专业班级:电气本09-2班指导老师:**所在学院:电气工程与自动化学院20XX年4月15日1摘要2系统总体方案及硬件设计12…

交通灯控制电路设计报告

华北科技学院数字电路设计报告交通灯控制电路设计报告目录一设计任务和要求2二设计方案的总体思路与选择31时钟信号发生器电路设计论证42定时器设计论证43控制器论证44信号灯的论证4三电路设计计算与分析51秒脉冲的...

交通灯控制电路的设计报告

一概述随着社会经济的发展城市交通问题越来越引起人们的关注人车路三者关系的协调已成为交通管理部门需要解决的重要问题之一交通灯通常指由红黄绿三种颜色灯组成用来指挥交通的信号灯绿灯亮时准许车辆通行黄灯亮时已越过停止线...

交通灯的设计心得体会总结

通过此次课程设计,使我更加扎实的掌握了有关电子线路方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知…

交通灯控制系统设计报告

交通信号灯控制系统设计一、设计目的1、学习LED数码管的原理及编程方法。2、学习键盘的原理及编程方法。3、掌握51单片机定时器与中断的使用。4、掌握交通信号灯控制系统的原理和实现方法。二、设计内容设计一个交通信…

交通灯控制电路设计报告

数字电路课程设计交通灯控制电路设计学院:信息科学技术学院班级:姓名:学号:指导老师:20##年4月26日目录一、设计任务.............................................…

51单片机c语言交通灯设计报告

xxxxxxxxx基于AT89S52交通灯设计学院电子信息工程专业班级xxxxxxxxxxxxxx姓名xxxx学号指导老师摘要交通灯在我们日常生活中随处可见它在交通系统中处于至关重要的位置交通灯的使用大大减少了...

交通灯实验报告

摘要交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。近年来随着科技的飞…

交通灯实习报告

河南科技学院新科学院单片机课程设计报告题目交通灯控制器设计专业班级电气工程及其自动化101姓名马佳佳时间20xx12320xx1221指导教师徐君鹏邵锋苗青林完成日期20xx年12月21日交通灯控制器设计任务书...

EDA交通灯实验报告

实验:交通灯设计一、设计任务及要求:设计任务:模拟十字路口交通信号灯的工作过程,利用实验板上的两组红、黄、绿LED作为交通信号灯,设计一个交通信号灯控制器。要求:(1)交通灯从绿变红时,有4秒黄灯亮的间隔时间;…

单片机交通灯设计报告

单片机课程设计论文前言近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不…

交通灯控制器电路设计报告

交通灯控制器电路设计报告一设计要求1设计一个十字路口的交通灯控制器先是绿灯亮25秒紧接着黄灯亮5秒紧接着红灯亮30秒依此顺序循环控制2用计算机画出设计电路图进行仿真分析验证其正确性3写设计说明书一份画总原理图以...

交通灯设计报告(35篇)