eda第3章VHDL编程基础.ppt
《eda第3章VHDL编程基础.ppt》由会员分享,可在线阅读,更多相关《eda第3章VHDL编程基础.ppt(161页珍藏版)》请在三一办公上搜索。
1、第3章 VHDL编程基础,3.4 VHDL顺序语句 3.5 VHDL并行语句,3.4 VHDL顺序语句,VHDL语句:顺序语句(Sequentia Statements)并行语句(Concurrent Statements),顺序语句包括:,*EXIT 语句,*赋值语句,*IF 语句,*CASE 语句,*LOOP 语句,*NEXT 语句,*NULL 语句(空操作语句),*RETURN 语句(返回语句),*子程序调用语句,*WAIT 语句(等待语句),转向控制语句,顺序语句只能出现在进程(Process)和子程序中。在VHDL中,一个进程是由一系列顺序语句构成的,而进程本身属并行语句。子程序本身
2、并无顺序和并行语句之分。,PROCESS语句格式:进程标号:PROCESS(敏感信号表)IS 进程说明部分;BEGIN 顺序描述语句;END PROCESS 进程标号;,启动条件,说明数据类型、子程序、变量等,It is important that the sensitivity list includes all signals that might cause an output to change.,3.4.1 赋值语句 赋值语句有两种:信号赋值语句(Signal Assignment)变量赋值语句(Variable Assignment),1信号和变量赋值 变量赋值与信号赋值的区别在
3、于:变量是一个局部量,只局限于进程内或子程序。变量赋值是立即发生。信号是全局量,代表硬件连接线。赋值总有延时性。,语法格式如下:变量赋值目标:=赋值源;信号赋值目标=赋值源;,【例3.4.1】SIGNAL S1,S2:STD_LOGIC;SIGNAL SVEC:STD_LOGIC_VECTOR(0 TO 7);.PROCESS(S1,S2)IS VARIABLE V1,V2:STD_LOGIC;,信号,进程,变量,敏感信号表,BEGIN V1:=1;V2:=1;S1=1;S2=1;SVEC(0)=V1;SVEC(1)=V2;SVEC(2)=S1;SVEC(3)=S2;,变量赋值,信号赋值,V1
4、:=0;V2:=0;S2=0;SVEC(4)=V1;SVEC(5)=V2;SVEC(6)=S1;SVEC(7)=S2;END PROCESS;,结果:SVEC=?,结果:SVEC=“11100010”,S2两次赋值,2赋值目标 赋值语句中的赋值目标有四种类型。1)标识符赋值目标及数组单元素赋值目标 标识符赋值目标是以简单的标识符作为被赋值的信号或变量名。数组单元素赋值目标的表达形式为:数组类信号或变量名(下标名),例如:V1,V2,S1,S2,SVEC(0),SVEC(5)等,2)段下标元素赋值目标及集合块赋值目标 段下标元素赋值目标的表达形式为:数组类信号或变量名(下标1 TO/DOWNTO
5、 下标2),例如:SVEC(0 TO 3)=“1110”;SVEC(4 TO 6)=“001”;SVEC(7)=0;,集合块赋值目标是以一个集合的方式来赋值。位置关联赋值方式 名字关联赋值方式,【例】SIGNAL A,B,C,D:STD_LOGIC;SIGNAL S:STD_LOGIC_VECTOR(1 TO 4);.VARIABLE E,F:STD_LOGIC;VARIABLE G:STD_LOGIC_VECTOR(1 TO 2);VARIABLE H:STD_LOGIC_VECTOR(1 TO 4);,S E,4=F,2=G(1),1=G(2):=H;,位置关联方式赋值,名字关联方式赋值,
6、S=“0100”,结果:A=0;B=1;C=0;D=0;G(2):=H(1);G(1):=H(2);E:=H(3);F:=H(4);,3.4.2 转向控制语句 转向控制语句共有五种:IF 语句 CASE 语句 LOOP语句 NEXT 语句 EXIT 语句,IF 条件句 THEN 顺序语句;ELSIF 条件句 THEN 顺序语句;ELSE 顺序语句;END IF;,1IF语句 IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句,其语句结构如下:,例1 用IF_THEN 语句描述一个D触发器。,数据输入端:D;时钟输入端:CLK;输出端:Q。,-VHDL of
7、dffLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff_1 IS PORT(d,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END dff_1;,库说明,程序包说明,实体,ARCHITECTURE str OF dff_1 IS BEGIN PROCESS(clk)BEGIN IF(clk EVENT AND clk=1)THEN q=d;END IF;END PROCESS;END str;,clk的上升沿,结构体,进程,不完全描述构成D触发器,波形仿真:,q=d,clk上升沿有效,例2 用IF_THEN 语句描述
8、一个D锁存器。,ARCHITECTURE rtl OF latch_1 IS BEGIN PROCESS(clk,d)BEGIN IF clk=1 THEN q=d;END IF;END PROCESS;END rtl;,敏感信号表,锁存器与触发器的区别,波形仿真:,q=d,clk=1期间有效,【例3】LIBRARY IEEE;ENTITY EXAMPLE IS PORT(A,B,C:IN BOOLEAN;OUTPUT:OUT BOOLEAN);END ENTITY EXAMPLE;,ARCHITECTURE ART OF EXAMPLE ISBEGIN PROCESS(A,B,C)IS VA
9、RIABLE N:BOOLEAN;BEGIN IF A THEN N:=B;ELSE N:=C;END IF;OUTPUT=N;END PROCESS;END ART;,敏感信号表,变量说明位置,变量是局部量,借助信号带出进程,例3对应的硬件电路如图所示。,结果:,【例3】也可这样描述。LIBRARY IEEE;ENTITY EXAMPLE IS PORT(A,B,C:IN BIT;OUTPUT:OUT BIT);END EXAMPLE;,ARCHITECTURE ART OF EXAMPLE IS SIGNAL T1,T2:BIT;BEGIN T1=A AND B;T2=NOT(A)AND
10、C;OUTPUT=T1 OR T2;END ART;,中间信号,例4 描述一个由两个2选1 数选器构成的电路。,-VHDL of 2muxLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21_2 IS PORT(a,b,c,p1,p2:IN STD_LOGIC;z:OUT STD_LOGIC);END mux21_2;,接口界面描述,ARCHITECTURE rt OF mux21_2 ISBEGIN PROCESS(a,b,c,p1,p2)IS BEGIN IF(p1=1)THEN z=a;ELSIF(p2=0)THEN z=b;ELSE
11、 z=c;END IF;END PROCESS;END rt;,p1=1,p1=0,p2=0,p2=1,波形仿真:,p1=1,z=a,p1=0,p2=0,则 z=b,p1=0,p2=1,则 z=c,例5 描述8线3线优先编码器,优先级别,SR:输入8线,低电平有效,其中SR(7)权限最高。SC:输出3线,反码输出。,高,真值表:,【例5】LIBRARY IEEE;ENTITY CODER IS PORT(SR:IN STD_LOGIC_VECTOR(0 TO 7);SC:OUT STD_LOGIC_VECTOR(0 TO 2);END ENTITY CODER;ARCHITECTURE ART
12、 OF CODER ISBEGIN,均设为位矢量,PROCESS(SR)IS BEGIN IF(SR(7)=0)THEN SC=“000”;ELSIF(SR(6)=0)THEN SC=“100”;ELSIF(SR(1)=0)THEN SC=“011”;ELSE SC=111;END IF;END PROCESS;END ARCHITECTURE ART;,IF为顺序语句,因此优先级别高的排在前面。,波形仿真:,SR(7)有请求,优先编码,2.CASE 语句 多条件的选择的顺序语句。CASE语句的结构如下:CASE 表达式 IS WHEN 选择值1=顺序语句1;WHEN 选择值2=顺序语句2;W
13、HEN OTHERS=顺序语句n+1;END CASE;,then,IF 语句一般用于分支少的情况,执行逐项比较;CASE 语句一般用于分支多的情况,执行更接近 并行方式,次序并不重要。,CASE选择值:(1)单个数值,如2;(2)数值选择范围,如(2 TO 4);(3)并列数值,如35;(4)混合方式。,使用CASE语句需注意以下几点:(1)选择值必须在表达式的取值范围内。(2)CASE语句中的条件必须穷举,不能重复。不能穷举的条件用others表示。(3)CASE语句中每一条语句的选择只能出现一次,不能有相同选择值的条件语句出现。(4)CASE语句中至少要包含一个条件语句。,【例1】用CA
14、SE语句描述4选1多路选择器。,4:1MUX真值表:,LIBRARY IEEE;ENTITY MUX41 IS PORT(S1,S2:IN STD_LOGIC;A,B,C,D:IN STD_LOGIC;Z:OUT STD_LOGIC);END ENTITY MUX41;,接口界面,ARCHITECTURE ART OF MUX41 IS SIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN S=S1&S2;PROCESS(S,A,B,C,D)IS BEGIN,中间信号,只在此结构体可见,并置,CASE S IS WHEN 00“=Z Z Z ZZ=X;END
15、CASE;END PROCESS;END ARCHITECTURE ART;,例2 描述一个4选1数选器,实现下表功能。,LIBRARY IEEE;ENTITY MUX41 IS PORT(S4,S3,S2,S1:IN STD_LOGIC;Z4,Z3,Z2,Z1:OUT STD_LOGIC);END ENTITY MUX41;,4个输入,4个输出,ARCHITECTURE ART OF MUX41 IS SIGNAL T:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL temp:integer range 0 to 15;BEGIN T=S4,界定范围,并置,PROCE
16、SS(T)IS BEGIN CASE T IS WHEN 0000=temptemptemptemp=0;END CASE;,二进制与十进制的转换,Z1 Z1 Z2 Z3 Z4=1;END CASE;END PROCESS;END ARCHITECTURE ART;,赋予初始值,3.LOOP语句 实现迭代的循环语句。,主要形式:FOR _ LOOP:用于循环变量已知 WHILE _ LOOP:用于循环变量未知,FOR _ LOOP书写格式:标号:FOR 循环变量 IN 取值范围 LOOP END LOOP 标号;,WHILE _ LOOP书写格式:标号:WHILE 条件 LOOP 顺序处理语句
17、;END LOOP 标号;,Maxplus不支持WHILE_LOOP语句。,【例1】用VHDL描述一个8位奇偶校验逻辑电路。利用异或操作实现。,例:0 0 1 1 0 0 0 1,0,初值,终值,1,1,0,0,0,0,0,0,LIBRARY IEEE;ENTITY P_CHECK IS PORT(A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Y:OUT STD_LOGIC);END P_CHECK;,8位输入,ARCHITECTURE ART OF P_CHECK IS-SIGNAL TMP:STD_LOGIC;BEGIN PROCESS(A)IS VARIABLE t
18、mp:STD_LOGIC;BEGIN,注意信号和变量的申明位置,TMP:=0;FOR N IN 0 TO 7 LOOP TMP:=TMP XOR A(N);END LOOP;Y=TMP;END PROCESS;END ARCHITECTURE ART;,赋初值,不能用信号?,变量是局部量,借助信号带出进程,仿真波形:,输入奇数个1,输出为1。,输入偶数个1,输出为0。,【例2】利用LOOP语句中的循环变量简化同类顺序语句的表达式的使用。SIGNAL A,B,C:STD_LOGIC_VECTOR(1 TO 3);FOR N IN 1 TO 3 LOOP A(N)=B(N)AND C(N);END
19、 LOOP;,能用信号?,相当于执行3次操作:A(1)=B(1)AND C(1);A(2)=B(2)AND C(2);A(3)=B(3)AND C(3);,可以,LOOP语句中的跳转语句:,NEXT 语句EXIT 语句,4NEXT 语句 语句格式:NEXT LOOP 标号 WHEN 条件表达式;,当LOOP 标号缺省时,则无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下一次循环;否则跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。若WHEN子句出现并且条件表达式的值为TRUE,则进入跳转操作,否则继续向下执行。,【例1】L1:FOR CNT IN 1 TO 8 LOOP
20、 S1:A(CNT):=0;NEXT WHEN(B=C);S2:A(CNT+8):=0;END LOOP L1;,若B=C,则返回到L1;若BC,则执行S2语句。,5EXIT语句 语句格式如下:EXIT LOOP 标号 WHEN 条件表达式;,EXIT与NEXT 语句的格式和操作功能非常相似,惟一的区别是:NEXT语句是跳向LOOP 语句的起始点;EXIT语句则是跳向LOOP语句的终点。,【例1】SIGNAL A,B:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL A_LESS _B:BOOLEAN;A_LESS_THEN_B=FLASE;FOR I IN 1 DOWN
21、TO 0 LOOP IF(A(I)=1 AND B(I)=0)THEN A_LESS_B=FALSE;EXIT;,赋初值,AB,结果明确,退出LOOP,ELSIF(A(I)=0 AND B(I)=1)THEN A_LESS_B=TRUE;EXIT;ELSE NULL;END IF;END LOOP;-当I=1时返回LOOP语句继续比较,AB,3.4.3 WAIT 语句 在进程中(包括过程中),当执行到WAIT语句时,程序将被挂起(Suspension),直到满足条件后,将重新开始执行程序。,在PROCESS中,不能同时有敏感信号表和 wait 语句。如:PROCESS(A,B,C)IS BEG
22、IN END PROCESS;,敏感信号表,WAIT语句的格式:WAIT ON 信号表 UNTIL 条件表达式 FOR 时间表达式;单独的WAIT,即未设置停止挂起条件,表示永远挂起。,“WAIT ON 信号表”称为敏感信号等待语句。如:WAIT ON S1,S2;程序执行到此被挂起,直到S1,S2有其一变化,结束挂起,再次启动进程。,process(a,b)begin y=a and b;end process;,process begin y=a and b;wait on a,b;end process;,等同于,书写位置不同,“WAIT UNTIL 条件表达式”称为条件等待语句。程序执
23、行到此被挂起,直到条件表达式为真时,结束挂起,再次启动进程。,WAIT UNTIL语句三种表达方式:WAIT UNTIL 信号=VALUE;-WAIT UNTIL 信号EVENT AND 信号=VALUE;-WAIT UNTIL NOT 信号STABLE AND 信号=VALUE;-,如果设clock为时钟信号输入端,以下四种方式都是描述时钟上升沿:,WAIT UNTIL clock=1;WAIT UNTIL RISING_EDGE(clock);WAIT UNTIL NOT clockSTABLE AND clock=1;WAIT UNTIL clockEVENT AND clock=1;,
24、例:描述一个D触发器。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF_2 IS PORT(d,clk:IN STD_LOGIC;q:OUT STD_LOGIC);END ENTITY DFF_2;,ARCHITECTURE two OF dff_2 ISBEGIN PROCESS IS BEGIN WAIT UNTIL clkEVENT AND clk=1;q=d;END PROCESS;END two;,没有敏感信号表,在进程中使用,ARCHITECTURE two OF dff_2 IS BEGIN PROCESS(clk)BEGI
25、N IF clkEVENT AND clk=1 THEN q=d;END IF;END PROCESS;END two;,等同于敏感信号表.,等效WAIT UNTIL,3.4.4 子程序调用语句 在进程中允许对子程序进行调用。子程序包括过程和函数。,1过程调用 语句格式如下:过程名(形参名=实参表达式,形参名=实参表达式);其中,括号中的实参表达式称为实参,它可以是一个具体的数值,也可以是一个标识符,是当前调用程序中过程形参的接受体。,【例3.4.24】PACKAGE DATA_TYPES IS TYPE DTYPE1 IS RANGE 0 TO 3;TYPE DTYPE2 IS ARRAY(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda VHDL 编程 基础
链接地址:https://www.31ppt.com/p-5428641.html