wzq正文

更新时间:2024-06-03 10:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中北大学信息商务学院2009届本科毕业设计任务书

1 引言

1.1 交通信号灯的意义

交通灯信号灯是一种能够自动转换的数字逻辑电路系统,作用是保障路口过往车辆、行人能顺利通过的工具。它能够自动控制红黄、绿三种信号灯。有了它可以很直观方便地控制观察十字路口的交通状况,对于交通的安全起到非常重要的作用。交通灯的出现不仅可以指导车辆和行人安全有序地通行,而且加强了道路交通管理,减少交通事故的发生,提高道路使用效率。其中红灯亮表示禁止通行;绿灯亮表示可以通行;黄灯亮表示缓行或停车。交通信号灯的设计和外形是多种多样的就是为了方便的应用与各种街道和路口。交通信号灯的种类繁多主要有:机动车道信号灯、人行横道信号灯、非机动车道信号灯、方向指示信号灯、移动式交通信号灯、太阳能闪光警告信号灯、收费站天棚信号灯,交通灯也在铁道上得到了广泛的应用为。

交通灯在正常运行的情况下,能维持正常交通,交通灯的信号起着至关重要的作用。但事实上,交通信号灯常常由于某种原因显示不正常,需要通过检测电路来判断是否正常,进而来通知交警部门,否则可能造成不可挽回的损失。交通信号灯的红、绿、黄3个灯独立工作是正常,就是为了处理特殊的情况。如果出现特殊情况则红、绿、黄3个灯都显示红灯,道路通行被禁止。 1.2 FPGA的发展及意义

目前,FPGA的主要发展动向是:随着大规模现场可编程逻辑器件的发展,系统设计进入“片上可编程系统”(SOPC)的新纪元;芯片朝着高密度、低压、低功耗方向挺进;国际各大公司都在积极扩充其IP库,以优化的资源更好的满足用户的需求,扩大市场;特别是引人注目的所谓FPGA动态可重构技术的开拓,将推动数字系统设计观念的巨大转变。

如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题,一直是采用FPGA的系统设计工程师需要考虑的关键问题。如今,随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。

第 1 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

今天,数字电子系统的设计方法及设计手段都发生了根本性变化,正由分立数字电路向可编程逻辑器件(PLD,Programmable Logic Device)及专用集成电路(ASIC,Application Specific Integrated Circuit)转变。FPGA与CPLD(Programmable Logic Device,复杂可编程逻辑器件)都属于PLD的范畴,它们在现代数字系统设计中正占据越来越重要的地位。

纵观现场可编程逻辑器件的发展历史,其之所以具有巨大的市场吸引力,根本在于:FPGA不仅可以解决电子系统小型化、低功耗、高可靠性等问题,而且其开发周期短、开发软件投入少、芯片价格不断降低,促使FPGA越来越多地取代了ASIC的市场,特别是对小批量、多品种的产品需求,使FPGA成为首选。

2 硬件方案设计

2.1 整体结构设计

本次设计是主要由4个部分组成。利用VHDL汇编语言,要求在EDA实验箱上实现交通信号灯自动控制的功能。根据所给材料和任务使用彩色灯、7段数码管显示交通灯的功能。整体结构设计方案如下图所示:

图2.1 整体结构方

整个系统有电源模块、控制模块、交通信号灯的彩灯模块组成。由FPGA及其外围电路为核心。控制模块是VHDL语言所编的程序为主体,通过开关的具体操作使FPGA给交通灯发送信号进行控制。交通信号灯的彩灯模块主要由7段数码管和2个红2个黄、2个绿共6个彩灯组成。 2.2 FPGA的组成介绍 2.2.1 FPGA的时钟发生电路

随着FPGA集成度的不断提升,单片FPGA已经可以完成百万门级的集成电路设计。因此,很多设计可以利用FPGA完成流片前的功能验证。甚至直接 使用FPGA进行商业生产。但是,FPGA的特殊结构决定了基于FPGA的设计不能直接照搬在设计当

第 2 页 共33 页

电源 FPGA 控制 交通信号灯 中北大学信息商务学院2009届本科毕业设计任务书

中的某些经验,时钟设计便是其中较突出的1条。如下图所示:

图2.2 FPGA的时钟结构

该系列FPGA直接利用单独一层铜布线层搭建时钟网络。所有的时钟信号,只能通过处于芯片纵向中轴线上下两端的16个BUFGMUX进入时钟网络。所有 BUFGMUX输出端一直延伸到芯片的中心,连接到铜布线层处于芯片中央纵向分布宽度为8的时钟总线。纵向时钟总线再连接到横向的8条宽度为8的时钟总 线,进而延伸到每一个CLB(Configurable Logic Block,可编程逻辑块)的GRM(General Route Matrix,通用布线矩阵阵列)上。 2.2.2 输入/输出接口

它是用户使用的引退和片内的功能单元的接口,一方面要尽量的满足用户编程的要求,另一方面要把外部的信号变成合适的形式送到芯片内部去。它的结构能够兼容多个电压标准,支持输入,输出,双向,集电极开路和三态输出模式,具有高驱动和高扇出,系统级I/O 特性等。 2.2.3 布线资源

布线资源提供功能单元之间和功能单元和I/O 块的通信,布线资源主要有:水平或垂直地跨过整个阵列的长线,允许线路通断的开关和开关盒(开关矩阵),多路选择器和用以降低分布电容的分段布线短线。 2.3 FPGA的通用设计过程

(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VHDL文件保存为.vhd文件,Verilog文件保存为.v文件。

(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确。

第 3 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。

(4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。

(5)时序仿真:需要利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。

(6)编程下载:确认仿真无误后,将文件下载到芯片中。 2.4 中心控制模块的设计 2.4.1 系统中FPGA的应用

本次设计中,采用了ALTERA 公司ACEXIK系列的EP1K30TC144-3芯片。见下图所示:

图2.3 系统中FPGA的连接电路

Altera 一直在可编程系统级芯片(SOPC)领域中处于前沿和领先的地位,结合带有软件工具的可编程逻辑技术、知识产权 (IP) 和技术服务,在世界范围内为14,000多个客户提供高质量的可编程解决方案。可将可编程逻辑的内在优势、灵

第 4 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

活性、产品及时面市和更高级性能以及集成化结合在一起,专为满足当今大范围的系统需求而开发设计。

自从1983年发明世界上第一款可编程逻辑器件以来,一直是创新定制逻辑解决方案的领先者。今天,分布在19个国家的2,600多名员工为各行业的客户提供更具创造性的定制逻辑解决方案,帮助他们解决从功耗到性能直至成本的各种问题,这些行业包括汽车、广播、计算机和存储、消费类、工业、医疗、军事、测试测量、无线和固网等。

Altera 可编程解决方案包括:业内最先进的 FPGA、CPLD 和结构化 ASIC 技术、全面内嵌的软件开发工具、最佳的 IP 内核、可定制嵌入式处理器、现成的开发包、专家设计服务。Altera全面的产品组合不但有器件,而且还包括全集成软件开发工具、通用嵌入式处理器、经过优化的知识产权(IP)内核参考设计实例和各种开发套件等。 2.4.2 FPGA供电电路

本系统中采用的正常工作电压是3.3V,内部还需要2.5V的电源。它能产生稳定的3.3V和2.5V电压。在系统电路中的连接情况下如图所示:

图2.4 FPGA供电电路 2.4.3 电源和地滤波电路

在硬件电路设计中,电源是电路能否正常工作的关键环节,也是最容易被忽略的环节。在数字电路中,电源有两个基本功能:首先是为逻辑器件提供工作电源,其次是为数字电平信号提供参考电压。为了消除电源线及地线的纹波,在器件及电

第 5 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

路板上增加滤波电容,以提高器件的抗干扰能力。

本设计在每个电路芯片的电源引脚上都并接一个的电容,其作用是降低电路中因负载变化而引起的噪声、减少干扰信号并使信号稳定。如下图所示:

图2.5 滤波电路 2.4.4 FPGA的程序下载电路

FPGA通过门阵列方式为用户提供可编程资源,其内部逻辑结构的形成由配置数据决定的。这些配置数据通过外部控制电路或微处理器加载到FPGA内部中的SRAM中,在不掉电的情况下,这些逻辑结构将会始终被保持,从而完成用户编程所要实现的功能,由于SRAM的易失性,每次上电时,都必须对FPGA进行重新配置。

FPGA的配置主要分为两大类,主动配置方式和被动配置方式。主动配置方式由FPGA引导配置操作过程,控制外部存储器和初始化的进程。被动配置方式则由FPGA外部的计算机或控制器来控制配置过程。本设计所采用的是FPGA被动配置方式,FPGA的配置芯片使用ALTERA公司的芯片EPCS4-NEW。它的正常工作电压为3.3V,可配置3.3V器件。可以通过JTAG接口在3.3V电压下对FPGA芯片进行编程。如下图所示:

图2.6 FPGA下载电路

2.4.5 时钟发生电路

晶振即晶体振荡器,用来产生一个不间断的脉冲波形。FPGA通过它产生一个

第 6 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

时钟信号,作为总的系统时钟来控制每个动作的时间及其快慢。在本系统中的采用的是20MHz的晶体振荡器。时钟发生电路的连线情况如下图所示:

图2.7 时钟发生电路 2.5 数码管的介绍 2.5.1 7数码管的组成

顾名思义7段数码管是由7个数码管组成具体排列方式如下图2.8所示。由这7个数码管的颜色可以组成各个数字,标点符号和所需要的图形。如根据数码(0,1,2,3,4,5,6,7,8,9)来决定七段中的某一段或某几段进行绘制,如果数码为0,则显示0、1、2、3、4、5段;数码为1,则显示1、2段,依次类推。如下图所示:

图2.8 7段数码管引角图 2.5.2 数码管使用条件及注意事项 (1)段及小数点上加限流电阻。

(2)数码管显示的所有数字、字母、符号都是由发光的颜色组成。

(3)使用的电流在静态时总电流 80mA(每段 10mA);在动态时平均电流 4-5mA

第 7 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

峰值电流 100mA。

(4)数码管表面不要用手触摸,不要用手去弄引角。 (5)焊接温度:260度;焊接时间:5s。

(6)表面有保护膜的产品,可以在使用前撕下来。 2.6 LED的介绍

LED(Light Emitting Diode)即发光二极管是利用半导体的P-N结电致发光原理制成的一种半导体发光器件。 LED具有亮度高、功耗小、寿命长、工作电压低、易小型化等优点。近几年来,它得到迅猛的发展和广泛的应用。从七十年代起,已有人开始用LED做为发光像素研制LED显示器。随着微机技术的发展和LED器件的成熟,LED 显示屏也得到迅猛的发展。

目前已研制出多种规格的LED屏,从色彩上讲有单色、多色、全色显示屏,从显示尺寸上讲,LED屏现已做到了数百平方米。现已形成了一个新兴的高科技产业。 最近,兰色、纯绿色超高亮发光二极管相继研制成功并已商品化,用LED制成室外;大彩电;已成为现实,它标志着 LED显示技术达到了一个新的高度。

3 软件方案设计

3.1 MaxplusⅡ软件的介绍 3.1.1 MaxplusⅡ简介

根据设计的要求我采用的是VHDL程序语言,在MaxplusⅡ软件上进行编程和验证。MaxplusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。MaxplusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在MaxplusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。 3.1.2 MaxplusⅡ系统的特点

(1)应用界面广泛:MaxplusⅡ支持与Cadence,Exemplarlogic,Mentor Graphics,Synplicty,Viewlogic和其它公司所提供的EDA工具接口。

(2) 与结构无关:MaxplusⅡ系统的核心Complier支持Altera公司的FLEX10K FLEX8000、FLEX6000、MAX9000、MAX7000、MAX5000和Classic可编程逻辑器件提

第 8 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

供了,世界上唯一真正与结构无关的可编程逻辑设计环境。

(3)完全集成化:MaxplusⅡ的设计输入、处理与较验功能全部集成在统一的开发环境下,这样可以加快动态调试、缩短开发周期。

(4)丰富的设计库:MaxplusⅡ提供丰富的库单元供设计者调用,其中包括74系列的全部器件和多种特殊的逻辑功能(Macro-Function)以及新型的参数化的兆功能(Mage-Function)。

(5)设计人员可以从各种设计输入、处理和较验选项中进行选择从而使设计环境用户化。操作界面为下图所示:

图3.1 MaxplusⅡ 程序操作界面图 3.2 VHDL语言介绍 3.2.1 VHDL语言简介

VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language。翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。

目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模

第 9 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分)既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。 3.2.2 VHDL语言的特点

VHDL具有功能强大的语言结构而且设计灵活。可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。 支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。

强大的系统硬件描述能力。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。

独立于器件的设计、与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。很强的移植能力。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持使得设计描述的移植成为可能。

易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。

第 10 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

3.2.3 VHDL语言的优越性

(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 (2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。

(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。

(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。

(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。

(6)设计层次较高、用于较复杂的计算时,能尽早发现存在的问题,缩短设计周期。独立实现,修改方便,系统硬件描述能力强。可读性好,有利于交流,适合于文档保存。而且VHDL语言标准、规范、移植性强。

(7)VHDL类型众多而且支持用户自定义类型,支持自顶而下的设计方法和多种电路的设计。VHDL是一种具备形式化、层次化和规范化的硬件描述语言,它能针对设计实体的多方面特性,给出不同层次上的表达方式、结构描述、数据流描述和行为描述。

3.2.4 用VHDL进行电路系统设计流程

设计输入:把我们的设计思想,算法或电路的功能,行为,结构等用文本或者图形的方式输入计算机,以便让它自动实现我们的设计。输入方法一般有:HDL(VHDL,Verilog),状态机和原理图。

编译:目的是生成仿真使用或者进行下一步处理的格式。

验证:又有称模拟或仿真,主要是检验设计是否达到预期的目的。

综合:把设计输入转变成可以实现的电路形式(门,触发器),一般有VHDL 代码翻译,最小化及满足时间约束(此过程人做叫设计,计算机做叫综合)。最小化是指布尔函数的化简等工作。系统设计流程图为下图所示:

第 11 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

设计要求定义 设计输入 编译 验证 综合 编译 验证 设计实现 时序仿真 芯片编程

图3.2 VHDL 系统设计流程

设计实现:包括工艺映射、优化、布局布线等步骤。工艺映射是在工艺元件库的同一元件的多种实现中选择一种;优化是最小化和工艺库在发生冲突时根据代价的折衷过程;布局是在资源阵列中安排一个元件或功能块的位置(考虑面积约束);布线是进行元件或功能块的连接(考虑时间约束)。 3.2.5 VHDL程序的基本结构

一个完整的VHDL 程序含有五个部分:实体,结构体,配置,程序包及库。我们用下面的来表示五部分在程序设计中的相对位置。

库:是经编译后的数据的集合,它存放包集合定义,实体定义,结构定义和配置定义;VHDL 的库有五类:IEEE,STD,ASIC 矢量库,WORK 库和用户定义库;库的声明总是在设计单元的最前端。

程序包:用来罗列VHDL 中要用到的信号定义,常数定义,数据类型,元件语句,函数定义,过程定义等。程序包的使用格式为:USE 库名.包集合名.ALL。

实体:描述元件的外观或者是对外的接口信号,相当于元件或芯片的引脚定义。 构造体:描述系统、元件或电路的行为、功能或者结构的封装体,对外是不可见的。构造体内部的语句必须是是并行语句,这是由硬件的并发性特点决定的。结构体的描述是VHDL 的核心部分。

配置:是层与层之间的连接关系,以及实体与结构体之间的连接关系;层与层之间的连接元件调用,模块的调用等,实体与结构体之间的连接是在多个实现的结

第 12 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

构体中选择要进行模拟的结构体。VHDL程序的基本结构为下图所示:

图3.3 VHDL 程序的基本结构

4 交通灯的设计要求及程序说明

4.1 设计任务要求 4.1.1 设计功能要求

(1)通常情况下,大道绿灯亮,小道红灯亮。

(2)若小道来车,大道经6秒由绿灯变为黄灯;再 经过4秒,大道由黄灯变为红灯,同时,小道由红灯变为绿灯。

(3)小道变绿灯后,若大道来车不到3辆,则经过 25秒钟后自动由红灯变为黄灯,再经过4秒变为红灯,同时,大道由红灯变为绿灯。

(4)如果小道在绿灯亮时,小道绿灯亮的时间还没有到25秒,只要大道检测到已经超过3辆车在等候,那么小道应立即由绿灯变为黄灯,再经过4秒变为红灯,同时,大道由红灯变为绿灯。 4.1.2 设计原理

此交通灯系统包含四个状态:大道绿灯小道红灯、大道黄灯小道红灯、大道红

灯小道绿灯、大道红灯小道黄灯,最后又回到大道绿灯小道红灯。这几个状态之间的时间间隔分别为6、4、25、4秒。可以用4选一数据选择器来控制计数器的进制,使计数器在相应的状态完成相应的功能。彩灯显示模块要采用动态扫描方式,实现大路小路分时显示。原理框图为下图所示:

第 13 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

控制 模块 计时 模块 扫描 电路 数码管 彩灯模块 扫描 电路 彩灯系统 4.2 程序说明 4.2.1 定义参数

图4.1 程序原理框图

首先进行数据库的定义,程序中涉及用到了3个数据库具体程序库的调用如下。 library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;

再定义greenbig为大道的绿灯,redbig 为大道的红灯,yellowbig 为大道的黄灯。同理可定义greensmall 为小道绿灯yellowsmall 为小道的黄灯,redsmall 为小道的红灯。程序是 small

big

: in std_logic;

: in std_logic_vector(2 downto 0);

greenbig : out std_logic; redbig : out std_logic; yellowbig

: out std_logic;

greensmall : out std_logic;

yellowsmall : out std_logic;

redsmall : out std_logic

就是在定义大道和小道的红、黄、绿灯的程序段。在开始我设定的状态就是大道和小道的6个灯都处在熄灭点亮的状态。开始状态,即6盏灯全熄灭的程序段是 signal

f_greenbig : std_logic:='0';

第 14 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

signal signal signal

f_redbig : std_logic:='0'; f_yellowbig

: std_logic:='0';

f_greensmall : std_logic:='0';

signal f_yellowsmall : std_logic:='0'; signal

f_redsmall : std_logic:='0';

定义clk 为一个循环为1秒的程序段,该程序就是为了在7段数码管程序段读取的时候每读一段就要花费1秒的时间。具体的程序如下。

begin

if fosc'event and fosc='1' then

count<=count+1;

if count=\

clk<=not clk;

count<=\

end if;

end if;

end process p0;

该程序具体的说明是在得到上升沿的时候,执行count<=count+1直到使得count=\语句成立为止,然后clk 取反,count 清零。这个程序执行1次的时间是1秒。

再定义delay为7段数码管,具体的7段数码管的参数和特点在2.5.1已经做了非常从分的介绍,现在就对程序做出解释和阐述。具体程序为:

dataz(0)<=\

dataz(1)<=\ dataz(2)<=\ dataz(3)<=\

dataz(4)<=\

dataz(5)<=\ dataz(6)<=\ dataz(7)<=\

第 15 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

dataz(8)<=\

dataz(9)<=\

这段程定义了数码管显示的9种状态,在第1种状态下数码管显示出来的是“0”应为给出程序dataz(0)<=\就可以知道7段数码管的7个灯的工作状态,(灯1亮、灯2亮、灯3亮、灯4亮、灯5亮、灯6亮、灯7不亮、标点符号灯不亮)可以形成一个数字。通过这种原理可以显示出数字(1、2、3、4、6、7、8、9)。数码管灯的排列顺序为下图所示:

图4.2 数码管彩灯排列顺序

4.2.2 通常情况的程序说明

这是程序的开始,就是大道和小道都没有来车的时候,大道和小道的灯一直在这个状态,就是下面这段程序。 begin

if clk'event and clk='1' then

if small='0' then f_greenbig<='1';

f_yellowbig<='0'; f_redbig<='0'; f_greensmall<='0'; f_yellowsmall<='0'; f_redsmall<='1';

sign<=\

这段程序是在讲在p0程序中当产生上升沿时的时候,如果检测到小路没有车那么大道的绿灯亮,具体执行绿灯状态的程序为f_greenbig<='1'。同理下面的程序可以得出大道的黄灯和红灯灭,小道的黄灯和绿灯灭而红灯亮。可知当这段程序读

第 16 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

完的时候数码管没有任何显示,停留在此不再对下面的程序进行读取。如下图所示:

图4.3 时序逻辑仿真图 4.2.3 小道来车的程序说明

若小道来车,大道经6秒由绿灯变为黄灯;再经过4秒,大道由黄灯变为红灯,同时,小道 由红灯变为绿灯。这个状态出现俩个时钟,即一个为4秒、一个为6秒。其中比较典型的程序段为下。 elsif small>'0'and big=\

case er_state is when erd0 =>

er_state<= erd1;

sign<=\ when erd1 =>

sign<=\

er_state<= erd21;

这段程序就是6秒的时钟控制器开始计数的开始,程序中在small>'0'and big=\即在小道来车,大道没有车的情况下为前提在进行对下面读取。其中从when直到when的读取的过程要花费1秒,这样就同样原理下编写6段就可以达到延迟6秒的目的。

同样原理延迟4秒的程序也是通过这样来编写的。在6秒后大道从绿灯变成黄

第 17 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

灯的程序开始执行,这个过程中7段数码管开始运行计时,并且开始从6开始倒计时。如下图所示:

图4.4 时序逻辑仿真图 4.2.4 小道变绿灯后,若大道来车不到3辆情况下的程序说明

小道变绿灯后,若大道来车不到3辆,则经过25秒钟后自动由红灯变为黄灯,再经过4秒变为红灯,同时,大道由红灯变为绿灯。这个状态有个前提是大道来车不到3辆车,那就可以有2种可能要考虑到。即来了1辆车或来了2辆车。这个状态中主要的程序和上个阶段的主程序大体一样,其中有段程序是

when er23 =>

sign<=\

e_state<= er24;

when er24 =>

sign<=\

e_state<= er2;

when er2 =>

f_yellowsmall<='1'; f_greensmall<='0'; f_redbig<='1'; e_state<= er25;

这个程序段中首先说明了前提条件就是elsif small>'0' and big<=\and big>\它直接定义出了小道有车但是大道来的车辆小于3辆。然后执行时

第 18 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

钟控制,同样原理在产生上升沿的情况下让 ,一直到从而延迟25秒后进行下面程序的读取,这时候2个7段数码管同时运作

其中7段数码管倒计时程序的解释是:当程序进行到elsif small>'0' and big<=\的时候让delay+1,但是delay不等于\的时候要执行i<=i+1让程序出现循环。知道delay等于\才中断循环程序由于程序的设定在这个过程中耗费的时间正好为25秒,从而达到延时和7段数码管的显示。时序图如下图所示:

图4.5 时序逻辑仿真图

4.2.5 小道变绿灯后,若大道来车超过3辆的情况下的程序说明

如果小道在绿灯亮时,小道绿灯亮的时间还没有到25秒,只要大道检测到已经超过3辆车在等候,那么小道应立即由绿灯变为黄灯,再经过4秒变为红灯,同时,大道由红灯变为绿灯。

在这个状态下也是有个前提条件才能进行,就是小道绿灯亮的时候再25秒内检测到大道已经超过3辆车等待。这段程序也是由2个时钟管理程序控制。时钟的程序说明前几个状态已经详细的说明,在此不再介绍。7段数码管又开始进行倒计时的工作,但是该程序要求考虑到没有在25秒延迟工程中出现大道检测已经超过3俩时会中断倒计时的工作而进行下个阶段的程序运作。这个状态中,中心程序是 elsif small>'0' and big>\ then

case state is when e0 =>

f_yellowbig<='0';

f_greenbig<='0';

第 19 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

f_redbig<='1'; f_greensmall<='0';

f_yellowsmall<='1'; f_redsmall<='0';

state<= e25;

when e25 =>

sign<=\

state<= e26;

when e26 =>

sign<=\

state<= e27;

这段程序就是在25秒倒计时过程中出现的特殊情况,该程序就是在检测到上升沿时7段数码管停止当前运作从新开始读取。

这段程序的难点就是出现了2个时钟控制器相互制约的读取。在程序编辑上需要仔细考虑周全。状态的时序图为下图所示:

图4.6 时序逻辑仿真图 4.3总体程序说明

该程序的设计方法多种多样,可以按照4个状态来编写4个主要程序段,再对4个程序段进行连接从而组成一个完整的设计系统。但是考虑到过程的复杂性比较大,而且很容易从细小的地方出现问题,寻找问题繁琐难度大。我就用1段程序进行编译,虽然在程序语言的排列和逻辑思维上有点难度,但是可以减少连线及其他方面出现的细小问题。在处理第4状态突发事件的这段程序是一个比较难的地方,

第 20 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

也是该程序的考察重点。由于是连接的第3状态为前提,在对第4状态的编程的过程中可以分为2个情况来考虑,这样就降低难度。

整个程序贯穿了时钟模块、彩灯模块、控制模块、扫描电路4大模块的穿插连接,实现了设计要求的功能。但是显示的状态没有考虑周全,在交通突发事件出现这个环节上有待提高。

程序中我设计应用了4个开关来控制并给程序输入信号,小道为一个开关控制大道由3个开关控制。根据实际的情况和具体的要求可以接入传感器来达到完全自动的效果。

第 21 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

结束语

交通信号灯在应用于道路交通安全中起到非常重要的作用,但在许多研究中,都未能根据实际情况进行设计。课题中首先根据实际情况详细说明了设计,给出了一些在操作上会出现错误的解决方案;其次,通过仿真,避免了在设计时缺少的灵活性。本设计能灵活地控制各项参数、任意改变参数、改变需要的时间。在实际应用中,道路情况非常复杂,控制时间各不相同。只有用计算机模拟软件,就能控制并运用好芯片及控制各项参数,取得较好的效果。通过模拟实验可以更好地运用知识于实践当中,在交通信号灯自动定时控制系统使用中,小规模数字集成电路实现非常方便,而且便于在EDA内进行仿真实验。在实际应用中,情况不一样,设计也不同。

交通灯是人们日常生活必须接触和认识的交通工具,交通灯的设计方法非常灵活,用VHDL语言来编写具有非常明显的优势,其设计层次较高、用于较复杂的计算时,能尽早发现存在的问题,缩短设计周期。在编写过程中计数器程序的编写是最难的,它要求控制4个时间段,及6、4、25、4秒。在EDA实验箱上进行测试多次不成功,所以我用了2个计数器来化解这个问题我也加入了一个非门把问题简单话。

第 22 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

附录A 全程序

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity light is

port (

fosc : in std_logic;

small : in std_logic; big

: in std_logic_vector(2 downto 0);

greenbig : out std_logic; redbig : out std_logic; yellowbig

: out std_logic;

greensmall : out std_logic;

yellowsmall : out std_logic; redsmall : out std_logic; sign

: out std_logic_vector(7 downto 0)

);

end light;

architecture Behavioral of light is signal f_greenbig : std_logic:='0'; signal f_redbig : std_logic:='0'; signal f_yellowbig

: std_logic:='0';

signal

f_greensmall : std_logic:='0';

signal f_yellowsmall : std_logic:='0'; signal f_redsmall : std_logic:='0';

signal count : std_logic_vector(10 downto 0):=\

第 23 页共33 页

中北大学信息商务学院2009届本科毕业设计任务书

signal clk : std_logic:='0';

signal

rb_delay: std_logic_vector(7 downto 0):=\

signal i : integer range 0 to 150:=0; type erd is (erd0,erd1,erd2,erd3,erd4,erd5); signal er_state : erd:=erd0; type ers is (er0,er1,er2,er3,er4,er5); signal e_state : ers:=er0; type erb is (e0,e1,e2,e3);

signal state : erb:=e0;

type memory is array ( 0 to 9) of std_logic_vector(7 downto 0);

signal dataz :memory; begin

dataz(0)<=\

dataz(1)<=\ dataz(2)<=\ dataz(3)<=\

dataz(4)<=\

dataz(5)<=\ dataz(6)<=\ dataz(7)<=\

dataz(8)<=\

dataz(9)<=\

greenbig <= f_greenbig; redbig <= f_redbig;

yellowbig <= f_yellowbig;

greensmall <= f_greensmall;

yellowsmall<= f_yellowsmall;

redsmall <= f_redsmall;

第 24 页共33 页

中北大学信息商务学院2009届本科毕业设计任务书

-----------------------------------------------------------------

p0: process(fosc) begin

if fosc'event and fosc='1' then count<=count+1;

if count=\

clk<=not clk;

count<=\

end if;

end if;

end process p0;

-------------------------------------------------------------------

p1: process(clk,small,big,er_state,e_state,state) begin

if clk'event and clk='1' then if small='0' then f_greenbig<='0'; f_yellowbig<='1'; f_redbig<='1'; f_greensmall<='1'; f_yellowsmall<='1';

f_redsmall<='0';

-----------------------------------------------------------------------

elsif small>'0'and big=\

第 25 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

case er_state is when erd0 =>

rb_delay<=rb_delay+1;

er_state<= erd1;

sign<=dataz(i);

when erd1 => if rb_delay=\ rb_delay<=\

i<=0;

er_state<= erd2;

else i<=i+1;

er_state<= erd0;

end if;

when erd2 =>

f_yellowbig<='0';

f_greenbig<='1';

f_redbig<='1';

er_state<= erd3;

when erd3 => rb_delay<=rb_delay+1;

sign<=dataz(i);

er_state<= erd4;

when erd4 => if rb_delay=\ rb_delay<=\

i<=0;

er_state<= erd5;

else

第 26 页共33 页

中北大学信息商务学院2009届本科毕业设计任务书

i<=i+1;

er_state<= erd3;

end if;

when erd5 => f_yellowbig<='1'; f_greenbig<='1'; f_redbig<='0';

-

f_greensmall<='0';

f_yellowsmall<='1';

f_redsmall<='1';

er_state<= erd5;

when others=>

er_state<= erd0;

end case;

----------------------------------------------------------------------- elsif small>'0' and big<=\ case e_state is when er0 => rb_delay<=rb_delay+1;

sign<=dataz(i);

e_state<= er1;

when er1 => if rb_delay=\

rb_delay<=\

i<=0;

e_state<= er2;

else

i<=i+1;

第 27 页共33 页

中北大学信息商务学院2009届本科毕业设计任务书

e_state<= er0;

end if; when er2 => f_yellowsmall<='0'; f_greensmall<='1'; f_redbig<='0';

e_state<= er3;

when er3 => rb_delay<=rb_delay+1;

sign<=dataz(i);

e_state<= er4;

when er4 => if rb_delay=\ rb_delay<=\

i<=0;

e_state<= er5;

else i<=i+1;

e_state<= er3;

end if;

when er5 =>

f_yellowbig<='1';

f_greenbig<='0';

f_redbig<='1';

f_greensmall<='1';

f_yellowsmall<='1'; f_redsmall<='0';

e_state<= er5;

when others=>

第 28 页共33 页

中北大学信息商务学院2009届本科毕业设计任务书

e_state<= er0;

end case;

----------------------------------------------------------------------- elsif small>'0'and big>\ case state is when e0 => f_yellowbig<='1'; f_greenbig<='1'; f_redbig<='0';

f_greensmall<='1';

f_yellowsmall<='0'; f_redsmall<='1';

state<= e1;

when e1 =>

rb_delay<=rb_delay+1; sign<=dataz(i);

state<= e2;

when e2 =>

if rb_delay=\

rb_delay<=\

i<=0;

state<= e3;

else i<=i+1;

state<= e1;

end if;

when e3 =>

f_yellowbig<='1';

第 29 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

f_greenbig<='0'; f_redbig<='1'; f_greensmall<='1';

f_yellowsmall<='1'; f_redsmall<='0';

end if;

end if;

end process p1; end Behavioral;

state<= e3;

when others=> state<= e0; end case;

第 30 页共33 页

中北大学信息商务学院2009届本科毕业设计任务书

附录B 程序原理图

第 31 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

参考文献

[1] 魏志精.可编程序控制器应用技术[M].北京:电子工业出版社.1995 . [2] 邛则名,邝穗芳.电器与可编程序控制器应用技术[M].北京:机械工程出版

社.1997.

[3] 李中发.电子技术基础[M].北京:中国水利水电出版社,2004. [4] 杨肮.电子设计[M].北京:清华大学出版社,2O05. [5] 周筱龙.电子技术基础[M].北京:电子工业出版社,2006.

[6] 清华大学电子学教研组.数字电子技术基础[M].北京:高等教育出版社,1999. [7] 王历春,徐晓东.电子科技[J].西安科技大学出版.2008.第5期. [8] 曾繁玲.科学技术与工程[J].中国技术经济研究会出版.2008.第11期. [9] 唐黎标.城市公共交通[J].北京.中国科协出版.2008.第9期.

[10] 周强.电子技术应用[J]. 信息产业部电子第六研究所出版.2006.第12期. [11] 曹洁,苏玉萍,吴国龙等.交通与计算机[J]. 武汉理工大学出版.2007.第1期. [12] 刘红平.中国科技信息[J].中国科协出版.2007.第9期. [13] 袁文良.知识窗[J].江西省出版总社出版.2007.第6期.

[14] 周诗虎.科技信息学术版[J].山东省科学技术厅出版.2007.第13期. [15] 陈宇,温欣玲.电子器件[J].教育部出版.2007.第4期.

[16] 侯伯享,顾新. VHD硬件描述语言与数字逻辑电路设计[J].西安.西安电子科 技大学出版社.1992.第12期.

[17] 张凯,林伟. VHDL实例剖析[J].北京:国防工业出版社,2004.

[18] 楮振勇,翁木云. FPGA设计及应用[J].西安电子科技大学出版社,2002. [19] 汪友宝,马佩军.基于FPGA的容错存储器的设计实现.西安电子科技大学出版 社,2004.

第 32 页 共33 页

中北大学信息商务学院2009届本科毕业设计任务书

致谢

由于以前对VHDL语言的认识浅薄,在做设计的过程中进展缓慢。但是通过老师们的辅导和研究生的帮助我渐渐进入对VHDL语言的接触。张彦军老师的学术知识和严谨认真负责的治学态度让我印象深刻,并让我受益匪浅。在张彦军老师耐性的教导下我不仅对VHDL语言有了了解,而且对EDA实验箱也有了简单操作的能力。

在此我感谢对我教导过的张老师,感谢电子与科学技术系的李圣昆老师、任勇峰老师及所有老师对我的栽培。在您们的鼓励和支持下我才能顺利的完成设计的要求,再次向你们说声谢谢。

第 33 页 共33 页

本文来源:https://www.bwwdw.com/article/8z46.html

Top