基于FPGA的智能交通灯_基于fpga的智能交通灯
基于FPGA的智能交通灯由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于fpga的智能交通灯”。
设计题目: 基于FPGA的交通灯控制系统设计
专 业:
学生姓名: 学 号:
起迄日期: 2014.8.22.--2014.9.22.指导教师: 教研室主任:
目录
1.绪论..............................................................1 2.课题研究背景及意义................................................1 3.设计要求..........................................................1 4.设计方案..........................................................1 4.1方案比较....................................错误!未定义书签。4.2 方案说明...................................错误!未定义书签。5.VHDL语言介绍...................................错误!未定义书签。6.系统仿真..........................................................3 6.1 系统电路框图................................................4 6.2设计结果仿真.................................................4 7.心得体会..........................................................5 8.参考文献..........................................................6 7.附件..............................................................6
摘要:针对现实中越来越严重的城市交通拥堵现象,提出了一种城市十字路口交通信号灯控制与FPGA实现的新方法。设计的智能交通控制系统利用对相向车道采用不同步的红绿灯信号控制方法,能够减少交通资源浪费,大幅提高十字路口的车辆通行效率。利用超高速硬件描述语言VHDL设计十字路口交通信号灯控制器,实现主干道和支干道的交通控制功能,并通过Quartus II完成综合、仿真、进行管脚分配、绘出仿真波形及原理图。
关键字:硬件描述语言VHDL;交通信号灯;智能控制
1.绪论
智能的交通灯指挥着人们和各种车辆的安全运行,实现红、黄、绿灯的自动指挥是城乡交通管理现代化的重要课题。在城乡街道的十字交叉路口,为了保证交通秩序和行人的安全,一般在每条街道上各有一组红、黄、绿交通信号灯,其中红灯亮,表示该条道禁止通行;黄灯亮该条道路上未过停车线的停止通行,已过停车线的车辆继续通行;绿灯亮,表示该条道路允许通行。交通灯自动控制十字路口两组红、黄、绿交通灯的状态转换,指挥各种车辆和行人安全通行。实现十字路口交通管理自动化。
DEA技术的发展和应用领域的扩大与深入,在电子信息,通信,自动,控制及计算机应用等领域的重要性日益突出,因此本论文研究基于FPGA的交通灯设计。FPGA中有大量实现组合逻辑的资源,可以完成较大规模的组合逻辑电路设计,而其中相当数量的存储电路(触发器)又可完成复杂的时序逻辑电路设计。通过使用各种EDA工具,用原理图或硬件描述语言,可以很方便地将复杂的电路在FPGA中实现。像典型的数字系统分频器,数字钟,数字频率计等等都可用FPGA完成。本文以QuartusII 软件为开发平台,通过VHDL硬件描述语言以及原理图的输入方式来设计交通灯。
2.课题研究背景及意义
随着公路交通运输的发展,交通拥挤、道路阻塞和交通事故频繁发生等问题越来越严重地困扰着世界各大城市。相对于交通运输工具的飞速发展,我国交通配套设施建设明显滞后,道路安全网络、道路标识、交通指挥中心仍然不足。单独从车辆方面或道路方面考虑,均很难有效地解决交通问题。通过采用信息通信技术、电子技术以及其他科学技术把它们联系起来,并实现智能化的交通控制才能解决根本问题,交通信息化需要融合科技力量才能使目前的交通问题得到改善。
在现代文明高速发展的社会,道路的高度发达使得整个社会进步的速度进一步的加快,交通灯的出现是社会发展的必然产物。交通灯在道路事业中占有举足轻重的地位,它直接影响到公路以及市区内的通车质量。所以,智能交通灯的研究具有重大意义。
3.设计要求
主干道绿灯亮支干道红灯亮时间是50秒,接下来黄灯闪烁5秒,此时主干道的绿灯和支干道的红灯继续亮;然后是主干道红灯亮支干道绿灯亮,时间为20秒,再黄灯闪5秒同时主干道的红灯和支干道的绿灯也继续亮。
4.设计方案
首先根据系统的需要进行分析。系统要求主干道绿灯亮支干道红灯亮时间是50秒,接下来黄灯闪烁5秒,此时主干道的绿灯和支干道的红灯继续亮,然后是主干道红灯亮支干道绿灯亮时间为20秒,再黄灯闪5秒同时主干道的红灯和支干道的绿灯也继续亮。
因此将整个系统分为计时模块和控制模块组成。计时模块中秒模块主要将50MHZ的时钟进行分频得到20ns的时钟信号,再将信号50000000倍得到秒信号。控制模块由交通灯控制模块以及黄灯闪烁模块构成。
Verilog HDL语言介绍 5.1 Verilog HDL特点
Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰地模拟、仿真语义。使用这种语言编写的模型可以方便地使用Verilog仿真器进行验证。Verilog HDL从C语言继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力和扩展模块。
Verilog HDL之所以成为和VHDL并驾齐驱的描述语言,以为它有如下特点:
(1)基本逻辑门,例如and、or和nand等都内置在语言中。
(2)用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。
(3)开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。(4)提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。
(5)可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。
(6)Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。
(7)能够描述层次设计,可使用模块实例结构描述任何层次。设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级。
(8)设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。Verilog HDL不再是某些公司的专有语言而是IEEE标准。人和机器都可阅读Verilog 语言,因此它可作为EDA的工具和设计者之间的交互语言。
5.2Verilog HDL程序基本结构
模块是Verilog HDL的基本描述单位,描述某个设计的功能或结构及与其他模块通信的外部端口。一个模块的基本语法如下:
module module_name//模块名称
(port_list);//输入输出信号列表//说明 reg//寄存器wire//线网
parameter//参数 input//输入信号 output//输出信号 inout//输入输出信号 function//函数 task//任务 …//语句
Initial statement Always statement Module instantiation// Gate instantiation// UDP instantiation// Continuous aignment// Endmodule 说明部分用于定义不同的项,例如模块描述中使用寄存器和参数、语句定义设计的功能和结构。说明部分和语句可以放置在模块的任何地方,但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性,最好将所有的说明部分放在语句前。
6.系统仿真
本文的仿真是在QuartuslI上进行的。QuartuslI 是 Altera 提供的 FPGA/CPLD 开发集成环境,Altera 是世界上最大的可编程逻辑器件供应商之一。QimrtiisII在21世纪 初推出,是Altera前一代FPGA/CPLD集成开发环境MAX+plusII的更 新换代产品,其界面友好,使用便捷。QuartiisII提供了一种与结构 无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件 编程。
Altera的QuartusII提供了完整的多平台设计环境,能满足各 种特定设计的需要,也是单芯片可编程系统(SOPC)设计的综合性环 境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模 型设计提供了集成综合环境。
QuartusII包括模块化的编辑器。编辑器包括的功能模块有分析 /综合器、适配器、装配器、时序分析器、设计辅助模块、EDA网表 文件生成器、编辑数据接口等。可以通过选择Start Compilation来运行所有的编辑器模块,也可以选择单独运行各个模块。
基于Quartus II的设计流程:
(1)建立工作库文件夹和编辑设计文件(2)创建工程;(3)全程编译工程;(4)时序仿真;(5)引脚锁定;
(6)下载至硬件系统验证。
6.1 系统电路框图
系统整体电路设计采用原理图输入法,将各个模块包括子模块进行连接,得到系统的电路框图如下图所示。
图三 系统整体电路图
6.2设计结果仿真
利用Quartus II软件对本设计的程序进行编译,得到系统的仿真图。
交通灯运行时时序仿真图1
交通灯运行时时序仿真图1
7.心得体会
在这次课程设计中,我再一次的体验到了细心对一个编程者的重要性,和程序的规范性对于程序的重要性,这些平时我们忽略的问题,其实有时候关乎着我们编程的成功与否的。
在verilog语言中,我们必须注意其与C语言的异同,比如格式和变量定义,还有模块的调用,和时钟信号的应用。我觉得需要在以后多加练习,可以对以后的学习和工作带来莫大的帮助。这次的课程设计相对以前的较难,其实就是对我们的一次考核,也是一次考验,它培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。然而从理论到实践的转化过程,我在做课程设计的近一个月时间里,有了更进一步的认识和了解,要想学知识要重在实践,要通过不断的实际操作才能更好地学习。
通过这次课程设计,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能
力。在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知解得不够深刻,掌握得不够牢固。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
8.参考文献
(1)程云长.可编程逻辑器件与VHDL语言[M].北京:科学出版社,2005(2)黄智伟.全国大学生电子设计竞赛系统设计[M].北京:北京航空航天大学出版社,2006(3)黄智伟.全国大学生电子设计竞赛电路设计[M].北京:北京航空航天大学出版社,2006(4)黄智伟.全国大学生电子设计竞赛 常用电路模块制作[M].北京:北京航空航天大学出版社,2010(5)黄智伟等.基于NI multisim的电子电路计算机仿真设计与分析[M].北京:电子工业出版社,2007(6)黄智伟.印制电路板(PCB)设计技术与实践[M].北京:电子工业出版社,2009(7)高吉祥等.电子技术基础实验与课程设计[M].北京:电子工业出版社,2002(8)潘松.EDA技术实用教程[M].科学出版社.2005
7.附件 原程序
`timescale 100ms / 1us //程序中的时间单位和仿真精度。module signal_led(clk, rst_n, traffic_signal_master_red, traffic_signal_master_green, traffic_signal_master_yellow, traffic_signal_slave_red, traffic_signal_slave_green, traffic_signal_slave_yellow);input clk;input rst_n;output reg
traffic_signal_master_red;// 交通信号灯主干道红灯
output reg
traffic_signal_master_green;// 交通信号灯主干道绿灯
output reg
traffic_signal_master_yellow;// 交通信号灯主干道黄灯 output reg
traffic_signal_slave_red;// 交通信号灯次干道红灯
output reg
traffic_signal_slave_green;// 交通信号灯次干道绿灯
output reg
traffic_signal_slave_yellow;// 交通信号灯次干道黄灯
reg signal_red_led;reg signal_green_led;reg signal_yellow_led;reg [31:0] traffic_signal_cnt;parameter
LED_ON
= 1'b0;// 1亮
parameter
LED_OFF
= 1'b1;// 0灭
parameter
TIME_CELL
= 32'd50000000;// 时间单元时间 = Time_cell * 20ns(50MHz主频)parameter START = 32'd0;parameter MASTER_GREEN = TIME_CELL * 20;parameter MASTER_YELLOW_1 = TIME_CELL * 20 + TIME_CELL;parameter MASTER_YELLOW_2 = TIME_CELL * 20 + 2 * TIME_CELL;parameter MASTER_YELLOW_3 = TIME_CELL * 20 + 3 * TIME_CELL;parameter MASTER_YELLOW_4 = TIME_CELL * 20 + 4 * TIME_CELL;parameter MASTER_YELLOW_5 = TIME_CELL * 20 + 5 * TIME_CELL;parameter SLAVE_GREEN = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20;parameter SLAVE_YELLOW_1 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + TIME_CELL;parameter SLAVE_YELLOW_2 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 2 * TIME_CELL;parameter SLAVE_YELLOW_3 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 3 * TIME_CELL;parameter SLAVE_YELLOW_4 = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 4 * TIME_CELL;parameter TOTAL_TIME = TIME_CELL * 20 + 5 * TIME_CELL + TIME_CELL * 20 + 5 * TIME_CELL;
//******************************************************************* // 模块名称:时间计数种子 // 功能描述
//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)traffic_signal_cnt
//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)
begin signal_red_led
:
begin signal_red_led
:
begin signal_red_led
begin signal_red_led
MASTER_YELLOW_2 :
begin signal_red_led
begin signal_red_led
begin signal_red_led
begin signal_red_led
:
begin signal_red_led
begin signal_red_led
begin signal_red_led
begin signal_red_led
begin signal_red_led
//******************************************************************* always @(posedge clk or negedge rst_n)begin if(!rst_n)begin traffic_signal_master_red
traffic_signal_master_red