eda第3章VHDL编程基础.ppt

上传人:小飞机 文档编号:5428641 上传时间:2023-07-06 格式:PPT 页数:161 大小:1.31MB
返回 下载 相关 举报
eda第3章VHDL编程基础.ppt_第1页
第1页 / 共161页
eda第3章VHDL编程基础.ppt_第2页
第2页 / 共161页
eda第3章VHDL编程基础.ppt_第3页
第3页 / 共161页
eda第3章VHDL编程基础.ppt_第4页
第4页 / 共161页
eda第3章VHDL编程基础.ppt_第5页
第5页 / 共161页
点击查看更多>>
资源描述

《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(

26、1 TO 3)OF DTYPE1;END PACKAGE DATA_TYPES;USE WORK.DATA_TYPES.ALL;,定义程序包,打开已定义的程序包,两位二进制的整数,几位?,ENTITY SORT IS PORT(SR:IN DTYPE2;SC:OUT DTYPE2);END SORT;ARCHITECTURE ART OF SORT ISBEGIN PROCESS(SR)IS,PROCEDURE SWAP(DATA:INOUT DTYPE2;LOW,HIGH:IN INTEGER)IS VARIABLE V1:DTYPE1;BEGIN IF(DATA(LOW)DATA(HIGH

27、)THEN V1:=DATA(LOW);DATA(LOW):=DATA(HIGH);DATA(HIGH):=V1;END IF;END PROCEDURE SWAP;,形参,排序,过程,VARIABLE V2:DTYPE2;BEGIN V2:=SR;SWAP(V2,1,2);SWAP(V2,2,3);SWAP(V2,1,2);SC=V2;END PROCESS;END ART;,过程调用,波形仿真:,排序后高位永远最大,2函数调用 函数调用与过程调用是十分相似的,不同之处是,调用函数将返还一个指定数据类型的值,函数的参量只能是输入值。,LIBRARY IEEE;ENTITY func_26 I

28、S PORT(a,b,c:IN bit;dout:OUT bit);END func_26;,ARCHITECTURE one OF func_26 IS FUNCTION opt(x,y,z:bit)RETURN bit IS BEGIN RETURN(x XOR y XOR z);END OPT;BEGIN dout=opt(a,b,c);END one;,形参,只是输入,只返回一个值,注意存放位置,函数调用,注意实参与形参排列顺序须一致。,3.4.5 返回语句(RETURN)返回语句只能用于子程序体中,并用来结束当前子程序体的执行。其语句格式如下:RETURN 表达式;,3.4.6 空操

29、作语句(NULL)语句格式如下:NULL;NULL常用于CASE语句中。,【例3.4.27】CASE OPCODE IS WHEN“001”=TMP:=REGA AND REGB;WHEN“101”=TMP:=REGA OR REGB;WHEN“110”=TMP:=NOT REGA;WHEN OTHERS=NULL;END CASE;,排除不用的条件,【例3.4.33】TYPE ARRY1 ARRAY(0 TO 7)OF BIT;VARIABLE WTH1:INTEGER;WTH1:=ARRY1LENGTH;,4)数组属性 LENGTH,WTH1=8,3.5 VHDL并行语句,并行语句结构是最

30、具VHDL特色的。在VHDL中,并行语句在结构体中的执行是同步进行的,或者说是并行运行的,其执行方式与书写的顺序无关。在执行中,并行语句之间可以有信息往来,也可以是互为独立、互不相关、异步运行的(如多时钟情况)。,图3.13 结构体中的并行语句模块,并行语句主要有七种:信号赋值语句(CONCURRENT SIGNAL ASSIGNMENTS)进程语句(PROCESS)块语句(BLOCK)条件信号赋值语句(CONDITION SIGNAL ASSIGNMENTS)选择信号赋值语句(SELECTED SIGNAL ASSIGNMENTS)元件例化语句(COMPONENT INSTANTIATION

31、S)生成语句(GENERATE)并行过程调用语句(CONCURRENT PROCEDURE CALLS),并行语句在结构体中的使用格式如下:ARCHITECTURE 结构体名 OF 实体名 IS 说明语句;BEGIN 并行语句;END ARCHITECTURE 结构体名;,3.5.1 进程语句 PROCESS是最具VHDL语言特色的语句,具有并行和顺序行为的双重性。进程语句是一种并发处理语句,在一个结构体中多个进程之间是并发关系,即同时处理。而每一个进程的内部却是顺序语句来构成的。,1PROCESS语句格式进程标号:PROCESS(敏感信号参数表)IS 进程说明部分;BEGIN 顺序描述语句;

32、END PROCESS 进程标号;,启动条件,说明数据类型、子程序、变量等,2PROCESS 组成 PROCESS语句结构是由三个部分组成:(1)进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。,(2)顺序描述语句部分可分为:信号赋值语句 变量赋值语句 进程启动语句:WAIT语句。子程序调用语句 顺序描述语句:包括IF、CASE、LOOP和NULL语句等。进程跳出语句:包括NEXT和EXIT语句。,(3)敏感信号参数表需列出启动本进程的输入信号名(当有WAIT语句时例外)。,It is important that th

33、e sensitivity list includes all signals that might cause an output to change.,【例3.5.2】SIGNAL CNT4:INTEGER RANGE 0 TO 15;PROCESS(CLK,CLEAR,STOP)ISBEGIN IF CLEAR=0 THEN CNT4=0;ELSIF CLKEVENT AND CLK=1 THEN IF STOP=0 THEN CNT4=CNT4+1;END IF;END IF;END PROCESS;,敏感信号表,异步清零,判断时钟上升沿,加1计数,补充上面计数器程序:LIBRARY

34、IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY count_2 IS PORT(clk,clear,stop:IN STD_LOGIC;qout:out integer range 0 to 15);END count_2;ARCHITECTURE one OF count_2 IS qout=cnt4;END one;,整数需界定范围,波形仿真:,异步清零,?,计满归零,3进程设计要点(1)进程中只能设置顺序语句。(2)进程的激活必须由敏感信号表或WAIT语句。(3)结构体中多个进程之间的通信是通过传递 信号和共享变量值来实现的。(4)进程是重要的建模工具。,

35、【例3.5.3】LIBRARY IEEE;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLR:IN STD_LOGIC;IN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);OUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY CNT10;,?,ARCHITECTURE ART OF CNT10 IS BEGIN PROCESS(IN1,CLR)IS BEGIN IF(CLR=1 OR IN1=1001)THEN OUT1=“0000”;ELSE OUT1=IN1+1;E

36、NG IF;END PROCESS;END ARCHITECTURE ART;,敏感信号表,有清零信号或计满9,有“+”,须加载运算符,本程序是一个加法器(adder),是组合电路。,清零,【例3.5.4】LIBRARY IEEE;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLR:IN STD_LOGIC;CLK:IN STD_LOGIC;CNT:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY CNT10;,?,?,ARCHITECTURE ART OF CNT10 ISBEGIN P

37、ROCESS IS BEGIN WAIT UNTI CLKEVENT AND CLK=1;IF(CLR=1 OR CNT=9)THEN CNT=“0000”;ELSE CNT=CNT+1;END IF;END PROCESS;END ARCHITECTURE ART;,等待时钟上升沿,同步清零,加载运算符;注意cnt模式,本程序是一个计数器(count),是时序电路。,同步清零,进程之间的通信靠信号。,例:描述如下电路:具有三态输出,异步清零,同步寄存数据的八位寄存器。,八位寄存器,八个三态门构成的输出缓冲器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;E

38、NTITY reg8_oe IS PORT(clk,cr,en,oe:IN STD_LOGIC;data:in std_logic_vector(7 downto 0);q_out:OUT std_logic_vector(7 downto 0);END reg8_oe;ARCHITECTURE rtl OF reg8_oe IS SIGNAL q:std_logic_vector(7 downto 0);BEGIN,中间信号,连接两个进程,p1:PROCESS(clk,cr,en,data)BEGIN IF cr=0 then q=00000000;ELSIF clkEVENT AND cl

39、k=1 THEN IF en=1 THEN q=data;END IF;END IF;END PROCESS P1;,异步清零,同步置数,八位寄存器,oes:PROCESS(oe,q)BEGIN IF oe=0 THEN q_out Z);ELSE q_out=q;END IF;END PROCESS oes;END rtl;,三态缓冲器,连接两个进程,高阻态,寄存器输出,波形仿真:,输出高阻态,异步清零,同步置数,一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,异步时序电路设计用多个时钟进程语句构成。For an asynchronous circuit design,more tha

40、n one processes should be used.,CLK启动,Q1启动,例:描述以下异步电路。,Q1,Q2,-vhdl of asyncronousLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY asyn_2 IS PORT(a,d,clk:IN STD_LOGIC;qd:OUT STD_LOGIC);END asyn_2;,接口界面,ARCHITECTURE ex OF asyn_2 IS SIGNAL q1,q2:STD_LOGIC;BEGIN p1:PROCESS(clk)BEGIN IF clkEVENT AND clk=1

41、 THEN q1=NOT(a OR q2);END IF;END PROCESS p1;,CLK启动,中间信号。也可不设q2,而设qd为buffer。,p2:PROCESS(q1)BEGIN IF q1EVENT AND q1=1 THEN q2=d;END IF;qd=q2;END PROCESS p2;END ex;,进程间的通信,Q1启动,3.5.3 并行信号赋值语句 并行信号赋值语句有三种形式:简单信号赋值语句 条件信号赋值语句 选择信号赋值语句,可作并行语句,也可作顺序语句,只能作并行语句,1.简单信号赋值语句 信号赋值目标=表达式;注意:表达式两边的数据类型必须一致。,例1、用并发

42、赋值语句描述一个四选一数据选择器。,t0,t2,t1,t3,-4:1 MuxplexerLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux_12 IS PORT(d0,d1,d2,d3:IN STD_LOGIC;a1,a0:IN STD_LOGIC;f:out STD_LOGIC);END mux_12;,数据输入端,地址码输入端,ARCHITECTURE rts OF mux_12 IS SIGNAL t0,t1,t2,t3:STD_LOGIC;BEGIN t0=d0 AND(NOT a1)AND(NOT a0);t1=d1 AND(NOT

43、 a1)AND a0;t2=d2 AND a1 AND(NOT a0);t3=d3 AND a1 AND a0;f=t0 OR t1 OR t2 OR t3;END rts;,中间信号,并行语句,执行顺序与书写顺序无关,2条件信号赋值语句赋值目标=表达式1 WHEN 赋值条件1 ELSE 表达式2 WHEN 赋值条件2 ELSE 表达式n;,例2、描述一个四选一数据选择器。,四个数据输入端:D0D3;地址码(两位):B,A;输出端:Q。,-4:1 muxLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux_13 IS PORT(d0,d1,d2

44、,d3,a,b:IN STD_LOGIC;q:OUT STD_LOGIC);END mux_13;,ARCHITECTURE behavel OF mux_20 IS SIGNAL sel:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN sel=b,并置连接成位矢量,STD_LOGIC型,3选择信号赋值语句 WITH 选择表达式 SELECT 赋值目标信号=表达式1 WHEN 选择值1,表达式2 WHEN 选择值2,表达式n WHEN 选择值n;,例4.用选择信号赋值语句描述4:1 MUX。,-4:1 muxLIBRARY IEEE;USE IEEE.STD_LOGIC_

45、1164.ALL;ENTITY mux_14 IS PORT(d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a:IN STD_LOGIC_VECTOR(1 DOWNTO 0);q:OUT STD_LOGIC);END mux_14;,均设为矢量型,ARCHITECTURE behave2 OF mux_14 IS BEGIN WITH a SELECT q=d(0)WHEN 00,d(1)WHEN 01,d(2)WHEN 10,d(3)WHEN 11,Z WHEN OTHERS;END behave2;,选择信号赋值语句,注意书写规范,3.5.5 元件例化语句 元件例化就

46、是将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。元件例化常用于层次化设计,在高层结构体内调用低层元件。,1、元件定义语句COMPONENT 例化元件名 IS GENERIC(类属表);PORT(例化元件端口名表);END COMPONENT 例化元件名;,元件例化语句由两部分组成:,*COMPONENT语句中例化元件名必须与调用元件的实体名一致。*元件的端口说明必须与调用元件中的实体端口说明一致。,2、元件例化语句元件例化名:例化元件名 PORT MAP(例化元件端口名=连接实体端口名,);,

47、注意事项:*元件例化的标号必须是唯一的;*元件名必须与调用的元件实体名一致。,2、名称映射:即将被调用的元件端口说明中的各信号的名称,赋予结构体描述中所使用的信号名。,元件例化的两种映射方法:1、位置映射:即调用的元件端口说明中信号的书写顺序及位置和 PORT MAP 语句右边括号中实际信号的书写顺序及位置一一对应。,例1、调用NAND2(二输入与非门)。COMPONENT nand_2 PORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;,连接符,1.位置映射:U2:nand_2 PORT MAP(i1,i2,o1);,2.名称映射:U2

48、:nand_2 PORT MAP(a=i1,b=i2,c=o1);,底层元件管脚,顶层元件管脚,【例3.5.18】调用三个与非门完成以下电路:,中间信号,首先建立底层元件:LIBRARY IEEE;ENTITY ND2 IS PORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);END ENTITY ND2;ARCHITECTURE ARTND2 OF ND2 ISBEGIN C=A NAND B;END ARTND2;,端口,与非运算,调用底层元件:LIBRARY IEEE;ENTITY ORD41 IS PORT(A1,B1,C1,D1:IN STD_LOGIC;Z

49、1:OUT STD_LOGIC);END ENTITY ORD41;,顶层元件端口,ARCHITECTURE ARTORD41 OF ORD41 IS COMPONENT ND2 IS PORT(A,B:IN STD_LOGIC;C:OUT STD_LOGIC);END COMPONENT ND2;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 ARTORD41;,标号,调用

50、底层元件名,位置映射,名字映射,混合映射,例、调用8位寄存器构成16位寄存器。(练习总线连接),LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY reg_16 IS PORT(d:IN STD_LOGIC_VECTOR(0 TO 15);rst,ld,cp:IN STD_LOGIC;q:OUT STD_LOGIC_VECTOR(0 TO 15);END reg_16;,位宽,顶层接口界面,ARCHITECTURE str OF reg_16 IS COMPONENT reg_25 PORT(d:IN STD_LOGIC_VECTOR(0 TO 7)

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号