基于FPGA的交通灯课程设计报告_第1页
基于FPGA的交通灯课程设计报告_第2页
基于FPGA的交通灯课程设计报告_第3页
基于FPGA的交通灯课程设计报告_第4页
基于FPGA的交通灯课程设计报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

现代通信网设计报告课程名称: 现代通信网课程设计 设计名称: 基于FPGA的交通灯设计 姓 名: 学 号: 班 级: 指导教师: 起止日期: 方 向 设 计 任 务 书学生班级: 学生姓名: 学号: 设计名称: 基于FPGA的交通灯设计 起止日期: 指导教师: 设计要求: 应用场景如图所示,主干道通行时间100s,次干道通行时间30s,黄灯时间5s,要求实现上述场景的交通灯设计,并能实现交警对红绿灯的任意控制。 方 向 设 计 学 生 日 志时间设计内容2016.06.04-05ISE软件安装,学习并应用熟悉ISE软件2016.06.06-09学习FPGA教材相关知识,参考教材交通灯设计例题2016.06.12-13设计题目分析,构造设计思路2016.06.14-18各模块程序代码的编写,修改2016.06.19-21程序代码整合,调试,修改,并进行仿真测试2016.06.25对相关的FPGA管脚地认知,学习2016.06.26-28绑定管脚,下载程序到板子上运行调试2016.06.29-30编写,完善课程设计报告18基于FPGA的交通灯设计一、 摘要 交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要作用。据了解,传统的交通灯是定时控制的,即控制时间是预先已经设定好的,这样不利于实时控制交通信号,不能根据实际情况及时的调整交通信号,容易导致道路资源,时间的浪费,同时也不便于突发情况的预处理。通过这次的课程设计,我将对此情况作出一些改进行的设计。我将基于FPGA设计交通灯控制系统,为了对交通灯系统进行精确控制,采用FPGA实验板,在ISE软件环境下,分别实现脉冲发生模块、状态定时模块、交通灯显示模块进行仿真实验和硬件下载,获得的测试结果满足设计要求。二、 设计目的和意义狭义上,通过本次课程设计,应用基于FPGA的现代数字系统设计以及现代通信网和通信原理等所学的相关知识,完成简易的十字路口交通灯控制通信系统设计,达到理论和实践的有效结合,进一步提高我们综合应用所学知识和设计能力。并且经过这次设计,可以让我对FPGA的相关知识有更深一层的认识,对ISE程序设计软件有了更清楚的认知,对通信的基本架构也有清晰的理解。通过本次的设计,对交通信号灯的控制,工作原理有了进一步的认知,这对以后根据发展后的实际情况对信号灯的控制进行进一步的修改,完善,奠定了一定基础,同时也让自己获得了一点软件系统设计的经验。 培养动手能力,能够实际操作,有利于以后工作生活,让我们体会到通信的根本含义。 宏观上,由于采用了EDA技术,使数字系统设计的效率显著提高。FPGA技术飞速发展,FPGA的应用领域不断扩大,用FPGA来设计交通灯控制器是现代社会交通的需要,FPGA侵蚀原有ASIC市场的用量极为可观。此也成为近年来众人关注FPGA的首要焦点,不过也因为过于聚焦高用量、大市场的观察,使FPGA的其他新应用发展被人所忽略,但这些应用却也极具意义。三、 设计原理3.1、功能描述:实现一个由一条主干道和一条支干道的汇合点形成的十字路口的交通灯控制 器,具体功能:(1) 主、支干道各设有一个绿、黄、红指示灯(用LED灯表示)。(2) 主干道处于长允许通行状态,而支干道有车来时才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。(3) 当主干道、支干道均有车时,两者交替允许通行,主干道每次通行100s,支干道每次通行30秒,在每次由绿灯向红灯转换的过程中,要亮5秒的黄灯作为过渡,并进行减计时显示。每个周期结束时都要进行支干道是否有车的检测,若有车则进行下一个周期,若没有,则主干道亮绿灯,支干道亮红灯,直到检测到支干道有车。3.2、系统原理图 根据题目要求,设计如下总的系统框图绿黄绿红红黄 时钟信号 主 控 制 器 状态选择信号 清零复位 定 时 计 数 器交通灯控制系统框图3.3、系统的引脚根据3.1系统框图,很明显可得出系统设计时,各个引脚的情况(即系统的输入输出引脚分别有哪些)。具体的引脚情况如下表:I/O管脚的描述名称方向电平位宽功能 clkInput3.3V1系统时钟信号(50MHZ)MODE_SEL Input3.3V3输入控制模式信号rst Input3.3V1复位信号以及6个LED灯连接引脚。系统的引脚描述表注:MODE_SEL为3位的开关控制信号输入,用于选择控制十字路口灯光的亮灭状态,其具体更能如下000:正常模式,红黄绿交替亮001:主干道绿灯亮,支干道红灯亮010:主干道黄灯亮,支干道红灯亮011:主干道红灯亮,支干道绿灯亮100:主干道红灯亮,支干道黄灯亮101:全为绿灯110:全为红灯111:全部灯熄灭,封路状态3.4、系统模块组成分频模块、状态定时模块、交通灯显示模块、控制模块注:各模块详细内容见后面详细设计步骤章节。四、 详细设计步骤4.1、系统引脚声明部分 这一模块,我把它命名为Traffic_Light,它的主要目的是对后面所有模块中将会用到的一些引脚变量进行定义声明,定义一些符号常量,同时也对LED灯引脚进行对应赋值。因为我根据参考资料,用自顶向下的设计方法来完成这次设计,所以,我就在Traffic_Light模块中先将整个系统可能会用到的量值进行预先定义,然后再根据需求逐个完成各个功能模块。考虑到后面有可能会随时增减变量,导致Traffic_Light模块中的内容会有改动,因此,这一模块中几乎就不存在任何逻辑结构,也不要求实现什么具体的功能,只是负责定义声明各个变量,常量,以及一些固定不变的赋值。 Traffic_Light流程图 分频模块流程图 4.2、分频模块在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的。因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟才能让系统正常的工作。因此时钟发生模块最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。通过编程实现1Hz脉冲的产生。 系统的动态扫描需要10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。分频模块主要为系统提供所需的时钟计时脉冲。该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作为系统时钟计时信号。通过计算可以得到以下数据:F=50MHz,t=2*s=0.2ns; T=1,N=COUNT_VALUE=0.5/(2 * )=2.5 * 因为25位2进制可表示到335544322.5 * 所以COUNT_VALUE=25d2500_0000 一开始的复位状态先给COUNT_VALUE和clk_1Hz赋值为0,每一次脉冲上升沿到则COUNT_VALUE自加一次,当COUNT_VALUE达到2500_000时则有clk_1Hz发生反转一次。通过两次clk_1Hz的反转则得到一个完整的周期方波,即为:1S。模块框图如下:I/O管脚描述如下:名称方向电平位宽功能clk_50MHzinput3.3V1系统时钟(50MHz)rst_ninput3.3V1复位信号clk_1Hzoutput3.3V1分频后时钟信号(1HZ) 表二:时钟分频模块I/O端口描述4.3、状态定时模块: 主要是周期的计时器模块,根据题目要求,当信号灯处于正常工作时,循环依次为主绿、主黄、主红、次黄,四次状态时间周期相加为140s,所以需要一个140秒的计时周期模块控制。 通过上诉的分频器我们得到了1Hz的信号脉冲,在此我们通过1Hz的脉冲的每一个上升沿对circular_value加一处理,为状态的转换提供条件。4.4、交通灯显示模块: 这一模块功能主要是输出电平信号赋值,将LED灯的亮灭情况的控制值分别赋给对应引脚的变量。 case(current) reset:begin LED_DATA = 6b111_111; end/全部熄灭 S1:begin LED_DATA = 6b110_011; end/主干道绿灯,支干道红灯 S2:begin LED_DATA = 6b101_011; end/主干道黄灯,支干道红灯 S3:begin LED_DATA = 6b011_110; end/主干道红灯,支干道绿灯 S4:begin LED_DATA = 6b011_101; end/主干道红灯,支干道黄灯 S5:begin LED_DATA = 6b110_110; end/全为绿灯 S6:begin LED_DATA = 6b011_011; end/全为红灯 default:begin LED_DATA = 6b111_111; end/全部熄灭4.5、控制模块: 这一模块根据主干道、支干道输入信号以及时钟信号CLK,发出主、支干道指示灯的控制信号,同时向各个定时单元、显示控制单元发出使能控制信号产生系统的状态机,控制其他部分协调工作。 控制模块采用状态机进行设计,可以定义出7种状态,分别为S1:主干道绿灯,支干道红灯;S2:主干道黄灯,支干道红灯;S3:主干道红灯,支干道绿灯;S4:主干道红灯,支干道黄灯;S4:主干道红灯,支干道黄灯;S5:全为绿灯;S6:全为红灯;reset:全部熄灭。 它分别包含了输入控制信号的接受处理模块、状态转换模块。接受处理模块: 在这一模块中,采用状态机进行设计,可以定义出7种状态,具体情况在前面已经介绍。同时用MODE_SEL信号控制,由3个开关控制,它是3位二进制,可以有8种模式,其中000为正常模式,其他情况下都是特殊模式。这一模块是实现手动随机控制的关键。具体情况如下:000:正常模式,红黄绿交替亮001:主干道绿灯亮,支干道红灯亮010:主干道黄灯亮,支干道红灯亮011:主干道红灯亮,支干道绿灯亮100:主干道红灯亮,支干道黄灯亮101:全为绿灯110:全为红灯111:全部灯熄灭,封路状态需要注意的是:当有特殊情况时候,即输入的控制信号不是000,则开启了特殊模式,在特殊模式下前四个模式会跳转到状态转移模式下,而其他的则直接执行不经过普通状态跳转。因此,交通管理者就可以根据实际道路情况,随时的调整交通信号灯,使得道路能得到充分的利用,减少时间,空间的浪费。状态转换模块:正常模式下,交通灯按4种状态正常亮灭。 在这一模块中,它的核心是计数时间,因为从S1到S2要100s,S2到S3要5s,S3到S4要30s,S4回到S1要5s,所以计数时间一次变化为100s,105s,135s,140s。具体情况如下: parameter PASS_TIME_SN =8d100,/主干道通行时间100s YELLOW_TIME_SN = 8d105,/黄灯时间5s PASS_TIME_EW = 8d135,/次干道通行时间30s YELLOW_TIME_EW = 88d140;普通模式的状态图如下所示 S1 S4 S2 S3 S1:主干道绿灯亮,支干道红灯亮S2:主干道黄灯亮,支干道红灯亮S3:主干道红灯亮,支干道绿灯亮S4:主干道红灯亮,支干道黄灯亮五、 设计结果及分析 5.1、程序代码编译测试程序编写工作完成后,终于可以编译测试,一探究竟了。在一开始的程序编译时,不能看出什么问题,编译完成后的系统引脚图如下:开始的时候我以为这儿的输出引脚的排布情况会对实际显示有影响,后来在学习了引脚部分的相关知识后,知道了这里的引脚如何排布,并不影响输出显示,实际的输出情况由端口锁定的引脚决定。 5.2、仿真测试终于到了可以检验程序正确与否的时候了,通过仿真设计,我们可以清楚地检测出系统是否能正确运行。由于时间取值问题,在程序设计中COUNT_VALUE的理论值为25000000,,对于时序仿真比较麻烦,为解决这一问题,所以在仿真时将COUNT_VALUE的值赋值为1000,则对于的分频效果为 4*S,其他变量不变,则后面的仿真比较容易观察实现。通过计算可以算出黄灯时间本来为:T=5*clk_1Hz,但是在此事:T=5*=2*。但是在撰写报告时,为了贴近理论,我还是按原始数据测试截图,演示时可采取上诉方法。所以我把正常模式和特殊模式分开测试。普通情况下的循环工作时序仿真:(这儿是低电平有效)如下图可以看出,当MODE_SEL处于000状态时,在一个周期内,首先是主干道绿灯和次干道红灯亮,接着是主干道黄灯和次干道红灯,然后是主干道红灯光和次干道绿灯,最后是主干道红灯、次干道黄灯。特殊情况下的工作时序仿真: 5.3、器件测试这一部分的关键就是引脚的锁定,要把各个端口对应的引脚绑定好,这样才能准确地根据观察到的运行现象判断出实际结果是否有误。具体的引脚情况跟如下:# PlanAhead Generated physical constraints NET clk_50MHz LOC = AA12;NET GREEN_EW LOC = AA22;NET RED_EW LOC = Y22;NET YELLOW_EW LOC = Y20;NET GREEN_SN LOC = AB3;NET RED_SN LOC = Y1;NET YELLOW_SN LOC = W1;NET rst_n LOC = V3;NET MODE_SEL0 LOC = B2;NET MODE_SEL1 LOC = A2;NET MODE_SEL2 LOC = A3;# PlanAhead Generated IO constraints NET MODE_SEL2 IOSTANDARD = LVCMOS18;NET MODE_SEL1 IOSTANDARD = LVCMOS18;NET MODE_SEL0 IOSTANDARD = LVCMOS18;NET YELLOW_SN IOSTANDARD = LVCMOS33;NET YELLOW_EW IOSTANDARD = LVCMOS33;NET RED_SN IOSTANDARD = LVCMOS33;NET rst_n IOSTANDARD = LVCMOS18;NET RED_EW IOSTANDARD = LVCMOS33;NET GREEN_SN IOSTANDARD = LVCMOS33;NET GREEN_EW IOSTANDARD = LVCMOS33;六、 总结这次所设计的交通信号灯控制电路,主要适用于在两条干道汇合点形成的十字交叉路口,路口设计两组红绿灯分别对两个方向上的交通运行状态进行管理。交通灯的持续闪亮时间由键盘输入控制。灯亮规则为:当B方向的红灯亮时,A方向对应绿灯亮,由绿灯转换成红灯的过渡阶段黄灯亮,即B方向红灯亮的时间等于A方向绿灯和黄灯亮的时间之和。同理,当A方向的红灯变亮时,B方向的交通灯也遵循此规则。各干道上安装有数码管,以倒计时的形式显示本道各信号灯闪亮的时间。当出现特殊情况时,各方向上均亮红灯,倒计时停止。特殊运行状态结束后,控制器恢复原来的状态,继续运行。这次的课程设计题目是交通灯的控制系统,此次的课程设计选择用FPGA来做。FPGA语言精炼,极大的降低了交通灯的控制系统的编译难度。在这些层面上,对FPGA有了进一步的掌握,也对交通灯的控制系统有了更深层的理解。现代的EDA软件平台集设计、仿真、测试于一体,配备了系统设计自动化的全部工具,这些工具包括:多种能兼容和混合使用的逻辑描述输入工具以及高性能的逻辑综合、优化和仿真测试工具。电子设计师可以从概念、算法、协议等开始设计电子系统,将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。EDA设计方法是自顶向下的设计方法,这种方法首先从系统设计入手,在顶层进行功能的划分和结构设计,由于采用高级语言的描述,因此能在系统级采用仿真手段验证设计的正确性,然后在逐级设计底层结构,用VHDL、Verilog HDL等硬件描述语言对高层的系统进行电路描述,最后用逻辑综合化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。七、 体会通过综合实验的思考和设计,对一个项目的整体设计有了进一步认识,加深了对VHDL语言的了解,提高了编程能力。同时,锻炼了独立发现问题解决问题的能力,提高了个人素质。利用硬件描述语言VHDL编程,借助ISE软件环境下进行了编译及仿真测试,通过FPGA芯片实现了一个实用的交通信号灯控制系统,设计由于采用了EDA技术,不但大大缩短了开发研制周期,提高了设计效率,而且使系统具有设计灵活,实现简单,性能稳定的特点。这是一次颇有收获的实训, 这次的实训中,我们更进一步体会到自主学习和团队合作的乐趣与必要性。为了完成项目,在网络上找到了许多相关资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解, 这才知道老师的良苦用心。相信以后的我不管是做网络亦或是从事软、硬件开发,都会有一个扎实的基础和良好的开发习惯的。通过这次课程设计,加强了我们动手、思考和解决问题的能力。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 这次课程设计终于顺利完成了,我学也到很多实用的知识,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅。八、 参考文献(递增引用,引用相关内容)1 康华光 .电子技术基础-数字部分M.高等教育出版社,1998。2 潘松,等.EDA技术实用教程M.科学出版社,20063 雷伏容 .VHDL电路设计M.清华大学出版社,20064 Charles H.Roth,等.数字系统设计与VHDLM.电子工业出版社,20085 沈美明、温东蝉IBM-PC汇编语言程序设计(第二版)清华大学出版社,200186 李红浅谈计算机病毒.山西大学财经学报,2002.12:527-5307 赵均宇强化科学管理机制光明日报,1999-3-24(4)9、 附录:程序代码:timescale 1ns / 1ps /module Traffic_Light ( clk_50MHz, /输入时钟,50MHz rst_n, /全局复位信号,低电平有效 MODE_SEL, /工作方式信号 RED_SN, /主干道方向红灯,低电平有效 RED_EW, /支干道方向红灯,低电平有效 GREEN_SN, /主干道方向绿灯,低电平有效 GREEN_EW, /支干道方向红灯,低电平有效 YELLOW_SN, /主干道方向绿灯,低电平有效 YELLOW_EW /支干道方向红灯,低电平有效 );input clk_50MHz;input rst_n;input 2:0MODE_SEL;output wire RED_SN;output wire RED_EW;output wire YELLOW_SN;output wire YELLOW_EW;output wire GREEN_SN;output wire GREEN_EW;reg 5:0 LED_DATA;reg 7:0 circular_value;reg 4:0 current,next;reg clk_1Hz;reg 24:0 adder_value; parameter COUNT_VALUE = 25d2500_0000;parameter PASS_TIME_SN =8d100,/主干道通行时间100s YELLOW_TIME_SN = 8d105,/黄灯时间5s PASS_TIME_EW = 8d135,/次干道通行时间30s YELLOW_TIME_EW = 88d140;parameter reset = 1d0,S1 = 3d1,S2 = 3d2,S3 = 3d3,S4 = 3d4,S5 = 3d5,S6 = 3d6;assign RED_SN = LED_DATA5; / 主干道红灯assign YELLOW_SN = LED_DATA4; / 主干道黄灯assign GREEN_SN = LED_DATA3; / 主干道绿灯assign RED_EW = LED_DATA2; / 支干道红灯assign YELLOW_EW = LED_DATA1; / 支干道黄灯assign GREEN_EW = LED_DATA0; / 支干道绿灯/分频,50MHz到1Hz/always (posedge clk_50MHz or negedge rst_n)begin if(!rst_n) begin clk_1Hz = 0; adder_value = 0; end else if(adder_value = COUNT_VALUE) begin clk_1Hz = clk_1Hz; adder_value = 0; end else begin clk_1Hz = clk_1Hz; adder_value =adder_value+1; end end/140秒为周期的计时器/always (posedge clk_1Hz or negedge rst_n)begin if(!rst_n) circular_value = 0; else if(MODE_SEL = 3b000) beginif(circular_value = 140) circular_value = 0;else circular_value = circular_value+1; end else circular_value = 0; end /输入控制信号的接受处理模块/always (posedge clk_50MHz or negedge rst_n)begin if(!rst_n) begin current = reset; end else begin case(MODE_SEL) 3b000: begin current = next; end /正常模式,红黄绿交替亮 3b001: begin current = S1; end /主干道绿灯亮,支干道红灯亮 3b010: begin current = S2; end /主干道黄灯亮,支干道红灯亮 3b011: begin current = S3; end /主干道红灯亮,支干道绿灯亮 3b100: begin current = S4; end /主干道

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论