基于FPGA的交通灯设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档