《VHDL语法基础》PPT课件.ppt

上传人:牧羊曲112 文档编号:5454326 上传时间:2023-07-08 格式:PPT 页数:76 大小:996.50KB
返回 下载 相关 举报
《VHDL语法基础》PPT课件.ppt_第1页
第1页 / 共76页
《VHDL语法基础》PPT课件.ppt_第2页
第2页 / 共76页
《VHDL语法基础》PPT课件.ppt_第3页
第3页 / 共76页
《VHDL语法基础》PPT课件.ppt_第4页
第4页 / 共76页
《VHDL语法基础》PPT课件.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《《VHDL语法基础》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL语法基础》PPT课件.ppt(76页珍藏版)》请在三一办公上搜索。

1、第3章 VHDL语法基础,3.1 顺序语句3.2 并行语句,3.1 顺序语句,VHDL有两种类型语句:顺序语句和并行语句(并发语句)。顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的。并行语句的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。顺序语句又分两种情况:一种是真正的顺序语句。另一种具有顺序语句与并行语句的双重特性,放在进程、块、子程序之内是顺序语句,被放在进程、块、子程序之外是并行语句。,IF语句是一种条件语句,根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句。条件值是布尔型(TRUE或FALSE)。条件=TRUE,执行THEN后顺序语句,条

2、件全为FALSE时,才会执行ELSE后顺序语句或结束语句END IF。,一、IF语句,IF 条件句 THEN 顺序语句;ELSIF 条件句 THEN 顺序语句;ELSE 顺序语句;END IF;,语句结构:,根据大括号和方括号部分可选情况,共有三种结构。,例1:IF(AB)THEN OUTPUTB)检测结果为TRUE,则向信号OUTPUT赋值1,否则此信号维持原值。,LIBRARY IEEE;ENTITY EXAMPLE IS PORT(A,B,C:IN BOOLEAN;OUTPUT:OUT BOOLEAN);END ENTITY EXAMPLE;ARCHITECTURE ART OF EXA

3、MPLE ISBEGIN PROCESS(A,B,C)IS VARIABLE N:BOOLEAN;BEGIN IF A THEN N:=B;ELSE N:=C;END IF;OUTPUT=N;END PROCESS;END ARCHITECTURE ART;,例2:用IF语句描述图示硬件电路。,此处的库、程序包使用说明是否必要,SIGNA A,B,C,P1,P2,Z:BIT;.IF(P1=1)THENZ=A;-执行条件是(P1=1)ELSIF(P2=0)THENZ=B;-执行条件是(P1=0)AND(P2=0)ELSEZ=C;-执行条件是(P1=0)AND(P2=1)END IF;,例3:由两

4、个2选1多路选择器构成的电路逻辑描述如图所示,其中,当P1和P2为高电平时下端的通道接通。,LIBRARY IEEE;ENTITY CODER ISPORT(SR:IN STD_LOGIC_VECTOR(0 TO 7);SC:OUT STD_LOGIC_VECTOR(0 TO 2);END ENTITY CODER;ARCHITECTURE ART OF CODER ISBEGINPROCESS(SR)ISBEGIN IF(SR(7)=0)THEN SC=000;-(SR(7)=0)ELSIF(SR(6)=0)THEN SC=100;-(SR(7)=1)AND(SR(6)=0)ELSIF(SR

5、(5)=0)THEN SC=010;-(SR(7)=1)AND(SR(6)=1)AND(SR(5)=0),例:,ELSIF(SR(4)=0)THEN SC=110;ELSIF(SR(3)=0)THEN SC=001;ELSIF(SR(2)=0)THEN SC=101;ELSIF(SR(1)=0)THEN SC=011;ELSESC=111;END IF;END PROCESS;END ARCHITECTURE ART;,说明:本例设计的是一个优先级编码器电路,因SR(7)先测试,所以优先级最高。,CASE 表达式 IS WHEN 选择值=顺序语句;WHEN 选择值=顺序语句;WHEN OTHE

6、RS=顺序语句;END CASE;,二、CASE 语句,符号=相当于THEN。执行时,首先计算表达式的值,然后将该值与WHEN中的选择值比较,相同执行对应的顺序语句,否则执行OTHERS 后的顺序语句或结束语句END CASE。语句中的选择值必须列举穷尽,又不能重复。选择值不能列举穷尽时,语句WHEN OTHERS=顺序语句;通常不能缺省。,语句结构:,例:用CASE语句描述4选1多路选择器。,LIBRARY IEEE;ENTITY MUX41 ISPORT(S1,S2:IN STD_LOGIC;A,B,C,D:IN STD_LOGIC;Z:OUT STD_LOGIC);END ENTITY

7、MUX41;ARCHITECTURE ART OF MUX41 ISSIGNA S:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINS=S1&S2;PROCESS(S,A,B,C,D)ISBEGIN,并置运算符号,CASE S IS WHEN 00=ZZZZZ=X;END CASE;END PROCESS;END ARCHITECTURE ART;,注意:本例的第五个条件名是必需的,因为对于定义STD_LOGIC_VECTOR数据类型的S,在VHDL综合过程中,它可能的选择值除了00、01、10和11外,还可以有其他定义于STD_LOGIC的选择值。如果使用BIT_VECT

8、OR数据类型,WHEN OTHERS句子就不必了。,X-强未知的,注:书上的设计描述方法与此处不同。,三、LOOP语句,FOR-LOOP语句:标号:FOR 循环变量 IN 循环次数范围 LOOP 顺序语句 END LOOP 标号;循环变量的值在每一次的循环中都会发生变化。循环次数范围表示循环变量在循环过程中的取值范围,显然FOR模式的循环次数是明确的。,LOOP语句就是循环语句,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定,循环的方式由NEXT和EXIT语句来控制。,例1:利用LOOP语句中的循环变量简化同类顺序语句的表达式的使用。SIGNA A,B,C:STD_L

9、OGIC_VECTOR(1 TO 3);FOR N IN 1 TO 3 LOOP A(N)=B(N)AND C(N);END LOOP;,说明:此段程序等效于顺序执行以下三个信号赋值操作。A(1)=B(1)AND C(1);A(2)=B(2)AND C(2);A(3)=B(3)AND C(3);,例2:FOR-LOOP语句的使用(8位奇偶校验逻辑电路)。LIBRARY IEEE;ENTITY P_CHECK IS PORT(A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Y:OUT STD_LOGIC);END ENTITY P_CHECK;ARCHITECTURE ART

10、 OF P_CHECK IS SIGNAL TMP:STD_LOGIC;BEGIN PROCESS(A)IS BEGIN TMP=0;FOR N IN 0 TO 7 LOOPTMP=TMP XOR A(N);END LOOP;Y=TMP;END PROCESS;END ARCHITECTURE ART;,结果:Y=0 A含偶数个1,Y=1 A含奇数个1。,WHILE-LOOP语句:标号:WHILE 循环控制条件 LOOP 顺序语句 END LOOP 标号;循环控制条件为真执行顺序语句;为假结束循环。显然WHILE模式的循环次数是未知的。,例:WHILE-LOOP语句的使用。SHIFT1:PRO

11、CESS(INPUTX)IS VARIABLE N:POSITIVE:=1;BEGIN L1:WHILE N=8 LOOP-这里的“=”是小于等于的意思 OUTPUTX(N)=INPUTX(N+8);N:=N+1;END LOOP L1;END PROCESS SHIFT1;,说明:在WHILE-LOOP语句的顺序语句中增加了一条循环次数的计算语句,用于循环语句的控制。在循环执行中,当N的值等于9时将跳出循环。,NEXT-LOOP语句NEXT LOOP 标号 WHEN 条件表达式;,NEXT语句是对LOOP语句作有条件或无条件的转向控制。分四种控制:单独NEXT时,跳到本循环LOOP语句开始处

12、。NEXT LOOP 标号,跳转到指定的LOOP标号处。NEXT WHEN 条件,条件值=TRUE,跳到本循环LOOP语句开始处;条件值=FALSE,不执行NEXT,继续向下执行。全不缺省时,条件值=TRUE,跳到指定的LOOP标号处(注意:并不一定是本循环语句的LOOP标号);条件值=FALSE,不执行NEXT,继续向下执行。,例1:L1:FOR CNT IN 1 TO 8 LOOPS1:A(CNT):=0;NEXT WHEN(B=C);S2:A(CNT+8):=0;END LOOP L1;,例2:L1:FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=0;K:=0;L2:

13、LOOP S2:B(k):=0;NEXT L1 WHEN(EF);S3:B(k+8):=0;K:=K+1;END LOOP L2;END LOOP L1;,EXIT-LOOP语句EXIT LOOP 标号 WHEN 条件表达式;,EXIT语句用来结束LOOP语句。分四种控制:单独EXIT时,无条件结束LOOP语句的执行。EXIT LOOP 标号,跳转到指定的LOOP标号处。EXIT WHEN 条件,条件值=TRUE,跳出LOOP语句;条件值=FALSE,继续LOOP循环。全不缺省时,条件值=TRUE,跳出LOOP语句;条件值=FALSE,跳到指定的LOOP标号处。,例:SIGNAL A,B:ST

14、D_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL A_LESS_B:BOOLEAN;A_LESS_B=FLASE;-设初始值FOR I IN 1 DOWNTO 0 LOOPIF(A(I)=1 AND B(I)=0)THENA_LESS _B=FALSE;EXIT;ELSIF(A(I)=0 AND B(I)=1)THENA_LESS _B=TRUE;-ABEXIT;ELSE NULL;END IF;END LOOP;-当I=1时返回LOOP语句继续比较,#金,语句格式:标号 REPORT“输出字符串”SEVERIY 出错级别REPORT语句不增加硬件的任何功能,仿真时可用该语句

15、提高可读性。REPORT语句等价于断言语句。出错级别默认为NOTE。,四、REPORT语句,例:WHILE COUNTER 50 THEN REPORT THE COUNTER IS OVER 50;END IF;END LOOP;,NULL;空操作语句不完成任何操作,它惟一的功能就是使逻辑运行流程跨入下一步语句的执行。NULL常用于CASE语句中,为满足所有可能的条件,利用NULL来表示所余的不用条件下的操作行为。,五、空操作语句(NULL),例:在CASE语句中,NULL用于排除一些不用的条件。CASE OPCODE IS WHEN“001”=TMP:=REGA AND REGB;WHEN

16、“101”=TMP:=REGA OR REGB;WHEN“110”=TMP:=NOT REGA;WHEN OTHERS=NULL;END CASE;,#成,3.2 并行语句,相对于传统的软件描述语言,并行语句结构是VHDL特色。在VHDL中,并行语句具有多种语句格式,各种并行语句在结构体中的执行是同步进行的(并行运行),其执行方式与书写的顺序无关。在执行中,并行语句之间可以有信息往来,也可以是互为独立、互不相关、异步运行(如多时钟情况)。并行语句在结构体中的使用格式如下:,ARCHITECTURE 结构体名 OF 实体名 IS 说明语句;BEGIN 并行语句;END ARCHITECTURE

17、结构体名;,结构体中各种并行语句运行的示意图如下。每一语句模块都可以独立异步运行,模块之间是并行运行,并通过信号来交换信息。在实际编程中这些语句不必同时存在。,其赋值目标必须是信号。信号赋值语句其所有可读入信号是隐性的,任何信号的变化都会启动语句的赋值操作。并行信号赋值语句有三种形式:简单信号赋值语句、条件信号赋值语句和选择信号赋值语句。,二、信号代入语句(并行信号赋值语句),注意:信号赋值用“”符号,两边数据类型的一致。,一、变量赋值语句,目标变量名:=表达式;,简单信号赋值语句 信号赋值目标表达式;,注意:变量赋值用“:=”符号,两边数据类型必须一致。,例:ARCHITECTURE ART

18、 OF XHFZ IS SIGNA S1:STD_LOGIC;BEGIN OUTPUT 1=A AND B;OUTPUT 2=C+D;B1:BLOCK SIGNA E,F,G,H:STD_LOGIC;BEGIN G=E OR F;H=E XOR F;END BLOCK B1;S1=G;END ARCHITECTURE ART,并行语句,并行语句,并行语句,条件信号赋值语句 信号赋值目标 表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE 表达式n WHEN 条件n ELSE 表达式n+1;根据赋值条件的书写顺序逐项测定,一旦发现赋值

19、条件=TRUE,便将对应的表达式的值赋给目标,否则将最后一个表达式的值赋给目标。注:书上有错。,例:Z=A WHEN P1=1 ELSE B WHEN P2=0 ELSE C;,选择信号赋值语句 WITH 选择表达式 SELECT 信号赋值目标 表达式1 WHEN 选择值1 表达式2 WHEN 选择值2 表达式n WHEN 选择值n;表达式n+1 WHEN OTHERS;,每当选择表达式的值发生变化时,将其值与各子句中的选择值作比较,比较结果相等的子句获得赋值资格。不允许有条件重叠现象。也不允许存在条件涵盖不全的情况,否则最后一句不能缺省。不能在进程中使用。,例:下图是一个简化的指令译码器。对

20、应于由A、B、C三个位构成的不同指令码,由DATA1和DATA2输入的两个值将进行不同的逻辑操作,并将结果从DATAOUT输出。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECODER ISPORT(A,B,C:IN STD_LOGIC;DATA1,DATA2:IN STD_LOGIC;DATAOUT:OUT STD_LOGIC);END DECODER;ARCHITECTURE ART OF DECODER IS SIGNAL INSTRUCTION:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN INSTRUCT

21、ION=C&B&A;WITH INSTRUCTION SELECT DATAOUT=DATA1 AND DATA2 WHEN“000”DATA1 OR DATA2 WHEN“001”DATA1 NAND DATA2 WHEN“010”DATA1 NOR DATA2 WHEN“011”DATA1 XOR DATA2 WHEN“100”DATA1 NXOR DATA2 WHEN“101”Z WHEN OTHERS;-当不满足条件时,输出呈高阻态END ARCHITECTURE ART;,进程标号:PROCESS(敏感信号参数表)IS进程说明部分BEGIN顺序描述语句END PROCESS 进程标号

22、:;,三、进程,进程语句(PROCESS),PROCESS各部分使用说明敏感信号参数表:所谓的敏感信号是指其值发生改变时,会引起进程中语句执行的那些信号。敏感信号参数表就是由一个或多个敏感信号来组成。敏感信号的作用就是重新激活进程。,进程说明部分:定义本进程所需的一些局部量,如变量、常数、数据类型、属性、子程序等,但不允许定义信号和共享变量。顺序描述语句:进程中的顺序语句部分是不可缺的,其作用就是描述硬件的行为。PROCESS 语句特点 进程结构内部的所有语句都是顺序执行的。多进程之间是并行执行的,并可访问结构体或实体中所定义的信号。进程启动有两种方式:一种是由敏感信号来触发,另一种也可以用W

23、AIT语句等待一个触发条件的成立。信号敏感表和WAIT语句不能共同存在于一个进程之中。各进程之间的通信由信号来传递。,例1:不含敏感信号表的进程语句ARCHITECTURE ART OF STAT ISBEGINP1:PROCESS IS-该进程未列出敏感信号,进程需靠WAIT语句来启动BEGINWAIT UNTI CLOCK1;-等待CLOCK激活进程IF(DRIVER=1)THEN-当DRIVER为高电平时进入CASE语句CASE OUTPUT ISWHEN S1=OUTPUT OUTPUT OUTPUT OUTPUT=S1;END CASE;END IFEND PROCESS P1;EN

24、D ARCHITECTURE ART;,例2:含敏感信号表的进程语句。SIGNA CNT4:INTEGER RANGE 0 TO 15;-注意CNT4的数据类型.PROCESS(CLK,CLEAR,STOP)IS-该进程定义了3个敏感信号 CLK、CLEAR、STOPBEGIN-当其中任何一个改变时,都将启动进程的运行IF CLEAR=0 THENCNT4=0;ELSIF CLKEVENT AND CLK=1THEN-如果遇到时钟上升沿,则IF STOP=0THEN-如果STOP为低电平,则进行加法计数,否则停止计数CNT4=CNT4+1;END IF;END IF;END PROCESS;,

25、WAIT 语句,WAIT-无限等待WAIT ON 信号表-敏感信号量变化WAIT UNTIL 条件表达式-表达式成立时进程启动WAIT FOR 时间表达式-时间到,进程启动,当遇到WAIT时,运行程序将被挂起(暂停运行),只有满足WAIT中设置的结束挂起条件后,才会继续运行程序。单独WAIT表示永远挂起。WAIT ON 信号表,称为敏感信号等待语句。表中的敏感信号发生变化时,结束挂起,再次启动进程。WAIT UNTIL 条件表达式 属条件等待。当表达式中信号发生改变,并且为TRUE时,结束挂起,执行WAIT之后的语句。此格式可被综合器综合,其它格式只能在仿真器中使用。进程中使用了WAIT语句后

26、,经综合就会产生时序逻辑电路。VHDL规定,已列出敏感量的进程中不能使用WAIT语句。,例1:WAIT ON S1,S2;-S1,S2是敏感信号,其中任一信号发生变化时(如由0变或由1变0),就结束挂起,执行WAIT之后的语句。,例2:以下两种表达方式是等效的。WAITUNTIL结构 WAIT UNTIL ENABLE=1;WAITON结构 LOOP WAIT ON ENABLE EXIT WHEN ENABLE=1;END LOOP,例3:WAIT UNTIL语句的三种表达方式:WAIT UNTI 信号=VALUE;WAIT UNTI 信号EVENT AND 信号=VALUE;WAIT UN

27、TI NOT 信号STABLE AND 信号=VALUE;,注:其中EVENT和STABLE是预定义的信号检测属性函数。,EVENT:测试信号的有事件发生。例如,语句CLOCK EVENT”就是对CLOCK信号,在当前的一个极小的时间段内发生事件的情况进行检测。所谓发生事件,就是电平发生变化,从一种电平方式转变到另一种电平方式。如果在此时间段内,CLOCK由0变成1或由1变成0都认为发生了事件,于是返回一个BOOLEAN值TRUE,否则为FALSE。STABLE:与EVENT恰好相反,测试信号的无事件发生。,如果设CLOCK为时钟信号输入端,以下四条WAIT语句所设的进程启动条件都是时钟上跳沿

28、,它们对应的硬件结构是一样的。WAIT UNTI CLOCK=1;WAIT UNTI CLOCKEVENT AND CLOCK=1;WAIT UNTI NOT CLOCKSTABLE AND CLOCK=1;WAIT UNTI RISING_EDGE(CLOCK);,注:RISING_EDGE是一个预定义的信号上升延测试函数。,例4:设计一个硬件电路,求4个数的平均值。PROCESS BEGIN WAIT UNTIL CLK=1;AVE=A;WAIT UNTIL CLK=1;AVE=AVE+A;WAIT UNTIL CLK=1;AVE=AVE+A;WAIT UNTIL CLK=1;AVE=(A

29、VE+A)/4;END PROCESS;,例5:在一个进程中,有一无限循环的LOOP语句,其中WAIT语句描述了一个具有同步复位功能(时钟到才复位)的电路。PROCESS BEGIN SRT_LOOP:LOOP WAIT UNTIL CLOCK=1 AND CLOCKEVENT;NEXT RST_LOOP WHEN(RST=1);X=A;WAIT UNTIL CLOCK=1AND CLOCKEVENT;NEXT RST_LOOP WHEN(RST=1);Y=A;END LOOP SRT_LOOP;END PROCESS;,块标号:BLOCK(块保护表达式)接口说明类属说明BEGIN并行语句EN

30、D BLOCK 块标号;,四、块语句(BLOCK),BLOCK各部分使用说明块保护表达式 当表达式值=TRUE时,块中驱动源起作用;当表达式值=FALSE时,块中驱动源失去作用。,BLOCK的应用可使结构体层次鲜明,结构明确。利用BLOCK语句可以将结构体中的并行语句划分成多个并列方式的BLOCK,每一个BLOCK都像一个独立的设计实体,具有自己的类属参数说明和界面端口,以及与外部环境的衔接描述。,接口说明和类属说明 类似于实体的定义部分,主要是对BLOCK的接口设置以及与外界信号的连接状况加以说明。通常由PORT、GENERIC、PORT MAP、GENERIC MAP等保留字引出的语句来说

31、明。两说明的适用范围仅限于当前BLOCK,对块外不透明;但对于嵌套于内层的BLOCK是透明的。并行语句 可包含结构体中的任何并行语句。,BLOCK语句在综合中的地位 BLOCK中的类属和端口定义不影响原结构体的逻辑功能的仿真结果。综合器不支持保护式BLOCK(据此不再举例讨论)。块中的定义都是局部量,只适用与当前BLOCK以及对嵌套于内层的BLOCK。,例1:ENTITY GAT IS GENERIC(L_TIME:TIME;S_TIME:TIME);-类属说明PORT(B1,B2,B3:INOUT BIT);-结构体全局端口定义 END ENTITY GAT;ARCHITECTURE ART

32、 OF GAT IS SIGNA A1:BIT;-结构体全局信号A1定义 BEGIN BLK1:BLOCK IS-块定义,块标号名是BLK1GENERIC(GB1,GB2:TIME);-定义块中的局部类属参量GENERIC MAP(GB1=L-TIME,GB2=S-TIME);-局部端口参量设定PORT(PB1:IN BIT;PB2:INOUT BIT);-块结构中局部端口定义POTR MAP(PB1=B1,PB2=A1);-块结构端口连接说明CONSTANT DELAY:TIME:=1 ms;-局部常数定义SIGNA S1:BIT;-局部信号定义BEGINS1=PB1 AFTER DELAY

33、;PB2=S1 AFTER GB1;END BLOCK BLK1;END ARCHITECTURE ART;,B1:BLOCK-定义块B1 SIGNAL S:BIT;-在B1块中定义S BEGIN S=A AND B;-向B1中的S赋值 B2:BLOCK-定义块B2,套于B1块中 SIGNAL S:BIT;-定义B2块中的信号S BEGIN S=C AND D;-向B2中的S赋值 B3:BLOCK BEGIN Z=S;-此S来自B2块 END BLOCK B3;END BLOCK B2;Y=S;-此S来自B1块END BLOCK B1;,例2:三重嵌套块的程序,从此例能很清晰地了解关于块中数据

34、对象的可视性规则。,此例是对嵌套块的语法现象作一些说明,它实际描述的是两个相互独立的2输入与门。,过程语句(PROCEDURE)PROCEDURE 过程名(参数表)IS 说明部分BEGIN顺序语句END PROCEDURE 过程名;,五、过程和过程调用,参数表用来说明过程中使用的常数、变量、信号,并且要指明这些数据对象的工作模式(IN,OUT,INOUT)。说明部分是对过程体内的用到的数据类型、常量、变量等作局部说明。顺序语句用以完成规定算法或各种转换等。过程被调用时,执行的就是这部分语句。,例1:PROCEDURE PRG1(VARIABLE VALUE:INOUT BIT _VECTOR(

35、0 TO 3)ISBEGINCASE VALUE IS WNEN“0000”=VALUE:=“0101”;WNEN“0101”=VALUE:=“0000”;WNEN OTHERS=VALUE:=“1111”;END CASEEND PROCEDURE PRG1;,例2:PROCEDURE COMP(A,R:IN REAL;M:IN INTEGER;V1,V2:OUT REAL)ISVARIABLE CNT:INTEGER;BEGIN V1:=1.6*A;V2:=1.0;Q1:FOR CNT IN 1 TO M LOOP V2:=V2*V1;EXIT Q1 WHEN V2R;END LOOP Q

36、1;ASSERT(V2R);REPORT“OUT OF RANGE”SEVERITY ERROR;END PROCEDURE COMP;,过程调用 过程名(形参名 实参表达式,形参名 实参表达式);,过程名是被调用过程的名字。实参表达式又称实参,为具体数值或标识符。形参名是过程中定义的参数名,在调用时形参被实参替代。形参被实参替代的方法有两种:位置关联法和名字关联法。,例:PACKAGE DATA_TYPES IS TYPE DATA_ELEMENT IS INTEGER RANGE 0 TO 3;TYPE DATA_ARRAY IS ARRAY(1 TO 3)OF DATA _ELEMENT

37、;END DATA_TYPES;USE WORK.DATA_TYPES.ALL;ENTITY SORT IS PORT(IN_ARRAY:IN DATA_ARRAY;OUT_ARRAY:OUT DATA_ARRAY);END SORT;ARCHITECTURE ART OF SORT IS BEGIN PROCESS(IN_ARRAY)PROCEDURE SWAP(DATA:INOUT DATA_ARRAY;LOW,HIGH:IN INTEGER)IS-SWAP的形参名为DATA、LOW、HIGH VARIABLE TEMP:DATA _ELEMENT;,BEGIN IF(DATA(LOW)D

38、ATA(HIGH)THEN TEMP:=DATA(LOW);DATA(LOW):=DATA(HIGH);DATA(HIGH):=TEMP;END IF;END SWAP;VARIABLE MY_ARRAY:DATA_ARRAY;BEGIN MY_ARRAY:=IN_ARRAY;SWAP(MY_ARRAY,1,2);-MY_ARRAY、1、2是对应于DATA、LOW、HIGH的实参 SWAP(MY_ARRAY,2,3);-位置关联法调用,第2、第3元素交换 SWAP(MY_ARRAY,1,2);-位置关联法调用,第1、第2元素再次交换 OUT_ARRAY=MY_ARRAY;END PROCESS

39、;END ART;,函数语句(FUNCTION)FUNCTION 函数名(参数表)RETURN 数据类型 IS 说明部分 BEGIN 顺序语句 END FUNCTION 函数名;,六、函数和函数调用,参数表用于定义输入值,只能是信号或常量,并且无须指定工作模式。RETURN 数据类型指的是返回值数据类型。说明部分是对函数体内的用到的数据类型、常量、变量等作局部说明。顺序语句用以完成规定算法或各种转换等。函数被调用时,执行的就是这部分语句。,函数调用函数调用与过程调用相似,差异是函数的参量只能是输入值,并且返回一个指定数据类型的值。,例:ENTITY FUNC IS PORT(A;IN BIT_

40、VECTOR(0 TO 2);M:OUT BIT_VECTOR(0 TO 2);END FUNC1;ARCHITECTURE ART OF FUNC IS FUNCTION SAM(X,Y,Z:BIT)RETURN BIT IS BEGIN RETURN(X AND Y)OR Z;END FUNCTION SAM;BEGIN PROCESS(A)BEGIN M(0)=SAM(A(0),A(1),A(2);M(1)=SAM(A(2),A(0),A(1);M(2)=SAM(A(1),A(2),A(0);END PROCESS;END ART;,RETURN 表达式;返回语句只能用于子程序(过程、函

41、数)中,结束子程序的执行。RETURN格式,只能用于过程,只是结束过程,不返回任何值。RETURN 表达式格式,只能用于函数,必须返回一个值。表达式提供函数返回值。函数至少含一个返回语句,也可以拥有多个返回语句,但调用时只能有一个返回语句将值带出。,七、返回语句(RETURN),例1:在一过程定义中,完成一个RS触发器的功能。PROCEDURE RS(SIGNAL S,R:IN STD_LOGOC;SIGNAL Q,NQ:INOUT STD_LOGOC)ISBEGIN IF(S=1 AND R=1)THEN REPORT“FORBIDDEN STSTE:S AND R ARE EQUAL TO

42、 1”;RETURN ELSE Q=S AND NQ AFTER 5 ns;NQ=S AND Q AFTER 5 ns;END IF;END PROCEDURE RS;,例2:FUNCTION OPT(A,B,OPT:STD_LOGIC)RETURN STD_LOGIC ISBEGIN IF(OPR=1)THEN RETURU(A AND B);ELSE RETURN(A OR B);END IF;END FUNCTION OPR;,说明:此函数功能是:当OPR为高电平时,返回(A AND B)的值;当OPR为低电平时,返回(A OR B)的值。,ASSERT 条件REPORT报告信息SEVE

43、RITY出错级别;断言语句主要用于程序仿真,调试中的人-机会话。综合器通常忽略此语句。ASSERT语句判断指定的条件是否为TRUE,如果为FALSE则报告错误。报告信息:必须是用“”括起来的字符串类型的文字。出错级别:必须是SEVERITY_LEVEL类型。REPORT子句默认时,报告信息为Assertion Violation,即违背断言条件。若SEVERITY子句默认,默认出错级别为error。任何并行断言语句(ASSERT)都对应等价一个被动进程语句。并行断言语句ASSERT的条件以静态表达式定义时,这个断言语句等价于一个无敏感信号的以WAIT语句结尾的进程。,八、并行断言语句(ASSE

44、RT),例:ASSERT NOT(S=1 AND R=1)REPORT BOTH VALUES OF SIGNALS S AND R ARE EQUA TO1SEVERITY ERROR;,注意:如果出现SEVERITY子句,则该子句一定要指定一个类型为SEVERITY_LEVEL的值。SEVERITY_LEVEL共有如下四种可能的值:NOTE(注意):可以用在仿真时传递信息。WARNING(警告):用在非平常的情形,此时仿真过程仍可继续,但结果可能是不可预知的。ERROR(错误):用在仿真过程继续执行下去已经不可能的情况。FAILURE(失败):用在发生了致命错误,仿真过程必须立即停止的情况

45、。,COMPONENT 元件名 GENERIC(类属表)PORT(元件端口名表)END COMPONENT;,九、元件调用语句(COMPONENT),该语句可用于ARCHITECTURE,PACKAGE,Block的说明部分。元件调用语句又称元件定义语句,其作用是对设计实体进行封装,只留出界面的接口(芯片的引脚)。元件名就是封装芯片的名字。在该语句中间可以有GENERIC语句和PORT语句。GENERIC语句用于该元件参数的代入或赋值。PORT语句用于该元件的输入、输出端口信号的规定。元件端口名表列出对外通信的各端口名(芯片的各引脚名)。,标号名:元件名 PORT MAP(元件端口名连接实体端

46、口名,);,十、端口映射语句(PORT MAP),端口映射语句的作用是为元件配上指定的插座。标号名就是插座名,元件名是由COMPONENT语句定义的。PORT MAP是端口映射的意思。其中的元件端口名是指芯片的引脚;连接实体端口名是指插座的引脚。符号“”表示两脚相连。端口映射的表达方式有两种:一种是名字关联方式,另一种是位置关联方式。在元件的调用过程中,COMPONENT语句和PORT MAP语句都必须存在。,参数传递语句(GENERIC)GENERIC(常数名:数据类型:设定值;常数名:数据类型:设定值;);,十一、参数传递和参数映射语句,注:GENERIC语句在第一章的幻灯中已作过详细的介

47、绍,在此不再重复。,参数映射语句(GENERIC MAP)标号名:元件名 GENERIC MAP(实参1,实参2,实参N);,GENERIC MAP的作用就是参数映射,其中的标号名和元件名与PORT MAP中的含义一样,实参1,实参2,实参N指的是实际参数值,映射的表达方式采用位置关联方式。,例1:设计图示的VHDL描述程序。,方法:首先完成一个2输入与非门的设计,然后用COMPONENT语句和PORT MAP语句对该元件进行调用。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ND2 IS PORT(A,B:IN STD_LOGIC;C:OU

48、T STD_LOGIC);END ND2;ARCHITECTURE ARTND2 OF ND2 IS BEGIN C=A NAND B;END ARCHITECTURE ARTND2;,2输入与非门的设计:,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ORD41 IS PORT(A1,B1,C1,D1:IN STD_LOGIC;Z1:OUT STD_LOGIC);END ORD41;ARCHITECTURE ARTORD41 OF ORD41 IS COMPONENT ND2-元件定义 PORT(A,B:IN STD_LOGIC;C:OUT

49、STD_LOGIC);END COMPONENT;SIGNAL S1,S2:STD_LOGIC;BEGIN U1:ND2 PORT MAP(A1,B1,S1);-位置关联方式 U2:ND2 PORT MAP(A=C1,C=S2,B=D1);-名字关联方式 U3:ND2 PORT MAP(S1,S2,C=Z1);-混合关联方式END ARCHITECTURE ARTORD41;,ENTITY and2 IS GENERIC(rise,fall:TIME);-参数类型说明 PORT(a,b:IN BIT;C:OUT BIT);END and2;ARCHITECTURE generic_exampl

50、e OF and2 IS SIGNAL d:BIT;BEGIN d=a and b;C=d AFTER(rise)WHEN d=1 ELSE d AFTER(fall);END ARCHITECTURE generic_xample;,例2:设计图示的VHDL描述程序。,第一步:2输入与门的设计:,ENTITY generic map_example ISGENERIC(rise,fall:TIME);PORT(d0,d1,d2,d3,:IN BIT;Q:OUT BIT);END generic map_example;ARCHITECTURE and2-3 OF generic map_ex

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号