《FPGA原理及应用》
大作业
题目用有限状态机法设计交通灯学院专业
姓名学号
指导教师
2017年11月
实验八用有限状态机设计交通灯
(综合性实验)
一、实验目的
掌握有限状态机的编程和使用方法。
二、实验内容
设计一个十字路口交通灯控制器,东西、南北方向有红灯、黄灯、绿灯,持续时间分别为35、5、30秒,并在实验箱上验证。
方案一:利用状态机设计
本报告通过用状态机对交通信号灯的设计,完成对红、绿、黄三盏灯状态变换的控制,进而完成对十字路口交通通断的控制。
本实验以VHDL语言为基础,状态机为工具,完成四种交通状态的控制,即主道有车支道无车,主道无车支道有车,主道支道均有车,主道支道均无车四种状态。
以主支道的安装的传感器为信号输入,感应道路有无车辆,实现交通自动化控制。
状态机一般用来描述数字系统的控制单元,是许多数字电路的核心元件。
状态机包括输入信号、输出信号、状态译码器和状态寄存器。
状态寄存器用来记忆状态机的内部状态。
状态寄存器的下一个状态及输出不仅同输入信号有关,而且还与寄存器的当前状态有关,即下一个状态根据当前状态和输入决定。
VHDL程序如下:
方案二:利用接线图设计
设计一个五秒计时器,VHDL程序如下:
结果用二进制表示,需要输出三个变量。
仿真无误后,新建波形仿真文件,得到结果如下:
对五秒计时器进行封装。
设计三十秒计时器:
结果有三十个,用二进制表示,最少需要五个输出变量。
仿真无误后新建仿真波形,仿真波形如下:
对三十秒计时器进行封装。
设计三十五秒计时器,VHDL程序如下:
程序结构大致与五秒计时器、三十秒计时器相似,并且用二进制表示,需要输出六个变量。
波形仿真结果如下:
设计好后进行封装。
然后设计通过计时器控制六个交通灯亮灭的转换器。
使用case语句,根据五秒、三十秒、三十五秒计时器的进位信号,对交通灯的亮灭进行控制。
初始状态为主干道的红灯亮,而支干道的绿灯亮,三十五秒内,支干道由绿灯变为黄灯,黄灯亮五秒后变为红灯。
此时主干道由红灯变为绿灯,两边交换,以此情况反复进行。
红灯时间为三十五秒钟,在此期间,另一干到的黄灯和绿灯发生变化,完成十字路口交通灯的功能。
其波形仿真如下图:
VHDL程序设计如下:
检测该状态检测功能无误后,进行封装。
新建原理图链接文件,将封装好的四个原件进行连接实现交通灯的功能:
程序设计好后,进行输出输入口的管脚绑定:
管脚绑定如上图,绑定好后,对程序进行上传。
FPGA硬件连接图如下,按如下接线图接好线后,进行程序上传:
V8连接1Hz的时钟输入,Y8接开关1,V3接入LED1(r1),V7接入LED2(y1),V10接入LED3(g1), V5接入LED8(r2),W8接入LED7(y2),W13接入LED6(g2)。
上传程序后开始进行六个灯开始进行交替闪烁。
实验中遇到的问题:
1.V8连接1Hz的时钟输入,Y8接开关1,V3接入LED1(r1),V7接入LED2(y1),V10接入LED3(g1), V5接入LED4(r2),W8接入LED5(y2),W13接入LED6(g2)。
上传程序后六个灯只有LED1到LED4发光,其余灯泡始终不会亮,无法实现交通灯的功能,于是检查LED5及LED6发现这两个灯泡有问题无法正确接收管脚的输入信号,于是选择其他LED该问题得到解决。