1、一、一、VHDLVHDL的主要构件的主要构件VHDL 语言参数部分参数部分程序包程序包接口部分接口部分设计实体设计实体描述部分描述部分结构体结构体VHDL语言基础语言基础 EDA技术的基础知识技术的基础知识Exampleentity and_2 is port (a, b: in std_logic; Y : out std_logic); end and_2;The Entity describesthe inputs and outputsarchitecture dataflow of and_2 isbegin Y=a and b;end dataflow;The Architectu
2、re describes the boxentity nameVHDL 大小写不敏感Library IEEE;use IEEE.std_logic_1164.all;LibraryPackageAND_2abY1.实体(实体(Entity)n描述此设计功能输入输出端口(描述此设计功能输入输出端口(Port)n在层次化设计时,在层次化设计时,Port为模块之间的接口为模块之间的接口n在芯片级,则代表具体芯片的管脚在芯片级,则代表具体芯片的管脚A3.0B3.0equalEntity eqcomp4 isport(a, b: in std_logic_vector(3 downto 0); equa
3、l:out std_logic );end eqcomp4;端口的模式端口的模式n输入(输入(Input)n输出(输出(Output)n双向(双向(Inout):可代替所有其他模式,):可代替所有其他模式,但降低了程序的可读性,一般用于与但降低了程序的可读性,一般用于与CPU的数据总线接口的数据总线接口n缓冲(缓冲(Buffer):与):与Output类似,但允类似,但允许该管脚名作为一些逻辑的输入信号,许该管脚名作为一些逻辑的输入信号,可以返回到实体内部。可以返回到实体内部。 端口说明端口说明PORT ( 端口名端口名,端口名端口名 : 方向方向 数据类型数据类型;:端口名端口名,端口名端口
4、名 : 方向方向 数据类型数据类型 );端口方向端口方向 实实体体INOUTINOUTBUFFERLINKAGE2.结构体(结构体(Architecture)n描述实体硬件的互连关系、数据的传输描述实体硬件的互连关系、数据的传输和变换以及动态行为。和变换以及动态行为。n语法结构:语法结构: ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 结构体说明语句结构体说明语句 BEGIN 功能描述语句功能描述语句 END 结构体名结构体名 n结构体有三种描述方式结构体有三种描述方式n行为描述行为描述(behavioral)n数据流描述数据流描述(dataflow)n结构化描述结构化
5、描述(structural)行为描述行为描述Architecture behavioral of eqcomp4 is begincomp: process (a,b) beginif a=b then equal = 1; else equal =0;end if; end process comp;end behavioral ;高层次的功能描述,高层次的功能描述,不必考虑在电路中不必考虑在电路中到底是怎样实现的。到底是怎样实现的。数据流描述数据流描述描述输入信号经过怎样的变换得到输出信号描述输入信号经过怎样的变换得到输出信号Architecture dataflow1 of eqcomp
6、4 is begin equal = 1 when a=b else 0;end dataflow1;Architecture dataflow2 of eqcomp4 is beginequal = not(a(0) xor b(0) and not(a(1) xor b(1) and not(a(2) xor b(2) and not(a(3) xor b(3);end dataflow2;当当a和和b的宽度发生的宽度发生变化时,需要修改变化时,需要修改设计,当宽度过大设计,当宽度过大时,设计非常繁琐时,设计非常繁琐结构描述结构描述architecture struct of eqcomp
7、4 isbegin U0:xnor2 port map(a(0),b(0),x(0); U1:xnor2 port map(a(1),b(1),x(1); U2:xnor2 port map(a(2),b(2),x(2); U3:xnor2 port map(a(3),b(3),x(3); U4:and4 port map(x(0),x(1),x(2),x(3),equal);end struct;类似于电路的网络表,将各个器类似于电路的网络表,将各个器件通过语言的形式进行连接,与件通过语言的形式进行连接,与电路有一一对应的关系。电路有一一对应的关系。一般用于大规模电路的层次化设一般用于大规模
8、电路的层次化设计时。计时。三种描述方式的比较三种描述方式的比较描述方式描述方式优点优点缺点缺点适用场合适用场合结构化描结构化描述述连接关系清连接关系清晰,电路模晰,电路模块化清晰块化清晰电路不易理解、电路不易理解、繁琐、复杂繁琐、复杂电路层次化设电路层次化设计计数据流描数据流描述述布尔函数定布尔函数定义明白义明白不易描述复杂不易描述复杂电路,修改不电路,修改不易易小门数设计小门数设计行为描述行为描述电路特性清电路特性清楚明了楚明了进行综合效率进行综合效率相对较低相对较低大型复杂的电大型复杂的电路模块设计路模块设计3. 库、程序包和配置库、程序包和配置 设设计计库库IEEE库库预定义库预定义库(
9、 (隐含打开隐含打开) )STD库库STANDARD(隐含说明隐含说明)TEXTIO(用用USE说明说明)WORK库库资资 源源 库库(用用LIBRARY)其它库其它库STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDNUMERIC_STDNUMERIC_BITMATH_REALMATH_COMPLEXVITAL_TIMINGVITAL_PRIMITIVE(1)库、程序包库、程序包程序包放在库中,使用时用程序包放在库中,使用时用USE语句说明语句说明库、程序包说明语句:库、程序包说明语句:Library 库名库名;use 库名库名.程序包名程序包名.
10、项目名项目名;(2)配置配置 一个实体可以有多个结构体描述,但是在进一个实体可以有多个结构体描述,但是在进行仿真和综合时,只能一个实体对应一个确定的行仿真和综合时,只能一个实体对应一个确定的结构体。配置语句用来确定结构体。结构体。配置语句用来确定结构体。语句格式:语句格式:CONFIGURATION 配置名配置名 OF 实体名实体名ISFOR 被选结构体名被选结构体名END FOR ;END 配置名;配置名;ENTITY描述電路的描述電路的I/O介面介面PackageARCHITECTURE描述電路的特性和運作描述電路的特性和運作StructuralData FlowBehavioral不同的
11、描述風格不同的描述風格二、二、VHDLVHDL的数据对象和数据类型的数据对象和数据类型1.VHDL的数据对象的数据对象 类似于一种容器,接受不同数据类似于一种容器,接受不同数据类型的赋值类型的赋值 -常数常数 信号信号 变量变量数据对象数据对象常数(常数(Constant)n 固定值,不能在程序中被改变固定值,不能在程序中被改变n增强程序的可读性,便于修改程序增强程序的可读性,便于修改程序n在综合后,连接到电源和地在综合后,连接到电源和地n可在可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应中进行定义,其有效范围也相应限定限定n常数说明:常
12、数说明:Constant 常数名:常数名: 数据类数据类型型:=表达式表达式Constant data_bus_width: integer := 8;Constant ROM_Size: Integer := 16#FFFF#;数据对象数据对象变量(变量(Variable)n临时数据,没有物理意义临时数据,没有物理意义n只能在只能在Process和和Function中定义,中定义,并只在其并只在其内部有效内部有效n要使其全局有效,先转换为要使其全局有效,先转换为Signal。n用用 进行赋值进行赋值n变量说明:变量说明: 变量名:变量名: 数据类型数据类型变量赋值变量赋值赋值标志赋值标志数据
13、对象数据对象信号(信号(Signals)n 代表连线,代表连线,Port也是一种信号也是一种信号n在在Entity中和中和Architecture中定义中定义n用用 = 进行赋值进行赋值n信号说明:信号说明: signal 信号名:信号名: 数据类型数据类型;signal count:bit_vector(3 downto 0):=“0011”; nsignal Enable: Bit;nsignal CLK, CLEAR: Bit:=1;信号举例信号举例nLIBRARY ieee;nUSE ieee.std_logic_1164.all;nENTITY simp ISnPORT (a, b,
14、 c, d : IN Std_Logic;ng : OUT Std_Logic);nEND simp;nARCHITECTURE logic OF simp ISnSIGNAL e,f : Std_Logic;nBEGINne = a or b;nf=not(c or d);ng =e and f;nEND logic;信号赋值信号赋值信号和变量的作用范围信号和变量的作用范围信号和变量的区别信号和变量的区别2. VHDL的数据类型的数据类型(1) 标准数据类型标准数据类型(编程者可直接使用编程者可直接使用) 预定义类型在预定义类型在VHDL标准程序包标准程序包STANDARD中定义,在应用中自
15、动包含进中定义,在应用中自动包含进VHDL的源文件,的源文件,不需要不需要USE语句显示调用语句显示调用。数据类型如下:数据类型如下: 1)整数()整数(INTEGER)在在VHDL语言中,整数的表示范围为语言中,整数的表示范围为21474836472147483647,即从,即从(2311)到到(2311)。2)实数()实数(REAL)实数的定义值范围为实数的定义值范围为1.0E+381.0E+38。实数有正负数,书写时一定要有小数点。例实数有正负数,书写时一定要有小数点。例如:如:1.0,+2.5,1.0E+383)位位(BIT)用来表示数字系统中的信号值。位值用字符用来表示数字系统中的信
16、号值。位值用字符0或者或者1(将值放在引号中)表示。与整数中的(将值放在引号中)表示。与整数中的1和和0不同,不同,1和和0仅仅表示一个位的两种取值。仅仅表示一个位的两种取值。4)位矢量位矢量(BIT_VECTOR)位矢量是用双引号括起来的一组数据。例如:位矢量是用双引号括起来的一组数据。例如:“001100”,X“00bb”。在这里位矢量前面的。在这里位矢量前面的X表示是十六进制表示是十六进制。使用位使用位矢量时必须注明位宽,矢量时必须注明位宽,即数组中元素个数和排列,例如:即数组中元素个数和排列,例如:SIGNAL s1:BIT_VECTOR(15 DOWNTO 0);); 5)布尔量布尔
17、量(BOOLEAN)一个布尔量具有两种状态,一个布尔量具有两种状态,“真真”或者或者“假假”。没有数值的含没有数值的含义,也义,也不能进行算术运算不能进行算术运算。它。它能进行关系运算能进行关系运算。例如,它可以。例如,它可以在在if语句中被测试,测试结果产生一个布尔量语句中被测试,测试结果产生一个布尔量TRUE或者或者FALSE。 6)字符字符(CHARACTER)用用单引号单引号括起来,括起来,如如a。区分大小写。字符包括从。区分大小写。字符包括从a到到z中的中的任一个字母,从任一个字母,从0到到9中的任一个数以及空格或者特殊字符,如中的任一个数以及空格或者特殊字符,如$,%等等。包集合等
18、等。包集合standard中给出了预定义的中给出了预定义的128个个ASC码字符。码字符。7)字符串字符串(STRING)由双引号括起来的一个字符序列,也称字符矢量或字符串组。由双引号括起来的一个字符序列,也称字符矢量或字符串组。字符串常用于程序的提示和说明。字符串举例如下:字符串常用于程序的提示和说明。字符串举例如下:VATIABLE string_1 : STRING (0TO 3);string_1:= “a b c d”;8)时间时间(TIME)是一个物理量数据。包含整数和单位两部分,而且整数和单位是一个物理量数据。包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。例如之
19、间至少应留一个空格的位置。例如55 sec,2 min等。在包集等。在包集合合STANDARD中给出了时间的预定义,其单位为中给出了时间的预定义,其单位为fs,ps,ns,s,ms,sec,min和和hr。例如:。例如:20 s,100 ns,3 sec。在系统仿真时,时间数据特别有用,用它可以表示信号延时,在系统仿真时,时间数据特别有用,用它可以表示信号延时,从而使模型系统能更逼近实际系统的运行环境。从而使模型系统能更逼近实际系统的运行环境。9)错误等级错误等级(SEVERITY LEVEL)用来表征系统的状态,共有用来表征系统的状态,共有4种:种:note(注意),(注意),warning
20、(警告),(警告),error(出错),(出错),failure(失败)。在系统仿真过(失败)。在系统仿真过程中可以用这程中可以用这4种状态来提示系统当前的工作情况,从而使设种状态来提示系统当前的工作情况,从而使设计人员随时了解当前系统工作的情况,并根据系统的不同状计人员随时了解当前系统工作的情况,并根据系统的不同状态采取相应的对策。态采取相应的对策。1 0 ) 大 于 等 于 零 的 整 数 ( 自 然 数 )大 于 等 于 零 的 整 数 ( 自 然 数 )(NATURAL),),正整数正整数(POSITIVE)这两种数据是整数的子类,这两种数据是整数的子类,NATURAL类数据为取类数据
21、为取0和和0以上以上的正整数;而的正整数;而POSITIVE 则只能为正整数。则只能为正整数。(2) 用户自定义数据类型用户自定义数据类型 格式:格式:type 数据类型名数据类型名 is 数据类型定义;数据类型定义;可以由用户定义的数据类型有:可以由用户定义的数据类型有:枚举枚举(ENUMERATED)类型;)类型;整数整数(INTEGER)类型;)类型;实数实数(REAL)、)、浮点数浮点数(FLOATING)类型;)类型;数组数组(ARRAY)类型;)类型;。枚举类型:把数据类型中的各个元素都列举出来,方便、枚举类型:把数据类型中的各个元素都列举出来,方便、直观,提高了程序可阅读性。书写
22、格式为:直观,提高了程序可阅读性。书写格式为:Type 数据类型名称数据类型名称 is (元素(元素1,元素,元素2,););其中,数据类型名称和元素都是一个标识符,例如:其中,数据类型名称和元素都是一个标识符,例如:Type color is(blue,green,yellow,red););数据类型名称是数据类型名称是color,(元素,(元素1,元素,元素2,)是)是(blue,green,yellow,red)。)。枚举类型中所列举的元素在程序编译过程中通常是自动编枚举类型中所列举的元素在程序编译过程中通常是自动编码,编码顺序是默认的,左边第一个元素编码为码,编码顺序是默认的,左边第一
23、个元素编码为0,以后,以后的依次加的依次加1。编码过程中自动将每一个元素转变成位矢量,。编码过程中自动将每一个元素转变成位矢量,位矢量的长度由所列举元素个数决定。如上例四个元素,位矢量的长度由所列举元素个数决定。如上例四个元素,位矢量的长度为位矢量的长度为2,编码默认值为:,编码默认值为:blue=“00”,green=“01”;Yellow=“10”;red=“11”。初始值默认为第一个值。初始值默认为第一个值。枚举类型应用举例:交通灯控制器枚举类型应用举例:交通灯控制器任务和要求:在十字路口的两个方向上各设一组红灯、任务和要求:在十字路口的两个方向上各设一组红灯、绿灯和黄灯,显示顺序为:其
24、中一个方向绿灯、黄灯、绿灯和黄灯,显示顺序为:其中一个方向绿灯、黄灯、红灯,另一个方向是红灯、黄灯、绿灯。其中绿灯、黄红灯,另一个方向是红灯、黄灯、绿灯。其中绿灯、黄灯、红灯的持续时间分别是灯、红灯的持续时间分别是20S、5S、25S。程序如下:。程序如下:“IEEE.STD_LOGIC”九态数值模型如下:九态数值模型如下:U初始值;初始值; X 不定态;不定态; 1 逻辑逻辑1; 0 逻辑逻辑0; Z 高阻态;高阻态; W 弱信号不定;弱信号不定; L 弱信号弱信号0 H 弱信号弱信号1; 不可能情况不可能情况 。 (3) IEEE 标准数据类型标准数据类型 “std-logic”和和“st
25、d-logic-vector”三、三、VHDLVHDL语言的操作符和表达式语言的操作符和表达式VHDL运算符运算符n逻辑运算符逻辑运算符AND、OR、NAND、NOR、XOR、NOTn关系运算符关系运算符=、/=、=n算术运算符算术运算符+、-、*、/n并置并置(连接连接)运算符运算符&1.逻辑运算符逻辑运算符在在VHDL语言中,共有语言中,共有6种逻辑运算符,他们分别是:种逻辑运算符,他们分别是: NOT 取反;取反; AND 与;与; OR 或;或; NAND 与非;与非; NOR 或非;或非; XOR 异或。异或。 这这6种逻辑运算符可以对种逻辑运算符可以对“STD_LOGIC ”和和“
26、BIT”等逻等逻辑型数据、辑型数据、“STD_LOGIC _VECTOR”逻辑型数组及逻辑型数组及布布尔数据尔数据进行逻辑运算。进行逻辑运算。必须注意,运算符的左边和右边,必须注意,运算符的左边和右边,以及代入的信号的数据类型必须是相同的以及代入的信号的数据类型必须是相同的。 2.算术运算符算术运算符VHDL语言中有语言中有5类算术运算符,他们分别是:类算术运算符,他们分别是:求和操作符:求和操作符: (加)、(减)(加)、(减)求积操作符求积操作符:*(乘)、(乘)、/(除)、(除)、MOD(求模)、(求模)、REM(取余)(取余)符号操作符:符号操作符: (正)、(负)(正)、(负)混合操
27、作符:混合操作符: *(指数)、(指数)、ABS(取绝对值)(取绝对值)移位操作符:移位操作符:SLL(逻辑左移)、(逻辑左移)、SRL(逻辑右移)、(逻辑右移)、SLA(算术左移)、(算术左移)、SRA(算术右移)、(算术右移)、ROL(逻辑循环左移)、(逻辑循环左移)、ROR逻辑循环右移)逻辑循环右移) 3.关系运算符关系运算符VHDL语言中有语言中有6种关系运算符,他们分别是:种关系运算符,他们分别是: = 等于;等于; /= 不等于;不等于; 小于;小于; 大于;大于; = 大于等于;大于等于;4.并置运算符并置运算符& 连接连接 SIGNAL g,h,i:STD_LOGIC;SIGN
28、AL c,d,e:STD_LOGIC _VECTOR(1 TO 0);); d = i & NOT h;- -元素与元素并置,形成长度为元素与元素并置,形成长度为2的数组的数组 a = c & d; - -数组与数组并置,形成长度为数组与数组并置,形成长度为4的数组的数组 5.VHDL操作符的优先顺序操作符的优先顺序 运算符运算符 优先级优先级NOT,ABS,* 最高优先级最高优先级 *,/,MOD,REM +(正号),(负号)(正号),(负号)+,& SLL,SLA,SRL,SRA,ROL,ROR =,/=,= AND,OR,NAND,NOR,XOR,XNOR 最低优先级最低优先级 四、四、
29、VHDLVHDL基本语句基本语句1.顺序描述语句顺序描述语句(1)信号赋值语句和变量赋值语句)信号赋值语句和变量赋值语句目标信号目标信号=表达式表达式目标变量:表达式目标变量:表达式(2) If 语句语句语句格式:语句格式:if 条件条件 1 then 第第1组顺序语句;组顺序语句;elseif 条件条件 2 then 第第2组顺序语句;组顺序语句; elseif 条件条件 n then 第第n组顺序语句;组顺序语句; else 第第n+1组顺序语句;组顺序语句;end if;IF语句的应用语句的应用n 八八-三优先级编码器真值表三优先级编码器真值表 输输 入入 输出输出 d7 d6 d5 d
30、4 d3 d2 d1 d0 q2 q1 q0 0 x x x x x x x 1 1 1 1 0 x x x x x x 1 1 0 1 1 0 x x x x x 1 0 1 1 1 1 0 x x x x 1 0 0 1 1 1 1 0 x x x 0 1 1 1 1 1 1 1 0 x x 0 1 0 1 1 1 1 1 1 0 x 0 0 1 1 1 1 1 1 1 1 0 0 0 0n nLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY priority_encoder IS PORT ( d : IN STD_LOGIC_VECTO
31、R ( 7 DOWNTO 0 ) ; q : OUT STD_LOGIC_VECTOR ( 2 DOWNTO 0 ) ) ; END priority_encoder ; ARCHITECTURE example_if OF priority_encoder IS BEGIN PROCESS ( d ) BEGIN IF ( d (7)=0 ) THEN q= ”111”; ELSIF ( d (6) = 0 ) THEN q= ”110”; ELSIF ( d (5) = 0 ) THEN q= ”101”; ELSIF ( d (4) = 0 ) THEN q= ”100”; ELSIF
32、( d (3) = 0 ) THEN q顺序处理顺序处理语句;语句;n : WHEN 条件表达式的值条件表达式的值=顺序处理顺序处理语句;语句; END CASE;nWHEN 中的条件有下述四种方式:中的条件有下述四种方式: WHEN 值值=顺序处理语句;顺序处理语句; WHEN 值值值值值值=顺序处理顺序处理语句;语句;-若干可列的值。若干可列的值。 WHEN 值值TO 值值=顺序处理语句;顺序处理语句;某个区间的值。某个区间的值。 WHEN OTHERS=顺序处理语句;顺序处理语句; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux
33、4 IS PORT ( a,b,d0,d1,d2,d3 : IN STD_LOGIC ; q : OUT STD_LOGIC ) ; END mux4;例:用例:用CASE语句设计四选一电路语句设计四选一电路 ARCHITECTURE example_case OF mux4 IS SIGNAL sel : INTEGER RANGE 0 TO 3 ; BEGIN PROCESS ( a,b,d0,d1,d2,d3 ) BEGIN sel=0; IF ( a=1 ) THEN sel=sel+1 ; END IF ; IF ( b=1 ) THEN sel q q q q=d3; END CA
34、SE; END PROCESS; END example_case;CASE语句设计的四选一电路实现语句设计的四选一电路实现n上述程序所描述的是一个平衡结构的四选一电路上述程序所描述的是一个平衡结构的四选一电路.FGHOBUFabd0d1d2d3q用用IF语句设计四选一电路语句设计四选一电路 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (a, b, d0, d1-, d2, d3: IN STD_LOGIC; q: OUT STD_LOGIC); END mux4; ARCHITECTURE example_if
35、 OF mux4 IS BEGIN PROCESS (a, b, d0,d1,d2,d3) BEGIN IF (a = 0 AND b = 0) THEN q = d0; ELSIF (a = 1 AND b = 0) THE q = d1; ELSIF (a = 0 AND b = 1) THEN q = d2; ELSIF (a = 1 AND b = 1) THEN q = d3; END IF; END PROCESS; END example_if; 用用IF语句设计四选一电路是权电路语句设计四选一电路是权电路GFd0abd1d2d3yF2.并行描述语句并行描述语句n1进程内部所有的
36、语句都是顺序执行的,进程内部所有的语句都是顺序执行的,n 2. 进程和进程之间是并行执行的,进程和进程之间是并行执行的,n 3进程的启动由进程的启动由PROCESS语句的敏感信号量表中的信语句的敏感信号量表中的信号量触发,也可以由号量触发,也可以由WAIT语句触发。语句触发。 (1) 进程语句进程语句 (进程名:进程名:)process(敏感信号表)敏感信号表) 变量说明语句;变量说明语句;begin 一组顺序语句;一组顺序语句;end process (进程名进程名);当进程中没有敏感信号表时,进程语句中必须当进程中没有敏感信号表时,进程语句中必须有其他形式的敏感信号激励;而当进程中有敏有其
37、他形式的敏感信号激励;而当进程中有敏感信号表时,进程语句中不允许再出现感信号表时,进程语句中不允许再出现wait、wait for、wait until和和wait on 中的任何一种敏感中的任何一种敏感信号激励语句,否则出错。信号激励语句,否则出错。用进程设计用进程设计D触发器触发器n LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff4 IS PORT (clk, d, clr, pset:IN STD_LOGIC; q:OUT STD_LOGIC ); END dff4; ARCHITECTURE rtl OF dff4 IS BEG
38、IN clrpsetD QclknPROCESS (clk, pset, clr) BEGIN IF (clr = 0 ) THEN q = 0; ELSIF (pset = 0) THEN q = 1; ELSIF (clk EVENT AND clk = 1) THEN q = d; END IF; END PROCESS; END rtl; n利用进程语句设计一位加法器利用进程语句设计一位加法器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS PORT(a, b: IN STD_LOGIC; sum, car
39、ry: OUT STD_LOGIC); END half_adder; nARCHITECTURE behav OF half-adder IS BEGIN PROCESS (a, b) BEGIN sum= a XOR b AFTER 5nS; carry= a AND b AFTER 5nS; END PROCESS; END behav; 进程语句的启动进程语句的启动进程语句有两种工作状态:进程语句有两种工作状态:等待状态等待状态和和执行执行状态状态。当敏感信号表中的信号没有变化时,。当敏感信号表中的信号没有变化时,进程处于等待状态;当敏感信号表中的信号进程处于等待状态;当敏感信号表中的
40、信号有变化时,进程处于执行状态,将顺序执行有变化时,进程处于执行状态,将顺序执行进程中的语句。当最后一个语句执行完后,进程中的语句。当最后一个语句执行完后,就返回进程语句的开始,等待下一次敏感信就返回进程语句的开始,等待下一次敏感信号表中的信号变化。号表中的信号变化。n(4) 时间等待时间等待 WAIT FOR 时间表达式;时间表达式; 例如例如 :WAIT FOR 20nS;-同步点在延时同步点在延时20nS后,后, WAIT ON clk, interrupt FOR 5nS;-当信号当信号clk或或 interrupt变化变化5nS后启动后启动 进程。进程。 (2)并发信号赋值语句)并发
41、信号赋值语句 信号赋值语句在进程内部出现时,是顺序描述语句,信号赋值语句在进程内部出现时,是顺序描述语句,在进程之外出现时,以并发语句的形式出现。是并在进程之外出现时,以并发语句的形式出现。是并行执行的,执行顺序与书写顺序无关。行执行的,执行顺序与书写顺序无关。LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY gate IS PORT(a,b : IN STD_LOGIC); x,y,z :OUT STD_LOGIC);END gate;ARCHITECTURE behave OF gate ISBEGIN x=a AND b; y=a OR b;
42、z=a XOR b;END behave;ABXYZGATE例:产生右图电路符号的例:产生右图电路符号的VHDL程序程序(3) 条件信号赋值语句条件信号赋值语句 目标信号目标信号=表达式表达式1 when 条件条件1 else 表达式表达式2 when 条件条件2 else 表达式表达式3 when 条件条件3 else 表达式表达式 n-1 when 条件条件n-1 else 表达式表达式n; ABXAND_GATELIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY and_gate IS PORT(a,b : IN STD_LOGIC); x:OU
43、T STD_LOGIC);END and_gate;ARCHITECTURE rtl OF and_gate ISBEGIN x=0 when a=0 and b=0 else x=0 when a=0 and b=1 else x=0 when a=1 and b=0 else 1;END rtl;(4) 选择信号赋值语句选择信号赋值语句 with 表达式表达式 select 目标信号目标信号=表达式表达式1 when 条件条件1, 表达式表达式2 when 条件条件2, 表达式表达式3 when 条件条件3, 表达式表达式 n when 条件条件n, QMMUX40D1D2D3DSEL1.
44、0LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mmux4 IS PORT(d0,d1,d2,d3: IN STD_LOGIC; sel:in std_logic_vector(1 downto 0); q:OUT STD_LOGIC);END mmux4;ARCHITECTURE rtl OF mmux4 ISBEGIN with sel select qa(0), c= x(0), b=b(0) ); 在端口元在端口元素中定义素中定义输入输入在端口元在端口元素中定义素中定义输出输出IC 器件器件AIC 器件器件BIC 器件器件C连接导线连接导
45、线连接导线连接导线用固定逻辑的用固定逻辑的IC硬件实现硬件实现VHDL组件组件VHDL组件组件VHDL组件组件信号信号信号信号用用VHDL结构实现结构实现1G2G3GIN1IN2IN3IN4OUT1OUT2OUT31G2G3GIN1IN2IN3IN4OUT1OUT2OUT3ABXABXABXVHDL组件示例组件示例2输入与门输入与门XAB的的VHDL程序程序ENTITY and_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY and_gate;ARCHITECTURE andfunction OF and_gate ISBEGIN X=A AND B
46、; END ARCHITECTURE andfunction;ENTITY OR_gate IS PORT(A,B:IN BIT;X:OUT BIT);END ENTITY OR_gate;ARCHITECTURE ORfunction OF OR_gate ISBEGIN XIN1,B=IN2,X=OUT1);G2:AND_gate PORT MAP (A=IN3,B=IN4,X=OUT2);G3:OR_gate PORT MAP (A=OUT1,B=OUT2,X=OUT3);SIGNAL OUT1,OUT2:BIT;END ARCHITECTURE Logicoperation; (五)时
47、钟信号的(五)时钟信号的VHDL描述方描述方法法1. 时钟边沿的描述时钟边沿的描述 0CLK1CLK(1)上升沿)上升沿CLKCLKeventCLKevent AND CLK=1VHDL属性描述:属性描述:0CLK1CLK(2)下降沿)下降沿CLKCLKeventclkEVENT AND CLK=0VHDL属性描述:属性描述:2. 时序电路中进程敏感信号时序电路中进程敏感信号 例:例:D触发器功能描述触发器功能描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 IS PORT(clk,d:IN STD_LOGIC; q:OUT_LOGI
48、C);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk) BEGIN IF(clkEVENT AND clk=1)THEN q=d; END IF; END PROCESS;END rtl;3. 同步复位、置位信号同步复位、置位信号 PROCESS(时钟信号名)(时钟信号名) BEGIN IF 时钟边沿表达式时钟边沿表达式 AND 复位复位/置位表达式置位表达式 THEN 复位置位语句;复位置位语句; ELSE 其他执行语句;其他执行语句; END IF;END PROCESS;LIBRARY IEEE;USE IEEE.STD_LOGI
49、C_1164.ALL;ENTITY dff1 IS PORT(clk,d,clr:IN STD_LOGIC; q:OUT STD_LOGIC);END dff1;ARCHITECTURE rtl OF dff1 ISBEGINPROCESS(clk) BEGIN IF (clkEVENT AND clk=1)THEN IF(clr=1)THEN q=0; ELSE q=d; END IF; END IF; END PROCESS;END rtl;4. 异步复位、置位信号异步复位、置位信号 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff2 IS PORT(clk,d,clr:IN STD_LOGIC; q:OUT STD_LOGIC);END dff2;ARCHITECTURE rtl OF dff2 ISBEGINPROCESS(clk,clr) BEGIN IF(clr=1)THEN q=0; ELSEIF (clkEVENT AND clk=1)THEN q=d; END IF; END IF; END PROCESS;END rtl;