基于EDA技术交通信号灯设计_第1页
基于EDA技术交通信号灯设计_第2页
基于EDA技术交通信号灯设计_第3页
基于EDA技术交通信号灯设计_第4页
基于EDA技术交通信号灯设计_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1EDA技术及VHDL语言介绍1.1概述EDA是电子设计自动化(ElectronicDesignAutomation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(HardwareDescriptionlanguage)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控FPGA和CPLD部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。[1]1.2EDA技术1.2.1EDA技术的发展与应用电子设计技术的核心就是EDA技术,EDA是指以计算机为工作平台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段。1.2.2EDA技术的基本特征EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件,这样的设计方法被称为高层次的电子设计方法。下面介绍与EDA基本特征有关的几个概念。第一,“自顶向下”的设计方法10年前,电子设计的基本思路还是选用标准集成电路“自底向上”地构造出一个新的系统,这样的设计方法就如同一砖一瓦建造金字塔,不仅效率低、成本高而且容易出错。高层次设计是一种“自顶向下”的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后,用综合优化工具生成具体门电路的网络表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次成功率。第二,ASIC设计现代电子产品的复杂度日益提高,一个电子系统可能由数万个中小规模集成电路构成,这就带来了体积大、功耗大、可靠性差的问题。解决这一问题的有效方法就是采用ASIC芯片进行设计。ASIC按照设计方法的不同可分为全定制ASIC、半定制ASIC和可编程ASIC(也称为可编程逻辑器件)。设计全定制ASIC芯片时,设计师要定义芯片上所有晶体管的几何图形和工艺规则,最后将设计结果交由IC厂家去进行掩模制造,做出产品。这种设计方法的优点是芯片可以获得最优的性能,即面积利用率高、速度快、功耗低,而缺点是开发周期长,费用高,只适合大批量产品开发。半定制ASIC芯片的版图设计方法分为门阵列设计法和标准单元设计法,这两种方法都是约束性的设计方法,其主要目的就是简化设计,以牺牲芯片性能为代价来缩短开发时间。可编程逻辑芯片与上述掩模ASIC的不同之处在于:设计人员完成版图设计后,在实验室就可以烧制出自己的芯片,无须IC厂家的参与,大大缩短了开发周期。可编程逻辑器件自70年代以来,经历了PAL、GAL、CPLD、FPGA几个发展阶段,其中CPLD/FPGA属高密度可编程逻辑器件,目前集成度已高达200万门/片,它将掩模ASIC集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制或小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以很容易地转由掩模ASIC实现,因此开发风险也大为降低。上述ASIC芯片,尤其是CPLD/FPGA器件,已成为现代高层次电子设计方法的实现载体。第三,EDA系统框架结构EDA系统框架结构(Framework)是一套配置和使用EDA软件包的规。目前主要的EDA系统都建立了框架结构,如Cadence公司的DesignFramework,Mentor公司的FalconFramework,而且这些框架结构都遵守国际CFI组织制定的统一技术标准。框架结构能将来自不同EDA厂商的工具软件进行优化组合,集成在一个易于管理的统一的环境之下,而且还支持任务之间、设计师之间以及整个产品开发过程中的信息传输与共享,是并行工程和自顶向下设计方法的实现基础。1.2.3EDA技术的基本设计方法EDA技术的每一次进步,都引起了设计层次上的一次飞跃,物理级设计主要IC版图设计,一般由半导体厂家完成,对电子工程师没有太大的意义,因此本文重点介绍电路级设计和系统级设计。第一,电路级设计电路级设计工作流程:电子工程师接受系统设计任务,首先确定设计方案,并选择能实现该方案的合适元器件,然后根据具体的元器件设计电路原理图。接着进行第一次仿真,其中包括数字电路的逻辑模拟、故障分析,模拟电路的交直流分析、瞬态分析。在进行系统仿真时,必须要有元件模型库的支持,计算机上模拟的输入输出波形代替了实际电路调试中的信号源和示波器。这一次仿真主要是检验设计方案在功能方面的正确性。仿真通过后,根据原理图产生的电气连接网络表进行PCB板的自动布局布线。在制作PCB板之前还可以进行PCB后分析,其中包括热分析、噪声及窜扰分析、电磁兼容分析、可靠性分析等,并可将分析后的结果参数反标回电路图,进行第二次仿真,也称为后仿真。后仿真主要是检验PCB板在实际工作环境中的可行性。由此可见,电路级的EDA技术使电子工程师在实际的电子系统产生前,就可以全面地了解系统的功能特性和物理特性,从而将开发风险消灭在设计阶段,缩短了开发时间,降低了开发成本。第二,系统级设计进入90年代以来,电子信息类产品的开发明显呈现两个特点:一是产品复杂程度提高;二是产品上市时限紧迫。然而,电路级设计本质上是基于门级描述的单层次设计,设计的所有工作(包括设计输入、仿真和分析、设计修改等)都是在基本逻辑门这一层次上进行的,显然这种设计方法不能适应新的形势,一种高层次的电子设计方法,也即系统级设计方法,应运而生。高层次设计是一种“概念驱动式”设计,设计人员无须通过门级原理图描述电路,而是针对设计目标进行功能描述。由于摆脱了电路细节的束缚,设计人员可以把精力集中于创造性的方案与概念的构思上,一旦这些概念构思以高层次描述的形式输入计算机,EDA系统就能以规则驱动的方式自动完成整个设计。这样,新的概念就能迅速有效地成为产品,大大缩短了产品的研制周期。不仅如此,高层次设计只是定义系统的行为特性,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。首先,工程师按照“自顶向下”的设计方法进行系统划分。其次,输入VHDL代码,这是高层次设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图,状态图等),这种输入方式具有直观、容易理解的优点。第三步是,将以上的设计输入编译成标准的VHDL文件。第四步是进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。第五步是,利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库支持下才能完成。第六步是,利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。一般的设计,也可略去这一仿真步骤。第七步是利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化、布局布线。第八步是在适配完成后,产生多项设计结果:(1)适配报告,包括芯片部资源利用情况,设计的布尔方程描述情况等;(2)适配后的仿真模型;(3)器件编程文件。根据适配后的仿真模型,可以进行适配后的时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确地预期未来芯片的实际性能。如果仿真结果达不到设计要求,就需要修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求;最后一步是将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片FPGA或CPLD中。如果是大批量产品开发,则通过更换相应的厂家综合库,轻易地转由ASIC形式实现。综上所述,EDA技术是电子设计领域的一场革命,目前正处于高速发展阶段,每年都有新的EDA工具问世。广大电子工程人员掌握这一先进技术,这不仅是提高设计效率的需要,更是我国电子工业在世界市场上生存、竞争与否的关键。[2]1.2.4EDA的发展趋势第一,.从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用广泛、工具多样、软件功能强大。中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PCB制板和小型ASIC领域,仅有小部分(约11%)的设计人员开发复杂的片上系统器件。为了与和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要引进和学习一些最新的EDA技术。在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方面发展。第二,外设技术与EDA工程相结合的市场前景看好,如组合超大屏幕的相关连接,多屏幕技术也有所发展。中国自1995年以来加速开发半导体产业,先后建立了几所设计中心,推动系列设计活动以应对亚太地区其它EDA市场的竞争。在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、国都有ASIC设计工具,但不对外开放。集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具在各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年夏合增长率分别达到了50%和30%。[3]EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平仍很有限,尚需迎头赶上。1.3硬件描述语言VHDL1.3.1VHDL的简介硬件描述语言(HDL)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输人500至1000个门,而利用VHDL语言只需要书写一行“A=B+C”即可。而且VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL、HDL、AHDL,由不同的EDA厂商开发,互不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上不足,1985年美国国防部正式推出了高速集成电路硬件描述语言VHDL,1987年IEEE采纳VHDL为硬件描述语言标准(IEEESTD-1076)。VHDL是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由底向上的电路设计过程都可以用VHDL来完成。VHDL还具有以下优点:(1)VHDL的宽围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。(2)VHDL可以用简洁明确的代码描述来进行复杂控制逻辑艄设计,灵活且方便,而且也便于设计结果的交流、保存和重用。(3)VHDL的设计不依赖于特定的器件,方便了工艺的转换。(4)VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。用VHDL语言编程实现数字电子系统硬件设计容易做到技术共享。他人用VHDL语言实现了IP模块和软核(softcore),程序包(package)和设计库(library)很容易移植到自己的系统设计中。许多设计不用从头开始,少花钱办快事,缩短产品设计周期,加速产品更新,提高设计效益,这也是VHDL语言得到广泛应用的重要原因。值得指出的是:Verilog-HDL等硬件描述语言获得较为广泛的应用。但最适合于用CPLD&VHDL等器件实现数字电子系统设计的硬件描述语言当属于VHDL。1.3.2VHDL的设计方法传统的硬件电路设计方法是采用自下而上的设计方法,即根据系统对硬件的要求,详细编制技术规格书,并画出系统控制流图;然后根据技术规格书和系统控制流图,对系统的功能进行细化,合理地划分功能模块,并画出系统的功能框图;接着就进行各功能模块的细化和电路设计;各功能模块电路设计、调试完成后,将各功能模块的硬件电路连接起来再进行系统的调试,最后完成整个系统的硬件设计。采用传统方法设计数字系统,特别是当电路系统非常庞大时,设计者必须具备较好的设计经验,而且繁杂多样的原理图的阅读和修改也给设计者带来诸多的不便。当电路系统采用VHDL语言设计其硬件时,与传统的电路设计方法相比较,具有如下的特点:第一,采用自上而下的设计方法。即从系统总体要求出发,自上而下地逐步将设计的容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的过程是否能到达系统设计的要求。第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。第三层次是逻辑综合。即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。第二,应用逻辑综合工具产生的门级网络表,将其转换成PLD的编程码点,即可利用PLD实现硬件电路的设计。由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。第三,系统可大量采用PLD芯片。由于目前众多制造PLD芯片的厂家,其工具软件均支持VHDL语言的编程。所以利用VHDL语言设计数字系统时,可以根据硬件电路的设计需要,自行利用PLD设计自用的ASIC芯片,而无须受通用元器件的限制。第四,采用系统早期仿真。从自上而下的设计过程中可以看到,在系统设计过程中要进行三级仿真,即行为层次仿真、RTL层次仿真和门级层次仿真。这三级仿真贯穿系统设计的全过程,从而可以在系统设计的早期发现设计中存在的问题,大大缩短系统设计的周期,节约大量的人力和物力。自顶而下的设计方法使系统被分解为各个模块的集合之后,可以对设计的每个独立模块指派不同的工作小组,这些工作小组可以工作在不同地点,甚至可以分属于不同的单位,最后将不同的模块集成为最终的系统模型,并对其进行综合测试和评价。[4]其自顶而下的设计流程如图1-1所示:前端功能仿真设计说明书 结构综合逻辑综合建立VHDL行为

门级时序VHDL行为仿真测试向量生成硬件测试VHDL-RTL 级 功能仿真 设计完成1-1自顶而下的设计流程1.4Max+PullII开发平台系统1.4.1MaxPullII简介MaxPullII的全称是MultipleArrayandProgrammableLogicUseSystem2(多阵列矩阵及可编程逻辑用户系统2),是Altera公司的全集成化可编程逻辑设计环境。从最初的第一代A+PLUS,第二代MAX+PLUS,发展到第三代MAX+PLUSII,Altera公司的开发工具软件在发展中不断完善。MAX+PLUSII的版本不升级,功能也越来越强大,目前发行的MAX+PLUSII已经到了10。1版。MaxPullII的界面友好,在线帮助完备,初学者也可以很快学习掌握。完成高性能的设计。其次,在进行原理图输入时,可以直接放置74系列逻辑芯片,所以对于普通爱好者来说,即使不使用Altera的可编程器件,也可以把MAX+PLUS作为逻辑仿真工具,另外,不用搭建硬件电路,即可对自己的设计进行调试,支持Altera公司不同结构的可编程逻辑器件,能满足用户各种各样的设计需要。MAX+plusII具有突出的灵活性与高效性,为设计者提供了多种可自由选择的设计方法和工具。1.4.2MaxPullII的特点1.MAX+PLUSII的编译核心支持Altera的FLEX10K、FLEX8K、MAX9000、MAX7000、FLASHlogic、MAX5000、Classic系列可编程逻辑器件;2.MAX+PLUSII的设计输入、处理与校验功能一起提供了全集成化的一套可编程逻辑开发工具,可加快动态调试,缩短开发周期;3.MAX+PLUSII支持各种HDL设计输入,包括VHDL、Verilog和Altera的AHDL;4.MAX+PLUSII可与其他工业标准设计输入、综合与校验工具。与CAE工具的接口符合EDIF200和209、参数化模块库(LPM)、Verilog、VHDL及其它标准。设计者可使用Altera或标准CAE设计输入工具去建立逻辑设计,使用MAX+PLUS编译器对Altera器件设计进行编译,并使用Altera或其它CAE校验工具进行器件或板级仿真。MAX+PLUSII支持与Synopsys、Viewlogic、MentorGraphics、Cadence、Exemplar、DataI/O、Intergraph、Minc、OrCAD等公司提供的工具接口。利用MAX+PLUSII软件平台进行设统设计。[5]具体的设计流程图如图1-2所示:设设设设器在系计计计计件线统要输编校编校产求入译验程验品设计修改1-2MAX+PLUSII软件的设计流程图交通灯系统设计2.1交通灯设计背景及方案随着城市汽车保有量的越来越多,城市的交通拥挤问题正逐渐引起人们的注意。交通灯是交管部门管理城市交通的重要工具。提高十字路口的通行效率,对缓解交通阻塞具有十分重要的现实意义。实现路口交通灯系统控制的方法很多,可以用标准逻辑器件、可编程序控制器PLC、单片机等方案来实现。但是这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了设计难度。采用EDA技术。应用VHDL硬件电路描述语言实现变通灯系统控制器的设计,利用MAX+PLUSⅡ集成开发环境进行综合、仿真,并下载到CPLD可编程逻辑器件中,完成系统的控制作用。该灯控制逻辑可实现3种颜色灯的交替点亮、时间的倒计时、转向问题,指挥车辆和行人安全通行。2.2交通灯设计要求按照路口交通运行的实际情况,在本系统中,设定系统的工作情况如下:A方向和B方向各设红(R)、黄(Y)、绿(G)和左拐(L)四盏灯按合理的顺序亮灭,并能将灯亮的时间以倒计时的形式显示出来。两个方向各种灯亮的时间应该能够非常方便地进行设计和修改,此外假设A方向是主干道,车流量大,因此A方向通行的时间应比B方向长一些。其示意图如图2-1所示。G2Y2R2L2 A方向 G1 Y1 R1 L1方向2-1交通路口指示灯示意图交通灯控制器的状态转换如表1所示。表中1表示灯亮,0表示灯灭。A方向和B方向的红、黄、绿和左拐灯分别用R1、Y1、G1、L1和R2、Y2、G2、L2来表示。从状态转换表中可以看出,每个方向四种灯依次按如下绿灯→黄灯→左拐灯→黄灯→红灯。并且每个方向红灯亮的时间应该与另一方向绿、拐、黄灯亮的时间相等。黄灯所起的作用是用来在绿灯和左拐灯后进行缓冲,以提醒行人该方向马上要禁行了。例如A方向的控制程序描述如表2-1所示:表2-1交通灯控制器状态转换A方向B方向绿灯黄灯左拐红灯绿灯黄灯左拐红灯G1Y1灯L1R1G2Y2灯L2R210000001010000010010000101000001000110000001010000010010000101002.3交通灯控制器的VHDL设计使用MAX+PLUSII进行设计包括四个阶段:设计输入、设计处理、设计验证和器件编程。根据程序要求完成VHDL语言设计后,可形成顶层文件。在MAX+PLUSⅡ环境下进行编译与仿真直,至各个模块全部完成仿真实,现各自的功能。在本设计通灯控制器由七个模块构成:消振模块,分频器模块、交通灯控制器模块、计数器块、计数器控制模块、闪烁模块、译码器模块。VHDL语言对各个模块进行编程,最后形成顶层文件,在MAX+PLUSⅡ环境下进行编译与仿真,检查所编程序是否运行正确。如果出现错误,需要进行修改,直到完全通过为止。需要说明的是,在进行程序编译时,要先从底层程序开始,所有底层程序都正确后,才能开始顶层程序的编译。这是因为顶层程序是对底层程序的概括,它是把底层程序各个模块连接起来,相当于把每个模块的功能汇聚到一起,实现整个系统的控制功能,所以底层程序的正确与否关系到顶层程序的运行。[6]2.3.1分频器模块2.3.1.1原理及功能分频器通常用来对某个给定的频率进行分频,以得到需要的频率。整数分频器非常简单,可采用标准的计数器,也可采用可编程逻辑器件设计实现。分频器可为后续模块提供低频的时钟信号,分频器采用上升沿计数来实现分频。当输入端采集到了高频的时钟信号的上升沿时,计数加一,当到达设定值时,分频器输出一个脉冲。本设计中用到的就是简单的分频器,即计数器,计算器控制器,交通灯控制器提供时钟信号,并且为闪烁模块提供闪烁时钟信号。该功能模块有两个输入,两个输出:reset是部初始化信号输入端,clk1k是高频的时钟信号,clk是整个系统的时钟信号,clk_flash是闪烁模块闪烁时钟信号。2.3.1.2时序仿真图2-2分频器模块的时序仿真波形时序仿真说明:(1).reset=1,则clk_cnt1、clk_cnt2、clk_s1、clk_s2、clk_f清零。reset=0,clk_1k为上升沿触发时,如果clk_cnt1大于或等于5时,清零clk_cnt1,并且clk_s1输出1。否则clk_cnt1加一,clk_s1等于0。3.reset=0,clk_1k为上升沿触发并且clk_s1=1时,如果clk_cnt2大于或等于200时,clk_cnt2清零,输出clk_s2=1,取反clk_f。否则clk_cnt2加一,clk_s2,clk_f保持不变。其中clk-flash是clk频率的1/2倍,它是通过部信号与运算的得来,即clk_flash<=clk_s1andclk_s2andclk_f;2.3.2计数器模块2.3.2.1原理及功能计数器是对一个输入脉冲进行计数,如果输入脉冲的频率一定,则记录一定个数的脉冲,其所需的时间是一定的。计数器可分为加法和减法计数器两种,所以计数器可实现倒记时,因此可用在交通灯时间的控制。正常情况时,计数器采集到交通灯控制器的信号recount,输出倒计时间;紧急情况时,计数器采集到禁止信号,时钟停止计数,时间不再倒记时,只有采集到计数器控制器的下一个状态的计数值,计数器才会进行正常的减计数,并输出给译码器,显示在显示屏上。当计数器计数到3时,还要产生一个闪烁信号给闪烁模块,控制其交通指示灯闪烁,告诉给行人时间到了需要减速停止。当计数器计数到零时,会反馈给交通灯控制器一个计数到零的信号next_state,告诉交通灯控制器需要进入下一个状态。本设计中主要程序段elsifclk'eventandclk='1'then ――时钟信号ifhold='1'then --禁止信号cnt1<=cnt1;cnt2<=cnt2;elsifrecount='1'then ――采集到的交通灯控制信号,采集下cnt1<=din1; 一个计数值。cnt2<=din2;elset1<=cnt1-1; ――减计数cnt2<=cnt2-1;endif;2.3.2.2时序仿真图2-3计数器模块的时序仿真波形时序仿真说明:1.reset=1,清零cnt1、t2、next_s、last_f。2.reset=0,clk为上升沿触发时,如果hold=1时,计数器处于禁止状态,cnt1,cnt2保持不变,输出不变。3.reset=0,clk为上升沿触发时,且hold=0,那么如果recount=1时,则采集下一个计数数值。4.reset=0,clk为上升沿触发时,且hold=0,recount=0时,cnt1,cnt2进行减一运算,并dout=cnt输出。5.当cnt1=0或cnt2=0时,则next_sa<='1'。否则next_sa<='0。6.当cnt1=3或cnt2=3时,则last_f<='1'。否则last_f<='0'。2.3.3计数器控制器模块2.3.3.1原理及功能计数器控制器通过给计数器赋值,控制计数器实现减计数,从而达到倒记时的目的,同时和计数器配合控制闪烁模块。计数器控制器是通过硬件描述语言case语句来实现不同状态的选择控制。计数器控制器模块有三个输入,端子recount是交通灯控制器控制计数器控制器是否进行计数状态转换的信号,reset是部复位信号,用来复位部信号。sign_s是状态选择控制端。输出端Load赋值给计数器计数值。flash_addr和计数器的flash共同作用控制闪烁模块的闪烁功能。[7]2.3.3.2时序仿真图2-4计数器控制器模块时序仿真波形时序仿真说明:1.reset=1,则load1、load2清零。2.reset=0,clk为上升沿触发,且recount=1时:(1)若sign_s=1,则load1<=conv_std_logic_vector(27,8);load2<=conv_std_logic_vector(27,8);flash_addr<="00";(2)若sign_s=1,则load1<=conv_std_logic_vector(23,8)load2<=conv_std_logic_vector(23,8);flash_addr<="00";(3)若sign_s=0,则load1<=conv_std_logic_vector(18,8);load2<=conv_std_logic_vector(18,8);flash_addr<="00";(4)若sign_s=0,则load1<=conv_std_logic_vector(35,8);load2<=conv_std_logic_vector(35,8)flash_addr<="00";2.3.4交通灯控制器的设计2.3.4.1原理及功能交通灯控制器控制过程分为八个阶段,对应的有四个状态,分别用a、b、c、表示。状态:A方向的绿灯亮,左转灯,红灯,黄灯都灭,B方向的红灯亮,绿灯,黄灯,左转灯都灭。此时,A方向上的车辆可直行或者各自右转,行人可以横穿B路口,B方向上车和行人禁止通行。直到计数器计数时间到,由a状态转b状态。状态:A方向的黄灯亮,绿灯,左转灯,红灯灭,B方向的交通灯保持原状态。此时,A方向上的车辆要开始停止通行,行人可继续穿行,B方向的车辆行人保持原状态。直到计数器计时时间到,由b状态转到c状态。态:A方向的左转灯亮,绿灯,黄灯,红灯灭,B方向的交通灯保持原状态。此时,A方向上的车辆各自左转,直行和右转车辆禁止通行,行人可继续穿行,B方向的车辆和行人保持原状态。直到计数器计时时间到,由c状态转到d状态。状态:A方向上的黄灯亮,绿灯,左转灯,红灯灭,B方向的交通灯保持原状态。此时,A方向上的车辆和行人要开始停止通行,B方向的车辆行人保持原状态。直到计数器计时时间到,由d态转到下个状态。到此,B方向上的交通灯开始变化,依次重复A方向上a、b、c、d四个状态的转换。当B方向上的四个状态循环完成后,A方向再次重复A方向上a、b、c、d四个状态的转换。交通灯主要控制程序为:whena=>ifa_m='1'then

――交通灯处于自动状态时ifnext_state='1'then

――采集到计数器计数到零时反馈信号recount<='1';state<=b;sign_state<="1";elserecount<='0';state<=a;endif;elsifa_m='0'then

――交通灯处于手动状态时ifh_butt='1'then

――手动状态转换控制信号recount<='1';state<=b;sign_state<="1";elserecount<='0';state<=a;endif;endif;2.3.4.2时序仿真图2-5交通灯控制器模块时序仿真波形时序仿真说明1.Reset=1,则state<=a;sign_state<="1";recount<='1';2.Reset=0,clk为上升沿触发,如果hold=1,则交通灯控制器出与禁止状态,此时所有路口的红绿灯都为红灯。否则,交通灯处于正常的显示状态。3.Reset=0,clk为上升沿触发,且hold=0,如果state为a状态时,如果a_m=1且next_state='1'则recount=1,state<=b;sign_state<="1";否则recount<='0';state<=a;如果为手动状态a_m=0且h_butt='1则recount<='1';state<=b;sign_state<="1";否则recount<='0',state<=a;4.Reset=0,clk为上升沿触发,且hold=0,如果state为b状态时,如果a_m=1且next_state='1'则recount=1,state<=c;sign_state<="0";否则recount<='0';state<=b;如果为手动状态a_m=0且h_butt='1则recount<='1';state<=c;sign_state<="0";否则recount<='0',state<=b5.Reset=0,clk为上升沿触发,且hold=0,如果state为c状态时,如果a_m=1且next_state='1'则recount=1,state<=d;sign_state<="1";否则recount<='0';state<=c;如果为手动状态a_m=0且h_butt='1则recount<='1';state<=d;sign_state<="1";否则recount<='0',state<=c6.Reset=0,clk为上升沿触发,且hold=0,如果state为d状态时,如果a_m=1且next_state='1'则recount=1,state<=e;sign_state<="1";否则recount<='0';state<=d;如果为手动状态a_m=0且h_butt='1则recount<='1';state<=d;sign_state<="1";否则recount<='0',state<=d7.Reset=0,clk为上升沿触发,且hold=0,如果state为e状态时,如果a_m=1且next_state='1'则recount=1,state<=e;sign_state<="1";否则recount<='0';state<=d;如果为手动状态a_m=0且h_butt='1则recount<='1';state<=fsign_state<="1";否则recount<='0',state<=e8.Reset=0,clk为上升沿触发,且hold=0,如果state为f状态时,如果a_m=1且next_state='1'则recount=1,state<=a;sign_state<="1";否则recount<='0';state<=f;如果为手动状态a_m=0且h_butt='1则recount<='1';state<=asign_state<="1";否则recount<='0',state<=f。2.3.5闪烁电路模块的设计2.3.5.1原理及功能闪烁模块一般用来提醒或者引起致意,有时又希望能关断某一路的显示。本设计中采用关断某个一个LED的方法,利用一个低频(2Hz左右)的时钟与全部的输入信号都做与运算,然后在送到LED的输入端口,这样就会实现该低频时钟的频率闪烁功能。闪烁模块控制交通灯闪烁通过与运算其实现功能主要程序为:elsifclk_flash='1'then ――闪烁模块闪烁时钟ifflash_addr="01"andflash='1'then ――控制交通指示灯t<="0";cnt_flash<=dinsxort;

――异或运算elset_flash<=dins;endif;elsifflash_addr="11"andflash='1'thent<="1";cnt_flash<=dinsxort;elset_flash<=dins;endif;其中clk_flash(2hz)是低频闪烁信号,clk是系统时钟信号,clk_flash是低频闪烁时钟信号,flash,flash_addr是交通灯控制器和计数器控制器产生的控制信号,它们共同作用判别是否关断、关开LED交通灯。2.3.5.2时序仿真图2-6闪烁电路模块时序仿真波形时序仿真说明:1.reset=1,则cnt_flash清零。2.reset=0,clk为上升沿触发,如果hold=1时,cnt_flash=dins,即保持不变,输入等于输出。3.reset=0,clk为上升沿触发,且hold=0,如果clk_flash='1'且flash_addr="01"andflash='1'则cnt=0,cnt_flash<=dinsxort;。否则cnt_flash<=dins;4.reset=0,clk为上升沿触发,且hold=0,如果clk_flash='1且,flash_addr="11"andflash='1'则cnt<="1";t_flash<=dinsxort。否则cnt_flash<=dins;2.3.6消振模块设计2.3.6.1原理及功能交通灯出现紧急情况或需要交通人员进行手动控制时,需要手动操作按键,由于按键被按下和按键弹起时都有抖动,造成控制器采集到多个信号信息,使得计数器产生一些误操作,控制器误判概率增加。消振功能模块通过采用延时响应原理来消除抖动和误操作,模块利用方波上升延采集信号,当采集到信号时,进行计数,计数直到设定值时,系统才认为此信号为有用信息,进行响应输出控制信号。否则,屏蔽掉此信号,不响应执行输出。[8]在本模块中有五个输入端,resetr是部初始化信号,当模块采集到初始化信号时,置零部信号,clkr是模块时钟信号,其它三个是手动按键输入端,手动转化控制按钮a_mr,手动转换按钮h_buttonr,紧急情况禁止按钮holdr。模块采用clkr1KHZ的方波作为时钟信号,模块每1um采集一次信息,当采集到十个上升延时响应操作,输出一个1um的控制信号。主要程序如下:。elsifclkr'eventandclkr='1'ifholdr='1'thenift2>="0111"thent2<="0000";hoq<='1';elset2<=cnt2+1;hoq<='0';endif;endif;2.3.6.2时序仿真

then ――1khz的时钟信号--采集到手动信息――计数判断――加计数图2-7消震模块时序仿真波形时序仿真说明:1.resetr=1,则t1,cnt2,cnt3清零。2.resetr=0,clk为上升沿触发,当holdr=1时,cnt1的值大于等于10时,则清零cnt1,令hoq=1,否则cnt1加一,hoq=0不变。3.resetr=0,clk为上升沿触发,当a_mr=1时,cnt2的值大于等于10时,则清零cnt2,令aq=1,否则cnt2加一,aq=0不变。4.resetr=0,clk为上升沿触发,当h_buttonr=1时,cnt3的值大于等于10时,则清零cnt3,令hq=1,否则cnt2加一,hq=0不变。2.3.7译码器设计2.2.3.7.1原理及功能用来实现将二进制码或二——十进制码,译成一组与输入代码一一对应的高、低电平信号的电路就是译码器。它是一个多输入、多输出电路,它的输入是二进制代码或二——十进制代码,输出是代码所代表的字符。本设计中采用七段显示译码器来显示交通灯上的倒记时。2.3.7.2时序仿真图2-8译码器模块时序仿真波形2.3.8总体电路设计电路由从总体上是由各个功能的电路模块组成。通过元件例化语句调用低层次的当前设计实体。(程序见附录P9)图2-9总体电路的时序仿真波形2.4实验平台的引脚配置及下载测试2.4.1实验平台介绍2.4.1.1实验系统主板提供的基本功能说明:个按键:即九个琴键按键(按住琴键,对应输出指示的红色二极管亮,表示输出高电平,松开琴键,对应输出指示的红色二极管灭,表示输出为低电平)。五个电平按键(按下键,对应输出指示的红色二极管亮,表示输出高电平,再按下键,对应输出指示的红色二极管灭,表示输出为低电平)。一个脉冲模式按键:当按下此按键,对应输出20ms的脉冲电平。各按键均已用软件消抖。8个共阴数码管,其中7个作为数码显示用(显示采用扫描和自动灭零技术,当输入的四位二进制数大于1001时,灭灯),通过跳线选择供CPLD/FPGA或单片机使用。6个共阴数码管,其中6个作为数码显示用(自动灭零技术,当输入的四位二进制数大于1001时,灭灯),直接与CPLD/FPGA连接。用户直接提供6个数码管的4位BCD码输入,共24位。8个发光二极管(输入高电平时,二极管发亮)。4组时钟输入(时钟频率从50MHz到2Hz)即CLK1,CLK2,CLK3,CLK4。其中任何一组只能用一个跳线帽接通时钟信号,结对不能在一组上插两个或两个以上的跳线帽接通两个以上的时钟。一个蜂鸣器和一个喇叭(由跳线K1接通);一个串行通信接口,通过跳线选择供CPLD/FPGA或单片机使用。电源输入电压:交流220V+-10V。电源输出电压:+5V(2A)和+-12V(0.5A)。+5V的地和12V地。2.4.1.2跳线说明Jump1:(1,2)对XILINX的CPLD/FPGA进行配置。(3,4)对LATTICE的CPLD进行配置。(5,6)对ALTERA的CPLD/FPGA进行配置。(7,8)对89S5X进行配置。2-2Jump1端口配置75318642Jump2:(2,4)(5,7)单片机串口与RS232的端口相连。(1,3)(6,8)CPLD/FPGA串行信号与RS232端口相连。(1,2)(7,8)单片机与CPLD/FPGA的串口对连。2-3Jump2端口配置24681357Jump3:(1,2)提供USB外设的电源2-4Jump3端口配置2Jump4:(1,2)选通AS0809(2,3)停用08092-5Jump4端口配置123Jump5:(1,2)选通AD0832(3,4)停用08322-6Jump5端口配置123MCUJP1:全接左:由CPLD/FPGA控制扫描数码管显示全接右:由单片机控制扫描数码管显示MCUJP2:按下:单片机下载状态弹上:单片机运行状态MCUJP3:全接左:使用IIC端口连接全接右:使用扫描键盘MCUJP4:全接左:由CPLD/FPGA控制步进电机驱动信号全接右:由单片机控制步进电机驱动信号ALTERA公司的EP1K30芯片的下载实验板的引脚分配表2-2下载实验板1K30的引脚与实验系统的连接关系[9]功能脚号功能脚号功能脚号功能脚号Clk155A1低118SL(A/D)95双口RAMClk254B1121R(A/D)92Clk359C1120EN(A/D)91CE113Clk456D1高128D7(A/D)82WR112蜂鸣器64A2122D6(A/D)81RD111喇叭65B2131D5(A/D)86D796琴键144C2130D4(A/D)83D698琴键246D2133D3(A/D)88D597琴键347A3132D2(A/D)87D4100琴键448B3136D1(A/D)90D399琴键549C3135D0(A/D)89D2102琴键651D3138WR(A/D)67D1101琴键760A4137D7(A/D)80D0110琴键862B4141D6(A/D)79A10109琴键963C4140D5(A/D)78VGA电平137D4143D4(A/D)73RED119电平238A5142D3(A/D)72RED020电平339B57D2(A/D)70GRN122电平441C5144D1(A/D)69GRN021电平542D59D0(A/D)68BLU126脉冲43A68RxD29BLU023LED818B611TxD30VG1328LED714C610PS132VG1427LED617D613PS531LED512LED2117T1LED4119LED1114LED31162.4.2引脚配置及下载测试按表2-2可对管脚重新分配和定位进行硬件测试,为后面的器件下载和硬件实现提供保障。管脚配置定位如图2-10所示:图2-10管脚的配置定位交通灯的硬件实现3.1显示实现本设计中要现两个方面的显示,即各个路口的时间和指示灯的状态,对于路口时间显示可以采用LED七段数码管实现,方向指示可以采用LED点阵显示器来实现。LED七段数码管有共阴极和共阳极两种接法,本设计电路中采用共阴极数码管,即把七段数码管的所有发光二极管的阴极都接地时,数码管才能被点亮。LED点阵显示器亦称LED矩阵板,以发光二极管为象素,按行与列顺序显示,彩色LED显示以三色二极管作为象素点来显示:红光,绿光,澄光(复合光红灯和绿灯同时亮),它们分别代表交通灯控制电路中的红灯,绿灯和黄灯三个指示灯。此外在设计电路时,在七段数码管和点阵显示器的每一段串联510Ω的电阻,以限制流经每一段的电流,否则电流太大,容易烧毁发光二极管。[10]3.2芯片的实现该设计采用的是EP1K30TC144-3芯片,首先对通过对各个模块的编译和排错形成工程文件,然后进行编译,设置成工程,编译综合到仿真测试,通过后以备后用,最后将顶层文件设置为工程,统一处理,这时顶层文件会自动根据元件例化语句调用底层编译好的设计文件,在设定好顶层文件后,底层设计好的文件元件型号和引脚锁定信息会自动失效。元件型号的选定和引脚锁定情况始终以工程文件(顶层文件)的设定为准。同样,仿真结果也是针对工程文件的,所以在对最后的顶层文件处理时,仍然应该对它重新设定元件型号和引脚锁定。图2-11部控制芯片的连接3.3外围电路的实现根据交通灯系统的控制要求,下图所示为本系统的硬件电路图。该电路包含了1CPLD芯片,4个七段LED数码显示器,12个分别表示各个方向上的红、黄、绿灯,以及相应的限流电阻。图2-12外围电路的连接结论从开始接到论文题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这也是我在大学期间独立完成的最大的项目。在这段时间里,我学到了很多知识,也有很多感受,从对VHDL语言、MAX+PLUSII软件操作平台等相关技术很不大了解的状态,我开始了独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己对硬件描述语言VHDL应用系统有了更深一步的了解,也更为熟悉MAX+PLUSII软件系统的设计流程,每一次改进都是我学习的收获。EDA技术是一种实现电子系统或电子产品自动化设计的技术。它是为了适应现代电子产品设计的要求,伴随着计算机、集成电路、电子系统设计的发展,吸收众多学科的成果而逐步形成的一门新技术。在本设计中主要实现了在十字路口交通灯的灯色变化和计时变化。通过VHDL语言编译软件程序,在MAX+PLUSII软件平台上进行VHDL代码设计,目标器件选择,编译,仿真,引脚配置,编程下载,硬件测试,对交通灯的设计进行现实模拟仿真,通过波形图分析电路。这样做可实现模拟运行,出错时可随时修改,而且可以根究不同的实际情况修改完善程序,节约项目开发资金。由于我所学的知识不够全面,设计中存在不足和需要改进的地方,例如:对于系统性能提高的诸如面积优化,逻辑优化设计,速度优化并未涉及,PAL、GAL以至FPGA等一些较新技术,在本实际中就没有显现出来。通过这次毕业设计的完成使得我对自己所学的专业知识又有了更深一步的了解,开拓了个人的视野,在相关的知识和技巧方面也有了提高。但是个人所学是有限的,难免有疏漏的地方,通过这次设计希望有所改善,让所学的专业知识从理论运用到实际工作和生活中。致参考文献擦光辉.《CPLD/TPGA的开发与应用[M]》.:电于工业,2002.[2]杜玉远.《EDA设计快速入门圆》.电子世界.2004,(1):24ALTERA公司.《DATABOOK[M]》.:清华大学,1998ALTERA公司.《ADHL语言[M]》.:清华大学,1998宝琴.ALTERA.《可编程逻辑器件及其应用[M]》.:清华大学.1995.宋万杰.罗丰.吴顺君.《CPLD技术及零应用[M]》.:电子科技大学.1999.科技.《CPLD/FPGA应用开发技术与工程实践》.人民邮电.2005.1宝琴.《ALTERA可编程逻辑器件及其应用》.清华大学.1995.松.《VHDL实用教程》.电子科技大学.2000.3马淑华.高原.《电子设计自动化》.邮电大学.2006.9附录分频器程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfpqisport(clk_1k,reset:instd_logic;clk,clk_flash:outstd_logic);end;architectureartoffpqissignalclk_cnt1:std_logic_vector(3downto0);signalclk_cnt2:std_logic_vector(7downto0);signalclk_s1,clk_s2,clk_f:std_logic;beginprocess(reset,clk_1k)beginifreset='1'thenclk_cnt1<="0000";clk_s1<='0';elsifclk_1k'eventandclk_1k='1'thenifclk_cnt1>="0101"thenclk_cnt1<="0000";clk_s1<='1';elseclk_cnt1<=clk_cnt1+1;clk_s1<='0';endif;endif;endprocess;process(reset,clk_1k,clk_s1)beginifreset='1'thenclk_cnt2<="00000000";clk_s2<='0';clk_f<='0';elsifclk_1k'eventandclk_1k='1'thenifclk_s1='1'thenifclk_cnt2>="00000010"thenclk_cnt2<="00000000";clk_s2<='1';clk_f<=notclk_f;elseclk_cnt2<=clk_cnt2+1;clk_s2<='0';clk_f<=clk_f;endif;endif;endif;endprocess;clk<=clk_s2;clk_flash<=clk_s1andclk_s2andclk_f;end;计数器程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityjsqisport(clk,reset,recount,hold:instd_logic;din1,din2:instd_logic_vector(7downto0);dout1,dout2,dout3,dout4:outstd_logic_vector(3downto0);next_state:outstd_logic;flash:outstd_logic);end;architectureartofjsqissignalnext_sa,last_f:std_logic;signalt1,cnt2:std_logic_vector(7downto0);beginprocess(clk,reset,recount,hold)beginifreset='1'thent1<="00000000";t2<="00000000";elsifclk'eventandclk='1'thenifhold='1'thencnt1<=cnt1;cnt2<=cnt2;elsifrecount='1'thencnt1<=din1;cnt2<=din2;elset1<=cnt1-1;cnt2<=cnt2-1;endif;endif;endprocess;dout1<=cnt1(3downto0);dout2<=cnt1(7downto4);dout3<=cnt2(3downto0);dout4<=cnt2(7downto4);process(cnt1,cnt2)beginift1<="00000000"ort2<="00000000"thennext_sa<='1';elsenext_sa<='0';endif;ift1<="00000101"ort2<="00000101"thenlast_f<='1';elselast_f<='0';endif;endprocess;next_state<=next_sa;flash<=last_f;end;计数器控制器程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entityjsqkzqisport(clk:instd_logic;reset:instd_logic;recount:instd_logic;sign_s:instd_logic_vector(11downto0);load1:outstd_logic_vector(7downto0);load2:outstd_logic_vector(7downto0);flash_addr:outstd_logic_vector(1downto0));end;architectureartofjsqkzqisbeginprocess(clk)beginifreset='1'thenload1<="00000000";load2<="00000000";elsifclk'eventandclk='1'thenifrecount='1'thencasesign_siswhen"1"=>load1<=conv_std_logic_vector(50,8);load2<=conv_std_logic_vector(27,8);flash_addr<="00";when"1"=>load2<=conv_std_logic_vector(3,8);flash_addr<="00";when"0"=>load2<=conv_std_logic_vector(20,8);flash_addr<="01";when"1"=>load1<=conv_std_logic_vector(18,8);load2<=conv_std_logic_vector(35,8);flash_addr<="00";when"1"=>load1<=conv_std_logic_vector(3,8);flash_addr<="00";whenothers=>load1<=conv_std_logic_vector(14,8);flash_addr<="11";endcase;endif;endif;endprocess;end;交通灯控制器程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityjtdkzisport(clk,reset,a_m,h_butt,hold:instd_logic;next_state:instd_logic;recount:outstd_logic;sign_state:inoutstd_logic_vector(11downto0));end;architectureoneofjtdkzissignalab:std_logic_vector(11downto0);typestate_typeis(a,b,c,d,e,f);signalstate:state_type;beginprocess(clk,reset,hold)beginifreset='1'thenstate<=a;sign_state<="1";recount<='1';elsifclk'eventandclk='1'thenifhold='1'thenab<=sign_state;sign_state<="1";elsifhold='0'thensign_state<=ab;elsecasestateiswhena=>ifa_m='1'thenifnext_state='1'thenrecount<='1';state<=b;sign_state<="1";elserecount<='0';state<=a;endif;elsifa_m='0'thenifh_butt='1'thenrecount<='1';state<=b;sign_state<="1";elserecount<='0';state<=a;endif;endif;whenb=>ifa_m='1'thenifnext_state='1'thenrecount<='1';state<=c;sign_state<="0";elserecount<='0';state<=b;endif;elsifa_m='0'thenifh_butt='1'thenrecount<='1';state<=c;sign_state<="0";elserecount<='0';state<=b;endif;endif;whenc=>ifa_m='1'thenifnext_state='1'thenrecount<='1';state<=d;sign_state<="1";elserecount<='0';state<=c;endif;elsifa_m='0'thenifh_butt='1'thenrecount<='1';state<=d;sign_state<="1";elserecount<='0';state<=c;endif;endif;whend=>ifa_m='1'thenifnext_state='1'thenrecount<='1';state<=e;sign_state<="1";elserecount<='0';state<=d;endif;elsifa_m='0'thenifh_butt='1'thenrecount<='1';state<=e;sign_state<="1";elserecount<='0';state<=d;endif;endif;whene=>ifa_m='1'thenifnext_state='1'thenrecount<='1';state<=f;sign_state<="1";elserecount<='0';state<=e;endif;elsifa_m='0'thenifh_butt='1'thenrecount<='1';state<=f;sign_state<="1";elserecount<='0';state<=e;endif;endif;whenf=>ifa_m='1'thenifnext_state='1'thenrecount<='1';state<=a;sign_state<="1";elserecount<='0';state<=f;endif;elsifa_m='0'thenifh_butt='1'thenrecount<='1';state<=a;sign_state<="1";elserecount<='0';state<=f;endif;endif;whenothers=> state<=a;endcase;endif;endif;endprocess;end;闪烁电路程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityssmkisport(clk,reset,clk_flash,hold:instd_logic;flash:instd_logic;flash_addr:instd_logic_vector(1downto0);dins:instd_logic_vector(11downto0);dout:outstd_logic_vector(11downto0));end;architectureartofssmkissignalt:std_logic_vector(11downto0);signalt_flash:std_logic_vector(11downto0);beginprocess(clk_flash,clk,hold,flash_addr,reset)beginifreset='1'thencnt_flash<="0";elsifclk'eventandclk='1'thenifhold='1'thencnt_flash<=dins;elsifclk_flash='1'thenifflash_addr="01"andflash='1'thent<="0";cnt_flash<=dinsxort;elset_flash<=dins;endif;elsifflash_addr="11"andflash='1'thent<="1";cnt_flash<=dinsxort;elset_flash<=dins;endif;endif;endprocess;dout<=cnt_flash;end;消振电路程序libraryieee;useieee.std_lo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论