FPGA交通灯实训 报告.docx

上传人:b****2 文档编号:2088436 上传时间:2023-05-02 格式:DOCX 页数:24 大小:291.35KB
下载 相关 举报
FPGA交通灯实训 报告.docx_第1页
第1页 / 共24页
FPGA交通灯实训 报告.docx_第2页
第2页 / 共24页
FPGA交通灯实训 报告.docx_第3页
第3页 / 共24页
FPGA交通灯实训 报告.docx_第4页
第4页 / 共24页
FPGA交通灯实训 报告.docx_第5页
第5页 / 共24页
FPGA交通灯实训 报告.docx_第6页
第6页 / 共24页
FPGA交通灯实训 报告.docx_第7页
第7页 / 共24页
FPGA交通灯实训 报告.docx_第8页
第8页 / 共24页
FPGA交通灯实训 报告.docx_第9页
第9页 / 共24页
FPGA交通灯实训 报告.docx_第10页
第10页 / 共24页
FPGA交通灯实训 报告.docx_第11页
第11页 / 共24页
FPGA交通灯实训 报告.docx_第12页
第12页 / 共24页
FPGA交通灯实训 报告.docx_第13页
第13页 / 共24页
FPGA交通灯实训 报告.docx_第14页
第14页 / 共24页
FPGA交通灯实训 报告.docx_第15页
第15页 / 共24页
FPGA交通灯实训 报告.docx_第16页
第16页 / 共24页
FPGA交通灯实训 报告.docx_第17页
第17页 / 共24页
FPGA交通灯实训 报告.docx_第18页
第18页 / 共24页
FPGA交通灯实训 报告.docx_第19页
第19页 / 共24页
FPGA交通灯实训 报告.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

FPGA交通灯实训 报告.docx

《FPGA交通灯实训 报告.docx》由会员分享,可在线阅读,更多相关《FPGA交通灯实训 报告.docx(24页珍藏版)》请在冰点文库上搜索。

FPGA交通灯实训 报告.docx

FPGA交通灯实训报告

北京联合大学

实训报告

 

课程(项目)名称:

交通灯控制系统设计

学院:

专业:

班级:

学号:

姓名:

成绩:

 

2011年 9 月 15日

一、目录

2.前言------------------------------------------------------------------------------------3

3.课程设计任务书---------------------------------------------------------------------5

3.1基本要求---------------------------------------------------------------------5

3.2设计提示---------------------------------------------------------------------5

4.系统电路功能描述、粗框图-------------------------------------------------------6

4.1系统电路功能---------------------------------------------------------------6

4.2系统电路粗框图------------------------------------------------------------7

5.系统电路设计陈述------------------------------------------------------------------8

5.1系统电路总框图及工作原理---------------------------------------------8

5.2、受控模块中各子系统电路间的逻辑关系、信息流方向、工作框图--------------------------------------------------------------------------23

5.3、下载结果,试验测试报告,数据处理和分析。

------------------27

5.4、系统电路最终能实现或拟实现的功能------------------------------27

6.成员分工及工作进度------------------------------------------------------------28

7.本人承担的任务及执行情况----------------------------------------------------28

8.设计过程中遇到的问题及收获和体会----------------------------------------29

9.参考文献--------------------------------------------------------------------------30

二、前言

EDA(ElectronicDesignAutomation)技术是指以计算机为工作平台,融合应用电子技术,计算机技术,信息处理及智能化技术,进行电子产品自动化设计的一门新技术,是现代电子工程领域的一门新技术。

它提供了基于计算机和信息技术的电路系统设计方法。

它对用电路描述语言描述的设计文件,自动地完成编译、化简、分割、综合、布线、优化、仿真等,直至实现既定的电子电路系统的功能,打破了软件设计和硬件设计间的壁垒,是一门综合性学科,一种新的技能技术。

它将设计效率和产品性能合二为一,代表了电子设计技术和电子应用技术的发展方向。

EDA技术作为现代电子设计技术的核心,依赖于功能强大的计算机,在EDA工具软件平台上,对硬件描述语言微逻辑描述手段完成的设计文件,自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑宗和,布局布线,以及逻辑优化和仿真测试,直至实现既定的电子电路的功能。

随着计算机的普及,EDA软件已广泛地应用于电子电路的分析与设计中,它改变了以定量估算和电路实验为基础的传统设计方法,代表了当今电子设计技术的最新发展方向,成为现代电子线路设计的必不可少的工具与手段。

在硬件方面,EDA技术融饿了大规模集成电路制造技术,集成电路板图设计技术,可编程器件编程技术,自动测试技术等;在计算机辅助工程方面融合了计算机辅助设计CAD,计算机辅助制造CAM,计算机辅助分析CAA,计算机辅助测试CAT,计算机辅助工程CAE技术以及多种计算机语言的设计概念;在现代电子学方面融入了诸如计算机设计技术,电子线路设计理论,数字信号处理技术,数字系统建模和优化技术以积极与微波技术的长线技术理论等。

因此,EDA技术为现代电子理论和设计的表达以实现提供了可能。

当前,利用EDA技术惊醒电子电路设计的主要方法,是基于可编程器件完成专用集成电路ASIC的实现。

ASIC作为最终的物理平台,是集中容纳用户通过EDA技术将电子应用系统的既定功能,技术指标和个性创意具体实现的硬件实体。

在传统的电路设计中,分立元件,中小规模集成电路的功能,参数,规格是相对固定的,人们把大量的时间和精力花在元器件的选配和电路结构的可行性分析上,采用的设计方法只能是自底向上的,即整体电路是由底层器件,电路一层层及联起来的。

在这个设计过程中的任何一时刻,若发生底层目标器件的缺损,总体或局部参数的变更,甚至由于市场竞争热而临时提出降低系统成本,提高运行速度等不可预测的外部因素,都间可能使前期的工作前功尽弃,设计工作由得从新由底层做起。

可见,自底而上是一种低效,低可靠性高成本的设计方法。

在EDA技术应用中广泛采用自顶向下的设计方法设计电路工程项目的设计流程包括:

用自然语言描述功能特性和技术指标,用硬件描述语言建立系统描述→行为描述→结构描述→逻辑描述,用计算机开发软件进行功能仿真→时序仿真→硬件测试。

设计者在整个设计过程中可根据需要,随心所欲的改变器件内部结构乃至期间外部引脚功能,可以将系统电路分解为各个模块,也可以将多个模块集合在一起,而不必顾及各个器件的技术细节。

正是采用了基于可编程器件的,利用计算机完成的自顶向下的设计方法,大大减少了功能芯片的数量,减轻了设计电路板图的工作量,缩小了整体电路的体积,提高了系统的可靠性,加快了验发的速度,降低了产品设计的成本。

VHDL的全名是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,于83年由美国国防部发起创建,由IEEE(TheInstituteofElectricalandElectronicsEngineers电气与电子工程师学会)进一步发展,在87年作为“IEEE标准1076”发布,93年被升级为“IEEE1164”。

硬件描述语言是EDA技术的重要组成部分,VHDL作为电子设计的主流硬件描述语言,被多个EDA公司所引用。

VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,具有良好的移植性和适应性,从而大大简化了硬件设计任务,提高了电子系统设计的效率和可靠性。

用VHDL进行电子系统设计的一个很大的优点是设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。

此次课程设计我们组的项目是“交通灯控制器”。

我们组学习了《FPGA设计基础》应用以及QuartusⅡ软件进行了设计和编辑。

本项目实现十字路口红绿灯左转灯的功能,即:

主干道绿灯亮时,支道路红灯亮;主干道黄灯亮时,支道路红灯亮;主干道红灯亮时,支道路绿灯亮;主干道左转灯亮时,支路红灯亮;支道路黄灯亮时,主干道红灯亮;支路左转灯亮时主干道红灯亮;由此循环……

三、课程设计任务书

3.1基本要求

为了保证住干道的畅通,主干道绿灯亮(支干道红灯亮),持续时间不得少于80s。

在保证主干道通车不低于80s的前提下,若支干道有车,则主干道红灯亮,支干道绿灯亮,时间不得超过40s。

每次主干道或支干道由绿灯亮转换为红灯亮时,黄灯亮6s。

主干道绿灯亮时配有正计时数码显示,支干道配有倒计时数码显示或滚动彩灯显示。

遇有消防,救护等车辆通行时,则进入特殊运行状态:

两干道均红灯亮,时钟停止计时。

待特殊状态结束后,恢复正常状态。

3.2设计提示

1、参考课本6.1.3节交通灯控制系统设计,可以两个方向分别控制,也可以采用两个方向同时控制,这时的工作状态有四种:

s0状态:

主道绿灯,支道红灯;

s1状态:

主道黄灯,支道红灯;

s2状态:

主道红等,支道绿灯;

s3状态:

主道红灯,支道黄灯。

2、特殊情况的控制,可以通过引进一个控制信号,有两种状态,一种是自动控制运行状态,一种特殊运行状态。

当低电平时指示灯系统正常运行,数码管正常显示。

当控制信号为高电平时进入特殊状态,代表遇到紧急情况,按要求,主支干道指示灯均为红灯,而数码管停止计数。

当紧急情况恢复后,指示灯和数码管进入先前的状态系统继续运行。

四、系统电路功能描述、粗框图

4.1系统电路功能

1、本组设计共有主干道、支干道两个方向两组指示灯,分别有绿、红、黄、左转。

另主干道、支干道分别分配了两个数码管显示各自方向上的状态指示灯的倒计时时间。

2、本组设计的交通灯控制器主干道绿灯显示时间为80s,红灯为46s,黄灯显示时间为6s;左转灯为10s;支干道红灯显示时间为96s,绿灯时间为30s,黄灯为6s,左转灯10s。

系统初始状态为主干道左转灯亮,左转弯车辆通行,持续时间10s。

当10s计时结束主干道进入绿灯状态,代表车辆通行,持续时间为80s。

当80s计时结束主干道进入黄灯状态,黄灯显示时间为6s。

在主干道为左转、绿、黄灯状态时,此时支干道相应的为红灯,持续时间96s。

当支干道红灯96s计时结束,主干道变为红灯,计时46s,同时支干道变为左转灯,时间10s。

之后变为绿灯,计时30s,当支干道绿灯计时结束后进入6s的黄灯计时,计时结束后支干道回到红灯,主干道变为左转灯,依次循环…

3、计时时间和初始状态以及状态转换顺序均按上述实现,最后将两组模块儿组合起来最终实现整个十字路口的交通指示灯系统。

而这两个模块使能控制端与特殊信号输入端短接在一起,因此能达到同步的目的。

4.2系统电路粗框图

控制模块和倒计时模块的工作原理和二者之间的制约关系(双向),为了减少模块间的数据传送,可以把两个模块合并成一个模块,这样实现起来比较方便。

五、系统电路设计陈述

5.1系统电路总框图及工作原理

1、总框图(如下):

2工作原理:

分别设计了主干道和支干道模块,两模块的设计思想相似,都是一个led灯的转换和数码管倒计时显示子模块组成,其中led灯的子模块实现了左转—>绿—>黄—>红(主干道)和红—>左转—>绿—>黄(支干道)的转换顺序。

在转换中给定一个状态信号a,初始状态为0,当正常运行时状态信号a为1,实现倒计时后给定下一个状态(比如绿时转黄将下一个状态设置为黄),然后将a给定位初始状态a=0。

然后将主干道、支干道两个模块组合在一起,将他们的使能控制端和时钟输入端以及特殊情况控制信号输入端分别短接在一起,这样,因为我们在设计时已经考虑到两模块组合时的同步情况,所以这儿不必担心主干道和支干道指示灯显示的状态不匹配的情况。

3、控制模块的逻辑功能描述,端口功能描述,控制流程图及控制流程说明,仿真波形分析结果及说明

3.1、主干道控制模块:

功能控制端:

rest:

使能控制端,初始状态为低电平,当给定高电平时系统恢复初始状态。

clk:

时钟信号输入端。

S:

特殊状态控制信号输入端,初始状态为0,当遇到紧急情况时给定s高电平,led灯进入红灯状态,数码管倒计时显示时间停止计时。

当紧急情况解除,回复s低电平后,系统恢复原来状态。

即:

led灯和数码管恢复原来状态继续正常运行。

r:

代表红灯。

g:

代表绿灯。

y:

代表黄灯。

l:

代表左转灯。

timh:

代表数码管显示的倒计时高位。

timl:

代表数码管显示的倒计时低位。

3.2、主干道源程序清单:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityyyjis

port(rest,clk,s:

instd_logic;--s是特殊情况,rest复位信号,clk系统时钟

r,y,g,l:

outstd_logic;--三色交通灯

timh,timl:

outstd_logic_vector(3downto0));--计时器的高位timh和低位timl

endyyj;

architecturecom_arcofyyjis

typergylis(red,green,yellow,left);--枚举类型数据:

red、green、yellow

begin

process(clk)

variablea:

std_logic;

variableth,tl:

std_logic_vector(3downto0);

variablestate:

rgyl;

begin

ifrest='1'then

state:

=left;--设置系统初始状态为左转

a:

='0';

elsifclk'eventandclk='1'then--上升沿到来时执行下面语句

casestateis

whenleft=>ifa='0'then

th:

="0001";tl:

="0000";--设置左转灯计时10s

a:

='1';

g<='0';r<='0';y<='0';l<='1';--控制左转灯亮,红灯、黄灯、绿灯灭

else

ifnot(th="0000"andtl="0001")then

ifs='0'then

g<='0';r<='0';y<='0';l<='1';

iftl="0000"then

tl:

="1001";th:

=th-1;

else

tl:

=tl-1;

endif;

else

g<='0';r<='1';y<='0';l<='0';

th:

=th;

tl:

=tl;

endif;

else

th:

="0000";tl:

="0000";

a:

='0';

state:

=green;--计时时间到,进入绿灯状态

endif;

endif;

whengreen=>ifa='0'then

th:

="1000";tl:

="0000";--设置绿灯计时80s

a:

='1';

g<='1';r<='0';y<='0';l<='0';--控制绿灯亮,红灯、左转、黄灯灭

else

ifnot(th="0000"andtl="0001")then

ifs='0'then--当特殊情况控制信号为低电平时正常进行倒计时

g<='1';r<='0';y<='0';l<='0';

iftl="0000"then

tl:

="1001";th:

=th-1;

else

tl:

=tl-1;

endif;

else

g<='0';r<='1';y<='0';l<='0';--当特殊情况控制信号为高电平时并将停止计时,led灯显示为红灯

th:

=th;

tl:

=tl;

endif;

else

th:

="0000";tl:

="0000";

a:

='0';

state:

=yellow;--计时时间到,进入黄灯状态

endif;

endif;

whenyellow=>ifa='0'then

th:

="0000";tl:

="0110";--设置黄灯倒计时6s

a:

='1';

g<='0';r<='0';y<='1';l<='0';--控制黄灯亮,绿灯、左转灯、红灯灭

else--执行倒计时

ifnot(tl="0001")then

ifs='0'then

g<='0';r<='0';y<='1';l<='0';

tl:

=tl-1;

else

g<='0';r<='1';y<='0';l<='0';

endif;

else

tl:

="0000";

a:

='0';

state:

=red;--计时时间到,进入红灯亮状态

endif;

endif;

whenred=>ifa='0'then

th:

="0100";tl:

="0110";--设置红灯倒计时46s

a:

='1';

g<='0';r<='1';y<='0';l<='0';--控制红灯亮,绿灯、黄灯、左转灯灭

else--执行倒计时

ifnot(th="0000"andtl="0001")then

ifs='0'then

g<='0';r<='1';y<='0';l<='0';

iftl="0000"then

tl:

="1001";th:

=th-1;

else

tl:

=tl-1;

endif;

else

g<='0';r<='1';y<='0';l<='0';

th:

=th;

tl:

=tl;

endif;

else

th:

="0000";tl:

="0000";

a:

='0';

state:

=green;--倒计时时间到,进入绿灯亮状态

endif;

endif;

whenothers=>state:

=green;

a:

='0';

endcase;

endif;

timh<=th;

timl<=tl;

endprocess;

endcom_arc;

3.3、支干道控制模块:

功能端口:

rest1:

使能控制端,初始状态为低电平,当给定高电平时系统恢复初始状态。

clk1:

时钟信号输入端。

S:

特殊状态控制信号输入端,初始状态为0,当遇到紧急情况时给定s高电平,led灯进入红灯状态,数码管倒计时显示时间停止计时。

当紧急情况解除,回复s低电平后,系统恢复原来状态。

即:

led灯和数码管恢复原来状态继续正常运行。

r1:

代表红灯。

g1:

代表绿灯。

y1:

代表黄灯。

l1:

代表左转灯。

timh1:

代表数码管显示的倒计时高位。

timl1:

代表数码管显示的倒计时低位。

3.4、支干道源程序清单:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityyyj1is

port(rest1,clk1,s:

instd_logic;--s是特殊情况,rest复位信号,clk系统时钟

r1,y1,g1,l1:

outstd_logic;

timh1,timl1:

outstd_logic_vector(3downto0));--计时器的高位timh和低位timl

endyyj1;

architecturecon_arcofyyj1is

typergyl1is(red1,green1,yellow1,left1);

begin

process(clk1)

variablea1:

std_logic;

variableth1,tl1:

std_logic_vector(3downto0);

variablestate1:

rgyl1;

begin

ifrest1='1'then

state1:

=red1;--设置系统初始状态为红灯亮

a1:

='0';

elsifclk1'eventandclk1='1'then

casestate1is

whenred1=>ifa1='0'then

th1:

="1001";tl1:

="0110";--设置红灯计时96s

a1:

='1';

g1<='0';r1<='1';y1<='0';l1<='0';

else

ifnot(th1="0000"andtl1="0001")then

ifs='0'then--当特殊情况控制信号为低电平时正常进行倒计时

g1<='0';r1<='1';y1<='0';

iftl1="0000"then

tl1:

="1001";th1:

=th1-1;

else

tl1:

=tl1-1;

endif;

else

g1<='0';r1<='1';y1<='0';

th1:

=th1;

tl1:

=tl1;

endif;

else

th1:

="0000";tl1:

="0000";

a1:

='0';

state1:

=left1;

endif;

endif;

whenleft1=>ifa1='0'then

th1:

="0001";tl1:

="0000";--设置左转灯计时10s

a1:

='1';

g1<='0';r1<='0';y1<='0';l1<='1';--控制左转灯亮,红灯、绿灯、黄灯灭

else

ifnot(th1="0000"andtl1="0001")then

ifs='0'then

g1<='0';r1<='0';y1<='0';l1<='1';

iftl1="0000"then

tl1:

="1001";th1:

=th1-1;

else

tl1:

=tl1-1;

endif;

else

g1<='0';r1<='1';y1<='0';l1<='0';

th1:

=th1;

tl1:

=tl1;

endif;

else

th1:

="0000";tl1:

="0000";

a1:

='0';

state1:

=green1;--计时时间到,进入绿灯状态

endif;

endif;

whengreen1=>ifa1='0'then

th1:

="0011";tl1:

="0000";

a1:

='1';

g1<='1';r1<='0';y1<='0';l1<='0';

else

ifnot(th1="000"andtl1="0001")then

ifs='0'then

g1<='1';r1<='0';y1<='0';l1<='0';

iftl1="0000"then

tl1:

="1001";

th1:

=th1-1;

elsetl1:

=tl1-1;

endif;

else

g1<='0';r1<='1';y1<='0';l1<='0';

th1:

=th1;

tl1:

=tl1;

endif;

else

tl1:

="0000";th1:

="0000";

a1:

='0';

state1:

=yellow1;

endif;

endif;

whenyellow1=>ifa1='0'then

th1:

="0000";tl1:

="0110

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2