您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 08可编程逻辑电路技术VHDL的预定义属性1hr
重庆大学光电工程学院可编程逻辑电路技术陈李CL2009@cqu.edu.cn第8章VHDL设计实例主要内容8.1值类属性8.2函数类属性8.3信号类属性8.4数据类型类属性8.5数据范围类属性8.6自定义属性值类属性主要用于返回常用数据类型、数组、块的有关值。如返回数组长度、数组类型的上下边界等。可分为三个子类:常用数据类型的值类属性数组的值类属性块的值类属性8.1值类属性1、常用数据类型的值类属性这类属性有四种:(1)’left:返回数据类型或子类型最左边的值;(2)’right:返回数据类型或子类型最右边的值;(3)’high:返回一个数据类型或子类型最大值;(4)’low:返回一个数据类型或子类型最小值;属性用字符“′”来指定属性,后面跟属性名,“′”前面是所附属性的项目,这种定义格式对所有的属性是通用的。8.1值类属性注意:对于枚举类型,属性’left的值和’low的值相同,属性’right的值和’high的值相同;对于用保留字to定义的整数类型,属性’left的值和’low的值相同,属性’right的值和’high的值相同;对于用保留字downto定义的整数类型,属性’right的值和’low的值相同,属性’left的值和’high的值相同;8.1值类属性如:typenumberisintegerrange0to9;typeweekis(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);typewordisarray(15downto0)ofstd_logic;number’left=0number’right=9number’high=9number’low=0week’left=Mondayweek’right=Sundayweek’high=Sundayweek’low=Mondayword’left=15word’right=0word’high=15word’low=08.1值类属性2.数组的值类属性只有一种属性’length:返回限定性数组的长度值,即元素的个数。该属性可用于任何标量的一维数组和多维数组。8.1值类属性定义下列数据类型:typenumberisintegerrange0to9;typeweekis(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);typewordisarray(15downto0)ofstd_logic;则有:number’length=10work’length=7word’length=163.块的值类属性主要用来返回块和结构体建模的信息有两种属性(1)’behavior:如果块有标号说明或者结构体有结构体名,并且它们中不含有元件例化语句,则返回布尔值“true”。(2)’structure:如果块和结构体中只含有元件例化语句或进程语句,将返回布尔值“true”。8.1值类属性对于不含有任何元件例化语句的块语句或是结构体,则属性’behavior的返回值为“true”,而属性’structure返回值“false”;对于只含有元件例化语句或进程语句的块语句或是结构体,则属性’behavior的返回值为“false”,而属性’structure返回值“true”;对于以混合描述方式描述的块语句或是结构体来说,属性’behavior和’structure的返回值都为“false”。8.1值类属性例:用3个二输入与门来实现四输入与门的VHDL描述。Entityand4isport(a,b,c,d:inbit;q:outbit);Endand4;Architectturestructuralofand4iscomponentand_gateport(a,b:inbit;c:outbit);endcomponent;signalq1,q2:bit;BeginU1:and_gateportmap(a,b,q1);U2:and_gateportmap(c,d,q2);U3:and_gateportmap(q1,q2,q);Endstructural;对结构体structural则有如下属性:(1)structural’behavior的返回值为“false”;(2)structural’structure的返回值为“true”。8.1值类属性第8章VHDL设计实例主要内容8.1值类属性8.2函数类属性8.3信号类属性8.4数据类型类属性8.5数据范围类属性8.6自定义属性是指属性以函数的形式为设计人员返回有关数据类型、数组或是信号的信息。执行时,属性根据输入的自变量值去执行函数,然后返回一个数据类型、数组或是信号相关信息的值。可分为三个子类:数据类型属性函数数组属性函数信号属性函数8.2函数类属性1.数据类型属性函数用来得到数据类型的各种相关信息,能够返回数据类型的位置信息或是左右邻值等。共有6种:(1)’pos(数据值):返回数据值的位置序号(2)’val(位置序号):返回该位置序号的值(3)’succ(数据值):返回该数据值的下一个值(4)’pred(数据值):返回该数据值的前一个值(5)’leftof(数据值):返回该数据值左边的值(6)’rightof(数据值):返回该数据值右边的值8.2函数类属性如:Typecurrentisrange0to1000000UnitsuA;mA=1000uA;A=1000mA;Endunits;Typeweekis(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);则有:Current’pos(10uA)=10Current’val(10)=10uACurrent’succ(7uA)=8uACurrent’pred(7uA)=6uACurrent’leftof(10uA)=9uACurrent’rightof(10uA)=11uAweek’pos(Tuesday)=1week’val(3)=Thursdayweek’succ(Thursday)=Fridayweek’pred(Thursday)=Wednesdayweek’leftof(Friday)=Thursdayweek’rightof(Friday)=Saturday8.2函数类属性2.数组属性函数有4种:(1)’left(n):得到索引号为n的区间的左端位置号;(2)’right(n):得到索引号为n的区间的右端位置号;(3)’high(n):得到索引号为n的区间的高端位置号;(4)’low(n):得到索引号为n的区间的低端位置号;其中,索引号n就是多维数组中所定义的多维区间的序号,缺省为n=1。当索引号取缺省值时,数组属性函数就代表对一维区间进行操作。8.2函数类属性typeram_dataisarray(0to511)ofinteger;…….foriinram_data1’lowtoram_data1’highloop8.2函数类属性3.信号属性函数主要有以下5种:(1)signal_name’event:该函数返回值为“true”或“false”。在当前相当小的时间间隔内有信号事件发生,返回值为“true”;反之,则返回“false”。(2)signal_name’active:如果在当前相当小的时间间隔内信号活跃,则函数的返回值为“true”;如果不活跃,则返回“false”。8.2函数类属性注:“信号活跃”和“事件发生”“信号活跃”定义为信号的任何变化,例如信号从‘0’变到‘1’是一个信号活跃,而信号从‘0’到‘0’也是一个信号活跃。“事件发生”定义为信号的值发生变化,如信号从‘0’变到‘0’不是一个事件,原因是信号值没有变。不难看出:所有的事件发生都是信号活跃,但是所有的信号活跃不一定是事件发生。8.2函数类属性(3)signal_name’last_event:返回该信号从前一个事件发生到现在时刻所经历的时间值。(4)signal_name’last_active:返回该信号从前一次信号活跃到现在时刻所经历的时间值。(5)signal_name’last_value:返回该信号在最近一个事件发生以前的值。信号属性函数’event应用十分广泛,对于确定信号的边沿十分有效。如果一个信号有事件发生,则表明有跳变沿产生;再根据信号的值就可以确定是上升沿跳变还是下降沿跳变。8.2函数类属性例:D触发器的源代码Libraryieee;Useieee.std_logic_1164.all;Entitydffisport(d:instd_logic;clk:instd_logic;q:outstd_logic);Enddff;ArchitecturertlofdffisBeginprocess(clk)beginif(clk’eventandclk=‘1’)thenq=d;endif;endprocess;Endrtl;8.2函数类属性上例中在检测上升沿时,当时钟clk原来的值为“0”时,那么逻辑上是正确的;当时钟clk原来的值不为“0”时,虽然出现了上升沿,那么逻辑上是不正确的。可以用’last_value将上述程序作一下改进:将if(clk’eventandclk=‘1’)then改为:if(clk’eventandclk=‘1’and(clk’last_value=‘0’)then这样就保证了时钟信号clk是从‘0’变到‘1’的,确定了上升沿触发。8.2函数类属性第8章VHDL设计实例主要内容8.1值类属性8.2函数类属性8.3信号类属性8.4数据类型类属性8.5数据范围类属性8.6自定义属性是根据一个信号去建立一个新信号,建立的新信号是以所加属性的信号为基础而形成的,因此这个信号带有了所加属性的有关信息。用信号类属性得到的有关信息类似于某些函数类属性所得到的信息,所不同的是信号类属性可以用于正常信号能用到的任何场合,包括敏感表中。有以下四种:(1)信号’delayed[(t)]:建立一个与所加属性的信号同类型的信号,该信号就是以所加属性的信号为参考信号,经过延迟时间t后得到.8.3信号类属性(2)信号’stable[(t)]:当所加属性的信号在时间t内没有事件发生,则返回“true”的布尔信号;反之,则返回“false”的布尔信号。(3)信号’quiet[(t)]:当所加属性的信号在时间t内信号不活跃时,则返回一个值为“true”的布尔信号;反之,则返回“false”的布尔信号。(4)信号’transaction:该属性可以建立一个bit类型的信号,当所加属性的信号活跃时,信号将对前值进行翻转。8.3信号类属性1、信号’delayed[(t)]建立一个与所加属性的信号同类型的信号,该信号就是以所加属性的信号为参考信号,经过延迟时间t后得到.8.3信号类属性例:四输入与门的源代码,由三个二输入与门构成.Libraryieee;Useieee.std_logic_1164.all;Entityand4isport(a,b,c,d:instd_logic;q:outstd_logic);Endand4;Architecturebehaveofand4issignalq1,q2:std_logic;Beginq1=aandbafter5ns;q2=canddafter5ns;q=q1andq2after7ns;Endbehave;定义了两个信号q1和q2,用它们来传送经过与门后的延迟信号。8.3信号类属性如果使用属性’delayed[(t)],就可以不用定义新的信号q1和q2,避免了更多信号的定义和源代码的书写。Architecturebehaveofand4isBeginq=((aandb)’delayed(5ns)and(candd)’delayed(6ns))afte
本文标题:08可编程逻辑电路技术VHDL的预定义属性1hr
链接地址:https://www.777doc.com/doc-50747 .html