基于FPGA技术的交通灯控制系统设计
计数模块的仿真如图3所示,从图中可以看出,在时钟的驱动下,计数值不断自加,当计数值countnum等于键盘输入值32(key=32)时,计数返回到0,开始下一轮计数。当Hold检测到特殊情况时置‘1’,使计数器暂停计数。
3.2 控制器模块的仿真设计
在控制器模块中,红、绿、黄三盏灯工作的总时间由键盘输入,各交通灯时间分配规则如下:红灯时间占总时间的1/2,绿灯时间占3/8,黄灯时间占1/8,本设计中键盘输入值为32(key=32),正常情况下红灯亮16 s,绿灯亮12 s,黄灯亮4 s。

控制器仿真情况如图4所示,当hold为低电平,计数值countnum12时,greenA输出高电平,A东西方向绿灯亮起车辆通行,此时与之相对应的redB输出高电平,B方向红灯亮起车辆禁行。A方向显示交通灯闪烁持续时间的数码管numA从12开始递减,同时B方向显示交通灯闪烁持续时间的数码管numB从16开始递减。当12countnum16时,yellowA输出高电平,A方向黄灯亮起,numA从数值4开始倒计时,此时greenB仍处于低电平,numB继续倒计时,B方向红灯闪亮车辆仍处于禁行状态。当countnum>16,redA输出高电平,A方向红灯亮起车辆禁行,numA从数值16开始倒计时,此时greenB输出高电平,B方向绿灯亮起车辆通行,numB从数值12开始递减。当16countnum28时,redA继续处于高电平状态,numA继续倒计时,A方向车辆禁行,而此时yellowB输出高电平,B方向黄灯亮起,numB从数值4开始递减。当hold为‘1’时,表示进入紧急状态,FLASH置‘1’,各方向的红灯均亮起,所有机动车禁行。
3.3 分位模块设计
分位模块的设计主要是将灯亮时间分为十位和个位,通过两个相应的数码管分别显示出来。本设计中灯亮时间最长不超过40 s(numin40),numA,numB分别表示十位、个位上的数字,分位模块程序设计的流程图如图5所示。

分位模块的仿真如图6所示,numin的数值大小可以通过numA,numB的组合以十进制数值显示,从而实现了分位功能。

4 系统的硬件设计及调试
本系统的主要逻辑设计由一片EPlK30TC144-3芯片完成,编写的VHDL源程序在Altera公司的逻辑综合工具Max+PlusⅡ下经过编译和功能仿真测试后,针对下载芯片进行管脚配置,下载到EPlK30TC144-3芯片中,进行相应的硬件调试,调试结果与软件仿真的结果相吻合,验证了设计完成了预定功能。
评论