3第3章 VHDL设计初步_第1页
3第3章 VHDL设计初步_第2页
3第3章 VHDL设计初步_第3页
3第3章 VHDL设计初步_第4页
3第3章 VHDL设计初步_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

1、EDA 技术实用教程技术实用教程第第 3 3 章章 VHDL设计初步设计初步1. 组合电路的组合电路的VHDL描述描述2. 基本时序电路的基本时序电路的VHDL描述描述3. 计数器的计数器的VHDL设计设计主要任务:主要任务:给出简单而典型的电路实例,作为探讨其性能特给出简单而典型的电路实例,作为探讨其性能特点和设计方法的情景。然后针对情景的具体对象,给出对应点和设计方法的情景。然后针对情景的具体对象,给出对应的的VHDL表述,并对表述中出现的语句进行解释。表述,并对表述中出现的语句进行解释。掌握掌握电路情景与电路情景与VHDL的对应关系,程序的基本结构、表述的对应关系,程序的基本结构、表述特

2、点和设计方法。特点和设计方法。主要内容主要内容3.1 组合电路的组合电路的VHDL描述描述 3.1.1 2选选1多路选择器的多路选择器的VHDL描述描述 图图3-1 mux21a电路模型电路模型 2选选1多路选择器(多路选择器(mux21a)A、b是是2个数据的输入端口个数据的输入端口S是通道选择控制信号端是通道选择控制信号端Y是数据输出端是数据输出端S取值分别是取值分别是0、1时,输出端分别输时,输出端分别输出出a、b的数据。的数据。 图图3-2 mux21a元件图元件图 3.1.1 2选选1多路选择器的多路选择器的VHDL描述描述 【例【例3-1】ENTITY mux21a IS PORT

3、 ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 了解情景了解情景VHDL描述描述Mux21a逻辑结构图逻辑结构图电路的电路的VHDL描述由两大部分组成描述由两大部分组成1. 以关键词以关键词ENTITY引导,引导,END ENTITY mux21a结尾的语结尾的语句部分称为句部分称为实体。实体。 VHDL实体描述了电路器件的外部情况及各信号端口的实体描述

4、了电路器件的外部情况及各信号端口的基本性质。基本性质。ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 2. 以关键词以关键词ARCHITECTURE引导,引导, END ARCHITECTURE one结尾的语句部分称为结尾的语句部分称为结构体。结构体。 VHDL结构体负责描述电路器件的内部逻辑功能和电路结构体负

5、责描述电路器件的内部逻辑功能和电路结构。结构。 对于既定的电路功能,对应的电路结构不是唯一的,可对于既定的电路功能,对应的电路结构不是唯一的,可以对应不同的电路结构,取决于综合器的基本元件库的以对应不同的电路结构,取决于综合器的基本元件库的来源、优化方向和约束的选择。来源、优化方向和约束的选择。VHDL结构体中用于描述逻辑功能和电路结构的语句分为顺结构体中用于描述逻辑功能和电路结构的语句分为顺序语句和并行语句序语句和并行语句顺序语句:执行方式类似于普通软件语言的程序执行方式,顺序语句:执行方式类似于普通软件语言的程序执行方式,按照语句的前后排列方式逐条顺序执行。按照语句的前后排列方式逐条顺序执

6、行。并行语句:无论多少语句,都是同时执行的,与语句的前并行语句:无论多少语句,都是同时执行的,与语句的前后次序无关。后次序无关。y = a WHEN s = 0 ELSE b ;并行语句(可参看并行语句(可参看P357)3.1.2 相关语句结构和语法说明相关语句结构和语法说明 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name; 1. 1. 实体表达实体表达 VHDL完整的、可综合的程序结构必须完整地表达一片专完整的、可综合的程序

7、结构必须完整地表达一片专用集成电路的端口和电路功能用集成电路的端口和电路功能含有完整程序结构的含有完整程序结构的VHDL表述成为设计实体。表述成为设计实体。实体描述的是电路器件的端口构成、端口类型、端口上流实体描述的是电路器件的端口构成、端口类型、端口上流动的信号的属性动的信号的属性ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;2. 2. 实体名实体名 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p

8、_namei : port_mi data_type );END ENTITY e_name; ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;实体名是标识符,具体设计者自定。实体名是标识符,具体设计者自定。实体名取名原则:根据相应电路功能取,以表示设计电路器件实体名取名原则:根据相应电路功能取,以表示设计电路器件4位二进制计数器(位二进制计数器(counter4b););8位二进制加法器(位二进制加法器(adder8b)不能用数字和中文,不能与库定义好的名称冲突不能用数字和中

9、文,不能与库定义好的名称冲突不能用数字起头,不能用数字起头,74LS1603. 3. 端口语句和端口信号名端口语句和端口信号名 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name; ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;端口语句用端口语句用Port ( )引导,并在语句结尾处加分号引导,并在语句结尾处加分

10、号“;”。P_name是端口信号名。是端口信号名。一般地,程序中所有由设计者自定的名称,都是标识符。标识一般地,程序中所有由设计者自定的名称,都是标识符。标识符不应用数字、数字起头的文字和中文表述。符不应用数字、数字起头的文字和中文表述。3.1.2 相关语句结构和语法说明相关语句结构和语法说明 4. 4. 端口模式端口模式 输入端口,定义的通道为单向只读模式输入端口,定义的通道为单向只读模式 输出端口,定义的通道为单向输出模式输出端口,定义的通道为单向输出模式 定义的通道确定为输入输出双向端口定义的通道确定为输入输出双向端口 缓冲端口,其功能与缓冲端口,其功能与INOUTINOUT类似类似 5

11、. 5. 数据类型数据类型 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name; ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;Data_type是数据类型名。是数据类型名。VHDL规定任何一种数据对象的应用都必须严格限定其取值范规定任何一种数据对象的应用都必须严格限定其取值范围和数值类型,对其传输或存储的数据类

12、型作明确的界定。围和数值类型,对其传输或存储的数据类型作明确的界定。VHDL设计中,预先定义好要使用的数据类型,对于大规模电设计中,预先定义好要使用的数据类型,对于大规模电路描述的排错十分有益。路描述的排错十分有益。INTEGER、Boolean、STD_LOGIC、BIT(参看(参看P324)6. 6. 结构体表达结构体表达 【例【例3-5】ARCHITECTURE arch_name OF e_name IS 说明语句说明语句BEGIN (功能描述语句功能描述语句)END ARCHITECTURE arch_name ; ARCHITECTURE one OF mux21a IS BEGI

13、N y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 关键词关键词 结构体名结构体名“说明语句说明语句”包括在结构体中,用以说明和定义数据对象、数包括在结构体中,用以说明和定义数据对象、数据类型、元件调用声明等。说明语句并非是必须的。据类型、元件调用声明等。说明语句并非是必须的。SIGNAL e : STD_LOGIC;“功能描述语句功能描述语句”,必须在结构体中给出相应的电路功能描述,必须在结构体中给出相应的电路功能描述语句,可以是并行语句、顺序语句或其组合。语句,可以是并行语句、顺序语句或其组合。可综合的、完整的可综合的、完整的VHDL程序有比

14、较固定的结构。程序有比较固定的结构。设计实体设计实体各类库及其程序包的使用声明各类库及其程序包的使用声明实体描述实体描述结构体描述,可含有不同的逻辑表达语句结构结构体描述,可含有不同的逻辑表达语句结构把一个完整的、可综合的把一个完整的、可综合的VHDL程序设计构建为设计实体(独程序设计构建为设计实体(独立的电路功能结构),其程序代码常被成为立的电路功能结构),其程序代码常被成为RTL描述描述7. 7. 赋值符号和数据比较符号赋值符号和数据比较符号 赋值符赋值符 “=” 表达式表达式s=0的等号的等号“=”没有赋值的含义,只是一种数据比较符号。没有赋值的含义,只是一种数据比较符号。 其输出数据比

15、较的逻辑关系。其输出数据比较的逻辑关系。 IF a THEN . - 注意,注意,a的数据类型必须是的数据类型必须是boolean IF (s1=0)AND(s2=1)OR(cb+1) THEN . ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; Y=a,表示输入端口,表示输入端口a的数据向输出端口的数据向输出端口y传输传输或信号或信号a向信号向信号y赋值。赋值符两边信号类型必须一致赋值。赋值符两边信号类型必须一致RU : OUT BOOLEANRU= TRUE WHEN (

16、CD) ELSE FALSE8. WHEN_ELSE8. WHEN_ELSE条件信号赋值语句条件信号赋值语句 赋值目标赋值目标 = 表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE . 表达式表达式 ; z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; 条件测试的顺序性,条件信号赋值语句中的第一子句具有最条件测试的顺序性,条件信号赋值语句中的第一子句具有最高赋值优先级,第二句其次,以此类推高赋值优先级,第二句其次,以此类推条件信号赋值语句的功能与进程(条件信号赋值语句的功能与进程(PROCESS)中

17、)中IF语句类同语句类同执行条件信号语句时,赋值条件按书写先后关系逐项确定,即发现执行条件信号语句时,赋值条件按书写先后关系逐项确定,即发现“赋值条件赋值条件”满足,即把满足,即把“表达式表达式”的值赋予的值赋予“赋值目标赋值目标”ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 9. 9. 关键字关键字关键字(关键字(Key Word)指指VHDL语言中预定义的有特殊含义的英文语句。语言中预定义的有特殊含义的英文语句。VHDL中不能用关键字命名自用的对象,或用作标识符中不能用

18、关键字命名自用的对象,或用作标识符多数的多数的VHDL编辑器,都对关键字敏感,会使用特定颜色标识,因此在编辑器,都对关键字敏感,会使用特定颜色标识,因此在编辑程序时,防止误用关键字。编辑程序时,防止误用关键字。关键字的大小写不敏感。关键字的大小写不敏感。10. 10. 标识符标识符标识符是设计者自行定义的,用于标识不同名称的词语。标识符是设计者自行定义的,用于标识不同名称的词语。与关键字一样,不分大小写。与关键字一样,不分大小写。3.1.1 2选选1多路选择器的多路选择器的VHDL描述描述-2 【例【例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;E

19、NTITY mux21a IS PORT ( a, b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL e: STD_LOGIC; SIGNAL d: STD_LOGIC; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ;END ARCHITECTURE one ; 【例【例3-1】ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN

20、 BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 1. 逻辑操作符逻辑操作符文字文字AND、OR和和NOT是逻辑操作符。是逻辑操作符。VHDL共有七种基本逻共有七种基本逻辑操作符。辑操作符。AND(与),(与),OR(或),(或),NAND(与非),(与非),NOR(或非),(或非),XOR(异或),(异或),XNOR(同或),(同或),NOT(取反)(取反)信号在这些操作符的作用下可构成组合逻辑。信号

21、在这些操作符的作用下可构成组合逻辑。逻辑操作符所要求的操作数的数据类型:逻辑操作符所要求的操作数的数据类型:BIT、BOOLEAN和和STD_LOGIC。VHDL直接用对应的英语文字表达逻辑操作符号,显示硬件行直接用对应的英语文字表达逻辑操作符号,显示硬件行为描述语言的特征。为描述语言的特征。2. 标准逻辑位数据类型标准逻辑位数据类型STD_LOGIC BIT数据类型定义:数据类型定义: TYPE BIT IS(0,1); -只有两种取值只有两种取值 STD_LOGIC数据类型定义:数据类型定义: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); ENTITY mu

22、x21a IS PORT ( a, b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC );END ENTITY mux21a;类型类型STD_LOGIC比比BIT包含的内容更丰富和完整。包含的内容更丰富和完整。STD_LOGIC九种数据的含义(九种数据的含义(P69)STD_LOGIC具有更宽的取值范围,其描述与实际电路有更好更实用的适具有更宽的取值范围,其描述与实际电路有更好更实用的适应性。应性。3. 3. 设计库和标准程序包设计库和标准程序包 LIBRARY WORK ;LIBRARY STD ; USE STD.STANDARD.

23、ALL ; 【例【例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;VHDL设计文件保存在某一文件夹,并指定为工程设计文件保存在某一文件夹,并指定为工程PROJECT的文件所在的的文件所在的目录,此路径默认为工作库。目录,此路径默认为工作库。LIBRARY WORK,VHDL工具才能调用此路径中相关的元件和程序包。工具才能调用此路径中相关的元件和程序包。标准库标准库STD和工作库都是默认打开的,如例和工作库都是默认打开的,如例3-1,不必显式表达。,不必显式表达。如例如例3-2,需要定义特殊数据类型,需要使用一些特殊的程序包。,需要定义特殊数据类型,需

24、要使用一些特殊的程序包。使用库和程序包的一般定义表式是:使用库和程序包的一般定义表式是:【例【例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;STD_LOGIC数据类型定义在数据类型定义在STD_LOGIC_1164程序包中,此包由程序包中,此包由IEEE库定义。此程序包所在的程序库取名库定义。此程序包所在的程序库取名IEEE,因此,因此IEEE.STD_LOGIC_1164.ALLIEEE不属于不属于VHDL的标准库,因此,在使用时需要进行声明。的标准库,因此,在使用时需要进行声明。4. 4. 信号定义和数据对象信号定义和数据对象ARCHITECT

25、URE one OF mux21a IS SIGNAL e: STD_LOGIC; SIGNAL d: STD_LOGIC; BEGINSINGAL:定义某标识符为信号的关键词,信号属于数据对象:定义某标识符为信号的关键词,信号属于数据对象在在VHDL中,数据对象类似于一种容器,能接受不同类型的数据类型的赋中,数据对象类似于一种容器,能接受不同类型的数据类型的赋值。值。SIGNAL d: STD_LOGIC;规定了规定了d的属性特征的属性特征对于不同的逻辑描述,被定义的信号可能成为一个数据暂存点,或一根信对于不同的逻辑描述,被定义的信号可能成为一个数据暂存点,或一根信号连接线等号连接线等数据对

26、象有三类:信号(数据对象有三类:信号(SIGNAL)、变量()、变量(VARIABLE)、常量)、常量(CONSTANT)被定义的标识符必须确定为某类数据对象,也还必须被定义为某种数据类被定义的标识符必须确定为某类数据对象,也还必须被定义为某种数据类型。(用什么装,装什么)型。(用什么装,装什么)3.1.1 2选选1多路选择器的多路选择器的VHDL描述描述3【例【例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 E

27、NTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS;END ARCHITECTURE one ; 利用利用IF_THEN_ELSE语句表达了语句表达了VHDL顺序语句。顺序语句。IF语句的执行顺序类似与软件语言,根据语句排列先后顺序语句的执行顺序类似与软件语言,根据语句排列先后顺序进行判断。进行判断。顺序语句同样能描述并行运行的组合逻辑电路。顺序语句同样能描述并行运行的组合逻辑电路。判断表达式可以

28、是一个值,也可以是复杂的逻辑或运算表达判断表达式可以是一个值,也可以是复杂的逻辑或运算表达式。式。IF s = 0 THEN y = a ; ELSE y = b ; END IF;1. 1. 条件语句条件语句 IF a THEN . - 注意,注意,a的数据类型必须是的数据类型必须是boolean IF (s1=0)AND(s2=1)OR(cb+1) THEN . 2. 2. 进程语句和顺序语句进程语句和顺序语句PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS;由由PROCESS引导的语句

29、成为进程语句。引导的语句成为进程语句。所有顺序描述语句都必须放在进程语句中。所有顺序描述语句都必须放在进程语句中。PROCESS(a,b,s)称进程的敏感信号表,通常要求把进)称进程的敏感信号表,通常要求把进程中的程中的所有输入信号所有输入信号都放在敏感信号表中。都放在敏感信号表中。PROCESS语句的执行由敏感信号的变化启动,引导语句被执语句的执行由敏感信号的变化启动,引导语句被执行一遍,然后返回进程的起始端,进入等待状态,直到下一行一遍,然后返回进程的起始端,进入等待状态,直到下一次任意敏感信号的变化。次任意敏感信号的变化。一个结构体中可以包括任意个进程语句结构,所有的进程语一个结构体中可

30、以包括任意个进程语句结构,所有的进程语句都是并行语句。句都是并行语句。任一进程任一进程PROCESS引导的语句结构属于顺序语句引导的语句结构属于顺序语句3.1.1 2选选1多路选择器的多路选择器的VHDL描述描述 图图3-3 mux21a功能时序波形功能时序波形 图图3-10 半加器半加器h_adder电路图及其真值表电路图及其真值表 3.1.4 半加器描述半加器描述 I113coasob1001010110001100cosobanotxnor2and2半加器可以有多种表达方式半加器可以有多种表达方式【用电路原理图表达的半加器【用电路原理图表达的半加器】 【用真值表的形式给出半加器的描述【用

31、真值表的形式给出半加器的描述】3.1.4 半加器描述半加器描述 【例【例3-4】LIBRARY IEEE; -半加器描述半加器描述(1):布尔方程描述方法:布尔方程描述方法USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is BEGIN so = a XOR b ; co = a AND b ; END ARCHITECTURE fh1; X康芯科技康

32、芯科技【例【例3-5】LIBRARY IEEE; -半加器描述半加器描述(2):真值表描述方法:真值表描述方法USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; -定义标准逻辑位矢量定义标准逻辑位矢量BEGIN 数据类型数据类型 abc so=0; co so=1

33、; co so=1; co so=0; co NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ; 1. 1. CASECASE语句语句 CASE ISWhen = ; . ; ;When = ; . ; ;.WHEN OTHERS = ;END CASE ; 执行执行CASE语句时,首先计算语句时,首先计算“表达式表达式”语句,然后根据语句,然后根据WHEN条件语句中相同的条件语句中相同的“选择值或标识符选择值或标识符”,执行对应的顺,执行对应的顺序语句,最后结束序语句,最后结束CASE语句。语句。CASE abc IS WHEN 00 =

34、 so=0; co so=1; co so=1; co so=0; co NULL ; END CASE;1. 1. CASECASE语句语句 CASE中需要注意以下几点:中需要注意以下几点:(1)WHEN条件句中的选择值或标识符所代表的值必须在条件句中的选择值或标识符所代表的值必须在CASE的的“表达式表达式”的的取值范围取值范围内,内,数据类型数据类型也必须匹配。也必须匹配。(2)所有条件句中的选择值必须覆盖表达式的取值,否则)所有条件句中的选择值必须覆盖表达式的取值,否则最末必须加上最末必须加上WHEN OTHERS = ;OTHERS表表示以上已经列出的所有条件句中示以上已经列出的所有

35、条件句中未能列出的其他可能取值未能列出的其他可能取值。(3)CASE语句中的选择值只能出现一次。语句中的选择值只能出现一次。(4)CASE语句执行必须选中,且只能选中所列条件语句中语句执行必须选中,且只能选中所列条件语句中的一条。的一条。CASE abc IS WHEN 00 = so=0; co so=1; co so=1; co so=0; co NULL ; END CASE;2. 2. 标准逻辑矢量数据类型标准逻辑矢量数据类型 STD_LOGIC_VECTOR(标准一维矢量数据)(标准一维矢量数据) STD_LOGIC (标准位类型)(标准位类型)在使用在使用STD_LOGIC_VEC

36、TOR中,中,必须注明其数组宽度,即位宽,如:必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4) B = 01100010 ; - B(7)为为 0 B(4 DOWNTO 1) = 1101 ; - B(4)为为 1 B(7 DOWNTO 4) = A ; - B(6)等于等于 A(2) ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN3. 3. 并

37、置操作符并置操作符 SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ;.a = 1 0 d(1) 1 ; - 元素与元素并置,并置元素与元素并置,并置后的数组长度为后的数组长度为4. IF a d = 101011 THEN . - 在在IF条件句中可以使用并置符条件句中可以使用并置符 操作符操作符&表示将操作数或数组表示将操作数或数组合并起来合并起来形成新的数组矢量形成新的数组矢量如:如:“VH”&“DL”的结果为的结果为“VHDL”利用并置符可以有多种方式建

38、立新的数组利用并置符可以有多种方式建立新的数组BEGIN abc = a & b ; -a相并相并b,即,即a与与b并置操作并置操作图图3-11 全加器全加器f_adder电路图及其实体模块电路图及其实体模块 3.1.5 1位二进制全加器的位二进制全加器的VHDL描述描述 I113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA1位全加器可以由两个半加器和一个或门连接而成。位全加器可以由两个半加器和一个或门连接而成。半加器的电路原理图半加器的电路原理图半加器的半加器的VHD

39、L描述描述全加器的顶层描述全加器的顶层描述【例【例3-18】 LIBRARY IEEE ; -或门逻辑描述或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c ain,b=bin,co=d,so=e);-例化语句例化语句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MA

40、P(a=d, b=f, c=cout); END ARCHITECTURE fd1; I113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA1. 全加器描述和例化语句全加器描述和例化语句 COMPONENT 元件名元件名 IS PORT (端口名表端口名表) ;END COMPONENT 文件名文件名 ; 例化语句由两个部分组成,一是将一个现成的设计实体定义例化语句由两个部分组成,一是将一个现成的设计实体定义为一个元件,语句功能对待调用的元件作出调用声明。为一个元件,语句功能对待

41、调用的元件作出调用声明。元件定义语句,相当于对一个现成的设计实体进行封装,使其只留出对外元件定义语句,相当于对一个现成的设计实体进行封装,使其只留出对外的接口界面,如同一个集成芯片只留几个引脚一般。的接口界面,如同一个集成芯片只留几个引脚一般。端口名表,将对应端口名表,将对应VHDL的实体描述直接复制,将的实体描述直接复制,将ENTITY改成改成COMPONENT即可。(注意一一对应关系)。即可。(注意一一对应关系)。元件定义语句必须放在结构体的元件定义语句必须放在结构体的Architecture和和BEGIN之间。之间。COMPONENT h_adder PORT ( a,b : IN ST

42、D_LOGIC; co,so : OUT STD_LOGIC);元件例化是多层次的,一个调用了较低层次元件的顶层设计实元件例化是多层次的,一个调用了较低层次元件的顶层设计实体本身也可以被更高层次的设计实体所调用,成为该设计实体体本身也可以被更高层次的设计实体所调用,成为该设计实体中的一个元件。(类似于层层嵌套的关系,系统中的一个元件。(类似于层层嵌套的关系,系统-子系统子系统-部件)部件)1. 全加器描述和例化语句全加器描述和例化语句 例化名例化名 : 元件名元件名 PORT MAP( 端口名端口名 = 连接端口名连接端口名,.); COMPONENT h_adder PORT ( c,d :

43、 IN STD_LOGIC; e,f : OUT STD_LOGIC); COMPONENT h_adder PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC);元件例化的端口说明,不一定需要使用唯一的表达方式,但元件例化的端口说明,不一定需要使用唯一的表达方式,但注意端口信号的数据类型的定义必须与原设计实体文件一致。注意端口信号的数据类型的定义必须与原设计实体文件一致。第二部分是元件与当前设计实体(顶层文件)中元件间及端第二部分是元件与当前设计实体(顶层文件)中元件间及端口的连接说明。口的连接说明。例化名例化名 : 元件名元件名 PORT MA

44、P( 端口名端口名 = 连接端口名连接端口名,.); 第二部分是元件与当前设计实体(顶层文件)中元件间及端第二部分是元件与当前设计实体(顶层文件)中元件间及端口的连接说明。口的连接说明。SIGNAL d,e,f : STD_LOGIC; -定义定义3个信号作为内部的连接线。个信号作为内部的连接线。 BEGIN u1 : h_adder PORT MAP(a=ain,b=bin,co=d,so=e);-例化语句例化语句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout);I113

45、aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA例化名例化名端口名:顶层文件中待连接的各个元件本身的端口名端口名:顶层文件中待连接的各个元件本身的端口名连接端口名:顶层系统中,准备接入元件的端口相连的通信线名连接端口名:顶层系统中,准备接入元件的端口相连的通信线名左边放置内部元件的端口名,右面放置内部元件以外需要连接的端口名和信左边放置内部元件的端口名,右面放置内部元件以外需要连接的端口名和信号名号名3.2 基本时序电路的基本时序电路的VHDL描述描述 VHDL在时序电路的描述上有

46、许多独特之处。在时序电路的描述上有许多独特之处。VHDL主要通过对时序器件功能和逻辑行为的描述,而非结构主要通过对时序器件功能和逻辑行为的描述,而非结构上的描述使得计算机综合出符合要求的时序电路。上的描述使得计算机综合出符合要求的时序电路。行为描述方式体现了行为描述方式体现了VHDL电路系统行为描述的强大功能。电路系统行为描述的强大功能。3.2.1 D触发器的触发器的VHDL描述描述 X康芯科技康芯科技【例【例3-6】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D :

47、 IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-是注释符号)是注释符号) END bhv; 图3-4 D触发器

48、图图3-6 D触发器触发器3.2.1 D触发器的描述触发器的描述图3-4 D触发器1. 1.上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENT “CLKEVENT AND CLK=1” EVENT EVENT 上述条件语句的判断表达式用于检测时钟信号上述条件语句的判断表达式用于检测时钟信号CLK的上升沿,的上升沿,若检测到若检测到CLK的上升沿,表达式将输出的上升沿,表达式将输出TRUEEVENT是信号属性函数,用于获得信号行为的信息的函数是信号属性函数,用于获得信号行为的信息的函数CLKEVENT 是对时钟信号是对时钟信号CLK(标识符)在当前的一个极(标识符)在当前的一个极

49、小的时间段内发生时间的情况进行检测。小的时间段内发生时间的情况进行检测。发生事件,就是发生事件,就是CLK在其数据类型的取值范围内发生变化,从在其数据类型的取值范围内发生变化,从一种取值转变到另一种取值。一种取值转变到另一种取值。注意注意CLK的数据类型定义,的数据类型定义,BIT STD_LOGIC是不一样的。而是不一样的。而且需要考虑跳变前、跳变后的逻辑输出值。且需要考虑跳变前、跳变后的逻辑输出值。CLKEVENT改成改成 CLKEVENT AND CLK=1,表示,表示CLK时间时间在时间内发生跳变,而且之后保持高电平状态。在时间内发生跳变,而且之后保持高电平状态。两种情况相与后,满足上

50、述条件,输出两种情况相与后,满足上述条件,输出TRUE,得到一个综合,得到一个综合判断,对信号判断,对信号CLK的上升沿进行检测。的上升沿进行检测。CLKEVENT AND CLK=1成为上升沿测试语句。成为上升沿测试语句。PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ;2. 2. 不完整条件语句与时序电路不完整条件语句与时序电路 在在D触发器中,完成触发器保持原有信号功能的语句提示触发器中,完成触发器保持原有信号功能的语句提示当当CLK被触发启动时,被触发启动时,IF语句将测定

51、表达式语句将测定表达式“CLKEVENT AND CLK = 1 ”是否满足条件。是否满足条件。若若CLK为上升沿,满足条件表达式的检测,执行赋值为上升沿,满足条件表达式的检测,执行赋值Q1 b THEN q = 1 ; ELSIF a b THEN q b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; . 综上,引入时序电路结构的必要条件和关键是:综上,引入时序电路结构的必要条件和关键是:不完整的任何形式的条件语句的出现,且并不局限于不完整的任何形式的条件语句的出现,且并不局限于if语句,甚语句,甚至不局限于顺序语句。至不局限于顺序语句。3.2.3 实现时序电路的

52、实现时序电路的VHDL不同表述不同表述 (非唯一性)(非唯一性)【例【例3-11】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF; END PROCESS ; 利用表达式来利用表达式来CLKEVENT AND CLK = 1 检测检测CLK的上升沿,从而实现了的上升沿,从而实现了边沿触发型寄存器的设计。边沿触发型寄存器的设计。VHDL还有其他多种实现时序元件的常用方式还有其他多种实现时序元件的常用方式例:信

53、号例:信号CLK的数据类型是的数据类型是STD_LOGIC,它可能的取值有,它可能的取值有9种,而种,而CLKEVENT 为真的条件是为真的条件是CLK在在9种数据中的任何两种间的跳变。种数据中的任何两种间的跳变。当当CLKEVENT AND CLK = 1 为真时,并不能推定为真时,并不能推定CLK的前一状态为的前一状态为0,为了确保为了确保CLK发生上升沿跳变,可表述为发生上升沿跳变,可表述为3.2.3 实现时序电路的实现时序电路的VHDL不同表述不同表述 【例【例3-12】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同例同例3-11

54、 THEN Q = D ; END IF; END PROCESS ; LAST_VALUE也属于信号属性函数,它表示最近一次事件发生前的值。也属于信号属性函数,它表示最近一次事件发生前的值。CLKLAST_VALUE=0为为TRUE,表示,表示CLK在上一状态为在上一状态为0【例【例3-11】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF; END PROCESS ; 【例【例3-13】LIBRARY I

55、EEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK,D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - 必须打开必须打开STD_LOGIC_1164程序包程序包 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -在此,赋值语句可以放在进程外,作为并行赋值

56、语句在此,赋值语句可以放在进程外,作为并行赋值语句 END ; Rising_edge()是是IEEE库标准程库标准程序包序包STD_LOGIC_1164的预定的预定义函数义函数 这条语句只能用于标准逻辑位这条语句只能用于标准逻辑位数据类型数据类型STD_LOGIC的信号。的信号。 必须打开必须打开IEEE库和程序包库和程序包STD_LOGIC_1164,定义,定义CLK的数据类型为的数据类型为STD_LOGIC3.2.3 实现时序电路的实现时序电路的VHDL不同表述不同表述 【例【例3-14】.PROCESS BEGIN wait until CLK = 1 ; -利用利用wait语句语句

57、Q = D ;END PROCESS; 下降沿语句:下降沿语句: CLKEVENT AND (CLK=0) AND (CLKLAST_VALUE=1) Falling_edge()CLKEVENT AND CLK = 0利用利用wait until语句实现时序电路设计,含义是如果语句实现时序电路设计,含义是如果CLK当前的当前的值不是值不是1,就等待并保持,就等待并保持Q的原值不变,直到的原值不变,直到CLK变为变为1时时才对才对Q进行赋值更新。进行赋值更新。VHDL要求当进程语句中使用要求当进程语句中使用wait语句后,就语句后,就不必列出敏感信不必列出敏感信号号3.2.3 实现时序电路的实

58、现时序电路的VHDL不同表述不同表述 【例【例3-15】.PROCESS (CLK) BEGIN -可以将可以将BEGIN和和PROCESS写再一行写再一行 IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF; END PROCESS ; 例例3-15描述的描述的D触发器的触发器的CLK边沿检测是由,边沿检测是由,PROCESS语句和语句和IF语句的功能特性相结合实现的。语句的功能特性相结合实现的。图图3-7 例例3-13的时序波形的时序波形 1. 当当CLK为为0时,时,PROCESS语句处于等待状态,直

59、到发生一语句处于等待状态,直到发生一次由次由0到到1的跳变才启动进程语句。的跳变才启动进程语句。2. 进入进程执行进入进程执行IF语句时,又满足了语句时,又满足了CLK为为1的条件,于是的条件,于是对对Q进行赋值更新。进行赋值更新。3. 此前,此前,Q一直保持原值不变,直到下一次上跳时钟边沿的到来。一直保持原值不变,直到下一次上跳时钟边沿的到来。3.2.3 实现时序电路的实现时序电路的VHDL不同表述不同表述 【例【例3-16】.PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器电平触发型寄存器 THEN Q = D ; END IF; END PROCESS

60、 ; 图图3-8 例例3-14的时序波形的时序波形 Q必须处于数据原值保存的状态,必须处于数据原值保存的状态,综合结果提供了一个电平触发型综合结果提供了一个电平触发型的时序元件的时序元件1. CLK发生跳变发生跳变2. D发生跳变发生跳变X康芯科技康芯科技3.2.4 异步时序电路设计异步时序电路设计 构成时序电路的进程称为时钟进程。构成时序电路的进程称为时钟进程。 在时序电路设计中应注意,一个时钟进程只能构成对应单一在时序电路设计中应注意,一个时钟进程只能构成对应单一时钟信号的时序电路,如果在进程中需要构成多触发器时序时钟信号的时序电路,如果在进程中需要构成多触发器时序电路,也只能产生对应某个单一时钟的同步时序逻辑

温馨提示

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

评论

0/150

提交评论