PLD交通灯控制器设计报告.docx
《PLD交通灯控制器设计报告.docx》由会员分享,可在线阅读,更多相关《PLD交通灯控制器设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
![PLD交通灯控制器设计报告.docx](https://file1.bdocx.com/fileroot1/2022-11/16/84fc18d4-f5b4-47f1-bd2b-33dd06d26601/84fc18d4-f5b4-47f1-bd2b-33dd06d266011.gif)
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(countbegin
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=