华北电力大学科技学院电子设计自动化课件7VHDL基本描述语句

上传人:无*** 文档编号:165328414 上传时间:2022-10-27 格式:PPT 页数:140 大小:1.88MB
收藏 版权申诉 举报 下载
华北电力大学科技学院电子设计自动化课件7VHDL基本描述语句_第1页
第1页 / 共140页
华北电力大学科技学院电子设计自动化课件7VHDL基本描述语句_第2页
第2页 / 共140页
华北电力大学科技学院电子设计自动化课件7VHDL基本描述语句_第3页
第3页 / 共140页
资源描述:

《华北电力大学科技学院电子设计自动化课件7VHDL基本描述语句》由会员分享,可在线阅读,更多相关《华北电力大学科技学院电子设计自动化课件7VHDL基本描述语句(140页珍藏版)》请在装配图网上搜索。

1、第第7章章 VHDL基本描述语句基本描述语句7.1 顺序描述语句顺序描述语句7.2 并发描述语句并发描述语句7.3 顺并描述语句顺并描述语句7.4 属性描述语句属性描述语句7.1 顺序描述语句顺序描述语句(Sequential)顺序描述语句像在一般的软件语言中一样,其顺序描述语句像在一般的软件语言中一样,其语句是按出现的次序加以执行的。语句是按出现的次序加以执行的。顺序描述语句只能出现在进程或子程序(过程顺序描述语句只能出现在进程或子程序(过程和函数)中,由它定义进程或子程序所执行的算和函数)中,由它定义进程或子程序所执行的算法。法。顺序描述语句所涉及到的系统行为有时序流、顺序描述语句所涉及到

2、的系统行为有时序流、条件、控制和迭代等;条件、控制和迭代等;顺序描述语句的功能操作有算术、逻辑运算,顺序描述语句的功能操作有算术、逻辑运算,信号和变量的赋值,子程序调用等。信号和变量的赋值,子程序调用等。VHDL语言中顺序描述语句主要有:语言中顺序描述语句主要有:u变量赋值语句;变量赋值语句;uIF语句;语句;uCASE语句;语句;uLOOP语句;语句;uNEXT语句;语句;uEXIT语句;语句;uWAIT语句;语句;u断言语句;断言语句;uNULL语句;语句;7.1.1 变量赋值语句变量赋值语句目的变量目的变量:=表达式;表达式;执行该语句时,目的变量的值将由表达式所表达的新值执行该语句时,

3、目的变量的值将由表达式所表达的新值代替;代替;表达式的数据类型、长度与目标变量必须一致;表达式的数据类型、长度与目标变量必须一致;表达式可以是变量、信号或字符。表达式可以是变量、信号或字符。变量赋值语句只能在进程或子程序中使用;变量赋值语句只能在进程或子程序中使用;变量赋值语句立即生效变量赋值语句立即生效变量赋值语句是对变量进行赋值的语句。变量赋值语句是对变量进行赋值的语句。变量赋值语句的格式:变量赋值语句的格式:7.1.2 IF语句语句1.单分支操作单分支操作IF语句语句 IF 分支条件表达式分支条件表达式 THEN 顺序处理语句;顺序处理语句;-分支操作分支操作 END IF;IF (a=

4、1)THEN c=b;END IF;当程序执行到该当程序执行到该IF语句时,就要判断语句时,就要判断IF语句所指定的条语句所指定的条件是否成立。如果条件成立,则件是否成立。如果条件成立,则IF语句所包含的顺序处语句所包含的顺序处理语句将被执行;如果条件不成立,程序跳过理语句将被执行;如果条件不成立,程序跳过IF语句所语句所包含的顺序处理语句,而执行包含的顺序处理语句,而执行IF语句后面的语句。语句后面的语句。IF(clkEVENT AND clk=1)THEN q=d;END IF;2.双重分支操作双重分支操作IF语句语句 IF 分支条件表达式分支条件表达式 THEN 顺序处理语句顺序处理语句

5、;-分支分支1ELSE 顺序处理语句;顺序处理语句;-分支分支2END IF;在这种格式的在这种格式的IF语句中,当语句中,当IF语句所指定的条件满足时,语句所指定的条件满足时,将执行将执行THEN和和ELSE之间所界定的顺序语句。当条件不之间所界定的顺序语句。当条件不满足时,将执行满足时,将执行ELSE和和END IF之间所界定的顺序处理之间所界定的顺序处理语句。语句。ARCHITECTURE rtl OF mux IS BEGIN PROCESS(a,b,sel)IS BEGIN IF (sel=1)THEN c=a;ELSE c=b;END IF;END PROCESS;END ARCH

6、ITECTURE rtl;3.多重分支操作多重分支操作IF语句语句 IF 分支条件表达式分支条件表达式1 THEN 顺序处理语句顺序处理语句;-分支分支1 ELSIF 分支条件表达式分支条件表达式2 THEN 顺序处理语句;顺序处理语句;-分支分支2 ELSIF分支条件表达式分支条件表达式N THEN 顺序处理语句;顺序处理语句;-分支分支N ELSE 顺序处理语句;顺序处理语句;-分支分支N+1 END IF;在这种多选择控制的在这种多选择控制的IF语句中,设置了多个条语句中,设置了多个条件,当满足所设置的多个件,当满足所设置的多个条件之一时,就执行该条条件之一时,就执行该条件后跟的顺序处理

7、语句。件后跟的顺序处理语句。如果所有设置的条件都不如果所有设置的条件都不满足,则执行满足,则执行ELSE和和END IF之间的顺序处理语句。之间的顺序处理语句。格式格式1: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 ENTITY mux4;ARCHITECTURE rtl OF mux4 IS BEGIN PROCESS(inpu

8、t,sel)IS BEGIN IF(sel=“00”)THEN y=input(0);ELSIF(sel=“01”)THEN y=input(1);ELSIF(sel=“10”)THEN y=input(2);ELSE y 顺序描述语句;顺序描述语句;WHEN 条件表达式取值条件表达式取值2 =顺序描述语句;顺序描述语句;WHEN 条件表达式取值条件表达式取值N =顺序描述语句;顺序描述语句;END CASE;CASE语句用来描述总线或编码、译码的行为,从语句用来描述总线或编码、译码的行为,从许多不同语句的序列中选择其中之一执行。许多不同语句的序列中选择其中之一执行。格式:格式:当当CASE和

9、和IS之间的表达式的取值满足之间的表达式的取值满足WHEN指定指定的条件表达式的值时,程序将执行后跟的,由符号的条件表达式的值时,程序将执行后跟的,由符号=所所指的顺序处理语句。指的顺序处理语句。7.1.3 CASE 语句语句条件表达式条件表达式 4种不同表示形式:种不同表示形式:1)WHEN 值值=顺序处理语句;顺序处理语句;2)WHEN 值值|值值|值值|=顺序处理语句;顺序处理语句;3)WHEN 值值 TO 值值=顺序处理语句;顺序处理语句;4)WHEN OTHERS=顺序处理语句;顺序处理语句;CASE sel IS WHEN 0 =q q q q y y y y y y y y y

10、y y y y y y y y y=XXX;END CASE;BUF(DC)0SEL3.0DATA15.0OUTMUXSEL3.0DATA15.0OUTMUXSEL3.0DATA15.0OUTMUXBUF(DC)comb0Mux03 h3-1 h1-1 h1-Mux13 h3-1 h1-1 h1-Mux23 h3-1 h1-1 h1-node32.132 h00000000-a7.0y2.0y=“XXX”;3个4-input LUT SEL7.0DATA255.0OUTMUXSEL7.0DATA255.0OUTMUXSEL7.0DATA255.0OUTMUXMux2256 hB7FF7FFFF

11、FFFFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF-a7.0y2.0Mux0256 h977FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF-Mux1256 h9FFF7FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF-y=“111”;6个4-input LUT2个2-input LUT PROCESS(input)IS BEGIN IF input(0)=0 THEN y=“111”;ELS

12、IF input(1)=0 THEN y=“110”;ELSIF input(2)=0 THEN y=“101”;ELSIF input(3)=0 THEN y=“100”;ELSIF input(4)=0 THEN y=“011”;ELSIF input(5)=0 THEN y=“010”;ELSIF input(6)=0 THEN y=“001”;ELSE y=“000”;END IF;END PROCESS;优先级编码器真值表inputoutput7 6 5 4 3 2 1 0 2 1 0-0 1 1 1-0 1 1 1 0-0 1 1 1 0 1-0 1 1 1 1 0 0-0 1 1

13、 1 1 0 1 1-0 1 1 1 1 1 0 1 0-0 1 1 1 1 1 1 0 0 1-1 1 1 1 1 1 1 0 0 0LOOP 语句的书写格式一般有两种语句的书写格式一般有两种:1.FOR-LOOP7.1.4 LOOP语句语句LOOP语句使程序能语句使程序能 进行有规则的循环,循环的次数受进行有规则的循环,循环的次数受迭代算法控制。迭代算法控制。标号标号:FOR 循环变量循环变量 IN 取值取值范围范围 LOOP 顺序顺序处处理语句理语句;END LOOP 标号标号;LOOP语句中的循环变量的值在每次循环中都将发生变语句中的循环变量的值在每次循环中都将发生变化化,而而IN后跟

14、的离散范围则表示循环变量在循环过程中后跟的离散范围则表示循环变量在循环过程中依次取值的范围。依次取值的范围。ASUM:FOR i IN 1 TO 9 LOOP sum:=i+sum;-sum初始值为0 END LOOP ASUM;LIBRARY IEEE;USE IEEE.STD_LOGIC_1l64.ALL;ENTITY parity_check ISPORT(a:IN STD_LOGIC-VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC);END ENTITY parity_check;ARCHITECTURE rtl OF parity_check IS BEGINP

15、ROCESS(a)IS VARIABLE tmp:STD_LOGIC;BEGINtmp:=0;F0R i IN 0 TO 7 LOOP tmp:=tmp XOR a(i);END LOOP;y=tmp;END PROCESS;END ARCHITECTURE rtl;2.WHILE-LOOP标号标号:WHILE 条件条件 LOOP 顺序处理语句顺序处理语句;END LOOP 标号标号;在该在该LOOP语句中语句中,如果条件为如果条件为真真,则进行循环则进行循环;如果条如果条件为件为假假,则结束循环。则结束循环。i:=1;sum:=0;sbcd:WHILE (i10)LOOP sum:=i+su

16、m;i:=i+1;END LOOP sbcd;FOR-LOOP与与WHILE-LOOP的区别举例:的区别举例:7.1.5 NEXT 语句语句 NEXT 标号标号 WHEN条件条件;NEXT语句用在语句用在LOOP语句中,实现语句中,实现 LOOP语句的内语句的内部循环控制。部循环控制。NEXT语句执行时,将停止当前的迭代,而转入下一语句执行时,将停止当前的迭代,而转入下一次新的迭代。次新的迭代。7.1.5 NEXT 语句语句“标号标号”表明下一次迭代的起始位置;表明下一次迭代的起始位置;“WHEN 条件条件”表明表明NEXT语句的执行条件;语句的执行条件;如果如果NEXT语句后面语句后面“标号

17、标号”和和“WHEN条件条件”都没都没有,则只要执行到该语句就立即无条件跳出本次循环,有,则只要执行到该语句就立即无条件跳出本次循环,从从LOOP语句的起始位置进入下一次循环。语句的起始位置进入下一次循环。LOOP 语句嵌套时,通常语句嵌套时,通常NEXT语句应标有语句应标有“标号标号”和和“WHEN条件条件”。如果如果EXIT后面没有跟后面没有跟标号标号和和WHEN条件条件,则程序执则程序执行到该语句时就无条件地从行到该语句时就无条件地从LOOP语句中跳出语句中跳出,结束循环结束循环状态状态,继续执行继续执行LOOP 语句后继的语句语句后继的语句,7.1.6 EXIT语句语句 EXIT语句是

18、语句是LOOP语句中使用的循环控制语句,执行语句中使用的循环控制语句,执行EXIT语句将结束循环状态,即从语句将结束循环状态,即从LOOP语句中跳出,结语句中跳出,结束束LOOP语句的正常执行。而语句的正常执行。而NEXT语句不结束语句不结束LOOP语语句的执行,只是结束一次循环。句的执行,只是结束一次循环。EXIT 标号标号 WHEN条件条件;EXIT语句具有语句具有3种基本书写格式种基本书写格式:1)EXIT语句没有语句没有“循环标号循环标号”或或“WHEN条件条件”当条件为当条件为“真真”执行执行EXIT语句时,程序将按如下顺序语句时,程序将按如下顺序执行:执行执行:执行EXIT,程序将

19、从仅仅当前所属的,程序将从仅仅当前所属的LOOP语句语句中退出。如果中退出。如果EXIT语句位于一个内循环语句位于一个内循环LOOP语句中,语句中,执行执行EXIT语句,程序仅仅退出内循环,而仍然留在外语句,程序仅仅退出内循环,而仍然留在外循环的循环的LOOP语句中。语句中。2)EXIT语句后跟语句后跟LOOP语句的标号语句的标号此时,执行此时,执行EXIT语句时,程序将跳至所说明的标号。语句时,程序将跳至所说明的标号。3)EXIT语句后跟语句后跟“WHEN条件条件”语句语句 当程序执行到该语句时,只有所说明的当程序执行到该语句时,只有所说明的”WHEN条件条件”为为“真真”时,才跳出循环的时

20、,才跳出循环的LOOP语句。此时语句。此时不管不管EXIT语句是否有标号说明,都将执行下一条语句。语句是否有标号说明,都将执行下一条语句。如果有标号说明,下一条要执行的语句将是标号所说如果有标号说明,下一条要执行的语句将是标号所说明的语句。如果无标号说明,下一条要执行的语句是明的语句。如果无标号说明,下一条要执行的语句是循环外的下一条语句。循环外的下一条语句。7.1.7 WAIT语句语句 WAIT语句的语句的5种格式:种格式:WAIT -无限等待无限等待 WAIT ON -敏感信号量变化敏感信号量变化 WAIT UNTIL -条件满足条件满足 WAIT FOR -时间到时间到 多条件多条件WA

21、IT语句语句 -满足所有条件中的一个或多个条件满足所有条件中的一个或多个条件进程在仿真运行中总是处于下述两种状态之一:执行和进程在仿真运行中总是处于下述两种状态之一:执行和挂起。挂起。进程状态的变化受进程状态的变化受WAIT语句的控制,当进程执行到语句的控制,当进程执行到WAIT语句时,就将被挂起,并设置好再次执行的条件。语句时,就将被挂起,并设置好再次执行的条件。1.WAIT ON标号标号:WAIT ON 敏感信号列表;敏感信号列表;例如:例如:WAIT ON a,b;WAIT ON 后面的信号只要有一个发生变化,进程将后面的信号只要有一个发生变化,进程将被执行。被执行。Process(a,

22、b)IS Begin y=a and b;End process;Process Begin y=a and b;wait on a,b;End process;WAIT ON语句与进程敏感信号列表的关系语句与进程敏感信号列表的关系 Process(a,b)IS Begin y=a and b;wait on a,b;-错误语句错误语句 End process;如果如果PROCESS语句已含有敏感语句已含有敏感信号量说明,则信号量说明,则进程中不能再使进程中不能再使用用WAIT ON语语句。句。2.WAIT UNTILWAIT UNTIL 布尔表达式布尔表达式;表达式为布尔表达式,当进程执行到

23、该语句时将被挂表达式为布尔表达式,当进程执行到该语句时将被挂起,直到表达式的值为起,直到表达式的值为“真真”,进程才被再次启动。,进程才被再次启动。该语句在表达式中将建立一个隐式的敏感信号表,当该语句在表达式中将建立一个隐式的敏感信号表,当表中的任何一个信号量发生变化时,就立即对表达式进表中的任何一个信号量发生变化时,就立即对表达式进行一次评估。如果评估的结果使表达式返回一个行一次评估。如果评估的结果使表达式返回一个“真真”值,则进程脱离挂起状态,继续执行下一个语句。值,则进程脱离挂起状态,继续执行下一个语句。例如:例如:WAIT UNTIL(x*10)100);3.WAIT FOR WAIT

24、 FOR 时间表达式时间表达式;表达式为时间表达式,当进程执行到该语句时将被挂表达式为时间表达式,当进程执行到该语句时将被挂起,直到指定的等待时间到时,进程再开始执行起,直到指定的等待时间到时,进程再开始执行WAIT FOR 语句后面的语句。语句后面的语句。例如:例如:WAIT FOR 20 ns;WAIT FOR(a*(b+c);4.多条件多条件WAIT 语句语句 WAIT ON nmi,interrupt UNTIL(nmi=TRUE)OR(interrupt=TRUE)FOR 5s;1.信号量信号量nmi和和interrupt任何一个有一次新的变化;任何一个有一次新的变化;2.信号量信号

25、量nmi和和interrupt任何一个取值为真;任何一个取值为真;3.该语句已等待该语句已等待5s;只要上述只要上述3个条件中一个或多个满足,进程将再次启动,个条件中一个或多个满足,进程将再次启动,继续执行继续执行WAIT语句的后继语句。语句的后继语句。在多条件等待时,表达式的值至少应包含一个信号量的在多条件等待时,表达式的值至少应包含一个信号量的值;只有信号量的变化才能引起等待语句表达式的一次值;只有信号量的变化才能引起等待语句表达式的一次新的评价和计算。新的评价和计算。ARCHITECTURE wait_timeout OF wait_example IS SIGNAL senda:STD

26、_LOGIC:=0;SIGNAL sendb:STD_LOGIC;BEGINA:PRCOESS BEGIN WAIT UNTIL sendb=1;senda=1 after 10 ns;WAIT UNTIL sendb=0;senda=0 after 10 ns;END PROCESS A;B:PRCOESS BEGIN WAIT UNTIL senda=0;sendb=0 after 10 ns;WAIT UNTIL senda=1;sendb=1 after 10 ns;END PROCESS B;END ARCHITECTURE wait_timeout;A:PRCOESS BEGIN

27、WAIT UNTIL(sendb=1)FOR 1 us;ASSERT(sendb=1)REPORT”sendb timed out at 1”SEVERITY ERROR;senda=1 after 10 ns;WAIT UNTIL(sendb=0)FOR 1 us;ASSERT(sendb=0)REPORT”sendb timed out at 0”SEVERITY ERROR;senda=0 after 10 ns;END PROCESS A;7.1.8 NULL语句语句 NULL语句用来表示一种只占位置的空操作,该语句不语句用来表示一种只占位置的空操作,该语句不执行任何操作。执行任何操作

28、。NULL;7.2 并发(并发(Concurrent)描述语句)描述语句 在在VHDL语言中能进行并发处理的语句有:语言中能进行并发处理的语句有:1、进程、进程(PROCESS)语句语句 2、块、块(BLOCK)语句)语句 3、选择信号号代入、选择信号号代入(Selective Signal Assignment)语句)语句4、条件信号代入、条件信号代入(Conditional Signal Assignment)语句语句 5、COMPONENT语句和语句和PORT MAP语句语句6、GENERATE语句语句进程语句是一种并发处理语句进程语句是一种并发处理语句,在一个构造在一个构造体中多个体中

29、多个PROCESS语句可以同时并发运行。语句可以同时并发运行。PROCESS语句是语句是VHDL语言中描述硬件系统并语言中描述硬件系统并发行为的最基本的语句。发行为的最基本的语句。7.2.1 进程进程(PROCESS)语句语句 PROCESS语句归纳起来有如下几个特点语句归纳起来有如下几个特点:(1 1)可以与同一构造体内的其它进程并发执行)可以与同一构造体内的其它进程并发执行 (2 2)可使用构造体内或实体内定义的信号)可使用构造体内或实体内定义的信号 (3 3)进程内部的语句是顺序执行的)进程内部的语句是顺序执行的 (4 4)进程的状态有)进程的状态有2 2个,执行和等待个,执行和等待 (

30、5 5)进程执行的条件是敏感信号列表中的信号)进程执行的条件是敏感信号列表中的信号发生变化或者发生变化或者WAITWAIT语句满足条件语句满足条件 (6 6)进程之间的通信通过信号进行传递)进程之间的通信通过信号进行传递7.2.2 块块(BLOCK)语句语句 BLOCK语句是一个并发语句,而且它所包语句是一个并发语句,而且它所包含的一系列语句也是并发语句,因此块语句中的含的一系列语句也是并发语句,因此块语句中的并发语句的执行与次序无关。并发语句的执行与次序无关。块名:块名:BLOCK 卫式布尔表达式卫式布尔表达式 IS 类属参数说明类属参数说明 类属参数映射类属参数映射 端口说明端口说明 端口

31、映射端口映射 说明语句说明语句 BEGIN 并发描述语句;并发描述语句;END BLOCK 块名块名;BLOCK语句的书写格式一般为语句的书写格式一般为:BLOCK语句的特点:语句的特点:(1)块名是必须要有的,不能省略。)块名是必须要有的,不能省略。(2)BLOCK语句是一个独立的子结构,可以包含语句是一个独立的子结构,可以包含PORT和和GENERIC语句。在构造体的结构描述方式中实语句。在构造体的结构描述方式中实现高层次设计与低层次模块的连接。现高层次设计与低层次模块的连接。(3)说明语句可以是子程序声明或定义、类型定义、常)说明语句可以是子程序声明或定义、类型定义、常数定义、信号定义、

32、数定义、信号定义、COMPONENT元件声明等元件声明等(4)BLOCK内部语句是并发描述语句内部语句是并发描述语句(5)卫式布尔表达式说明了)卫式布尔表达式说明了BLOCK语句的执行条件,语句的执行条件,只有条件为只有条件为“真真”时,时,BLOCK语句才执行。采用卫式语句才执行。采用卫式布尔表达式的布尔表达式的BLOCK语句内部需要使用关键词语句内部需要使用关键词GUARDED控制赋值语句的执行控制赋值语句的执行 一位全加器的一位全加器的BLOCK的描述的描述D触发器的触发器的BLOCK的描述的描述7.2.3 选择信号赋值语句选择信号赋值语句 (Selective Signal Assig

33、nment)WITH 表达式表达式 SELECT目的信号量目的信号量=表达式表达式1 WHEN 条件条件1,表达式表达式2 WHEN 条件条件2,表达式表达式n WHEN条件条件n;7.2.4 条件信号赋值条件信号赋值(Conditional Signal Assignment)语句语句 条件信号赋值语句也是并发描述语句条件信号赋值语句也是并发描述语句,它可以根据不它可以根据不同条件将不同的多个表达式之一的值代入信号量。同条件将不同的多个表达式之一的值代入信号量。目的信号量目的信号量=表达式表达式1 WHEN 条件条件1 ELSE 表达式表达式2 WHEN 条件条件2 ELSE 表达式表达式3

34、 WHEN 条件条件3 ELSE ELSE 表达式表达式n;ARCHITECTURE rtl OF mux4 ISSIGNAL sel:STD_LOGIC_VECTOR(l DOWNTO 0);BEGIN sel=b&a;q=i0 WHEN sel=00 ELSE il WHEN sel=01 ELSE i2 WHEN sel=10 ELSE i3 WHEN sel=11 ELSE X;END ARCHITECTURE rtl;注意几点:注意几点:1、条件信号赋值语句与、条件信号赋值语句与IF语句的不同之处在于语句的不同之处在于,后后者只能在进程内部使用者只能在进程内部使用(因因 为它们是顺序

35、语句为它们是顺序语句)。2、与、与IF语句相比语句相比,条件信号赋值语句中的条件信号赋值语句中的ELSE是是一定要有的一定要有的,而而IF语句则可以有也可以没有。语句则可以有也可以没有。3、与、与IF语句不同的是语句不同的是,条件信号赋值语句不能进行条件信号赋值语句不能进行 嵌套。嵌套。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(il,i2,i3,a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END ENTITY mux;ARCHITECTURE behav OF mux ISSIGNAL sel:

36、INTEGER;BEGIN WITH sel SELECT q=i0 WHEN 0,il WHEN 1,i2 WHEN 2,i3 WHEN 3,X WHEN OTHERS;sel=0 WHEN a=0 AND b=0 ELSE 1 WHEN a=1 AND b=0 ELSE 2 WHEN a=0 AND b=1 ELSE 3 WHEN a=1 AND b=1 ELSE 4;END ARCHITECTURE behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(il,i2,i3,a,b:IN STD_LOGIC;q:OU

37、T STD_LOGIC);END ENTITY mux;ARCHITECTURE behav OF mux ISSIGNAL sel:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN sel=a&b;WITH sel SELECT q q q q qq=X;END CASE;END PROCESS;7.2.5 COMPONENT 语句及语句及PORT MAP 语句语句COMPONENNT 元件名元件名 IS GENERIC 语句;语句;-参数说明参数说明 PORT (端口列表);(端口列表);-端口说明端口说明 END COMPONENT 元件名元件名;在构造体的结构描述中

38、,在构造体的结构描述中,COMPONENT语句是基语句是基本描述语句。该语句指定了本构造体中所调用的是哪一本描述语句。该语句指定了本构造体中所调用的是哪一个现成的逻辑描述模块。个现成的逻辑描述模块。元件标号名:元件名元件标号名:元件名 GENERIC MAP(参数映射列表)(参数映射列表)PORT MAP(端口映射列表)(端口映射列表);元件标号名加在元件名的前面,在该构造体的说明中该元件标号名加在元件名的前面,在该构造体的说明中该标号名一定是唯一的。标号名一定是唯一的。低层元件的端口信号与高层的实际连接信号低层元件的端口信号与高层的实际连接信号PORT MAP的映射关系联系起来。的映射关系联

39、系起来。7.2.5 COMPONENT 语句及语句及PORT MAP 语句语句 7.2.6 GENERATE语句语句 GENERATE语句用来产生多个相同的结构,语句用来产生多个相同的结构,有有FORGENERATE和和IFGENERATE两种形式:两种形式:标号:标号:FOR 变量变量 IN 不连续区间不连续区间 GENERATE ;END GENERATE 标号名标号名;标号:标号:IF 条件条件 GENERATE ;END GENERATE 标号名标号名;7.2.6 GENERATE语句语句 lFORGENERATE和和FORLOOP语句不同,前者的结构中采语句不同,前者的结构中采用并发

40、处理语句,后者是顺序处理语句。所以用并发处理语句,后者是顺序处理语句。所以FORGENERATE结构中不能使用结构中不能使用EXIT和和NEXT语句。语句。lIFGENERATE语句在条件为语句在条件为“真真”时才执行结构内部的语句,时才执行结构内部的语句,语句同样是并发处理的,该结构中没有语句同样是并发处理的,该结构中没有ELSE项。项。GENERATE语句的典型应用场合是生成存储器阵列和寄存器语句的典型应用场合是生成存储器阵列和寄存器阵列等,另一种应用用于仿真状态编译机。阵列等,另一种应用用于仿真状态编译机。d qclkd qclkd qclkd qclkclkaZ(0)DFF X(0)D

41、FF X(1)DFF X(2)DFF X(3)Z(1)Z(2)Z(3)Z(4)b4位移位寄存器原理框图LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift IS PORT(a,clk:IN STD_LOGIC;b:OUT STD_LOGIC);END ENTITY shift;ARCHITECTURE gen_shift OF shift IS COMPONENT dff IS PORT(d,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT dff;SIGNAL z:STD_LOGIC_VECT

42、OR(0 to 4);BEGIN z(0)=a;g1:FOR i in 0 TO 3 GENERATE dffx:dff PORT MAP(z(i),clk,z(i+1);END GENERATE;b=z(4);END ARCHITECTURE gen_shift;dff1:dff PORT MAP(z(0),clk,z(1);dff2:dff PORT MAP(z(1),clk,z(2);dff3:dff PORT MAP(z(2),clk,z(3);dff4:dff PORT MAP(z(3),clk,z(4);从上例可以发现,在移位寄存器的输入端和输从上例可以发现,在移位寄存器的输入端和

43、输出端的信号连接无法用出端的信号连接无法用FORGENERATE语句来语句来实现,只能用两条信号代入语句来完成。也就是实现,只能用两条信号代入语句来完成。也就是说,说,FORGENERATE语句只能处理规则的构语句只能处理规则的构造体。为了解决不规则电路的统一描述方法,就造体。为了解决不规则电路的统一描述方法,就可以采用可以采用IFGENERATE语句语句。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift IS GENERIC(len:INTEGER:=4);PORT(a,clk:IN STD_LOGIC;b:OUT STD_LOGIC

44、);END ENTITY shift;ARCHITECTURE if_shift OF shift IS COMPONENT dff IS PORT(d,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END COMPONENT dff;SIGNAL z:STD_LOGIC_VECTOR(1 to(len-1);BEGINg1:FOR i in 0 TO(len-1)GENERATE g2:IF i=0 GENERATE dffx:dff PORT MAP(a,clk,z(i+1);END GENERATE;g3:IF i=(len-1)GENERATE dffx:dff

45、PORT MAP(z(i),clk,b);END GENERATE;g4:IF(i/=0)AND(i/=len-1)GENERATE dffx:dff PORT MAP(z(i),clk,z(i+1);END GENERATE;END GENERATE;END ARCHITECTURE if_shift;DENAQPRECLRDENAQPRECLRDENAQPRECLRDENAQPRECLRg1:0:g2:dffxg1:1:g4:dffxg1:2:g4:dffxg1:3:g3:dffxaclkb 在在VHDL语言中存在一类语句,根据不同的使用场语言中存在一类语句,根据不同的使用场合,即可以作为

46、顺序执行语句,又可作为并发执行语句,合,即可以作为顺序执行语句,又可作为并发执行语句,在本教材中将该类语句称为顺并描述语句。在本教材中将该类语句称为顺并描述语句。VHDL语言中顺并描述语句主要有:语言中顺并描述语句主要有:u信号赋值语句;信号赋值语句;u过程调用语句;过程调用语句;u断言语句断言语句u报告语句报告语句7.3 顺并描述语句顺并描述语句7.3.1 信号赋值语句信号赋值语句目的信号目的信号=表达式;表达式;信号赋值语句可以在进程中内部使用,此时它作为顺信号赋值语句可以在进程中内部使用,此时它作为顺序语句形式出现;信号赋值语句也可以在构造体的进程序语句形式出现;信号赋值语句也可以在构造

47、体的进程之外使用,此时它作为并发语句出现。之外使用,此时它作为并发语句出现。一个并发信号代入语句实际上是一个进程的缩写;一个并发信号代入语句实际上是一个进程的缩写;ARCHITECTURE beh OF a_var IS BEGIN output=a(i);END ARCHITECUTRE beh;ARCHITECTURE beh OF a_var IS BEGIN PROCESS(a,i)IS BEGIN output=a(i);END PROCESS;END ARCHITECTURRE beh;7.3.1 信号赋值语句信号赋值语句7.3.2 过程调用语句(过程调用语句(Procedure

48、Call)PROCEDURE 过程名(参数过程名(参数1;参数;参数2;)IS 定义语句定义语句;(变量等定义)变量等定义)BEGIN 顺序处理语句顺序处理语句;(过程的语句)(过程的语句)END PROCEDURE 过程名;过程名;在构造体或在构造体或BLOCK语句中的过程调用语句语句中的过程调用语句为并发过程调用语句。如果过程调用语句在进为并发过程调用语句。如果过程调用语句在进程内,则为顺序过程调用语句。程内,则为顺序过程调用语句。过程名(实际参数表);过程名(实际参数表);过程语句的调用格式:过程语句的调用格式:并发过程调用语句实际上是一个过程调用进程的简写。并发过程调用语句实际上是一个

49、过程调用进程的简写。ARCHITECTURE BEGINvector_to_int(z,x_flag,q););END ARCHITECUTURE;ARCHITECTURE BEGIN PROCESS(z,q)IS BEGINvector_to_int(z,x_flag,q););END PROCESS;END ARCHITECTURE;7.3.2 断言(断言(ASSERT)语句)语句ASSERT语句主要用于程序仿真、调试中的人机对话,语句主要用于程序仿真、调试中的人机对话,它可以输出一个文字串作为警告和错误信息它可以输出一个文字串作为警告和错误信息在执行在执行ASSERT语句时,对条件进行判

50、断,如果条件语句时,对条件进行判断,如果条件为为“真真”,则向下执行另一个语句;如果条件为,则向下执行另一个语句;如果条件为“假假”,则输出错误信息和错误严重程度的级别。则输出错误信息和错误严重程度的级别。REPORT后面跟的是设计者所写的文字串,通常说明后面跟的是设计者所写的文字串,通常说明错误的原因,文字串用双引号括起来。错误的原因,文字串用双引号括起来。SEVERITY后面跟的是错误严重程度的级别。后面跟的是错误严重程度的级别。VHDL有有4个级别:个级别:FAILURE、ERROR、WARNING、NOTE。ASSERT 条件条件 REPORT输出信息输出信息SEVERITY级别级别;

51、在构造体或在构造体或BLOCK语句使用的语句使用的ASSERT语句为并发语句为并发ASSERT语句。如果语句。如果ASSERT语句在进程或子程序中使语句在进程或子程序中使用,则为顺序用,则为顺序ASSERT语句。语句。例如:例如:ASSERT(sendB=1)REPORT”sendB timed out at 1”SEVERITY ERROR;7.4并发描述语句的多驱动问题并发描述语句的多驱动问题 VHDL规定,每一个对信号进行赋值的操作都将为该信号创建规定,每一个对信号进行赋值的操作都将为该信号创建一个驱动器,并且对信号的赋值将直接影响该驱动器的值。一个驱动器,并且对信号的赋值将直接影响该驱

52、动器的值。驱动源驱动源:影响驱动器的信号。影响驱动器的信号。一个信号只能有一个驱动源,因此同一信号不能用两条或更多一个信号只能有一个驱动源,因此同一信号不能用两条或更多的并行信号赋值语句进行赋值。的并行信号赋值语句进行赋值。虽然虽然VHDL提供了使用判决函数处理多驱动源问题的机制,但一提供了使用判决函数处理多驱动源问题的机制,但一般在设计具体的逻辑电路时,不允许对同一信号使用多个并发语般在设计具体的逻辑电路时,不允许对同一信号使用多个并发语句进行赋值。句进行赋值。7.4并发描述语句的多驱动问题并发描述语句的多驱动问题 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.A

53、LL;ENTITY muti_driver IS PORT(a:IN STD_LOGIC;b:IN STD_LOGIC;c:OUT STD_LOGIC);END ENTITY multi_driver;ARCHITECTURE rtl OF multi_driver IS BEGIN c=a;ca,此时此时LEFT属性的值通常等于属性的值通常等于LOW的值;的值;当数据类区间用(当数据类区间用(b DOWNTO a)来定义时,)来定义时,ba,此时此时LEFT属性的值则与属性的值则与HIGH的属性值相对应。的属性值相对应。对于整数和实数来说,数值的位置序号值与数本身对于整数和实数来说,数值的位

54、置序号值与数本身的值相等,而对于枚举类型、数组类型等用户自定义的的值相等,而对于枚举类型、数组类型等用户自定义的数据来说,在说明中较早出现的数据,其位置序号值低数据来说,在说明中较早出现的数据,其位置序号值低于较后说明的数据。于较后说明的数据。TYPE tim IS(sec,min,hour,day,month,year);ARCHITECTURE time1 OF time IS TYPE tim IS(sec,min,hour,day,month,year);SUBTYPE revers_tim IS tim RANGE month DOWNTO min;SIGNAL tim1,tim2,

55、tim3,tim4,tim5,tim6,tim7,tim8:TIME;SIGNAL tim9,tim10:BOOLEAN;BEGIN tim1=timLEFT;-得到得到sec tim2=timRIGHT;-得到得到year tim3=timHIGH;-得到得到year tim4=timLOW;-得到得到sec tim5=revers_timLEFT;-得到得到month tim6=revers_timRIGHT;-得到得到min tim7=revers_timHIGH;-得到得到month tim8=revers_timLOW;-得到得到min tim9=timASCENDING;-得到得到

56、TRUE tim10=revers_timASCENDING;-得到得到FALSE END ARCHITECTURE time1;(month,day,hour,min)2.数组数组类型数值属性类型数值属性一般数据的数值属性有以下一般数据的数值属性有以下2种:种:LENGTH(n)得到一个数组的长度值,该属性可用于任何标得到一个数组的长度值,该属性可用于任何标量类数组和多维的标量类区间的数组。当量类数组和多维的标量类区间的数组。当n 缺省时,就代表对一缺省时,就代表对一维数组进行操作。维数组进行操作。ASCENDING(n)得到布尔量。当一个数组按升序定义时,得到布尔量。当一个数组按升序定义时

57、,返回值为返回值为TRUE,否则为,否则为FALSE。标量类型数值属性的书写格式为:标量类型数值属性的书写格式为:数组类型数组类型 属性名属性名PROCESS(a)IS TYPE bit4 IS ARRAY(0 TO 3)OF BIT;TYPE bit_strange IS ARRARY(10 TO 20)OF BIT;VARIABLE len1,len2:INTEGER;BEGIN len1:=bit4LENGTH;-len1=4 len2:=bit_strangeLENGTH;-len2=11END PROCESS;2.数组数组类型数值属性类型数值属性7.5.2 函数属性函数属性所谓函数属

58、性是指以函数的形式,让设计人员得到有关所谓函数属性是指以函数的形式,让设计人员得到有关数据类型或信号等的某些信息。数据类型或信号等的某些信息。当函数属性以表达式形式使用时当函数属性以表达式形式使用时(例如例如POS(x),首先应,首先应指定一个输入的自变量值指定一个输入的自变量值(如如x),函数调用后将得到一个,函数调用后将得到一个返回值。该返回值可能是枚举类型数据的位置序号,也返回值。该返回值可能是枚举类型数据的位置序号,也可能是信号有某种变化的指示,还可能是数组区间中的可能是信号有某种变化的指示,还可能是数组区间中的某一个值。某一个值。函数属性有函数属性有3种:种:离散离散/物理类型的函数

59、属性物理类型的函数属性 数组类型的函数属性数组类型的函数属性 信号的函数属性信号的函数属性1.离散离散/物理类型的函数属性物理类型的函数属性枚举类型、整数类型和物理类型枚举类型、整数类型和物理类型数据类型属性函数可以划分为数据类型属性函数可以划分为6种属性函数:种属性函数:lPOS(x)得到输入得到输入x值得位置序号;值得位置序号;lVAL(x)得到输入位置序号得到输入位置序号x的值;的值;lSUCC(x)得到输入得到输入x值的下一个值;值的下一个值;lPRED(x)得到输入得到输入x值的前一个值;值的前一个值;lLEFTOF(x)得到邻接输入得到邻接输入x值左边的值;值左边的值;lRIGHT

60、OF(x)得到邻接输入得到邻接输入x值右边的值;值右边的值;对于递增区间来说:对于递增区间来说:SUCC(x)=RIGHTOF(x);PRED(x)=LEFTOF(x);对于递减区间来说:对于递减区间来说:SUCC(x)=LEFTOF(x);PRED(x)=RIGHTOF(x);PACKAGE t_time ISTYPE time IS(sec,min,hous,day,month,year);SUBTYPE revers_time IS time RANGE year DOWNTO sec;END t_time;timeSUCC(hous)得到得到day;timePRED(day)得到得到h

61、ous;reverse_timeSUCC(hous)得到得到day;reverse_timePRED(day)得到得到hous;timeRIGHTOF(hous)得到得到day;timeLEFTOF(day)得到得到hous;reverse_timeRIGHTOF(hous)得到得到min;reverse_timeLEFTOF(day)得到得到month;(year,month,day,hous,min,sec)如果一个枚举类型数据的极限值被传递给属性如果一个枚举类型数据的极限值被传递给属性 SUCC和和PRED时,时,y:=sec;x:=timePRED(y);第二个表达式将引起运行错误。这

62、是因为,在枚举数据第二个表达式将引起运行错误。这是因为,在枚举数据time 中,最小值是中,最小值是sec,timePRED(y)要求提供比要求提供比sec更更小的值,已超出了定义范围。小的值,已超出了定义范围。2.数组类型的函数属性数组类型的函数属性 利用数组类型的函数属性可得到数组区间的信息。在利用数组类型的函数属性可得到数组区间的信息。在对数组的每一个元素进行操作时,必须知道数组的区间。对数组的每一个元素进行操作时,必须知道数组的区间。数组属性函数可以分为数组属性函数可以分为4种:种:lLEFT(n)得到索引号为得到索引号为n的区间的左端位置号。的区间的左端位置号。n代表多维数组中所定义

63、的多维区间序号。当代表多维数组中所定义的多维区间序号。当n 缺省时,缺省时,就代表对一维区间进行操作。就代表对一维区间进行操作。lRIGHT(n)得到索引号为得到索引号为n的区间的右端位置号。的区间的右端位置号。lHIGH(n)得到索引号为得到索引号为n的区间的高端位置号。的区间的高端位置号。lLOW(n)得到索引号为得到索引号为n的区间的低端位置号。的区间的低端位置号。递增区间:递增区间:LEFT(n)=LOW(n)RIGHT(n)=HIGHT(n)递减区间:递减区间:LEFT(n)=HIGHT(n)RIGHT(n)=LOW(n)PROCESS(a)IS TYPE bit_range IS

64、ARRAY(31 DOWNTO 0)OF BIT;VARIABLE left_range,right_range,uprange,lowrange:INTEGER;BEGIN left_range:=bit_rangeLEFT;-得到得到31 right_range:=bit_rangeRIGHT;-得到得到0 uprange:=bit_rangeHIGH;-得到得到31 lowrange:=bit_rangeLOW;-得到得到0END PROCESS;PROCESS(a)IS TYPE bit_range IS ARRAY(0 TO 31)OF BIT;VARIABLE left_range

65、,right_range,uprange,lowrange:INTEGER;BEGIN left_range:=bit_rangeLEFT;-得到得到0 right_range:=bit_rangeRIGHT;-得到得到31 uprange:=bit_rangeHIGH;-得到得到31 lowrange:=bit_rangeLOW;-得到得到0END PROCESS;3.信号的函数属性信号的函数属性VHDL语言规定:语言规定:信号的值发生改变称为发生了一个事件。信号的值发生改变称为发生了一个事件。信号的值被重新赋值称为信号被刷新。信号的值被重新赋值称为信号被刷新。信号被刷新不一定产生事件。信号

66、被刷新不一定产生事件。例如:例如:JK触发器当触发器当J=K=1时,触发器输出信号在时时,触发器输出信号在时钟边沿到来时翻转,则认为输出信号发生了一个事件。钟边沿到来时翻转,则认为输出信号发生了一个事件。当当J=K=0时,触发器输出信号在时钟边沿到来时保持,时,触发器输出信号在时钟边沿到来时保持,则认为触发器输出信号被刷新,但是没有事件发生。则认为触发器输出信号被刷新,但是没有事件发生。3.信号的函数属性信号的函数属性信号的函数属性用来得到信号的行为信息。信号的函数属性用来得到信号的行为信息。信号属性函数共有信号属性函数共有5种:种:lsEVENT 如果在当前仿真周期内事件发生了,如果在当前仿真周期内事件发生了,属性是一个为属性是一个为“真真”的布尔量;否则为的布尔量;否则为“假假”;lsACTIVE如果在当前仿真周期内信号被刷新,如果在当前仿真周期内信号被刷新,属性是属性是 一个为一个为“真真”的布尔量,否则为的布尔量,否则为“假假”。lsLAST_EVENT该属性得到一个时间类型的值,该属性得到一个时间类型的值,即从信号的前一个事件发生到现在所经过的时间。即从信号的前一个事件发生到

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!