VHDL语言的描述语句.ppt
1,VHDL语言的描述语句,5.6 VHDL语言的描述语句,VHDL语言的描述语句主要用来描述系统的硬件结构、行为功能及信号之间的逻辑关系。分为顺序语句和并行语句两大类。顺序语句是按照语句书写的前后顺序自上而下、一条接一条地按顺序执行,用来定义进程、过程和函数的行为。并行语句又称并发语句,出现在结构体中,各语句并行(同步)执行,与书写的顺序无关。有些语句既可作为并行语句又可作为顺序语句,如赋值语句、过程调用语句和断言语句。,2,VHDL有如下六类基本顺序语句:,信号赋值语句变量赋值语句,1、赋值语句,2、流程控制语句,3、等待语句,4、子程序调用语句,5、返回语句,6、空操作语句,IF语句CASE语句LOOP语句NEXT语句EXIT语句,RETURN语句,NULL语句,WAIT语句,过程调用函数调用,3,VHDL语言的描述语句,赋值语句的功能是将一个值或一个表达式的运算结果传递给某一数据对象,如信号、变量或由它们组成的数组。通过赋值语句,可以实现设计实体内部的数据传送,以及端口外部数据的读写。赋值语句由赋值源、赋值目标和赋值符构成。要求赋值源和赋值目标的数据类型必须相同。根据赋值对象(赋值目标)的不同,赋值语句可分为信号赋值和变量赋值两种。,1.赋值语句,4,VHDL语言的描述语句,信号赋值具有延时性、全局性,赋值符用“=”表示。,(1)信号赋值语句,格式:目标信号名=赋值源;,该语句是将赋值源的当前值赋给目标信号。要求赋值号两边信号量的类型和长度应该一致。,例如:Y=1;X=Y;A=B AND C;,-字符赋值,信号Y被赋值为1-信号赋值,将信号Y的当前值赋给目标信号X-表达式赋值,将B和C的与逻辑赋给目标信号A,5,VHDL语言的描述语句,对于数组赋值,可采用下列格式:,(1)信号赋值语句,SIGNAL x,y:STD_LOGIC_VECTOR(0 TO 3);x=“1011”;y(0 TO 1)=“01”;y(2 TO 3)=x(1 TO 2);,-整体赋值,数组“1011”赋值x-部分赋值,“01”赋值y的部分位-位置关联赋值,x的部分位赋值y的部分位,6,VHDL语言的描述语句,变量赋值具有即时性、局部性,并且变量赋值只限定在进程和子程序中,赋值符用“:=”表示。,(2)变量赋值语句,格式:目标变量名:=赋值源;,该语句是将赋值源的当前值赋给目标变量。要求赋值号两边变量的类型和长度应该一致。,例如:A:=5.0;Y:=0;X:=Y;,-将数值5.0赋值给变量A-变量Y被赋值为0-将变量Y的当前值赋给目标变量X,7,VHDL语言的描述语句,对于数组赋值,可采用下列格式:,(2)变量赋值语句,VARIBLE x,y:STD_LOGIC_VECTOR(0 TO 3);x:=“1011”;y(0 TO 1):=“10”;y(2 TO 3):=x(1 TO 2);,-整体赋值,数组“1011”赋值x-部分赋值,“10”赋值y的部分位-位置关联赋值,x的部分位赋值y的部分位,8,A 变量的说明和赋值限定在顺序区域内,即只能在进程或子程序中使用,它无法传递到进程之外。B 信号赋值可以在顺序区域内作顺序语句,也可以在结构体中当作并行语句使用。,变量赋值语句与信号赋值语句区别,9,VHDL语言的描述语句,流程控制语句通过条件控制来决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。,2.流程控制语句,流程控制语句共有五种:IF语句 CASE语句 LOOP语句 NEXT语句 EXIT语句,10,VHDL语言的描述语句,IF语句是一种条件语句,在IF语句中至少应有一个条件句,该条件句必须由BOOLEAN表达式构成。IF语句依据条件产生的判断结果TRUE或FALSE,有选择地去执行指定的语句。利用IF语句可以实现两个或两个以上的条件分支判断。其格式有三种:,(1)IF语句,单选择控制 二选择控制 多选择控制,11,VHDL语言的描述语句,IF语句的单选择控制,格式:IF 条件句 THEN 顺序语句;END IF;,若条件句的逻辑值为真,则执行THEN后面的顺序语句,否则结束该条件的执行。,例如:IF(x=1)THEN A=B;END IF;,当条件x=1成立时,信号B的值赋给信号A;否则,不执行A=B语句。,12,VHDL语言的描述语句,IF语句的二选择控制,格式:IF 条件句 THEN 顺序语句;ELSE 顺序语句;END IF;,若条件句的逻辑值为真,则执行THEN后面的顺序语句,否则执行ELSE后面的顺序语句。,13,VHDL语言的描述语句,【例6.1】用IF语句描述二选一数据选择器。,设数据输入信号为d1和d0,选择控制信号为s,数据输出信号为y。,ARCHITECTURE example1 OF mux2 IS BEGIN PROCESS(d1,d0,s)BEGIN IF(s=0)THEN y=d0;ELSE y=d1;END IF;END PROCESS;END example1;,14,VHDL语言的描述语句,IF语句的多选择控制,格式:IF 条件句 THEN 顺序语句;ELSIF 条件句 THEN 顺序语句;END IF;,当满足多个条件之一时,执行该条件THEN后面的顺序语句;如果所设条件都不满足,则执行ELSE后面的顺序语句。,15,VHDL语言的描述语句,【例6.2】用IF语句描述四选一数据选择器。,设数据输入信号为d3、d2、d1、d0,选择控制信号为s=s1,s0,数据输出信号为y。,ARCHITECTURE example2 OF mux4 IS BEGIN PROCESS(d3,d2,d1,d0,s)BEGIN IF(s=“00”)THEN y=d0;ELSIF(s=“01”)THEN y=d1;ELSIF(s=“10”)THEN y=d2;ELSE y=d3;END IF;END PROCESS;END example2;,16,VHDL语言的描述语句,CASE语句根据满足的条件直接选择多项顺序语句中的一项执行。,(2)CASE语句,格式:CASE 表达式 IS WHEN 选择值=顺序语句;WHEN 选择值=顺序语句;WHEN OTHERS=顺序语句;END CASE;,说明:先计算表达式的值,然后根据条件句中的选择值执行相对应的顺序语句。,注意:条件句中的“=”不是操作符,它相当于THEN作用。,17,VHDL语言的描述语句,表达式可以是一个整数类型或枚举类型的值,也可以是由这些数据类型的值构成的数组。,(2)CASE语句,选择值可以有四种不同的表达方式:,单个普通数值,如:5;数值选择范围,如:(1 TO 3);并列值,如:4|6,表示取值为4或6;混合方式,即以上三种方式的混合。,18,VHDL语言的描述语句,使用CASE语句时,应注意以下几点:,(2)CASE语句,选择值必须在表达式的取值范围内;CASE语句中至少要包含一个WHEN语句;每个选择值只能出现一次,不能在其他WHEN语句中重复出现;除非所有选择值能完全覆盖CASE语句中的表达式的取值,否则最后一个条件句的选择值必须用“OTHERS”表示。选择值可以颠倒次序,但OTHERS必须放在最后;“=”不是操作符,相当于THEN语句的作用。,19,VHDL语言的描述语句,【例6.3】用CASE语句描述四选一数据选择器。,ARCHITECTURE example3 OF mux4 IS SIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0)BEGIN syyyyy=X;END CASE;END PROCESS;END example3;,20,VHDL语言的描述语句,LOOP语句是一种循环语句,它可以使所包含的一组顺序语句被循环执行,其执行的次数由设定的循环参数决定。,(3)LOOP语句,LOOP语句有三种格式:FOR_LOOP语句 WHILE_LOOP语句 单个LOOP语句,21,VHDL语言的描述语句,FOR_LOOP语句主要用于循环次数已知的循环程序设计。可分为递增方式和递减方式。,FOR_LOOP语句,循环标号:FOR 循环变量 IN 初值 TO 终值 LOOP 顺序语句;END LOOP 循环标号;,递增格式:,递减格式:,循环标号:FOR 循环变量 IN 初值 DOWNTO 终值 LOOP 顺序语句;END LOOP 循环标号;,22,VHDL语言的描述语句,说明:循环从循环变量的“初值”开始,到“终值”结束,每执行一次循环体中的顺序语句后,循环变量的值递增或递减1。,FOR_LOOP语句,循环标号为任选项,用来给循环语句定位。,循环变量的初值和终值决定了循环次数(取整数)。循环次数:循环次数=|终值-初值|+1,23,VHDL语言的描述语句,【例6.4】用FOR_LOOP语句描述八位奇偶校验器。,输入信号X是一个长度为8位的标准逻辑矢量。当X中1的个数为奇数时,输出Y=1,否则,Y=0。算法:用FOR_LOOP语句对X的值逐位进行异或运算。循环次数:由循环变量n控制,记录异或运算的次数。循环变量的初值为0,终值为7。,24,VHDL语言的描述语句,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY loop1 IS PORT(X:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Y:OUT STD_LOGIC);END loop1;ARCHITECTURE example4 OF loop1 IS BEGIN PROCESS(X)VARIABLE temp:STD_LOGIC;BEGIN temp:=0;FOR n IN 7 DOWNTO 0 LOOP temp:=temp XOR X(n);END LOOP;Y=temp;END PROCESS;END example4;,25,VHDL语言的描述语句,WHILE_LOOP语句是一种条件循环语句,用于循环次数未知的循环程序设计。,WHILE_LOOP语句,循环标号:WHILE 循环控制条件 LOOP 顺序语句;END LOOP 循环标号;,格式:,说明:若循环控制条件为“真”,则进行循环执行顺序语句;若循环控制条件为“假”,则结束循环。,26,VHDL语言的描述语句,【例6.5】用WHILE_LOOP语句描述八位奇偶校验器。,ARCHITECTURE example5 OF loop2 IS BEGIN PROCESS(X)VARIABLE temp:STD_LOGIC;VARIABLE n:INTEGER;BEGIN temp:=0;n:=0;WHILE n 8 LOOP temp:=temp XOR X(n);n:=n+1;END LOOP;Y=temp;END PROCESS;END example5;,27,VHDL语言的描述语句,单个LOOP语句是最简单的循环方式,这种循环方式需要引入NEXT和EXIT控制语句后才能确定。,单个LOOP语句,循环标号:LOOP 顺序语句;END LOOP 循环标号;,格式:,例如:简单LOOP语句的使用。,L2:LOOP A:=A+1;EXIT L2 WHEN A10;END LOOP L2;,-控制语句,当A大 于10时,跳出循环,28,VHDL语言的描述语句,NEXT语句是一种循环控制语句,通常嵌套在LOOP语句中使用,用于进行有条件或无条件的控制执行程序的转向。,(4)NEXT语句,NEXT 循环标号 WHEN 条件表达式;,格式:,29,VHDL语言的描述语句,根据可选项,NEXT语句有三种格式:,(4)NEXT语句,格式1:NEXT,功能:无条件结束本次循环,跳回到循环体的开始位置,执行下一次循环。,格式2:NEXT 循环标号,功能:无条件结束本次循环,从循环标号规定的位置,执行下一次循环。,格式3:NEXT WHEN 条件表达式,功能:有条件结束本次循环,当条件表达式满足时,结束本次循环,否则继续循环。,30,VHDL语言的描述语句,【例6.6】用NEXT_WHEN语句实现单循环。,ARCHITECTURE example6 OF NEXT_WHEN1 IS BEGIN PROCESS(s)VARIABLE i:INTEGER;BEGIN L1:FOR i IN 7 DOWNTO 0 LOOP y(i)=0;NEXT WHEN s(i)=1;y(i)=1;END LOOP L1;END PROCESS;END example6;,-若s(i)=1成立,终止本次循环,返回到L1 否则,继续本次循环。,-返回到L1,31,VHDL语言的描述语句,【例6.7】试用多重循环实现四组八位数据的奇校验。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY NEXT_WHEN2 IS PORT(d:IN STD_LOGIC_VECTOR(0 TO 31);y:OUT STD_LOGIC_VECTOR(0 TO 3);END NEXT_WHEN2;ARCHITECTURE example7 OF NEXT_WHEN2 IS BEGIN PROCESS(d)VARIABLE i,k,j:INTEGER;VARIABLE tmp:STD_LOGIC;,四组八位数据由d0.31输入,内循环完成各组数据的奇校验,外循环确定校验的组数,校验结果存放在输出y0.3中。当某八位数据中1的个数为奇数时,所对应的输出位yi=1,否则,yi=0。,32,VHDL语言的描述语句,BEGIN k:=0;L1:FOR i IN 0 TO 3 LOOP y(i)=0;tmp:=0;j:=0;k:=i*8;L2:LOOP tmp:=tmp XOR d(k);y(i)=tmp;NEXT L1 WHEN j=7;j:=j+1;k:=k+1;NEXT L2;END LOOP L2;NEXT L1;END LOOP L1;END PROCESS;END example7;,内循环,外循环,在内循环中,当j 7时,继续执行内循环;当j=7时,终止内循环,跳转到L1处,执行一次外循环。,33,VHDL语言的描述语句,EXIT语句和NEXT语句一样,都是循环控制语句,主要在LOOP语句中使用,用于进行有条件或无条件的跳转控制。,(5)EXIT语句,EXIT 循环标号 WHEN 条件表达式;,格式:,34,VHDL语言的描述语句,根据可选项,EXIT语句有三种格式:,(5)EXIT语句,格式1:EXIT,功能:无条件跳出循环,从END LOOP下面的语句开始执行。,格式2:EXIT 循环标号,功能:无条件跳出循环,从循环标号规定的位置开始执行循环体外的语句。,格式3:EXIT WHEN 条件表达式,功能:有条件跳出循环,当条件表达式不成立时,继续执行循环,否则跳出循环。,35,VHDL语言的描述语句,【例6.8】用EXIT语句实现两个数组的比较。,PROCESS(X,Y)BEGIN Z=“00”;FOR n IN 7 DOWNTO 0 LOOP IF(X(n)=Y(n)THEN NEXT;ELSIF(X(n)Y(n)THEN Z=“01”;EXIT;ELSE Z=“10”;EXIT;END IF;END LOOP;END PROCESS;,设X、Y分别为八位数组,当X=Y时,Z=00;当XY时,Z=10;当XY时,Z=01。,36,VHDL语言的描述语句,【例6.9】用EXIT_WHEN语句实现两个数组的比较。,PROCESS(X,Y)BEGIN Z=“00”;FOR n IN 7 DOWNTO 0 LOOP NEXT WHEN(X(n)=Y(n);Z=“01”;EXIT WHEN(X(n)Y(n);Z=“10”;EXIT;END LOOP;END PROCESS;,37,VHDL语言的描述语句,等待(WAIT)语句在进程或过程中使用,用于程序的暂停和等待。,3.等待语句,格式:,WAIT ON 敏感信号表 UNTIL 条件表达式 FOR 时间表达式;,当执行到WAIT语句时,程序执行被暂停,直到满足此语句设置的等待结束条件后,重新执行程序。,38,VHDL语言的描述语句,根据可选项,WAIT语句有四种格式:,格式1:WAIT,功能:永远处于等待状态,格式2:WAIT ON 敏感信号表;,功能:程序进入等待状态,直至敏感信号表中的任一信号发生变化时,结束等待重新执行程序。,例如:SIGNAL a,b:STD LOGIC;PROCESS WAIT ON a,b;END PROCESS;,-暂停程序的执行,直到a或b发生 变化才重新启动。,3.等待语句,39,VHDL语言的描述语句,格式3:WAIT UNTIL 条件表达式;,功能:程序进入等待状态,直至表达式中的敏感信号发生变化,而且满足表达式设置的条件时,结束等待重新执行程序。,例如:WAIT UNTIL clk=1AND clkEVENT;z=x OR y;,3.等待语句,执行到WAIT语句后,暂停程序的执行,直到clk的上升沿到来时,才恢复程序的运行,执行其后的赋值语句。,40,VHDL语言的描述语句,格式4:WAIT FOR 时间表达式;,功能:从执行到当前的WAIT语句开始,在此时间段内,程序处于等待状态,当超过时间表达式给定的时间后,程序自动恢复执行。,例如:WAIT FOR 25ns;z=x NAND y;,3.等待语句,执行该语句后,暂停程序的执行,直到时间(25ns)到才恢复程序的运行,将x NAND y赋值给z。,41,VHDL语言的描述语句,空操作(NULL)语句类似于计算机汇编语言中的NOP指令,执行该语句时不进行任何操作,只是使程序跨入到下一条语句。,4.空操作语句,格式:NULL;,例如:三路数据选择器的描述。CASE sel IS WHEN“00”=y y y NULL;END CASE;,-排除一些其他不用的条件,42,课堂练习(The second),6.1 简述顺序语句与并行语句的区别?6.2 简述VHDL的六类基本顺序语句?6.3 写出IF的三种格式及每种格式的功能?6.4 写出LOOP的三种格式及每种格式的功能?6.5 写出NEXT语句的三种格式及每种格式的功能?6.6 写出EXIT语句的三种格式及每种格式的功能?6.7 写出WATE语句的四种格式及每种格式的功能?,43,VHDL语言的描述语句,6.2 VHDL语言的并行描述语句,并行语句又称并发语句,是最具有VHDL特色的语句结构。并行语句具有多种语言格式,各并行语句在结构体中的执行是同步进行的,或者说是并发运行的,其执行方式与书写的顺序无关。同一结构中的各并行语句之间可以是相互独立的、不相关的,也可以进行信息传递。在并行语句内部可以嵌套其他语句,嵌套的语句可以并行执行,也可以顺序执行。,44,VHDL语言的描述语句,6.2 VHDL语言的并行描述语句,在VHDL语言中,并行语句主要有六种:进程语句 并行信号赋值语句 块语句 元件例化语句 生成语句 断言语句,45,VHDL语言的描述语句,进程(PROCESS)语句是在结构体中用来描述特定电路功能的程序模块,它提供了一种用顺序语句描述电路逻辑功能的方法。,1.进程语句,一个结构体中可以有多个并行运行的进程结构,而每个进程结构的内部由一组顺序语句组成。,进程语句结构具有并行执行和顺序处理的双重特性。,46,47,VHDL语言的描述语句,(1)进程语句的结构,进程标号:PROCESS(敏感信号参数表)IS进程说明部分 BEGIN顺序描述语句 END PROCESS 进程标号;,格式:,当敏感信号表中的某个信号发生变化时,立即启动进程语句,将进程中的顺序语句按顺序循环执行,直到敏感信号稳定不变为止。,48,VHDL语言的描述语句,(2)进程语句的组成,进程说明部分,进程语句的结构由三部分组成,即进程说明部分、顺序描述语句部分和敏感信号参数表。,用于定义该进程所需要的局部数据环境。如:数据类型、常数、属性、子程序等。注意:不能在进程内部定义信号和共享变量,信号只能在结构体说明中定义。,49,VHDL语言的描述语句,(2)进程语句的组成,顺序描述语句部分,是一段顺序执行语句,用于描述该进程的行为。,信号赋值语句:在进程中将计算或处理的结果赋值给信号。,变量赋值语句:在进程中以变量的形式存储计算的中间值。,子程序调用语句:对已定义的过程和函数进行调用,并参与计算。,50,VHDL语言的描述语句,(2)进程语句的组成,顺序描述语句部分,进程启动语句:当PROCESS语句未列出任何敏感信号时,进程的启动可通过WAIT语句来实现。,顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句。,进程跳出语句:包括NEXT语句和EXIT语句。,敏感信号参数表,用于启动本进程可读入的信号名。,51,PROCESS 组成,PROCESS语句结构,进程说明,顺序描述语句,敏感信号参数表,信号赋值语句,变量赋值语句,进程启动语句,子程序调用语句,顺序描述语句,进程跳出语句,52,VHDL语言的描述语句,【例6.10】用进程语句描述异步清零计数器。,异步清零方式与时钟信号clk无关,当清零端clr=0时,计数状态Q=0;当clr=1时,计数器为计数状态。,PROCESS(clk,clr)BEGIN IF clr=0 THEN Q=0;ELSIF(clk=1AND clkEVENT)THEN Q=Q+1;END IF;END PROCESS;,53,VHDL语言的描述语句,【例6.10】用进程语句描述异步清零计数器。,若计数器采用同步清零,则敏感表中可无clr信号,此时进程如下:,PROCESS(clk)BEGIN IF(clk=1AND clkEVENT)THEN IF clr=0 THEN Q=X“00”;ELSE Q=Q+1;END IF;END IF;END PROCESS;,54,(1)进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量。,(2)顺序描述语句部分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。,(3)为启动进程,在进程中必须包含有一个显式的敏感信号量表或者包含一个WAIT语句;敏感信号表应当紧跟在PROCESS之后,含有敏感信号表的进程语句中不允许再显式出现WAIT语句。,说明,55,1.PROCESS为一无限循环语句,2.PROCESS语句具有顺序/并行运行双重性,3.进程必须由敏感信号的变化来启动,4.信号是多个进程间的通信线,PROCESS语句特点,5.一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,56,VHDL语言的描述语句,并行信号赋值语句是将一个数据或一个表达式的运算结果送给一个数据对象,其赋值目标必须是信号而不能是变量。信号赋值语句可以位于进程语句中,也可以在进程语句之外。若出现在进程语句结构内,则属于顺序语句,否则为并行信号赋值语句。,2.并行信号赋值语句,并行信号赋值语句有三种形式:简单信号赋值语句 条件信号赋值语句 选择信号赋值语句,57,VHDL语言的描述语句,(1)简单信号赋值语句,是VHDL并行语句结构中最基本的单元。,格式:赋值目标=表达式;,规则:赋值目标必须是信号;赋值目标的数据类型必须与表达式数据类型一致。,例如:OUT_1=B AND C;,58,VHDL语言的描述语句,(2)条件信号赋值语句,该语句与IF语句相类似,根据不同的赋值条件,选择表达式中的值赋给赋值目标。,赋值目标=表达式1 WHEN 赋值条件1 ELSE 表达式2 WHEN 赋值条件2 ELSE 表达式n;,格式:,根据指定条件对信号赋值,条件可以为任意表达式根据条件的出现的先后次序隐含优先权最后一个 ELSE子句隐含了所有未列出的条件每一子句的结尾没有标点,只有最后一句有分号,59,VHDL语言的描述语句,【例6.11】用条件赋值语句实现四选一数据选择器。,ARCHITECTURE example5 OF mux41 IS SIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN s=s1&s0;y=d0 WHEN s=“00”ELSE d1 WHEN s=“01”ELSE d2 WHEN s=“10”ELSE d3;END example5;,-当s=00时,y=d0-当s=01时,y=d1-当s=10时,y=d2-当s取其他值时,y=d3,60,VHDL语言的描述语句,(3)选择信号赋值语句,与CASE语句相类似,以选择表达式的不同取值为选择条件,将多个表达式的值赋给赋值目标。,WITH 选择表达式 SELECT 赋值目标=表达式1 WHEN 选择值1,表达式2 WHEN 选择值2,表达式n WHEN 选择值n;,格式:,该语句对子句中的“选择值”进行选择,当子句中“选择值”与“选择表达式”的值相同时,则将子句中的“表达式”的值赋给赋值目标。,规则:该语句不允许有选择值重叠现象;该语句不允许选择值涵盖不全的情况;每个子句以“,”号结束,最后一个子句以“;”结束。,61,VHDL语言的描述语句,用选择信号赋值语句实现四选一数据选择器。,ARCHITECTURE example6 OF mux41 IS SIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN s=s1&s0;WITH s SELECT y=d0 WHEN“00”,d1 WHEN“01”,d2 WHEN“10”,d3 WHEN“11”,Z WHEN OTHERS;END example6;,-当s=00时,y=d0-当s=01时,y=d1-当s=10时,y=d2-当s=11时,y=d3-当s取其他值时,y为高阻,62,VHDL语言的描述语句,块(BLOCK)语句可以将一些实现某一特定功能的并行语句组合在一起,其主要目的是利用多个块语句结构将一个复杂的结构体划分成几个不同功能的模块,使复杂的结构体结构分明、功能明确,使程序的编排更加清晰、更有层次,改善并行语句的结构和可读性,便于程序的编写、调试和查错。,3.块语句,63,VHDL语言的描述语句,(1)块语句的格式,块语句是将结构体中并行语句进行组合的一种方法。,块标号:BLOCK(块保护表达式)接口说明;类属说明;BEGIN 并行语句;END BLOCK 块标号;,格式:,保护表达式 是可选项,它是一个布尔表达式。保护表达式的作用是:只有当其为真时,该块中的语句才被启动执行;否则,该块中的语句不被执行。BLOCK语句 中所描述的各个语句是可以并行执行的,它和书写顺序无关。,64,VHDL语言的描述语句,(2)块语句的应用,利用块语句可以将结构体中的并行语句划分成多个并行方式的子块,每一个子块都是一个独立的设计实体,具有自己的类属参数和界面端口,以及与外部环境的衔接描述。块语句还可以实现嵌套,内层的块语句可以使用外层块语句所定义的信号,但外层块语句不能使用内层块语句定义的信号。,65,VHDL语言的描述语句,运算电路的输入为A和B,输出为SUM(八位和)、SUB(八位差),以及进位CO和借位BO。,【例6.12】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。,LIBRARY IEEE;USE IEEE.STD LOGIC 1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY add_sub IS PORT(A,B:IN STD LOGIC_VECTOR(7 DOWNTO 0);SUM,SUB:OUT STD LOGIC_VECTOR(7 DOWNTO 0);CO,BO:OUT STD LOGIC);END add_sub;,66,VHDL语言的描述语句,【例6.12】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。,ARCHITECTURE example12 OF add_sub IS SIGNAL AA,BB,SM,SB:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN AA=0&A;BB=0&B;WITH s SELECT ADDER:BLOCK BEGIN SM=AA+BB;SUM=SM(7 DOWNTO 0);CO=SM(8);END BLOCK ADDER;,-ADDER块行为描述语句-运算结果送入SUM-进位送入CO,67,VHDL语言的描述语句,【例6.12】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。,SUBTRACTER:BLOCK BEGIN SB=AA-BB;SUB=SB(7 DOWNTO 0);BO=SB(8);END BLOCK SUBTRACTER;END example12;,-SUBTRACTER块行为描述语句-运算结果送入SUB-进位送入BO,68,VHDL语言的描述语句,生成(GENERATE)语句具有复制功能,可以对有规律设计结构的逻辑描述进行简化。当设计一个由多个相同单元模块组成的电路时,只要根据某些条件,设计好某一个元件,就可以用生成语句复制一组完全相同的并行元件或设计单元来组成电路。,4.生成语句,69,VHDL语言的描述语句,生成语句有两种格式:,4.生成语句,格式1:,标号:FOR 循环变量 IN 取值范围 GENERATE 说明部分 BEGIN 并行语句;END GENERATE 标号;,70,VHDL语言的描述语句,生成语句有两种格式:,4.生成语句,格式2:,标号:IF 条件 GENERATE 说明部分 BEGIN 并行语句;END GENERATE 标号;,71,VHDL语言的描述语句,生成语句的格式由四部分组成:使用FOR语句或IF语句结构,来规定重复生成并行语句的方式;通过说明部分,对元件数据类型、子程序、数据对象进行局部的说明;并行语句主要用生成语句来复制一组相同的并行元件,其语句包括所有的并行语句,甚至生成语句本身,可实现嵌套式生成结构;标号是可选择项,在嵌套式生成结构中起着十分重要的作用。,4.生成语句,72,VHDL语言的描述语句,【例6.14】试用格式1的生成语句,描述用D触发器组成的八位移位寄存器。,描述D触发器的源程序,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ff_d IS PORT(d,cp:IN STD_LOGIC;q:OUT STD_LOGIC);END ff_d;ARCHITECTURE example14 OF ff_d IS BEGIN PROCESS(cp)BEGIN IF cp=1AND cpEVENT THEN q=d;END IF;END PROCESS;END example14;,73,VHDL语言的描述语句,【例6.14】试用格式1的生成语句,描述用D触发器组成的八位移位寄存器。,描述移位寄存器的源程序,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shift_reg_8 IS PORT(Din,CLK:IN STD_LOGIC;Dout:OUT STD_LOGIC);Q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END shift_reg_8;ARCHITECTURE example14 OF shift_reg_8 IS COMPONENT ff_d;PORT(d,cp:IN STD_LOGIC;q:IN STD_LOGIC);END COMPONENT;SIGNAL d:STD_LOGIC_VECTOR(0 TO 8);,-元件定义,74,VHDL语言的描述语句,【例6.14】试用格式1的生成语句,描述用D触发器组成的八位移位寄存器。,描述移位寄存器的源程序,BEGIN d(0)=Din;gen2:FOR n IN 0 TO 7 GENERATE fx:ff_d PORT MAP(d(n),CLK,d(n+1);END GENERATE;Q(0)=d(1);Q(1)=d(2);Q(2)=d(3);Q(3)=d(4);Q(4)=d(5);Q(5)=d(6);Q(6)=d(7);Q(7)=d(8);Dout=d(8);END example14;,75,VHDL语言的描述语句,元件例化语句是将已设计好的程序定义为一个元件,并将这些元件作为下层设计实体在上层设计实体中进行连接,组成更大规模的设计实体。使用元件例化语句可以实现系统的层次化设计。,5.元件例化语句,元件例化语句格式:,COMPONENT 元件名 IS GENERIC 说明;PORT 说明;END COMPONENT;例化名:元件名 PORT MAP(信号连接关系,);,元件定义,元件例化,76,VHDL语言的描述语句,元件定义部分用来在结构体中定义元件,由类属说明(GENERIC)语句指明被定义元件的端口数据类型和参数,由端口说明(PORT)语句指明对外连接的各端口名。,5.元件例化语句,元件例化部分用来实现元件的调用,说明该元件与当前设计实体如何连接。其中,关键字为PORT MAP,表示端口映射的意思,用于指明被调用元件与当前设计实体的连接关系,即关联关系。,77,VHDL语言的描述语句,【例6.13】试用元件例化语句,将四选一数据选择器用二选一来实现。,Y,D0 D1,D2 D3,S1,S0,A,B,78,VHDL语言的描述语句,顶层文件:,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(D0,D1,D2,D3:IN STD_LOGIC;S0,S1:IN STD_LOGIC;Y:OUT STD_LOGIC);END mux4;ARCHITECTURE example13 OF mux4 IS COMPONENT mux2 PORT(a,b,s:IN STD_LOGIC;y:OUT STD_LOGIC);END COMPONENT;SIGNAL A,B:STD_LOGIC;BEGIN U1:mux2 PORT MAP(D0,D1,S0,A);U2:mux2 PORT MAP(a=D2,b=D3,s=S0,y=B);U3:mux2 PORT MAP(A,B,S1,y=Y);END exmple13;,-元件例化-元件定义,-位置关联方式-名称关联方式-混合关联方式,【例6.13】试用元件例化语句,将四选一数据选择器用二选一来实现。,79,第4章 VHDL硬件描述语言,底层文件:,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux2 IS PORT(a,b,s:IN STD_LOGIC;y:OUT STD_LOGIC);END mux2;ARCHITECTURE example13 OF mux2 IS BEGIN y=a WHEN s=0 ELSE b;END example13;,-二选一数据选择器,【例6.13】试用元件例化语句,将四选一数据选择器用二选一来实现。,80,VHDL语言的描述语句,5.元件例化语句,元件例化语句所描述的关联关系有三种方式:,位置关联:名称关联:混合关联:,是元件例化PORT MAP()中所列的信号名,与元件定义COMPONENT中的PORT端口信号名称在顺序、端口状态和数据类型上必须一致。如:U1:mux2 PORT MAP(D0,D1,S0,A);信号D0、D1、S0和A,分别对应a、b、s和y。,是用“=”号将元件定义中的信号名与PORT MAP()中所列的信号名连接起来。,如:U2:mux2 PORT MAP(a=D2,b=D3,s=S0,y=B);,是在PORT MAP()的信号连接关系中含有上述的两种方式。,如:U3:mux2 PORT MAP(A,B,S1,y=Y);,81,VHDL语言的描述