数字系统课程设计交通灯控制器实验报告.docx

上传人:b****6 文档编号:8648056 上传时间:2023-02-01 格式:DOCX 页数:16 大小:168.59KB
下载 相关 举报
数字系统课程设计交通灯控制器实验报告.docx_第1页
第1页 / 共16页
数字系统课程设计交通灯控制器实验报告.docx_第2页
第2页 / 共16页
数字系统课程设计交通灯控制器实验报告.docx_第3页
第3页 / 共16页
数字系统课程设计交通灯控制器实验报告.docx_第4页
第4页 / 共16页
数字系统课程设计交通灯控制器实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数字系统课程设计交通灯控制器实验报告.docx

《数字系统课程设计交通灯控制器实验报告.docx》由会员分享,可在线阅读,更多相关《数字系统课程设计交通灯控制器实验报告.docx(16页珍藏版)》请在冰豆网上搜索。

数字系统课程设计交通灯控制器实验报告.docx

数字系统课程设计交通灯控制器实验报告

 

交通灯控制器

——数字系统设计报告

 

姓名:

学号:

 

一.实验目的

1.基本掌握自顶向下的电子系统设计方法

2.学会使用PLD和硬件描述语言设计数字电路,掌握QuartusII等开发工具的使用方法

3.培养学生自主学习、正确分析和解决问题的能力

二.设计要求

我所选择的课题是用VerilogHDL实现交通灯控制器。

该课题的具体内容及要求如下:

主干道与乡村公路十字交叉路口在现代化的农村星罗棋布,为确保车辆安全、迅速地通过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。

红灯禁止通行;绿灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。

主干道和乡村公路都安装了传感器,检测车辆通行情况,用于主干道的优先权控制。

(1)当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。

(2)当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通行。

主干道最短通车时间为25s。

(3)当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行。

(4)不论主干道情况如何,乡村公路通车最长时间为16s。

(5)在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。

(6)用开关代替传感器作为检测车辆是否到来的信号。

用红、绿、黄三种颜色的发光二极管作交通灯。

(7)要求显示时间,倒计时。

交通灯控制器框图如下:

 

(C表示乡村道路是否有车到来,1表示有,0表示无;SET用来控制系统的开始及停止;RST是复位信号,高电平有效,当RST=1时,恢复到初始设置;CLK是外加时钟信号;MR、MY、MG分别表示主干道的红灯、黄灯和绿灯;CR、CY、CG分别表示乡村道路的红灯、黄灯和绿灯,1表示亮,0表示灭)

系统流程图如下:

(MGCR:

主干道绿灯,乡村道路红灯;MYCR:

主干道黄灯,乡村道路红灯;MRCG:

主干道红灯,乡村道路绿灯;MRCY:

主干道红灯,乡村道路黄灯;T0=1表示主干道最短通车时间到,T1=1表示5秒黄灯时间到,T2=1表示乡村道路最长通车时间到。

 

 

 

三.设计方案

本交通灯控制系统设计利用VerilogHDL语言进行设计编程,利用CycloneEP1C6Q240C8芯片和一些外围器件组成硬件电路,利用QUARTUSII软件将编写好的程序进行编译、仿真,并将调试完成的程序下载到CycloneEP1C6Q240C8芯片上,观测电路板上的红绿信号灯以及数码管显示,看是否按设计要求正常工作.

四、设计流程

本系统采用自顶向下的设计,设计一个顶层文件和三个底层文件。

各模块关系如下:

设计文件如下:

1.低层文件

(1)系统工作模块(traffic1)如下:

功能:

该模块完成对输入信号CLK,rst,c的处理,实现交通灯控制的主要功能。

源程序:

moduletraffic1(CLK,rst,c,LAMPA,LAMPB,TAH,TAL,TBH,TBL);

output[3:

0]TAH,TAL,TBH,TBL;//TAH,TAL分别表示主干道倒计时的高位和低位,TBH,TBL表示乡村道路倒计时的高位和低位

output[2:

0]LAMPA,LAMPB;//从高位到低位分别表示红,黄,绿

inputCLK,rst,c;

reg[7:

0]numa,numb,s1,s2;//numa,numb分别表示主干道和乡村道路的倒计时;s1用来表示主干道最短通车时间是否已到,到了s1=1;s2用来表示乡村道路最长通车时间是否已到,到了s2=1

reg[3:

0]TAH,TAL,TBH,TBL;

reg[2:

0]LAMPA,LAMPB;

always@(posedgeCLKorposedgerst)//该进程控制主道方向的四种灯

begin

if(rst)//重置

begin

LAMPA=1;LAMPB=4;//重置情况视乡村道路无车,主干道一直通行

numa=8'b00100000;//主干道计时20秒

numb=8'b00100101;//乡村道路计时25秒

end

else

begin

if(LAMPA==1)//主干道绿灯亮

begin

if(numa==1&&c==0&&s1)//主干道最短通车时间已到,但乡村道路没车

begin

numa=1;//倒计时停在1秒

LAMPA=1;//保持在主干道绿灯

end

elseif(numa==1&&c==1&&s1)//主干道最短通车时间没到,并且乡村道路有车

begin//主干道变黄灯倒计时变成5秒

s1=0;

LAMPA=2;

numa=8'b00000110;//为了配合时钟设置为6秒

end

else

begin

if(numa[3:

0]==0&&numa[7:

4])//逢十时

begin

numa[3:

0]=9;

numa[7:

4]=numa[7:

4]-1;

end

else

if(numa[7:

0]&&numa[3:

0])

begin

numa[3:

0]=numa[3:

0]-1;

end

if(numa==0)

begin//主干道变黄灯倒计时变成5秒

LAMPA=2;

numa=8'b00000110;//为了配合时钟设置为6秒

end

end

end

if(LAMPA==2)//假如主干道是黄灯

begin

if(numa[3:

0]==0&&numa[7:

4])//开始主干道黄灯的倒计时

begin

numa[3:

0]=9;

numa[7:

4]=numa[7:

4]-1;

end

else

if(numa[7:

0]&&numa[3:

0])

begin

numa[3:

0]=numa[3:

0]-1;

end

if(numa[7:

0]==0)//黄灯倒计时时间到

begin

if(c)//乡村道路有车

begin//主干道变红灯,倒计时变成16秒

LAMPA=4;

numa=8'b00010111;//为了配合时钟设置为17秒

end

elseif(!

c)

begin

s1=1;

LAMPA=1;

numa=8'b00000001;//主干道计时1秒

end

end

end

if(LAMPA==4&&c)//假如主干道是红灯并且乡村道路有车

begin

if(numa[3:

0]==0&&numa[7:

4])//开始主干道红灯的倒计时

begin

numa[3:

0]=9;

numa[7:

4]=numa[7:

4]-1;

end

else

if(numa[7:

0]&&numa[3:

0])

begin

numa[3:

0]=numa[3:

0]-1;

end

if(numa==0)//红灯倒计时到

begin//主干道变绿灯,倒计时变成20秒

LAMPA=1;

numa=8'b00100000;

end

end

if(LAMPA==4&&!

c&&numa>5)//假如主干道是红灯并且乡村道路无车并且倒计时时间大于5米秒,使主干道倒计时变成5秒

begin//主干道仍是红灯,倒计时变成5秒

numa=8'b00000110;

end

if(LAMPA==4&&!

c&&numa<7)

begin

if(numa[3:

0]==0&&numa[7:

4])//开始主干道5秒的倒计时

begin

numa[3:

0]=9;

numa[7:

4]=numa[7:

4]-1;

end

else

if(numa[7:

0]&&numa[3:

0])

begin

numa[3:

0]=numa[3:

0]-1;

end

if(numa==0)//5秒倒计时到

begin//主干道变绿灯,倒计时变成20秒

LAMPA=1;

numa=8'b00100000;

end

end

if(LAMPB==4)//乡村道路红灯亮

begin//开始乡村道路红灯的倒计时

if(c==0&&numb==1)numb=1;

if(c==1&&numb==1&&s2==1)

begin

numb=5;

s2=0;

end

else

begin

if(numb[3:

0]==0&&numb[7:

4])//逢十时

begin

numb[3:

0]=9;

numb[7:

4]=numb[7:

4]-1;

end

else

if(numb&&numb[3:

0])

begin

numb[3:

0]=numb[3:

0]-1;

end

if(numb==0)//红灯时间到

begin

if(c)

begin//乡村道路变绿灯,倒计时变11秒

LAMPB=1;

numb=8'b00010010;

end

elseif(!

c)

begin

LAMPB=4;

numb=8'b00000001;//乡村道路计时1

s2=1;//s置为1;

end

end

end

end

if(LAMPB==1&&c)//假如乡村道路是绿灯并且乡村道路有车并且倒计时大于五秒

begin

if(numb[3:

0]==0&&numb[7:

4])//开始乡村道路绿灯的倒计时

begin

numb[3:

0]=9;

numb[7:

4]=numb[7:

4]-1;

end

else

if(numb&&numb[3:

0])

begin

numb[3:

0]=numb[3:

0]-1;

end

if(numb==0)//绿灯倒计时时间到

begin//乡村道路变黄灯,倒计时变成5秒

LAMPB=2;

numb=8'b00000110;

end

end

if(LAMPB==1&&!

c)//假如乡村道路是绿灯并且乡村道路无车

begin//绿灯变黄灯,倒计时变成5秒

LAMPB=2;

numb=8'b00000110;

end

if(LAMPB==2)//假如乡村道路是黄灯

begin

if(numb[3:

0]==0&&numb[7:

4])//开始乡村道路黄灯的倒计时

begin

numb[3:

0]=9;

numb[7:

4]=numb[7:

4]-1;

end

else

if(numb&&numb[3:

0])

begin

numb[3:

0]=numb[3:

0]-1;

end

if(numb==0)//黄灯倒计时时间到

begin//乡村道路变红灯,倒计时变成25秒

LAMPB=4;

numb=8'b00100101;

end

end

end

TAH=numa[7:

4];

TAL=numa[3:

0];

TBH=numb[7:

4];

TBL=numb[3:

0];

end

endmodule

仿真结果:

对该模块进行仿真,考虑各种情况,结果如下:

1)乡村道路一直没车,即c=0:

可以看到主干道是绿灯20秒,黄灯5秒,然后变成绿灯,倒计时停在1秒,乡村道路一直是红灯,倒计时从25一直到1停止。

2)乡村道路开始没车,T时间后(T<25秒)有车来:

从图中可以看出主干道绿灯20秒后变成黄灯,5秒后变成红灯,16秒后又变成绿灯,乡村道路红灯25秒后变成绿灯,11秒后变成黄灯,5秒后又变成红灯。

符合设计要求。

3)乡村道路开始没车,T时间后(T>25秒)有车来:

从图中可以看到开始时c=0,主干道绿灯20秒后变成黄灯,5秒后由于没车又变成绿灯,倒计时停在1,乡村道路红灯25秒后变成绿灯,倒计时停在1。

c变成1后,主干道变成黄灯倒计时5秒,之后变成红灯,乡村道路红灯倒计时5秒后变成绿灯,再后面的变化同情况2。

4)当乡村道路为绿灯时c变成0:

可以看到,当乡村道路为绿灯,c变成0时,乡村道路立刻变成黄灯,倒计时5秒后变成红灯,而主干道红灯倒计时5秒后变成绿灯。

(2)八段译码模块(decode4_7)如下:

功能:

将输入的四位信号进行译码,输出到八段共阳极数码管显示出来。

用于显示倒计时。

源程序:

moduledecode4_7(decodeout,indec);

output[7:

0]decodeout;

input[3:

0]indec;

reg[7:

0]decodeout;

always@(indec)

begin

case(indec)//用case语句进行译码,小数点始终不亮

4'd0:

decodeout=8'b00000011;

4'd1:

decodeout=8'b10011111;

4'd2:

decodeout=8'b00100101;

4'd3:

decodeout=8'b00001101;

4'd4:

decodeout=8'b10011001;

4'd5:

decodeout=8'b01001001;

4'd6:

decodeout=8'b01000001;

4'd7:

decodeout=8'b00011111;

4'd8:

decodeout=8'b00000001;

4'd9:

decodeout=8'b00001001;

default:

decodeout=8'bx;

endcase

end

endmodule

仿真结果:

从图中可以看到输入0~9,输出与之对应的八段码,结果正确。

(3)分频模块(blk1)如下:

功能:

由于实验箱提供的是2MHZ的时钟信号,为了得到1HZ的时钟信号,要对输入时钟信号进行2000000分频。

得到合适的时钟信号。

set信号可以控制系统的起始及终止。

源程序:

moduleblk1(clk,set,out);

inputclk,set;//基频与使能

outputout;//分频后的输出

regout;

reg[23:

0]count1,count2;//count1用于记录时钟总数,count2用于记录经过了多少个时钟周期

 

always@(posedgeclk)

begin

if(set)

begin

count1=1000000;//实际下载时改成500000,方便看到结果count1=count1-1;

count2=0;

out=0;

end

else

begin

if(count2

begin

count2=count2+1;

end

else

begin

out=~out;

count2=0;

end

end

end

endmodule

仿真结果:

由于2000000分频看不出仿真结果,这里改成4分频。

如图,当set信号有一个正跳变之后,out才开始有输出。

而之后set为高电平时,out停止产生时钟信号,相当于起到暂停的作用。

另外,可以看出out的频率是clk的1/4,实现了4分频。

2.顶层文件

交通灯控制器(jiaotongdeng):

由三个底层模块构成,结构图如下:

仿真结果:

分析亮灯情况及倒计时情况,与设计要求相符合,仿真结果正确。

五、管脚绑定

clk绑定到晶振时钟信号,设定管脚号为28;

rst,c,set分别绑定到三个乒乓开关,这里设定管脚号分别为139,138,137;

LAMPA[0],LAMPA[1],LAMPA[2]分别绑定到绿灯,黄灯,红灯上,这里设定管脚号分别为221,204,233;

LAMPB[0],LAMPB[1],LAMPB[2]分别绑定到绿灯,黄灯,红灯上,这里设定管脚号分别为206,186,222;

TAH[0]~TAH[7],TAL[0]~TAL[7],TBH[0]~TBH[7],TBL[0]~TBL[7]分别绑定到四个数码管上,管脚号这里就不一一赘述。

六、编译下载,验证结果。

实验结果分析:

c为乡村道路信号,当c=0时,即乡村道路无车,主干道经过绿灯20秒,黄灯5秒,此时若c=1,则变成红灯,倒计时变成16秒,否则,又回到绿灯,倒计时停在1;乡村道路经过红灯25秒,此时若c=1,则变成绿灯,倒计时变成11秒,否则仍为红灯,倒计时停在1秒。

如果开始时c=0,经过一段时间后有车来,假设此时主干道通行时间已经超过最短通行时间25秒,则主干道变黄灯,倒计时5秒后变红灯,乡村道路红灯倒计时5秒后变绿灯。

假设乡村道路绿灯时,c=0,则不管乡村道路倒计时有没有到1都变黄灯,5秒后变红灯,主干道倒计时5秒后变绿灯。

分析实验结果可以看到该系统实现了所有设计要求,运行结果正确。

七、实验总结

该设计用了3个底层模块和一个顶层文件,总体思路比较清晰,实现了交通灯控制器的各种功能,还有主干道和乡村道路的倒计时显示。

八、实验心得

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

当前位置:首页 > 高等教育 > 工学

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

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