《ch3HDL设计初步》由会员分享,可在线阅读,更多相关《ch3HDL设计初步(81页珍藏版)》请在金锄头文库上搜索。
1、第第3 3章章 VHDL设计初步设计初步 在在VHDL中,一个相对完整的中,一个相对完整的VHDL程序程序称为设计实体。设计实体是称为设计实体。设计实体是VHDL程序的基本程序的基本单元。它可以是一个复杂的系统,如单元。它可以是一个复杂的系统,如cpu系系统,也可以是一个芯片、逻辑器件或者一个统,也可以是一个芯片、逻辑器件或者一个最简单的门电路,一般来说,一个最简单的门电路,一般来说,一个VHDL程序程序结构如下图结构如下图:3.1 VHDL程序入门程序入门打开元件库打开库中的程序包 定义电路实体的外观,I/O接口 描述电路内部的功能决定哪个结构体被使用,如果只有结构体,可不用。3.1 组合电
2、路的组合电路的VHDL设计描述设计描述2 2选选1 1多路选择器的多路选择器的VHDL设计设计 图图3-1 23-1 2选选1 1数据选择器数据选择器mux21amux21a 实体实体问:多路选择问:多路选择器的功能与逻器的功能与逻辑表达式?辑表达式?其逻辑功能可表述为:若s=0,则y输出a的信号;若s=1,则y输出b的信号。 【例例3-1】 这是一个完整的这是一个完整的2选选1多路选择器的多路选择器的VHDL程序,要程序,要注意:注意:(1) VHDL不分大小写,但为了使程序阅读清楚,不分大小写,但为了使程序阅读清楚,对保留字采用大写,自己定义的标识符用小写。对保留字采用大写,自己定义的标识
3、符用小写。(2) _ _ :注释,增加程序可读性,如注释,增加程序可读性,如c中中/* */ , / / 。(3)文件的存盘:必须用实体名。)文件的存盘:必须用实体名。1、库说明、库说明o打开打开IEEE库库 为了提高工作效率,把一些公有信为了提高工作效率,把一些公有信息,如预先定义好的数据类型,或是各种预先设息,如预先定义好的数据类型,或是各种预先设计好的设计实体(程序包)集中在一起,这样,计好的设计实体(程序包)集中在一起,这样,使用者只要打开这个库就可以调用其中的东西。使用者只要打开这个库就可以调用其中的东西。IEEE库是库是VHDL中最常用的库,它包含有中最常用的库,它包含有IEEE标
4、准标准的程序包和支持工业标准的程序包。只要是的程序包和支持工业标准的程序包。只要是CPLD FPGA 等芯片公司,他们都会提供标准的定义库,等芯片公司,他们都会提供标准的定义库,使用时,用使用时,用Library打开。打开。o USE :打开:打开IEEE库中的库中的STD_LOGIC_1164.ALL中的中的程序包,使程序包中的内容可以被访问或调用。程序包,使程序包中的内容可以被访问或调用。2、实体说明o实体说明定义了硬件的输入输出端口。它是一个独立的语言模块,它描述了器件的接口信息。芯片俯视图是一个黑盒子,黑盒子上带有输入/出的端口说明。如用port定义a,b,s为输入in脚,y为输出ou
5、t脚,std_logic是预先定义的一种数据类型,“1”表示高电平,“0”表示低电平,规定了八种。 标准逻辑位数据类型标准逻辑位数据类型STD_LOGICSTD_LOGIC BITBIT数据类型定义:数据类型定义: TYPE BIT IS(0,1); -TYPE BIT IS(0,1); -只有两种取值只有两种取值 STD_LOGICSTD_LOGIC数据类型定义:数据类型定义: TYPE STD_LOGIC IS TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); (U,X,0,1,Z,W,L,H,-); 3、结构体说明o结构体说明具体指明了该设计实体的行为,描述了
6、设计实体的功能,在电路上相当于器件内部的电路结构。=表示信号赋值符号,用类似于C语言的表达方式描述了它的逻辑行为。对外而言,它是内部的。描述功能可以用几种方法实现:如行为描述法(按算法路径)、数据流描述法(数据流程运动路径、方向结果)、结构描述法(块方式)。【例例3-2】【例例3-3】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21a IS PORT ( a, b, s: IN STD_LOGIC; y : OUT STD_LOGIC ); END ENTITY mux21a; ARCHITECTURE one OF mux21a
7、 IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ; 图图3-3 mux21a3-3 mux21a功能时序波形功能时序波形 3.2 基本时序电路基本时序电路的的VHDL设计设计一、一、D D触发器的触发器的VHDLVHDL描述描述 图图3-6 D3-6 D触发器触发器问:问:D触发器的触发器的功能与特性方功能与特性方程?程?【例例3-8】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; EN
8、TITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC );END DFF1;ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1: STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-是
9、注释符号)是注释符号) END PROCESS ;END bhv; 1. 1. 信号定义和数据对象信号定义和数据对象 “CLKEVENT AND CLK=1” “SIGNAL Q1:STD_LOGIC;” 2. 2. 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENTEVENT EVENT EVENT 使用不同语句的使用不同语句的D触发器触发器VHDL程序程序LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk, d : in bit; q : out bit);end test1;architectu
10、re body of test1 issignal q1 : bit ;beginprocess (clk)begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ;end process;end body;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocess (clk,d)begin if r
11、ising_edge(clk) then q = d; end if;end process;end body;LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk,d)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;end body
12、;LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if (clk = 1) then q1 = d; end if; q = q1 ;end process;end body;【例例3-11】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0
13、 -同例同例4-9 THEN Q = D ; END IF; END PROCESS ; 二、实现时序电路的二、实现时序电路的VHDLVHDL不同表述不同表述 【例例3-14】.PROCESS BEGIN wait until CLK = 1 ; -利用利用wait语句语句 Q = D ;END PROCESS; 【例例3-15】.PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF; END PROCESS ; 图图3-9 3-9 例例3-153-15的时序波形的时序
14、波形 【例例3-16】.PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ; 图图3-10 3-10 例例3-163-16的时序波形的时序波形 3.3 配置(配置(CONFIGURATION) 配置是VHDL设计实体中的一个基本单元,在综合或仿真中,可以利用配置语句为实体指定或配属一个结构体,如可以利用配置使仿真器为同一实体配置不同的结构体以使设计者比较不同结构体的仿真差别,或者为例化的各元件实体配置指定的结构体,从而形成一个例化元件层次构成的设计实体。 VHDL综合器允许将配
15、置规定为一个设计实体中的最高层次单元,但只支持对最顶层的实体进行配置。 通常情况下,配置主要用在VHDL的行为仿真中。LIBRARYIEEE;USEIEEE.std_logic_1164.all; Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body1 of test1 issignal q1 : bit ;beginprocess (clk)begin if clk=1 AND clklast_value=0 then q1 = d; end if; q = q1 ;end process
16、;end body1;architecturebody2oftest1isbeginprocess(clk,d)beginifrising_edge(clk)thenq=d;endif;endprocess;endbody2;architecturebody3oftest1issignalq1:bit;beginprocess(clk)beginif(clk=1)thenq1=d;endif;q=q1;endprocess;endbody3;architecturebody4oftest1issignalq1:bit;beginprocess(clk,d)beginif(clk=1)thenq
17、1=d;endif;q=q1;endprocess;endbody4; CONFIGURATION one OF test1 IS FOR body2 END FOR; END one; CONFIGURATION 配置名配置名 OF 实体名实体名 IS FOR 选配结构体名选配结构体名 END FOR; END 配置名配置名; 3.4.1 实体(实体(ENTITY)3.4.2 结构体(结构体(ARCHITECTURE)3.4.4 库(库(LIBRARY)3.4.5 程序包(程序包(PACKAGE)3.4.3 进程(进程(PROCESS)3.4 VHDL程序结构VHDLVHDL程序设计基本结构
18、程序设计基本结构o库(库(LIBRARYLIBRARY)存放已经编译的包集合、实体、结构体和配置等。其好处在于使设计者可共享已经编译过的设计结果。o程序包(程序包(PACKAGEPACKAGE)声明在实体中将用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义。 在VHDL程序中,实体(ENTITY)和结构体(ARCHITECTURE)是必需的两个基本结构,它们可以构成最简单的VHDL程序。通常,在最简单的VHDL程序中,还应包括库(LIBRARY)和程序包(PACKAGE)。 一个完整的设计实体的最低要求应该能为VHDL综合器所接受,并能作为一个独立设计单元,即以元件的形式存在的
19、VHDL程序。o实体(实体(ENTITYENTITY)对设计实体输入/输出的定义和说明,是可视部分。o结构体(结构体(ARCHITECTUREARCHITECTURE)描述电路内部的结构和行为,建立输入和输出之间的关系,是不可视部分。在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。一个实体可以对应多个结构体,但在同一时间,只有一个结构体被使用。o配置(配置(CONFIGURATIONCONFIGURATION)主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体,以决定哪一
20、个结构体被使用。3.4.1 实体(实体(ENTITY) 实体(ENTITY)是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述。它规定了设计单元的输入输出接口信号或引脚,是设计实体经封装后对外的一个通信界面。一、实体语句结构一、实体语句结构 实体说明单元的常用语句结构如下: ENTITY 实体名 IS GENERIC(类属表); PORT(端口表); ENDENTITY 实体名; 实体说明单元必须以语句“ENTITY 实体名 IS”开始,以语句“ENDENTITY 实体名;”结束,其中的实体名是设计者自己给设计实体的命名,可作为其他设计实体对该设计实体进行调用时用。中间
21、在方括号内的语句描述,在特定的情况下并非是必需的。一个设计实体无论多大和多复杂,在实体中定义的实体名即为这个设计实体的名称,一般以所描述系统或电路的具体名称命名。在例化中,可以用此名对相应的设计实体进行调用。 在层次化系统设计中,实体说明是整个模块或系统的输入输出(I/O)接口;在一个器件级的设计中,实体说明是一个芯片的输入输出(I/O)。例:例: 四位加法器实体说明程序四位加法器实体说明程序ENTITY add4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); Ci: IN STD_LOGIC; Sum: OUT STD_LOGIC_VECTOR
22、(3 downto 0); Co: OUT STD_LOGIC);END ENTITY add4; 由实体说明画出四位加法器由实体说明画出四位加法器add4add4的电路图如下所示。的电路图如下所示。add4a3.0b3.0Sum3.0CiCo二、类属二、类属(GENERIC)说明语句说明语句 类属说明是实体说明中的可选项,必须放在端口说明之前。类属为所说明的环境提供了一种静态信息通道,类属的值可以由设计实体外部提供(这与常数不同,常数只能从设计实体的内部得到赋值,且不能再改变 )。因此,设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。 类属说明的
23、一般书写格式如下:GENERIC(常数名;数据类型:设定值 ;常数名:数据类型:设定值 ); 类属参量以关键词GENERIC引导一个类属参量表,在表中提供时间参数或总线宽度等静态信息。类属表说明用于确定设计实体和其外部环境通信的参数,传递静态的信息。其中的常数名常数名是由设计者确定的类属常数名,数据类型数据类型通常取INTEGER或TIME等类型,设定值设定值即为常数名所代表的数值。注意:VHDL综合器仅支持数据类型为整数的类属值。 对于同一个实体,可以通过GENERIC参数类属的说明,为它创建多个行为不同的逻辑结构。比较常见的情况是选用类属来动态规定一个实体端口的大小,或设计实体的物理特性,
24、或结构体中的总线宽度,或设计实体中、底层中同种元件的例化数量等。一般在结构体中,类属的应用与常数是一样的。【例例9-1】与门的设计与门的设计 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY andn IS GENERIC ( n : INTEGER ); -定义类属参量及其数据类型定义类属参量及其数据类型 PORT(a : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);-用类属参量限制矢量长度用类属参量限制矢量长度 c : OUT STD_LOGIC); END andn; ARCHITECTURE behav OF a
25、ndn IS BEGIN PROCESS (a) VARIABLE int : STD_LOGIC; BEGIN int := 1; FOR i IN aLENGTH - 1 DOWNTO 0 LOOP -循环语句循环语句 IF a(i)=0 THEN int := 0; END IF; END LOOP; c 2) - 参数传递映射语句,定义类属变量,参数传递映射语句,定义类属变量,n赋值为赋值为2 PORT MAP (a(0)=d1,a(1)=d2,c=q1); u2: andn GENERIC MAP (n =5) - 定义类属变量,定义类属变量,n赋值为赋值为5 PORT MAP (a
26、(0)=d3,a(1)=d4,a(2)=d5, a(3)=d6,a(4)=d7, c=q2); END exn_behav; 【例例9-3】未定义位宽的加法器未定义位宽的加法器LIBRARY IEEE; -待例化元件待例化元件USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY addern IS PORT (a, b: IN STD_LOGIC_VECTOR; result: out STD_LOGIC_VECTOR);END addern; ARCHIT
27、ECTURE behave OF addern IS BEGIN result = a + b; END; 【例例9-4】LIBRARY IEEE; -顶层设计顶层设计USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY adders IS GENERIC(msb_operand: INTEGER := 15; msb_sum: INTEGER :=15); PORT(b: IN STD_LOGIC_VECTOR (msb_operand DOWNTO 0)
28、; result: OUT STD_LOGIC_VECTOR (msb_sum DOWNTO 0);END adders; ARCHITECTURE behave OF adders IS COMPONENT addern PORT ( a, b: IN STD_LOGIC_VECTOR; result: OUT STD_LOGIC_VECTOR); END COMPONENT; SIGNAL a: STD_LOGIC_VECTOR (msb_sum /2 DOWNTO 0); SIGNAL twoa: STD_LOGIC_VECTOR (msb_operand DOWNTO 0); BEGI
29、N twoa twoa, b = b, result = result); U2: addern PORT MAP (a=b(msb_operand downto msb_operand/2 +1), b=b(msb_operand/2 downto 0), result = a);END behave; 图图9-1 例例9-4的的RTL电路图电路图三、端口三、端口(PORT)说明语句说明语句 PORT说明语句是对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说明,其中包括对每一接口的输入输出模式和数据类型的定义。其格式如下: 端口说明的一般书写格式如下:PORT(端口名:端口模式
30、数据类型; 端口名:端口模式 数据类型); PORT(端口名:端口模式 数据类型; 端口名:端口模式 数据类型);(1)端口名:端口名:是设计者为实体的每一个对外通道(系统引脚)所取的名字,一般用几个英文字母组成;(2)端口模式端口模式(端口方向):是指这些通道上的数据流动方式,即定义引脚是输入还是输出;图图3-20 端口模式符号图端口模式符号图 IEEE 1076标准包中定义了4种常用的端口模式,各端口模式的功能及符号分别见表3.1和图3-20。 表表3.1 端口模式说明端口模式说明端口模式及数据类型定义举例: PORT(n0,n1,select:INBIT;q:OUTBIT;bus:OUT
31、BIT_VECTOR(7DOWNTO0);本例中,n0,n1,select 是输入引脚,属于BIT型,q是输出引脚,BIT型,bus是一组8位二进制总线,属于BIT_VECTOR。(3)数据类型:数据类型:是指端口上流动的数据的表达格式或取值类型。由于VHDL是一种强类型语言,它对语句中的所有操作数的数据类型都有严格的规定,只有相同数据类型的端口信号和操作数才能相互作用。 一个实体通常有一个或多个端口,端口类似于原理图部件符号上的管脚。实体与外界交流的信息必须通过端口通道流入或流出。 端口模式及IEEE库数据类型定义举例: LIBRARYIEEE;USEIEEE.STD_LOGIC.1164.
32、ALL;ENTITYmmISPORT(n0,n1,select:INSTD_LOGIC;Q:OUTSTD_LOGIC;Bus:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ENDmm; 在此例中端口数据类型取自IEEE标准库(该库中有数据类型和函数的说明),其中STD_LOGIC 取值为“0”,“1”,“X”和“Z”。 因为使用了库,所以在实体说明前要增加库说明语句。 3.4.2 结构体(结构体(ARCHITECTURE) 结构体(ARCHITECTURE)是设计实体的一个重要部分,结构体描述设计实体的内部结构和/或外部设计实体端口间的逻辑关系,结构体将具体实现一个实体。每一个实
33、体都有一个或一个以上的结构体,每个结构体对应着实体不同结构和算法实现方案,其间的各个结构体的地位是同等的,它们完整地实现了实体的行为,但同一结构体不能为不同的实体所拥有。结构体不能单独存在,它必须有一个界面说明,即一个实体。对于具有多个结构体的实体,必须用CONFIGURATION配置语句指明用于综合的结构体和用于仿真的结构体,即在综合后的可映射于硬件电路的设计实体中,一个实体只对应一个结构体。在电路中,如果实体代表一个器件符号,则结构体描述了这个符号的内部行为。对数据类型、常数、对数据类型、常数、信号、子程序和元件信号、子程序和元件等元素的说明部分等元素的说明部分 描述实体逻辑行为的、描述实
34、体逻辑行为的、以各种不同的描述风以各种不同的描述风格表达的功能描述语格表达的功能描述语句句 以元件例化语句为特以元件例化语句为特征的外部元件征的外部元件(设计实设计实体体)端口间的连接。端口间的连接。 结结结结 构构构构 体体体体一.一.结构体的一般语句格式:结构体的一般语句格式:ARCHITECTURE 结构体名 OF 实体名 IS 结构体说明语句 -内部信号,常数,数据类型,函数等的定义 BEGIN 功能描述语句(并行处理语句) ENDARCHITECTURE 结构体名; 书写格式上,实体名实体名必须是所在设计实体的名字,而结构结构体名体名可以由设计者自己选择,但当一个实体具有多个结构体时
35、,结构体的取名不可相重,结构体的说明语句部分必须放在关键词ARCHITECTURE和BEGIN之间,结构体必须以“ENDARCHITECTURE结构体名;”作为结束句。 结构体说明结构体说明是指对结构体需要使用的信号、常数、数据类型和函数进行定义和说明。 并行处理语句并行处理语句位于BEGIN和END之间,这些语句具体地描述了结构体的行为。并行处理语句是功能描述的核心部分,并行处理语句是功能描述的核心部分,也是变化最丰富的部分也是变化最丰富的部分。并行处理语句可以使用赋值语句、进程语句、元件例化语句、块语句以及子程序等。需要注需要注意的是意的是,这些语句都是并行(同时)执行的,与排列顺序无关。
36、【例】 ENTITYnaxISPORT(a0,a1:INBIT;Sel:INBIT;Sh:OUTBIT);ENDnax;ARCHITECTUREdataflowOFnaxISBEGINsh=(a0ANDsel)OR(NOTselANDa1);ENDdataflow;结结构构体体构构造造图图 二结构体说明语句二结构体说明语句 结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句。但在一个结构体中说明和定义的数据类型、常数、元件、函
37、数和过程只能用于这个结构体中,若希望其能用于其他的实体或结构体中,则需要将其作为程序包来处理。 三三. .功能描述语句功能描述语句 结构体描述设计实体的具体行为,它包含两类语句: (1)并行语句:并行语句总是在进程语句(PROCESS)的外部,该语句的执行与书写顺序无关,总是同时被执行。 (2)顺序语句:顺序语句总是在进程语句(PROCESS)的内部,从仿真的角度,该语句是顺序执行的。 功能描述语句结构可以含有五种不同类型的以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。5种语句结构分别为:BLOCK(块)语句、PROCESS(进程)语句
38、、SUBPROGRAM(子程序)调用语句、信号赋值语句及元件例化语句。 l块语句是由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个模块。l进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。l子程序调用语句用于调用一个已设计好的子程序。l信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。l元件例化语句对其他的设计实体作元件调用说明,并将此元件的端口与其他的元件、信号或高层次实体的界面端口进行连接。 3.4.3 进程(进程(PROCESS) 进程语句的一般格式为:进程语句的一般格式为: 进程名: PROCESS
39、(敏感信号参数表) 进程说明部分 BEGIN顺序描述语句; ENDPROCESS 进程名; 进程说明部分:进程说明部分:定义该进程所需的局部数据环境,可包括数据类型、常数、变量、属性、子程序等。注意,在进程说明部分中不允许定义信号和共享变量。顺序描述语句部分:顺序描述语句部分:由赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等顺序执行语句构成描述该进程的行为。敏感信号参数表:敏感信号参数表:列出用于启动本进程可读入的信号名(当有进程启动语句WAIT 时就没有敏感信号参数表)。 敏敏感感信信号号表表所标明的信号是用来启启动动进进程程的。敏感信号表中的信号无论哪一个发生变化(如
40、由0变1或由1变0 )都将启动该PROCESS语句。一旦启动后, PROCESS中的语句将从上至下逐句执行一遍。当最后一个执行完毕以后,即返回到开始的PROCESS语句,等待下一次启动。因此,只要PROCESS中指定的信号变化一次,该PROCESS语句就会执行一遍。 PROCESS内内部部各语句之间是顺序关系 。在系统仿真时, PROCESS语句是按书写顺序一条一条向下执行的。 若结构体中有多个进程存在,各进程之间的关系是并行关系 ;进程之间的通信则一边通过接口由信号传递,一边并行地同步执行。 【例】用进程语句实现的二选一电路 ENTITY mux1 IS PORT (d0,d1,sel:IN
41、 BIT; q:OUT BIT); END mux1; ARCHITECTURE connect OF mux1 IS BEGIN cale:PROCESS(d0,d1,sel) VARIABLE tmp1,tmp2,tmp3:BIT;-在进程中定义的变量 BEGIN tmp1:=d0 AND sel; -输入端口向变量赋值 tmp2:=d1 AND (NOT sel); tmp3:=tmp1 OR tmp2; q=tmp3 END PROCESS cale; END connect;进程设计要点:见书进程设计要点:见书P162-164P162-164。 例 利用PROCESS语句设计与非门电
42、路。 nandx:PROCESS(a,b)BEGINy RETURN 1; WHEN 0= RETURN 1; WHEN 1= RETURN 0; WHEN 1= RETURN 0; WHEN Z= RETURN Z; WHEN Z= RETURN Z; END CASE; END CASE; END invert; END invert;END BODY;END BODY;【例例9-17】七段显示译码器的包设计七段显示译码器的包设计 PACKAGE seven IS SUBTYPE segments is BIT_VECTOR(0 TO 6) ; TYPE bcd IS RANGE 0 TO
43、 9 ; END seven ; USE WORK.seven.ALL ; - WORK库默认是打开的,库默认是打开的, ENTITY decoder IS PORT (input: bcd; drive : out segments) ; END decoder ; ARCHITECTURE simple OF decoder IS BEGIN WITH input SELECT drive = B1111110 WHEN 0 , B0110000 WHEN 1 , B1101101 WHEN 2 , B1111001 WHEN 3 , B0110011 WHEN 4 , B1011011
44、WHEN 5 , B1011111 WHEN 6 , B1110000 WHEN 7 , B1111111 WHEN 8 , B1111011 WHEN 9 , B0000000 WHEN OTHERS ; END simple ; 一一个个包包集集合合说说明明至至多多可可以以带带一一个个包包体体,包包体体和和包包头头使使用用相相同同的的名名字字。包包体体的的内内容容是是基基本本说说明明和和子子程程序序体体说说明明。但但要要注注意意,若若包包集集合合中中含含有有子子程程序序说说明明时时,必必须须将将子子程程序序放在对应的包体中。放在对应的包体中。 包包体体中中的的子子程程序序及及其其相相应应的
45、的说说明明是是专专用用的的,不不能能被被其其它它VHDLVHDL单单元元所所引引用用;而而包包集集合合中中的的说说明明是是公公用用的的,它它可可以以独独立立地地编编译译并并插插入入设设计计库库中中。包包集集合合体体是是次次级级设设计计单单元元,只只有有在在其其对对应应的的主主设设计计单单元元编编译译并并插插入入设设计计库库之之后后,才才可可独立地编译并插入到设计库中。独立地编译并插入到设计库中。l STD_LOGIC_1164STD_LOGIC_1164程序包程序包 STD_LOGIC_1164程序包是IEEE 库中最常用的程序包,是IEEE 的标准程序包。其中包含了一些数据类型、子类型和函数
46、的定义,这些定义将VHDL扩展为一个能描述多值逻辑的硬件描述语言。其中,用得最多和最广的是定义了满足工业标准的两个数据类型STD_LOGIC和STD_LOGIC_VECTOR。常用的预定义程序包有:l STD_LOGIC_ARITHSTD_LOGIC_ARITH程序包程序包 STD_LOGIC_ARITH预先编译在IEEE 库中,是Synopsys 公司的程序包。它在STD_LOGIC_1164程序包的基础上扩展了3个数据类型UNSIGNED、SIGNED和SMALL_INT,并为其定义了相关的算术运算符和转换函数。 l STD_LOGIC_UNSIGNEDSTD_LOGIC_UNSIGNED
47、和和STD_LOGIC_SIGNEDSTD_LOGIC_SIGNED程序包程序包 两个程序包都是Synopsys公司的程序包,都预先编译在IEEE库中。这些程序包重载了可用于INTEGER型及STD_LOGIC和STD_LOGIC_VECTOR型混合运算的运算符,并定义了一个由STD_LOGIC_VECTOR型到INTEGER 型的转换函数。其中STD_LOGIC_SIGNED 中定义的运算符是有符号数的运算符。 l STANDARDSTANDARD和和TEXTIOTEXTIO程序包程序包 两个程序包都是STD库中的预编译程序包。STANDARD 程序包中定义了许多基本的数据类型、子类型和函数
48、,不需用USE 语句另作声明。TEXTIO 程序包定义了支持文本文件操作的许多类型和子程序。在使用本程序包之前,需加语句USE STD.TEXTIO.ALL 本章小结本章小结一、VHDL设计入门 通过多路选择器、锁存器等几个典型的设计实例,了解VHDL程序的基本结构和设计特点,达到快速入门的目的,为后面的学习做准备。二、VHDL程序结构 VHDL程序由实体(Entity)、结构体(Architecture)、库(Library)、程序包(Package)和进程(Process)5个部分组成。实体、结构体和库共同构成VHDL程序的基本组成部分,程序包和配置则可根据需要选用。库语句是用来定义程序中
49、要用到的元件库。程序包用来定义使用哪些自定义元件库。本章小结本章小结实体的一般格式为:实体的一般格式为: ENTITY ENTITY 实体名实体名 ISIS GENERIC( GENERIC(类属表类属表) ); PORT( PORT(端口表端口表) ); END ENTITY END ENTITY 实体名;实体名;结构体的一般格式如下:结构体的一般格式如下:ARCHITECTURE ARCHITECTURE 结构体名结构体名 OF OF 实体名实体名 ISIS 说明语句说明语句;BEGINBEGIN 功能描述语句功能描述语句 ;END ARCHITECTURE END ARCHITECTUR
50、E 结构体名;结构体名; 本章小结本章小结 进程语句的一般格式为:进程语句的一般格式为: 进程名: PROCESS (敏感信号参数表) 进程说明部分 BEGIN顺序描述语句; ENDPROCESS 进程名; 本章小结本章小结 库语句的格式为:库语句的格式为: LIBRARY LIBRARY 库名;库名; -说明使用什么库说明使用什么库 USE USE 包集合名;包集合名; -说明使用库中哪一个包集合及包集说明使用库中哪一个包集合及包集 合中的项目(如过程名、函数名等)合中的项目(如过程名、函数名等) USEUSE语句有两种常用的格式:语句有两种常用的格式: USE USE 库名库名. .程序包名程序包名. .项目名;项目名; USE USE 库名库名. .程序包名程序包名.ALL.ALL;本章小结本章小结 定义程序包的一般语句结构如下:定义程序包的一般语句结构如下: PACKAGE PACKAGE 程序包名程序包名 IS - IS - 程序包首程序包首 程序包首说明部分程序包首说明部分 END END 程序包名程序包名; ; PACKAGE BODY PACKAGE BODY 程序包名程序包名 IS - IS - 程序包体程序包体 程序包体说明部分以及包体程序包体说明部分以及包体 END END 程序包名程序包名; ;