PLD交通灯控制器设计报告.docx

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

PLD交通灯控制器设计报告.docx

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

PLD交通灯控制器设计报告.docx

PLD交通灯控制器设计报告

 

数字系统设计报告

 

交通灯控制器

 

一.实验目的

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

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

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

二.设计要求

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

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

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

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

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

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

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

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

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

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

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

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

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

要求显示时间,倒计时。

交通灯控制器框图如下:

 

(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)分频模块:

该模块的功能是将实验箱提供的2MHz的时钟信号,经过分频得到1Hz的时钟信号作为系统工作模块的时钟。

其中set信号控制系统的暂停和开始。

源程序如下:

moduleclk_div(clk,set,out);

inputclk,set;

outputout;

regout;

reg[23:

0]count;//进行计数

parameterN=2000000;

always@(posedgeclk)//clk=2MHz

begin

if(!

set)

begin

count=0;

out=0;

end

else

begin

if(count

begin

count=count+1;

end

else

begin

out=~out;//得到1Hz的方波

count=0;

end

end

end

endmodule

为方便仿真把N的值改为2,仿真波形如下图:

(2)系统工作模块:

该模块中RET信号为复位信号(RET=1时进行复位),C表示有无车辆(C=1表示乡村公路上有车辆),LAMPA控制主干道信号灯的亮灭,LAMPB控制乡村公路信号灯的亮灭,ACOUNTH输出主干道信号倒计时的十位数,ACOUNTL输出主干道信号倒计时的个位数,BCOUNTH输出乡村公路信号倒计时的十位数,BCOUNTL输出主干道信号倒计时的个位数。

当乡村道路上有车时信号灯有四个状态进行循环,图下表所示;

主干道

乡村公路

信号状态

信号时间

LAMPA值

信号状态

信号时间

LAMPB值

绿

25s

1

30s

4

5s

2

4

21s

4

绿

16s

1

4

5s

2

当乡村道路上无车时,如果当前主干道状态为绿灯,倒计时结束之后显示器显示“——”,表示畅行无阻(若当前状态为“——”,则乡道上出现车时,主干道黄灯5秒开始倒计时);若当前主干道状态为上表中第三个状态就直接跳转到第四个状态,具体代码如下:

moduletraffic(CLK,RST,C,LAMPA,LAMPB,ACOUNTH,ACOUNTL,BCOUNTH,BCOUNTL);

output[3:

0]ACOUNTH,ACOUNTL,BCOUNTH,BCOUNTL;

output[2:

0]LAMPA,LAMPB;

inputCLK,RST,C;

reg[2:

0]LAMPA,LAMPB;

reg[7:

0]numa,numb;

reg[3:

0]ACOUNTH,ACOUNTL,BCOUNTH,BCOUNTL;

always@(posedgeCLKorposedgeRST)

begin

if(RST)//进行复位

begin

LAMPA<=1;//主干道始为绿灯

LAMPB<=4;//乡村道路为红灯

numa<=8'b00100101;//主干道计时25秒

numb<=8'b00110000;//乡村道路计时为30秒

end

else

begin

//主干道始为绿灯乡村道路为红灯

if(LAMPA==1&&LAMPB==4)

begin

//乡道无车,主干道绿灯计时结束或正处于畅行无阻状态

if((numa==1&&C==0)||((&numa)==1&&C==0))begin

numa<=8'b11111111;//显示’’——”主干道处于畅行无阻状态

numb<=8'b11111111;

LAMPA<=1;

LAMPB<=4;

end

else

begin

//乡道有车,主干道绿灯计时结束或正处于畅行无阻状态

if((numa==1&&C==1)||((&numa)==1&&C==1))//begin

numa<=8'b00000101;//黄灯设置为5秒

numb<=8'b00000101;

LAMPA<=2;

LAMPB<=4;

end

//其他情况倒计时

else

begin

if(numa[3:

0]==0&&numa[7:

4])

begin

numa[3:

0]<=4'b1001;

numa[7:

4]<=numa[7:

4]-1;

end

else

begin

numa[3:

0]<=numa[3:

0]-1;

end

if(numb[3:

0]==0&&numb[7:

4])

begin

numb[3:

0]<=4'b1001;

numb[7:

4]<=numb[7:

4]-1;

end

else

begin

numb[3:

0]<=numb[3:

0]-1;

end

end

end

end

//主干道黄灯,乡村道路红灯

if(LAMPA==2&&LAMPB==4)

begin

if(numa==1)

begin

numa<=8'b00100001;//设置主干道红灯21秒

numb<=8'b00010110;//设置乡道绿灯16秒

LAMPA<=4;

LAMPB<=1;

end

else

begin

numa[3:

0]<=numa[3:

0]-1;

numb[3:

0]<=numb[3:

0]-1;

end

end

//主干道红灯,乡村道路绿灯

if(LAMPA==4&&LAMPB==1)

begin

if(C==0)//跳过乡道绿灯时间

begin

numa<=8'b00000101;

numb<=8'b00000101;

LAMPA<=4;

LAMPB<=2;

end

else

begin

if(numb==1&&C==1)

begin

numa<=8'b00000101;

numb<=8'b00000101;

LAMPA<=4;

LAMPB<=2;

end

else

begin

if(numa[3:

0]==0&&numa[7:

4])

begin

numa[3:

0]<=4'b1001;

numa[7:

4]<=numa[7:

4]-1;

end

else

begin

numa[3:

0]<=numa[3:

0]-1;

end

if(numb[3:

0]==0&&numb[7:

4])

begin

numb[3:

0]<=4'b1001;

numb[7:

4]<=numb[7:

4]-1;

end

else

begin

numb[3:

0]<=numb[3:

0]-1;

end

end

end

end

//主干道红灯,乡村道路黄灯

if(LAMPA==4&&LAMPB==2)

begin

if(numa==1)

begin

numa<=8'b00100101;//

numb<=8'b00110000;

LAMPA<=1;

LAMPB<=4;

end

else

begin

numa[3:

0]<=numa[3:

0]-1;

numb[3:

0]<=numb[3:

0]-1;

end

end

end

ACOUNTH<=numa[7:

4];

ACOUNTL<=numa[3:

0];

BCOUNTH<=numb[7:

4];

BCOUNTL<=numb[3:

0];

end

endmodule

仿真波形:

乡道一直有车时:

乡道无车时:

(3)八段译码模块:

该模块的功能是将输入的四位信号进行译码,输出到八段共阳极数码管显示出来,用于显示倒计时

moduledecode4_7(decodeout,indec);

output[7:

0]decodeout;

input[3:

0]indec;

reg[7:

0]decodeout;

always@(indec)

begin

case(indec)//进行译码

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;

4'd15:

decodeout<=8'b11111101;//显示“——”

default:

decodeout<=8'bx;

endcase

end

endmodule

仿真波形:

2.顶层文件

仿真图形:

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

四、管脚绑定

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

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

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

LAMPB[2],LAMPB[1],LAMPB[0]分别绑定到另一组红灯,黄灯,绿灯上,这里设定管脚号分别为228,202,220;

ACOUNTH,ACOUNTL,BCOUNTH,BCOUNTL分别绑定到四个数码管上。

五、编译下载

把程序下载到芯片中测试实际结果是否正确。

实验结果:

1.RET复位之后主干道为绿灯(25),乡村道路为红灯(30)。

2.主干道为绿灯,乡村道路为红灯:

若此时乡村道路无车,主干道绿灯计时结束之后,倒计时显示“——”一直持续到乡道上有车为止才变为主干道为黄灯,乡村道路为红灯;若乡道有车主干道绿灯计时结束之后为主干道为黄灯(5),乡村道路为红灯(5)。

3.主干道为黄灯,乡村道路为红灯:

计时结束后主干道为红灯(21),乡道为绿灯(16)。

4.主干道为红灯,乡村道路为绿灯:

若此时乡道上有车,乡村道路计时结束后主干道为红灯(5),乡道为黄灯(5);若此时乡道上无车,不等计时结束状态转为主干道为红灯(5),乡村道路为黄灯(5)。

5.主干道为红灯,乡村道路为黄灯:

计时结束后主干道为绿灯(25),乡村道路为红灯(30)。

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

六、实验总结

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

在编写程序的过程中,我强烈的意识到模块化设计该编程带来很大的便利。

首先你得理清思路,要是下哪些功能,把他们分模块实现,作为底层,最后再把这些底层文件连接起来形成顶层文件。

程序的难度在于逻辑,首先你把程序的格式及常用语句搞明白,只要你的逻辑思路清楚,程序很容易就写出来了。

该程序分为三个模块:

1.分频模块,实际中倒计时间隔为1s,这就需要分频得到1Hz的时钟信号;2.系统工作模块来控制信号灯的现实及倒计时数字的输出;3.八段译码模块来显示系统工作模块输出地倒计时数字。

通过本次实验我基本掌握自顶向下的电子系统设计方法,学会使用PLD和得到硬件描述语言设计数字电路,掌握QuartusII等开发工具的使用方法,提高了独立分析问题、解决问题的能力,感觉颇有收获。

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

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

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

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