VerilogHDL的交通灯控制器设计.docx

上传人:b****8 文档编号:9367610 上传时间:2023-02-04 格式:DOCX 页数:23 大小:125.63KB
下载 相关 举报
VerilogHDL的交通灯控制器设计.docx_第1页
第1页 / 共23页
VerilogHDL的交通灯控制器设计.docx_第2页
第2页 / 共23页
VerilogHDL的交通灯控制器设计.docx_第3页
第3页 / 共23页
VerilogHDL的交通灯控制器设计.docx_第4页
第4页 / 共23页
VerilogHDL的交通灯控制器设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

VerilogHDL的交通灯控制器设计.docx

《VerilogHDL的交通灯控制器设计.docx》由会员分享,可在线阅读,更多相关《VerilogHDL的交通灯控制器设计.docx(23页珍藏版)》请在冰豆网上搜索。

VerilogHDL的交通灯控制器设计.docx

VerilogHDL的交通灯控制器设计

课程设计报告

2015-2016学年第2学期

课程设计名称:

电子综合设计EDA课程设计

院係):

电子信息学院

专业:

电子信息工程班级:

电子1313

:

XX学号:

1310034303xx

综合实验时间:

2016/7/11∙2016/7/15

指导教师:

提交时间:

2016/7/15

电机学院课程设计任务书

课程名称

电子综合设计EDA课程设计课程代码033117P1

课程设计

课题清单

1、数字式竞赛抢答器

2、自动售票机

3、乒乓球比赛游戏机

4、电子密码锁

5、出租车自动计费器

6、洗衣机控制器

7、交通信号灯控制器

8、电梯控制器

设计时间

2016年7月11日——2016年7月15日

一、课程设计任务汇总

设计任务:

交通信号灯控制器

功能要求:

丨、设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成十字路口,在每个入口处设萱红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外;

2、红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测车辆是否到来的信号;

3、主干道处于常允许通行的状态,支干道有车来时才允许通行。

主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯;

4、主、支干道均有车时,两者交替允许通行,主干道每次放行时间A,支干道每次放行时间A,设立A、B计时显示电路;

5、在每次由绿灯亮到红灯亮的转换过程中,要亮黄灯C时间作为过渡,使行驶中的车辆有时间停到禁行线外,设立C计时显亦电路。

时间A>B>C

二、对课程设计成果的要求(包括课程设计报告、图纸、图表、实物等软硬件要求)

1.课程设计基本要求

课题分析、查阅资料、方案论证、方案实现、系统联调、撰写课程设计报告

2.成果要求

(1)系统方案

(2)电路RTL原理图

(3)VerilOg源程序和流程图(或状态机转移图)

⑷VeriIOg测试程序

(5)设计说明书(课程设计报告)

三、课程设计工作进度计划:

时间

安排容

星期一

下达任务

星期二

程序设计

星期三

程序调试

星期四

撰写报告

星期五

考核答辩

四、主要参考资料:

指导书:

《VeriIOg数字系统设计教程》夏宇闻编善航空航天大学

参考资料:

《EDA设计实验教程》艾明晶编著清华大学

第一章设计原理4

1」设计要求4

1∙2设计思路和原理4

1∙3实现方法4

第二章VeriIOgHDL程序设计6

21整体设计6

2.2具体设计7

第三章仿真测试7

3.1波形仿真7

第四章设计总结10

第一章设计原理

1∙1设计要求

设计一个交通控制器,用LED显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s,支干道每次放行25s0每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s。

能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。

用LED灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。

能实现特殊状态的功能显示。

1.2设计思路和原理

(1)主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。

(2)选择IHZ时钟脉冲作为系统时钟。

(3)45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。

(4)交通灯状态变化如表】及图1所示:

主干道(A)状态

主干道(A)交通灯及显示时间

支干道(B)交通灯及显示时间

支干道(B)状态

0

绿(45S)

•••

•••

红(50S)

0

1

黄(5s)

∙C∙

•••

2

红(30S)

绿(25s)

1

•••

∙O∙

黄(5s)

2

EmergeIICy

红(0)

M∙

红(0)

EmergenCy

*1交通灯状态图

检测到支路无行人和车辆

图1交通灯状态图

⑸交通灯设计输入信号4个:

CLK(时钟),EN(使能),EMERGENCY!

紧急),BCHECK(检

测);输出信号4个:

LAMPA(±干道信号灯),LAMPB(⅛干道信号灯),ACO∪NT(±干道计数器),BCOUNT(支干道计数器)。

交通灯控制原理如图2所示

图2交通灯原理图

1.3实现方法

本次采用文本编辑法,即利用VerilogHDL语言描述交通控制器,通过状态机计数法,

实现设计所要求的交通灯控制及时间显示。

设计中用两组红黄绿LED模拟两个方向上的交通灯,用4个7段数码管分别显示两个方向上的交通灯剩余时间,控制时钟由试验箱上频率信号提供。

第二章VMOgHDL程序设计

21整体设计

根据上章设计原理,交通灯控制的关键是各个状态之间的转换和进行适当的时间延时,

根据状态机的设计规,本次设计了三个状态之间的循环转化,其真值表及状态转化图如下所示:

图2交通灯控制状态转化

说明:

该状态图为交通灯在正常情况下的状态转化图,进入控制后,状态00时主干道绿灯及支干道红灯亮起,进入状态Ol后两路黄灯亮起,状态11时主干道红灯及支干道绿灯亮起。

进入10状态两路黄灯亮起。

结束一个循环,从00状态重新开始循环。

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

hold

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

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

2.2具体设计

根据整体设计要求,编写各个功能部分VerilogHDL程序,设置各输入输出变量说明如下

elk:

为计数时钟;

qclk:

为扫描显示时钟;

en:

使能信号,为1的话,则控制器开始工作;

rst:

复位信号,为1的话,控制及技术回到初始状态;

hold:

特殊情况控制信号,为1的话,则两个方向无条件显示为红灯;

IightI:

控制主干道方向四盏灯的亮灭;其中,Iightl[0]〜Iight[2],分别控制主干道方向的

绿灯、黄灯和红灯;

Iight2:

控制支干道方向四盏灯的亮灭;其中,∣ight2[0]〜Iight2[2],分别控制支干道方向的

绿灯、黄灯和红灯;

∩uml:

用于主干道方向灯的时间显示,8位,可驱动两个数码管;

∩um2:

用于支干道方向灯的时间显示,8位,可驱动两个数码管;counter:

用于数码管的译码输岀;

stl,st2:

数码管扫描信号0

详细设计步骤:

(1)确定4个输入信号与4个输出信号,具体见图2;

⑵将50MHZ时钟分频为IMHZ;

(3)设计红黄绿3号灯切换的时间及顺序;

(4)设计支路检测状态下的信号灯切换;

⑸设计紧急(EMERGENCY)状态下信号灯的切换;

⑹程序使用3αlwαys块⑴,详细代码如下:

总体程序见程序清单所示

第三章仿真测试

3.1波形仿真

在仿真软件下创建工程,新建编辑设计文件,将程序输入,整体编译后,新建波形仿真文件。

设責仿真时间,时钟周期,输入输出端口,进行波形仿真。

具体仿真波形图及说明如下所示:

仿真截止时间:

IOOus;

时钟:

CIklus,qclkθJus

3.1.1正常工作时波形仿真图

Name

ι±→r

M5∑8ST3US

10.OO^Ceil[f/Ke-IUmCh

CO'

OlO

JU≡l≡≡M

≡n≡π≡ιu≡u≡

Jlfi≡UUUUUl

∣3u&

:

:

「:

:

:

/.=:

:

:

:

:

.J:

:

:

:

W(KXW>ακ

ΞX=X×XX;Q:

X:

©XXX;Q:

X••:

:

》:

:

:

:

:

:

:

:

:

:

:

:

:

:

:

⅛∏tl'⅛hold

":

":

;「:

’.,C.:

:

:

XXwX

OiO

:

工∙

GOl

►⅜!

HUflftI(7∙O)

OOOQOoli

►Rjnum2[7-O)

OooOOoii

►RjIigh以ZOl

001

►1M昭阿B

IQO

>屯counterfoil)

Oliliii

l¼m

1

Ife«2

0

Iien

1

'⅜dk

1

'⅛qclk

0

 

图4没有紧急借况时主干道和支干道的信号灯的显示状态

 

DOUXZ-HIOfiAUigcl

i<∙M<∖√∙∙⅝^÷<∙∖⅛⅛

∙√.∙√..‰√.z>!

√.>∙.j.∙.z√

SB.ΓQβ2C7“

90

100

Mmn≡j

JI

OwOeCxακ>

>Renuml∏<η

>Renum2(7<η

►宅∣≠tU2<η

►傀I沪020

>COUntCft6®

⅛Stl

⅞rt2

ODOOOolI

OOIOOIOO

OlO

OOl

IOlIOlI

 

图5没有紧急借况时主干道和文干道的Ar号灯的显示状态

>¾∣10.0Qqf^∣(∈

GSS0S3S55535≡0∣

∖<-∖-,i∙>∖

M

浓洱⅞⅞⅞⅞弹:

洽的:

世:

¾¾:

*Mj≡β^^∙a**∕j∣^∙>■:

・.・∏∙∙*

gjgjg⅛

JliInJUInnIlr

OXX

n≡ιwmnπm

咤nυmip0]Renum2P.O)畔IighW20】电IighUg熨COUrltef(6XJ)⅜$111⅛$12

l⅛Clkl⅛qclk1⅛rst1⅛rstl1⅛hdd

∞ιooιooCoIOOOOO100OoiIoiIoiI

 

图6没有紧急惜况时主干道和支干道的信号灯的显示状态

€8.3743S7

VaIUG

W

∣60

;:

;:

0:

0

OO

IOC

l⅛hold

InlUmnnn

:

:

:

Y:

:

:

?

>:

:

:

:

:

:

QgXCCC*:

X>沁X<>沁號CWCC<>XCCCCCCCC曲沖XCeC«林力沁;

¢¢1-

<:

:

=:

;4:

=?

:

:

=?

:

=:

:

/

冃日tflG八?

It也tC々]

□►>z

LaeOUSJJJIi

PO

>⅝!

Huml(T-O)

OOOOOIOi

>IMnum2(7.

OOOOOOIO

►电耶叩®

OiO

►R!

Iz2.0】

OLQ

>⅜∣CoUnterte^

IolIOlI

1¼StI

0

Ifa$12

0

1⅛“

1

1⅛CIk

0

l⅛

1

1⅛曲

0

Name

图7没有紧急At况时主干道和支干道的值号灯的显示状态

图8没有紧急情况时主干道和文干道的信号灯的显示状态

].∣∙∣χ∣

IVaIUC

>IM∏uml(7X>)

QOLIOLOI

►Renum2(7Λ)

OOIIOlQi

►RehghtU2:

0j

100

►Rg∣∙ght2(2X>)

100

►Reα>uMef[60]

IIOlIoI

Io

⅛5t2

1

l⅛en

1

⅛dkIiAdk

1

0

l⅛rst

0

1⅛Γitl

0

I4^hold

1

匕二亠〜I

土亠丄一亠∙∣

2严…1

2.613982

l--2l∖I-X-I-X-I-I-I-I

“亠,…I

∞H0101

j

XXXXXXXX

OolIOIOIJ

XXX

b?

0

1'Γ

:

Co

m

.0:

C

•:

:

»"-0

iιιιιι-

ZXXXXX

OCa

;:

*m>二

n∞∞o∞d

\———————

"""""""

ΓLΓLΓL

ΓLΠ

⅛TΓLΓL∏2Γ⅛⅛LΠJinJ

-T-Lf

~1」

T^J~1

-J-LJLJI

Γ

ZZ_I

■-1

≡nπιuιπ≡r

^UuVUifUiW

RrUUlnf

mi

JmnnJmwUWoI≡πmuιrt

IgF!

G>>∑ImhaX

图9有紧急If况时主干道和支干道的信号灯的显示状态

 

波形仿真主要完成了控制与计数以及数码管显示的波形图。

numlznum2分别表示主干道和支干道的倒计时,num!

=OOIOOOOO主干道计时20秒nUm2二OOIoOlOl支干道计时25秒;Sl用来表示主干道最短通车时间是否已到,到了sl=l;S2用来表示支干道最长通车时间是否已到,到了s2二1,控制输出量从高位到低位分别表示红,黄,绿为IightI=O01,Iight2=100,COUnter用于时钟计数。

hold为紧急情况时主干道和支干道的信号灯为红灯。

图6顶层文件图

结果分析:

仿真结果符合设计要求,交通灯有规律的变化,显示倒计时;在检测支路无车辆和紧急情况下,交通灯可以做岀相应调整。

设计中使用FSM(三段式),此方式描述方法虽然代码结构复杂了一些,但是使FSM做到了同步寄存器输出,有利于实现交通灯控制⑵。

第四章设计总结

这次课程设计,通过对交通等控制器设计,解决了之前课上存在的一些困惑,就是对测资料.・・・

试程序的编写,调试,对于测试程序有了很大的提升。

在程序编写和调试过程中从图书馆借阅了很多相关程序,并对原理和算法进行理解,收获很大。

对于课题,首先进行了单元模块的设计,将每一个单元模块设计完成后再经行仿真,仿真成功后就可以进行顶层文件的编写了,在顶层文件的编写过程中遇到了一些问题,特别是各模块之间的连接,以及信号的定义,总是有错误。

有的时候信号的定义容易出现混淆,在反复的修改过后,顶层文件终于能够编译成功了。

在波形仿真的过程中,同样遇到了困难,有的时候会出现仿真时间过长的问题,这个时候应该修改系统时钟的频率。

在设计的过程中还应该多联系下实际情况,要了解实际情况下交通信号灯的工作情况,才能更好的完成此次的课程设计。

这次的课程设计使我巩固了以前学习到的知识,还使我掌握了以前没有掌握的知识,同时锻炼了自己的能力。

通过这次课程设计,并进一步熟练了对XilinXISE软件的操作。

通过与同学探讨和请教老师,终于把问题都解决了,并加深了对交通灯原理和设计思路的了解。

同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。

做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。

最后参照每个模块把输入和输出引脚设定,运用我们所学的VeriIOg语言进行编程。

总之,通过这次的设计,进一步了解了EDA技术,收获很大,对软件编程,排错调试,相关仪器设备的使用技能等方面得到较全面的锻炼和提高。

程序清单

modulesy(enχlkzqclk∕strstlzhold,numb∩∪m2jightljight2zco∪ntecstbst2);inpute∩,clkZqCIkJStZhOIdZrStl;

OUtPUtStbSt2;

OUtPUt[7:

0]∩umLnum2;

OUtPUt[6:

0]COUnter;

OUtPUt[2:

0]IightlJight2;

regtimLtim2ZStLSt2;

reg[l:

0]StateIZState2zste;

reg[2:

0]IightIJight2;

reg[3:

0]num;

reg[6:

0]counter;

reg[7:

0]nur∩lznum2;

reg[7:

0]red1zred2zgreen1,green2,yellowlZyeIIOW2;

always(en)

if(!

e∩)

begin〃设責计数初值

greenl<=8,b00110101;

redl<=8lb∞l∞101;

yellowl<=8,b0∞00101;

gree∩2<=8,b00100101;

red2<=8lb∞l10101;

yellow2v二8b00000101;

end

always(POSedgeCIk)

begin

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

begin

Iightl<=3,b001;

nUml<=greenl;

end

elseif(hold)

begin

Iightl<=3,b100;

numl<=greenl;

end

elseif(e∩)

begin〃使能有效开始控制计数

If(Itiml)//开始控制

begin〃主干道交通灯点亮控制

tir∩l<=l;

CaSe(StateI)

2*b00:

beginnum1<=greenl;IightlV二3'b001;Statel<=2'b01;end2,b01:

beginnum1<=yellowl;lightl<=3,b010;StateI<=2,bl1;end2,b11:

beginnum1<=red1;Iight1<=3,b100;State1<=2,b10;end2,b10:

beginnum1<=yellow1;light1<=3,b010;State1<=2,b00^nddefault:

IightI<=3,bl00;

endcase

end

else

begin〃倒数计时

if(numl>0)

if(numl[3:

0]==0)

begin

numl[3^]<=4,bl001;

nUmI[7:

4]V二numl[7:

4卜1;

end

elsenur∩l[3:

0]<=numl[3:

0)-1;

if(nUmI==I)timl<=0;

end

end

else

begin

IightI<=3,b010;

numl=2,b00;

timl<=0;

end

end

always(POSedgeCIk)

begin

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

begin

Iight2<=3,bl∞;

num2<=red2;

end

elseif(hold)

begin

Iight2<=3,bl∞;

n∪r∩2<=red2;

end

elseif(e∩)

begin

if(!

tim2)

begin

tim2<=l;

CaSe(StateI)

2'b00:

beginnum2<=red2;Iight2<=3,b100;State2<=2,b01冷nd

2,b0kbeginnum2<=yellowlJight2<=3lb010;State2<=2,b]1Jend

2,bll:

beginnum2<=green2;Iight2v二3'b001;StCIte2v二2'bl0;end

2,b10:

begin∩um2<=yellow2;Iight2<=3,b010;State2<=2*b00;enddefault:

Iight2<=3'b100;

endcase

end

else

begin//倒数计时

if(num2>0)

if(num2[3:

0]==0)

begin

num2[3:

0]v二4'bl001;

num2[7:

4]<=num2[7:

4]-l;

end

elsenum2[3:

0]<=num2[3:

0]-l;

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

end

end

else

begin

tim2<=0;

State2<=2,b00;

Iight2<=3,b010;

end

end

always(POSedgeqclk)

begin〃数码管扫描

if(rstl)

begin

stl=0;

st2=0;

end

else

begin

casθ({st2rstl})

ZbOOibeginnum<=numl[3r0]Xst2zstl}<=2,b01;end2lb0Iibeginnum<=num1[7:

4]:

{st2rst1}<=2,b10;end2*bl0:

beginnum<=num2[3:

0];{st2zstl}<=2,bl1:

end2,bll:

beginnum<=num2[7:

4];{st2zstl}<=2*b00;endendcase

end

end

always(POSedgeqclk)

begin〃数码管译码显示

case(num)

4,b0000:

COUnter<=7,b0111111:

//0

4,b0∞l:

COUnter<=7,b∞00110;/∕1

4,b0010:

COUnter<=7,bIOl1011:

//2

4,b0011:

COUnter<=7,bIOOl111:

//3

4,b0100:

COUnter<=7,bll00110;/∕4

4,b0101:

COUnter<=7,b1101101:

//5

4,b0110:

COUnter<=7,bll11101:

//6

4,b0111:

COUnter<=7,b∞00111;//7

4,bl000:

COUnter<=7,bll11111:

//8

4,bl∞l:

COUnter<=7,b1101111:

//9default:

COUnter<=7,b0111111:

//0endcase

end

endmodule

测试程序:

modulesyy;

//InPUtS

regen;

regelk;

regqclk;

regrst;

regrstl;

reghold;

//OUtPUtS

Wire[7:

0]nUm1;

Wire[7:

0]∩um2;

Wire[2:

0]Iightl;

Wire[2:

0]Iight2;

Wire[6:

0]counter;

Wirestl;

Wirest2;

//InStantiatetheUnitUnderTeSt(UUT)

SyUUt(

.en(en),

.clk(clk)z.qclk(qclk)z

.rst(rst)z.rstl(rstl)z

.hold(hold),

.numl(∩uml)z

.nUm2(num2)z

.1ightl(Iightl),

.1ight2(light2),

・Counter(Counter)r

.stl(stl)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1