FPGA双模式交通灯的设计

一、设计要求

1.模块一:模拟十字路口主干道与辅道灯光变化情况:

a.FPGA板上电后,控制显示的开关拨至高电平,进行五秒的倒计时,然后出现第一次红绿灯转换;

b.接下来会根据所处不同的状态有不同的倒计时,实现一个四状态的红绿灯转换,最大限度模拟了实际路况。

 

具体实现要求为:

(1)主路按照绿灯,黄灯,红灯的顺序循环闪烁;                                 

(2)支路按照红灯,绿灯,黄灯的顺序循环闪烁;

(3)两路的灯光状态转换要分别独立按照次序完成且要有各自的计时显示;

(4)可以任意调整计时时间,在计时结束后自动进入下一循环。                                          

2.模块二:模拟双行道间歇式红绿灯及行人通过的情况:

a.FPGA板上电后,控制显示的开关拨至低电平,输出数码管与LED灯进入此模块,自然情况下一直为绿灯,且数码管不会改变;

b.如果行人按键为高电平时,进入倒计时状态,结束后会更新数码管数字且LED灯变为红灯;

c.等待行人通过后,重新进入自然状态,等待下一次行人按键的触发。

 

具体实现要求为:

(1)没有行人时,两个灯均为绿灯,数码管维持数字9;                                 

(2)有行人按下按键后,此时还是绿灯,数码管进行9秒的倒计时;

(3)倒计时结束后,两个灯均变为红灯,数码管进行9秒的倒计时;

(4)倒计时结束后,恢复触发之前的状态,并检测按键的高低电平判断是否进行下一次状态转换。 

二、设计思路

整体思路:

        首先,要实现不同状态的转换,需要通过状态机来实现,这在两个模块里都是通用的。然后,围绕着状态机的设置,我们可以依据具体的数码管显示和三色灯的颜色变化进行逻辑结构的设计。同时,分频电路和数码管转换部分在将逻辑电路实现在FPGA上是不可缺少的一部分。而对于两个交通灯模块,需要进一步具体分析。

        对于自动计时实现状态转换的十字交叉路口交通灯电路,我们设计的重点是两个方向交通灯的红、绿、黄三种颜色的独立转换,从而更好的模拟实际路况。由于硬件的限制,所以在实现三色灯状态转换的同时,数码管显示状态转换间隔的时间。而对于如何控制每一个灯下一状态是维持原状还是跳转这一问题,我们使用一个计数器模块进行控制,当其满足跳转要求方可进入下一状态。

        对于行人主动触发的主干道双向交通灯电路,我们在状态机的变换上相较于上一程序更加简单,只有红和绿两种模式;但是,添加了一个主动触发的信号,作为自然状态的唯一触发条件,用来控制状态机的跳变。而计时器模块充当了过程中的触发条件,当满足跳转要求进入下一状态,同时灯光也会变化。而经过一个周期后,需要判断行人是否再次触发了信号,如果是,进入新的一轮周期;如果不是,此模块回到并保持自然状态。

        最后,为了代码的整洁性与使用者的方便性,故设计顶层模块,调用这两个子模块,通过一个信号控制两种模式的转换显示,但是两种交通灯模块在同时运行,只是分时输出结果。

 

分频思路:

第一种思路:

(1)复位信号时,计数器清零,输出时钟置低电平。
(2)计数器到 N/2- 1 时,时钟翻转,计数器继续累加
(3)计数器到 N-1 时,时钟翻转,计数器清零
(4)计数器在其他值是输出保持,计数器继续累加
这种思路的思想是,在计数器为 0~N/2-1时,输出时钟保持一个状态,N/2~N-1时保持另一个状态。

第二种思路:
(1)复位信号时,计数器清零,输出时钟置低电平。
(2)计数器到 N/2-1 时,时钟翻转,计数器清零。
(3)计数器为其余值时,继续保持加一。
这种思路的思想是,在计数器为 0~N/2-1 时,输出时钟保持一个状态 ,在计数器为 下一个0~N/2-1时保持另一个状态。

具体思路:

        秒脉冲发生器是该系统中计数器模块、状态转换的标准时钟信号源,计数器模块主要为状态转换模块提供两个转换信号,译码显示模块将计数器的计数状态译码并通过数码管进行显示,状态转换模块是系统的主要部分,由它控制红绿灯的状态转换,译码模块将状态转换模块所处状态进行译码,并驱动红绿灯进行状态显示;

        其中红绿状态正常输出,黄灯状态由红加绿输出显示,数码管具体显示如下:

        S1:主路绿灯点亮,支路红灯点亮,持续5s;

        S2:主路黄灯点亮,支路红灯点亮,持续6s;

        S3:主路红灯点亮,支路绿灯点亮,持续4s;

        S4:主路红灯点亮,支路黄灯点亮,持续7s;

 

三、各模块具体功能分析

1、分频模块

        由于系统自带的时钟信号频率偏高,故需要通过分频的方式得到满足实际需求的频率,输入clk,输出满足要求的clk1。具体程序如下:

 

2、traffic模块

        此模块实现了自动计时的十字交叉路口交通灯电路,作为子模块也需要调用分频器模块作为驱动的输入,包括状态机的转换和数码管电路与三色灯的输出。具体程序如下:

 

 

3、button模块

        此模块实现了行人触发的双直行路口交通灯电路,作为子模块也需要调用分频器模块作为驱动的输入,包括行人触发信号的转换、状态机的转换和数码管电路与三色灯的输出。具体程序如下:

 

 

 

4、top模块

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值