您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 基于FPGA设计——交通灯
FPGA课程设计——交通灯控制器通信工程学院电科0701班罗超(17)第一部分技术规范1.1功能描述:实现一个由一条主干道和一条支干道的汇合点形成的十字路口的交通灯控制器,具体功能:(1)主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2)主干道处于长允许通行状态,而支干道有车来时才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。(3)当主干道、支干道均有车时,两者交替允许通行,主干道每次通行45秒,支干道每次通行25秒,在每次由绿灯向红灯转换的过程中,要亮5秒的黄灯作为过渡,并进行减计时显示。每个周期结束时都要进行支干道是否有车的检测,若有车则进行下一个周期,若没有,则主干道亮绿灯,支干道亮红灯,直到检测到支干道有车。1.2系统总体框图:根据设计要求和系统所具有的功能,并参考相关的文献资料,经行方案设计,可以画出如下图所示的交通信号灯控制器的系统框图。I/O管脚的描述名称方向电平位宽功能clkInput3.3V1系统时钟信号(10KHZ)carsignalInput3.3V1检测支路是否有车rstInput3.3V1复位信号ledOutput3.3V6LED灯selOutput3.3V7数码管段码segOutput3.3V4数码管位码时钟分频模块交通灯控制模块扫描显示译码模块clkrstcarsignal计时模块数码管段码sel数码管位码segLED灯表一:系统总体I/O管脚的描述注:其中系统时钟的频率选为10KHZ,复位采取同步复位方式,且低有效。支干道检测到有车时,carsignal=1;否则,carsignal=0。方案核心:在交通灯控制器的设计中,交通灯控制及计时模块是本设计的关键模块。第二部分总体设计方案交通灯2.1系统详细框图:在系统总体框图的基础上进一步详细设计,得到如下系统详细框图。图三:系统详细框图注:系统总体I/O管脚描述请查看技术规范。2.2具体模块设计1.时钟分频模块系统的动态扫描需要10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。分频模块主要为系统提供所需的时钟计时脉冲。该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作时钟分频模块交通灯控制模块显示单元定时模块显示控制单元clkcarsignalLED灯rst译码单元数码管显示为系统时钟计时信号。图四:时钟分频模块框图I/O管脚描述如下:名称方向电平位宽功能clkinput3.3V1系统时钟(10KHZ)rstinput3.3V1复位信号clk_outoutput3.3V1分频后时钟信号(1HZ)表二:时钟分频模块I/O端口描述注:系统时钟的频率为10KHZ,分频后的时钟信号为1HZ(占空比为50%)。复位信号为同步复位,且低有效。2.交通灯控制及计时模块控制模块JTDKZH:根据主干道、支干道输入信号以及时钟信号CLK,发出主、支干道指示灯的控制信号,同时向各个定时单元、显示控制单元发出使能控制信号产生系统的状态机,控制其他部分协调工作。计时模块分别实现45s,25s,5s的定时,根据主、支干道输入信号和clk时钟分频模块rstclk_out时钟信号以及交通灯控制器发出的使能信号按要求进行定时用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间。控制模块采用状态机进行设计,可以定义出5种状态,分别为S0:主干道绿灯,支干道红灯且没有车辆行驶;S1:主干道绿灯,支干道红灯且支干道有车辆驶入;S2:主干道黄灯,支干道红灯;S3:主干道红灯,支干道绿灯;S4:主干道红灯,支干道黄灯。利用CASE语句定义状态的转换方式及时间的变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求。图五:交通灯控制及计数模块clk_outcarsignalrstled交通灯控制模块count_H_1count_L_1count_H_2count_H_2I/O管脚描述如下:名称方向电平位宽功能clk_outInput3.3V1分频后时钟信号(1HZ)rstInput3.3V1复位信号(同步复位)carsignalInput3.3V1检测信号(低有效)count_H_1Output3.3V4主干道时间高位译码count_L_1Output3.3V4主干道时间低位译码count_H_2Output3.3V4支干道时间高位译码count_L_2Output3.3V4支干道时间低位译码ledOutput3.3V6LED灯表三:交通灯控制模块I/O端口描述系统的状态图如下所示carsignal=1carsignal=0S0S1S3S2S0:主干道绿灯,支干道红灯S1:主干道黄灯,支干道红灯S2:主干道红灯,支干道绿灯S3:主干道红灯,支干道黄灯3.扫描显示译码模块扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。图六:扫描显示译码模块框图rstclksegsel扫描显示译码模块count_H_1count_L_1count_H_2count_H_2该模块的I/O管脚描述如下:名称方向电平位宽功能clkInput3.3V1系统时钟信号(10KHZ)rstInput3.3V1复位信号(低有效)count_H_1Input3.3V4主干道时间高位译码count_L_1Input3.3V4主干道时间低位译码count_H_2Input3.3V4支干道时间高位译码count_L_2Input3.3V4支干道时间低位译码selOutput3.3V7数码管段码segOutput3.3V3数码管位码表四:扫描显示译码模块I/O端口描述第三部分仿真结果Modelsim前仿真Quartus2后仿真第四部分源代码分频模块:modulefenpinqi(clk,rst,clk_odd);inputclk,rst;outputclk_odd;regclk_odd;reg[13:0]count;parameterN=10;always@(posedgeclk)if(!rst)begincount=1'b0;clk_odd=1'b0;endelseif(countN/2-1)begincount=count+1'b1;endelsebegincount=1'b0;clk_odd=~clk_odd;endendmodule控制及计时模块:modulecontrol(led,car,rst,clk,count_H_1,count_L_1,count_H_2,count_L_2);output[3:0]count_H_1,count_L_1,count_H_2,count_L_2;output[5:0]led;inputclk,rst,car;reg[5:0]led;reg[3:0]count_H_1,count_L_1,count_H_2,count_L_2;reg[1:0]state;parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;always@(posedgeclkornegedgerst)if(!rst)beginled=6'b010100;state=S0;count_H_1=4'b0000;count_L_1=4'b0000;count_H_2=4'b0000;count_L_2=4'b0000;endelsebegincase(state)S0:beginBeginif(!car)beginled=6'b010100;//count_H_1=4'b0100;count_L_1=4'b0101;//???count_H_1=4'b0111;count_L_1=4'b0111;endelsebeginif(count_H_1==4'b0111)begincount_H_1=4'b0100;count_L_1=4'b0101;count_H_2=4'b0101;count_L_2=4'b0000;endelseif(count_L_1=0)if(count_H_1==0)beginled=6'b001100;count_H_1=4'b0000;count_L_1=4'b0100;state=S1;if(count_L_2==0)begincount_H_2=count_H_2-1'b1;count_L_2=4'b1001;endelsebegincount_L_2=count_L_2-1'b1;endendelsebegincount_H_1=count_H_1-1'b1;count_L_1=4'b1001;if(count_L_2==0)begincount_H_2=count_H_2-1'b1;count_L_2=4'b1001;endelsebegincount_L_2=count_L_2-1'b1;endendelsebegincount_L_1=count_L_1-1'b1;if(count_L_2==0)begincount_H_2=count_H_2-1'b1;count_L_2=4'b1001;endelsebegincount_L_2=count_L_2-1'b1;endendendend/*beginif(!car)begincount_H_2=4'b0101;count_L_2=4'b0000;endelseif(count_L_2==0)begincount_H_2=count_H_2-1'b1;count_L_2=4'b1001;endelsebegincount_L_2=count_L_2-1'b1;endend*/end/*if(count_L_1==0)beginif(count_H_1==0)beginled=6'b001100;count_H_1=4'b0000;count_L_1=4'b0100;state=S1;endelsebegincount_H_1=count_H_1-1'b1;count_L_1=4'b1001;endendelsebegincount_L_1=count_L_1-1'b1;endif(!car)begincount_H_2=4'b0101;count_L_2=4'b0000;endelseif(count_L_2==0)begincount_H_2=count_H_2-1'b1;count_L_2=4'b1001;endelsebegincount_L_2=count_L_2-1'b1;endS1:beginif(count_L_1==0)beginif(count_H_1==0)beginled=6'b100010;count_H_1=4'b0010;count_L_1=4'b1001;count_H_2=4'b0010;count_L_2=4'b0100;state=S2;endelsebegincount_H_1=count_H_1-1'b1;count_H_2=count_H_2-1'b1;endendelsebegincount_L_1=count_L_1-1'b1;count_L_2=count_L_2-1'b1;endendS2:beginif(count_L_2==0)beginif(count_H_2==0)beginled=6'b100001;count_H_2=4'b0000;count_L_2=4'b0100;state=S3;elsebegincount_H_2=count_H_2-1'b1;count_L_2=4'b1001;endendelsebegincount_L_2=count_L_2-1'b1;endif(count_L_1==0)beginbegincount_H_1=count_H_1-1'b1;count_L_1=4'b1001;endendelsebegincount_L_1=count_L_1
本文标题:基于FPGA设计——交通灯
链接地址:https://www.777doc.com/doc-6068421 .html