1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,3 VHDL,语言,VHDL:VHSIC Hardware Description Language.,3.1 VHDL,语言基础,3.2 VHDL,基本结构,3.3 VHDL,语句,3.4,状态机在,VHDL,中的实现,3.5,常用电路,VHDL,程序,3.6 VHDL,仿真,3.7 VHDL,综合,1,HDL-Hardware Description Language,一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。,优
2、点:,HDL,设计的电路能获得非常抽象级的描述。如基于,RTL(Register Transfer Level),描述的,IC,,可用于不同的工艺。,HDL,设计的电路,在设计的前期,就可以完成电路的功能级的验证。,HDL,设计的电路类似于计算机编程。,常用的,HDL,语言:,VHDL,、,Verilog HDL,2,VHDL,是美国国防部在,20,世纪,80,年代初为实现其高速集成电路硬件,VHSIC,计划提出的描述语言,;,IEEE,从,1986,年开始致力于,VHDL,标准化工作,融合了其它,ASIC,芯片制造商开发的硬件描述语言的优点,于,93,年形成了标准版本(,IEEE.std_1
3、164,)。,1995,年,我国国家技术监督局推荐,VHDL,做为电子设计自动化硬件描述语言的国家标准。,VHDL,概述:,VHDL,VHSIC Hardwarter Description Language,Very High speed integrated circuit,VHSIC,3,覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言,;,VHDL,语言具有良好的可读性,既可以被计算机接受,也容易被人们所理解,;,VHDL,语言可以与工艺无关编程,;,VHDL,语言已做为一种,IEEE,的工业标准,便于使用、交流和推广。,VHDL,语言的不足之处,:,VHDL,优点,:,设计的
4、最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。,4,3.1.1,标识符,(,Identifiers,),要求:,首字符必须是字母,末字符不能为下划线,不允许出现两个连续的下划线,不区分大小写,VHDL,定义的保留字(关键字),不能用作标识符,标识符字符最长可以是,32,个字符。,注释由两个连续的虚线()引导。,3.1 VHDL,语言基础,标识符用来定义常数、变量、信号、端口、子程序或参数的名字,,由字母,(,AZ,,,az,),、数字,(,09,),和下划线,(,_,),字符组成。,5,例如:,ABS,,,ACCESS,,,AFTER,,,ALL,,,AND,,,ARCH
5、ITECTURE,,,ARRAY,,,ATTRIBUTE,,,BEGIN,,,BODY,,,BUFFER,,,BUS,,,CASE,,,COMPONENT,,,CONSTANT,,,DISCONNECT,,,DOWNTO,,,ELSE,,,ELSIF,,,END,,,ENTITY,,,EXIT,,,FILE,,,FOR,,,FUNCTION,,,GENERIC,,,GROUP,,,IF,,,INPURE,,,IN,,,INOUT,,,IS,,,LABEL,,,LIBRARY,,,LINKAGE,,,LOOP,,,MAP,,,MOD,,,NAND,,,NEW,,,NEXT,,,NOR,,,NOT
6、NULL,,,OF,,,ON,,,OPEN,,,OR,,,OTHERS,,,OUT,,,PACKAGE,,,POUT,,,PROCEDURE,,,PROCESS,,,PURE,,,RANGE,,,RECODE,,,REM,,,REPORT,,,RETURN,,,ROL,,,ROR,,,SELECT,,,SHARED,,,SIGNAL,,,SLA,,,SLL,,,SRA,,,SUBTYPE,,,THEN,,,TRANSPORT,,,TO,,,TYPE,,,UNAFFECTED,,,UNITS,,,UNTIL,,,USE,,,VARIABLE,,,WAIT,,,WHEN,,,WHILE,,,
7、WITH,,,XOR,,,XNOR,关键字(保留字):,关键字(,keyword,)是,VHDL,中具有特别含义的单词,只能做为固定的用途,用户不能用其做为标识符。,6,3.1.2,数据对象,(,Date Objects,),常量,Constant,Constant bus_width,:,integer:=,8;,-,定义总线宽度为常数,8,数据对象包括常量、变量、信号和文件四种类型。,常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。,Constant,常数名:数据类型:表达式,Constant,Vcc,:,real:=5.0
8、定义,Vcc,的数据类型是实数,赋值为,5.0V,常量所赋的值应和定义的数据类型一致;,常量在程序包、实体、构造体或进程的说明性区域内必须加以说明。定义在程序包内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该实体内可见,定义在进程说明性区域中的常量只能在该进程内可见。,7,Variable,变量名:数据类型,:,初始值,;,Variable count:integer 0 to 255:=20,;,-,定义,count,整数变量,变化,范围,0,255,,初始值为,20,。,变量,Variable,变量只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是直
9、接的,非预设的,分配给变量的值立即成为当前值,变量不能表达“连线”或存储元件,不能设置传输延迟量。,变量赋值语句:,目标变量名,:=,表达式,;,变量定义语句:,x:=10.0;,-,实数变量赋值为,10.0,Y:=1.5+x;,-,运算表达式赋值,注意表达式必须与目标变量的数据类型相同,A(3 to 6):=(“1101”);,-,位矢量赋值,8,Signal,信号名,:,数据类型,:,初始值,Signal clock,:,bit,:=,;,-,定义时钟信号类型,初始值为,0,信号,Signal,信号表示逻辑门的输入或输出,类似于连接线,也可以表达存储元件的状态。信号通常在构造体、程序包和实
10、体中说明。,信号定义语句:,Signal count,:,BIT_VECTOR(3 DOWNTO 0);,-,定义,count,为,4,位位矢量,信号赋值语句:,目标信号名,=,表达式,;,x=9;,Z0,1|H=1,others=0);,Signal a:bit;signal b:std_logic;,A=table(b);,-,将,std_logic,型转换为,bit,型,具有转换表性质的常数,15,在“,STD_LOGIC_1164”,、“,STD_LOGIC_ARITH”,和 “,STD_LOGIC_UNSIGNED”,的程序包中提供的数据类型变换函数。,16,属性,属性提供的是关于信
11、号、类型等的指定特性。,event,:,若属性对象有事件发生,则生成布尔值“,true”,,常用来检查时钟边沿是否有效。,上升沿:,Clock EVENT AND Clock=1,range,:,生成一个限制性数组对象的范围,left,:,生成数据类型或数据子类型的左边界值;,right,high,low,length,range:“0 to n”,;,reverse_range,:“,n downto 0”,17,运算符,算术运算符:,,*,,/,,,MOD,,,REM,,,SLL,,,SRL,,,SLA,,,SRA,,,ROL,,,ROR,,*,,ABS,关系运算符:,,,/,,,,,=,
12、逻辑运算符:,AND,,,OR,,,NAND,,,NOR,,,XNOR,,,NOT,,,XOR,赋值运算符:,其他运算符:,,,&,18,并置操作符,SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);,SIGNAL d:STD_LOGIC_VECTOR(1 DOWNTO 0);,.,a =1,0,d(1),1 ;,-,元素与元素并置,并置后的数组长度为,4,.,IF a,d=101011 THEN.-,在,IF,条件句中可以使用并置符,19,运算符优先级别,逻辑、算术运算符(,NOT,,*,,ABS,),乘法运算符(,/,,,MOD,,,REM,,*),正负运算符:,
13、加减、并置运算符:,,&,关系运算符:,,/,,,,,=,逻辑运算符:,AND,,,OR,,,NAND,,,NOR,,,XNOR,,,NOT,,,XOR,20,移位运算符的左边为一维数组,其类型必须是,BIT,或,BOOLEAN,,右边必须是整数移位次数为整数的绝对值。,移位运算符操作示意图,“1100”SLL1=“1000”“1100”SRL1=“0110”“1100”SLA1=“1000”“1100”SRA1=“1110”“1100”ROL1=“1001”“1100”ROR1=“0110”,SLL,:将位向量左移,右边移空位补零;,SRL,:将位向量右移,左边移空位补零;,SLA,:将位
14、向量左移,右边第一位的数值保持原值不变;,SRA,:将位向量右移,左边第一位的数值保持原值不变;,ROL,和,ROR,:自循环左右移位。,21,取余运算(,a REM b,)的符号与,a,相同,其绝对值小于,b,的绝对值。,例如:(,-5,),REM 2=,(,-1,),5 REM 2=,(,1,),取模运算(,a MOD b,)的符号与,b,相同,其绝对值小于,b,的绝对值。,例如:(,-5,),MOD 2=1 5 MOD(-2)=,(,-1,),22,3.2 VHDL,基本结构,实体(,Entity,):描述所设计的系统的外部接口信号,定义电路设计中所有的输入和输出端口;,结构体,(,Ar
15、chitecture,),:描述系统内部的结构和行为;,包集合,(,Package,),:存放各设计模块能共享的数据类型、常数和子程序等;,配置,(,Configuration,),:指定实体所对应的结构体;,库,(,Library,),:存放已经编译的实体、结构体、包集合和配置。,23,LIBRARY IEEE;,-,库、程序包的说明调用,USE IEEE.Std_Logic_1164.ALL;,ENTITY FreDevider IS,-,实体声明,PORT,(Clock:IN Std_logic;,Clkout:OUT Std_logic,);,END;,ARCHITECTURE Beh
16、avior OF FreDevider IS,-,结构体定义,SIGNAL Clk:Std_Logic;,BEGIN,PROCESS(Clock),BEGIN,IF rising_edge(Clock)THEN,Clk=NOT Clk;,END IF;,END PROCESS;,Clkout=Clk;,END;,VHDL,的基本设计单元结构:程序包说明、实体说明和结构体说明三部分。,24,3.2.1,实体(,Entity,),ENTITY,实体名,IS,GENERIC,(常数名:数据类型:设定值),PORT,(,端口名,1,:端口方向 端口类型;,端口名,2,:端口方向 端口类型;,.,.,端
17、口名,n,:端口方向 端口类型,),;,END,实体名,;,实体描述了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。,25,ENTITY FreDevider IS,PORT,(Clock:IN Std_logic;,Clokout:OUT Std_logic,);,END;,实体名,最后一条端口声明语句无分号,端口方向,端口类型,端口名,实体名,由设计者自由命名,用来表示被设计电路芯片的名称,但是必须与,VHDL,程序的文件名称相同。,要与文件名一致;,26,例如:,GENERIC,(,wide,:,integer:=32,);,-,说明宽度为,32,GENERIC
18、tmp,:,integer:=1ns,);,-,说明延时,1 ns,类属说明,类属为设计实体与外界通信的静态信息提供通道,用来规定端口的大小、实体中子元件的数目和实体的定时特性等。,格式:,GENERIC,(常数名:数据类型:设定值;,常数名:数据类型:设定值);,27,端口方向:,IN,,,OUT,,,INOUT,,,BUFFER,IN,OUT,INOUT,BUFFER,“OUT”,和“,BUFFER”,都可定义输出端口,;,若实体内部需要反馈输出信号,则输出端口必须被设置为“,BUFFER”,,而不能为“,OUT”,。,28,同方向、同类型的端口可放在同一个说明语句中。,ENTITY
19、 Full_adder IS,PORT(a,b,c:IN BIT,;,sum,carry:OUT BIT,);,END Full_adder;,29,3.2.2,结构体,(Architecture),ARCHITECTURE,结构体名,OF,实体名,IS,声明语句,BEGIN,功能描述语句,END,结构体名,;,用于声明该结构体将用到的信号、数据类型、常数、子程序和元件等。声明的内容是局部的。,具体描述结构体的功能和行为。,结构体定义了设计单元具体的功能,描述了该基本设计单元的行为、元件和内部的连接关系。,一个实体可对应多个结构体,每个结构体代表该实体功能的不同实现方案或不同实现方式。同一时刻
20、只有一个结构体起作用,通过,CONFIGURATION,决定用哪个结构体进行仿真或综合。,在结构体描述中,具体给出了输入、输出信号之间的逻辑关系。,30,ARCHITECTURE Behavior OF FreDevider IS -,结构体定义,SIGNAL Clk:Std_Logic;-,信号声明,BEGIN,PROCESS(Clock),BEGIN,IF rising_edge(Clock)THEN,Clk=NOT Clk;,END IF;,END PROCESS;,Clkout=Clk;,END;,功能描述语句,进程,顺序,语句,31,3.2.3,库、程序包的调用,LIBRARY IE
21、EE;,USE IEEE.Std_Logic_1164.ALL,;,LIBRARY,库名,;,USE,库名,.,程序包名,.,项目名;,调用此程序包中所有的资源,LIBRARY IEEE;,USE IEEE.Std_Logic_1164.ALL,;,USE IEEE.Std_Logic_Arith.ALL,;,USE IEEE.Std_Logic_Unsigned.ALL,;,32,3.3 VHDL,语句,3.3.1,并行语句,在结构体中的执行是同时进行,执行顺序与书写顺序无关。,33,并行信号赋值语句,简单赋值语句,目标信号名,=,表达式,目标信号的数据类型与右边表达式一致,ARCHITEC
22、TURE Behavior OF FreDevider IS,SIGNAL Clk:Std_Logic;,BEGIN,PROCESS(Clock),BEGIN,IF rising_edge(Clock)THEN,Clk=NOT Clk;,END IF;,END PROCESS;,Clkout=Clk;,34,选择信号赋值语句,WITH,选择表达式,SELECT,赋值目标信号,=,表达式,1,WHEN,选择值,1,,,表达式,2,WHEN,选择值,1,,,表达式,n,WHEN,OTHERS,;,选择值要覆盖所有可能情况,若不能一一指定,用,OTHERS,为其他情况找个出口;,选择值必须互斥,不能
23、出现条件重复或重叠的情况。,35,LIBRARY IEEE,;,USE IEEE.Std_Logic_1164.ALL,;,ENTITY,MUX,IS,PORT,(Data0,,,Data1,,,Data2,,,Data3,:,IN Std_Logic_VECTOR(7 DOWNTO 0),;,Sel,:,IN Std_Logic_Vector(1 DOWNTO 0),;,DOUT,:,OUT Std_Logic_Vector(7 DOWNTO 0),),;,END,;,ARCHITECTURE,DataFlow,OF,MUX,IS,BEGIN,WITH,Sel,SELECT,DOUT,=,D
24、ata0,WHEN,“00”,,,Data1,WHEN,“01”,,,Data2,WHEN,“10”,,,Data3,WHEN,“11”,,,“,00000000”,WHEN OTHERS,;,END,;,地址选线,Sel,输出,DOUT,00,Data0,01,Data1,10,Data2,11,Data3,4X1,多路选择器,36,37,条件信号赋值语句,赋值目标信号,=,表达式,1,WHEN,赋值条件,1 ELSE,表达式,2,WHEN,赋值条件,2 ELSE,表达式,n,WHEN,赋值条件,n ELSE,表达式;,各赋值语句有,优先级,的差别,按书写顺序从高到低排列;,各赋值条件可以,
25、重叠,。,38,8,输入优先编码器,I7,I6,I5 A2,I4 A1,I3 A0,I2,I1,I0,高,低,优,先,级,LIBRARY IEEE,;,USE IEEE.Std_Logic_1164.ALL,;,ENTITY,Priority_Encoder,IS,PORT,(I,:,IN Std_Logic_VECTOR(7 DOWNTO 0),;,A,:,OUT Std_Logic_Vector(2 DOWNTO 0),),;,END,;,ARCHITECTURE,DataFlow,OF,Priority_Encoder,IS,BEGIN,A,=,“111”,WHEN,I(7)=1 ELS
26、E,“110”,WHEN,I(6)=1 ELSE,“101”,WHEN,I(5)=1 ELSE,“100”,WHEN,I(4)=1 ELSE,“011”,WHEN,I(3)=1 ELSE,“010”,WHEN,I(2)=1 ELSE,“001”,WHEN,I(1)=1 ELSE,“000”,WHEN,I(0)=1 ELSE,“111”,;,END,;,39,40,进程语句,进程本身是并行语句,但内部是顺序语句;,进程只有在特定的时刻(敏感信号发生变化)才会被激活。,进程标号:,PROCESS,(敏感信号参数表),声明区;,BEGIN,顺序语句,END PROCESS,进程标号;,在进程中起作用
27、的局部变量,一个进程可以有多个敏感信号,任一敏感信号发生变化都会激活进程,进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。,41,进程的工作原理,当某个敏感信号的值发生变化时,每个进程语句立即完成进程内顺序语句所定义的功能行为。,执行过程终止,顺序语句所定义的功能行为的结果可以赋值给信号,并通过信号被其他的进程读取或赋值。,42,进程与时钟,在每个上升沿启动一次进程(执行进程内所有的语句)。,上升沿描述:,Clock EVENT AND Clock=1,下降沿描述:,Clock EVENT AND Clock=0,上升沿描述:,rising_edge(
28、Clock),下降沿描述:,falling_edge(Clock),43,LIBRARY IEEE;,USE IEEE.Std_Logic_1164.ALL;,ENTITY FreDevider IS,PORT,(Clock:IN Std_logic;,Clkout:OUT Std_logic);,END;,ARCHITECTURE Behavior OF FreDevider IS,SIGNAL Clk:Std_Logic;,BEGIN,PROCESS(Clock),将时钟作为进程的敏感信号,BEGIN,IF rising_edge(Clock)THEN,Clk=NOT Clk;,在时钟上升
29、沿执行,Clk=NOT Clk,END IF;,END PROCESS;,Clkout=Clk;,END;,44,LIBRARY IEEE;,USE IEEE.Std_Logic_1164.ALL;,ENTITY Counter IS,PORT,(RESET,:,IN Std_Logic;,异步复位信号,Clock:IN Std_logic;,时钟信号,NUM:BUFFER Integer RANGE 0 TO 3);,计数器输出值,END;,ARCHITECTURE Behavior OF Counter IS,BEGIN,PROCESS(RESET,Clock),将复位、时钟作为进程的敏感
30、信号,BEGIN,IF RESET=1 THEN,Num=0;,复位时,Num,清,0,ELSIF rising_edge(Clock)THEN,IF Num=3 THEN,Num=0;,如果,Num,3,就清,0,ELSE,Num=Num+1;,否则自加,1,END IF;,END IF;,END PROCESS;,END;,45,仿真波形:,46,LIBRARY IEEE;,USE IEEE.Std_Logic_1164.ALL;,USE IEEE.Std_Logic_unsigned.ALL;,ENTITY Counter IS,PORT,(clr,:,IN Std_Logic;,inl
31、in std_logic_vector(3 downto 0);,outl:out std_logic_vector(3 downto 0),计数器输出值,);,END;,ARCHITECTURE Behavior OF Counter IS,BEGIN,PROCESS(clr,inl),进程的敏感信号,BEGIN,IF(clr=1 or inl=“1001”)THEN,outl=“0000”;,ELSE,outl=inl+1;,END IF;,END PROCESS;,END;,重载符号,在库,IEEE.Std_Logic_unsigned,中预先声明,47,LIBRARY IEEE;,U
32、SE IEEE.Std_Logic_1164.ALL;,USE IEEE.Std_Logic_unsigned.ALL;,ENTITY Counter IS,PORT,(clr,,,clk,:,IN Std_Logic;,cnt:buffer std_logic_vector(3 downto 0),计数器输出值,);,END;,ARCHITECTURE Behavior OF Counter IS,BEGIN,PROCESS,BEGIN,Wait until clkevent and clk=1;,IF(clr=1 or cnt=9)THEN,cnt=“0000”;,ELSE,cnt out
33、put output output output=s1;,END CASE,;,END IF,;,END PROCESS;,END;,49,进程注意事项:,进程本身是并行语句,但内部为顺序语句;,进程在敏感信号发生变化时被激活,在使用了敏感表的进程中不能含,wait,语句;,在同一进程中对同一信号多次赋值,只有最后一次生效;,在不同进程中,不可对同一信号进行赋值;,一个进程不可同时对时钟上、下沿敏感。,进程中的信号赋值是在进程挂起时生效的,而变量赋值是即时生效。,相对于结构体而言,信号具有全局性,是进程间进行并行联系的重要途径。,进程为综合器支持,且其建模方式直接影响仿真和综合结果,综合后对应
34、于进程的硬件结构对进程中所有可读入信号都是敏感的。,SIGNAL A,B:Integer RANGE 0 TO 7,;,:,PROCESS(Clock),BEGIN,IF rising_edge(Clock)THEN,:,B=A+1,;,B,连接端口名,),;,要插在电路系统板上的芯片,较大的电路系统,电路板上准备接受芯片的插座,元件定义语句,元件例化语句,列出对外通信的各端口名,当前系统与准备接入的元件对应端口相连的通信端口。,名字关联方式:,port map,语句中位置可以任意;,位置关联方式:,端口名和关联连接符号可省去,连接端口名的排列方式与所需例化的元件端口定义中的端口名相对应。,5
35、1,LIBRARY IEEE;,USE IEEE.Std_Logic_1164.ALL;,ENTITY nd2 IS,PORT,(a,b,:,IN Std_Logic;,c:out std_logic);,END;,ARCHITECTURE nd2behv OF nd2 IS,BEGIN,yc1,c=y,b=d1);,名字关联方式,u3:nd2 PORT MAP(x,y,c=z1);,混和关联方式,END;,元件例化:,52,1,位二进制全加器,内部端口,外部端口,53,外部端口,内部端口,端口连线,54,3.3.2,顺序语句,顺序语句仅出现在进程和子程序中。,顺序语句综合后,映射为实际的门电
36、路,系统一上电,门电路开始工作。电路可实现逻辑上的顺序执行,实际上所有门电路是并行工作的。,赋值语句,流程控制语句,空操作语句,等待语句,子程序调用语句,返回语句,55,赋值语句,ENTITY TEST_Signal IS,PORT,(Reset,Clock:IN Std_logic;,NumA,NumB:OUT Integer RANGE 0 TO 255,);,END;,ARCHITECTURE TEST OF TEST_Signal IS,SIGNAL A,B:Integer RANGE 0 TO 255;,BEGIN,PROCESS(RESET,Clock),VARIABLE C:In
37、teger RANGE 0 TO 255;,BEGIN,IF RESET=1 THEN,A=0;B=2;C:=0;,ELSEIF rising_edge(Clock)THEN,C:=C+1;A=C+1;B=A+2;,END IF;,END PROCESS;,Num A=A;NumB=B;,END;,56,流程控制语句,IF,语句:,IF,条件式,THEN,顺序语句,END IF,;,IF,条件式,THEN,顺序语句,ELSE,顺序语句,END IF,;,IF,条件式,THEN,顺序语句,ELSEIF,条件式,2 THEN,顺序语句,ELSE,顺序语句,END IF,;,有优先级,57,用,IF
38、语句描述组合逻辑电路时,务必涵盖所有的情况,否则综合后将引入锁存器!,ENTITY Encoder IS,PORT,(En:IN Std_logic;,I:IN Std_logic_Vetor(7 DOWNTO 0);,A:OUT Std_logic_Vetor(2 DOWNTO 0);,Idle:OUT Std_logic,);,END;,ARCHITECTURE Behavior OF Encoder IS,BEGIN,PROCESS(En,I),BEGIN,IF En=1 THEN,IF I(7)=1 THEN,A=“111”;Idle=0;,ELSIF,IF I(6)=1 THEN,
39、A=“110”;Idle=0;,ELSIF IF I(5)=1 THEN,A=“101”;Idle=0;,ELSIF IF I(4)=1 THEN,A=“100”;Idle=0;,ELSIF IF I(3)=1 THEN,A=“011”;Idle=0;,ELSIF IF I(2)=1 THEN,A=“010”;Idle=0;,ELSIF IF I(1)=1 THEN,A=“001”;Idle=0;,ELSIF IF I(0)=1 THEN,A=“000”;Idle=0;,ELSE,A=“000”;Idle b1 THEN q1=1;,ELSIF a1 b1 THEN q1 b1 THEN q1
40、1;,ELSE q1,顺序语句,;,WHEN,选择值,|,选择值,=,顺序语句,;,WHEN OTHERS=,顺序语句,;,END CASE,;,选择值不可重复或重叠,;,当,CASE,语句的选择值无法覆盖所有的情况时,要用,OTHERS,指定未能列出的其他所有情况的输出值,;,62,LIBRARY IEEE,;,USE IEEE.Std_Logic_1164.ALL,;,ENTITY,MUX,IS,PORT,(Data0,,,Data1,,,Data2,,,Data3,:,IN Std_Logic_VECTOR(7 DOWNTO 0),;,Sel,:,IN Std_Logic_Vector
41、1 DOWNTO 0),;,DOUT,:,OUT Std_Logic_Vector(7 DOWNTO 0),),;,END,;,ARCHITECTURE,DataFlow,OF,MUX,IS,BEGIN,CASE,Sel,IS,WHEN,“00”=DOUT,DOUT,DOUT,DOUT,DOUT,NULL;,END CASE;,END IF;,END PROCESS;,67,WAIT,语句,在进程或过程中执行到,WAIT,语句时,程序将被挂起,并设置好再次执行的条件。,WAIT ON,信号表,UNTIL,条件表达式,FOR,时间表达式,;,WAIT,;,未设置停止挂起的条件,表示永远挂起。,
42、WAIT ON,信号表;,敏感信号等待语句,敏感信号的变化将结束挂起,再次启动进程。,WAIT UNTIL,条件表达式;,条件表达式为中所含的信号发生变化,且满足,WAIT,语句所设条件,则结束挂起,再次启动进程。,WAIT FOR,时间表达式;,超时等待语句,从执行当前的,WAIT,语句开始,在此时间段内,进程处于挂起状态,超过这一时间段后,程序自动恢复执行。,68,Configuration,配置名,of,实体名,is,配置说明,End,配置名;,3.3.3,配置语句,配置主要为顶层设计实体指定结构体,或为参与例化的元件实体指定所希望的结构体,以层次方式来对元件例化做结构配置。,69,Co
43、nfiguration,配置名,of,实体名,is,配置说明,End,配置名;,为顶层设计实体指定结构体,Entity nand is,port(a,b:in std_logic;,c:out std_logic);,End entity nand;,Architecture one of nand is,begin,c=not(a and b);,End architecture one;,Architecture two of nand is,begin,cs,b=qf,c=q);,u2:nand PORT MAP(a=q,b=r,c=qf);,END rsf;,Configuration
44、sel,of,rs,is,for,rsf,for,u1,u2:nand,use entity work.nand(two);,end for;,end for;,End,sel,;,为参与例化的元件实体指定所希望的结构体,以层次方式来对元件例化做结构配置。,71,3.4,状态机在,VHDL,中的实现,3.4.1,Moore,状态机的,VHDL,描述,输出,仅取决于其,所处的状态,。,72,LIBRARY IEEE,;,USE IEEE.Std_ Logic_1164.ALL,;,ENTITY Moore IS,PORT,(,Reset,Clock,DIN,:,IN Std_Logic,;,D
45、OUT,:,OUT Std_Logic_Vetor(2 DOWNTO 0),;,END,;,ARCHITECTURE Mooremachine OF Moore IS,TYPE State_type IS(S0,,,S1,,,S2,,,S3),;,定义,State_type,为枚举型数据类型,SIGNAL State,:,State_type,;,BEGIN,Change_State:PROCESS(Reset,Clock),时序逻辑进程,BEGIN,IF Reset=1 THEN,State=S0,;,73,ELSEIF rising_edge(Clock)THEN,CASE State I
46、S,WHEN S0=IF DIN=1 THEN State=S1,;,END IF,;,WHEN S1=IF DIN=1 THEN State=S2,;,END IF,;,WHEN S2=IF DIN=1 THEN State=S3,;,END IF,;,WHEN S3=IF DIN=1 THEN State=S0,;,ELSE StateDOUT DOUT DOUT DOUT=“111”,;,END CASE,;,END PROCESS,;,END,;,74,仿真波形图:,75,时钟同步,Moore,状态机结构图:,76,LIBRARY IEEE,;,USE IEEE.Std_ Logic_
47、1164.ALL,;,ENTITY Moore IS,PORT,(,Reset,Clock,DIN,:,in Std_Logic,;,DOUT,:,out Std_Logic_Vetor(2 DOWNTO 0),;,END,;,ARCHITECTURE Mooremachine OF Moore IS,TYPE State_type IS(S0,,,S1,,,S2,,,S3),;,SIGNAL PresentState,NextState,:,State_type,;定义状态转换信号,BEGIN,State_Reg:PROCESS(Reset,Clock),状态寄存器,BEGIN,IF Res
48、et=1 THEN,异步复位,PresentState=S0,;,ELSEIF rising_edge(Clock)THEN,PresentState=NextState,;时钟上升沿,转换至下一状态,END IF,;,END PROCESS,;,77,Change_State:PROCESS(PresentState,,,DIN),组合逻辑进程,BEGIN,CASE Present State IS,WHEN S0=if DIN=1 then NextState=S1,;,else NextState=S0,;,end if,;,DOUT=“001”,;,WHEN S1=if DIN=1 t
49、hen NextState=S2,;,else NextState=S1,;,end if,;,DOUT=“011”,;,WHEN S2=if DIN=1 then NextState=S3,;,else NextState=S2,;,end if,;,DOUT=“101”,;,WHEN S3=if DIN=1 then NextState=S0,;,else NextState=S1,;,end if,;,DOUT=“111”,;,END CASE,;,END PROCESS,;,END,;,78,仿真波形图:,79,3.4.2,Mealy,状态机的,VHDL,描述:,输出,由当前状态与输入
50、共同决定。,80,LIBRARY IEEE,;,USE IEEE.Std_ Logic_1164.ALL,;,ENTITY MealyMachine IS,PORT,(,Reset,Clock,DIN,:,IN Std_Logic,;,DOUT,:,OUT Std_Logic_Vetor(2 DOWNTO 0),;,END,;,ARCHITECTURE Statemachine OF MealyMachine IS,TYPE State_type IS(S0,,,S1,,,S2,,,S3),;,SIGNAL State,:,State_type,;,BEGIN,Change_State:PRO