资源描述
单击此处编辑母版样式,单击此处编辑幻灯片母版样式,第二层,第三层,第四层,第五层,*,情境,3,学习使用流程控制语句,设计时序电路,构造体结构图,构造体,说明语句,功能描述语句,块语句,进程语句,信号赋值语句,子程序调用语句,元件例化语句,进程语句,VHDL,中最重要的语句,具有并行和顺序行为的双重性,进程和进程语句之间是,并行关系,进程内部是一组,连续执行的顺序语句,进程语句与构造体中的其余部分进行信息交流是靠,信号,完成的,进程语句,PROCESS,1,PROCESS,n,signal,signal,ARCHITECTURE,一个构造体可以有多个进程语句,进程和进程之间是并行的,进程和进程之间的数据交换通过信号完成,进程内部是顺序语句,进程语句,基本格式:,进程名称:,PROCESS,(,敏感信号1,敏感信号2,),说明区,BEGIN,顺序语句,END PROCESS,进程名称;,LIBRARY,ieee;,USE,ieee.std_logic_1164.all;,ENTITY,if_case,IS PORT,( a, b, c, d :,IN,Std_Logic;,sel :,IN,Std_Logic_Vector(1 downto 0);,y, z :,OUT,Std_Logic);,END,if_case;,ARCHITECTURE,logic,OF,if_case,IS,BEGIN,if_label:,PROCESS,(a, b, c, d, sel),BEGIN,IF,sel=00,THEN,y = a;,ELSIF,sel=01,THEN,y = b;,ELSIF,sel=10,THEN,y = c;,ELSE,y z z z z ,z = 0;,END CASE,;,END PROCESS,case_label;,END,logic;,进程的运行依赖于敏感表内参数的变化,信号敏感表,进程赖以启动的敏感表。对于表中列出的任何信号的改变,都将启动进程,执行进程内相应顺序语句,一些,VHDL,综合器,综合后,对应进程的硬件系统,对进程中的所有,输入,的信号都是敏感的,不论在源程序的进程中是否把所有的,输入,信号都列入敏感表中,为了使软件仿真与综合后的硬件仿真对应起来,,应当将进程中的所有输入信号都列入敏感表中,敏感表举例,latchlabel:,PROCESS (oe),BEGIN,IF,oe=1,THEN,y = a;,END IF,;,END PROCESS,if_label;,仿真结果,a,oe,y,敏感表举例,latchlabel:,PROCESS,(a),BEGIN,IF,oe=1,THEN,y = a;,END IF,;,END PROCESS,if_label;,仿真结果,顺序语句,每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的,顺序语句只能出现在,进程(,Process),、,函数(,Funcation),和过程(,Procedure),中,顺序语句包括:,赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句,顺序赋值语句举例,ARCHITECTURE,reg1,OF,reg1,IS,SIGNAL,a, b : BIT;,BEGIN,PROCESS,(clk),BEGIN,IF,clkevent and clk=1,THEN,a = d;,b = a;,q = b;,END IF,;,END PROCESS;,END,reg1;,D,Q,d,clk,q,D,D,D,Q,Q,Q,d,a,b,clk,q,D,D,D,Q,Q,Q,d,a,b,clk,q,顺序赋值语句举例,ENTITY,reg1,IS PORT,( d, clk : in BIT;,q : out BIT);,END,reg1;,ARCHITECTURE,reg1,OF,reg1,IS,SIGNAL,a, b : BIT;,BEGIN,PROCESS,(clk),BEGIN,IF,clkevent and clk=1,THEN,a = d;,b = a;,END IF;,END PROCESS;,q = b;,END,reg1;,并行赋值语句,D,Q,d,clk,q,D,D,Q,Q,d,a,clk,q,顺序赋值语句举例,ENTITY,reg1,IS PORT,( d, clk : in BIT;,q : out BIT);,END,reg1;,ARCHITECTURE,reg1,OF,reg1,IS,BEGIN,PROCESS,(clk),VARIABLE,a, b : BIT;,BEGIN,IF,clkevent and clk=1,THEN,a := d;,b := a;,q = b;,END IF;,END PROCESS;,END,reg1;,变量定义,D,Q,d,clk,q,在时序电路中的变量赋值,变量在,IF,语句中被赋值,以用来表示随时钟的变化,不会产生触发器,变量只代表临时存储,不反映实际硬件,变量可用在表示一数据立即变化的表达式中,然后再将变量的值赋给信号,IF_THEN_ELSE,语句,流程控制语句(1),至少应有一个条件句,条件句必须由布尔表达式构成。,根据条件句产生的判断结果,TRUE,或,FALSE,,有条件地选择执行其后的顺序语句。,IF,条件句,Then,顺序语句,END IF,IF,条件句,Then,顺序语句,ELSE,顺序语句,END IF,IF,条件句,Then,顺序语句,ELSIF,条件句,Then,顺序语句,ELSE,顺序语句,END IF,IF_THEN_ELSE,语句举例,mux4_1: PROCESS (a, b, c, d, s),BEGIN,IF s = “00” THEN x = a ;,ELSIF s = “01” THEN x = b ;,ELSIF s = “10” THEN x = c ;,ELSE x = d ;,END IF;,END PROCESS mux4_1 ;,a,x,mux,c,b,d,s,2,library,IEEE;,use,IEEE.std_logic_1164.all;,use,;,use,IEEE.std_logic_unsigned.all;,entity,counter_4,is,port,( clk:,in,STD_LOGIC;,reset:,in,STD_LOGIC;,cen:,in,STD_LOGIC;,load:,in,STD_LOGIC;,dir:,in,STD_LOGIC;,din:,in,STD_LOGIC_VECTOR (3 downto 0);,qout:,buffer,STD_LOGIC_VECTOR (3 downto 0) );,end,counter_4;,architecture,behavioral,of,counter_4,is,begin,process,(clk,reset),begin,if,reset =1,then,qout = “0000”;,elsif,CLKevent and CLK=1,then,if,load=1,then,qout=din;,else,if,cen=1,then,if,dir = 1,then,异步清零,rising_edge(clok),qout = qout +1;,else,qout ,x ,x ,x ,x = d;,END CASE;,END PROCESS,mux4_1;,CASE_WHEN,语句,流程控制语句(2),选择信号,不同选择值,不同流向,CASE_WHEN,语句,流程控制语句(2),选择信号,可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组,条件句中的,选择值,必在表达式的取值范围内。,除非所有条件句中的选择值能完整覆盖,CASE,语句中表达式的取值,否则,最末一个条件句中的选择必须用“,OTHERS”,表示。,CASE,语句中每一条件句的选择值只能,出现一次,不能有相同选择值的条件语,句出现。,CASE,语句执行中必须选中,,且只能选,中所列条件语句中的一条。,CASE_WHEN,语句,流程控制语句(2),
展开阅读全文