交通灯 实习报告
- 格式:docx
- 大小:208.68 KB
- 文档页数:11
xxxxxx学院信息工程学院
数字系统课程设计报告书
课题名称:基于FPGA的交通灯设计
院系:信息工程学院信工系
姓名学号:xxxxxxxx
专业班级:xxxxxxxxxxxx
指导教师:xxxxxxxxxxx
设计时间: 2015-2016学年第2学期15-16周
2016年 6月 28日
目录
1、摘要 (2)
2、设计内容及要求 (2)
3、系统设计总体方案及设计原理 (3)
4、各模块电路设计与实现 (3)
4.1时钟分频模块 (3)
4.2计数模块和交通信号灯电路模块 (4)
4.3时序状态控制模块 (6)
5、设计检测结果 (8)
参考文献 (10)
摘要:
交通灯控制系统的设计主要利用计数器,用做时间显示电路,定时器构成多谐振荡器为控制系统提供时钟,D触发器在输入高电平时具有翻转特性来控制黄灯闪烁,十字路口东西与南北方向的交通灯相互交替亮,黄灯在红绿灯都不亮时闪烁的特点来设计信号灯控制电路。
在该设计的制作过程中Quartus II9.1综合性PLD开发平台和Verilog HDL 硬件描述语言必不可少的工具。设计的各个模块功能都要运用到Verilog HDL 硬件描述语言、Quartus II9.1综合性PLD开发平台对其进行编写和模拟仿真。本次实习是基于FPGA设计交通灯系统的一种新方案,本设计就是针对交通信号灯控制器的设计问题,提出了基于verilog语言的交通信号灯系统的硬件实现方法。分频、计时、显示等各个模块的verilog程序,用verilog语言进行电路设计时,应充分认识到verilog语言的特点,从设计思想、语句运用及描述硬件方法上等多方面对电路进行优化设计。
关键词:可编程逻辑器件;交通灯;Quartus II 9.1
2设计内容及要求
(1)设计内容
交通灯控制器是可以自动控制交通灯,以倒计时的方式显示时间。交通灯控制器是以七段显示数码管显示时间,以发光二极管模仿交通灯,在这次实验中,采用的是基本的数字芯片和发光二极管来实现这样的要求。
(2)设计要求
1.主道路绿、黄、红灯亮的时间分别为30秒、5秒、65秒;
2.次道路绿、黄、红灯亮的时间分别为60秒、5秒、35秒;
3.主、次道路时间指示采用倒计时制,用2位数码管显示。
3系统设计总体方案及设计原理如图3-1
图3-1 系统设计框架
采用模块化层次设计,共分为4个模块(分频,计数,交通信号灯,时序状态)
4频模块设计与实现
4.1时钟分频模块
分频模块输入为50MHZ的矩形脉冲信号,要求输出为1HZ(用于时钟计时)、1000H(用于decode显示器显示)分频模块的源代码为:
module fp50(cp_50mhz,clk_1hz,clk_1khz);
input cp_50mhz;
output clk_1hz,clk_1khz;
reg clk_1hz,clk_1khz;
reg [27:0]count,count1;
always@ (posedge cp_50mhz)
begin
if(count==24999999)
begin
clk_1hz=~clk_1hz;
count=0;
end
else begin
count=count+1;
end
end
always@ (posedge cp_50mhz)
begin
if(count1==24999)
begin
clk_1khz=~clk_1khz;
count1=0;
end
else begin
count1=count1+1;
end
end
Endmodule
分频模块如图4-1
图4-1 分频模块4.2计数模块和交通信号灯电路模块
交通灯控制器
/* 信号定义与说明:
CLK:为同步时钟;
EN:使能信号,为1 的话,则控制器开始工作;
模块源代码为:
module jiao_tong_deng(ra,ga,ya,rb,gb,yb,clk1hz,jin,qh,ql);
input jin;
input clk1hz; //输入分频信号
output ra,ga,ya,rb,gb,yb; //输出主干道和次干道红绿灯output qh,ql;
reg [1:0]dig;
reg [6:0]seg;
reg ra,ga,ya,rb,gb,yb;
reg [1:0]state,next_state;
parameter state0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;
reg [3:0]one,ten;reg [1:0]cnt;
reg [3:0]data;reg [6:0]seg_temp;
reg r1,g1,y1,r2,g2,y2;reg [13:0]count1;
reg [8:0]count2;reg a;
reg [3:0]qh,ql;always @(posedge clk1hz)
Begin //设置各种灯的计数器置数state=next_state;
case(state)
state0:begin
if(!jin)
Begin if(!a) q h<='b0011;
Begin
qh<='b0010;ql<='b0100;a<=1;r1<=1;y1<=0;g1<=0;r2<=0;y2<=0;g2<=1;
end
else
state3:begin
if(!jin)
Begin