基于FPGA的交通灯设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院综合课程设计报告
题目:基于FPGA的交通灯设计
专业:电子信息工程
班级:09电子(2)班
姓名:周峰
导师:
成绩:
2012年12月11日
基于FPGA的交通灯设计
一:题目要求
1:主干道绿灯时,支干道红灯亮,反之亦然,两者交替允许通行。主干道每次放行40秒,支干道每次放行30秒。每次路灯亮,前10秒为左转灯亮,后5秒为黄灯亮。余下为直行灯亮、
2:能实现正常的倒计时显示功能。
3:能实现总体清零功能;计数器由初始状态开始计数,对应状态的指示灯亮。二:题目分析
1:在十字路口东西方向和南北方向各设一组左转灯、;显示的顺序为:左转灯绿灯黄灯红灯。
2:设计一个倒计时显示器。倒计时只显示总体时间。主干道左转灯、红灯、绿灯和黄灯亮的时间分别是10秒、30秒、25秒、5秒。支干道左转灯、红灯、绿灯和黄灯亮的时间分别是10秒、40秒、15秒、5秒状态表如表3-1所示:3
三:选择方案
1:方案一
在VHDL设计描述中,采用自顶向下的设计思路,该思路在自顶向下的VHDL 设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。通过上面的分析,不难得知可以把交通灯控制系统划分为3个模块:时钟模块、控制模块、分频模块。
2:方案二
不采用方案一的分模块设计,直接用进程写程序。该程序由7个进程组成,进程P1将CLK信号分频后产生1秒信号,P2形成0-49的计数器,进程P3、P4用来控制的信号灯亮灭的,其中P5、P6产生数码管显示的倒数的十进制形式。进程P7实现状态转换和产生状态转换的控制信号,进而控制数码管显示。
由于方案一中使用进程会使程序变得很复杂,不易理解,所以我采用了方案二。
四:方案二ASM图设计
开关控制部分ASM图
ASM图说明:i、j、k、分别代表开关状态;1表示开关闭合,为高电平;0表示开关断开为低电平。当开关处于不同的状态时,分别给变量G不同的值,用来实现控制通行时间。
五:模块设计
模块图说明:
Clk:1HZ时钟信号
Urgency:复位信号,高电平有效
Led[7..0]:分别表示主干道和支干道的左拐黄红绿灯E_W[7..0]:表示主干道的倒计时显示时间
S_N[7..0]: 表示支干道的倒计时显示时间
六:模块仿真
模块仿真图
模块仿真说明:
Clk:1HZ时钟信号
Urgency:复位信号,高电平有效
Led[7..0]:分别表示主干道和支干道的左拐黄红绿灯
E_W[7..0]:表示主干道的倒计时显示时间
S_N[7..0]: 表示支干道的倒计时显示时间
七:硬件测试及说明
将程序编写好并仿真完成后,选择需要下载的芯片型号并分配引脚,分配好后再次进行编译,之后下载到硬件中,有如下现象:
实物图
如上图:
从左起:第一和第二个数码管表示主干道的倒计时时间。第三和第四个数码管表示支干道的倒计时时间。八个二极管分别表示主干道的左拐、红灯、黄灯、绿灯和支干道的左拐、红灯、黄灯、绿灯。
具体运行状态说明:
倒计时显示主干道和支干道的倒计时时间。主干道左转灯、红灯、绿灯和黄灯亮的时间分别是10秒、30秒、25秒、5秒。支干道左转灯、红灯、绿灯和黄灯亮的时间分别是10秒、40秒、15秒、5秒状态表如表支干道5秒倒计时结束后,又继续返回到第一条循环进行。验证了设计完成了预定功能。
八:结论
在本设计中出现的问题有很多,比如程序的组合,一开始我只是简单的将编好的控制模块,分频模块组合在一起,进行编译的时候并没有报错,而仿真结果也是看似正确,因为只有主程序得到编译。最后一步是硬件的仿真,程序下载之后,数码管不亮,二极管也不亮,我检查程序,也没有错误,接入引脚也是正确的(虽然之前有几次是因为引脚接错位和芯片的错误使用,以及功能仿真与时序仿真的不同),启动之后就是不亮,经过反复检查,复位键和保持键有些失灵,按下几次之后即恢复正常工作,和之前期望的完全相同。
本设计中出现的错误以及查找和改正错误的过程是最大的收获,这不仅是对我知识的考察,也是一种实际应用能力的证明,经过两天不间断的检查和纠正,程序才算初步成功可编译,然而对已仿真的结果常常又不能尽人意,还要时不时的修改程序已达到期望的目标,最后下载硬件的时候更是麻烦,本来仿真是完美的,可就是硬件实现出问题,这足足花了一下午的时间检查错误,程序基本没错,就是硬件失灵,按了好几次复位与保持才使程序正确运行,这是对硬件了解太少所导致的后果,以后学习检查硬件也是我学习的重点!
至此,本设计圆满成功!
九:参考文献
[1] 潘松,黄继业.EDA技术使用教程. 北京:科学出版社,2006
[2] 黄任.VHDL入门.解惑.经典实例.经验总结.北京:北京航空航天大学出版社
[3] 徐志军,徐光辉.CPLD/FPGA的开发与应用.北京:电子工业出版社,2002
[4] 李洪伟,袁斯华基于quartus 2的FPGA/CPLD的设计电子工业出版
[5]VHDL数字电路设计教程乔庐峰王志功等译电子工业出版
[6]EDA技术实验讲义杭州康芯电子有限公司
附录:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY traffic IS
PORT (clk,urgency:IN STD_LOGIC;
led:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);
E_W,S_N:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0));
END traffic;
ARCHITECTURE rtl OF traffic IS
BEGIN
PROCESS(clk)
BEGIN
IF urgency ='0' THEN --清零,东西南北红灯亮;led<="10000001";
E_W<="00000000";
S_N<="00000000";
ELSIF clk'event AND clk='1' THEN
IF E_W="00000000" AND S_N="00000000" THEN -- 10,40
E_W<="00010000"; -- 主干道左拐灯亮、支干道红灯亮
S_N<="01000000";
led<="10000100";
ELSIF E_W="00000000" AND S_N="00110000" THEN --00,30
E_W<="00100100";
S_N<="00110000";
led<="00010100";
ELSIF E_W="00000000" AND S_N="00000101" THEN --00,05,
E_W<="00000101";
S_N<="00000101";
led<="00100100";
ELSIF E_W="00000001" AND S_N="00000001" THEN --00,00
E_W<="00110000";
S_N<="00010000";
led<="01001000";
ELSIF E_W="00100000" AND S_N="00000000" THEN --20,00
E_W<="00100000";
S_N<="00010101";
led<="01000001";
ELSIF E_W="00000100" AND S_N="00000000" THEN --05,00
E_W<="00000101";
S_N<="00000101";
led<="10000010";
ELSIF E_W="00000100" AND S_N="00000000" THEN --04,00