第十一章---数字逻辑_第1页
第十一章---数字逻辑_第2页
第十一章---数字逻辑_第3页
第十一章---数字逻辑_第4页
第十一章---数字逻辑_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第十一章第十一章 VHDL2一、硬件描述语言(一、硬件描述语言(HDL)1.VHDL :VHSIC Hardware Description Language; VHSIC : Very High Speed Integrated Circuit;2.Verilog-HDL 可以描述硬件电路的功能、信号连接关可以描述硬件电路的功能、信号连接关系及定时关系的语言。它可以比电原理图更系及定时关系的语言。它可以比电原理图更有效地表示硬件电路的特性。有效地表示硬件电路的特性。IEEE(Institute of Electrical and Electronics Engineers)的工业标准硬件描

2、述语言的工业标准硬件描述语言: 11.1 概述概述31.IEEE1076-1987(VHDL-87) VHDL-93相对于相对于VHDL-87没有什么大变化,主没有什么大变化,主要是增加了针对要是增加了针对VHDL模型的新的模型的新的VHDL命令命令和属性。和属性。二、二、VHDL的发展概况的发展概况2.IEEE1164-1993(VHDL-93) 4在行为描述阶段并不真正考虑实际的操作、算在行为描述阶段并不真正考虑实际的操作、算法、用什么逻辑电路来实现,其目的是通过法、用什么逻辑电路来实现,其目的是通过对系统行为描述的仿真来发现设计中存在的对系统行为描述的仿真来发现设计中存在的问题,检查该数

3、学模型能否达到系统设计规问题,检查该数学模型能否达到系统设计规格书的要求。格书的要求。1.行为描述行为描述 :对整个系统的:对整个系统的 数学模型进行描述。数学模型进行描述。三、用三、用VHDL设计硬件电路的过程设计硬件电路的过程53.逻辑综合逻辑综合利用逻辑综合工具,将利用逻辑综合工具,将RTL描述的程序转换成描述的程序转换成用基本逻辑元件(宏单元)表示的文件(门用基本逻辑元件(宏单元)表示的文件(门级网表、原理图)。即把布尔函数转换为门级网表、原理图)。即把布尔函数转换为门并实现最小化。并实现最小化。2.RTL描述(寄存器传输描述或数据流描述)描述(寄存器传输描述或数据流描述) 系统只有采

4、用系统只有采用RTL方式进行描述,才能导出系方式进行描述,才能导出系统的逻辑表达式,才能进行逻辑综合,从统的逻辑表达式,才能进行逻辑综合,从而得到具体的逻辑器件。而得到具体的逻辑器件。6用用VHDL设计系统硬件的过程设计系统硬件的过程规格设计规格设计行为级描述行为级描述行为级仿真行为级仿真RTL级描述级描述RTL级仿真级仿真逻辑综合逻辑综合门级仿真、定时检查门级仿真、定时检查输出门级网表输出门级网表711.2、VHDL基本构件基本构件 实体实体(Entity):):描述所设计的系统的外部接口描述所设计的系统的外部接口信号;信号;构造体构造体(Architecture) :描述系统内部的结构描述

5、系统内部的结构和行为和行为,即电路的具体描述;即电路的具体描述;包集合包集合(Package) :存放各设计模块都能共享存放各设计模块都能共享的数据类型、常数和子程序等;的数据类型、常数和子程序等;配置配置(Configuration) : :用于从库中选取所需用于从库中选取所需单元来组成系统设计的不同版本;单元来组成系统设计的不同版本;库库(Library) : :存放已经编译的实体、构造体、存放已经编译的实体、构造体、包集合和配置;包集合和配置;81.实体(实体(Entity)ENTITY 实体名实体名 IS GENERIC(类属表类属表) -将信息参数传输给实体将信息参数传输给实体POR

6、T(端口表端口表) -实体的输入输出信号及其模式实体的输入输出信号及其模式END 实体名;实体名;用来定义实体与外部的连接关系以及需传给实用来定义实体与外部的连接关系以及需传给实体的参数体的参数9端口模式端口模式模模 式式含含 义义IN输入输入OUT输出(构造体内部不能再使用)输出(构造体内部不能再使用)INOUT双向双向BUFFER输出(构造体内部可再使用)输出(构造体内部可再使用)LINKAGE不指定方向,无论哪一个方向都可连接,不指定方向,无论哪一个方向都可连接,只用在文档中。只用在文档中。类型指定:在逻辑电路设计中,常用类型指定:在逻辑电路设计中,常用BIT和和BIT_VECTOR两种

7、。两种。10例例1: 对对Black-Box实体实体的描述的描述ENTITY Black_Box ISPORT(rst,clk:IN std_logic;d:IN std_logic_vector(7 DOWNTO 0);q:BUFFER std_logic_vector(7 DOWNTO 0)co:OUT std_logic);END Black_Box;D7,0 q7,0Rst coCLKBlack-box11例例2:对对半加器的实体半加器的实体描述描述:半加器半加器abcsENTITY half_adder ISGENERIC(tpd:time:=2ns);PORT(a,b:IN Bit

8、;s,c:OUT Bit);END half_adder;122.构造体(构造体(Architecture)作用作用:通过若干并行语句来描述实体的逻辑功能或通过若干并行语句来描述实体的逻辑功能或内部电路结构内部电路结构,从而建立实体输出与输入的关系。从而建立实体输出与输入的关系。格式为:格式为:ARCHITECTURE 构造体名构造体名 OF 实体名实体名 IS 说明语句;说明语句;BEGINEND 构造体名;构造体名;并行语句;并行语句;13例例11.6.2 一个构造体的实例。一个构造体的实例。LIBRARY IEEEUSE IEEE.Std_logic_1164.all;ENTITY lo

9、gic ISPORT(a,b:IN std_logic;w,x,y:OUT std_logic);END logic;ARCHITECTURE behavior OF logic ISBEGIN y=a and b; w=a or b; x=1;END behavior;14VHDL语言构造体的描述方式语言构造体的描述方式 1.1.行为描述方式行为描述方式无需包含任何结构信息,只是对输入信号和输出信号无需包含任何结构信息,只是对输入信号和输出信号关系的描述。关系的描述。行为描述方式是对系统数学模型的描述,其抽象行为描述方式是对系统数学模型的描述,其抽象程度比其它两种描述方式更高。程度比其它两种

10、描述方式更高。在在VHDL语言中存在一些专门用于描述系统行为的语言中存在一些专门用于描述系统行为的语句。语句。15ARCHITECTURE beh1_ha OF half_adder ISBEGIN c1:PROCESS(a,b) -PROCESS为进程语句,括号为进程语句,括号 -内的信号是进程的激活条件内的信号是进程的激活条件 BEGINIF a=1 AND b=1 THENc=1;ELSEc=0;END IF;END PROCESS c1;半加器的真值表为:半加器的真值表为: ab cs000110110001011016c2:PROCESS(a,b)BEGINIF a=0 AND b=

11、0 THENs=0;ELSIF a=1 AND b=1 THENs=0;ELSEs=1END IF;END PROCESS c2;END beh1_ha;说明:说明:1)进程语句属于并行语句;)进程语句属于并行语句; 2)进程语句内部由顺序语句构成;)进程语句内部由顺序语句构成;17ARCHITECTURE beh2_ha OF half_adder ISBEGIN PROCESS(a,b) BEGINIF a=0 AND b=0 THENc=0; s=0;ELSEIF a=1 AND b=1 THENc=1;s=0;ELSEc=0; s=1;END IF;END PROCESS;END be

12、h2_ha;半加器构造体的另一种行为描述方式:半加器构造体的另一种行为描述方式:182.寄存器传输寄存器传输(RTL)描述方式描述方式(数据流描述方式数据流描述方式) 反映了从输入数据到输出数据之间所发生的逻辑反映了从输入数据到输出数据之间所发生的逻辑变换,一般采用与寄存器硬件一一对应的直变换,一般采用与寄存器硬件一一对应的直接描述。接描述。&=1abcs由半加器的真值表可导出输出函数:由半加器的真值表可导出输出函数:19ARCHITECTURE rtl_ha OF half_adder ISBEGINs=a XOR b ; cnsel,b=d1,c=ab);24ENTITY mux2

13、 IS PORT(d0,d1,sel:IN BIT; q:OUT BIT); END mux2;ARCHITECTURE struct OF mux2 IS COMPONENT and2 PORT (a,b:IN BIT; c :OUT BIT); END COMPONENT; COMPONENT or2 PORT (a,b:IN BIT; c :OUT BIT); END COMPONENT;例:例: 分析下列分析下列VHDLVHDL语言描述的逻辑功能。语言描述的逻辑功能。25 BEGINu1:inv PORT MAP (sel,nsel);SIGNAL aa,ab,nsel:BIT;COM

14、PONENT inv PORT (a:IN BIT; c :OUT BIT);END COMPONENT;u2:and2 PORT MAP (nsel,d1,ab);u3:and2 PORT MAP (d0,sel,aa);u4:or2 PORT MAP (aa,ab,q);END struct;26二选一数据选择器的电路原理图二选一数据选择器的电路原理图&11d0d1selqaaabnselu1u2u327LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY exercise IS PORT(A,B,Carry_in:IN std_logic

15、; AB,Carry_out:OUT std_logic);END exercise;ARCHITECTURE structure OF exercise IS Signal Temp_sum,Temp_carry1,Temp_carry2:std_logic;COMPONENT half_adder PORT(X,Y:IN std_logic; sum,Carry:OUT std_logic);END COMPONENT;试分析下述试分析下述VHDL语言描述的电路功能:语言描述的电路功能:28COMPONENT or_adder PORT(IN1,IN2:IN std_logic; OUT1

16、:OUT std_logic);END COMPONENT;BEGINU0:half_adder PORT MAP (A,B,Temp_sum,Temp_carry1);U1:half_adder PORT MAP (Temp_sum,Carry_in,AB,Temp_carry2);U2:or_gate PORT MAP (Temp_carry1,Temp_carry2,Carry_out);END structure;293.配置(配置(Configuration)作用:一个实体可以有多个构造体,当对某实体作用:一个实体可以有多个构造体,当对某实体进行仿真或综合时,需将该实体与它的一个构进

17、行仿真或综合时,需将该实体与它的一个构造体连接起来;当某实体被其他实体造体连接起来;当某实体被其他实体 引用时,引用时,需指定所生成的例元与该实体的哪个构造体相需指定所生成的例元与该实体的哪个构造体相对应。对应。CONFIGURATION 配置名配置名 OF 实体名实体名 IS语句说明语句说明END 配置名;配置名;30 ENTITY rsff IS PORT (set,reset: IN BIT;q,qb:BUFFER BIT); END rsff ; ARCHITECTURE netlist OF rsff ISCOMPONENT nand2PORT ( a,b:IN BIT;c:OUT

18、BIT)END COMPONENT;BEGINU1: nand2 PORT MAP(a=set,b=qb,c=q);U1: nand2 PORT MAP(a=reset,b=q,c=qb);END netlist;例例11.6.3 关于关于RS触发器的实例。触发器的实例。31 ARCHITECTURE behave OF rsff ISBEGINq = not (qb AND set);qb RETURN 1;WHEN 1 = RETURN 0;WHEN Z = RETURN Z;END CASE;END Invert;END logic;PACKAGE BODY logic ISFUNCTI

19、ON Invert (input:three_level_logic)RETURN three_level_logic IS35说明:说明:A、在包头说明中,除定义数据类型和常量外,还需、在包头说明中,除定义数据类型和常量外,还需对包体单元中的子程序作出说明。因为只有包头中对包体单元中的子程序作出说明。因为只有包头中说明的标识符在程序包外才是可见的,仅在包体中说明的标识符在程序包外才是可见的,仅在包体中说明的标识符在程序包外是不可见的。说明的标识符在程序包外是不可见的。B、子程序体不能放在包头中,只能放在包体中。、子程序体不能放在包头中,只能放在包体中。C、若程序包中不包含子程序,则包体可以省

20、略。、若程序包中不包含子程序,则包体可以省略。调用格式:调用格式:USE 库名库名.程序包名程序包名.项目名项目名36LIBRARY IEEE;-打开打开STD_LOGIC_1164包所在的库包所在的库USE IEEE.STD_LOGIC_1164.ALL;-调用包中的所有项调用包中的所有项USE WORK.logic.Unknow_value;-使用包中的使用包中的Unknow_value项项USE WORK.logic.ALL;-使用包中的所用项使用包中的所用项375.库(库(Library):):存放已经编译的实体、构造存放已经编译的实体、构造体、包集合和配置,是经编译后的数据的集体、包

21、集合和配置,是经编译后的数据的集合。合。(1)库的种类)库的种类IEEE库库STD_LOGIC_1164 -IEEE正式认可的标准包集合正式认可的标准包集合STD_LOGIC_ARITH -SYNOPSYS公司提供包集合公司提供包集合STD_LOGIC_UNSIGNED-SYNOPSYS公司提供包集合公司提供包集合LIBRARY 库名表;库名表;-库名表为一系列库名表为一系列“,”分割的库名。分割的库名。38STD库库:VHDL的标准库的标准库STANDARD-VHDL的标准配置,调用其中的数据,可不加说明的标准配置,调用其中的数据,可不加说明TEXTIO-调用其中的数据,必须先说明调用其中的

22、数据,必须先说明-LIBRARY STD;-USE STD.TEXTIO.ALL;面向面向ASIC的库的库:用于门级仿真:用于门级仿真39WORK库库:现行作业库,使用该库时无需说明:现行作业库,使用该库时无需说明用户定义库用户定义库 :使用该库时需先说明:使用该库时需先说明(2)库的使用)库的使用库的说明库的说明USE LIBRARY_NAME.PACKAGE_NAME.ITEM_NAME;LIBRARY 库名;库名;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;40库说明作用范围库说明作用范围从一个实体说明开始到它所属的构造体、配置从一个实体说明开始到它

23、所属的构造体、配置为止。为止。例例5 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and1 ISEND and1; ARCHITECTURE rtl OF and1 ISEND rtl; 41LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or1 IS END s2; CONFIGURATION s1 OF and1 ISEND s1; CONFIGURATION s2 OF or1 IS42五、子程序(五、子程序(Subprogram) 1.函数(函数(Function)定义:便于在程序中重复

24、使用的一组顺序语句。定义:便于在程序中重复使用的一组顺序语句。不是独立的编译单元,只能放在实体(被该实体不是独立的编译单元,只能放在实体(被该实体专用)或程序包中(可被多个实体共用)。专用)或程序包中(可被多个实体共用)。作用是求值,若干参数输入,只有一个返回值作为作用是求值,若干参数输入,只有一个返回值作为输出输出43一般格式:一般格式:FUNCTION 函数名(参数表)函数名(参数表)RETURN 数据类型数据类型 IS 说明语句;说明语句; -说明函数体内引用的对象和过程说明函数体内引用的对象和过程BEGIN 顺序语句;顺序语句; -函数体定义函数的功能函数体定义函数的功能END 函数名

25、;函数名;说明:说明:A、参数表中需说明参数名、参数类型(信号或常量)及、参数表中需说明参数名、参数类型(信号或常量)及其数据类型。其数据类型。B、RETURN之后的数据类型表示函数返回值的类型。之后的数据类型表示函数返回值的类型。44ELSERETURN y;END IF;END Min;例例11.6.5 函数举例函数举例-返回两数中的较小数。返回两数中的较小数。FUNCTION Min(x,y:INTEGER ) RETURN INTEGER ISBEGINIF xy THENRETURN x;452.过程(过程(Procedure)作用:通过参数进行内外信息的传递,与其它作用:通过参数进

26、行内外信息的传递,与其它高级语言中的子程序相当。高级语言中的子程序相当。PROCEDURE 过程名过程名(参数(参数1;参数;参数2;)IS说明语句说明语句BEGIN顺序处理语句顺序处理语句END 过程名过程名;46q:=0;x_flag:=FALSE;FOR i IN zRANGE LOOPq:=q*2;例例11.6.6 过程举例过程举例向量转换成整数类型。向量转换成整数类型。USE IEEE.STD_LOGIC_1164.ALL;PROCEDURE vector_to_intBEGIN(z:IN STD_LOGIC_VECTOR;x_flag:OUT BOOLEAN;q:INOUT INT

27、EGER) IS47IF z(i)=1 THENq:=q+1;ELSEIF z(i)/=0 THENx_flag:=TRUE;END IF;END LOOP;END vector_to_int;-该过程调用后,如果该过程调用后,如果x_flag=TRUE,则说明,则说明转换失败,不能得到正确的转换整数值。转换失败,不能得到正确的转换整数值。4811.3 VHDL语言元素语言元素 1.VHDL语法规则与标识符语法规则与标识符(1)注释(注释(Comment):-(2)标识符(标识符(Identifier)用户自定义用户自定义VHDL语言预定义:如语言预定义:如 ENTITY、SIGNAL。标识符

28、的第一个字符必须是英文字母;标识符的第一个字符必须是英文字母;标识符不能以下划线结束,如标识符不能以下划线结束,如 MUX_;标识符中不允许出现两个连续的下划线;标识符中不允许出现两个连续的下划线;49(3)数(数(Number)的表示)的表示0,987E6 - 十进制整数十进制整数0.5,2.72,12.4E-6 - 十进制实数十进制实数2#11000100# - 二进制数,等于十进制数二进制数,等于十进制数19616#C4# - 十六进制数,等于十进制数十六进制数,等于十进制数1964#301#E1 - 四进制数,等于十进制数四进制数,等于十进制数19616#F.FF#E2 - 十六进制数

29、,等于十进制数十六进制数,等于十进制数4095.0502.数据对象和数据类型数据对象和数据类型(1)数据对象(数据对象(Object)常数(常数(Constant)CONSTANT Vcc:REAL := 5.0;信号(信号(Signal)SIGNAL 信号名信号名:数据类型数据类型 := 表达式表达式;SIGNAL sys_dk:BIT := 0;SIGNAL tem:STD_LOGIC;变量(变量(Varible)VARIABLE x,y:INTEGER;51信号和变量的区别:信号和变量的区别:信号是全局量,可以进行进程之间的通信;信号是全局量,可以进行进程之间的通信;而变量是局部量,只能

30、用于进程或子程序而变量是局部量,只能用于进程或子程序(即函数和过程)中;(即函数和过程)中;对变量的赋值是立即发生的,对信号的赋值对变量的赋值是立即发生的,对信号的赋值须经一段时间延迟才会发生;须经一段时间延迟才会发生;对变量的赋值用对变量的赋值用“:=”,对信号的赋值用,对信号的赋值用“=” ;信号可以比拟为硬件端口之间的连接,而变信号可以比拟为硬件端口之间的连接,而变量则与硬件之间没有对应关系;量则与硬件之间没有对应关系;52(2)(2)数据类型数据类型标准数据类型标准数据类型53数据类型数据类型标标 识识说说 明明整数整数INTEGER-(231-1) +(231-1)实数实数REAL-

31、1.0E+38+1.0E+38位位BIT逻辑逻辑0 或或1,单引号标出,单引号标出位矢量位矢量BIT_VECTORBIT的组合,以双引号标出的组合,以双引号标出字符字符CHARACTERSASCII 字符,单引号标出字符,单引号标出布尔量布尔量BOOLEAN逻辑逻辑“真真”或或“假假”,TRUE or FALSE时间时间TIME时间单位:时间单位:fs,ps,ns,us,ms,sec,min,hr错误等级错误等级SEVERITY LEVELNOTE,WARNING,ERROR,FAILURE自然数自然数NATURAL整数的子集:整数的子集:0231-1正整数正整数POSTIVE整数的子集:整数

32、的子集:1231-1字符串字符串STRING字符矢量,以双引号标出字符矢量,以双引号标出表表11.3.1 VHDL标准数据类型标准数据类型54用户自定义数据类型用户自定义数据类型整数、实数类型整数、实数类型TYPE 数据类型名数据类型名 IS 数据类型数据类型 定义约束范围定义约束范围TYPE digit IS INTEGER RANGE 0 TO 9;枚举类型枚举类型TYPE 数据类型名数据类型名 IS (元素(元素1,元素,元素2,)TYPE arith_op IS (add,sub,mul,div);TYPE color IS (red,green,blue);55 数组和记录数组和记录

33、TYPE big_word IS ARRAY (0 TO 63) OF BIT;TYPE arith_op IS (add,sub,mul,div);TYPE instruction IS RECORD- 一维数组一维数组TYPE matrix_1 IS ARRAY (0 TO 15,0 TO 31) OF BIT;- 二维数组二维数组- 枚举枚举类型类型Operator:arith_op ;56Op1:INTEGER ;Op2:INTEGER ;END RECORD ;VARIABLE inst1,inst2:instruction ;inst1.operator:=add ;inst2.o

34、perator:=sub ;inst1.op1:=10 ;inst1.op2:= inst1.op1 ;57子类型(子类型(SUBTYPE)SUBTYPE 子类型名子类型名 IS 父类型名父类型名 RANGE 范围范围例:例:TYPE arith_op IS (add,sub,mul,div);SUBTYPE add_op IS arith_op RANGE add TO sub;SUBTYPE mul_op IS arith_op RANGE mul TO div;583.3.预定义属性预定义属性表表11.6.3 11.6.3 标量类型预定义属性标量类型预定义属性属性属性说说 明明举例(举例

35、(TYPE bit_pos IS INTEGE RANGE 15 DOWN TO 0)TLEFTT的左边界的左边界Bit_posLEFT = 15TRIGHTT的右边界的右边界Bit_posRIGHT = 0TLOWT的下限的下限Bit_posLOW = 0THIGHT的上限的上限Bit_posHIGH = 1559属性属性说说 明明举例举例(TYPE arith_op IS (add,sub,mul,div)TPOS(X)T中中X的位置的位置arith_opPOS(add) = 0TVAL(N)T中位置是中位置是N的值的值arith_opVAL(1) = subTLEFTOF(X)T中中X成

36、员左边的值成员左边的值arith_opLEFTOF(sub) = addTRIGHTOF(X)T中中X成员右边的值成员右边的值arith_opRIGHTOF(sub) = mulTPRED(X)T中比中比X前一个位置的值前一个位置的值arith_opPRED(sub) = addTSUCC(X)T中比中比X后一个位置的值后一个位置的值arith_opSUCC(sub) = mul表表11.6.4 11.6.4 物理、离散类预定义属性物理、离散类预定义属性60属性属性说说 明明举例举例(TYPE t_d IS ARRAY (8 DOWN TO 0,0 TO 4)ALEFT下标左边界下标左边界t_

37、dLEFT(1) = 8; t_dLEFT(2) = 0;ARIGHT下标右边界下标右边界 t_dRIGHT(1) = 8; t_dRIGHT(2) = 0;TLOW下标下边界下标下边界t_dLOW(1) = 0; t_dLOW(2) = 0;THIGH下标上边界下标上边界t_dHIGH(1) = 8; t_dHIGH(2) = 4;TRANGE下标范围下标范围t_dRANGE(1) =8 DOWN TO 0; t_dRANGE(2) = 0 TO 4;TREVERSE_RANGE下标反向范围下标反向范围t_dREVERSE_RANGE(1) =0 DOWN TO 8; t_dREVERSE_

38、RANGE(2) = 4 DOWN TO 0;TLENGTH数组的长度数组的长度t_dRANGE(1) =8 DOWN TO 0; t_dRANGE(2) = 0 TO 4;表表11.6.5 11.6.5 数组类预定义属性数组类预定义属性614.运算符(运算符(Operatou)分分 类类运算符运算符功功 能能二元算术运算符二元算术运算符+-*/modrem*加加减减乘乘除除求模求模求余求余乘方乘方一元算术运算符一元算术运算符+-abs正号正号负号负号绝对值绝对值表表11.3.2 VHDL 运算符运算符62分分 类类运算符运算符功功 能能关系运算符关系运算符=/=相等相等不相等不相等小于小于大

39、于大于小于等于小于等于大于等于大于等于二元逻辑运算符二元逻辑运算符andor nandnorXor与与或或与非与非或非或非异或异或表表11.3.2 VHDL 运算符(续)运算符(续)63分分 类类运算符运算符功功 能能一元逻辑运算符一元逻辑运算符not求反求反并置运算符并置运算符&连接连接赋值运算符赋值运算符信号赋值信号赋值变量赋值变量赋值结合结合表表11.6.6 VHDL 运算符(续)运算符(续)6411.4 VHDL常用编程语句常用编程语句(1)并发描述并发描述(CONCURRENT)语句语句进程进程(PROCESS)语句语句标号:标号:PROCESS (信号信号1,信号,信号2,

40、)说明语句说明语句BEGIN顺序处理语句顺序处理语句END PROCESS标号标号;65进程语句的特点:进程语句的特点:构造体中多个进程之间是并发运行的,而进构造体中多个进程之间是并发运行的,而进程结构中的语句按顺序执行;程结构中的语句按顺序执行;为启动进程,在进程结构中必须包含一个显为启动进程,在进程结构中必须包含一个显式的敏感信号量表或者包含一个式的敏感信号量表或者包含一个WAIT语句;语句;通过存取构造体或实体中所定义的信号,实通过存取构造体或实体中所定义的信号,实现进程之间的通信。现进程之间的通信。66块块(BLOCK)语句语句标号:标号:BLOCK 说明语句说明语句BEGIN并发处理

41、语句并发处理语句END BLOCK 标号标号 ;67赋值语句赋值语句并发信号赋值语句并发信号赋值语句(实际上是一个进程的缩写)(实际上是一个进程的缩写)ARCHITECTURE behav OF ab_signal ISBEGINOutput = a+b;END behav;目标信号目标信号 = 表达式;表达式;68ARCHITECTURE behav OF ab_signal ISBEGINOutput = a+b;END behav;PROCESS (a,b)BEGINEND PROCESS;69选择信号赋值语句选择信号赋值语句目标信号目标信号 = 表达式表达式1 WHEN 条件条件1,W

42、ITH 表达式表达式 SELECT表达式表达式2 WHEN 条件条件2,表达式表达式n WHEN 条件条件n;注意:必须指明所有的互斥条件。注意:必须指明所有的互斥条件。70LIBRARY IEEE;例例11.4.5 四选一数据选择器的实现。四选一数据选择器的实现。USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISEND mux4;PORT (a,b,c,d:IN STD_LOGIC;s:IN STD_LOGIC_VECTOR(1 DOWN TO 0);x:OUT STD_LOGIC);71ARCHITECTURE archmux OF mux4 ISBEGI

43、NWITH s SELECTx= a WHEN “00”,b WHEN “01”,c WHEN “10”,d WHEN “11”,X WHEN OTHERS;END archmux;72条件信号赋值语句条件信号赋值语句目标信号目标信号 = 表达式表达式1 WHEN 条件条件1 ELSE表达式表达式2 WHEN 条件条件2 ELSE表达式表达式n ;表达式表达式n-1 WHEN 条件条件n-1 ELSE73LIBRARY IEEE;例例11.4.6 四选一数据选择器的实现。四选一数据选择器的实现。USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISEND mux4

44、;PORT (a,b,c,d:IN STD_LOGIC;s:IN STD_LOGIC_VECTOR(1 DOWN TO 0);x:OUT STD_LOGIC);74ARCHITECTURE archmux OF mux4 ISBEGINx= a WHEN “00” ELSEb WHEN “01” ELSEc WHEN “10” ELSEd WHEN “11” ELSEEND archmux;X;75生成生成(GENERATE)语句语句GENERATE 语句用来产生多个相同的结构,有语句用来产生多个相同的结构,有两种使用形式。其典型应用场合是生成存储两种使用形式。其典型应用场合是生成存储器阵列和

45、寄存器阵列(如移位寄存器)。器阵列和寄存器阵列(如移位寄存器)。标号:标号:FOR 变量变量 IN 不连续区间不连续区间 GENERATE并发处理语句并发处理语句END GENERATE 标号标号;标号:标号:IF 条件条件 GENERATE并发处理语句并发处理语句END GENERATE 标号名标号名;76(2)顺序描述顺序描述(SEQUENTIAL)语句语句顺序语句只能用于进程或子程序(即函数和过顺序语句只能用于进程或子程序(即函数和过程)中。语句按书写次序顺序执行。程)中。语句按书写次序顺序执行。条件条件(IF)语句语句对应于并行语句部分的对应于并行语句部分的“条件信号赋值语句条件信号赋

46、值语句”,即:即: WHEN ELSE 语句。语句。77IF 条件条件 THEN顺序处理语句顺序处理语句ELSIF 条件条件 THEN顺序处理语句顺序处理语句END IF;ELSIF 条件条件 THEN顺序处理语句顺序处理语句ELSE顺序处理语句顺序处理语句78LIBRARY IEEE;用用IF 语句实现例语句实现例11.4.5 四选一数据选择器。四选一数据选择器。USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISEND mux4;PORT (a,b,c,d:IN STD_LOGIC;s:IN STD_LOGIC_VECTOR(1 DOWN TO 0);x:O

47、UT STD_LOGIC);79ARCHITECTURE archmux OF mux4 ISBEGINIF (s=“00”) THEN x=a;ELSIF (s=“01”) THEN x=b;END archmux;ELSE x=X;PROCESS(s,a,b,c,d)BEGINELSIF (s=“10”) THEN x=c;ELSIF (s=“11”) THEN x 顺序处理语句;顺序处理语句;WHEN 条件条件 = 顺序处理语句;顺序处理语句;WHEN 条件条件 = 顺序处理语句;顺序处理语句;END CASE ;注意:应该将表达式的所有取值都列出来。注意:应该将表达式的所有取值都列出来

48、。对应于并行语句部分的对应于并行语句部分的“选择信号赋值语句选择信号赋值语句”,即:即: WITH SELECT 语句。语句。81LIBRARY IEEE;用用CASE 语句实现例语句实现例11.4.5 四选一数据选择器。四选一数据选择器。USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISEND mux4;PORT (a,b,c,d:IN STD_LOGIC;s:IN STD_LOGIC_VECTOR(1 DOWN TO 0);x:OUT STD_LOGIC);82ARCHITECTURE archmux OF mux4 ISBEGINCASE s ISWHE

49、N “00” = x x x x x=X;END archmux;83循环循环(LOOP)语句语句标号标号:FOR 循环变量循环变量 IN 离散范围离散范围 LOOP顺序处理语句顺序处理语句END LOOP 标号标号;例例6 ASUM: FOR i IN 1 TO 9 LOOPsum:=i+sum;-sum初始值为初始值为0END LOOP ASUM;- i是循环变量,它可取是循环变量,它可取1,2,9共共9个值。个值。- 该程序对该程序对19的数进行累加计算。的数进行累加计算。84标号标号:WHILE 条件条件 LOOP顺序处理语句;顺序处理语句;END LOOP 标号标号;例例7 i=1;

50、sum:=0;END LOOP ASUM;- 该程序对该程序对19的数进行累加计算。的数进行累加计算。ASUM:WHILE(i10) LOOPsum:=i+sum;i:=i+1;85NEXT 标号标号 WHEN 条件条件;-用来跳出本次循环,转入下一次新的循环。用来跳出本次循环,转入下一次新的循环。注意:若注意:若NEXT后既无后既无“标号标号”也无也无“WHEN 条条件件”说明,那么只要执行到该语句就立即无条件说明,那么只要执行到该语句就立即无条件地跳出本次循环,从地跳出本次循环,从LOOP语句的起始位置进入语句的起始位置进入下一次循环。下一次循环。-用于用于LOOP语句的内部循环控制。语句

51、的内部循环控制。86例例8 PROCESS (a,b)CONSTANT max_limit:INTEGER := 255;BEGINFOR i IN O TO max_limit LOOPIF (done(i)=TRUE) THENNEXT;ELSEdone(i):=TRUE;END IF ;q(i)=a(i) AND b(i);END LOOP;END PROCESS;87EXIT 标号标号 WHEN 条件条件;-用来结束循环状态,从用来结束循环状态,从LOOP语句中跳出。语句中跳出。注意:若注意:若NEXT后既无后既无“标号标号”也无也无“WHEN 条条件件”说明,说明,那么只要执行到该语

52、句就立即无条件地结束循环那么只要执行到该语句就立即无条件地结束循环状态,继续执行状态,继续执行LOOP语句后续的语句。语句后续的语句。88例例9 PROCESS (a)VARIABLE int_a:INTEGER;BEGINFOR i IN O TO max_limit LOOPIF (int_a = 0) THENEXIT;ELSEint_a := int_a-1;END IF ;y=q;END LOOP;END PROCESS;int_a:=a;q(i)=3.1416/REAL(a*i);89等待等待(WAIT)语句语句将一个顺序执行的进程或子程序将一个顺序执行的进程或子程序“挂起挂起”,

53、直,直至所约定的条件满足为止。至所约定的条件满足为止。WAIT语句可以设语句可以设置置4种不同的条件。种不同的条件。WAIT 无限等待无限等待WAIT ON 敏感信号量变化敏感信号量变化WAIT UNTIL 条件满足条件满足WAIT FOR 时间到时间到90WAIT ON 信号信号,信号,信号;例例10 PROCESS (a,b)BEGINEND PROCESS;y = a AND b; PROCESSBEGINEND PROCESS;y = a AND b;WAIT ON a,b;91WAIT UNTIL 表达式;表达式;WAIT UNTIL (x*10)= 20nS)REPORT “Set

54、up Violation”SEVERITY Warning;END IF ;94八、用八、用VHDL设计电路设计电路1.编码器和译码器编码器和译码器(1)3位二进制编码器位二进制编码器有有8个位输入个位输入I0I7,3个位输出个位输出A,B,C。为书写。为书写方便,现定义两个位矢量方便,现定义两个位矢量temp_in(0 TO 7)和和temp_out(0 TO 2)与其输入和输出相对应与其输入和输出相对应。95表表4.2.1 3位二进制编码器真值表位二进制编码器真值表 输输 入入 输输 出出 I0 I1 I2 I3 I4 I5 I6 I7 A B C 1 0 0 0 0 0 0 0 0 0

55、0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 1 1 1 96LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY enco_bin ISPORT (I0,I1,I2,I3,I4,I5,I6,I7:IN STD_LOGIC;A,B,C:OUT STD_LOGIC);END enco_bin;ARCHIT

56、ECTURE rtl OF enco_bin ISSIGNAL tmp_in : STD_LOGIC_VECTOR (0 TO 7);SIGNAL tmp_out : STD_LOGIC_VECTOR (0 TO 2);BEGIN97tmp_in tmp_outtmp_outtmp_outtmp_outtmp_outtmp_outtmp_outtmp_outtmp_out=“000”;A = tmp_out(0);B = tmp_out(1);C = tmp_out(2);END PROCESS;END rtl;99(2)8-3线优先编码器线优先编码器74148100表表4.2.2 83线优先

57、编码器线优先编码器74148功能表功能表 1 0 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 EN使能输入 1 1 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 1 1 1 1 1 1 Y2 Y1 Y0 输 出 0 0 0 0 0 0 1 1 YEX输出标志 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 YEN I7 I6 I5 I4 I3 I2 I1 I0 使能输出 输 入101LIBR

58、ARY IEEE;ENTITY p74148 ISUSE IEEE.STD_LOGIC_1164.ALL; PORT(en,in0,in1,in2,in3,in4,in5,in6,in7:IN STD_LOGIC;yen,yex,y0,y1,y2: OUT STD_LOGIC);END p74148;ARCHITECTURE rtl OF p74148 IS SIGNAL temp_in : STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL temp_out : STD_LOGIC_VECTOR (4 DOWNTO 0);BEGIN 102temp_in = in7&

59、amp;in6&in5&in4&in3&in2&in1&in0;PROCESS(en,temp_in)BEGINIF (en=0) THEN IF(temp_in=“11111111”) THEN temp_out = “11110”;ELSIF (temp_in(7)=0) THEN temp_out = “00001”;ELSIF (temp_in(6)=0) THEN temp_out = “00101”;103 ELSIF (temp_in(5)=0) THEN temp_out = “01001”; ELSIF (temp_in(4)=

60、0) THEN temp_out = “01101”; ELSIF (temp_in(3)=0) THEN temp_out = “10001”; ELSIF (temp_in(2)=0) THEN temp_out = “10101”; ELSIF (temp_in(1)=0) THEN temp_out = “11001”;104 ELSIF (temp_in(0)=0) THEN temp_out = “11101”; END IF; ELSE temp_out = “11111”; END IF; y2 = temp_out(4); y1 = temp_out(3); y0 = temp_out(2); yex = temp_out(1);105 yen = te

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论