基于FPGA的十字路口交通灯控制器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
石河子大学信息科学与技术学院
成绩存档
学期:2014 至2015学年第一学期
考试科目:电子EDA技术课程设计
专业:电子信息工程
班级:2012 (1)班
姓名:
学号:
任课教师:钟福如
目录
一、实验目的 (1)
二、测试方法 (1)
三、总的设计流程 (1)
四、交通灯控制器的具体设计方案 (1)
五、主要功能设计与仿真 (2)
1、时钟分频模块 (2)
2、交通灯控制模块 (3)
六、顶层文件 (8)
七、心得体会 (9)
八、参考文献 (10)
基于FPGA的十字路口交通灯控制器设计
一、实验目的:
弄懂交通灯的控制逻辑,注意是十字路口,分人行道与车道。
车道分别有直行、左转、右转指示,且每个指示三种颜色:红绿黄,红绿转换时间设定2分钟,红与绿之间转换之前有30秒黄灯的闪烁;人行道有红、绿灯指示,红绿转换时间间隔2分钟,且在红绿转换之间有30秒的黄灯闪烁
二、测试方法:
输入技术脉冲信号,仿真波形的输出端的交通指示灯能按题目要求变化.
三、总的设计流程
首先根据交通灯控制器的功能要求,将功能要求转化成系统流程图,然后对系统进行模块的划分、定义各个模块的具体功能。
再开始对各个模块用VHDL语言编程,并在Quartus II环境下进行编译及功能仿真。
四、交通灯控制器的具体设计方案
主干道
支
干
道
图1 十字路口交通灯控制器的平面图
实现红黄绿灯的自动指挥。
通过交通灯控制器要能够使用于一条由主干道和支干道交汇处的十字路口(假设东西方向为主干道,南北方向为支干道)。
且遵循“主干道优先考虑”原则,主、支干道红、绿灯亮的时间不完全一致,在正常情况下主干道允许车辆通行的时间更长。
在绿灯转换为红灯的过程中有黄灯进行,使车辆有足够的时间停下来。
另外由VHDL语言合理设计交通灯控制器的功能,以使绿、黄、红灯的转换有一个准确的转换顺序和时间间隔。
依据设计要求,最终画出如图所示的系统框图。
(图1)
五、主要功能模块设计与仿真
1、时钟分频模块
分频模块的作用是为系统提供所需的计时脉冲。
FPGA器件FLEX EPF10K10LC84上时钟源频率为4MHZ,而系统的时钟计时模块需要1HZ的脉冲。
因此需要对4MHZ的时钟信号进行分频,产生1S的方波,作为系统的计时脉冲。
其电路符号如图2所示:
图2时钟分频模块的电路符号
在模块中,clkin分频器产生的1hz的输出脉冲。
其控制程序如下所示:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FENPINGI IS
PORT( CLKIN : IN STD_LOGIC;
CLKOUT : OUT STD_LOGIC
);
END FENPINGI;
ARCHITECTURE BEV OF FENPINGI IS CONSTANT N: INTEGER:=499;
SIGNAL COUNTER : INTEGER RANGE 0 TO N; SIGNAL CLK : STD_LOGIC;
BEGIN
PROCESS(CLKIN)
BEGIN
IF RISING_EDGE(CLKIN) THEN
IF COUNTER=N THEN COUNTER<=0;CLK<=NOT CLK; ELSE
COUNTER<=COUNTER+1;CLKOUT<=CLK;
END IF;
END IF;
End PROCESS;
END;
分频模块的仿真图3所示:
图3 时钟分频模块仿真图
为方便观看波形,时钟信号的周期并未严格按要求设置。
从图中可以看出该模块完成了分频功能。
2、交通灯控制模块
控制模块依据外部输入输出信号,来控制交通灯其他部分协调工作。
执行程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CONTROL IS
port(CLK:in std_logic;
mr_g_y_z_p:out std_logic_VECTOR(4 downto 0);
sr_g_y_z_p:out std_logic_VECTOR(4 downto 0));
end;
ARCHITECTURE ONE OF CONTROL IS
SIGNAL T:INTEGER:=0;
begin
process(clk)
BEGIN
IF CLK'EVENT AND CLK='1'THEN
IF T=0 THEN mr_g_y_z_p<="10011"; sr_g_y_z_p<="10001";
ELSIF T=25 THEN mr_g_y_z_p<="01000"; sr_g_y_z_p<="10000";
ELSIF T=30 THEN mr_g_y_z_p<="00100"; sr_g_y_z_p
<="10000";
ELSIF T=60 THEN sr_g_y_z_p<="10011"; mr_g_y_z_p<="10001";
ELSIF T=85 THEN sr_g_y_z_p<="01000"; mr_g_y_z_p<="10000";
ELSIF T=90 THEN sr_g_y_z_p<="00100"; mr_g_y_z_p
<="10000";
END IF;
T<=T+1;
END IF;
IF T=120 THEN T<=0;
end if;
end process;
end;
其电路符号如图4所示:
图4控制模块的电路符号
1、CLK为分频器产生的1hz时钟脉冲。
mg-r-y-z-p[4..0]分别代表主干道的绿、红、黄左拐人行道指示灯,sg-r-y-z-p[4..0]分别代表支干道的绿、红、黄左拐人行道指示灯,其中绿灯亮表示允许通行,红灯亮表示禁止通行。
通过程序的编译仿真可以知道,车道实现分别有直行、左转、右转指示,且每个指示三种颜色:红绿黄,红绿转换时间设定2分钟,红与绿之间转换之前有30秒黄灯的闪烁;人行道有红、绿灯指示,红绿转换时间间隔2分钟,且在红绿转换之间有30秒的黄灯闪烁。
转弯方向均一致。
仿真图如图5所示:
图5控制电路模块仿真图波形
六、顶层文件
将以上各个模块仿真成功后,再编写顶层文件,将各个单元模块连接起来,统一调配,得到顶层文件的原理图如下图:(图6)
图6 顶层文件的原理图
由图7可以看出,交通灯控制器分为两个模块,分别是分频模块、控制模块;
其综合仿真波形图如下所示:
图7原理图仿真出来的波形图
七、心得体会:
通过这次设计,让我对VHDL有了更深入的理解,熟悉了Quartus
基于FPGA的十字路口交通灯控制器设计
II基本的使用方法。
我学会了VHDL语言的一些基本用法,如进程语句,if语句等;也学会了一些基本功能的实现方法,如状态控制等;这次设计遇到的问题不少,尤其是开始时对Quartus一无所知,但是在老师以及同学的帮助下,加上通过百度文库的教程,慢慢的明白一些操作。
通过经常和同学交流,指导下发现自己许多的的纰漏和不足。
编写的程序也是到处有错,后面在一边查资料一边将每个单元模块完成之后再进行仿真。
程序调试最为重要,在编译完程序后,编译查错最初有很多错误,有输入错误,语法错误,通过反复的查错修改最终通过了编译。
本设计基于VHDL硬件描述语言编程,在确立总体预期控制功能的前提下,分模块进行描述,其中所用到的数据均可依实际情况而设置,修改方便灵活。
八、参考文献
1、电子技术课程设计指导彭杰华著高等教育出版社,1997
2、EDA技术实用教程朱维勇李国丽中国科技大学出
版社,2000
3、VHDL与数字电路课程设计卢杰赖毅科学出版社,2001
4、EDA技术实用教程潘松黄继业北京:科学出版
社,2002
基于FPGA的十字路口交通灯控制器设计。