VHDL讲义第八章VHDL语言属性描述.ppt

上传人:牧羊曲112 文档编号:6522940 上传时间:2023-11-08 格式:PPT 页数:29 大小:375.32KB
返回 下载 相关 举报
VHDL讲义第八章VHDL语言属性描述.ppt_第1页
第1页 / 共29页
VHDL讲义第八章VHDL语言属性描述.ppt_第2页
第2页 / 共29页
VHDL讲义第八章VHDL语言属性描述.ppt_第3页
第3页 / 共29页
VHDL讲义第八章VHDL语言属性描述.ppt_第4页
第4页 / 共29页
VHDL讲义第八章VHDL语言属性描述.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《VHDL讲义第八章VHDL语言属性描述.ppt》由会员分享,可在线阅读,更多相关《VHDL讲义第八章VHDL语言属性描述.ppt(29页珍藏版)》请在三一办公上搜索。

1、第八章 VHDL语言属性描述 属性是指关于设计实体、结构体、类型、信号等项目的指定特性。属性提供了描述特定对象的多个侧面值的手段信号属性在检测信号变化和建立详细的时域模型时非常重要为什么要有属性:电路元件需要时钟信号同步需要控制信号控制整个电路的行为(进程的执行)时钟信号与控制信号的使用多种多样利用属性可以使VHDL源代码更加简明扼要,便于理解,属性,VHDL提供5类预定义属性:1、数值类属性2、函数类属性3、信号类属性4、数据类型类属性5、数组范围类属性,8.1.1 常用数据的数值属性 主要用于返回常用数据类型、数组或是块的有关值:例如:返回数组长度、数据类型的上下界等。常用数据类型的数值类

2、属性:left:返回一个数据类型或子类型最左边的值。right:返回一个数据类型或子类型最右边的值。high:返回一个数据类型或子类型的最大值。low:返回一个数据类型或子类型的最小值。,8.1 数值类属性,属性规则:上下限:对数值取最大、最小值;对枚举类型数据下限取左边界值,上限取右边界值;对数组取数组区间的最大最小值。左右边界:按书写顺序取左边或右边值。例:SUBTYPE nat IS Natural Range 0 to 255;X:=natHIGH;-x等于255X:=natLOW;-x等于0X:=natRIGHT;-x等于255X:=natLEFT;-x等于0,8.1 数值类属性,P

3、ROCESS(a)TYPE bit16 IS Array(15 downto 0)OF std_logic;VARIABLE lef,rig,up,low:NATURAL;BEGINlef:=bit16LEFT;-15rig:=bit16RIGHT;-0up:=bit16HIGH;-15low:=bit16LOW;-0END PROCESS;PROCESS(a)TYPE bit16 IS Array(0 to 15)OF std_logic;VARIABLE lef,rig,up,low:NATURAL;BEGINlef:=bit16LEFT;-0rig:=bit16RIGHT;-15up:=

4、bit16HIGH;-15low:=bit16LOW;-0END PROCESS;,8.1 数值类属性,在递增区间LEFT=LOWRIGHT=HIGH,在递减区间LEFT=HIGHRIGHT=LOW,例8-1:,例8-2 枚举类型数据数值属性描述Architecture voltb of volta IS TYPE volt IS(uV,mV,V,kV);SUBTYPE s_volt IS volt RANGE(V DOWNTO mV);SIGNAL S1,S2,S3,S4:VOLT;BEGINS1=voltHIGH;-kVS2=voltLOW;-uVS3=s_voltLEFT;-VS4=s_

5、voltRIGHT;-mVEND voltb;,8.1 数值类属性,8.1.1 数组的数值属性 数组属性只有一个:取数组的长度值。格式:LENGTH(n);其中n是多维数组的维数;如二维数组n=2;对一维数组n缺省。例8-3 一维数组数值属性描述PROCESS(b)TYPE bit8 IS array(7 downto 0)of bit;TYPE bit31_8 IS array(31 downto 8)of bit;VARIABLE b1,b2:integer;BEGINb1:=bit8LENGTH;-b1=8B2:=BIT31_8LENGTH;-b2=24END PROCESS,8.1 数

6、值类属性,指属性以函数的形式返回有关数据类型、数组或是信号的信息。函数类属性使用时以函数表达式的形式出现,属性根据输入的自变量值去执行函数,返回一个相应的值。该返回值可能是数组区间的某一个值,也可能是信号的变化值,或是枚举数据的位置序号等。函数类属性分三类:数据类型属性函数数组类型属性函数信号属性函数,8.2 函数类属性,8.2 函数类属性,8.2.1 数据类型属性函数主要用来得到数据类型的各种相关信息,共6种:(1)POS(X)-返回数据类型定义中输入的X值的位置序号(2)VAL(X)-返回输入的位置序号X处的值(3)SUCC(数据值)-返回数据类型定义中该值的下一个对应值(4)PRED(数

7、据值)-返回数据类型定义中该值的前一个对应值(5)LEFTOF(数据值)-返回数据类型定义中该值的左边值(6)RIGHTOF(数据值)-返回数据类型定义中该值的右边值 对于递增区间:SUCC(x)=RIGHTOF(x)PRED(x)=LEFTOF(x)对于递减区间:SUCC(x)=LEFTOF(x)PRED(x)=RIGHTOF(x),8.2 函数类属性,例8-4PACKAGE w_pack IS TYPE week IS(sun,mon,tue,wed,thu,fri,sat);TYPE r_week IS week RANGE sat DOWNTO sun;END w_pack;求自定义类

8、型的属性:weekSUCC(mon)-得tueweekPRED(mon)-得sunweekLEFTOF(mon)-得sunweek RIGHTOF(mon)-得tuer_weekSUCC(mon)-得tuer_weekPRED(mon)-得sunr_weekLEFTOF(mon)-得tuer_week RIGHTOF(mon)-得sun,8.2 函数类属性,8.2.2 数组属性函数主要用来得到数组的信息。共有4种属性:(1)LEFT(n)-得到n区间的左端边界号(2)RIGHT(n)-得到n区间的右端边界号(3)HIGH(n)-得到n区间的高端边界号(4)LOW(n)-得到n区间的低端边界号其

9、中n表示数组的区间序号(即维数)。当n=1时可以缺省,默认为一维数组。在递减区间LEFT=HIGHRIGHT=LOW在递增区间LEFT=LOWRIGHT=HIGH,TYPE matrix IS ARRAY(0 TO 7,15 DOWNTO 0)OF std_logic;i=matrix left(1);-i=0;i=matrix right(1);-i=7;i=matrix high(1);-i=7;i=matrix low(1);-i=0;i=matrix left(2);-i=15;i=matrix right(2);-i=0;i=matrix high(2);-i=15;i=matrix

10、 low(2);-i=0;,8.2 函数类属性,8.2.3 信号类型属性函数主要用来得到信号的各种行为功能信息:包括信号值的变化、信号变化后经过的时间、变化前的信号值等。共有5种属性:(1)EVENT-当前很短的时间内信号发生了变化,则返回TRUE,否则返回FALSE。(2)ACTIVE-当前信号等于1,则返回TRUE,否则返回FALSE。(3)LAST_EVENT-返回信号从前一个事件发生到现在的时间值。(4)LAST_VALUE-返回信号在最近一个事件发生以前的值(5)LAST_ACTIVE-返回信号从上一次等于1到现在的时间值,8.2 函数类属性,1 属性函数EVENT和 LAST_VA

11、LUE EVENT主要用来检测脉冲信号的正跳变或负跳变边沿,也可以检查信号是否刚发生变化并且正处于某一个电平值。例7-9 D触发器时钟脉冲上升沿的检测library ieee;use ieee.std_logic_1164.all;entity dff IS PORT(d,clk:IN cal_resist std_logic;q:OUT std_logic);end dff;ARCHITECTURE dff OF dff ISBEGIN PROCESS(clk)BEGIN IF clk=1 AND clkEVENT THENq=d;END IF;END PROCESS;END dff;,2

12、属性函数 LAST_ EVENT 例8-10 D触发器建立时间的检测library ieee;use ieee.std_logic_1164.all;entity dff IS GENERIC(setup_time,hold_time:TIME);PORT(d,clk:IN cal_resist std_logic;q:OUT std_logic);end dff;ARCHITECTURE dff_behav OF dff ISBEGINSetup_check:PROCESS(clk)BEGIN IF clkLAST_VALUE=0 AND clkEVENT THENASSERT(dLAST_

13、EVENT=setup_time)REPORT“SETUP VIOLATON”SEVERITY ERROR;END IF;,8.2 函数类属性,END PROCESS;Dff_process:PROCESS(clk)BEGIN IF clkLAST_VALUE=0 AND clkEVENT THENq=d;END IF;END PROCESS;END dff_behav;,8.2 函数类属性,根据所加属性的信号去建立一个新的信号,称信号类属性。信号类属性有4种:DELAYED(t):t 为时间表达式,该属性将产生一个特别的延迟信号,该信号使主信号按t确定的时间产生附加的延迟。新信号与主信号类型

14、相同。该属性可以用来检查信号的保持时间。STABLE(t):当所加属性的信号在时间t内没有发生变化,则返回true,否则返回false.该属性中当t=0时可以得到与属性EVENT相反的值。QUIET(t):信号在时间t内不活跃,则返回true,否则返回false。典型应用是用来对中断优先处理机制进行建模。TRANSACTION:所加属性的信号活跃时将对所建立的bit数据取反。,8.3 信号类属性,8.3 信号类属性,1 属性 DELAYED(t)可以用DELAYED(t)属性的信号建立一个延迟信号附加在该信号上。例8-11 二输入与门附加延迟的描述,8.3 信号类属性,library ieee

15、;use ieee.std_logic_1164.all;entity and2 IS GENERIC(a_ipd,b_ipd,c_opd:TIME);PORT(a,b:IN cal_resist std_logic;c:OUT std_logic);end and2;ARCHITECTURE int_signals OF and2 IS SIGNAL inta,intb:std_logic;BEGINinta=TRANSPORT a AFTER a_ipd;intb=TRANSPORT b AFTER b_ipd;c=inta AND intb AFTER c_opd;END int_sig

16、nals;ARCHITECTURE attr OF and2 ISBEGINc=aDELAYED(a_ipd)AND bDELAYED(b_ipd)AFTER c_opd;END attr;,8.3 信号类属性,还可以用DELAYED(t)属性检测信号的保持时间。例8-12 D触发器的保持时间检测的描述library ieee;use ieee.std_logic_1164.all;entity dff IS GENERIC(setup_time,hold_time:TIME);PORT(d,clk:IN cal_resist std_logic;q:OUT std_logic);end df

17、f;ARCHITECTURE dff_behav OF dff ISBEGINSetup_check:PROCESS(clk)BEGIN IF clkLAST_VALUE=0 AND clkEVENT THENASSERT(dLAST_EVENT=setup_time)REPORT“SETUP VIOLATON”SEVERITY ERROR;END IF;,8.3 信号类属性,hold_check:PROCESS(clkDELAYED(2*hold_time)BEGIN IF(clkDELAYED(hold_time*2)=1)AND(clkDELAYED(hold_time*2)EVENT)

18、then ASSERT(dLAST_EVENT=0 ns)OR(dLAST_EVENT hold_time)REPORT“HOLD VIOLATON”SEVERITY ERROR;END IF;END PROCESS;Dff_process:PROCESS(clk)BEGIN IF clkLAST_VALUE=0 AND clkEVENT THENq=d;END IF;END PROCESS;END dff_behav;,8.3 信号类属性,2 属性 STABLE(TIME)可以用STABLE(TIME)属性确定在指定的时间内,参考信号是否变化从而返回一个布尔值,可以用这个布尔值赋给另外一个信

19、号,使这个信号产生变化。例8-13 信号属性STABLE(TIME)的描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY exam IS PORT(a:IN std_logic;b:OUT std_logic);END ENTITY;ARCHITECTURE pulse OF exam ISBEGIN b=aSTABLE(10 ns);END PULSE;,8.3 信号类属性,图8-4 属性STABLE 得到的输入输出波形,如果属性STABLE(TIME)中TIME 的时间值为0(也是默认值),则时间值可以没有。则可以检测信号的边沿。,8.3 信

20、号类属性,3 属性 QUIET(TIME)可以用QUIET(TIME)属性确定在指定的时间内,参考信号是否变化从而返回一个布尔值,可以用这个布尔值赋给另外一个信号,使这个信号产生变化。,8.3 信号类属性,WHEN int5=END CASE;lock_out=FALSE;END PROCESS;END TEST,8.3 信号类属性,根据所加属性可以得到一个数据类型值。只有一种:类型名BASE用该属性可以得到一个数据类型或子类型的基本类型,并且使用时只能作为其他属性的前缀来使用。例:Do_nothing:process(x)TYPE color IS(red,blue,green,yellow

21、,brown,black);SUBTYPE color_gun IS color RANGE red to green;VARIABLE a:color;Begina:=color_gunBASERIGHT;a:=colorBASELEFT;a:=color_gunBASESUCC(green);END PROCESS;,8.4 数据类型属性,该属性按指定输入参数可以得到一个确定的数组区间范围。只能用于数组,只有2种:1.RANGE其中n 是输入参数,该属性可以得到一个递减顺序的自然数区间:n downto 02.REVERSE_RANGE该属性可以得到一个递增顺序的自然数区间:0 to n,8.5 数组区间类属性,例:FUNCTION vector_to_int(vect:std_logic_vector)RETURN integer ISVARIABLE result:integer:=0;BeginFOR i IN vect REVERSE_RANGE LOOPresult:=result+vect(i)*(2*i);END LOOP;RETURN result;END vector_to_int;,8.5 数组区间类属性,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号