欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    VHDL语言的主要描述语句.ppt

    • 资源ID:6522945       资源大小:384.50KB        全文页数:77页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    VHDL语言的主要描述语句.ppt

    第六章 VHDL语言的主要描述语句,VHDL语言描述系统硬件行为时,按语句执行顺序可以分为顺序(Sequential)描述语句和并发(Concurrent)描述语句。灵活运用这两类语句就可以正确地描述系统的并发行为和顺序行为。例如,进程语句(Process Statement)是一个并发语句。在一个构造体内可以有几个进程语句同时存在,各进程语句是并发执行的。但是,在进程内部所有语句应是顺序描述语句,也就是说,是按书写的顺序自上至下,一个语句一个语句地执行的。例如,IF 语句、LOOP语句等都属于此类顺序描述语句。,6.1 顺序描述语句,执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺序语句只能用在进程与子程序中。在VHDL语言中顺序描述语句有以下几种:,*WAIT语句;*断言语句;*信号代入语句;*变量赋值语句;*IF语句;*CASE语句;*LOOP语句;*NEXT语句;*EXIT 语句;*过程调用语句;*NULL语句,6.1.1 WAIT语句,进程在仿真时的两个状态:执行或挂起。进程状态的变化受WAIT语句的控制。当进程执行到WAIT语句时,就将被挂起,并设置好再次执行的条件。WAIT语句可以设置4种不同的条件:无限等待、时间到、条件满足以及敏感信号量变化。其书写格式为:WAIT:无限等待 WAIT ON:敏感信号量变化 WAIT UNTIL:条件满足 WAIT FOR:时间到,1、WAIT ON,WAIT ON 语句的完整书写格式为:WAIT ON 信号,信号;WAIT ON 后面跟着的是一个或多个信号量,例如:WAIT ON a,b;该语句表明,等待信号量a或b中只要有一个发生变化,进程将结束挂起状态,而继续执行WAIT ON 语句的后继语句,从而再次启动进程的执行。从这一点来看,与进程指定的敏感信号量有新的变化时,也会启动进程的情况相类似。,举例1,PROCESS(a,b)BEGIN y=a AND b;END PROCESS;,PROCESS BEGIN y=a AND b;WAIT ON a,b;END PROCESS;,上面两个进程的描述是完全等价的,只是WAIT ON和PROCESS中所使用的敏感信号量的书写方法有区别。在使用WAIT ON语句的进程中,敏感信号量应写在进程中的WAIT ON语句后面;而在不使用WAIT ON语句的进程中,敏感信号量只应在进程开头的PROCESS后跟的括号中说明。,敏感信号量列表和 wait on 语句只能选其一,两者不能同时使用。,注意,举例2,如果PROCESS 语句已有敏感信号量说明,那么在进程中再不能使用WAIT ON 语句。例如,下面的描述是非法的。,PROCESS(a,b)BEGIN y=a AND b;WAIT ON a,b;错误语句END PROCESS;,2、WAIT UNTIL,WAIT UNTIL 语句的完整书写格式为:WAIT UNTIL 表达式;当表达式的值为“真”时,进程被启动,否则进程被挂起。该语句在表达式中将建立一个隐式的敏感信号量表,当表中的任何一个信号量发生变化时,就立即对表达式进行一次评估。如果评估结果使表达式返回一个“真”值,则进程脱离等待状态,继续执行下一个语句。例如:,WAIT UNTIL(X*10)100);在这个例子中,当信号量X的值大于或等于10时,进程执行到该语句将被挂起;当X的值小于10时进程再次被启动,继续执行WAIT 语句的后继语句。,例:用wait until语句描述时钟沿,实现D触发器 architecture rtl of d is begin process begin wait until clkevent and clk=1;q=d;end process;end rtl;,举例,3、WAIT FOR,WAIT FOR 语句的完整书写格式为:WAIT FOR 时间表达式;WAIT FOR 语句后面跟着的是时间表达式,当进程执行到该语句时将被挂起,直到指定的等待时间到时,进程再开始执行WAIT FOR 语句后继的语句。例如:WAIT FOR 20ns;这个语句中时间表达式是一个常数值20ns,当进程执行到该语句时将等待20ns。一旦20ns时间到,进程将执行WAIT FOR 语句的后继语句。,例如:WAIT FOR(a*(b+c);此语句中,FOR后面是一个时间表达式,a*(b+c)是时间量。WAIT FOR 语句在等待过程中,要对表达式进行一次计算,计算结果返回的值就作为该语句的等待时间。例如,a=2,b=50ns,c=70ns。那么WAIT FOR(a*(b+c)这个语句将等待240ns,也就是说该语句和WAIT FOR 240ns是等价的。,4、多条件WAIT语句,在前面已叙述的3个WAIT语句中,等待的条件都是单一的,要么是信号量,要么是布尔量,要么是时间量。实际上WAIT语句还可以同时使用多个等待条件。例如:WAIT ON nmi,interrupt UNTIL(nmi=TRUE)OR(interrupt=TRUE)FOR 5us;上述语句等待的是3个条件:第一,信号量nmi和interrupt任何一个有一次新的变化;第二,信号量nmi或interrupt任何一个取值为“真”;第三,等待5us。只要上述3个条件中一个或多个条件满足,进程将再次启动,继续执行WAIT语句的后继语句。,6.1.2 断言语句(ASSERT),ASSERT语句主要用于程序仿真、调试中的人机对话,它可以给出一个文字串作为警告和错误信息。ASSERT语句的书写格式为:ASSERT 条件 REPORT 输出信息 SEVERITY 级别;如果条件为真则向下执行另一个语句,如果条件为假,则输出错误信息和错误级别。REPORT后面的错误信息应用双引号括起来。ASSERT语句给程序的调试和仿真带来极大的方便,这样的语句一般只用于行为级仿真中,而不能进行逻辑综合。,例:ASSERT(sendB=1)REPORT“sendB timed out at 1”SEVERITY ERROR;该断言语句的条件信号量是sendB=1。如果执行到该语句时,信号量sendB=0,说明条件不满足,就会输出REPORT后跟的文字串。该文字串说明,出现了超时等待错误。SEVERITY后跟的错误等级告诉操作人员,其出错等级为ERROR。,6.1.3 信号代入语句,书写格式:目的信号量=信号量表达式;意义:将右边信号量表达式的值赋给左边的目的信号量。,6.1.4 变量赋值语句,书写格式:目的变量:=表达式;意义:表达式的值替代目的变量的值,立即有效。,1)赋值方式的不同:变量:=表达式;信号=表达式;2)硬件实现的功能不同:信号代表电路单元、功能模块间的互联,代表实际的硬件连线;变量代表电路单元内部的操作,代表暂存的临时数据。3)有效范围的不同:信号:程序包、实体、结构体;全局量。变量:进程、子程序;局部量。4)赋值行为的不同:信号赋值延迟更新数值;变量赋值立即更新数值;,补充:变量与信号的差异,6.1.5 IF语句,IF语句可用于选择器、比较器、编码器、译码器、状态机的设计,是VHDL语言中最基础、最常用的语句。IF语句根据制定的条件来确定语句执行顺序,共有三种类型。,1、IF语句的门闩控制,格式:IF 条件 THEN 顺序处理语句;END IF;当程序执行到该IF语句时,就要判断IF语句所指定的条件是否成立。如果条件成立,则执行顺序处理语句;不成立则跳过IF语句所包含的顺序处理语句,而向下执行IF语句的后续语句。这里的条件起到门闩的控制作用。,D触发器的描述举例,LIBRARY IEEE;USE IEEE.STD.LOGIC.1164.ALL;ENTITY dff IS PORT(clk,d:IN STD_LOGIC;q:OUT STD_LOGIC);END dff;ARCHITECTURE rtl OF dff ISBEGIN PROCESS(clk)BEGIN IF(clkEVENT AND clk=1)THEN q=d;END IF;END PROCESS;END trl;,注,此例中,IF语句的条件是时钟信号clk事件发生,且时钟clk=1(时钟脉冲上升沿到来)。只有在这个时候d端信号值才赋值给q端。当该条件不满足时,q端维持原来的输出值。,2、IF语句的二选择控制,格式:IF 条件 THEN 顺序处理语句;ELSE 顺序处理语句;END IF;当条件满足时,则执行THEN和ELSE之间的顺序处理语句;如不满足则执行ELSE和END IF之间的顺序处理语句。,IF二选择控制举例,二选一电路ARCHITECTURE rtl OF mux2 ISBEGIN PROCESS(a,b,sel)BEGIN IF(sel=1)THEN c=a;ELSE c=b;END IF;END PROCESS;END rtl;,此例中,二选一电路的输入端为a和b,选择控制端为sel,输出端为c。,注,3、IF语句的多条件控制,格式:IF 条件 THEN 顺序处理语句;ELSIF 条件 THEN 顺序处理语句;ELSIF 条件 THEN 顺序处理语句;ELSE 顺序处理语句;END IF;,在多选择控制的IF语句中,设置了多个条件。当某个条件满足时就执行跟在该条件这后的顺序处理语句,如果条件都不满足则执行ELSE和END IF之间的语句。IF语句的多选择控制又称为IF语句的嵌套。,注,IF语句多条件控制语句举例,四选一电路:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(input:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);y:OUT STD_LOGIC);END mux4;ARCHITECTURE rtl OF mux4 ISBEGIN PROCESS(input,sel)BEGIN IF(sel=“00”)THEN y=input(0);ELSIF(sel=“01”)THEN y=input(1);,ELSIF(sel=“10”)THEN y=input(2);ELSE y=input(3);END IF;END PROCESS;END rtl;,注,if_then_elsif 语句中隐含了优先级别的判断,最先出现的条件优先级最高,可用于设计具有优先级的电路。如8-3优先级编码器。,3、IF语句小结,(1)IF语句可以用于凡是可以进行条件控制的逻辑电路设计。(2)IF语句的条件判断的输出是布尔量,即是“真”(true)或“假”(FALSE)。因此在IF语句的条件表达式中只能使用关系运算操作符(=,/=,=)及逻辑运算操作符的组合表达式。,6.1.6 CASE语句,case 语句常用来描述总线或编码、译码行为。可读性比if 语句强。格式:CASE 表达式 IS WHEN 条件表达式=顺序处理语句;END CASE;当CASE 和 IS 之间的表达式的取值满足指定的条件表达式的值时,程序将执行由符号=所指的顺序处理语句。,CASE语句中条件表达式四种不同的表达形式:WHEN 值=顺序处理语句;-单个值 WHEN 值|值|值|值|=顺序处理语句;-多个值的“或”WHEN 值 TO 值=顺序处理语句;-一个取值范围 WHEN OTHERS=顺序处理语句;-其它所有缺省值,条件表达式的形式可以是:1)单个值;2)多个值的“或”关系;3)一个取值范围;4)表示其它所有的缺省值。,CASE语句使用举例,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(a,b,i0,i1,i2,i3:IN STD_LOGIC;q:OUT STD_LOGIC);END mux4;ARCHITECTURE mux4_behave OF mux4 IS SIGNAL sel:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN selqqqq=i3;END CASE;END PROCESS;END mux4_behave;,1)前面例子中使用IF语句来描述四选一选择器时,if_then_elsif 语句中隐含了优先级别的判断,最先出现的条件优先级最高。1)而在使用CASE语句描述选择器行为时,CASE语句没有值的优先级,所有值是并行处理的;2)WHEN后面的值应全部列出来;3)WHEN后面的值不能重复使用。,注,带有WHEN OTHERS项举例(类3-8译码器),LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decode3to8 IS PORT(a,b,c,G1,G2A,G2B:IN STD_LOGIC;y:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END decode3to8;ARCHITECTURE rtl OF decode3to8 IS SIGNAL indata:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN indatayyyy=“11110111”;,WHEN“100”=yyyy=“XXXXXXXX”;END CASE;ELSE Y=“11111111”;END IF;END PROCESS;END rtl;,1)分支条件的值必须在表达式的取值范围内。2)两个分支条件不能重叠。3)CASE语句执行时必须选中,且只能选中一个分支条件。4)如果没有others分支条件存在,则分支条件必须覆盖表达式所有可能的值。,Case 语句使用注意事项,CASE 表达式 IS WHEN 分支条件=顺序处理语句;WHEN 分支条件=顺序处理语句;WHEN 分支条件=顺序处理语句;END CASE;,6.1.7 LOOP语句,LOOP语句与其它高级语句中的循环语句一样,使程序能进行有规则的循环,循环次数受迭代算法控制。LOOP语句书写格式一般有两种:1)FOR 循环变量 IN 范围 LOOP;2)WHILE 条件 LOOP。,1、FOR 循环变量,书写格式如下标号:FOR 循环变量 IN 离散范围 LOOP 顺序处理语句;END LOOP 标号;,循环变量的值在每次循环中都将发生变化;离散范围则表示循环变量在循环过程中依次取值的范围。例如:ASUM:FOR i IN 1 TO 9 LOOP sum=i+sum;END LOOP ASUM;该例中i是循环变量,它可取1,2,.,9共9个值,也就是sum=i+sum的算式应循环计算9次。该程序的功能是对19的数进行累加计算。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY parity_check IS PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC);END parity_check;ARCHITECTURE rtl OF parity_check ISBEGIN PROCESS(a)VARIABLE tmp:STD_LOGIC;BEGIN tmp:=0;FOR i IN 0 TO 7 LOOP tmp:=tmp XOR a(i);END LOOP;y=tmp;END PROCESS;END rtl;,1)本例实际是8位偶校验电路2)i是一个循环变量,使用时无需先声明,也不能代入信号量和变量。3)进程内tmp是变量,tmp的值通过赋给信号y而带出进程。,FOR循环举例,对送进来的8位数每一位都与中间变量相异或,2、WHILE条件,书写格式如下:标号:WHILE 条件 LOOP 顺序处理语句;END LOOP 标号;如果条件为“真”,则进行循环;如果条件为“假”,则结束循环。如:i:=1;sum:=0;sbcd:WHILE(i10)LOOP sum:=i+sum;i:=i+1;END LOOP sbcd;,i 需事先定义、赋初值。,例:用WHILE语句来描述奇偶校验电路,ARCHITECTURE behave OF parity_check ISBEGIN PROCESS(a)VARIABLE temp:STD_LOGIC;VARIABLE i:INTEGER;BEGIN temp:=0;i:=0;WHILE(i8)LOOP temp:=temp XOR a(i);i:=i+1;END LOOP;y=temp;END PROCESS;END behave;,在WHILE-LOOP语句中的变量i要首先声明才能使用,这一点和FOR-LOOP语句中不一样。一般使用FOR-LOOP语句比 WHILE-LOOP语句更多。,6.1.8 NEXT语句,在LOOP语句中用NEXT语句来跳出本次循环,格式为:NEXT 标号 WHEN 条件;NEXT语句执行时将停止本次迭代,而转入下一次新的迭代。“标号”为下次迭代的起始位置,而条件为NEXT语句执行的条件。如果无“标号”也无条件,则只要执行到该语句就无条件跳出本次循环,从LOOP语句的起始位置进入下一次循环。NEXT语句实际上是用于LOOP语句的内部循环控制。,6.1.9 EXIT语句,EXIT 语句用于结束循环状态,从LOOP语句中跳出,结束LOOP语句的正常执行。格式:EXIT 标号 WNEN 条件;如果EXIT后面没有跟“标号”和“WHEN条件”,则程序执行到该语句时就无条件地从LOOP语句中跳出,结束循环状态,继续执行LOOP语句后继的语句。,6.2 并发描述语句,VHDL的并发语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关。进程语句(PROCESS);并发信号代入语句;条件信号代入语句;选择信号代入语句;并发过程调用语句;块(BLOCK)语句。,6.2.1 进程(PROCESS)语句,各个进程之间是并发处理的,而在进程内部则是按顺序处理的。在一个构造体内部可以有多个PROCESS语句同时并发执行。PROCESS语句是VHDL语句中是基本的语句。特点:1、进程与进程,或其它并发语句之间的并发性;2、进程内部的语句是顺序执行的;3、进程的启动与挂起,必须要有一个显式的敏感 信号量表或者包含一个WAIT语句;4、进程与进程之间的通信是通过信号量传递来实现的。,6.2.2 并发信号代入语句,代入语句(用符号“=”)可以在进程内部使用,是按顺序执行的;代入语句也可以在构造体内部的进程外使用,那么这些代入语句之间是并发执行的。可见,一个并发信号代入语句实际上是一个进程的缩写。,PROCESS和并发代入语句,ARCHITECTURE behave OF a_var ISBEGIN output=a(i);END behave;可以等效于:ARCHITECTURE behave OF a_var ISBEGIN PROCESS(a,i)BEGIN output=a(i);END PROCESS;END behave;,一个简单并行信号赋值语句是一个进程的缩写。,6.2.3 条件信号代入语句,格式:,目的信号量=表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE 表达式n;,ELSE,在每个表达式后面都跟有用“WHEN”所指定的条件,如果满足该条件,则该表达式值代入目的信号量;如果条件不满足,则再判断下一个表达式所指定的条件。,条件信号代入语句举例,利用条件信号代入语句实现四选一逻辑电路。ENTITY mux4 IS PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END mux4;ARCHITECTURE rtl OF mux4 IS SIGNAL sel:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN sel=b,条件信号代入语句与IF语句的区别,IF语句只能在进程内部使用,而条件信号代入语句则可以在进程内部也可以在进程之外。条件信号代入语句中的ELSE是必须的,而IF语句中的ELSE可有可无;条件信号代入语句不能进行嵌套。条件信号代入语句所描述的电路与逻辑电路实际工作比较相近,故一般设计者难以掌握。一般当进程语句、IF语句和CASE语句难于描述时,才用条件信号代入语句。,条件信号赋值语句与进程中的多选择 if 语句等价:,q=a WHEN sela=1 ELSE b WHEN selb=1 ELSE c;,PROCESS(sela,selb,a,b,c)BEGIN IF sela=1 THEN q=a;ELSIF selb=1 THEN q=b;ELSE q=c;END IF;END PROCESS;,格式:,WITH 表达式 SELECT 目的信号量=表达式1 WHEN 条件1,表达式2 WHEN 条件2,表达式n WHEN 条件n;,1)不能有重叠的条件分支。2)最后条件可为 others。否则,其它条件 必须能包含表达式的所有可能值。,6.2.4 选择信号代入语句,注,选择信号赋值语句与进程中的 case 语句等价:,PROCESS(sel,a,b,c,d)BEGIN CASE sel IS WHEN“00”=q q q q=d;END CASE;END PROCESS;,WITH sel SELECT q=a WHEN“00”,b WHEN“01”,c WHEN“10”,d WHEN OTHERS;,用选择信号代入语句实现四选一电路,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux IS PORT(i0,i1,i2,i3,a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END mux;ARCHITECTURE behave OF mux IS SIGNAL sel:INTEGER;BEGIN WITH sel SELECT q=i0 WHEN 0,i1 WHEN 1,i2 WHEN 2,i3 WHEN 3,X WHEN OTHERS;,sel=0 WHEN a=0 AND b=0 ELSE 1 WHEN a=0 AND b=1 ELSE 2 WHEN a=1 AND b=0 ELSE 3 WHEN a=1 AND b=1 ELSE 4;END behave;,选择信号代入语句,根据sel的不同值来完成选择功能,条件信号代入语句,根据a和b不同取值,对信号sel代入值,6.2.5 并发过程调用语句,并发过程调用(Concurent Procedure Call)语句可以出现在构造体中,而且是一种可以在进程之外执行的过程调用语句。有关过程的结构及书写方法在前面已讲过,我们回顾一下。格式:PROCEDURE 过程名(参数1,参数2,)IS 定义语句;BEGIN 顺序处理语句;END 过程名;,并发过程调用举例,ARCHITECTURE BEGIN vector_to_int(z,x_flag,q)END;,ARCHITECTURE BEGIN PROCESS(z,q)BEGIN vector_to_int(z,x_flag,q)END PROCESS;END;,并发过程调用是对位矢量Z进行数值转化,使之成为十进制数整数q。x_flag是标志位,为“真”表明转换失败,为“假”表明转换成功。,左例中并发过程调用语句和右例的过程调用进程完全等效,6.2.6 块(BLOCK)语句,标号:BLOCK 块头 说明语句;BEGIN 并发处理语句;END BLOCK 标号名;,BLOCK是一个并发执行语句,通常用于构造体的结构化描述,其格式为:,6.3 其它语句和有关规定的说明,6.3.1 命名规则和注解的标记 在VHDL语句中大小写是没有区别的,所有语句中用大写字母或小写字母都可以,也可有大小写混合使用。但有两种情况例外,这就是用单引号括起来的字符和用双引号括起来的字符串,这时大写字母和小写字母是有区别的。在VHDL语言中所使用的名字(名称),如信号名、实体名,构造体名、变量名等,在命名时应遵守如下规则:1)名字的最前面应该是英文字母;2)能使用的字符只有英文字母、数字和下划线“_”;3)不能连续使用“_”符号,在名字的最后也不能使用“_”。4)其注释从两个短划线“-”符号开始到该项末尾(回车、换 行符)结束。,命名举例,SIGNAL a_bus:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL 302_bus:-不能以数字开头SIGNAL b_bus:-不能作为名称的字母SIGNAL a_bus:-_不能连着使用SIGNAL a_bus_:-不能放在名称的最后。,6.3.2 ATTRIBUTE(属性)描述与定义语句,VHDL语句中有属性预定义功能,该功能有许多重要的应用,例如检出时钟边沿,完成定时检查,获得未约束的数据类型的范围等。ATTRIBUTE语句可以从所指定的客体中获得关心的数据或信息。如:TYPE number IS INTEGER RANGE 9 DOWNTO 0;若想得到 number的最大值,则可用下面的语句:i:=numberHIGH;-i=9而要得到最小值则可用:i:=numberLOW;-i=0 通过预定义属性描述语句,可以得到客体的有关值、功能、类型和范围。,自定义一个叫“number”的数据类型,它取值90的整数,1、数值类属性,数值类属性用来得到数组、块或者一般数据的有关值。1)一般数据的数值属性一般数据的数值属性的书写格式为:客体 属性名一般数据的数值属性有以下4种:,TLEFT-得到数据类或子类区间的最左端的值;TRIGHT-得到数据类或子类区间的最右端的值;THIGH-得到数据类或子类区间的最高端的值;TLOW-得到数据类或子类区间的最低端的值;T为客体,代表一般数据类和子类的名称,符号“”紧跟客体后面,符号“”后面是属性名。例:TYPE number IS 0 TO 9;i:=numberLEFT;-i=0 i:=numberRIGHT;-i=9 i:=numberHIGHT;-i=9 i:=numberLOW;-i=0,改为 9 DOWNTO 0,则会怎样?,数值类属性不光适用于数字类型,而且该属性还可以适用于任何标量类型。如:TYPE tim IS(sec,min,hours,day,moth,year);SUBTYPE reverse_tim IS tim RANGE moth DOWNTO min;tim1=timLEFT;-得到sec tim2=timRIGHT;-得到year tim3=timHIGHT;-得到year tim4=timLOW;-得到sec tim5=reverse_timLEFT;-得到moth tim6=reverse_timRIGHT;-得到min tim7=reverse_timHIGHT;-得到moth tim8=reverse_timLOW;-得到min 在使用时,应注意方向,即是用DOWNTO 还是TO,LEFT和LOW,RIGHT和HIGHT是不一样的。,枚举类型数据定义,数据的序号值从左到右递增,子类型的定义,注意数据的区间用的是DOWNTO,枚举类型数据的数值属性,2)数组的数值属性,数组的类属性只有一个即:TLENGTH,得到给定数组的长度。例:PROCESS(a)TYPE bit4 IS ARRAY(0 TO 3)of BIT;TYPE bit_strange IS ARRAY(10 TO 20)OF BIT;VARIABLE len1,len2:INTEGER;BEGIN len1:=bit4LENGTH;-len1=4 len2:=bit_strangeLENGTH;-len2=11END PROCESS;该属性可用于任何标量类数组(如枚举类型)和多维的标量类区间的数组。,一个包含4个元素数组的定义,一个包含11个元素数组的定义,其起始位位10和20.,2.函数类属性,函数类属性是指属性以函数的形式,让设计人员得到有关数据类型、数组、信号的某些信息。函数类属性3种:数据类型属性函数;数组属性函数;信号属性函数。1)数据类型属性函数 用数据类型属性函数可以得到有关数据类型的各种信息。,数据类型属性函数的6种属性函数,POS(x)-得到”x”的位序号;VAL(x)-得到位置序号”x”的值;SUCC(x)-得到”x”值的下一个值;PRED(x)-得到”x”值前一个值;LEFTOF(x)-得到邻接”x”值的左边的值;RIGHTOF(x)-得到邻接”x值”右边的值。如:TYPE week IS(sun,mon,tue,wed,thu,fri,sat);weekPOS(tue)返回3,weekval(4)返回wed,PACKAGE t_time IS TYPE time IS(sec,min,hous,day,month,year);TYPE reverse_time IS time RANGE year DOWNTO sec;END t_time;time SUCC(hous)-得到time类型数据中hous值的下一个值day;timePRED(day)-得到time类型数据中day值的前一个值hous;timeRIGHTOF(hous)-得到time类型数据中hous值的右临值day;time LEFTOF(hous)-得到time类型数据中hous值的 左临值min;reverse_timeSUCC(hous)-得到reverse_time类型数据中hous的下一个值min;reverse_timePRED(day)-得到reverse_time类型数据中day的前一个值month;,在包集合t_time中定义了两类枚举数据类型.,2)数组属性函数,利用数组属性函数可得到数组的区间。在对数组的每一个元素进行操作时,必须知道数组的区间。数组属性函数有4种:RIGHT(n)-得到索引号为n的区间的右端位置号。LEFT(n)-得到索引号为n的区间的左端位置号。LOW(n)-得到索引号为n的区间低端位置号。HIGHT(n)-得到索引号为n的区间的高端位置号。索引号n就是多维数组中所定义的多维区间序号,缺省值为n=1。当索引号取缺省值时,上面的数组函数就代表对一维区间进行操作。如:TYPE DIMENSION IS ARRAY(2 TO 5,7 DOWNTO 2,0 TO 6);variable DIM1:DIMENSION;DIM1LEFT 返回 2(n取缺省值1)DIM1LEFT(2)返回 7DIM1HIGH(3)返回6,3)信号属性函数,信号属性函数用来得到信号的行为信息。信号属性函数共有5种:EVENT-如果在当前一个相当小的时间间隔内,事件发生了,那么,函数将返回个“真”的布尔量,否则就返回“假”。ACTIVE-如果在当前一个相当小的时间间隔内,信号活跃了(仿真器对其进行了激活处理),那么,函数将返回“真”的布尔量,否则就返回“假”。LAST_EVENT-该属性函数将返回一个时间值,即从信号前一个事件发生到现在所经过的时间。LAST_ACTIVE-该属性函数将返回一个时间值,即从信号前一次改变到现在的时间。LAST_VALUE-该属性函数将返回一个值,即从信号最后一次改变以前的值。,(1)属性EVENT和LAST_VALUE,属性EVENT通常用于确定时钟信号的边沿,用它可以检查信号是否处于某一个特殊的值,以及信号是否刚好已发生变化。发生事件:信号电平发生变化。,时钟信号的上升沿,时钟信号的下降沿,时钟信号的上升沿描述:clkevent and clk=1时钟信号的下降沿描述:clkevent and clk=0上升沿触发器描述举例:process(clk)begin if clkevent and clk=1 then q=d;end if;end process;,如果原来的电平为“0”,那么逻辑是正确,但如果原来的电平是不定状态(X),这种描述被认为是上升沿就是错误。,为了避免clk=X(不定状态)而得不到上升沿,通常用LAST_VALUE属性,以确保时钟在上升沿还是在下降沿,如:IF(clkEVENT)AND(clk=1)AND(clkLAST_VALUE=0)THEN q=d;END IF;,该句保证时钟脉冲在变成“1”电平之前一定是出于“0”状态。,属性DELAYED可以建立一个所加属性的信号的延迟版本。,(1)属性DELAYED,3.信号类属性,信号类属性用于产生一种特别的信号,这个特别的信号是以所加属性的信号为基础而形成的。信号类属性有4种.,(2)属性STABLE,属性STABLE用来在一个指定的时间间隔内,确定信号(原信号或输入信号)是否正好发生改变或者没有发生改变。LIBRARY IEEE;ENTITY pulse_gen IS PORT(a:IN STD_LOGIC;b:OUT STD_LOGIC);END pulse_gen;,ARCHITECTURE puls_gen OF pulse_gen IS BEGIN b=a STABLE(10ns);END pulse_gen;,当a在10ns的时间内没有发生改变时,b为高电平;当a发生改变时,b由高电平变为低电平,且至少持续10ns。,4.数据类型属性,利用该属性可以得到数据类型的一个值。其格式为:tBASE 利用该属性可以得到数据t的类型或子类型,它仅仅作为其它属性的前缀来使用。例:TYPE color IS(red,blue,green,yellow,brown,black);SUBTYPE color_gun IS color RANGE red TO green;VARIABLE a:color;则:a:=color_gunBASERIGHT;-a=black a:=color_gunBASESUCC(green);-a=yellow,Color_gunBASE返回color数据类型,RIGHT得到该数据类型的最右端值,succ(x)得到x值的下一个值,5.数据区间类属性,在VHDL语言中有两类数据区间类属性,这两类属性仅用于受约束的数组类型数据。这两个属性是:aRANGE(n)将返回一个由参数n值所指出的第n个数据区间。aREVERSE_RANGE(n)将返回一个次序颠倒的数据区间。,FUNCTION vector_to_int(vect:STD_LOGIC_VECTOR)RETURN INTEGER ISVARIABLE result:INTEGER:=0;BEGIN FOR i IN vectRANGE LOOP result:=result*2;IF vect(i)=1 THEN result:=result+1;END IF;END LOOP;RETURN result;END vector_to_int;,函数内部使用了FOR LOOP循环语句,循环次数由输入参数vect的位数确定。如vect是8位的位矢量,vectRANGE将返回输入矢量的区间8。REVERSE_RANGE 类似于属性RANGE,所不同的是返回区间的次序是颠倒的。,7.GENERATE语句,GENERATE语句用来产生多个不同的结构,它有FOR-GENERAT和IF-GENERATE两种使用形式。,生成语句的作用:复制建立 0 个或多个备份。(并行结构)FOR-GENERAT:采用一个离散的范围决定备份的数目。IF-GENERATE:有条件地生成 0 个或 1 个备份。,语法:范围:整数表达式 to 整数表达式 整数表达式 downto 整数表达式,标号:FOR 循环变量 IN 范围 GENERATE 并发处理语句 END GENERATE 标号;,FOR GENRATE 语句,例:用GENERATE语句生成4个D触发器组成的移位寄存器,端口a是移位寄存器的输入端,端口b是输出端,clk是输出信号

    注意事项

    本文(VHDL语言的主要描述语句.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开