基于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所示: