《红绿灯交通灯控制器EDA设计》由会员分享,可在线阅读,更多相关《红绿灯交通灯控制器EDA设计(15页珍藏版)》请在金锄头文库上搜索。
1、6.6 红绿灯交通灯控制器EDA设计6.6.1设计要求设计一个基于FPGA的红绿灯交通信号控制器。假设某个十字路口是由一条主干道和一条次干道汇合而成,在每个方向设置红绿黄三种信号灯,红灯亮禁止通行,绿灯亮允许通行。黄灯亮允许行驶中车辆有时间停靠到禁止线以外。在自动控制模式时,主干道每次放行时间为35秒,次干道每次放行时间为15秒,主干道红灯次干道黄灯,主干道黄灯,次干道红灯持续时间为5秒。其外部硬件电路方面包括:两组红绿灯配合十字路口的双向指挥控制、两级七段显示器配合绿灯时倒计时显示、一组手动与自动控制开关针对交通警察指挥交通控制使用。6.6.2系统组成城市道路交叉口是城市道路网络的基本节点,
2、也是网络交通流的瓶颈。目前,大部分无控制交叉口都存在高峰小时车流混乱、车速缓慢、延误情况严重、事故多发、通行能力和服务水平低下等问题。特别是随着城市车流量的快速增长,城市无控制道路交叉口的交通压力越来越大。因此,做好基于EDA技术平台的交叉口信号控制设计是缓解交通阻塞、提高城市道路交叉口车辆通行效率的有效方法。交通信号控制的目的是为城市道路交叉口提供安全可靠和有效的交通流,通常最为常用的原则是车辆在交叉口的通过量最大或车辆在交叉口的延误最小。按照自顶向下的层次化设计方法,整个系统可分为4个模块,系统时序发生电路,红绿灯计数时间选择模块,定时控制电路,红绿灯信号译码电路。其系统组成方框图如图6-
3、51所示:图6-51交通灯控制器系统组成方框图图6-54中,系统时序发生电路最主要的功能就是产生一些额外的输出信号,它们是为红绿灯信号译码电路提供的频率为250Hz的扫描信号,为定时控制电路提供的使能enable控制信号,为红绿灯信号译码电路提供的占空比为50%的秒闪烁信号;红绿灯计数时间选择模块是负责输出显示器需要的值即倒数的秒数值,作为定时控制电路count_down circuit的到计数秒数,在该模块中可设置东西路口和南北路口的信号灯维持秒数;定时控制电路功能就是负责接收红绿灯计数时间选择模块输出的值即倒数的秒数值,然后将其转换成BCD码,利用七段显示器显示出来,让行人能清楚地的知道再
4、过多久就会变成红灯;红绿灯信号译码电路除了负责控制路口红绿灯的显示外,最主要的功能就是能够利用开关来切换手动与自动的模式,让交警能够通过外部输入的方式来控制红绿灯信号系统的运作,在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的,但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制,即让交警自行指挥交通。 为系统正常运作,整个控制器采用同步工作方式,由外接信号发生器该电路的设计可参见本章6.2.3节提供1kHz的时钟信号CLK。6.6.3 红绿灯交通灯控制器的层次化设计方案EDA技术的基本设计方法有电路级设计方法和系统级设计方法。电路级设计方法已经不能适应新的形势,本系统采
5、用的是系统级层次设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片FPGA芯片实现,首先用VHDL语言编写各个功能模块程序,最后通过综合器和适配器生成最终的目标器件,然后用顶层原理图将各功能模块连接起来。下面给出各模块的VHDL设计过程和仿真结果。1系统时序发生电路clk_gen的VHDL设计在红绿灯交通信号控制系统中,大多数的情况是通过自动控制的方式指挥交通的。因此,为了避免意外事件的发生,电路必须给一个稳定的时钟clock才能让系统正常运作。但为了配合高峰时段,防止交通拥挤,有时也必须使用手动控制,即让交警能够顺利地指挥交通。Clk_gen电路最主要的功能就是产生一些额外的输
6、出信号,并将其用做后续几个电路的使能enable控制与同步信号处理。 该电路的核心部分就是分频电路,通过对外接信号发生器提供1kHz的时钟信号进行1000分频,得到一个周期为1秒的输出使能信号ena_lhz占空比1:1000和flash_lhz占空比1:1;4分频后得到红绿灯信号译码电路所需的频率为250Hz的显示使能信号ena_scan。其VHDL源程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY clk_gen I
7、S port;- 秒方波信号end; ARCHITECTURE BEHAVIOR of clk_gen ISCONSTANT scan_bit: positive := 2;CONSTANT scan_val: positive := 4;CONSTANT two_Hz_bit: positive := 7;CONSTANT two_Hz_val: positive := 125;signal clk_scan_ff:std_logic_vector; signal clk_2Hz_ff:std_logic_vector; signal ena_s,ena_one,ena_two:std_lo
8、gic;begin scan:process -将外部的clk信号进行4分频处理的进程 begin if reset=1 then clk_scan_ff=00; ena_s=0; elsif then if clk_scan_ff=scan_val-1 then clk_scan_ff=00; ena_s = 1; else clk_scan_ff=clk_scan_ff+1; ena_s = 0; end if; end if; end process; ena_scan = ena_s; two_Hz:process -产生周期为1秒的脉冲信号ena_lhz和方波信号flash_1Hz的
9、进程 begin if reset=1 then ena_one=0; ena_two=0; clk_2Hz_ff=0000000; elsif then if ena_s=1 then if clk_2Hz_ff=two_Hz_val-1 then clk_2Hz_ff=0000000; ena_two = 1; ena_one = not ena_one; else clk_2Hz_ff=clk_2Hz_ff+1; ena_two = 0; ena_one = ena_one; end if; end if; end if; end process; ena_1Hz = ena_one a
10、nd ena_two and ena_s;flash_1Hz = ena_one;end BEHAVIOR;该模块的VHDL程序设计中使用了参数化的概念,即引用了常数对象constant。借助使用常数,可以更改常数的值并且重新编译,而所有使用到该常数的地方都会随着更新而使用新的常数值。该模块的VHDL程序包含了两个进程。进程scan将外部的clk信号进行4分频处理产生250Hz方波信号ena_scan,进程two_hz将外部的clk信号进行1000分频处理产生周期为1秒的脉冲信号ena_lhz和方波信号flash_1Hz。Reset为系统复位信号,当reset=1时,则将输出都清零。当rese
11、t=0,系统正常运行,clk为上升沿触发。系统时序发生电路clk_gen的仿真输出波形和元件符号如图6-52所示。 图6-52系统时序发生电路clk_gen 仿真输出波形;b元件符号图2 红绿灯计数时间选择模块traffic_mux的VHDL设计当过马路的时候,绿灯的一方有时会附加一个显示器告诉行人,目前还剩下几秒信号灯将变成红灯。因此,traffic_mux电路最主要的功能就是负责输出显示器需要的值即倒数的秒数值,作为定时控制电路的计数秒数。该电路的核心部分就是数据选择电路,利用选择语句case_when单输入,多输出实现4选1,其选择输入信号sign_state是红绿灯信号译码电路产生的4
12、种状态信号,状态转换输出表如表6-5所示。该模块的VHDL程序设计中仍然引用了常数对象constant来设置不同交通灯的维持时间,即:状态0:green0_time东西路口的绿灯维持秒数的数值赋给load,此时load=16=10;状态1:yellow0_time东西路口的黄灯维持秒数的数值赋给load,此时load=16=10;状态2:green1_time南北路口的绿灯维持秒数的数值赋给load,此时load=16=10;状态3:yellow1_time南北路口的黄灯维持秒数的数值赋给load,此时load=16=10。表6-5红绿灯计数时间状态转换表状态sign_state东西路口南北路口时间秒00东西路口为通行状态,此时东西路口绿灯亮, 南北路口红灯亮3501东西路口为过渡状态,此时东西路口黄灯亮南北路口红灯亮510东西路口红灯亮南北路口为通行状态,此时南北路口绿灯亮1511东西路口红灯亮南北路口过渡状态,此时南北路口黄灯亮5在程序中还用到conv_std_logic_vectorvalue,n语法,其用法就是将已经定义的数值value转换成n位bit的表示方法。例如:Load=conv_std_logic_vectorgreen1_time,8 6-8是将green1_time所定义的数值转换成8比特表示,即形成load=0