1、单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,电子与通信工程系,*,单击此处编辑母版标题样式,上节回顾,VHDL,数据对象,信号,-,重要,变量,-,重要,常量,VHDL,数据类型,电子与通信工程系,上节回顾,-,信号(,Signals),代表连线,,Port,也是一种信号,没有方向性,可给它赋值,也可当作输入,在,Package、Entity、Architecture,中定义,用,=,进行赋值,目标信号名,=,表达式,AFTER,时间量,;,用,:=,进行初始化,设定的初始值不可综合,用于仿真,signal,count:bit_vector(3,downto,0):=“0011”
2、电子与通信工程系,3.,变量(,Variable),临时数据,没有物理意义,只能在,Process,、,Function、Procedure,中定义,并只在,其内部有效,,要使其全局有效,先转换为,Signal。,用,:=,进行赋值,用,:=,进行初始化,variable,result:std_logic:=0;,电子与通信工程系,信号与变量赋值(差异),【,例,6-3】,ARCHITECTURE,bhv,OF DFF3 IS,SIGNAL A,B:STD_LOGIC;,BEGIN,PROCESS(CLK)BEGIN,IF CLKEVENT AND CLK=1 THEN,A=D1;,B=A
3、Q1=B;,END IF;,END PROCESS;,END;,电子与通信工程系,信号与变量赋值(差异),【,例,6-4】,.,ARCHITECTURE,bhv,OF DFF3 IS,BEGIN,PROCESS(CLK),VARIABLE A,B:STD_LOGIC;,BEGIN,IF CLKEVENT AND CLK=1 THEN,A:=D1;,B:=A;,Q1=B;,END IF;,END PROCESS;,END;,电子与通信工程系,数据类型,电子与通信工程系,7,2.3.5,词 法,1,程序注释,注释从“,-,”,符号开始,到该行末尾结束。,2,数字,VHDL,语言数字表示法有十进
4、制表示法、二进制表示法和八进制表示法。,(课本,P247,),电子与通信工程系,8,整数举例:,010,,,1,,,345_67,,,3e8,浮点数举例:,10.0,,,3.1415,,,1.2E-3,,,2.1e+5,其中:整数,:=,数字或下划线连接的数字,指数,:=,E +,整数或,E -,整数,(,1,)十进制数表示法,书写格式为:,十进制文字,:=,整数,.,整数,指数,(,2,)基表示二、八、十六进制数的方法,用“基”表示数的书写格式为:,电子与通信工程系,9,举例:,2#10110101#-,二进制表示法,8#267#-,八进制表示法,16#8F#-,十六进制表示法,30=3E1
5、16#1E#=2#11_11#E1,30.0=300.0e-1=16#1E.0#=2#11.11#E+3,上式中:基,:=,整数,基于基的整数,:=,扩展数字,下划线,扩展数字,扩展数字,:=,数字,/,字母,以基表示的数,:=,基,#,基于基的整数,.,基于基的整数,#,指数,电子与通信工程系,10,3,字符,VHDL,中的字符为被单引号括起来的,ASCII,字符。,其书写格式为:,字符文字,:=,图形字符,例如:,A *,电子与通信工程系,11,4,字符串,VHDL,中的字符串为被双引号括起来的图形字符序列,可以为空。,其书写格式为:,字符串,:=,“,图形字符”,例如:“,A”“”“s
6、tring”,电子与通信工程系,12,位串是被双引号括起来的,扩展数字序列,,在数字序列前冠以基数说明符。,其书写格式为:,位串文字,:=,基数说明符“位值”,B,为二进制基说明符,,O,为八进制基说明符,,X,为十六进制基说明符,例如:,B“1111_1101”X“FD”O“375”,5,数字位字符串(位矢量),位串的长度等价于二进制数的长度。,位值,:=,扩展数字,或下划线扩展数字,电子与通信工程系,13,2.3.6,运算操作符,VHDL,语言的操作符有,5,种:,逻辑运算符(,LOGICAL,),关系运算符(,RELATIONAL,),算术运算符(,ARITHMETIC,),并置运算符(
7、CONCATENATION,),1,逻辑运算符,在,VHDL,语言中,逻辑运算符有,7,种:,(课本,P256,),移位运算符(,SHIFT,),SYN,适用于,BIT,、,BOOLEAN,、,STD_LOGIC,或,BIT_VECTOR,STD_LOGIC_VECTOR,电子与通信工程系,14,NOT,取反,AND,与,OR,或,NAND,与非,NOR,或非,XOR,异或,XNOR,同或,在一个,VHDL,语句中存在两个逻辑表达式时,左右没有优先级差别(不包括,NOT,)。一个逻辑式中,先做括号里的运算,再做括号外运算。,逻辑运算符的书写格式为:,(,1,),a=b AND c AND d
8、 AND e,;,运算符相同,且是,AND,,,OR,,,XOR,中的一种,(,2,),a=(b AND c)OR(d AND e),;,电子与通信工程系,【,例,9-21,】,SIGNAL a,,,b,,,c:STD_LOGIC_VECTOR(3 DOWNTO 0),;,SIGNAL d,,,e,,,f,,,g:STD_LOGIC_VECTOR(1 DOWNTO 0),;,SIGNAL h,,,I,,,j,,,k:STD_LOGIC,;,SIGNAL l,,,m,,,n,,,o,,,p:BOOLEAN,;,.,a=b AND c;-b,、,c,相与后向,a,赋值,,a,、,b,、,c,的数据
9、类型同属,4,位长的位矢量,d=e OR f OR g;-,两个操作符,OR,相同,不需括号,h=(i NAND,j)NAND,k,;,-NAND,不属上述三种算符中的一种,必须加括号,l=(m XOR,n)AND(o,XOR p);-,操作符不同,必须加括号,h=i AND j AND k;-,两个操作符都是,AND,,不必加括号,h=i AND j OR k;-,两个操作符不同,未加括号,表达错误,a=b AND e;-,操作数,b,与,e,的位矢长度不一致,表达错误,h=,AND OR NAND NOR XOR XNOR,高,低,电子与通信工程系,23,类似于,C,语言,,VHDL,中的
10、顺序语句执行顺序与书写顺序一致,赋值语句,IF,语句,CASE,语句,LOOP,语句,NEXT,语句,EXIT,语句,WAIT,语句,子程序调用语句,RETURN,语句,NULL,语句,2.4.1,顺序语句,Sequential Statements,(课本,P276,),2.4,、,VHDL,语法基础,电子与通信工程系,24,顺序语句具有如下特征,:,顺序语句的功能操作有算术、逻辑运算,信号、变,量的赋值,子程序调用等。,顺序语句只能出现在进程,process,或子程序中。,顺序语句描述的系统行为有时序流、控制流、条件分,支和迭代算法等。,顺序语句用于定义进程、子程序等的算法。,顺序语句是按
11、出现的次序加以执行的。,电子与通信工程系,1 顺序赋值语句,信号赋值语句,变量赋值语句,赋值目标,赋值符号,赋值源,信号,或变量,=,:=,数值、逻辑或,运算表达式,电子与通信工程系,IF,THEN,;,ELSIF,THEN,;,ELSIF,THEN,;,ELSE,;,END IF,;,IF,语句的一般形式为:,2.IF,语句,IF,THEN,;,END IF,;,IF,THEN,;,ELSE,;,END IF,;,电子与通信工程系,27,(1),完整,IF,语句:,architecture dataflow of mux4 is,begin,process,(s,a0,a1,a2,a3),b
12、egin,if s=00 then y=a0;,elsif,s=01 then y=a1;,elsif,s=10 then y=a2;,else y=a3;,end if;,end process;,end dataflow;,电子与通信工程系,28,电子与通信工程系,29,(2),不完整,IF,语句:,library,ieee,;,use ieee.std_logic_1164.all;,entity dff_2 is,port(clk:in,std_logic,;,d:in,std_logic,;,q:out,std_logic,);,end dff_2;,(课本,P74,),电子与通信工
13、程系,30,architecture behavioral of dff_2 is,signal q1:std_logic;-,在芯片内部定义一个数据的暂存节点,begin,process(clk,),begin,if,clkevent,and,clk,=1 then,q1=d;,end if;,q=q1;-,将内部的暂存数据向端口输出,end process;,-qb then q=1;,else,qb then q=1;,elsif,ab then q=0;,end if;,end process;,end one;,电子与通信工程系,33,电子与通信工程系,34,entity mux4_
14、3 is,port(input:in,std_logic_vector(3,downto,0);,sel,:in std_logic_vector(1,downto,0);,q:out,std_logic,);,end mux4_3;,architecture dataflow of mux4_3 is,begin,process(input,sel,),begin,if,sel,=00 then q=,input(0);,elsif,sel,=01 then q=,input(1);,elsif,sel,=10 then q=,input(2);,else q=,input(3);,end
15、if;,end process;,end dataflow;,电子与通信工程系,35,电子与通信工程系,36,library,ieee,;,use ieee.std_logic_1164.all;,entity encoder_2 is,port(a,b,c,d,e,f,g,h:in,std_logic,;,codeout,:out std_logic_vector(2,downto,0);,end encoder_2;,电子与通信工程系,37,architecture behavioral of encoder_2 is,begin,process(a,b,c,d,e,f,g,h,),beg
16、in,if h=1 then,codeout,=111;,elsif,g=1 then,codeout,=110;,elsif,f=1 then,codeout,=101;,elsif,e=1 then,codeout,=100;,elsif,d=1 then,codeout,=011;,elsif,c=1 then,codeout,=010;,elsif,b=1 then,codeout,=001;,elsif,a=1 then,codeout,=000;,else,codeout,=,ZZZ,;,end if;,end process;,end behavioral;,WHEN,语句,电子
17、与通信工程系,38,电子与通信工程系,IF,语句,注意如果,if,引导,event,代表时钟,此时不能有,else,复句,用于组合逻辑的,if,,如果没有,else,付句,一定要在,IF,语句前面有缺省赋值,否则会造成不需要的,latch,电子与通信工程系,CASE,语句,CASE,语句的结构如下:,CASE,IS,WHEN ;,WHEN|;,WHEN ;,WHEN OTHERS ;,END CASE;,多条件选择值的一般表达式为:,选择值|选择值,选择值可以有四种不同的表达方式:,单个普通数值,如6。,数值选择范围,如(2,TO 4),,表示取值为2、3或4。,并列数值,如3,5,表示取值为
18、3或者5。,混合方式,以上三种方式的混合。,(课本,P81,、,P276,),电子与通信工程系,PORT(,z1,z2,z3,z4:out std_logic);,SIGNAL,value,:INTEGER RANGE 0 TO 15;,CASE,value,IS,WHEN 0 =z1 z2 z3 z4 out1 out1 out1 out1=0;,END CASE;,CASE,语句,使用时容易发生的错误:,电子与通信工程系,【例】,(3-8译码器),library,ieee,;,use ieee.std_logic_1164.all;,entity decode38 is,port(a,b,
19、c,G1,G2,G2B:in std_logic;,y:out std_logic_vector(7,downto,0);,end entity decode38;,architecture ex of decode38 is,signal,indata,:std_logic_vector(2,downto,0);,begin,indata,y y y y y y y y y=XXXXXXXX;,end case;,else,y=11111111;,end if;,end process;,end architecture ex;,接上页,电子与通信工程系,IF,与,Case,的区别,if,具
20、有优先级,电子与通信工程系,4,LOOP,语句,(1)单个,LOOP,语句,其语法格式如下:,LOOP,标号:,LOOP,顺序语句,END LOOP LOOP,标号;,(2),FOR LOOP,语句,语法格式如下:,LOOP,标号:,FOR,循环变量,IN,循环次数范围,LOOP,顺序语句,上下界必须确定,END LOOP LOOP,标号;,(2),while LOOP,语句,语法格式如下:,LOOP,标号:,WHILE,条件,LOOP,顺序语句,END LOOP LOOP,标号;,电子与通信工程系,【例】,SIGNAL a,b,c:STD_LOGIC_VECTOR(1 TO 3);,.,FO
21、R 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);,电子与通信工程系,【例】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY p_check IS,PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);,y:OUT STD_LOGIC);,END p_check;,ARCHITECTURE opt OF p
22、check IS,SIGNAL,tmp,:STD_LOGIC;,BEGIN,PROCESS(a),BEGIN,tmp,=0;,FOR n IN 0 TO 7 LOOP,tmp,=,tmp,XOR a(n);,END LOOP;,y f);,s3:b(k+8):=0;,k:=k+1;,end loop,l_y,;,end loop,l_x,;,.,电子与通信工程系,51,6,EXIT,语句,EXIT,语句的书写格式为:,EXIT ,标号,WHEN,条件表达式,;,EXIT,语句的规则如下:,EXIT,语句用于,LOOP,语句的循环控制,表示结束,LOOP,语句。,而,NEXT,语句在,LOOP
23、语句中结束本次循环,继续下一次的循环。,EXIT,语句不含标号和条件表达式时,表明无条件结束,LOOP,语句的执行。,EXIT,语句含有,标号,时,表明跳到标号处继续执行。,EXIT,语句含有,WHEN,条件,时,如果条件为“真”,跳出,LOOP,语句;如果条件为“假”,则继续,LOOP,循环。,EXIT,语句为程序需要处理保护、出错和警告状态时,提供了一种快捷、简便的调试方法。,电子与通信工程系,52,WAIT,语句可以设置,4,种不同的条件:,无限等待,、,时间到,、,条件满足,及,敏感信号量变化,。,7,WAIT,语句,书写格式为:,WAIT -,无限等待,WAIT ON -,敏感信号
24、量变化,WAIT UNTIL,表达式,-,表达式成立时进程启动,WAIT FOR,时间表达式,-,时间到,进程启动,电子与通信工程系,6.1.7,WAIT,语句,一般地,只有,WAIT,UNTIL,格式的等待语句可以被综合器接受(其余语句格式只能在,VHDL,仿真器中使用),,WAIT,_,UNTIL,语句有以下三种表达方式:,WAIT UNTIL,信号=,Value;-(1),WAIT UNTIL,信号,EVENT AND,信号=,Value;-(2),WAIT UNTIL NOT,信号,STABLE AND,信号=,Value;-(3),如果设,clock,为时钟信号输入端,以下四条,WA
25、IT,语句所设的进程启动条件都是时钟上跳沿,所以它们对应的硬件结构是一样的:,WAIT UNTIL clock=1;,WAIT UNTIL rising_edge(clock);,WAIT UNTIL NOT clock,STABLE AND clock=1;,WAIT UNTIL clock=1 AND clock,EVENT;,电子与通信工程系,54,architecture behave of cntm16_2 is,begin,co=1 when(,qcnt,=1111 and enable=1)else,0;,process(,clk,),begin,if(,clkevent,and
26、clk,=1,)then,if(nreset,=0)then,qcnt,0);,elsif(enable,=1)then,qcnt,=qcnt+1;,end if;,end if;,end process;,end behave;,电子与通信工程系,55,电子与通信工程系,56,architecture behave of cntm16_3 is,begin,co=1 when(,qcnt,=1111 and enable=1)else,0;,process,begin,wait until,clkevent,and,clk,=1;,if(nreset,=0)then,qcnt,0);,elsif,enable=1 then,qcnt,tmp,:=,rega,AND,regb,;,WHEN 101=,tmp,:=,rega,OR,regb,;,WHEN 110=,tmp,:=NOT,rega,;,WHEN OTHERS=NULL;,END CASE;,空操作语句的语句格式如下:,NULL;,通常用于,Case,语句中,表示所余的不用条件下的操作行为。,电子与通信工程系,






