EDA课件-数字系统设计_第1页
EDA课件-数字系统设计_第2页
EDA课件-数字系统设计_第3页
EDA课件-数字系统设计_第4页
EDA课件-数字系统设计_第5页
已阅读5页,还剩393页未读 继续免费阅读

下载本文档

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

文档简介

数字系统设计1数字系统设计1第一章:数字系统设计方法2第一章:数字系统设计方法21.1数字系统范畴消费类电子产品计算机通信汽车电子工业产品军用产品31.1数字系统范畴消费类电子产品3数字系统设计研究的内容系统方案设计硬件设计前段信号处理逻辑控制单元输出回路设计软件设计系统调试产品化设计产品认证4数字系统设计研究的内容系统方案设计4数字系统技术现状单片机技术DSP技术

DigitalSignalProcessor嵌入式系统ASIC技术

ApplicationSpecificIntegrationCircuits可编程ASIC技术CPLD/FPGA5数字系统技术现状单片机技术5几个基本概念EDAElectronicDesignAutomation

开发平台DevelopmentKit仿真技术SimulateTechnicalSOC片上系统SystemonChipIP知识产权模块IntellectualProperty

SMTSurfersMatchTechnology6几个基本概念EDAElectronicDesignAu单片机技术现状RISC技术ReducedInstructionSetComputer外围接口总线技术I2CCANBUS低功耗小型化嵌入式趋势7单片机技术现状RISC技术7嵌入式系统的定义(E)

专用计算机系统(非PC智能电子设备)以应用为中心以计算机技术为基础软件硬件可裁剪适应应用系统对功能、可靠性、成本、体积、功耗严格要求知识集成系统(CSEA)技术密集资金密集高度分散不可垄断面向应用不断创新8嵌入式系统的定义(E)专用计算机系统(非PC智能电子设备)嵌入式系统的分类按表现形式分:(硬件范畴)芯片级嵌入(含程序或算法的处理器)模块级嵌入(系统中的某个核心模块)系统级嵌入按实时性要求分:(软件范畴)非实时系统(PDA)软实时系统(消费类产品)硬实时系统(工业和军工系统)9嵌入式系统的分类按表现形式分:(硬件范畴)9嵌入式系统的基本要素嵌入式处理器系统嵌入式处理器各种类型存储器模拟电路及电源接口控制器及接插件嵌入式软件系统实时操作系统(RTOS)板级支持包(BSP)设备驱动(DeviceDriver)协议栈(ProtocolStack)应用程序(Application)10嵌入式系统的基本要素嵌入式处理器系统10嵌入式处理器嵌入式处理器的发展趋势经济性(成本)微型化(封装、功耗)智能化(功能、速度)嵌入式处理器的分类和现状微控制器(MCU)微处理器(MPU)数字信号处理器(DSP)混合处理器和片上系统(SOC)可编程片上系统(SOPC)11嵌入式处理器嵌入式处理器的发展趋势11硬件设计工具(EDA工具)系统级设计工具Cadence的SPWSystemView模拟电路系统仿真工具PspiceEWBPCB设计工具ProtelPADs的PowerPCB&ToolKitMentor的Expedition&ToolKit可编程逻辑器件设计工具MentorFPGAAdvantage&ModelSimXilinxFoundationISE&ToolKit各种综合和仿真第三方工具12硬件设计工具(EDA工具)系统级设计工具12最新进展之:嵌入式Internet技术定义:嵌入式Internet是近几年发展起来的一项新兴概念和技术,是指设备通过嵌入式模块而非PC系统直接接入Internet,以Internet为介质实现信息交互的过程,通常又称为非PCInternet接入。应用:

智能家居(家电上网)工业远程监控与数据采集InternetReconfigurableLogic(IRL)及其相关应用等等13最新进展之:嵌入式Internet技术定义:嵌入式Inter图:嵌入式Internet应用14图:嵌入式Internet应用14最新进展之:可编程片上系统(SOPC)SOPC:可编程逻辑器件在嵌入式应用中的完美体现SOPC的技术基础超大规模可编程逻辑器件及其开发工具的成熟FPGA密度提高FPGA成本足以与ASIC抗衡FPGA设计、综合、仿真、测试工具性能飞速提高微处理器核以IP的形式嵌入到FPGA中IPCore开发理念的发展与深入人心信号处理算法、软件算法模块、控制逻辑等均可以IPCore形式体现目前已经成熟的SOPC开发平台:XilinxSpartanIIFPGA和MicroBlaze软处理器IPCoreXilinxVirtexIIProFPGA和PowerPC硬处理器IPCoreAltera等其它FPGA和处理器IPCore15最新进展之:可编程片上系统(SOPC)SOPC:可编程逻辑器图:SOPC示例16图:SOPC示例16goReaderInterneteBookSamsungAnyWebInternetScreenPhoneeRemoteIntelligentHomeControllerTektronixTDS7000DigitalOscilloscopesNixvueDigitalAlbumDigitalPhotoAlbum一些典型的嵌入式系统应用实例返回17goReaderInterneteBookSamsun数字系统设计与仿真的层次系统设计的层次算法级----电路板级---芯片级设计与仿真方法EDA方法设计与仿真工具SystemViewMatlabOrCADProtelMaxplusFoundation

硬件仿真仿真板用户版18数字系统设计与仿真的层次系统设计的层次算法级----电路板级1.2数系统字设计的一般步骤1.2.1引例1.2.2数字系统设计的基本步骤1.系统逻辑功能的确定(1)待设计系统信息、特征等。(2)控制信号的作用、格式及控制信号与输入、输出数据之间的关系。(3)数据处理或控制过程的技术指标。191.2数系统字设计的一般步骤1.2.1引例192.系统的描述2.系统的描述3.算法的设计:把系统的复杂运算分解成一组有序进行的子运算。4.电路结构选择:寻求一个可以实现上述算法的电路结构。202.系统的描述2.系统的描述20设计与仿真的层次设计层次时序单位基本单元功能描述系统级数据处理进程及通信自然语言算法级运算步运算的控制行为有限状态机、控制流图寄存器级时钟周期寄存器、运算、变换布尔方程、布尔有限状态机门级延时逻辑门、器件原理图电路级物理时间晶体管、R、L、C电压、电流的微分方程版图级几何图形21设计与仿真的层次设计层次时序单位基本单元功能描述系统级数据处可编程ASIC技术22可编程ASIC技术22可编程ASIC技术可编程ASIC技术概论Altera可编程ASIC器件Xilinx可编程ASIC器件23可编程ASIC技术可编程ASIC技术概论23电子设计自动化ElectronicDesigeAutomation(EDA)CAE(前端)CAD(后端)ViewlogicVHDLSummitVHDLSynopsysVHDLCadenceVerilogHDLOrCADDataI/OAbelCOMPASSASIC配置文件XilinxFoundationAlteraMAX+PlusIILatticePDS+AMDMicrosimPilkingtonFPAAFPMA24电子设计自动化ElectronicDesigeAutom集成电路的发展是从小规模—中规模—大规模—超大规模,发展的方向是两方面:通用集成电路,专用集成电路定制半定制1.标准单元2.门阵列3.可编程逻辑器件编程方式:1.一次编程熔丝开关,反熔丝开关2.多次编程浮栅编程3.无限次编程基于SRAM编程元件1.静态存储器2.反熔丝开关3.浮栅编程技术:浮栅,叠栅,电可改写,闪速存储单元

25集成电路的发展是从小规模—中规模—大规模—超FPGA与PAL的比较1.FPGA有更多的I/O管脚,多达几百条,不会出现PAL逻辑没有使用完之前,I/O已经用完;2.有更多的触发器,可以构造许多的寄存器和计数器;3.可以构成系统级特性,如数据总线等;4.可以集成多个PAL以上;5.减少印刷板面积,降低系统成本;6.降低功耗;7.系统有较少的元件在印刷板上,可靠性增加;8.可编程和可再利用性,PAL只能一次编程,FPGA和CPLD多次编程;9.加密能力增加。26FPGA与PAL的比较1.FPGA有更多的I/O管脚,多达几CPLD和FPGA与TTL电路的比较1.CPLD和FPGA相当于20到500以上个TTL电路集成到一个器件内,有较高的密度;2.设计者以自己的设计方法设计所需的逻辑系统,所以增加了灵活性;3.集成之后,可以显著改善系统的可靠性;4.可以方便地通过计算机软件平台,对所设计的系统进行修改和仿真,不用对印刷板进行修改;5.系统集成到可编程逻辑器件以后,可减少印刷板的层次和缩小印刷板的面积。27CPLD和FPGA与TTL电路的比较1.CPLD和FPGA相CPLD和FPGA与定制比较1.前者较后者有较低的开发和设计成本,可以在办公室的PC机上进行设计,配置到芯片;2.前者是可编程的,风险能降低到最小,后者每次的修改设计,用于定制掩模的费用多达几万到几十万人民币;3.前者可再编程的时间是很短的,省去了定制掩模范投片制造带来的时间延误;4.前者可再编程特性,可以做到出厂前器件100%测试,保证了器件的质量;5.对大量的产品,为降低成本,前者很容易转到固定连线的门阵列。28CPLD和FPGA与定制比较1.前者较后者有较低的开发和设计2929主要EDA设计工具和网址公司名称软件名称网址XilinxFoundationAllianceAlteraMaxplusIIQuartusDataI/OSysnarioTasklink

CadenceDesignSystemsComposerFPGASolution

MentorGraphicsFPGAStation

SynopsysFPGAExpressVHDLSystemSimulate

ViewlogicPowerviewToolsLatticeExpertSynario30主要EDA设计工具和网址公司名称软件名称网址Xilinx掌握要点数字系统设计的内容是什么?电子系统的主要设计方法有哪些?什么是EDA技术?电子系统设计与仿真的几个层次是什么?你知道哪些主流设计工具?怎样在不同系统选择不同的设计方案?31掌握要点数字系统设计的内容是什么?31练习一上网查找EDA相关网站及相关设计、仿真工具重点查找网站

/

32练习一上网查找EDA相关网站及相关设计、仿真工具323333343435353636373738383939404041414242434344444545464647474848494950505151525253535454555556565757585859596060616162626363646465656666676768686969707071717272737374747575767677777878797980808181SMI82SMI828383848485858686878788888989909091919292939394949595969697979898999910010011011101102102103103104104105105106106107107108108109109110110111111112112113113114114115115116116117117118118119119120120121121122122123123124124125125126126127127128128129129130130131131132132133133134134135135136136137137138138139139可编程ASIC的设计方法原理图方法HDL(VHDL、ABEL、Verilog)状态机波形图功能模块设计IP调用140可编程ASIC的设计方法原理图方法140141141

传统的电路系统设计方法的步骤从状态图的简化,写出最简逻辑表达式,到绘出电路原理图。这在不是较大的电路系统中,工程师可以用一定的时间,了解电路的原理。若电路系统非常庞大,工程师就不容易在电路原理图上了解电路的原理,而且对绘图者也是一项非常烦琐的工作。因此众多软件公司开发研制了具有自己特色的电路硬件描述语言(HardwareDescriptionLanguage,HDL),这些硬件描述语言必然有很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中,不能在众多的软件工具中选择一个最佳组合作为自己的最优设计环境。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。142传统的电路系统设计方法的步骤从状态图的简化,写美国国防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL,这种语言的成就有两个方面:1.描述复杂的电路系统;

2.VHDL成为硬件描述语言的标准。143美国国防部在80年代初提出了VHSIC(VeryHVHDL的主要优点是:1.覆盖面广,描述能力强,是一个多层次的硬件描述语言。即设计的原始描述可以是非常简练的描述,经过层层细化求精,最终成为可直接付诸生产的电路级或版图参数描述,整个过程都可以在VHDL的环境下进行。2.VHDL有良好的可读性,即可以被计算机接受,也容易被理解。用VHDL书写的原文件,即是程序,又是文档,即是技术人员之间交换信息的文件,又可作为合同签约者之间的文件。3.VHDL本身的生命期长,因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。与工艺技术有关的参数可通过VHDL提供的属性加以描述,工艺改变时,只需修改相应程序中的属性参数即可。144VHDL的主要优点是:1.覆盖面广,描述能力强4.支持大规模设计的分解和已有设计的再利用,一个大规模设计不可能一个人独立完成,它将由多人,多项目组来共同完成。VHDL为设计的分解和设计的再利用提供了有力的支持。VHDL的主要优点是:5.VHDL已成为IEEE承认的一个工业标准,事实上已成为通用硬件描述语言。1454.支持大规模设计的分解和已有设计的再利用,一个大第一节VHDL的基本组成VHDL可以把任意复杂的电路系统视作一个模块,一个模块可主要分为三个组成部分:每个模块中的程序包有IEEE标准的标准程序包或设计者自身设计的程序包,而且调用的数量不限。模块中的程序包是设计中的子程序和公用数据类型的集合,是构成设计工具的工具箱,工具箱中最基本的工具是数据类型包,调用此标准程序包的VHDL语言是:一、参数部分——程序包146第一节VHDL的基本组成VHDL可以把任例1:LIBRARYieee;USEieee.std_logic_1164.all;调用程序包语句标准程序包定义程序包这两句设置在VHDL程序的前面,表示以后在实体或结构体中要用到数据类型包中的数据类型。147例1:LIBRARYieee;USEieee.std模块中仅有一个设计实体,它提供该设计模块的公共信息,是VHDL设计电路的最基本部分。VHDL设计的电路系统是可以分层次的,所以设计的模块系统实体即可以是顶层实体,又可以是最底层实体。二、接口部分—设计实体:调用程序包语句标准程序包定义程序包实体及实体声明语句ENTITYkxorISkxorPORT(a1,b1:INstd_logic;a1b1c1:OUTstd_logic);c1ENDkxor;例2148模块中仅有一个设计实体,它提供该设计模块的公共实体部分的大写单词ENTITY、IS、PORT、IN、OUT和END为关键字。在ENTITY...END之间表示实体内容,ENTITY后的字符串kxor表示实体的名称,即电路的符号名。端口(引脚)信息关键字PORT中的语句有三个端口,描述了信号的流向,分别是两个输入(IN)模式a1和b1,一个是输出(OUT)模式c1,端口信息除了输入输出之外,还可以是双向、缓冲器等。std_logic表示信号取值的类型为标准逻辑位,除了标准逻辑位之外,还可以是实数、整数、无符号数、物理以及以上数据类型组成的记录和数组集合,信号类型也可以是设计者定义。149实体部分的大写单词ENTITY、IS、PORT三、描述部分—结构体:当异或门的符号和外部端口a1、b1和c1确定之后,就要确定实体的内部电路,使之与实体相对应。电路描述部分称之为结构体ARCHITECTURE,它描述实体硬件的互连关系、数据的传输和变换以及动态行为。一个实体可以对应多个结构体,每个结构体可以代表该硬件的某一方面特性,例如行为特性,结构特性。调用程序包语句标准程序包定义程序包实体及实体声明语句结构体1结构体2结构体nARCHITECTUREkxor_arcOFkxorIS例3BEGIN

c1<=(NOTa1ANDb1)OR(a1AND

NOTb1);ENDkxor_arc;150三、描述部分—结构体:当异或门的符号和外部端口akxora1b1c1a1b1c1151kxora1b1c1a1b1c1151第二节VHDL数据类型

和属性VHDL硬件描述语言中涉及到了许多信号,变量和常量,它们用来保持一个数据。保持数据的信号,变量和常量,在VHDL中称为目标,每一个目标都有一个数据类型确定目标保持的那一类数据。VHDL是一种非常严格的数据类型化语言,规定每个信号,常量或变量和每个表达式有一个唯一的确定数据类型,一般说,在表达式中分配数值给目标时的数据类型不可以被混用。每个目标和表达式的类型静态地确定。152第二节VHDL数据类型

和属性VHDL硬件描在VHDL中有三类目标:信号、变量和常量。信号和变量可以赋予一系列的值,而常量一次仅被分配一个值。变量和信号又有不同,赋予信号的数值要到未来的某个时刻,信号才接受当前的数值,而赋予变量的数值,变量立即接受当前的数值。目标的一般形式如下:<目标种类><目标<,目标...>>:<目标类型>:=<表达式>;153在VHDL中有三类目标:信号、变量和常量。信目标:是一个或多个代表着目标种类的字符串,多个目

标时用“,”号分开。<目标种类><目标<,目标...>>:<目标类型>:=<表达式>;目标种类:信号、变量和常量。信号:它可以表示把元件的端口连接在一起的互连线。

变量:用于对暂时数据的局部存储,变量只在进程和子

程序内部定义。

常量:对某些特定类型数据赋予的数值。表达式:表达式是为了规定目标的初始值,这是缺省部分。目标类型:为了规定目标的特征,VHDL含有很宽范围的数据类型。VHDL除了有基本的数据类型之外,设计者还可以建立自己新的数据类型,类型说明部分规定类型名和类型范围,它的一般形式是:154目标:是一个或多个代表着目标种类的字符串,多个目

TYPE<类型名>IS<类型范围>;标量类型、复合类型、子类型、文件类型和寻址类型。标量类型包括所有的简单类型:如整数、实数等复合类型包括数组和记录寻址类型在一般编辑语言中等价为指针文件类型用设计者定义的文件类型为设计者提供说明的文件对象子类型主要是对现有类型加以限制VHDL可用数据类型有五类:155TYPE<类型名>IS<类型范围>;标量类一、标量数据类型标量数据类型是基本的数据类型,它包括整数类型、实数类型、物理类型和枚举类型。一个目标的数值有可能经常更换或者说是包含多个值,但一个目标一次只能被一种类型说明。物理类型要提供一个基本单位,然后在这个基本单位上定义多个或零个次级单位,每个次级单位都是基本单位的整数倍。枚举类型在形式上是定义括弧括起来的字符串文字表,一个字符串文字在枚举类型定义中只能出现一次,但允许同样一个字符串文字出现在不同的枚举类型的字符串文字表中,枚举类型的字符串文字表中的文字是由设计者定义的,这些字母可以是单个字母,也可以是一个字符串,例如BREAKFAST,Lunch,a等。

156一、标量数据类型标量数据类型是基本的数据类型,它包括整数类

下面举两个VHDL程序加深理解标量类型的使用。PACKAGEscaleIS

TYPEcurrentISRANGE0TO1000000000;

UNITS

na;

ua=1000na;

ma=1000ua;

a=1000ma;

ENDUNITS;

TYPEloadIS(small,med,big);

ENDscale;例1:USEwork.scale.all;

ENTITYscale1IS

PORT(out1:OUTcurrent;

load1:INload;

ENDscale1;157

下面举两个VHDL程序加深理解标量类型的使用。PACKAARCHITECTUREscale1_arcOFscale1IS

SIGNALa1:REAL;

BEGIN

a1<=1.0;--OK

a1<=1;--Error

a1<=-1.0E10;--OK

a1<=2.5E-20;--OK

a1<=-1E+8;--Error

a1<=5.3ns;--Error158ARCHITECTUREscale1_arcOFscaPROCESS(a)

VARIABLEb:INTEGER;

BEGIN

b:=-1;--OK

b:=1.0;--Error

ENDPROCESS;

out1<=100uaWHEN(load1=small)ELSE

1maWHEN(load1=med)ELSE

10maWHEN(load1=big)ELSE

100ua;

ENDscale1_arc;159PROCESS(a)

VARIABLEb:INTEPACKAGEmeals_pkgIS

TYPEmealIS(breakfast,lunch,dinner);

ENDmeals_pkg;例2:USEwork.meals_pkg.all;

ENTITYmealsIS

PORT(previous_meal:INmeal;

next_meal:OUTmeal);

ENDmeals;ARCHITECTUREmeals_arcOFmealsIS

BEGIN

WITHprevious_mealSELECT

next_meal<=breakfastWHENdinner,

lunchWHENbreakfast,

dinnerWHENlunch;

ENDmeals_arc;160PACKAGEmeals_pkgIS

TYPEmea二、复合数据类型复合类型是由数组类型和记录类型组成,它们的元素是标量类型的元素。数组类型是由相同的标量元素组成,即同构复合类型,数组可以是一维二维或多维。例如TYPEmatrixIS

ARRAY(row,column)OFstd_logic;

TYPEr_maISARRAY(1TO10,1TO40)OFstd_logic;TYPEwordISARRAY(15DOWNTO0)OFBIT;TYPEcolumnISRANGE1TO40;TYPErowISRANGE1TO10;CONSTANTROM:BIT_VECTOR(0TO15);161二、复合数据类型复合类型是由数组类型和记录类型组ARCHITECTURErom_arcOFromIS

BEGIN

PROCESS(cs,x1,x2,x3,x4)

VARIABLEn:NATURAL

RANGE0TO15;

CONSTANTrom0:std_logic_vector(0TO15):=“0101010101010101”;

CONSTANTrom1:std_logic_vector(0TO15):=“0011001100110011”;

CONSTANTrom2:std_logic_vector(0TO15):=“0000111100001111”;

CONSTANTrom3:std_logic_vector(0TO15):=“0000000011111111”;下面举一个VHDL程序说明一维数组实现16×4的ROM。LIBRARYieee;USEieee.std_logic_1164.all;ENTITYromISPORT(cs,x1,x2,x3,x4:INstd_logic;d0,d1,d2,d3:OUTstd_logic);ENDrom;162ARCHITECTURErom_arcOFromIS

BEGIN

IFcs=‘1’THEN

n:=0;

IFx1=‘1’THENn:=n+1;ENDIF;

IFx2=‘1’THENn:=n+2;ENDIF;

IFx3=‘1’THENn:=n+4;ENDIF;

IFx4=‘1’THENn:=n+8;ENDIF;

d0<=rom0(n)AFTER10ns;

d1<=rom1(n)AFTER10ns;

d2<=rom2(n)AFTER10ns;

d3<=rom3(n)AFTER10ns;

ELSE

d0<=‘Z’AFTER10ns;

d1<=‘Z’AFTER10ns;

d2<=‘Z’AFTER10ns;

d3<=‘Z’AFTER10ns;

ENDIF;

ENDPROCESS;

ENDrom_arc;163BEGIN

IFcs=‘1’THEN

在结构体说明区(ARCHITECTURE和BEGIN之间)被说明的目标,仅可以在此结构体中引用或在结构体中的任何进程语句中被引用,称此目标为局部信号。数据类型的全局化和局部化前面已经讨论VHDL描述语言的组成是由程序包、实体、结构体(结构体中有进程)、以及子程序而组成,不同的目标可以在指定的组成部分内加以说明。如果一个目标在实体说明部分被说明,那么在本实体和本实体内部的任何结构体和任何进程中都可以引用在实体中说明的目标,称为全局信号;164在结构体说明区(ARCHITECTURE和BEGINVHDL中不同的目标和类型规定在不同的构造中可以被说明。

信号:实体、结构体说明区、程序包和子程序。

变量:进程语句说明区和子程序。

常量:实体、结构体、进程语句说明区和程序包和子程序。

标量类型:实体、结构体、进程语句说明区和程序包和子程序。

复合类型:实体、结构体、进程语句说明区和程序包和子程序。文件类型:子程序和进程语句说明区。

寻址类型:进程语句说明区。165VHDL中不同的目标和类型规定在不同的构造中可以被说明。

VHDL的属性VHDL中的属性使得VHDL程序更加简明扼要,更加容易理解,VHDL的属性在时序程序中几乎处处可见,如值类属性的左边界、右边界、上下边界以及值类属性的长度,还可以检测信号上升沿和下降沿以及前一次发生的事件等等。VHDL的属性可归纳为,信号类属性、函数类属性、值类属性、类型类属性和范围类属性。本节介绍值类属性及函数信号类属性。166VHDL的属性VHDL中的属性使得VHDL程序更TYPEbitISARRAY(63DOWNTO32)OFBIT;

VARIABLEleft_range,right_range,uprange,lowrange:INTEGER;

BEGIN

left_range:=bit’LEFT;--returns63

right_range:=bit’RIGHT;--returns32

uprange:=bit’HIGH;--returns63

lowrange:=bit’LOW;--returns32值类属性:值类属性用于返回数组的边界或长度,首先举一例数组边界的例子说明类型属性。例8:167TYPEbitISARRAY(63DOWNTO32TYPEbitISARRAY(0TO7)OFBIT;

TYPEbit1ISARRAY(8TO31)OFBIT;

VARIABLElen1,len2:INTEGER;

BEGIN

len1:=bit’LENGTH;--return8

len2:=bit1’LENGTH;--return24下面再举一个值类数组属性的例子,让其返回数组范围的总长度。例:168TYPEbitISARRAY(0TO7)OFB它可用来检查一个信号的变化,并且变化刚刚发生,既推断出在信号上发生了一个跳变。函数信号属性:函数信号属性用来返回有关信号行为功能的信息,它反映一个信号是否正好有值的变化或事件的发生,如clk’EVENT,这个属性为“EVENT”,对检查时钟边沿触发是很有效的。下面举一个例子,说明函数信号属性的用法IFclk=‘1’ANDclk’EVENT

THEN

q<=d;

ENDIF;上述语句中用到了函数信号属性clk’EVENT,说明如果时钟信号clk为高电平,并且事件刚刚发生,也就是说是时钟上升沿有效,此时q得到d的信号。169它可用来检查一个信号的变化,并且变化刚刚发生,既推第三节VHDL的行为描述在VHDL硬件描述语言中,描述电路逻辑的程序称为行为描述,行为描述有并行行为描述、进程行为描述和顺序行为描述。三个行为即可以是相互独立,成为单一的行为描述体,又可以相互联系,成为混合描述体,如进程行为描述行为之间是并行行为,进程行为体的内部是顺序行为。170第三节VHDL的行为描述在VHD一、VHDL的并行行为在典型的编程语言如C或Pascal中,每个赋值语句按规定的次序,一个接在另一个之后顺序执行,执行的次序由源文件决定。在VHDL中,结构体的内部没有规定语句的次序,执行的次序仅由对语句中的敏感信号发生的事件决定,且语句是同时执行,产生其并行型。结构体中并行赋值语句的一般格式如下:<对象><=<表达式>该一般形式读作对象得到表达式的值,其作用是将表达式的信号值分配给对象,也就是说每当表达式的信号值变化时执行该语句。每个表达式都至少有一个敏感信号,每当敏感信号改变其值时,这个信号赋值语句就执行,171一、VHDL的并行行为在典型的编程语言如C或在所有的并行语句中,两个以上的并行赋值语句在字面上的顺序并不表明它们的执行顺序,例如下面的两个结构体在功能上是等价的。ENTITYexeIS

PORT(a1,a2:INBIT;

b1,b2:OUTBIT);

ENDexe;ARCHITECTUREexe_arc1OFexeIS

BEGIN

b1<=a1ANDb2;

b2<=NOTa1ORa2;

ENDexe_arc1;ARCHITECTUREexe_arc2OFexeIS

BEGIN

b2<=NOTa1ORa2;

b1<=a1ANDb2;

ENDexe_arc2;a1a2b1b2172在所有的并行语句中,两个以上的并行赋值语句在字面上另一种并行信号赋值语句是选择信号赋值语句,它们的每一个赋值语句都需要给出一个表达式,同时给出与该表达式的每个可能值相关联的信号选择信号赋值语句的一般形式如下:

WITH<表达式>SELECT

<对象><=<信号1>WHEN<分支1>,

<信号2>WHEN<分支2>,

<信号n>WHEN<分支n>;173另一种并行信号赋值语句是选择信号赋值语句,它一个典型的四路数据选择器的VHDL程序说明WITH一般形式的用法ENTITYselsIS

PORT(d0,d1,d2,d3:INBIT;

s:ININTEGERRANGE0TO3;

out1:OUTBIT);

ENDsels;ARCHITECTUREsels_arcOFselsISBEGIN

WITHsSELECT

out1<=d0WHEN0,

d1WHEN1,

d2WHEN2,

d3WHEN3;

ENDsels_arc;d0d1d2d3sout1sels174一个典型的四路数据选择器的VHDL程序说明W仍以四路数据选择器为例,讨论另一个较为复杂的并行信号赋值语句的例子,以便更详细地说明并行概念,下面是四输入数据选择器的第二个VHDL程序。

例:LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYmux4IS

PORT(I0,I1,I2,I3,A,B:INstd_logic;

Q:OUTstd_logic);

ENDmux4;ARCHITECTUREmux4_arcOFmux4IS

SIGNALsel:INTEGER;

BEGIN

Q<=I0AFTER10nsWHENsel=0ELSE

I1AFTER10nsWHENsel=1ELSE

I2AFTER10nsWHENsel=2ELSE

I3AFTER10ns;sel<=0WHENA=‘0’ANDB=‘0’ELSE

1WHENA=‘1’ANDB=‘0’ELSE

2WHENA=‘0’ANDB=‘1’ELSE

3;ENDmux4_arc;175仍以四路数据选择器为例,讨论另一个较为复杂的并行二、VHDL的进程行为VHDL除了并行行为之外,还有顺序行为。顺序行为执行的顺序是一个接在另一个之后严格执行。顺序行为的语句存在于VHDL程序中的进程行为之中。而进程行为之间是并行行为语句。进程行为语句的一般形式如下:<进程标号>:PROCESS<敏感信号表><进程说明区>

BEGIN

<语句部分>

WAITON<敏感信号表>;

WAITUNTIL<条件表达式>;

WAITFOR<时间表达式>;

ENDPROCESS;176二、VHDL的进程行为VHDL除了并行行为之进程行为的说明区定义该进程所需要的局部数据环境、它包括子程序说明、属性说明和变量说明等在这里只给出变量说明的一个例子,变量说明的一般形式为VARIABLE<定义变量表>:<类型说明:=初始值>;下面进程说明区中说明了变量count,进程也可对变量赋值。

PROCESS

VARIABLEcount:INTEGER:=0;

BEGIN

count:=count+1;

WAITFOR1000ns;

ENDPROCESS;177进程行为的说明区定义该进程所需要的局部数据环整个实体模块中的每个进程行为语句,可以在任何时候被激活,所有被激活的进程是并行执行的下面举一个三八通用译码器程序的例子,说明进程语句如何工作。LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

ENTITYdecoderIS

PORT(sel:INUNSIGNED(2DOWNTO0);

dout:OUTUNSIGNED(7DOWNTO0));ENDdecoder;ARCHITECTUREdecoder_arcOFdecoderIS

SIGNALsel1:INTEGER;

BEGIN

PROCESS(sel)

BEGINsel1<=CONV_INTEGER(sel);

CASEsel1IS

WHEN0=>dout<=(‘0’,’0’,’0’,’0’,’0’,’0’,’0’,’1’)AFTER5ns;178整个实体模块中的每个进程行为语句,可以在任何时WHEN1=>dout<=(‘0’,’0’,’0’,’0’,’0’,’0’,’1’,’0’)AFTER5ns;

WHEN2=>dout<=(‘0’,’0’,’0’,’0’,’0’,’1’,’0’,’0’)AFTER5ns;

WHEN3=>dout<=(‘0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’)AFTER5ns;

WHEN4=>dout<=(‘0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’)AFTER5ns;

WHEN5=>dout<=(‘0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

WHEN6=>dout<=(‘0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

WHENOTHERS=>dout<=(‘1’,’0’,’0’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

ENDCASE;

ENDPROCESS;

ENDdecoder_arc;此例不像上例那样等待时间到1000ns以后再激活进程,而是只要sel的值一发生改变就激活进程,从第一句执行直到满足条件后再被挂起。179WHEN1=>dout<=(‘下例是另一种激活进程的方式:ENTITYregIS

PORT(d,clk:INBIT;

q1,q2:OUTBIT);

ENDreg;

ARCHITECTUREreg_arcOFregIS

BEGINPROCESS

BEGIN

WAITUNTILclk=‘1’;

q1<=d;

ENDPROCESS;PROCESS

BEGIN

WAITUNTILclk=‘0’;q2<=d;

ENDPROCESS;ENDreg_arc;进程行为语句之间是并行关系,进程行为语句内部是顺序关系。VHDL的每个结构体中可以有多个进程行为语句。它的关键之处是:180下例是另一种激活进程的方式:ENTITYregIS三、VHDL的顺序行为顺序行为语句可分为两大类:条件控制类,循环控制类在这两类中选出六种IF、CASE、FOR、WHILE..LOOP、EXIT和ASSERT进行讨论IF<条件>THEN

<语句>;

ELSIF<条件>THEN

<语句>;

ELSIF<条件>THEN

<语句>;

ELSE

<语句>;ENDIF;1、IF语句IF语句的一般形式为:181三、VHDL的顺序行为顺序行为语句可分为两大类:条件控制类,ARCHITECTUREalarm_arcOFalarmIS

BEGIN下面举例说明IF条件语句的用法。例:用VHDL设计一家用告警系统的控制逻辑,它有来自传感器的三个输入信号smoke、door、water和准备传输到告警设备的三个输出触发信号fire_alarm、burg_alarm、water_alarm以及使能信号en和alarm_en。VHDL程序描述如下:LIBRARYieee;

USEieee.std_logic_1164.all;

ENTITYalarmIS

PORT(smoke,door,water:INstd_logic;

en,alarm_en:INstd_logic;

fire_alarm,burg_alarm,water_alarm:OUTstd_logic);

ENDalarm;182ARCHITECTUREalarm_arcOFaPROCESS(smoke,door,water,en,alarm_en)

BEGIN

IF((smoke=‘1’)AND(en=‘0’))THEN

fire_alarm<=‘1’;

ELSE

fire_alarm<=‘0’;

ENDIF;IF((door=‘1’)AND((en=‘0’)AND(alarm_en=‘0’)))THEN

burg_alarm<=‘1’;

ELSE

burg_alarm<=‘0’;

ENDIF;IF((water=‘1’)AND(en=‘0’))THEN

water_alarm<=‘1’;

ELSE

water_alarm<=‘0’;

ENDIF;ENDPROCESS;

ENDalarm_arc;183PROCESS(smoke,door,water,en,al2、CASE语句CASE语句的一般形式:CASE<表达式>IS

WHEN<值>=><语句>;

WHEN<值>|<值>=><语句>;

WHEN<离散范围>=><语句>;

WHENOTHERS=><语句>;

ENDCASE;CASE语句是VHDL提供的另一种形式的控制语句,每当单个表达式的值在多个起作用的项中选择时,用此语句是较合适的,它根据所给表达式的值或域,选择“=>”后面的执行语句。1842、CASE语句CASE语句的一般形式:CASE<表达用CASE语句应该注意三个问题:一,是关键字WHEN的数量不作限制,但不容许两个语句用一个值;二,是所有WHEN后面的值在CASE语句中合起来的值域中的全部;三,是WHEN的次序可以任意排定185用CASE语句应该注意三个问题:一,是关键字3、FOR语句FOR循环语句的一般形式为:<循环标号>:FOR<循环变量>IN<范围>LOOP

<语句>;

ENDLOOP<循环标号>;下面举一两位二进制乘方电路,用VHDL描述如下:例:FORIIN1TO3LOOP

a(i):=i*i;

ENDLOOP;此例中循环语句变量为I,循环范围为“1TO3”,语句部分是乘方。1863、FOR语句FOR循环语句的一般形式为:<循环标号>:4、WHILE..LOOP语句WHILE..LOOP循环语句的一般形式为:<循环标号>:WHILE<条件>LOOP

<语句>;

ENDLOOP<循环标号>;循环的条件是布尔表达式,并且为假时结束循环,即每次在执行循环前检查条件为真时执行循环。例WHILE(X<10)LOOP

X:=X+1;

ENDLOOP;1874、WHILE..LOOP语句WHILE..LOOP循环语句5、断言语句断言语句对VHDL描述中的模型添加限制条件,报告一条文本的字符串。断言语句检查一个布尔表达式为真或为假,如果为真,该语句任何事都不做,如果为假,断言语句将输出设计者规定的字符串到标准的输出终端。另外,还可以规定输出的严重级别,级别共分四种:注意(note)告警(warning)出错(error)失败(failure)按严重级别分类断言语句是设计者分析自己设计的电路的好办法,而且按断言语句的报告找到描述语言出错的位置。断言语句不构造硬件,主要用于模块的预期处理,所以和综合设计的硬件系统无关。1885、断言语句断言语句对VHDL描述中的模型添断言语句的一般形式如下:ASSERT<条件>REPORT<输出信息>SEVERITY<严重级别>;条件为假时,系统的输出设备上将输出REPORT后面设计者规定的字符串信息,以及SEVERITY后面的严重级别。断言语句是非常有用的,它类似于C和Pascal语言中的陷井,当一些重要的限制未得到满足,或者发现不能处理的错误时,就会终止模拟分析过程,提供错误条件的性质和有用信息。下面用VHDL语言设计RS触发器和断言语句在程序中的作用。ENTITYRSFFIS

PORT(r,s:INBIT;

q,not_q:OUTBIT);

ENDRSFF;189断言语句的一般形式如下:ASSERT<条件>ARCHITECTURERSFF_arcOFRSFFIS

BEGIN

PROCESS(r,s)

VARIABLElast_state:BIT:=‘0’;

BEGINASSERTNOT(r=‘1’ANDs=‘1’)

REPORT“BothrANDsequalto‘1’”

SEVERITYerror;IFr=‘0’ANDs=‘0’THEN

last_state:=last_state;ELSIFr=‘1’ANDs=‘0’THEN

last_state:=‘0’;ELSE--r=‘0’ANDs=‘1’last_state:=‘1’;ENDIF;190ARCHITECTURERSFF_arcOFRSq<=last_stateAFTER10ns;not_q<=NOT(last_state)AFTER20ns;

ENDPROCESS;ENDRSFF_arc;191q<=last_stateAFTER信号可被看作两个元件之间数据传输的通路,第四节VHDL的结构描述实体主要描述元件、端口与信号。元件是硬件的描述,即门、芯片或者电路板。端口是元件与外界的连接点,数据通过端口进入或流出元件。而信号则是作为硬件连线的一种抽象描述,它即能保持变化的数据,又可以连接各个子元件。192信号可被看作两个元件之间数据传输的通路,第四节VHD下面举例说明“调用元件语句”的用法。对一个硬件的结构进行描述,就是要描述它由哪些子元件组成,以及各个子元件之间的互连关系。结构描述比行为描述更加具体化,即,结构描述与硬件之间的关系要比行为描述与硬件之间的关系更明显。前面讨论,行为描述的基本单元是进程语句而结构描述的基本单元则是“调用元件语句”。193下面举例说明“调用元件语句”的用法。对一个硬例:用VHDL结构描述设计一全减器,全减器可由两个半减器和一个或门组成。首先用VHDL的行为描述设计半减器:ENTITYhalfsubIS

PORT(A,B:INBIT;

T,C:OUTBIT);

ENDhalfsub;

PROCESS(A,B)

BEGIN

T<=AXORBAFTER10ns;

C<=(NOTA)ANDBAFTER10ns;

ENDPROCESS;ARCHITECTUREhalfsub_arcOFhalfsubIS

BEGINENDhalfsub_arc;194例:用VHDL结构描述设计一全减器,全减器可由两个首先用VH下面再将或门的VHDL程序描述如下:ARCHITECTUREorgate_arcOForgateIS

BEGINO1<=A1ORB1;ENDorgate_arc;下面将两个半减器,一个或门的端口,通过定义一些中间信号将其连接起来形成VHDL的结构描述。ENTITYorgateIS

PORT(A1,B1:INBIT;O1:OUTBIT);ENDorgate;195下面再将或门的VHDL程序描述如下:ARCHITECTURE在下面举的全减器例子里可以看到定义了中间信号temp_T,temp_c1和temp_c2ENTITYfullsubISPORT(I1,I2,C_IN:INBIT;FT,C_OUT:OUTBIT);ENDfullsub;ARCHITECTUREfullsub_arcOFfullsubISSIGNAL

temp_T,temp_c1,temp_c2:BIT;COMPONENThalfsub

PORT(A,B:INBIT;T,C:OUTBIT);ENDCOMPONENT;COMPONENTorgate

PORT(A1,B1:INBIT;O1:OUTBIT);ENDCOMPONENT;196在下面举的全减器例子里可以看到定义了中间信号ENTITYf图中虚线框各元件之间的连线命名。temp_T将第一个半减器的差位输出连到第二个半减器的输入端。信号temp_c1将第一个半减器的借位输出连至“或”门的一个输入端,信号temp_c2将第二个半减器的借位输出连至“或”门的另一个输入端

温馨提示

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

评论

0/150

提交评论