第三章硬件描述语言VHDL入门

上传人:小*** 文档编号:243134412 上传时间:2024-09-16 格式:PPT 页数:334 大小:10.95MB
返回 下载 相关 举报
第三章硬件描述语言VHDL入门_第1页
第1页 / 共334页
第三章硬件描述语言VHDL入门_第2页
第2页 / 共334页
第三章硬件描述语言VHDL入门_第3页
第3页 / 共334页
点击查看更多>>
资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,电工教研室,单击此处编辑母版标题样式,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章 硬件描述语言,VHDL,入门,主讲:司杨,制作:张海峰,电工教研室,第三章 硬件描述语言,VHDL,入门,3,.1,VHDL描述的基本结构,1,3,.2,VHDL的基本元素,2,3,.3,并行处理语句,3,3,.4,顺序描述语句,4,3,.5,VHDL的描述风格与VHDL设计的仿真,5,电工教研室,3.1 VHDL,描述的基本结构,3.1.1 HDL,概述,一、硬件描述语言,HDL,二、硬件描述语言的诞生与发展,1.,硬件描述语言的起源,2.VHDL,的发展,3.Verilog HDL,4.,关于,VHDL,与,Verilog HDL,的使用情况,5.VHDL,与其他,HDL,比较,三电子设计自动化,(EDA),技术的发展,四、硬件描述语言,(VHDL),的突出优点,电工教研室,3.1.2 VHDL,描述的基本结构,一、基本的,VHDL,描述的组成,1.,实体(,entity,)部分,2.,结构体(,architecture,)部分,二、实体描述,1.VHDL,实体描述的基本格式,2.,信号的类别,3.,系统预定义的信号类型,三、结构体描述,1.,结构体描述的基本框架,电工教研室,3.1.1 HDL,概述,一、硬件描述语言,HDL,(,Hardware Description Language,),是一种对于数字电路和系统进行性能描述和模拟的语言,在,20,世纪,70,年代已经在学术界开始使用。使用硬件描述语言可以在数字系统的设计阶段对系统的性能进行描述和模拟,减少硬件设计的时间和成本,是一种很有推广价值的设计方法。,二、硬件描述语言的诞生与发展,1.,硬件描述语言的起源,为了把复杂的电子电路用文字文件方式描述,诞生了最初的硬件描述语言。,国内外普遍使用的主流硬件描述语言有:,(1) VHDL,和,Verilog HDL,(2) ABEL,和,AHDL,等。,电工教研室,2.VHDL,的发展,美国国防高级研究计划局,(DARPA),开发。,1985,年第一版。,1987,年为,IEEE,标准,(IEEE1076),。,1993,年增修为,IEEE1164,标准。,1996,年加电路合成标准程序和规格,IEEE1076.3,标准。美国国防部规定其为官方,ASIC,设计语言。,1995,年中国国家技术监督局推荐,VHDL,为我国硬件描述语言的国家标准。,电工教研室,3.Verilog HDL,以,C,语言为基础,由,GDA(Gateway Design Automation),公司的,Phil Moorby,创建于,1983,年。,1989,年,CADENCE,公司收购了,GDA,公司,拥有了,Verilog HDL,的独家专利。于,1990,年正式发表了,Verilog HDL,,并成立,OVI(Open Verilog International),组织推进其发展。,1995,年,CADENCE,公司放弃了,Verilog HDL,专利,使之成为,IEEE,标准,(IEEE1364),。,电工教研室,4.,关于,VHDL,与,Verilog HDL,的使用情况,相同电路用这两种硬件描述语言编程,程序长度大体相同。现在常用的各种仿真,/,综合工具均为二者通用。没有优劣之分。,在日本,,VHDL,用户略多于,Verilog HDL,,例如:,NEC,,日立,福田电子,丸文等公司通常习惯使用,VHDL,;而松下,,CASIO,等公司习惯使用,Verilog HDL,。,电工教研室,5.VHDL,与其他,HDL,比较,VHDL,、,VerilogHDL,、,ABEL,和,AHDL,只是用不同的语言描述相同的电路。,如用不同的语言讲述安徒生童话,“,卖火柴的小女孩,”,。,“,告诉我你想要什么样的电路,我给你提供这样的电路,”,5.,国内硬件描述语言书籍的常见问题:,往往片面夸大某一种硬件描述语言的长处。,书中的例子尽管都声称通过了仿真合成验证,但仍常见一些语法错误,合成时会出现,“,错误,”,或,“,警告,”,。请大家不要过分相信教科书上的语法。,脱离实际应用,仅仅介绍最基本的概念和语法规定,虽有较复杂的例子但却少有解释,难于理解。,对实际应用中至关重要的编码技巧和避免出错的注意事项,却往往只字不提。因此,新手入门往往要走很长的弯路。,第一节,第二节,第三节,第四节,第五节,第六节,总目录,章目录,6.,硬件描述语言的近期发展:,目前及今后若干年内,,VHDL,和,Verilog HDL,仍将是硬件描述语言主角。,因为它们已经经过无数应用实例的验证,能够满足各类复杂的逻辑功能要求,各种配套工具软件也非常成熟完善。,至于,Spec C, System C,等新型硬件描述语言,将来成为主流还是被淘汰出局,则与语言本身以及各种配套工具软件是否功能更加强大,使用更加简便,更易于学习掌握,以及与人们已经习惯的语言及工具是否有相似性和延续性等因素有关。,第一节,第二节,第三节,第四节,第五节,第六节,总目录,章目录,电工教研室,三电子设计自动化,(EDA),技术的发展,上世纪,80,年代,,EDA,还只能代替手工,画原理图和流程图,设计生产机器可以读懂的印刷电路板图。,到了,90,年代,出现了,Altera,公司的,Maxplus ,等,CPLD/FPGA,工具软件,人们可以用,Maxplus ,在,PC,机上设计由众多标准逻辑芯片(如,74,系列等)组成的电路原理图,然后再用它直接进行波形图仿真测试,观察验证电路在各种输入情况下的输出信号波形,及内部各点波形,并得到各点的延时信息,和电路”正常“警告,”出错“等信息。,电工教研室,最后,将经过,Maxplus ,将验证无误的电路写入,CPLD/FPGA,芯片,放入电路板中进行整机测试,如发现问题,修改原理图,波形仿真后重写,CPLD/FPGA,,重新进行整机测试,直至完全正确为止。整机中既可以使用,CPLD/FPGA,也可以制成,ASIC,芯片(视批量大小而定)。,Maxplus ,的出现,使电子设计自动化,(EDA),技术大大向前推进了一步。,Maxplus ,不仅支持原理图输入,而且还支持,VHDL,、,Verilog HDL,、以及,AHDL,等文本输入方式,是目前应用比较广泛的可编程逻辑器件开发软件。,电工教研室,Quartus ,是,ALTERA,公司推出的另一个可编程逻辑器件开发软件,它支持原理图输入、,HDL,、,Verilog HDL,和,AHDL,输入方式。,到了,90,年代后期,由于硬件描述语言的完善,尤其是相应的编译,测试,合成,布线等电子设计自动化,(EDA),工具软件的发展与完善,硬件描述语言,(HDL),终于进入了成熟实用阶段。这无疑是(数字)电路设计史上最具革命性的飞跃。,自此,人们实现了用简明易懂的高级编程语言设计复杂硬件电路的梦想。只要具备一定的硬件专门知识,就能随心所欲地设计出功能十分强大的专用智能电路,实现了“以软代硬”。,电工教研室,四、硬件描述语言,(VHDL),的突出优点,1.,打破了,IC,设计者与使用者的界线,使原先的,IC,使 用者在掌握了,VHDL,之后,都变成了,IC,设计者,都 能 够随心所欲地设计出具备多个,CPU,功能的复杂专用 芯片。,2.VHDL,及其配套工具软件简单易学,直观明了,便于迅速掌握,也便于修改。,3.,极大地缩短了专用芯片的开发周期,降低开发成本,加快了产品更新换代的速度,提高产品的市场竞争 力。,电工教研室,4.,大大缩小电路板面积和整机体积,提高产品可靠 性,增强产品功能,实现技术保密。,5.,可实现电路设计的模块化和积木式多级组合。各模块均可在今后被重复再利用(调用)。,6.,完全实现拥有整机的自主知识产权,不再在关键芯片(专用芯片)的进口及价格方面受制于人。这一点对目前我国尤为重要。,电工教研室,3.1.2 VHDL,描述的基本结构,一个实际的设计例子,设计一个,3,输入与门,1.,逻辑表达式:,y=a.b.c,2.,逻辑图:,&,y,a,b,c,电工教研室,3.,真值表,a,b,c,y,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,电工教研室,4.VHDL,描述,ENTITY andgate3 IS,PORT(a,b,c:IN BIT;,x:OUT BIT);,END ENTITY andgate3;,ARCHITECTURE dataflow2 OF andgate3 IS,BEGIN,x=a AND b AND C;,END ARCHITECTURE dataflow;,-(,数据流描述),电工教研室,ENTITY andgate3 IS,PORT(a,b,c:IN BIT;,y:OUT BIT);,END ENTITY andgate3;,ARCHITECTURE behavior OF andgate3 IS,BEGIN,Comb:PROCESS(a,b,c),BEGIN,IF( a=1 AND b=1 AND c=1) THEN,y=1;,ELSE,y=0;,END IF;,END PROCESS Comb;,END ARCHITECTURE behavior;,-(,行为描述),电工教研室,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY and3_1 IS,PORT(a,b,c:IN BIT;,x:OUT BIT);,END ENTITY and3_1;,ARCHITECTURE behavior2 OF and3_1 IS,SIGNAL indata:bit_vector(2 DOWNTO 0);,BEGIN,indata x x x x x x x x=1;,END CASE;,END PROCESS Comb1;,END ARCHITECTURE behavior2; -behavior description,电工教研室,3.1.2 VHDL,描述的基本结构,一、基本的,VHDL,描述的组成:,1.,实体(,entity,)部分,实体部分有时也称为接口(,interface,)部分,主要描述一个硬件模块或系统的输入、输出接口,包括输入、输出信号的名称,类型等。,2.,结构体(,architecture,)部分,结构体部分,有时也称为主体(,body,)部分,是对硬件内部结构或性能的具体描述。,电工教研室,例,5.1 2,输入与非门的,VHDL,描述,ENTITY,nand2,IS,-,实体描述,PORT,(,i1,i2:IN BIT;,-,输入信号名,o1:OUT BIT);,-,输出信号名,END,nand2;,ARCHITECTURE,delayed,OF,nand2,IS,-,结构体描述,BEGIN,o1=i1 NAND i2 AFTER 5NS;,-,电路描述,END,delayed;,电工教研室,说明:,IN(,输入,),、,OUT(,输出,),是表示信号的类别;,BIT,是表示信号的类型,,BIT,是系统定义的类型,即二进位类型,信号只有,0,和,1,两种值;,每个,VHDL,语句都是,以“,;”,结束,,包括最后一个语句也不例外;,VHDL,中的“,注释,”是以两个减号“,-,”,开始的。,电工教研室,二、实体描述,1.VHDL,实体描述的基本,格式,是:,ENTITY,实体名,IS,PORT,(,信号名,:,类别 信号类型,;,信号名,:,类别 信号类型,);,END,实体名,;,实体描述主要由,PORT,部分组成。,PORT,的中文译名就是,“,端口,”,,也就是要,在这个部分说明电路或系统的对外连接(外观说明),。实体名和信号名都是标识符,同样类别和类型的信号可以用逗号分隔,在一个语句行中说明。,电工教研室,2.,信号的类别主要有以下,4,种:,IN,:此信号是输入信号;,OUT,:此信号是输出信号,提供给其他的实体;,BUFFER,:缓冲信号,也是实体的输出信号,但是可以被实体本身的结构体读入;,INOUT,:双向信号,既可以输入,也可以输出。,电工教研室,信号的类型可以是,VHDL,预先定义的,也可以是用户自己定义的。,3.,系统预定义的信号类型有:,BIT,:二进位型,信号的值只能是,0,或,1,。,BIT_VECTOR,:二进位向量,实际对应的是二进位数组 ;,BOOLEAN,:布尔型,取值只能是,true,或者,false,;,INTEGER,:整型,一般都用,32,位二进制数表示整型数 ;,CHARACTER,:字符型,使用,8,位编码的,ASCII,字符。,电工教研室,三、结构体描述,1.,结构体描述的基本框架如下:,ARCHITECTURE,结构体名,OF,实体名,IS,BEGIN,END,结构体名,;,对于一个实体来说,可以有几种不同的结构体描述。,一个结构体名只是表示实体的一种描述(某一种实现),,还可以用另外的一个结构体名,对实体进行另一种描述。,电工教研室,例,5.2,二输入与非门的另一种描述。,ARCHITECTURE another OF nand2 IS,BEGIN,PROCESS(i1,i2),BEGIN,IF i1=1 AND i2=1 THEN,o1=0 AFTER 5NS;,ELSE o1=1 AFTER 5NS;,END IF;,END PROCESS;,END another;,电工教研室,3.2 VHDL,的基本元素,一、关键字,二、标识符的命名,三、数据类型,1.,枚举类型,2.STD_ULOGIC,3.,数组类型,4.,子类型,四、对象,1.,常量的定义,2.,变量的定义,3.,信号的定义,电工教研室,五、词法单元,1.,注释,2.VHDL,中的数字,3.,字符,4.,字符串,5.,位串,6.VHDL,语句中使用的标点符号,六、表达式与运算符,七、库和包,1.VHDL,库的种类和使用,2.,程序包,3.,库和程序包的引用,电工教研室,一、关键字,被赋予编译器能识别的特殊含义。,用户不可把关键字作为自己创建的标识符,为方便阅读,一般用大写字母来书写,详见教材,P147,电工教研室,二、标识符的命名,可使用的有效字符:,26,个大小写英文字母,10,个数字,下划线,必须以字母开头,下划线前后都要有字母或数字,不区分大小写,HALF_ADDER,和,half_adder,相同,电工教研室,三、数据类型,VHDL,中的数据类型有两大类:,预定义类型(标准数据类型),整数,Integer,:,-(2,31,-1),2,31,-1,实数,Real,:,-1.0E+38-+1.0E+38,位,Bit,:,0,或,1,位矢量,Bit_Vector,:,”,001100,”,布尔量,Boolean,:真或假,字符,Character,:,A,C,物理,Time,:预定义为时间,其他如电压、电流等也为物理型,错误等级,:NOTE,、,WARNING,、,ERROR,、,FAILURE,自然数(,Natural,)、正整数(,Positive,),字符串(,String,),如,”,morning,”,电工教研室,用户自定义类型:,枚举型,数组类型,子类型,文件类型,记录类型等。,本课中不介绍文件类型和记录类型。,电工教研室,1.,枚举类型,枚举类型(,Enumerated type,)是最常见的用户自定义类型之一。,在硬件描述中,可以通过枚举类型来定义信号的取值。除了最常用的二值逻辑(已经预定义为,BIT,型),还可以有三值逻辑(信号有三种取值:,0,、,1,和,z,),九值逻辑等。,电工教研室,枚举类型的定义可用以下的格式:,TYPE,枚举类型名,IS (,枚举型值表,);,其中的枚举型值表是用逗号分隔的标识符或字符常量,也就是这种枚举型信号可以取的值。,例如,四值逻辑系统的逻辑值有:,0,、,1,、,Z,(高阻抗)、,X,(不确定)。可以用枚举型定义这种逻辑系统:,TYPE qit_logic IS (0,1,Z,X);,电工教研室,2.STD_ULOGIC,在,IEEE1164,标准逻辑包中所定义的,std_ulogic,类型是一种九值逻辑,也是一种枚举型的数据类型:,TYPE std_ulogic IS ( U, -Uninitialized,X, -Forcing Unknown,0, - Forcing 0,1, - Forcing 1,Z, -High Impedance,W,-Weak Unknown,L, -Weak 0,H, -Weak 1,- , -Dont Care);,电工教研室,也可以用自定义的标识符作为枚举型信号的值。,例如,可以用枚举型来定义交通灯的状态:,TYPE traffic_light IS (red,green, yellow);,VHDL,语言对于枚举型类型取值的限制较少,可以用标识符,也可以用字符常量。这在许多高级语言中都是不允许的。,电工教研室,3.,数组类型,VHDL,也是将相同类型数据的有序集合定义为数组。数组定义的基本格式是:,TYPE,数组名,IS,ARRAY,(,范围,) OF,基类型,;,其中的,“,基类型,”,是已经定义过的类型,甚至可以是已经定义过的数组类型。,定义中的,“,范围,”,,既表示数组的大小,也说明用什么方式表示数组元素的下标。通常,,“,范围,”,是用整数表示,也可以用枚举值表示。,电工教研室,“范围”用整数表示时,整数范围可以是,递增,表示,也可以是,递减,表示:,TYPE register IS ARRAY (0 TO 7) OF BIT;,TYPE regist_1 IS ARRAY (7 DOWNTO 1) OF BIT;,TYPE rom IS ARRAY (0 TO 7) OF register;,rom,类型实际上是用,register,基类型定义的二维数组,即,TYPE rom IS ARRAY (0 TO 7, 0 TO 7) OF BIT;,电工教研室,数组的范围还可以用已经定义过的枚举型来表示,如:,TYPE light_delay IS ARRAY (traffic_light) OF INTEGER;,这里的,traffic-light,是已经定义的枚举类型,有三个取值(“,red,、,yellow,、,green”,)。将来定义的类型为,light-delay,的数组,也只会有三个元素。,电工教研室,在,VHDL,中,可以对数组的整体赋值,:,如定义了,regist_1,类型的数组信号:,TYPE regist_1 IS ARRAY (7 DOWNTO 0) OF BIT;,SIGNALarr_1, arr_2 : regist_1;,以下的赋值操作在,VHDL,中都是允许的:,arr_1 = 10110110;,arr_2 =arr_1;,电工教研室,4.,子类型,有时,希望对某种类型数据的范围加以限制,可以通过定义子类型来实现这种限制。,子类型的定义方式如下:,SUBTYPE,子类型名,IS,已定义类型名,范围,;,这里的,“,范围,”,,可以通过,RANGE,短语来表示,:,SUBTYPE decimal IS INTEGER RANGE 0 TO 9;,电工教研室,子类型也可以从一个已定义的枚举类型来定义,例如:,TYPE weekday IS (Sun, Mon, Tue, Wed, Thu, Fri, Sat);,SUBTYPE workday IS weekday RANGE (Mon TO Fri);,子类型的对象可以直接向原来类型的对象赋值,而原类型对象向子类型对象的赋值是要受限制的:只能在子类型的取值范围内来可以进行这种赋值操作。,电工教研室,四、对象,VHDL,把信号、变量、常量和文件统称为对象。信号和变量可以连续赋值,而常量只能在它说明的时候赋值,电工教研室,1.,常量的定义,常量的定义采用如下的格式:,CONSTANT,常量名,:,类型名,:=,常量值,;,例如:,CONSTANT array_size : INTEGER := 16;,CONSTANT gate_delay : TIME := 50ns;,电工教研室,通过常量定义来定义九值逻辑下“与”运算的真值表:,电工教研室,2.,变量的定义,变量的定义采用如下的方式:,VARIABLE,变量名,:,类型名,:=,初值,;,变量的赋值用,“,:=,”,来表示。变量的赋值没有延迟。,电工教研室,3.,信号的定义,信号定义的方式和变量定义类似:,SIGNAL,信号名,:,类型名,:=,初值,;,信号的赋值用,“,=,”,表示。,信号的传送可以规定延迟,也可以不规定延迟。但是,VHDL,规定,如果没有指定信号传送的延迟,信号的传送也会有一个最小延迟,。,信号可以是全局定义的,,PORT,中定义的信号就是对所有的结构体都有效。但是,信号也可以是局部定义的,在结构体内部定义的信号只对这个结构体有效。,电工教研室,五、词法单元,1.,注释,以双连符(,-,)开始直到行末,2.VHDL,中的数字,八进制:以,O,开头,如,O340,二进制:以,B,开头,如,B11100000,十六进制:以,X,开头,如,XE0,O340=B11100000=XE0=224,电工教研室,3.,字符,文字字符表示形式为:单引号括起来的,ASCII,字符,如,A,*,4.,字符串,文字字符串表示形式为:双引号括起来的图形字符序列。如,”,how are you,”,,,”,”,等,5.,位串,位串表示形式为:双引号括起来的扩展的数字序列,数字序列前冠以基数说明符。如:,B”11110101”,长度为八的二进制数,等效,245,电工教研室,6.VHDL,语句中使用的标点符号,分号(;)是一条语句结束的标志,逗号(,)是对象的分隔符,冒号(:)和原点(,.,)的用法在每条语句中给出,要注意不要用错标点,电工教研室,六、表达式与运算符,和其他程序设计语言中的表达式很相似,一个表达式是由运算符把对象名、文字、函数调用及括起来的表达式连接起来的式子。,电工教研室,注意:,在一个,VHDL,表达式中,数据的类型应该相同。,如果不同的数据类型出现在同一个表达式,,VHDL,不会进行自动类型的转换,而只会给出错误信息。,VHDL,支持运算符的重载。 例如可以对不同类型的信号各自进行,AND,运算。,电工教研室,VHDL,运算符,电工教研室,连接运算符,&,是一个比较特殊的运算符,它可以用于任意数组类型,,例如,有以下的定义:,TYPE register IS ARRAY (7 DOWNTO 0) OF BIT;,SIGNAL reg_1, reg_2 : register;,可以进行以下操作:,reg_1 = reg_1(6 DOWNTO 0) ,相当于对于数组进行一次循环左移一位的操作。,电工教研室,七、,VHDL,的库和包,1.VHDL,库的种类和使用,VHDL,的库可以分为三种类型:系统库,,IEEE,库和用户库。,系统库是,VHDL,语言本身预定义的库,包括,STD,库和,WORK,库。,STD,库是系统的标准库,所有系统本身预定义的类型和有关的操作都包含在这个库中。,WORK,库是用户的工作库 。,STD,库和,WORK,库对用户都是透明的,也就是随时都可以使用的,不需要在描述中专门说明。,电工教研室,VHDL,的库和包,IEEE,库是,IEEE,认可的标准库,其中包括对于,STD_LOGIC,类型以及有关函数的定义。,用户库就是,VHDL,软件提供厂商开发的库。应该查询相应软件的说明,知道有哪些库可以使用,以及如何使用。,电工教研室,VHDL,的库和包,2.,程序包,一个,VHDL,库可以包含许多内容,并且往往以程序包(,Package,)的形式组织在一起。,一个程序包由两个部分构成:包的说明部分(,Package Declaration,)和包的主体部分(,Package Body,)。基本的结构如下:,PACKAGE,程序包名,IS,程序包说明部分,END,程序包名,;,PACKAGE BODY,程序包名,IS,程序包主体描述,END,程序包名,;,电工教研室,VHDL,的库和包,程序包的说明部分要对程序包内所定义的所有内容进行说明,可以包括:,常量说明;,信号说明,这里说明的信号可以被所有的结构体使用;,类型说明;,函数或过程说明;,部件(,Component,)说明,等。,程序包的主体部分则是对所包含的函数、过程、结构体进行具体的描述。,电工教研室,VHDL,的库和包,程序包示例。,PACKAGE qit_utilities IS,TYPE qit IS (0, 1, Z, X);,FUNCTION AND (a, b :qit) RETURN qit;,FUNCTION OR (a, b :qit) RETURN qit;,END qit_utilities;,PACKAGE BODY qit_utilities IS,FUNCTION AND (a, b :qit) RETURN qit IS,CONSTANT qit_and_table : qit_2d := (,(0, 0, 0, 0),(0, 1, 1, X),(0, 1, 1, X),(0, X, X, X);,BEGIN,RETURN qit_and_table(a, b);,END AND;,电工教研室,VHDL,的库和包,FUNCTION OR (a, b :qit) RETURN qit IS,CONSTANT qit_or_table : qit_2d := (,(0, 1, 1, X),(1, 1, 1, 1),(1, 1, 1, 1),(X, 1, 1, X);,BEGIN,RETURN qit_or_table(a, b);,END OR;,END qit_utilities;,以上的程序包中定义了一种,4,值逻辑及其操作。在说明部分定义了一种新的信号类型,qit,,也就是一种,4,值逻辑,还说明了两个函数,AND,和,OR,,用来对,4,值逻辑进行,“,与,”“,或,”,运算。在,BODY,部分实现了这两个函数。,电工教研室,VHDL,的库和包,3.,库和程序包的引用,在所有的,VHDL,源程序都要首先声明使用什么,VHDL,库。声明要使用关键字,LIBRARY,,例如,要使用,IEEE,库,就应该作以下的声明:,LIBRARY IEEE;,在声明了使用哪个,VHDL,库以后,还要声明使用这个库中的哪个程序包。,声明使用什么程序包要通过关键字,USE,:,USE,库名,.,程序包名,.ALL;,USE,库名,.,程序包名,.,子程序名,;,电工教研室,VHDL,的库和包,4.,函数和过程,VHDL,中既可以使用函数,也可以使用过程(,Procedure,)。两者统称为,子程序。,函数的定义包括函数说明和函数主体两部分,基本的格式如下:,FUNCTION,函数名,(,参数表,) RETURN,类型,IS,BEGIN,函数体,END,函数名,;,函数体中一定要包括,RETURN,语句。,电工教研室,VHDL,的库和包,过程的定义和函数的定义非常相似:,PROCEDURE,过程名,(,参数表,) IS,BEGIN,过程体,END,过程名,;,过程没有返回值。,函数的参数传递总是一个方向的,也就是传入到函数,而过程的参数传递可以是两个方向的。具体在过程执行中参数如何传递,取决于参数的类别(,IN,、,OUT,、,INOUT,等),而对于函数参数的类别,则只能有一种:,IN,,就是输入到函数。,电工教研室,3.3,并行处理语句,一、并行赋值语句,二、条件赋值语句,电工教研室,并行处理语句,在一个描述中,可以有许多并行处理语句,这些语句的执行是可以同时进行的。,并行语句主要是信号传送语句。传送时可以指定传输延迟。,如果传送时没有指定时延,,VHDL,会对并行处理语句的执行加上一个最小时延,。,电工教研室,并行处理语句,一、并行赋值语句,并行赋值语句是最基本的,VHDL,语句,它的格式是:,信号名,=,表达式,;,信号名,=,表达式,AFTER,延迟时间,;,电工教研室,并行处理语句,例,5.4,半加器的数据流描述。,ENTITY half_adder IS,PORT(a, b: IN BIT;,s, c0: OUT BIT);,END half_adder;,ARCHITECTURE h_adder OF half_adder IS,SIGNAL c, d: BIT;,BEGIN,c= a OR b;,d= a NAND b;,c0= NOT d;,s= c AND d;,END h_adder;,电工教研室,并行处理语句,二、条件赋值语句,条件赋值语句也是一种信号赋值语句,只是赋给信号的值可以根据条件的不同而不同。,条件赋值语句的格式如下:,信号名,=,表达式,1 WHEN,布尔表达式,1 ELSE,表达式,2 WHEN,布尔表达式,2 ELSE,表达式,n WHEN,布尔表达式,n ELSE,表达式,;,电工教研室,并行处理语句,例,5.5,用条件赋值语句描述数据选择器。,ENTITY mux4_to_1 IS,PORT(d0, d1, d2, d3, a, b: IN BIT;,y: OUT BIT);,END mux4_to_1;,ARCHITECTURE sample_1 OF mux4_to_1 IS,BEGIN,y= d0 WHEN a=0 AND b=0 ELSE,d1 WHEN a=0 AND b=1 ELSE,d2 WHEN a=1 AND b=0 ELSE,d3 WHEN a=1 AND b=1 ;,END sample_1;,电工教研室,并行处理语句,选择信号赋值语句,选择信号赋值语句可以根据一个表达式的不同取值,给信号或者信号数组赋以不同的结果。,选择信号赋值语句的格式如下:,WITH,表达式,SELECT,信号名,=,信号值,1 WHEN,表达式值,1,信号值,2 WHEN,表达式值,2,信号值,n WHEN others;,电工教研室,并行处理语句,例,5.6,用信号选择语句描述数据选择器。,ENTITY mux4_to_1 IS,PORT(d0, d1, d2, d3, a, b: IN std_logic;,y: OUT std_logic);,END mux4_to_1;,ARCHITECTURE sample_2 OF mux4_to_1 IS,BEGIN,WITH a&b SELECT,y= d0 WHEN 00,d1 WHEN 01,d2 WHEN 10,d3 WHEN 11,X WHEN OTHERS;,END sample_2;,电工教研室,3.4,顺序描述语句,一、,PROCESS,语句,二、分支语句,三、另外一种分支语句,CASE,语句,四、循环语句,电工教研室,顺序描述语句,在,VHDL,语言中,上述并行信号传输语句主要描述硬件电路或系统中信号的传送过程。同时,,VHDL,还支持顺序描述语句,主要使用于对电路和系统的性能描述。,顺序描述语句的执行就和一般程序设计语言中语句相似,是按照语句的顺序依次执行的。前一条语句的结果会影响到下一条语句的执行。,电工教研室,顺序描述语句,一、,PROCESS,语句,尽管,PROCESS,语句本身是并行描述语句,可以和其他并行语句同时执行,但是,PROCESS,语句内部的语句都是顺序语句。,PROCESS,语句的格式如下:,PROCESS(,信号,1,信号,k),变量说明,(,定义,);,其他说明,;,BEGIN,顺序语句,顺序语句,END PROCESS;,电工教研室,顺序描述语句,PROCESS,语句的执行,在,PROCESS,后面的括弧内,有几个信号名。这些信号总称为“,敏感表,”。,PROCESS,语句的执行就是由敏感表中的信号变化而引起的。,PROCESS,语句一旦开始执行,就要依次执行其中的顺序语句,一直到最后的,END PROCESS,为止。,如果这次执行又引起了敏感表中信号的新的变化,则将再次执行这条,PROCESS,语句,直到敏感表中没有信号发生变化为止。,电工教研室,顺序描述语句,信号和变量赋值语句,在,PROCESS,语句内,也可以使用信号和变量赋值语句。,信号赋值语句的形式仍然是:,信号名,=,表达式,;,这样的信号赋值语句的结果在,PROCESS,内并不是立即起作用的,而是要等,PROCESS,语句执行后(也需要最小时延),才起作用。,变量的赋值语句采用以下形式:,变量名,:=,表达式,;,电工教研室,顺序描述语句,二、分支语句,两分支,IF,语句的格式:,IF,布尔表达式,THEN,顺序语句,ELSE,顺序语句,END IF;,多分支,IF,语句的格式:,IF,布尔表达式,THEN,顺序语句,ELSIF,布尔表达式,THEN,顺序语句,ELSE,顺序语句,END IF;,电工教研室,顺序描述语句,例,5.7,反向器的顺序描述。,ENTITY inverter IS,PORT(x: IN BIT;,y: OUT BIT);,END inverter;,ARCHITECTURE behave OF inverter IS,BEGIN,PROCESS(x),BEGIN,IF (x=0) THEN y=,1;,ELSE y,顺序语句,1,WHEN,值,k =,顺序语句,k,WHEN OTHERS =,顺序语句,k+1,END CASE;,电工教研室,顺序描述语句,例,5.8,四选一数据选择器的顺序描述。,ENTITY mux4_1 IS,PORT(a, b, i0, i1, i2, i3: IN BIT;,y: OUT BIT);,END mux4_1;,ARCHITECTURE behave OF mux4_1 IS,SIGNAL sel bit_vector(1 DOWNTO 0);,BEGIN,sel y y y y=i3;,END CASE;,END PROCESS;,END behave;,电工教研室,顺序描述语句,四、循环语句,VHDL,中提供了两种形式的循环语句:,FOR,循环和,WHILE,循环。,FOR,循环的格式如下:,FOR,变量,IN,范围,LOOP,顺序语句,顺序语句,END LOOP;,其中的,“,变量,”,和,“,范围,”,应该有相同的类型。例如变量是整型,范围可以是一个整数范围。如果变量是枚举型,则,“,范围,”,要限制在枚举类型所定义的取值范围内。,电工教研室,顺序描述语句,WHILE,循环的格式如下:,WHILE,布尔表达式,LOOP,顺序语句,顺序语句,END LOOP;,WHILE,循环中的布尔表达式可以是逻辑表达式或者关系表达式。,在,FOR,循环或者,WHILE,循环中都可以使用,NEXT,语句来结束本次循环,用,EXIT,语句来结束循环,到下一条顺序语句继续执行。它们的格式基本相同:,NEXT WHEN,布尔表达式,;,EXIT WHEN,布尔表达式,;,电工教研室,3.5 VHDL,的描述风格与,VHDL,设计的仿真,电工教研室,一、,VHDL,的描述风格,在,VHDL,中对这一类的描述称为,“性能”描述,(,behavioral description,),性能描述中一定有,PROCESS,语句。,而对前一种(例,5.1,)与非门描述称为,“数据流”描述,(,dataflow description,),这种描述主要是反映数据经过一定的逻辑运算后在输入和输出之间的传送。,VHDL,还有另一种描述,称为,“结构”描述,(,structural description,)。,电工教研室,1.,性能描述,这种描述完全是,从与非门输入和输出的逻辑关系出发,,对与非门性能的一种描述。也就是:“只有输入都是逻辑,1,时,输出才是,0,;否则输出就是,1,。”,电工教研室,重写前面的例,5.1 2,输入与非门的,VHDL,描述,ENTITY,nand2,IS,-,实体描述,PORT,(,i1,i2:IN BIT;,-,输入信号名,o1:OUT BIT);,-,输出信号名,END,nand2;,ARCHITECTURE,delayed,OF,nand2,IS,-,结构体描述,BEGIN,o1=i1 NAND i2 AFTER 5NS;,-,电路描述,END,delayed;,电工教研室,2.,数据流描述,建立在并行信号赋值语句基础上。,当语句中任意一个输入信号的值发生改变时,赋值语句就被激活,从而认为数据从一个设计中“流入”,然后又“流出”,电工教研室,重写例,5.2,二输入与非门的另一种描述。,ARCHITECTURE another OF nand2 IS,BEGIN,PROCESS(i1,i2),BEGIN,IF i1=1 AND i2=1 THEN,o1=0 AFTER 5NS;,ELSE o1,信号名,1, ,接口信号,n =,信号名,n);,采用这样的格式,就不要求,COMPONENT,语句中的信号名和,ENTITY,的,PORT,部分的信号名保持顺序上的一致,而只要它们的对应关系正确就可以了。,电工教研室,使用前面已经定义过的半加器,half_adder,,可以构成全加器。逻辑图如下所示。,按照这个逻辑图,可以写出全加器结构描述。,电工教研室,例,5.9,全加器的结构描述。,ENTITY full_adder IS,PORT(x, y, cin: IN BIT;,sum, carry: OUT BIT);,END full_adder;,ARCHITECTURE struct OF full_adder IS,COMPONENT half_adder,PORT(a, b: IN BIT;,s, c0: OUT BIT);,END COMPONENT;,SIGNAL h1_s, h1_c, h2_c: BIT;,BEGIN,h1: half_adder PORT MAP(x, y, h1_s, h1_c);,h2: half_adder PORT MAP(a=h1_s, b=cin, s=sum, c0=h2_c);,carry=h2_c OR h1_c;,END struct;,参考书,电工教研室,数字逻辑,Thank You,第十三章,VHDL,语言描述数字系统,本章介绍用,VHDL,描述硬件电路的一些基本手段和基本方法。,13.1 VHDL,语言的基本结构,VHDL,语言是美国国防部在,20,世纪,80,年代初为实现其高速集成电路计划(,VHSIC,)而提出的一种,HDL,,其含义为超高速集成电路硬件描述语言。,VHDL,语言的基本结构是对任何电路在用,VHDL,语言描述时,都应有两部分组成:实体和结构体。实体描述电路的输入、输出关系;结构体描述电路的功能。,VHDL,语言描述与逻辑电路图的对应关系,C=a,b,实体,结构体,a,b,c,13.1 VHDL,语言的基本结构,13.1.1,实体描述,实体在电路中主要是说明该电路的输入、输出关系,更具体地说就是用来定义实体与外部的连接关系以及需传送给实体的参数。,实体描述的一般格式为,ENTITY,实体名,IS, GENERIC,(类属表说明);, PORT,(端口表说明);,END ENTITY,实体名,注意:, ,中的部分为可缺省内容,13.1 VHDL,语言的基本结构,(,1,)类属表说明用以将信息参数传递到实体。最常用的信息是器件的上升沿到下降沿的延迟时间、负载电容和电阻、驱动能力以及功耗等。,(,2,)端口表指明实体的输入、输出信号及其模式。端口模式共有五种,如下所示。,方向定义,含义,IN,输入,OUT,输出,INOUT,双向,BUFFER,输出,LINKAGE,不指定方向,无论哪个方向都可,13.1 VHDL,语言的基本结构,13.1.2,结构体描述,结构体具体地描述了设计实体的逻辑功能或内部电路结构关系,从而建立设计实体输入与输出之间的关系。结构体功能可以用三种方式进行描述,即行为描述、数据流描述、结构描述,另外,还可以采用混合描述。,结构体的格式为,ARCHITECTURE,结构体名,OF,实体名,IS,定义语句,内部信号,常数,数据类型,函数等的定义;,BEGIN,并行处理语句,;,END ARCHITECTURE ,结构体名,;,13.1 VHDL,语言的基本结构,说明:,(,1,) 结构体名称的命令。结构体的名称是,对本结构的命名,它是该结构体的唯一名称,。“,OF”,后面紧跟的实体名表明了该实体所对应的是,哪一个实体。用 “,IS”,来结束结构体的命名。,(,2,)定义语句。位于,“,ARCHITECTURE,”,和,“,BEGIN,”,之间。用于对结构体内部所使用的信号常数、数据类,型和函数等进行定义。,(,3,)并行处理语句。处于,“,BEGIN,”,和,“,END,”,之间。,具体描述了结构体的行为及其连接关系。,13.1 VHDL,语言的基本结构,1.结构体的行为描述法,结构体的行为描述表示输入与输出间转换的关系,是对设计实体按算法的路径来描述。行为描述在,ENA,工程中称为高层次描述或高级描述。,看个例题吧!,例:,如图所示的半加器,其功,能真值表已经给出,写出它的,行为描述。,半加器,a,b,c,s,13.1 VHDL,语言的基本结构,半加器真值表,:,a,b,c,s,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,解:,ARCHITECTURE alg_ha OF
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!