《EDA技术实用教程PPT课件-第3章_VHDL设计初步.ppt》由会员分享,可在线阅读,更多相关《EDA技术实用教程PPT课件-第3章_VHDL设计初步.ppt(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、EDA技术实用教程PPT课件-第3章_VHDL设计初步 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望教学内容教学内容:3.1组合电路的组合电路的VHDL描述描述3.2基本时序电路的基本时序电路的VHDL描述描述 3.3计数器的计数器的VHDL设计设计3.4实用计数器的实用计数器的VHDL设计设计 教学要求:教学要求:通过对通过对VHDL电路示例分析学习,了解电路示例分析学习,了解用用VHDL表达和设计电路的方法,理解表达和设计电路的方法,理解VHDL语言现象和语
2、句规则的特点。语言现象和语句规则的特点。VHDL的优点的优点*易于设计复杂的、多层次的设计。支持设计库和设易于设计复杂的、多层次的设计。支持设计库和设计的重复使用计的重复使用*与硬件独立,一个设计可用于不同的硬件结构,而与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。且设计时不必了解过多的硬件细节。*有丰富的软件支持有丰富的软件支持VHDL的综合和仿真,从而能在的综合和仿真,从而能在设计阶段就能发现设计中的设计阶段就能发现设计中的Bug,缩短设计时间,缩短设计时间,降低成本。降低成本。*更方便地向更方便地向ASIC过渡过渡*VHDL有良好的可读性,容易理解。有良好的
3、可读性,容易理解。VHDL与计算机语言的区别与计算机语言的区别l*运行的基础运行的基础计算机语言是在计算机语言是在CPURAM构建的平台上运行构建的平台上运行VHDL设计的结果是由具体的逻辑、触发器组成的数字电路设计的结果是由具体的逻辑、触发器组成的数字电路l*执行方式执行方式计算机语言基本上以串行的方式执行计算机语言基本上以串行的方式执行VHDL在总体上是以并行方式工作在总体上是以并行方式工作l*验证方式验证方式计算机语言主要关注于变量值的变化计算机语言主要关注于变量值的变化VHDL要实现严格的时序逻辑关系要实现严格的时序逻辑关系3.1组合电路的组合电路的VHDL描述描述 3.1.12选选1
4、多路选择器及其多路选择器及其VHDL描述描述1 通道选择控制信号端通道选择控制信号端数据通数据通道输入道输入端口端口数据输出端数据输出端ENTITY mux21a ISPORT(a,b:IN BIT;s:IN BIT;y:OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGIN y=a WHEN s=0 ELSE b ;END ARCHITECTURE one;【例【例3-1】2选选1多路选择器多路选择器s=0 y=a s=1 y=b3.1.12选选1多路选择器及其多路选择器及其VHDL描述描述1 2选选1多路选择器多路选择器
5、s=0 y=a s=1 y=b(1)以关键词以关键词ENTITY引导,引导,END ENTITY 结尾的结尾的语句部分,称为语句部分,称为实体实体。mux21a实体实体 2选选1多路选择器的多路选择器的VHDL描述描述功能功能:描述设计模块的输入描述设计模块的输入/输出信号或引脚,并给出设计模块输出信号或引脚,并给出设计模块与外界的接口。与外界的接口。实体类似一个实体类似一个“黑盒黑盒”,实体描述了,实体描述了“黑盒黑盒”的输入输出的输入输出口。口。port:*在层次化设计时,在层次化设计时,Port为模块之间的接口为模块之间的接口 *在芯片级,则代表具体芯片的管脚在芯片级,则代表具体芯片的管
6、脚(2)以关键词以关键词ARCHITECTURE引导,引导,END ARCHITECTURE 结尾的语句部分,称为结尾的语句部分,称为结构体结构体。图图3-2 mux21a结构体结构体 功能功能:通过若干通过若干顺序语句和并行语句顺序语句和并行语句来描述来描述设计实体设计实体的的逻辑功能逻辑功能(行为描述行为描述)或或内部电路结构内部电路结构(结构描述结构描述),从而建立设计实体输出与输入之间的关系。,从而建立设计实体输出与输入之间的关系。一个设计实体可以有多个结构体一个设计实体可以有多个结构体结构体有三种描述方式结构体有三种描述方式*行为描述行为描述(behavioral):高层次的功能描述
7、,不必考虑在电路中到底是怎样实现的。高层次的功能描述,不必考虑在电路中到底是怎样实现的。*数据流描述数据流描述(dataflow):描述输入信号经过怎样的变换得到输出信号描述输入信号经过怎样的变换得到输出信号*结构化描述结构化描述(structural):类似于电路的网络表,将各个器件通过语言的形式进行连接,与电类似于电路的网络表,将各个器件通过语言的形式进行连接,与电路有一对应的关系路有一对应的关系,一般用于大规模电路的层次化设计时。一般用于大规模电路的层次化设计时。结构体结构体(ARCHITECTURE)进程进程或其它并行结构或其它并行结构实体(实体(ENTITY)配置(配置(CONFIG
8、URATION)库、程序包库、程序包设设计计实实体体结结构构设计实体:设计实体:一个完整的、可综合的一个完整的、可综合的VHDL程序设计构建程序设计构建VHDL程序设计基本结构:程序设计基本结构:结构体结构体三种描述方式的比较三种描述方式的比较描述方式描述方式优点优点缺点缺点适用场合适用场合结构化描述结构化描述连接关系清晰,电路模块化清晰电路不易理解、繁琐、复杂电路层次化设计数据流描述数据流描述布尔函数定义明白 不易描述复杂电路,修改不易小门数设计行为描述行为描述电路特性清楚明了 进行综合效率相对较低大型复杂的电路模块设计1.实体表达实体表达 描述电路器件端口构成、描述电路器件端口构成、端口类
9、型(信号流动端口类型(信号流动方向和方式)方向和方式)和信号属性和信号属性【例】【例】ENTITY e_name IS PORT(p_name:port_m data_type;.p_namei:port_mi data_type);END ENTITY e_name;VHDL相关语法说明相关语法说明语法格式语法格式entity 实体名实体名 is port()端口说明;()端口说明;end entity 实体名实体名;注意:关键词注意:关键词2.实体名实体名 3.端口端口语句语句PORT和端口信号名和端口信号名 实体名实际上是器件名,最好根据相应的电路功实体名实际上是器件名,最好根据相应的电
10、路功能确定;实体名必须与文件名相同,否则无法编译;能确定;实体名必须与文件名相同,否则无法编译;实体名不能用工具库中定义好的元件名;实体名不能实体名不能用工具库中定义好的元件名;实体名不能用中文,也不能用数字开头。用中文,也不能用数字开头。端口语句端口语句(port)说明说明:以以port为引导,并在语句结为引导,并在语句结尾处加分号尾处加分号“;”port(端口信号名:端口模式端口信号名:端口模式 数据类型名数据类型名 :=初初始值始值;);4.端口模式端口模式“IN”、“OUT”、“INOUT”、“BUFFER”输入(输入(In):):从外部输入至实体;单向端口;输出(输出(Out):):
11、从实体输出至外部;单向端口;双向(双向(Inout):):可以从外部输入至实体;也可以从实体输出至外部;双向端口;可代替所有其他模式,但降低了程序的可读性,一般用于与CPU的数据总线接口;缓冲(缓冲(Buffer):):可以从实体输出至外部;也可以从端口回读该输出值至实体;不可以从外部输入至实体;单向端口(伪双向端口);允许该管脚名作为一些逻辑的输入信号。VHDL语言中数据对象语言中数据对象(信号、变量、常数信号、变量、常数)被赋予的类型被赋予的类型规定取值范围和数值类型,即对传输或存储数据的类型规定取值范围和数值类型,即对传输或存储数据的类型作明确的界定。作明确的界定。如Integer(整型
12、)、Bit(位型)等;*VHDL-强类型语言强类型语言*预定义类型预定义类型 vs.自定义类型:自定义类型:-数据类型的分类数据类型的分类已在已在VHDL标准中预先定义,可直接使用标准中预先定义,可直接使用,如,如Integer,Real,Bit等;等;按照按照类型说明类型说明的格式自定义用户所需的类型;的格式自定义用户所需的类型;5.数据类型数据类型BIT:位数据类型:位数据类型 规定的取值范围是逻辑位规定的取值范围是逻辑位1和和0;可参与逻辑运算或算术运算;可参与逻辑运算或算术运算;BIT数据类型的定义在数据类型的定义在VHDL标准程序包标准程序包STANDARD中中6.结构体表达结构体表
13、达【例】【例】ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)说说明和定明和定义义数据数据对对象、象、数据数据类类型、元件型、元件调调用用说说明等明等 BEGIN (功能描述语句功能描述语句)电电路功能描述路功能描述语语句句,可以是并行可以是并行语语句、句、顺顺序序语语句或是他句或是他们们的混合的混合语语句句END ARCHITECTURE arch_name;一个设计实体的功能与(一个设计实体的功能与(/或)结构描述;或)结构描述;一个设计实体可以有多个结构体;一个设计实体可以有多个结构体;语法格式语法格式architecture 结构体名结构体名
14、 of 设计实体名设计实体名 is 说明区;说明区;begin 执行语句区;执行语句区;end architecture 结构体名结构体名;顺序语句:顺序语句:由进程语句引导的,以顺序方式执行的语句由进程语句引导的,以顺序方式执行的语句,其执行结果与其执行结果与书写先后顺序有关书写先后顺序有关.如赋值语句如赋值语句;分支控制语句分支控制语句;循环控制语句循环控制语句;同步控制语句同步控制语句 并行语句:并行语句:在结构体中以并行方式执行的语句。在结构体中以并行方式执行的语句。其结果与书写先后其结果与书写先后顺序无关顺序无关.并行语句有五种语句结构:块语句、进程语句、信并行语句有五种语句结构:块
15、语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。号赋值语句、子程序调用语句和元件例化语句。VHDL的基本语句的基本语句顺序语句顺序语句并行语句并行语句-eqcomp4 is a four bit equality comparatorLibrary IEEE;use IEEE.std_logic_1164.all;entity eqcomp4 isport(a,b:in std_logic_vector(3 downto 0);equal :out std_logic);end entity eqcomp4;architecture dataflow of eqcomp4 isbe
16、gin equal=1 when a=b else 0;End architecture dataflow;VHDL 大小写不敏感大小写不敏感eqcomp4.vhd包实体结构体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟构造体名库7.赋值符号和数据比较符号赋值符号和数据比较符号 8.WHEN_ELSE条件信号赋值语句条件信号赋值语句并行语句并行语句并行并行逻辑操作符:逻辑操作符:赋值符号赋值符号:“=”用于信号数据的传输,仿真传输延时最短为一个用于信号数据的传输,仿真传输延时最短为一个。要求两要求两边边的的 信号的信号的 数据数据类类型必型必须须一致一致数
17、据比较符号数据比较符号:“=”在条件语句表式中用于比较待测数据的关系。在条件语句表式中用于比较待测数据的关系。没有赋值的含义,只是一种数据比较符号。没有赋值的含义,只是一种数据比较符号。输出结果的数据类型是布尔(输出结果的数据类型是布尔(BOOLEAD)赋值目标赋值目标=表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE .表达式表达式;例:例:z =a WHEN p1=1 ELSE b WHEN p2=1 ELSE c ;VHDL语言中预定义的有特殊含义的英文词语。用户不能用关键词命名自用对象或用作标识符。9关键字关键字10标识符标识符 1
18、1规范的程序书写格式规范的程序书写格式用户在编程中自定义的,用于表示不同名称的词语12文件取名和存盘文件取名和存盘 文件取名:文件取名:建议文件名与建议文件名与VHDL设计的实体名一致,后缀是设计的实体名一致,后缀是.vhd。文件存盘:文件存盘:VHDL设计文件必须存于指定为工程的目录中,此目录将设计文件必须存于指定为工程的目录中,此目录将被设定为被设定为WORK库,库,WORK库的路径即为此目录的路径。库的路径即为此目录的路径。文件名后缀为文件名后缀为.vhd文件名英文字母不分大小文件名英文字母不分大小【例【例4-2】2选选1多路选择器多路选择器ENTITY mux21a IS PORT(a
19、,b:IN BIT;s:IN BIT;y:OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e:BIT;BEGINd=a AND(NOT s);e=b AND s;y=d OR e ;END ARCHITECTURE one;VHDLVHDL数据对象数据对象数据对象数据对象(Data ObjectsData Objects)s=0 y=a s=1 y=bde并行语句并行语句3.1.22选选1多路选择器及其多路选择器及其VHDL描述描述2布尔表达式1.逻辑操作符逻辑操作符在在AND(与与)、OR(或或)和和NOT
20、(取反取反)等的作用下可构成组等的作用下可构成组合电路。合电路。AND、OR、NOTNAND、NOR、XOR、XNOR操作对象的数据类型为:操作对象的数据类型为:BIT、BOOLEAD、STD_LOGICBIT数据类型定义:数据类型定义:种取值种取值TYPE BIT IS(0,1);STD_LOGIC数据类型定义:数据类型定义:种取值种取值TYPE STD_LOGIC IS (U-未初始化的未初始化的X-强未知的强未知的 0-强强0 1-强强1Z-高阻态高阻态W-弱未知的弱未知的 L-弱弱0 H-弱弱1-忽略)忽略)可实现:可实现:X-0 1 Z2.标准逻辑位数据类型标准逻辑位数据类型STD_
21、LOGIC库(库(LIBRARY)存放预先设计好的程序包和数据的集合存放预先设计好的程序包和数据的集合体。常用的库有体。常用的库有IEEE、STD、WORK、用户库等。这些设、用户库等。这些设计单元可用作其他计单元可用作其他VHDL描述的资源。用户编写的设计单描述的资源。用户编写的设计单元既可以访问多个设计库元既可以访问多个设计库,又可以加入到设计库中又可以加入到设计库中,被其他被其他单元所访问。单元所访问。程序包(程序包(PACKAGE)将已定义的数据类型、元件调将已定义的数据类型、元件调用说明及子程序收集在一起用说明及子程序收集在一起,供供VHDL设计实体共享和调用设计实体共享和调用,若干
22、个包则形成库。程序包由两个独立的单元组成:程序若干个包则形成库。程序包由两个独立的单元组成:程序包声明单元和程序包体单元构成。包声明单元和程序包体单元构成。3.设计库和标准程序包设计库和标准程序包IEEE库包括:库包括:STD_LOGIC_1164STD_LOGIC_ARITH是是SYNOPSYS公司加入公司加入IEEE库库程序包,包括:程序包,包括:STD_LOGIC_SIGNED(有符号数)(有符号数)STD_LOGIC_UNSIGNED(无符号数)(无符号数)STD_LOGIC_SMALL_INT(小整型数小整型数)VHDL 87版本使用版本使用IEEE STD 1076-1987 语法
23、标准语法标准VHDL 93版本使用版本使用IEEE STD 1076-1993 语法标准语法标准描描述述器器件件的的输输入入、输输出出端端口口数数据据类类型型中中将将要要用用到到的的IEEE的标准库中的的标准库中的STD_LOGIC_1164程序包。程序包。使用库和程序包的一般定义表式是:使用库和程序包的一般定义表式是:LIBRARY ;USE .ALL;信号是在结构体(信号是在结构体(ARCHITECTURE)、程序包)、程序包(PACKAGE)和实体()和实体(ENTITY)中说明的全局量。)中说明的全局量。信号定义格式:信号定义格式:SIGNAL 信号名:数据类型:信号名:数据类型:=初
24、值;初值;例如:例如:SIGNAL Q1:STD LOGIC:=0;信号赋值语句:信号赋值语句:目标信号名目标信号名=表达式表达式 例如:例如:x=9;z=x AFTER 5ns;4.SIGNAL信号定义和数据对象信号定义和数据对象数据对象:数据对象:数据对象定义:数据对象定义:类似于容器,可接受不同数据类型的赋值类似于容器,可接受不同数据类型的赋值数据对象类型:数据对象类型:信号、变量、常数信号、变量、常数【例【例3-3】2选选1多路选择器多路选择器ENTITY mux21a IS PORT(a,b,s:IN BIT;y:OUT BIT );END ENTITY mux21a;ARCHITE
25、CTURE 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;3.1.32选选1多路选择器及其多路选择器及其VHDL描述描述3进程语句进程语句敏感信号敏感信号s=0 y=a s=1 y=bIF THEN ELSE顺序语句顺序语句1.条件语句条件语句2.进程语句和顺序语句进程语句和顺序语句 IF语句必须以语句语句必须以语句“END IF;”结束结束 IF_THEN_ELSE顺序顺序进程语句进程语句以以PROCESS(敏感信号表敏感信
26、号表).END PROCESS引导的语句结构引导的语句结构 敏感信号表中敏感信号的变化将激活所在进程;敏感信号表中敏感信号的变化将激活所在进程;在一个结构体中可以包含任意个进程语句结构在一个结构体中可以包含任意个进程语句结构,所有进程语句是并行语句;所有进程语句是并行语句;由由PROCESS引导的语句是顺序语句引导的语句是顺序语句顺序语句顺序语句以顺序方式执行的语句以顺序方式执行的语句,其执行结果与书写先后顺序有关其执行结果与书写先后顺序有关.进程语句:进程语句:主要用于设计实体的算法和功能描述,即行为描述;主要用于设计实体的算法和功能描述,即行为描述;语法格式进程标号:process(敏感信
27、号表)进程说明区 begin进程程序区 end process;进程说明区:只能定义类型、变量、子程序,不能定义信号;进程程序区:只能包含顺序语句;可包含信号和变量两种数据对象:变量为进程内部对象,不可跨越进程;信号为实体全局对象,用于与其它实体内模块建立联系;敏感信号表敏感信号表可以激活该进程的信号列表可以激活该进程的信号列表敏感信号表中信号的变化将激活所在进程;敏感信号表中只能包含信号,不能包含变量;在在VHDL中所有合法的顺序描述的语句必须放在进程语句中中所有合法的顺序描述的语句必须放在进程语句中3.1.4半加器及其半加器及其VHDL的描述的描述 so=a XNOR (NOT b)co=
28、a AND异或非(同或)异或非(同或)半加器半加器h_adder逻辑功能真值表逻辑功能真值表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=NOT(a XOR(NOT b);co=a AND b;END ARCHITECTURE fh1;so=a XNOR (NO
29、T b)co=a AND【例【例3-4】半加器】半加器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;c
30、o so=1;co so=0;co NULL;END CASE;END PROCESS;END ARCHITECTURE fh1;【例【例3-5】半加器半加器格式格式:CASE ISWhen =;.;;When =;.;;.END CASE;CASE语句属于顺序语句语句属于顺序语句,须放在进程语句中使用须放在进程语句中使用.CASE语句根据满足的条件直接选择多项顺序语句中的一项语句根据满足的条件直接选择多项顺序语句中的一项执行,它常用来描述总线行为、编码器、译码器等的结构。执行,它常用来描述总线行为、编码器、译码器等的结构。可读性比可读性比if 语句强。语句强。1.CASE语句语句WHEN条件
31、选择值可以有四种表达方式;条件选择值可以有四种表达方式;l(1)单个普通数值,形如)单个普通数值,形如 WHEN 选择值选择值 =顺序语句;顺序语句;l(2)并列数值,形如)并列数值,形如 WHEN 值值/值值/值值 =顺序语句;顺序语句;l(3)数值选择范围,形如)数值选择范围,形如 WHEN 值值TO值值 =顺序语句;顺序语句;l(4)WHEN OTHERS =顺序语句;顺序语句;使用使用CASE语句需注意以下几点:语句需注意以下几点:(1)CASE语句中每一条语句的选择值只能出现一次语句中每一条语句的选择值只能出现一次,即不能有相同选择值的即不能有相同选择值的条件语句出现条件语句出现(2
32、)CASE语句执行中必须选中语句执行中必须选中,且只能选中所列条件语句中的一条且只能选中所列条件语句中的一条,即即CASE语句至少包含一个条件语句。语句至少包含一个条件语句。(3)除非所有条件语句中的选择值能完全覆盖除非所有条件语句中的选择值能完全覆盖CASE语句中表达式的取值语句中表达式的取值,否否则最末一个条件语句中的选择必须用则最末一个条件语句中的选择必须用“OTHERS”表示,它代表已给出的所有表示,它代表已给出的所有条件语句中未能列出的其他可能的取值。否则在综合过程中会插入不必要的条件语句中未能列出的其他可能的取值。否则在综合过程中会插入不必要的锁存器。关键词锁存器。关键词OTHER
33、S只能出现一次只能出现一次,且只能作为最后一种条件取值。且只能作为最后一种条件取值。当执行到当执行到CASE语句时语句时,首先计算首先计算CASE和和IS之间的表达式的值之间的表达式的值,然后根据条件语句中与之相同的选择值然后根据条件语句中与之相同的选择值,执行对应的顺序语句执行对应的顺序语句,最后结束最后结束CASE语句。语句。在使用在使用STD_LOGIC_VECTOR中,中,必须注明其必须注明其数组宽度数组宽度,即,即位宽位宽如:如:B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);或或 SIGNAL A:STD_LOGIC_VECTOR(1 TO 4)B=01100
34、010;-B(7)为为 0B(4 DOWNTO 1)=1101;-B(4)为为 1B(7 DOWNTO 4)=A;-B(6)等于等于 A(2)2.标准逻辑矢量数据类型标准逻辑矢量数据类型STD_LOGIC_VECTOR并置操作示例:并置操作示例: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条件句中可以使用并置符条件句中可以使用并置符 并置
35、操作是将操作数或数组合并起来形成新的数组。并置操作是将操作数或数组合并起来形成新的数组。并置后的数组长并置后的数组长度为度为63.并置操作符并置操作符 3.1.5一位二进制全加器及其一位二进制全加器及其VHDL描述描述1位全加器位全加器逻辑功能真值表逻辑功能真值表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);
36、-映射语句映射语句-例化语句例化语句u2:h_adderPORTMAP(a=e,b=cin,co=f,so=sum);u3:or2aPORTMAP(a=d,b=f,c=cout);ENDARCHITECTUREfd1;层次化设计层次化设计:对于一个复杂的电子系统,可以将其分解为对于一个复杂的电子系统,可以将其分解为若干个子系统,每个子系统再分解成模块,形成若干个子系统,每个子系统再分解成模块,形成多层次设计。这样,可以使更多的设计者同时进多层次设计。这样,可以使更多的设计者同时进行合作。行合作。在多层次设计中,每个层次都可以作为一个元在多层次设计中,每个层次都可以作为一个元件,再构成一个模块或
37、系统,可以先分别仿真每件,再构成一个模块或系统,可以先分别仿真每个元件,然后再整体调试。个元件,然后再整体调试。元件例化是引入一种连接关系,元件例化是引入一种连接关系,是将是将预先设计好的设计实体定义为一个元件预先设计好的设计实体定义为一个元件,然后利用,然后利用映射语句将此元件与当前设计实体中的指定端口相连,从而映射语句将此元件与当前设计实体中的指定端口相连,从而为当前设计实体引入了一个低一级的设计层次。为当前设计实体引入了一个低一级的设计层次。*在结构体中,描述只表示元件(或模块)和元件(或模在结构体中,描述只表示元件(或模块)和元件(或模块)之间的互连,就象网表一样。块)之间的互连,就象
38、网表一样。*元件例化语句也是一种并行语句,各个例化语句的执行元件例化语句也是一种并行语句,各个例化语句的执行顺序与例化语句的书写顺序无关,而是按照驱动的事件并行顺序与例化语句的书写顺序无关,而是按照驱动的事件并行执行的。执行的。*元件例化可以是多层次的元件例化可以是多层次的 *当引用库中不存在的元件时,必须首先进行元件的创建,当引用库中不存在的元件时,必须首先进行元件的创建,然后将其放在工作库中,通过调用工作库来引用元件。在引然后将其放在工作库中,通过调用工作库来引用元件。在引用元件时,要先在结构体中说明部分进行元件的说明,然后用元件时,要先在结构体中说明部分进行元件的说明,然后在使用元件时进
39、行元件例化。在使用元件时进行元件例化。3.1.6例化语句例化语句COMPONENT 元件名元件名 IS PORT (端口名表端口名表);END COMPONENT 元元件名件名;元件例化语句由两部分组成元件例化语句由两部分组成第一部分:元件定义语句(或元件说明语句)第一部分:元件定义语句(或元件说明语句)是对一个现是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:元件作出调用声明,它的最简表达式如下所示:即对设计实体进行封装即对设计实体进行封装,使其只留出对外的接口界面使其只留出对外的接口界面
40、,其中其中端口名表须列出该元件对外通信的各端口名端口名表须列出该元件对外通信的各端口名,命名方式与实命名方式与实体中的体中的 PORT()语句相同,元件定义语句必须放在结构体的语句相同,元件定义语句必须放在结构体的ARCHITECTURE与与BIGIN之间之间-即在结构体的说明区。即在结构体的说明区。元件例化语句组成:元件例化语句组成:第二部分:映射语句,第二部分:映射语句,是此元件与当前设计实体是此元件与当前设计实体(顶层文件顶层文件)中中元件间及端口的连接说明。完成电路板上的元件元件间及端口的连接说明。完成电路板上的元件“插座插座”的定的定义,义,“例化名例化名”(标号名)相当于(标号名)
41、相当于“插座名插座名”是不可缺少的;是不可缺少的;语句的表达式如下:语句的表达式如下:例化名例化名:元件名元件名 PORT MAP(端口名端口名=连接端口名连接端口名,.);PORT MAP:端口映射端口映射/端口连接端口连接端口名端口名:是在元件例化语句中端口名表中已定义好的元件端口名字是在元件例化语句中端口名表中已定义好的元件端口名字连接端口名连接端口名:是在顶层系统中是在顶层系统中,准备与接入的元件的端口相连的通信线名准备与接入的元件的端口相连的通信线名或顶层系统的端口名或顶层系统的端口名“=”:连接符号连接符号(端口名端口名=连接端口名连接端口名,.)部分完成部分完成“元件元件”引脚与
42、引脚与“插座插座”引脚的连引脚的连接接“关联关联”关联方法:关联方法:位置影射法位置影射法上层元件端口说明语句中的信号名与上层元件端口说明语句中的信号名与PORT MAP()中()中的信号名书写顺序和位置一一对应。的信号名书写顺序和位置一一对应。例如,例如,u1:and1(a1,b1,y1););名称映射法名称映射法用用“=”号将上层元件端口说明语句中的信号名与号将上层元件端口说明语句中的信号名与PORT MAP()中的信号名关联起来。()中的信号名关联起来。例如,例如,u1:and1(a=a1,b=b1,y=y1););【例【例3-8】D触发器触发器图图3-6 D触发器触发器3.2寄存器描述
43、及其寄存器描述及其VHDL语言现象语言现象3.2.1D触发器的触发器的VHDL描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 IS PORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1:STD_LOGIC;-类似于在芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=D
44、;END IF;Q=Q1;-将内部的暂存数据向端口输出将内部的暂存数据向端口输出 END PROCESS;END ARCHITECTURE bhv;双横线双横线-是注释符号是注释符号1.上升沿检测表达式上升沿检测表达式和和信号属性函数信号属性函数EVENT 关关键键词词EVENT是是预预定定义义信信号号属属性性,表表示示对对当当前前的的一一个个极极小小的时间段内发生事件的情况进行检测(如时钟的边沿)。的时间段内发生事件的情况进行检测(如时钟的边沿)。VHDL通过以下表式来测定某信号的跳变边沿:通过以下表式来测定某信号的跳变边沿:EVENTEVENT 例如:例如:clockEVENT-检测以检测
45、以clock为属性测试项目的事件为属性测试项目的事件clockEVENT AND clock=1;-检测检测clock的上升沿的上升沿clockEVENT AND clock=0;-检测检测clock的下降沿的下降沿LAST_EVENT从信号最近一次的发生至今所经历的时间,常用于检查从信号最近一次的发生至今所经历的时间,常用于检查定时时间、建立时间、保持时间和脉冲宽度等。定时时间、建立时间、保持时间和脉冲宽度等。D触发器触发器VHDL描述的语言现象说明描述的语言现象说明【例【例3-9】-比较器比较器ENTITY COMP_BAD IS PORT(a1 :IN BIT;b1 :IN BIT;q1
46、 :OUT BIT);END;ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS(a1,b1)BEGIN IF a1 b1 THEN q1=1;ELSIF a1 b1 THEN q1 b1:q1=1 a1 b1 THEN q1=1;ELSE q1 b1:q1=1 a1 b1:q1=0【例【例3-11】D触发器触发器.PROCESS(CLK)BEGIN IF CLKEVENT AND(CLK=1)AND(CLKLAST_VALUE=0)THEN Q=D;-确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF;END PROCESS;
47、3.2.2VHDL实现时序电路的不同表述实现时序电路的不同表述CLK LAST_VALUE:预定义信号属性,表示最近一次事件(预定义信号属性,表示最近一次事件(EVENT)发生前的值)发生前的值 CLKLAST_VALUE 0为为true表示在表示在 时刻前为时刻前为0 CLKLAST_VALUE 1为为true表示在表示在 时刻前为时刻前为1【例【例3-12】D触发器触发器.PROCESS(CLK)BEGIN IF CLK=1 AND CLKLAST_VALUE=0-同例同例4-11 THEN Q=D;-确确保保CLK的的变变化化是是从从0跳跳变变到到1 END IF;END PROCESS
48、;.【例【例3-13】D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK:IN STD_LOGIC;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;Q=Q1;END PROCESS;END;rising_e
49、dge()是是VHDL在在IEEE库中标准程库中标准程序包序包STD_LOGIC_1164内预定义函数。内预定义函数。【例【例3-14】D触发器触发器.PROCESS BEGIN wait until CLK=1;-利用利用wait语句语句 Q=D;END PROCESS;.wait until:等待保持至:等待保持至【例【例3-15】D触发器触发器.PROCESS(CLK)BEGIN IF CLK=1 THEN Q=D;-利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF;END PROCESS;图图3-9 边沿型触发器时序波形边沿型触发器时序波形【例【
50、例3-16】D触发器触发器.PROCESS(CLK,D)BEGIN IF CLK=1 -电平触发型寄存器电平触发型寄存器 THEN Q=D;END IF;END PROCESS;图图3-10 电平触发型寄存器的时序波形电平触发型寄存器的时序波形 Entity test1 isport(clk,d:in bit;q:out bit);end test1;architecture body of test1 issignal q1:bit;beginprocess(clk)begin if clk=1 AND clklast_value=0 then q1=d;end if;q=q1;end pr