硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句2_第1页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句2_第2页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句2_第3页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句2_第4页
硬件描述语言与数字逻辑电路设计VHDL:第5章 VHDL语言的主要描述语句2_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、 2)数组的数值属性 数组的数值属性只有一个,即LENGTH。在给定数组类型后,用该属性将得到一个数组的长度值。该属性可用于任何标量类数组和多维的标量类区间的数组。 例524 PROCESS(a) TYPE bit4 IS ARRAY(0 TO 3)of BIT; TYPE bit_strange IS ARRAY(10 TO 20) OF BIT; VARIABLE 1enl,1en2:INTEGER; BEGIN 1enl:= bit4LENGTH; - - len14 1en2:= bit_strange LENGTH; - - 1en2 = 11 END PROCESS;VHDL5(2

2、)1 3)块的数值属性 块的数据属性有两种 STRUCTURE BEHAVIOR 1这两种属性用于块(BLOCK)和构造体,通过它们可以得到块和构造体信息。 2如果块有标号说明,或者构造体有构造体名说明,而且在块和构造体中不存在COMPONENT语句,那么用属性BEHAVIOR将得到“TRUE”的信息。 如果在块和构造体中只有COMPONENT语句或被动进程,那么用属性STRUCTUR将得到“TRUE”的信息。 VHDL5(2)22函数类属性 所谓函数类属性是指属性以函数的形式,让设计人员得到有关数据类型、数组、信号的某些信息。 函数类属性有以下3种: 数据类型属性函数 数组属性函数 信号属性

3、函数 1)数据类型属性函数 用数据类型属性函数可以得到有关数据类型的各种信息。 数据类型属性函数可以有以下6种属性函数: POS(x) 得到输入x值的位置序号; VAL(x) 得到输入位置序号x的值; SUCC(x) 得到输入x值的下一个值; succeeding PRED(x) 得到输入x值的前一个值; predict LEFTOF(x) 得到邻接输入x值左边的值; RIGHTOF(x) 得到邻接输入x值右边的值。VHDL5(2)3例528 PACKAGE ohms_law IS TYPE current IS RANGE 0 TO 1000000 UNITS A; mA = 1000A;

4、A = 1000mA; END UNITS; TYPE voltage IS RANGE 0 TO 1000000 UNITS V; mV = 1000V; V = 1000 mV; END UNITS TYPE resistance IS RANGE 0 TO 1000000 UNITS ohm; kohm = 1000ohm; mohm = 1000kohm; VHDL5(2)4 mohm = 1000kohm; END UNITS END ohms_law; USE workohm3_1awALL; ENTITY calc_resistance IS PORT(i:IN current;

5、 e: IN voltage; r:OUT resistance); END calc_resistance; ARCHITECTURE behav OF calc_resistance IS BEGIN ohm_proc:PROCESS(i,e) VARIABLE covi,cove,int_r: INTEGER; BEGIN convi := currentpos(i); 以微安为单位的电流值 conve := voltagepos(e); 以微伏为单位的电压值 int_r := conveconvi; 以欧姆为单位的电阻值 r = resistanceVAL(int_r); END PR

6、OCESS; END behav;VHDL5(2)52)数组属性函数 利用数组属性函数可得到数组的区间。在对数组的每一个元素进行操作时,必须知数组的区间。数组属性函数可分以下4种: LEFT(n) 得到索引号为n的区间的左端位置号。在这里n实际上是多维数组中所定义的多维区间的序号。当n缺省时,就代表对一维区间进行操作。 RIGHT(n) 得到索引号为n的区间的右端位置号。 HIGH(n) 得到索引号为n的区间的高端位置号。 LOW(n) 得到索引号为n的区间的低端位置号。 VHDL5(2)6 上述属性与数值数据类属性一样,在递增区间和递减区间存在着不同的对应关系。 在递增区间,存在如下关系:

7、LEFTlOW 数组LEFT数组LOW RIGHTHIGHT 数组RIGHT数组HIGHT 在递减区间,存在如下关系: LEFT = HIGHT RIGHT = LOWVHDL5(2)7 信号属性函数用来得到信号的行为信息。例如,信号的值是否有变化;从最后一次变化到现在经过了多长时间;信号变化前的值为多少等。信号属性函数共有5种,它们是:3)信号属性函数VHDL5(2)8 sEVENT - -如果在当前一个相当小的时间间隔内,事件发生了,那么,函数将返回一个为“真”的布尔量,否则就返回 “假”。 sACTIVE - -如果在当前一个相当小的时间间隔内,信号发生了改变,那么,函数将返回一个为“真

8、”的布尔量;否则就返回 “假”。 sLAST_EVENT - -该属性函数将返回一个时间值,即从信号前一个事件发生到现在所经过的时间。 sLAST_VALUE - -该属性函数将返回一个值,即该值是信号最后一次改变以前的值。 sLAST_ACTIVE - -该属性函数返回一个时间值,即从信号前一次改变到现在的时间。 VHDL5(2)9 属性EVENT 通常用于确定时钟信号的边沿,用它可以检查信号是否处于某一个特殊值,以及信号是否刚好已发生变化。下面就是一个用属性EVENT检出D触发器时钟脉冲上升沿的描述实例。 (1)属性EVENT和LAST_VALUEVHDL5(2)10例531 LIBRAR

9、Y IEEE USE IEEESTD_LOGIC_1164ALL, ENTITY dff IS PORT(d,clk:IN STD_LOGIC, q:OUTSTD_LOGIC); END dff; ARCHITECTURE dff OF dff IS BEGIN PROCESS(clk) BEGIN IF(clk=1)AND(clkEVENT)THEN q=d; END IF; END PROCESS; END dff;VHDL5(2)11 在上例中,如果原来的电平为“0”,那么逻辑是正确的。但是,如果原来的电平是“X” (不定状态),那么上例的描述同样也被认为出现了上升沿,显然这种情况是错误

10、的。为了避免出现这种逻辑错误,最好使用属性,LAST_VALUE。这样上例中的IF语句可以作如下改写; IF(clk=1)AND(clkEVENT) AND(clklAST_VALUE=0)THEN q=d; END IF;VHDL5(2)12 信号类属性用于产生一种特别的信号,这个特别的信号是以所加属性的信号为基础而形成的。信号类属性有4种: 3信号类属性VHDL5(2)13sDELAYED(time) 该属性将产生一个延时的信号,其信号类型与该属性所加的信号相同,即以属性所加的信号为参考信号,经括号内时间表达式所确定的时间延时后所得的延迟信号。sSTABLE(time) 该属性可建立一个布

11、尔信号,在括号内的时间表达式所说明的时间内,若参考信号没有发生事件,则该属性可以得到“真”的结果。sQUIET(time) 该属性可建立一个布尔信号,在括号内的时间表达式所说明的时间内,若参考信号没有发生转换或其它事件,则该属性可得到“真”的结果sTRANSACTION 该属性可以建立一个BIT类型的信号,当属性所加的信号发生转换或事件时,其值都将发生改变。VHDL5(2)14 上述的信号类属性不能用于子程序中,否则程序在编译时会出现编译错误信息。 (1)属性DELAYED 属性DELAYED可建立一个所加信号的延迟版本。为实现同样的功能,也可以用传送延时赋值语句(Transpont dela

12、y)来实现。两者不同的是,后者要求编程人员用传送延时赋值的方法记入程序中,而且带有传送延时赋值的信号是一个新的信号,它必须在程序中加以说明。VHDL5(2)15例533 LIBRARY IEEE; USE IEEESTD_LOGIC_1164ALL; ENTITY and2 1S GENERIC(a_ipd,b_ipd,c_opd:TIME); PORT(a,b:IN STD_LOGIC; c:OUT STD_LOGIC); END and2; ARCHITECTURE int_signals OF and2 1S SIGNAL inta,intb:STD_LOGIC; BEGIN inta

13、TRANSPORT a AFTER a_ipd; intb TRANSPORT b AFTER b_ipd; c inta AND intb AFTER c_opd; END int_signals; ARCHITECTURE attr OF and2 1S BEGIN c aDELAYED(a_ipd) AND bDELAYED(b_ipd)AFTER c_opd; END attr; VHDL5(2)16 属性STABLE用来确定信号对应的有效电平,即它可以在一个指定的时间间隔内,确定信号是否正好发生改变或者没有发生改变。用它可以触发其它的进程。(2)属性STABLEVHDL5(2)17例

14、535 一个使用属性STABLE的例子。 LIBRARY IEEE; USE IEEESTD_LOGlC_1164ALL; ENTITY pulse_gen IS PROT(a:IN STD_LOGIC; b:OUT STD_LOGIC); END pulse_gen; ARCHITECTURE pulse_gen OF pulse_gen IS BEGIN b = aSTABLE(10ns); END pulse_gen;VHDL5(2)18 如图53所示,当波形a加到本模块时,即可得到输出波形b。图中的波形说明,每次信号a电平有一次改变,信号b的电平将从高电平变成低电子(即由“真”变为“假

15、”),持续时间为10ns(该值由属性括号内的时间值确定)。 信号a在10ns和30ns处各有一次改变,因而对应的信号b在10ns和30ns处各有10ns的低电平时间。在55ns处和60ns处信号a又各有一次改变。但是,由于改变的间隔小于10ns,因此信号b从55ns处开始到70ns处结束,将变为低电平。 如果属性STABLE后跟括号中的时间值被说明为0ns或者未加说明,那么当信号a发生改变时,输出信号b在对应的时间位将产生宽度的低电平,如图54所示。 该属性与EVENT一样也可以检出信号的上升沿。VHDL5(2)19 利用该属性可以得到数据类型的一个值。它仅仅是一种类型属性,而且必需使用数值类

16、或函数类属性的值来表示。 例如:tBASE 用该属性可以得到数据t的类型或子类型。4数据类型类属性VHDL5(2)20例537 数据类型类属性的使用。do_nothing:PROCESS(x) TYPE color IS(red,blue,green,yellow,brown,black); SUBTYPE color_gun IS color RANGE red TO green;VARIABLE a:color; BEGIN a:= color_gunBASERIGHT; - - a = black a:= colorBASELEFT; - - a = red a:= co1orBASES

17、UCC(green) - - a = yellowEND PROCESS do_nothing;VHDL5(2)215数据区间类属性 在VHDL语言中有两类数据区间类属性,这两类属性仅用于受约束的数组类型数据并且可返回所选择输入参数的索引区间。这两个属性是: RANGE(n)将返回一个由参数n值所指出的第n个数据区间。 REVERSL_RANGE(n)将返回一个次序颠倒的数据区间。VHDL5(2)22例538属性RANGE和REVERSE循环语句的循环次数的应用。FUNCTION vector_to_int(vect:STD_LOGIC_VECTOR) RETURN INTEGER IS VA

18、RIABLE result:INTEGER:= 0;BEGIN FOR i IN vectRANGE LOOP result:= result * 2; IF vect(i)lTHEN result:= result + 1; END IF; END LOOP;RETURN result;END vector_to_int;VHDL5(2)23 除了上面在VHDL语言中所定义的属性以外,还可以有由用户自定义的属性,用户自定义属性的书写格式为: ATTRIBUTE属性名:数据子类型名; ATTRIBUTE属性名 OF 目标名: 目标集合 IS 公式; 在对要使用的属性进行说明以后,接着就可以对数

19、据类型、信号、变量、实体、构造体、配置、子程序、元件、标号进行具体的描述。例如:6用户自定义的属性VHDL5(2)24 在对要使用的属性进行说明以后,接着就可以对数据类型、信号、变量、实体、构造体、配置、子程序、元件、标号进行具体的描述。例如: ATTRIBUTE max_area:REAL; ATTRIBUTE max_area OF fifo:ENTITY IS 150.0; ATTRIBUTE capacitance:cap; ATTRIBUTE capacitance OF clk,reset:SIGNAL IS 20 pF; 用户自定义属性的值在仿真中是不能改变的,也不能用于逻辑综合

20、。用户自定的属性主要用于从VHDL到逻辑综合及ASIC的设计工具、动态解析工具的数据的过渡。VHDL5(2)25 GENERATE语句用来产生多个相同的结构,它有FOR-GENERATE和IF-GENERATE两种使用形式,如下所示: 1. 标号:FOR 变量 IN 不连续区间 GENERATE ; END GENERATE 标号名; 2. 标号:IF 条件 GENERATE ; END GENERATE 标号名; 533 GENERATE语句VHDL5(2)26 FORGENERATE和FORLOOP的语句不同,在FORGENERATE结构中所列举的是并发处理语句。因此,在结构内部的语句不是按书写顺序执行的,而是并发执行的。这样,结构中就不能使用EXIT语句和NEXT语句。 IFGENERATE语句在条件为“真”时才执行结构内部的语句,语句同样是并发处理的。与IF语句不同的是该结构中没有ELSE项。 该语句的典型应用场合是生成存贮器阵列和寄存器阵列等。 例5-39、5-40、5-41VHDL5(2)27 图是一个由4个D触发器组成的移位寄存器的原理框图,例5-

温馨提示

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

最新文档

评论

0/150

提交评论