目录1.设计思路..................................................11.1设计思想.............................................11.2系统功能与要求.......................................11.3总体设计.............................................22.主要模块设计程序..........................................42.1时基脉冲发生模块.....................................42.2技术及红绿灯控制模块.................................52.3译码模块.............................................92.4主程序..............................................113.所实现功能说明..........................................143.1实现功能............................................143.2仿真波形............................................144.所设计原理图及故障分析..................................145.心得体会.................................................17参考文献...................................................18附录1元件清单.............................................19附录2管脚.................................................2011.设计思路1.1设计思想交通灯是城市交通监管系统的重要组成部分,对于保证机动车辆的安全运行,维持城市道路的顺畅起到了重要作用。目前很多城市交叉路口的交通灯实行的是定时控制,灯亮的时间是预先设定好的,在时间和空间方面的应变性能较差,一定程度上造成了交通资源的浪费,加重了道路交通压力。本文在EDA技术的基础上,利用FPGA的相关知识设计了交通灯控制系统,可以根据实际情况对灯亮时间进行自由调整,整个设计系统通过Max+PlusⅡ软件进行了模拟仿真,并下载到FPGA器件中进行硬件的调试,验证了设计的交通信号灯控制电路完全可以实现预定的功能,具有一定的实用性。1.2系统功能与要求交通灯控制器控制两个主干道交叉路口的交通,路口车辆多,直行信号、左转弯信号分开显示,a,b两个主干道的通行时间相等,其中指示直行的绿灯亮30s,指示左转弯的绿灯亮12s,绿灯变至红灯时,黄灯亮3s,以便于车辆能停在停车线内,红灯信号的最后3s相应的黄灯也同时亮,以便提示驾驶人员准备起步。在两个主干道路口都配备传感器用来检测有无车辆通行。当两个主干道都有车辆时,自动处于主干道a绿灯,主干道b红灯的状态,然后轮流切换通行。当主干道a无车辆时,自动处于主干道b绿灯,主干道a红灯的状态;反之亦然,以提高通行效率。2所设计的交通信号灯控制电路,主要适用于在两条干道汇合点形成的十字交叉路口,路口设计两组红绿灯分别对两个方向上的交通运行状态进行管理。交通灯的持续闪亮时间由键盘输入控制。灯亮规则为:当B方向的红灯亮时,A方向对应绿灯亮,由绿灯转换成红灯的过渡阶段黄灯亮,即B方向红灯亮的时间等于A方向绿灯和黄灯亮的时间之和。同理,当A方向的红灯变亮时,B方向的交通灯也遵循此规则。各干道上安装有数码管,以倒计时的形式显示本道各信号灯闪亮的时间。当出现特殊情况时,各方向上均亮红灯,倒计时停止。特殊运行状态结束后,控制器恢复原来的状态,继续运行。图1十字路口示意图1.3总体设计首先由晶振产生出发信号,由控制器处理成1HZ的时钟,利用此时钟进行计数,通过判断计数的值来控制交通灯的亮灭。通过每种灯亮的时间总数与计数值比较得到数码管应该显示的数值,利用分位程序将其分成十位和个位。通过译码电路来实现数码管的显示。本实验所使用的芯片为EPF10K10LC84-4。整个系统主要由计数模块、控制模块、分频模块、分位模块以及显示电路构成。其中分频模块主要将系统输入的基准时钟信号转换为1Hz的激励信号,驱动计数模块和控制模块工作。控制3模块根据计数器的计数情况对交通灯的亮灭及持续时间进行控制,并通过分位电路将灯亮时间以倒计时的形式通过数码管显示出来。由设计任务要求可知,输入部分有:CLK时钟频率输入,可由实验板上直接提供,为准确确定时间长度,选择High挡的1MHz高平信号;无车状态按键KEY,当按一下键,表示路上无车,信息学院路道路显示红灯,东风路显示绿灯。有车时两路红绿交替。输出部分有:东西方向和南北方向各使用4个LED显示,红黄绿各代表红黄绿灯,绿灯和另一个红灯同时亮时为左转时间;东西方向和南北方向计时均为2位数,共需要4个LED七段数码管显示。Time信号输出显示的内容。图2总体设计图Clkr1g1t1Keyr2g2t2time1[4..0]time2[4..0]CLK按键数码管显示东风路交通灯信息学院路交通灯译码42.主要模块设计程序2.1时基脉冲发生模块在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的。因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟才能让系统正常的工作。因此时钟发生模块最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。通过编程实现1Hz脉冲的产生,程序如下所示。LibraryIEEE;useIEEE.std_logic_1164.all;ENTITYCLKGENISPORT(CLK:INSTD_LOGIC;CLK1:OUTSTD_LOGIC);ENDCLKGEN;ARCHITECTUREbehavOFCLKGENISSIGNALCNTER:INTEGERRANGE0TO25000000;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFCNTER=25000000THENCNTER=0;ELSECNTER=CNTER+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(CNTER)BEGINIFCNTER=12500000THENCLK1='1';ENDIF;IFCNTER=25000000THENCLK1='0';ENDIF;5ENDPROCESS;ENDbehav;2.2计数及红绿灯控制模块南北向和东西向各有一组红黄绿灯,各自持续的时间为分别为25s、5s、20s。通过编程可以实现控制各通道的计数控制且输出为二进制数,并且可以控制各灯的亮灭情况,高电平为亮,低电平为灭。东西向模块程序为:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydaolu1isport(clk:instd_logic;timel:outstd_logic_vector(4downto0);r,g,t:outstd_logic);enddaolu1;architecturedaoduofdaolu1istypecoloris(green,yellow,red);beginprocess(clk)variablereset:std_logic:='0';variabletempr,tempg,tempt:std_logic;variabletemp_l:std_logic_vector(4downto0);variabletemp_color:color:=green;beginif(clk'eventandclk='1')thencasetemp_coloriswhenyellow=tempr:='1';tempg:='0';tempt:='0';caseresetis6when'0'=temp_l:=00100;reset:='1';whenothers=casetemp_liswhen00000=temp_l:=11000;temp_color:=red;whenothers=temp_l:=temp_l-1;endcase;endcase;whengreen=tempr:='0';tempg:='0';tempt:='1';caseresetiswhen'0'=temp_l:=10011;reset:='1';whenothers=casetemp_liswhen00000=temp_l:=00100;temp_color:=yellow;whenothers=temp_l:=temp_l-1;endcase;endcase;whenred=tempr:='0';tempg:='1';tempt:='0';caseresetiswhen'0'=temp_l:=11000;reset:='1';7whenothers=casetemp_liswhen00000=temp_l:=10011;temp_color:=green;whenothers=temp_l:=temp_l-1;endcase;endcase;endcase;endif;timel=temp_l;r=tempr;g=tempg;t=tempt;endprocess;end;南北向模块程序为:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydaolu2isport(clk:instd_logic;time2:outstd_logic_vector(4downto0);r1,g1,t1:outstd_logic);enddaolu2;architecturedaoluofdaolu2istypecoloris(red,green,yellow);beginprocess(clk)variablereset:std_logic:='0';variabletempr,tempg,tempt:std_logic;8variabletemp_l:std_logic_vector(4downto0);variabletemp_color:color:=red;beginif(clk'eventandclk='1')thencasetemp_coloriswhenyellow=tempr:='1';tempg:='0';tempt:='0';caseresetiswhen'0'=temp_l:=00100;reset:='1';whenothers=casetemp_liswhen00000=temp_l:=11000;temp_color:=red;whenothers=temp_l:=temp_l-1;endcase;endcase;whengreen=tempr:='0';tempg:='0';tempt:='1';caseresetiswhen'0'=temp_l:=10011;reset:='1';whenothers=casetemp_liswhen00000=temp_l:=00100;temp_color:=yellow;whenothers=9temp_l:=temp_l-1;endcase;endcase;whenred=tempr:='0';tempg:='1';tempt:='0';caseresetiswhen'0'=temp_l:=