数字逻辑:第5章 硬件描述语言1_第1页
数字逻辑:第5章 硬件描述语言1_第2页
数字逻辑:第5章 硬件描述语言1_第3页
数字逻辑:第5章 硬件描述语言1_第4页
数字逻辑:第5章 硬件描述语言1_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第五章

硬件描述语言

学习内容VHDL程序基本结构实体、结构体、配置、包集合和库VHDL基本语法描述结构体功能的三种方法:行为描述法数据流描述法(RTL描述)结构描述法学习要求用VHDL语言设计简单的数字系统VeryhighspeedintegratedCircuitHardwareDescriptionLanguage(VHDL)

是IEEE、工业国际标准硬件描述语言用语言的方式而非图形等方式描述硬件电路

VHDL有过两个标准:

IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)

IEEEStd1076-2002(calledVHDL2002)

5.3VHDL硬件描述语言VHDL的特点设计可按层次分解。每个设计元素既有良好定义的界面(为了与其他元素连接),又有精确的行为描述(为了模拟它)。行为描述既可用算法也可用实际硬件结构来定义元素的操作。例如,一个元素可由算法作初始定义,以允许对使用该算法的更高级元素做设计验证;之后,算法定义再由硬件结构来代替。并行性、定时和时钟都可被模型化。VHDL可以处理异步、也可以处理同步时序电路结构。设计的逻辑操作和定时特性都可被模拟。设计流程5.3.1程序结构

VHDL是按结构化编程原则来设计的,即定义硬件模块的界面而隐藏它的内部细节。

VHDL实体(entity)只是对模块输入输出的说明,而VHDL的结构体(architecture)是对模块内部结构或行为的细致描述。高层的结构体可多次使用低层实体,而多个顶层结构体可用同一个低层结构体。VHDL程序文件结构在VHDL程序的文本文件中,实体声明和结构体定义是分开的。在大型项目中,实体和结构体有时在不同的文件中定义,编译器根据它们的名字来匹配它们。VHDL实体声明语法实体声明语法除了声明名字实体外,还要定义外部接口信号或在端口声明部分定义端口。entity-name(实体名):设计者自定,最好根据电路功能来命名。mode(模式):4个保留字之一,说明信号方向。实体声明中包含的元素signal-names(信号名):由逗号分开的1个或多个用户选择的标识符的列表,用于命名外部接口信号。signal-type(信号类型):内置或用户定义信号类型。注意:在最后的信号类型后面没有分号。VHDL结构体语法实体名必须与前面实体声明中的名字相同。结构体名是用户自定的,通常与实体名有关。结构体的外部接口信号是从相应的实体声明中的端口声明继承而来的。结构体可包含限于结构体内部使用的信号和其他声明。信号与变量信号声明变量声明

信号SIGNAL变量VARIABLE基本用法用于作为电路中的信号连线

用于作为进程中局部数据存储单元

适用范围在整个结构体内的任何地方都能适用

只能在所定义的进程中使用

行为特性在进程的最后才对信号赋值

立即赋值

信号与变量赋值语句功能的比较信号赋值符号<=变量赋值符号:=5.3.2类型和常量

VHDL程序中的所有信号、变量和常量都必须有相关的“类型”。类型说明了对象可以取值的范围和集合,经常还有与给定类型相关的操作符的集合(如加、与等)。

Integer(整数)范围:从-231+1~+231-1

boolean(布尔)类型有2个值:true(真)和false(假)

Character(字符)类型包括ISO8位字符集的所有字符,头128个字符是ASCII字符。用户自定义类型典型VHDL程序中最常用的类型是用户定义类型,其中最常用的又是枚举类型,通过列举该类型的值而定义。枚举类型的类型声明如上表第1行所示。value-list是类型所有值的列表,由逗号隔开。如:标准用户定义逻辑类型std_logic初始值不定态逻辑“0”逻辑“1”高阻态弱信号不定弱信号0弱信号1不可能情况VHDL还允许用户生成自定义类型的子类型(subtype)。子类型的值必须是基类型值的一个连续的范围。对于枚举类型,“连续”是指初始定义时,这些值在value-list中的位置。下面是一些子类型的定义:注意:列表范围的顺序可使用to或downto决定升序或降序。子类型常量常量(constant)都有利于程序的可读性、可维持性和可移植性。常量声明:例如:注意:常量的值可为简单的表达式。常量可用于任何能用到其对应值的地方。数组类型(arraytype)数组类型是一个用户定义类型。跟其他语言一样,数组是同类型元素的有序集合,每个元素由数组下标来选择。指定现有的类型(range-type)的全部值或子集作为数组下标的范围。数组元素的顺序是从左到右,与下标范围的方向相同。各个数组元素是由数组名和括号内的元素下标来访问的。数组变量可通过在括号内列出元素值来赋值。VHDL还提供一种速记符号对数据元素赋值。如:如:通过指明子集的开始和结束下标来指向数组的连续子集或片段。注意:片段的方向必须与原数组方向相同。可用连接操作符&来拼接数组或数组元素。拼接是按照写的顺序从左到右进行。

'0'&'1'&"1Z"等价于“011Z”,如:字符串(string)是字符数据,是由双引号包括的ISO字符序列。如:在典型的VHDL程序中,最重要的数组类型是IEEE1164标准用户定义的逻辑类型std_logic_vector,它定义了std_logic位的有序集。这种类型定义如下:此数组范围未作说明,但范围必须是一个已定义类型的子集,是一个无约束数组类型。5.3.3函数和过程与高级程序语言的函数一样,VHDL函数(function)接收一些参数并返回一个结果。在VHDL函数定义或函数调用中的每个参数和结果,都有一个预定义类型。子程序包括函数和过程,是一个VHDL程序模块,与进程类似,但不能像进程那样可以从结构体的并行语句或进程结构中直接读取信号值或向信号赋值根据VHDL的强类型原则,实际参数必须与形式参数的类型相同或是它的子类型。关键词return指示函数何时返回调用处,它后面跟着一个表达式,其值将返回给调用者。由该表达式所产生类型必须与函数说明中的return-type相匹配。VHDL操作符重载这个设施允许用户指定一个这样的函数:只要一个内置操作符(and、or、+,等等)被用于操作数类型的匹配集时,该函数就被唤醒。对给定的操作符可能有几个定义,在操作符的每次使用中编译器都会自动地选择与操作数类型匹配的定义。在函数定义本身,函数名上的双引号指示操作符重载。由于VHDL的强类型要求,通常要求将一个信号从一种类型转换为另一种类型。IEEE1164包包含了几种转换函数。X‘range:名字后面跟一个单引号表示“属性”,range是内置属性标识符,它只用于数组,意思是“数组下标范围,从左到右”。FUNCTIONCONV_STD_LOGIC(arg:INTEGER;size:INTEGER) RETURNSTD_LOGIC_VECTORis VARABLEresult:STD_LOGIC_VECTOR(size-1downto0); VARABLEtemp:INTEGER;begin temp:=arg; FORIIN0TOsize-1LOOP IF(tempMOD2)=1THENresult(i):=‘1’; ELSEresult(i):=‘0’; ENDIF; temp:=temp/2; ENDLOOP;RETURNresult;END;注意:函数声明了一个局部变量“result”,其下标范围依赖于SIZE。因此,SIZE必须为一个常数或编译该函数时已是一个已知值。例:arg=6则size=3(位)temp=arg=6i=06mod2=0result(0)=0 temp=6/2=3i=13mod2=1result(1)=1 temp=3/2=1i=21mod2=1result(2)=1 temp=1/2returnresult=result(2)result(1)result(0)=110

过程可以多次调用VHDL过程(procedure)与函数相似,但是它不返回结果。函数可看作为一个表达式,过程则可看作为一个语句。VHDL过程允许将其参数指定为输出或输入输出类型,因此实际上过程也可以“返回”结果。过程调用格式过程名实际参数(表达式)VHDL过程5.3.4库和包VHDL库VHDL编译器存储信息的地方,包括在项目分析、模拟和综合时用到的中间文件。主机文件系统中,库的位置是与实现有关的。对于给定的VHDL设计,计算机自动生成和使用名为“work”的库。不是所有设计中所需的信息都在“work”库中。它必须指向包含共享定义的公共库。即使是小的项目也可能用到标准库。库的引用:在设计中说明了库名,就可使它访问任何前面分析的、存于库中的实体和结构体,但不能访问类型定义以及类似的定义。包VHDL包(package)是一个文件,它包括可用于其他程序中的对象定义。可放入包中的对象包括信号、类型、常量、函数、过程和组件声明。包中定义的信号是全局信号,任何使用包的VHDL实体都可使用之。可在设计文件开头引入use子句来“使用”一个包。

all表示可使用包中的所有定义只使用包中std_ulogic类型的定义如:包定义的语法包的定义并不限于标准体中。第一个“package”和“end”之间的所有对象,对使用包的设计文件是可见的,而“packagebody”后面的对象则是局部的。注意:第一部分包括“函数声明”,而不是函数定义。函数声明只列出函数名、参数、类型。完整的函数定义在包体中给出,对函数使用者是不可见的。5.3.5结构化设计元素在VHDL中,结构体的主体是一系列并发语句。每个并发语句和同一结构体中的其他并发语句是同时执行的。

结构化设计可定义实现实体的信号与实体的精确互连结构。

VHDL有各种不同的并发语句,以及将一些顺序语句捆扎起来作为一个并发语句操作的机制。由于使用方法不同,这些语句产生三种不同的电路设计与描述样式:结构化设计、数据流设计及行为设计。component语句(组件语句)组件语句中,组件名是前面已定义的实体名,在当前的结构体中要用到该实体。用到实体名的每个组件语句都产生一个已命名实体的实例,而每个实例都必须由惟一的标签命名。关键词portmap引入一个列表,该列表将命名的实体端口和当前结构体的信号联系起来。第一种是定位样式,列表信号的顺序和实体定义中端口的顺序一致;第二种是明晰样式,每个实体端口和信号以“=>”操作符相联,可以为任意顺序。组件声明语法在结构体中调用之前,组件必须在结构体定义中的组件声明中给予声明。组件声明与相应的实体声明中的端口声明部分一样,列出了每个端口的名字、模式和每个端口的类型。注意:程序中的组件语句是同时被执行的。N(3) N3_L N3L_N0generate语句generate语句允许用“forloop”生成重复结构,而不用分别写出每个组件实例。generic(类属)在实体声明中,在端口声明前做类属声明(genericdeclaration)可定义一个或多个类属常量。每个命名的常量可用于实体的结构体定义中,而且直到实体被另一个结构体用组件语句调用之前,常量值不变。在组件语句中用genericmap给类属常量赋值。将generic和generate语句结合起来,定义了一个用户可指定宽度的“总线反相器”调用多个反相器拷贝,每个拷贝宽度不同。表VHDL语言的顺序语句和并行语句并行语句顺序语句块(BLOCK)语句WAIT语句进程(PROCESS)语句断言(ASSERT)语句信号代入语句信号代入语句条件信号代入语句变量赋值语句选择信号代入语句CASE语句并发过程调用语句IF语句生成(GENERATE)语句LOOP语句元件例化语句EXIT语句RETURE语句NULL语句过程调用语句5.3.6数据流设计元素

VHDL提供几个并发语句允许VHDL利用数据流及其在电路中的操作来描述一个电路。这种描述称为数据流描述或数据流设计。并发信号赋值语句在并发信号赋值语句中,表达式的类型必须与信号名的类型兼容。这意味着两种类型必须是同样的,或者表达式类型是信号名类型的子类型。在这种情况下,元素的类型与长度必须匹配,但下标范围和方向不必匹配。注意:在VHDL内置的and、or、not操作符中,在not操作具有最高的优先级,素数检测器还可使用并发信号赋值语句的条件形式实现。条件并发赋值语句要求覆盖所有可能的条件。在条件信号赋值中,最后的“elseexpression”覆盖遗漏条件。选择信号赋值语句对expression表达式进行判断,若其值与某个choices匹配,就将相应的signal-value赋给signal-name。每个when子句的choices可以是expression的单个值,或由竖线(|)分开的值列表。关键词others覆盖所有剩余的expression值。5.3.7行为设计元素在VHDL中,可以用并发语句直接描述所需的逻辑电路行为。这种描述称为行业描述或行为设计。

VHDL行为设计能力是一般硬件描述语言特别是VHDL的主要优点。进程一个进程(process)是与其他并发语句以及其他进程并行执行的顺序语句的集合。VHDL的进程语句(processstatement)可用在能使用并发语句的任何地方。进程语句由关键词process引出,注意:进程可以不声明信号而只声明“变量”。VHDL进程要么在执行要么被挂起。进程定义中的信号列表称为灵敏度列表(sensitivitylist),它决定了进程何时执行。进程开始时是挂起的,当灵敏度列表中的任何信号改变其值时,进程恢复执行,从第一个顺序语句开始直到最后。灵敏度表是可选的,没有灵敏度表的进程从模拟的零时刻开始执行。顺序语句顺序信号赋值语句顺序信号赋值语句的语法与并发版本的语法相同(signal-name<=expression;),但它是在进程体范围内发生,而不是在结构体中。变量赋值语句变量赋值语句的语法:

variable-name:=expression;注意:赋值符号是(:=),它用于变量赋值。顺序语句If语句顺序语句case语句这个语句计算给出的expression,找出匹配的choices值,再执行相应的语句。注意:每个选择集可写出1个或多个sequential-statement。choices可以是单值形式或由竖线分开的多个值

温馨提示

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

评论

0/150

提交评论