1、EDA技术实用教程技术实用教程第第3 3章章 VHDL设计初步设计初步 教学内容教学内容:3.1组合电路的组合电路的VHDL描述描述3.2基本时序电路的基本时序电路的VHDL描述描述 3.3计数器的计数器的VHDL设计设计3.4实用计数器的实用计数器的VHDL设计设计 教学要求:教学要求:通过对通过对VHDL电路示例分析学习,了解电路示例分析学习,了解用用VHDL表达和设计电路的方法,理解表达和设计电路的方法,理解VHDL语言现象和语句规则的特点。语言现象和语句规则的特点。VHDL的优点的优点*易于设计复杂的、多层次的设计。支持设计库和设易于设计复杂的、多层次的设计。支持设计库和设计的重复使用
2、计的重复使用*与硬件独立,一个设计可用于不同的硬件结构,而与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。且设计时不必了解过多的硬件细节。*有丰富的软件支持有丰富的软件支持VHDL的综合和仿真,从而能在的综合和仿真,从而能在设计阶段就能发现设计中的设计阶段就能发现设计中的Bug,缩短设计时间,缩短设计时间,降低成本。降低成本。*更方便地向更方便地向ASIC过渡过渡*VHDL有良好的可读性,容易理解。有良好的可读性,容易理解。VHDL与计算机语言的区别与计算机语言的区别l*运行的基础运行的基础 计算机语言是在计算机语言是在CPURAM构建的平台上运行构建的平台上运行
3、VHDL设计的结果是由具体的逻辑、触发器组成的数字电路设计的结果是由具体的逻辑、触发器组成的数字电路l*执行方式执行方式计算机语言基本上以串行的方式执行计算机语言基本上以串行的方式执行VHDL在总体上是以并行方式工作在总体上是以并行方式工作l*验证方式验证方式计算机语言主要关注于变量值的变化计算机语言主要关注于变量值的变化VHDL要实现严格的时序逻辑关系要实现严格的时序逻辑关系3.1组合电路的组合电路的VHDL描述描述 3.1.12选选1多路选择器及其多路选择器及其VHDL描述描述1 通道选择控制信号端通道选择控制信号端数据通数据通道输入道输入端口端口数据输出端数据输出端ENTITY mux2
4、1a 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多路选择器多路选择器s=0 y=a s=1 y=b(1)以关键词以关键词ENTITY引导,引导,END ENTITY 结尾的结尾的语句部分,称为语句部分,称为实体实体。mux21
5、a实体实体 2选选1多路选择器的多路选择器的VHDL描述描述功能功能:描述设计模块的输入描述设计模块的输入/输出信号或引脚,并给出设计模块输出信号或引脚,并给出设计模块与外界的接口。与外界的接口。实体类似一个实体类似一个“黑盒黑盒”,实体描述了,实体描述了“黑盒黑盒”的输入输出的输入输出口。口。port:*在层次化设计时,在层次化设计时,Port为模块之间的接口为模块之间的接口 *在芯片级,则代表具体芯片的管脚在芯片级,则代表具体芯片的管脚(2)以关键词以关键词ARCHITECTURE引导,引导,END ARCHITECTURE 结尾结尾的语句部分,称为的语句部分,称为结构体结构体。图图3-2
6、 mux21a结构体结构体 功能功能:通过若干通过若干顺序语句和并行语句顺序语句和并行语句来描述来描述设计实体设计实体的的逻辑功能逻辑功能(行为描述行为描述)或或内部电路结构内部电路结构(结构描述结构描述),从而建立设计实体输出与输入之间的关系。,从而建立设计实体输出与输入之间的关系。一个设计实体可以有多个结构体一个设计实体可以有多个结构体结构体有三种描述方式结构体有三种描述方式*行为描述行为描述(behavioral):高层次的功能描述,不必考虑在电路中到底是怎样实现的。高层次的功能描述,不必考虑在电路中到底是怎样实现的。*数据流描述数据流描述(dataflow):描述输入信号经过怎样的变换
7、得到输出信号描述输入信号经过怎样的变换得到输出信号*结构化描述结构化描述(structural):类似于电路的网络表,将各个器件通过语言的形式进行连接,与电类似于电路的网络表,将各个器件通过语言的形式进行连接,与电路有一对应的关系路有一对应的关系,一般用于大规模电路的层次化设计时。一般用于大规模电路的层次化设计时。结构体结构体(ARCHITECTURE)进程进程或其它并行结构或其它并行结构实体(实体(ENTITY)配置(配置(CONFIGURATION)库、程序包库、程序包设设计计实实体体结结构构设计实体:设计实体:一个完整的、可综合的一个完整的、可综合的VHDL程序设计构建程序设计构建VHD
8、L程序设计基本结构:程序设计基本结构:结构体三种描述方式的比较结构体三种描述方式的比较描述方式描述方式优点优点缺点缺点适用场合适用场合结构化描述结构化描述连接关系清晰,电路模块化清晰电路不易理解、繁琐、复杂电路层次化设计数据流描述数据流描述布尔函数定义明白 不易描述复杂电路,修改不易小门数设计行为描述行为描述电路特性清楚明了 进行综合效率相对较低大型复杂的电路模块设计1.实体表达实体表达 描述电路器件端口构成、描述电路器件端口构成、端口类型(信号流动端口类型(信号流动方向和方式)方向和方式)和信号属性和信号属性【例【例】ENTITY e_name IS PORT(p_name:port_m d
9、ata_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):):从实体输出至外部;单向端口;双向(双向(Inout):):可以从外部输入至实体;也可以从实体输出至外部;双向端口;可代替所有其他模式,但降低了程序的可读性,一般
11、用于与CPU的数据总线接口;缓冲(缓冲(Buffer):):可以从实体输出至外部;也可以从端口回读该输出值至实体;不可以从外部输入至实体;单向端口(伪双向端口);允许该管脚名作为一些逻辑的输入信号。VHDL语言中数据对象语言中数据对象(信号、变量、常数信号、变量、常数)被赋予的类型被赋予的类型规定取值范围和数值类型,即对传输或存储数据的类规定取值范围和数值类型,即对传输或存储数据的类型作明确的界定。型作明确的界定。如Integer(整型)、Bit(位型)等;*VHDL-强类型语言强类型语言*预定义类型预定义类型 vs.自定义类型:自定义类型:-数据类型的分类数据类型的分类已在已在VHDL标准中
12、预先定义,可直接使用标准中预先定义,可直接使用,如,如Integer,Real,Bit等;等;按照按照类型说明类型说明的格式自定义用户所需的类型;的格式自定义用户所需的类型;5.数据类型数据类型BIT:位数据类型:位数据类型 规定的取值范围是逻辑位规定的取值范围是逻辑位1和和0;可参与逻辑运算或算术运算;可参与逻辑运算或算术运算;BIT数据类型的定义在数据类型的定义在VHDL标准程序包标准程序包STANDARD中中6.结构体表达结构体表达【例【例】ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)说明和定义数据对象、说明和定义数据对象、数据数据类型、元
13、件调用说明等类型、元件调用说明等 BEGIN (功能描述语句功能描述语句)电路功能描述语句电路功能描述语句,可以是并行语句、顺序语句或是他们的混合语句可以是并行语句、顺序语句或是他们的混合语句END ARCHITECTURE arch_name;一个设计实体的功能与(一个设计实体的功能与(/或)结构描述;或)结构描述;一个设计实体可以有多个结构体;一个设计实体可以有多个结构体;语法格式语法格式architecture 结构体名结构体名 of 设计实体名设计实体名 is 说明区;说明区;begin 执行语句区;执行语句区;end architecture 结构体名结构体名;顺序语句:顺序语句:由
14、进程语句引导的,以顺序方式执行的语句由进程语句引导的,以顺序方式执行的语句,其执行结果与其执行结果与书写先后顺序有关书写先后顺序有关.如赋值语句如赋值语句;分支控制语句分支控制语句;循环控制语句循环控制语句;同同步控制语句步控制语句 并行语句:并行语句:在结构体中以并行方式执行的语句。在结构体中以并行方式执行的语句。其结果与书写先后其结果与书写先后顺序无关顺序无关.并行语句有五种语句结构:块语句、进程语句、信并行语句有五种语句结构:块语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。号赋值语句、子程序调用语句和元件例化语句。VHDL的基本语句的基本语句顺序语句顺序语句并行语句并行语句
15、-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 isbegin equal=1 when a=b else 0;End architecture dataflow;VHDL 大小写不敏感大小写不敏感eqcomp4.vh
16、d包实体结构体文件名和实体名一致每行;结尾关键字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标识符标识符 11规范的程序书写格式规范的程序书写格式用户在编程中自定义的,用于表示不同名称的词语12文件取名和存盘文件取名和存盘 文件取名:文件取名:建议文件名与建议文件名与V
18、HDL设计的实体名一致,后缀是设计的实体名一致,后缀是.vhd。文件存盘:文件存盘:VHDL设计文件必须存于指定为工程的目录中,此目录将设计文件必须存于指定为工程的目录中,此目录将被设定为被设定为WORK库,库,WORK库的路径即为此目录的路径。库的路径即为此目录的路径。文件名后缀为文件名后缀为.vhd文件名英文字母不分大小文件名英文字母不分大小【例【例4-2】2选选1多路选择器多路选择器ENTITY mux21a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SI
19、GNAL d,e:BIT;BEGINd=a AND(NOT s);e=b AND s;y=d OR e ;END ARCHITECTURE one;s=0 y=a s=1 y=bde并行语句并行语句3.1.22选选1多路选择器及其多路选择器及其VHDL描述描述2布尔表达式1.逻辑操作符逻辑操作符在在AND(与与)、OR(或或)和和NOT(取反取反)等的作用下可构成组等的作用下可构成组合电路。合电路。AND、OR、NOTNAND、NOR、XOR、XNOR操作对象的数据类型为:操作对象的数据类型为:BIT、BOOLEAD、STD_LOGICBIT数据类型定义:数据类型定义:种取值种取值TYPE B
20、IT 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_LOGIC库(库(LIBRARY)存放预先设计好的程序包和数据的集存放预先设计好的程序包和数据的集合体。常用的库有合体。常用的库有IEEE、STD、WORK、用户库等。这、用户库等。这些设计单元可用作其他些设计单元可用作其他VHDL描述的资源。用户编写的设描述的
21、资源。用户编写的设计单元既可以访问多个设计库计单元既可以访问多个设计库,又可以加入到设计库中又可以加入到设计库中,被其被其他单元所访问。他单元所访问。程序包(程序包(PACKAGE)将已定义的数据类型、元件调将已定义的数据类型、元件调用说明及子程序收集在一起用说明及子程序收集在一起,供供VHDL设计实体共享和调用设计实体共享和调用,若干个包则形成库。程序包由两个独立的单元组成:程序若干个包则形成库。程序包由两个独立的单元组成:程序包声明单元和程序包体单元构成。包声明单元和程序包体单元构成。3.设计库和标准程序包设计库和标准程序包IEEE库包括:库包括:STD_LOGIC_1164STD_LOG
22、IC_ARITH是是SYNOPSYS公司加入公司加入IEEE库库程序包,包括:程序包,包括:STD_LOGIC_SIGNED(有符号数)(有符号数)STD_LOGIC_UNSIGNED(无符号数)(无符号数)STD_LOGIC_SMALL_INT(小整型数小整型数)VHDL 87版本使用版本使用IEEE STD 1076-1987 语法标准语法标准VHDL 93版本使用版本使用IEEE STD 1076-1993 语法标准语法标准描述器件的输入、输出端口数据类型中将要用到的描述器件的输入、输出端口数据类型中将要用到的IEEE的标准库中的的标准库中的STD_LOGIC_1164程序包。程序包。使
23、用库和程序包的一般定义表式是:使用库和程序包的一般定义表式是:LIBRARY ;USE .ALL;信号是在结构体(信号是在结构体(ARCHITECTURE)、程序包)、程序包(PACKAGE)和实体()和实体(ENTITY)中说明的全局量。)中说明的全局量。信号定义格式:信号定义格式:SIGNAL 信号名:数据类型:信号名:数据类型:=初值;初值;例如:例如:SIGNAL Q1:STD LOGIC:=0;信号赋值语句:信号赋值语句:目标信号名目标信号名=表达式表达式例如:例如:x=9;z=x AFTER 5ns;4.SIGNAL信号定义和数据对象信号定义和数据对象数据对象:数据对象:数据对象定
24、义:数据对象定义:类似于容器,可接受不同数据类型的赋值类似于容器,可接受不同数据类型的赋值数据对象类型:数据对象类型:信号、变量、常数信号、变量、常数【例【例3-3】2选选1多路选择器多路选择器ENTITY mux21a IS PORT(a,b,s:IN BIT;y:OUT BIT );END ENTITY 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;3.1.32选选1多路选择器及其多
25、路选择器及其VHDL描述描述3进程语句进程语句敏感信号敏感信号s=0 y=a s=1 y=bIF THEN ELSE顺序语句顺序语句1.条件语句条件语句2.进程语句和顺序语句进程语句和顺序语句 IF语句必须以语句语句必须以语句“END IF;”结结束束 IF_THEN_ELSE顺序顺序进程语句进程语句以以PROCESS(敏感信号表敏感信号表).END PROCESS引导的语句结构引导的语句结构 敏感信号表中敏感信号的变化将激活所在进程;敏感信号表中敏感信号的变化将激活所在进程;在一个结构体中可以包含任意个进程语句结构在一个结构体中可以包含任意个进程语句结构,所有进程语句是并行语句;所有进程语句
26、是并行语句;由由PROCESS引导的语句是顺序语句引导的语句是顺序语句顺序语句顺序语句以顺序方式执行的语句以顺序方式执行的语句,其执行结果与书写先后顺序有关其执行结果与书写先后顺序有关.进程语句:进程语句:主要用于设计实体的算法和功能描述,即行为描述;主要用于设计实体的算法和功能描述,即行为描述;语法格式进程标号:process(敏感信号表)进程说明区 begin进程程序区 end process;进程说明区:只能定义类型、变量、子程序,不能定义信号;进程程序区:只能包含顺序语句;可包含信号和变量两种数据对象:变量为进程内部对象,不可跨越进程;信号为实体全局对象,用于与其它实体内模块建立联系;
27、敏感信号表敏感信号表可以激活该进程的信号列表可以激活该进程的信号列表敏感信号表中信号的变化将激活所在进程;敏感信号表中只能包含信号,不能包含变量;在在VHDL中所有合法的顺序描述的语句必须放在进程语句中中所有合法的顺序描述的语句必须放在进程语句中3.1.4半加器及其半加器及其VHDL的描述的描述 so=a XNOR (NOT b)co=a ANDI113coasob1001010110001100cosobanotxnor2and2异或非(同或)异或非(同或)半加器半加器h_adder逻辑功能真值表逻辑功能真值表LIBRARY IEEE;-半加器描述半加器描述(1):布尔方程描述方法布尔方程描
28、述方法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 (NOT b)co=a AND【例【例3-4】半加器】半加器LIBRARY IEEE;-半加器描述半加器描述(2):真值表描述方法:真值表描述方法USE IEEE.STD_LOGI
29、C_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;co so=1;co so=0;co NULL;END CASE;END PROCESS;END ARCHITECTURE fh1;【例【例3-5】半加器半加器格式格式:CAS
30、E ISWhen =;.;;When =;.;;.END CASE;CASE语句属于顺序语句语句属于顺序语句,须放在进程语句中使用须放在进程语句中使用.CASE语句根据满足的条件直接选择多项顺序语句中的一项语句根据满足的条件直接选择多项顺序语句中的一项执行,它常用来描述总线行为、编码器、译码器等的结构。执行,它常用来描述总线行为、编码器、译码器等的结构。可读性比可读性比if 语句强。语句强。1.CASE语句语句WHEN条件选择值可以有四种表达方式;条件选择值可以有四种表达方式;l(1)单个普通数值,形如)单个普通数值,形如 WHEN 选择值选择值 =顺序语句;顺序语句;l(2)并列数值,形如)
31、并列数值,形如 WHEN 值值/值值/值值 =顺序语句;顺序语句;l(3)数值选择范围,形如)数值选择范围,形如 WHEN 值值TO值值 =顺序语句;顺序语句;l(4)WHEN OTHERS =顺序语句;顺序语句;使用使用CASE语句需注意以下几点:语句需注意以下几点:(1)CASE语句中每一条语句的选择值只能出现一次语句中每一条语句的选择值只能出现一次,即不能有相同选择值的即不能有相同选择值的条件语句出现条件语句出现(2)CASE语句执行中必须选中语句执行中必须选中,且只能选中所列条件语句中的一条且只能选中所列条件语句中的一条,即即CASE语句至少包含一个条件语句。语句至少包含一个条件语句。
32、(3)除非所有条件语句中的选择值能完全覆盖除非所有条件语句中的选择值能完全覆盖CASE语句中表达式的取值语句中表达式的取值,否否则最末一个条件语句中的选择必须用则最末一个条件语句中的选择必须用“OTHERS”表示,它代表已给出的所表示,它代表已给出的所有条件语句中未能列出的其他可能的取值。否则在综合过程中会插入不必要有条件语句中未能列出的其他可能的取值。否则在综合过程中会插入不必要的锁存器。关键词的锁存器。关键词OTHERS只能出现一次只能出现一次,且只能作为最后一种条件取值。且只能作为最后一种条件取值。当执行到当执行到CASE语句时语句时,首先计算首先计算CASE和和IS之间的表达式的值之间
33、的表达式的值,然后根据条件语句中与之相同的选择值然后根据条件语句中与之相同的选择值,执行对应的顺序语句执行对应的顺序语句,最后结束最后结束CASE语句。语句。在使用在使用STD_LOGIC_VECTOR中,中,必须注明其必须注明其数组宽度数组宽度,即,即位宽位宽如:如:B:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);或或 SIGNAL A:STD_LOGIC_VECTOR(1 TO 4)B=01100010;-B(7)为为 0B(4 DOWNTO 1)=1101;-B(4)为为 1B(7 DOWNTO 4)=A;-B(6)等于等于 A(2)2.标准逻辑矢量数据类型标准逻辑
34、矢量数据类型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条件句中可以使用并置符条件句中可以使用并置符 并置操作是将操作数或数组合并起来形成新的数组。并置操作是将操作数或数组合并起来形成新的数组。并置后的数组长并置后的数组长度为度为63.并置操作符并置操作符 3.1.5一位二进制全
35、加器及其一位二进制全加器及其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);-映射语句映射语句-例化语句例化语句u2:h_adderPORTMAP(a=e,b=cin,co=f,so=sum);u3:or2aPORTMAP(a=d,b=f,c=cou
36、t);ENDARCHITECTUREfd1;层次化设计层次化设计:对于一个复杂的电子系统,可以将其分解为对于一个复杂的电子系统,可以将其分解为若干个子系统,每个子系统再分解成模块,形成若干个子系统,每个子系统再分解成模块,形成多层次设计。这样,可以使更多的设计者同时进多层次设计。这样,可以使更多的设计者同时进行合作。行合作。在多层次设计中,每个层次都可以作为一个在多层次设计中,每个层次都可以作为一个元件,再构成一个模块或系统,可以先分别仿真元件,再构成一个模块或系统,可以先分别仿真每个元件,然后再整体调试。每个元件,然后再整体调试。元件例化是引入一种连接关系,元件例化是引入一种连接关系,是将是
37、将预先设计好的设计实体定义为一个元件预先设计好的设计实体定义为一个元件,然后利,然后利用映射语句将此元件与当前设计实体中的指定端口相连,用映射语句将此元件与当前设计实体中的指定端口相连,从而为当前设计实体引入了一个低一级的设计层次。从而为当前设计实体引入了一个低一级的设计层次。*在结构体中,描述只表示元件(或模块)和元件(或在结构体中,描述只表示元件(或模块)和元件(或模块)之间的互连,就象网表一样。模块)之间的互连,就象网表一样。*元件例化语句也是一种并行语句,各个例化语句的执元件例化语句也是一种并行语句,各个例化语句的执行顺序与例化语句的书写顺序无关,而是按照驱动的事件行顺序与例化语句的书
38、写顺序无关,而是按照驱动的事件并行执行的。并行执行的。*元件例化可以是多层次的元件例化可以是多层次的 *当引用库中不存在的元件时,必须首先进行元件的创当引用库中不存在的元件时,必须首先进行元件的创建,然后将其放在工作库中,通过调用工作库来引用元件。建,然后将其放在工作库中,通过调用工作库来引用元件。在引用元件时,要先在结构体中说明部分进行元件的说明,在引用元件时,要先在结构体中说明部分进行元件的说明,然后在使用元件时进行元件例化。然后在使用元件时进行元件例化。3.1.6例化语句例化语句COMPONENT 元件名元件名 IS PORT (端口名表端口名表);END COMPONENT 元元件名件
39、名;元件例化语句由两部分组成元件例化语句由两部分组成第一部分:元件定义语句(或元件说明语句)第一部分:元件定义语句(或元件说明语句)是对一个现是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:元件作出调用声明,它的最简表达式如下所示:即对设计实体进行封装即对设计实体进行封装,使其只留出对外的接口界面使其只留出对外的接口界面,其中其中端口名表须列出该元件对外通信的各端口名端口名表须列出该元件对外通信的各端口名,命名方式与实命名方式与实体中的体中的 PORT()语句相同,元件定义语句必须放在结构体
40、的语句相同,元件定义语句必须放在结构体的ARCHITECTURE与与BIGIN之间之间-即在结构体的说明区。即在结构体的说明区。元件例化语句组成:元件例化语句组成:第二部分:映射语句,第二部分:映射语句,是此元件与当前设计实体是此元件与当前设计实体(顶层文件顶层文件)中中元件间及端口的连接说明。完成电路板上的元件元件间及端口的连接说明。完成电路板上的元件“插座插座”的定的定义,义,“例化名例化名”(标号名)相当于(标号名)相当于“插座名插座名”是不可缺少的;是不可缺少的;语句的表达式如下:语句的表达式如下:例化名例化名:元件名元件名 PORT MAP(端口名端口名=连接端口名连接端口名,.);
41、PORT MAP:端口映射端口映射/端口连接端口连接端口名端口名:是在元件例化语句中端口名表中已定义好的元件端口名字是在元件例化语句中端口名表中已定义好的元件端口名字连接端口名连接端口名:是在顶层系统中是在顶层系统中,准备与接入的元件的端口相连的通信线名准备与接入的元件的端口相连的通信线名或顶层系统的端口名或顶层系统的端口名“=”:连接符号连接符号(端口名端口名=连接端口名连接端口名,.)部分完成部分完成“元件元件”引脚与引脚与“插座插座”引脚的连接引脚的连接“关联关联”关联方法:关联方法:位置影射法位置影射法上层元件端口说明语句中的信号名与上层元件端口说明语句中的信号名与PORT MAP()
42、中()中的信号名书写顺序和位置一一对应。的信号名书写顺序和位置一一对应。例如,例如,u1:and1(a1,b1,y1););名称映射法名称映射法用用“=”号将上层元件端口说明语句中的信号名与号将上层元件端口说明语句中的信号名与PORT MAP()中的信号名关联起来。()中的信号名关联起来。例如,例如,u1:and1(a=a1,b=b1,y=y1););【例【例3-8】D触发器触发器图图3-6 D触发器触发器3.2寄存器描述及其寄存器描述及其VHDL语言现象语言现象3.2.1D触发器的触发器的VHDL描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENT
43、ITY 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;END IF;Q=Q1;-将内部的暂存数据向端口输出将内部的暂存数据向端口输出 END PROCESS;END ARCHITECTURE bhv;双横线双横线-是注释符号是
44、注释符号1.上升沿检测表达式上升沿检测表达式和和信号属性函数信号属性函数EVENT 关键词关键词EVENT是预定义信号属性,表示对当前的一个极小是预定义信号属性,表示对当前的一个极小的时间段内发生事件的情况进行检测(如时钟的边沿)。的时间段内发生事件的情况进行检测(如时钟的边沿)。VHDL通过以下表式来测定某信号的跳变边沿:通过以下表式来测定某信号的跳变边沿:EVENTEVENT 例如:例如:clockEVENT-检测以检测以clock为属性测试项目的事件为属性测试项目的事件clockEVENT AND clock=1;-检测检测clock的上升沿的上升沿clockEVENT AND cloc
45、k=0;-检测检测clock的下降沿的下降沿LAST_EVENT从信号最近一次的发生至今所经历的时间,常用于检查从信号最近一次的发生至今所经历的时间,常用于检查定时时间、建立时间、保持时间和脉冲宽度等。定时时间、建立时间、保持时间和脉冲宽度等。D触发器触发器VHDL描述的语言现象说明描述的语言现象说明【例【例3-9】-比较器比较器ENTITY COMP_BAD IS PORT(a1 :IN BIT;b1 :IN BIT;q1 :OUT BIT);END;ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS(a1,b1)BEGIN IF a1 b1 THEN
46、 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;3.2.2VHDL实现时序电路的不同表述实现时序电路的不同表述CLK LAST_VALUE:预定义信号属性,表示最近一次事件(预定义信号属性,表示最近一次事件(EVENT)
47、发生前的值)发生前的值 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;.【例【例3-13】D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF3 IS PORT(CLK:IN
48、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_edge()是是VHDL在在IEEE库中标准程库中标准程序包序包STD_LOGIC_1164内预定义函数。内预定义函数。【例【例3-14】D触发器触发器.PROCESS BE
49、GIN 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 边沿型触发器时序波形边沿型触发器时序波形【例【例3-16】D触发器触发器.PROCESS(CLK,D)BEGIN IF CLK=1 -电平触发型寄存器电平触发型寄存器 THEN Q=D;END IF;END PROCE
50、SS;图图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 process;end test1_body;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport(clk,
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。