许钢2020/1/24《VHDL语言与数字逻辑电路设计》1VHDL语言与数字逻辑电路设计主讲:许钢2010.9许钢2020/1/24《VHDL语言与数字逻辑电路设计》2第4讲数据对象的属性VHDL语言有属性预定义功能,该功能有许多重要的应用,例如检测出时钟边沿、完成定时检查、获得未约束的数据类型范围等。通过预定义属性描述语句,可以得到可调的有关值、功能、类型和范围(区间)。任何时刻,数据对象只有一个值,但是可以具有多种属性。预定义的属性类型有以下几种:数值类;函数类;信号类;数据类;数据区间类和用户自定义类属性。以下只介绍可以被综合器支持的属性!许钢2020/1/24《VHDL语言与数字逻辑电路设计》3第4讲数据对象的属性数值类属性用来得到数组、块或者一般数据的有关值。(返回一个值。)1.一般数据的数值属性(T代表某一对象:信号、变量):T’Left——得到数据类或其子类区间的最左端的值;T’Right——得到数据类或其子类区间的最右端的值;T’High——得到数据类或其子类区间的上限值;T’Low——得到数据类或其子类区间的下限值;2.数组的数值属性(T代表某一对象:信号、变量):T’Length——得到一维数组的长度值;4.1数值类属性许钢2020/1/24《VHDL语言与数字逻辑电路设计》4第4讲数据对象的属性T’RangeT’Reverse_Range属性Range将返回对象T矢量或数组的下标范围;而属性Reverse_Range返回对象T矢量或数组的次序颠倒的下标范围。4.2范围类属性许钢2020/1/24《VHDL语言与数字逻辑电路设计》5第4讲数据对象的属性TYPEBIT_VECTORISARRAY(INTEGERrange)ofBIT;--Anunconstrainedarraydefinition…………VARIABLEMY_VECTOR:BIT_VECTOR(5downto0);AttributeExpressionValueMY_VECTOR’left5MY_VECTOR’right0MY_VECTOR’high5MY_VECTOR’low0MY_VECTOR’length6MY_VECTOR’range(5downto0)MY_VECTOR’reverse_range(0to5)例1:许钢2020/1/24《VHDL语言与数字逻辑电路设计》6第4讲数据对象的属性TYPEBIT_VECTORISARRAY(INTEGERrange)ofBIT;--Anunconstrainedarraydefinition…………VARIABLEMY_VECTOR:BIT_VECTOR(0to5);AttributeExpressionValueMY_VECTOR’left0MY_VECTOR’right5MY_VECTOR’high5MY_VECTOR’low0MY_VECTOR’length6MY_VECTOR’range(0to5)MY_VECTOR’reverse_range(5downto0)例2:许钢2020/1/24《VHDL语言与数字逻辑电路设计》7第4讲数据对象的属性Forascendingranges,thefollowingistrue:MY_VECTOR’LEFT=MY_VECTOR’LOWMY_VECTOR’RIGHT=MY_VECTOR’HIGHFordescendingranges,theoppositeistrue:MY_VECTOR’LEFT=MY_VECTOR’HIGHMY_VECTOR’RIGHT=MY_VECTOR’LOW结论:许钢2020/1/24《VHDL语言与数字逻辑电路设计》8第4讲数据对象的属性返回有关信号(Signal)行为功能的信息。(S代表信号):S’Event对信号S所发生的事件进行检测。信号S的事件指信号的电平(值)发生了变化。如:1-0或0-1。若信号S有事件发生,则返回TRUE,否则返回FALSE。只能用于IF语句和WAIT语句中。该属性常用于对时钟信号边沿的检测。例:IF(clk=’1’)and(clk’Event)THEN...;--检测时钟clk的上升沿IF(clk=’0’)and(clk’Event)THEN...;--检测时钟clk的下降沿4.3信号类属性许钢2020/1/24《VHDL语言与数字逻辑电路设计》9第4讲数据对象的属性返回有关信号(Signal)行为功能的信息。(S代表信号):S'Stable[(time)]该属性可以建立一个布尔信号,在括号内的时间表达式time所说明的时间内,若信号S没有发生事件(即:信号保持稳定),则该属性可以得到True”的结果。4.3信号类属性许钢2020/1/24《VHDL语言与数字逻辑电路设计》10第4讲数据对象的属性1.行为描述:只注重算法、功能,不涉及到硬件结构。2.数据流描述(寄存器传输级——RTL级描述):与硬件结构联系紧密,适合于底层设计。3.结构描述:注重各功能模块之间的联系。适合于大系统的模块化分解,以及利用前人的设计成果,资源共享,避免重复设计。4.4VHDL描述方式许钢2020/1/24《VHDL语言与数字逻辑电路设计》11第4讲数据对象的属性1.行为描述:行为级描述的特点是信号被分为控制信号和被控制信号,当控制信号发生某一行为变化时,被控信号也随之变化。在仅知道控制信号与被控信号之间的控制关系,而不知道具体结构时,一般采用这种描述方法。设计者在使用行为级描述时应尽量将其限制在一个较小的模块内。目前大多数情况下使用的行为级描述是用来描述一个组合逻辑的功能,中间不能包含对寄存器信息的描述,这样有利于综合工具了解设计者的意图。4.4VHDL描述方式许钢2020/1/24《VHDL语言与数字逻辑电路设计》12第4讲数据对象的属性1.行为描述:例:SignalSum:std_logic_vector(15downto0);SignalA,B:std_logic_vector(15downto0);Sum=A+B;这是一个行为级的VHDL描述。它描述的是一个16位的加法器,在这个描述中设计者并没有指定它的构成方式。因此综合器在综合时根据设计者施加的限制和具体的工艺库中提供的单元来决定这个加法器的具体结构;这个描述最后的实现形式可能是一个串行进位加法器、8位一组的组超前进位加法器、4位一组的组超前进位加法器或其他一些可能的结构。4.4VHDL描述方式许钢2020/1/24《VHDL语言与数字逻辑电路设计》13第4讲数据对象的属性2.数据流描述(寄存器传输级——RTL级描述):数据流描述,顾名思义是指对数据传递的直接描述。在对信号与数据之间的逻辑关系与结构非常熟悉情况下,一般可以采用数据流描述方法。数据流描述主要适用于算法描述,尤其在设计有关通信、数字或图像处理类电路时会大量用到。比如:在设计芯片中描述专门的快速傅里叶变换FFT电路时使用数据流描述就非常有效;在设计图像处理芯片时描述离散余弦变换DCT也会使用数据流描述。4.4VHDL描述方式许钢2020/1/24《VHDL语言与数字逻辑电路设计》14第4讲数据对象的属性3.结构描述:结构描述用于描述元件之间的连接关系,类似于画逻辑图中的用信号线将各个元件连接起来。结构描述方法一般用在主模块与子模块的调用上,所以这种描述方法支持层次化(hierarchy)的设计。4.4VHDL描述方式许钢2020/1/24《VHDL语言与数字逻辑电路设计》15第4讲数据对象的属性例:带使能端的半加器:输入信号A、B和enable,输出信号C。当enalbe为高电平时,输出信号C等于输入A和B的和;当enable为低电平时,输出C保持低电平。4.4VHDL描述方式采用行为描述:...IFenable=’1’ThenC=A+B;ElseC=’0’;EndIF;...上面的一段程序描述的是输出C的算法,不包含任何与电路实现的有关信息,具体采用何种电路来完成输出C的逻辑由综合器和具体的工艺库来决定,这种描述最接近其他高级语言的描述风格,最容易被设计者理解和使用。许钢2020/1/24《VHDL语言与数字逻辑电路设计》16第4讲数据对象的属性例:带使能端的半加器:输入信号A、B和enable,输出信号C。当enalbe为高电平时,输出信号C等于输入A和B的和;当enable为低电平时,输出C保持低电平。4.4VHDL描述方式采用数据流描述:...C=(enableANDNOT(A)ANDB)OR(enableANDAANDNOT(B));...它的描述较行为级描述更接近于具体的电路,抽象层次较行为描述有所降低。许钢2020/1/24《VHDL语言与数字逻辑电路设计》17第4讲数据对象的属性例:带使能端的半加器:输入信号A、B和enable,输出信号C。当enalbe为高电平时,输出信号C等于输入A和B的和;当enable为低电平时,输出C保持低电平。4.4VHDL描述方式采用结构描述:...U1:XORPortMap(A,B,temp);U2:AND2PortMap(temp,enable,C);...上面的VHDL描述就具体规定了电路的实现形式,它采用一个两输入的异或门和一个两输入的与门来实现。许钢2020/1/24《VHDL语言与数字逻辑电路设计》18第4讲数据对象的属性第四讲(完)