《数字电路与数字逻辑》vhdl.ppt
第12章 硬件描述语言 121 概述 122 VHDL语言的基本结构 123 数据对象、数据类型和运算操作符 124 仿真和逻辑综合 125 VHDL基本逻辑电路设计举例 本章小结 习题12 返回主目录,硬件描述语言,12.1 概述 在计算机辅助电子系统设计出现以前,人们完成系统硬件的设计一直采用传统的自下而上的方法,设计者根据系统的具体需要,选择市场上能买到的逻辑元器件,构成所需要的硬件电路,在设计的后期进行仿真和调试,主要的设计文件是电原理图。,随着大规模专用集成电路(ASIC)的开发和研制,各ASIC研制和生产厂家相继开发了用于各自目的的硬件描述语言。其中最具代表性的是美国国防部开发的VHDL语言(VHSIC Hardware Description Language),Viewlogic 公司开发的Verilog HDL以及日本电子工业振兴协会开发的UDL/I语言。,所谓硬件描述语言,就是可以描述硬件电路的功能、信号连接关系以及定时关系的语言,它比电原理图更能有效地表示硬件电路的特性。利用HDL语言设计系统硬件,通常采用自上而下的方法,即从系统总体要求出发,自上而下地逐步将设计内容细化,,最后完成系统硬件的整体设计。在设计过程中,设计者分3个层次对系统硬件进行设计:行为描述、寄存器传输(RTL)方式描述和逻辑综合,并且在每一层次都要进行仿真,以便尽早发现问题。设计过程如图12.1所示。,图 12.1 HDL语言设计系统 硬件过程框图,设计者不会受到元器件的限制,可根据设计需要大量采用ASIC芯片。采用HDL语言设计硬件电路时,主要的设计文件是用HDL语言编写的源程序,如果需要也可以转换成电原理图形式输出。,当前各ASIC芯片制造商都开发了自己的HDL语言,惟一被公认的是美国国防部的VHDL语言,它已成为IEEE STD-1076标准。VHDL有许多优点,它支持自上而下(Top Down)和基于库(LibraryBased)的设计方法,而且还支持同步电路、异步电路、FPGA以及其他随机电路的设计;系统硬件的描述能力强;用VHDL编程可以和工艺无关等。本章简要介绍VHDL语言的一些基本知识,旨在让读者了解VHDL。,122 VHDL语言的基本结构,1221 语言设计的基本单元及其构成 1222 VHDL构造体的描述方式 1223 包集合、库及配置,12.2 VHDL语言的基本结构,一个完整的VHDL程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)5个部分。前4种是可分别编译的源设计单元,库可由用户生成或由ASIC芯片制造商提供。,12.2.1 VHDL语言设计的基本单元及其构成 VHDL语言的一个基本设计单元,简单的可以是一个与门,复杂的可以是一个微处理器或一个系统。但是,其基本构成是一致的,它们都由实体和构造体两部分组成。首先我们来看一个例子。图12.2是二选一电路及其VHDL描述。,图 12.2 二选一电路及其VHDL描述,ENTITY mux IS GENERIC(m:TIME:=1 ns);PORT(d0,d1,sel:IN BIT;Q:OUT BIT);END mux;ARCHITECTURE connect OF mux IS SIGNAL tmp:BIT,BEGIN cale:PROCESS(d0,d1,sel)VARIABLE tmp1,tmp2,tmp3:BIT;BEGIN tmp1:=d0 AND sel;tmp2:=d1 AND(NOT sel);tmp1:=tmp1 OR tmp2;tmp=tmp3;q=tmp AFTER m;END PROCESS;END connect;,1.实体(ENTITY)实体部分主要规定了设计单元的输入和输出或引脚.实体部分的一般格式为 ENTITY 实体名 IS GENERIC(类属参数说明);PORT(端口说明);END 实体名;属参数说明表示设计单元的默认类属参数值,例如规定端口的大小、实体的定时特性等。例如上述程序中的GENERIC(m:TIME:=1ns),指定了构造体内m的值为1 ns。端口说明是对基本设计实体与外部接口的描述,即对外部引脚信号的名称、数据类型和输入输出方向的描述。其一般格式为,PORT(端口名:方向 数据类型名;端口名:方向 数据类型名);端口方向主要有4种:输入(IN)、输出(OUT)、缓冲(BUFFER)和双向(INOUT)。数据类型主要有布尔型(BOOLEAN)、位(BIT)位矢量(BIT-VECTOR)、整数(INTEGER)等。有些VHDL程序中,数据类型的说明符号有所不同,例如 LIBRARY IEEE USE IEEE.STD-LOGIC-1164.ALL;ENTITY mu IS PORT(d0,d1,sel:IN STD-LOGIC;Q:OUT STD-LOGIC);END mu;,该例中,BIT类型用STD-LOGIC说明,这两种方法是完全等效的。只是使用了不同的库和包集合,例如上列程序的前两个语句。2.构造体 构造体主要用来描述实体的内部逻辑,即描述一个实体的功能。构造体的一般说明格式为 ARCHITECTURE 构造体名 OF 实体名 IS 定义说明;BEGIN 语句部分;END 构造体名;VHDL可用3种描述格式来完成构造体,下面将分别介绍。,12.2.2 构造体的描述方式 对系统的构造体进行描述,VHDL允许采用3种不同风格的描述格式来完成,即行为描述、数据流RTL(或寄存器传输)描述和结构描述方式,或者是这些方式的任意组合。在当前的情况下,采用后两种方式的VHDL程序可以进行逻辑综合,而采用行为描述的VHDL程序大部分只用于系统仿真。,1.行为描述方式(Behavioral Descriptions)所谓行为描述,是指描述该设计单元的功能,即该硬件能做什么,主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送。以四选一电路为例:LIBRARY IEEE;说明使用IEEE库 USE IEEE.STD-LOGIC-1164.ALL;说明使用 IEEE库中“STD-LOGIC-1164”USE IEEE.STD-LOGIC-UNSIGNED.ALL;和“STD-LOGIC-UNSIGNED”包集合 ENTITY mux4 IS 定义实体mux4,说明端口i0,i1,i2,i3,PORT(i0,i1,i2,i3,a,b:IN STD-LOGIC;a,b为输 入,q为输出 q:OUT STD-LOGIC);END mux4;实体mux4结束 ARCHITECTURE behave OF mux4 IS 定义构造 体behave SIGNAL sel:INTEGER;定义信号sel BEGIN WITH sel SELECT 用选择信号代入语句描 述电路功能 q=i0 WHEN 0,例如:当ab为00时,sel为0 i1 WHEN 1,此时输出q为i0,其余类推,i2 WHEN 2,i3 WHEN 3,XWHEN OTHERS;sel=0 WHEN a=0AND b=0ELSE 1 WHEN a=1AND b=0ELSE 2 WHEN a=0AND b=1ELSE 3 WHEN a=1AND b=1ELSE 4;END behave;构造体结束,2.数据流RTL描述方式 所谓数据流描述,是指以类似于寄存器传输级的方式描述数据的传输和变换,主要使用并行的信号赋值语句,既显示了该设计单元的行为,也表示了该设计单元的结构。为说明这一点,我们仍用四选一电路为例,用数据流描述其功能。例如,LIBRARY IEEE;USE IEEE.STD-LOGIC-1164.ALL;USE IEEE.STD-LOGIC-UNSIGNED.ALL;ENTITY mux4 IS,PORT(input:INSTD-LOGIC-VECTOR(3DOWNTO 0);端口说明,定义输入和输出 sel:IN STD-LOGIC-VECTOR(1 DOWNTO 0);信号 y:OUT STD-LOGIC);END mux4;ARCHITECTURE rtl OF mux4 IS 定义构造体rtl BEGIN y=input(0)WHEN sel=“00”ELSE 用条件信号代 入语句描述电路 input(1)WHEN sel=01ELSE 功能,当输入sel 为“00”时,input(2)WHEN sel=“10ELSE 输出y为输入信号 input(0),input(3);其余类推 END rtl;,3.结构描述方式 所谓结构描述,是指描述该设计单元的硬件结构,即该硬件是如何构成的。结构描述主要使用配置指定语句及元件例化语句描述元件的类型及元件的互连关系。例如,ENTITY mux2 IS PORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux2;,ARCHITECTURE struct OF mux2 IS COMPONENT and2 PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT;COMPONENT or2 PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT,COMPONENT inv PORT(a:IN BIT;c:OUT BIT);END COMPONENT;SIGNAL aa,ab,nsel:BIT;BEGIN u1:inv PORT MAP(sel,nsel);u2:and2 PORT MAP(nsel,d1,ab);u3:and2 PORT MAP(d0,sel,aa);u4:or2 PORT MAP(aa,ab,q);END struct;,图 12.3 二选一电路,在图12.3所示的二选一电路的构造体中用OMPONENT语句指明了该电路中所使用的已生成的模块(在这里是AND,OR,NOT门电路),供本构造体调用。用PORT MAP()语句将生成模块的端口与所设计的各模块(在这里为u1,u2,u3,u4)的端口联系起来,并定义相应的信号,以表示所设计的各模块的连接关系。在上述3种描述方式的介绍中,我们使用了一些描述语句,例如条件信号代入语句、选择信号代入语句等。对于VHDL语言的主要描述语句,本书不作介绍,有兴趣读者可参考相关文献。,12.2.3 包集合、库及配置 除了实体和构造体之外,包集合(PACKAGE)、库(LIBRARY)和配置(CONFIGURATION)都是在VHDL语言中另外3个可以独立进行编译的源设计单元。1.库 库是经编译后的数据的集合,存放包集合定义、实体定义、构造体定义和配置定义。其功能类似DOS中的目录。库的好处是设计者可以共享已经编译过的设计结果,库与库之间是独立的,不能嵌套,库的说明总是放在设计单元的最前面。LIBRARY 库名;,当前VHDL的库主要归纳为5类:IEEE库、STD库、ASIC库、用户定义的库、WORK库。STD库是VHDL的标准库,其中存放有“STANDARD”的包集合,设计者要调用“STANDARD”中的数据可以不按标准格式说明。IEEE库中有一个“STD-LOGIC-1164”的包集合,它是IEEE认可的标准包集合。一般,在使用库时首先要用两条语句进行说明,例如:LIBRARY IEEE USE IEEE.STD-LOGIC-1164.ALL;,2.包集合 包集合用来罗列VHDL中要用到的信号定义、常数定义、数据类型、元件语句和函数定义等。它是一个可编译的设计单元,也是库结构中的一个层次。要使用包集合可以使用USE语句,例如:USE IEEE.STD-LOGIC-1164.ALL;3.配置 配置语句描述层与层之间以及实体和结构体之间的连接关系。设计者可以利用配置语句来选择不同的构造体,使其与要设计的实体相对应。下面是一个RS触发器的例子:,ENTITY rsff IS PORT(set,rest:IN bit;q,qb:BUFFER bit);END rsff;ARCHITECTURE netlist OF rsff IS 结构描述 COMPONENT NAND2 PORT(a,b:IN bit);END COMPONENT;,BIGIN u1:NAND2 PORT MAP(a=set,b=qb,c=q);u2:NAND2 PORT MAP(a=reset,b=q,c=qb);END netlist;ARCHITECTURE behave OF rsff IS 行为描述BEGIN q=NOT(qb AND set);q=NOT(q AND reset);END behave;,在上述例子中,实体rsff有两个构造体netlist和behave,实体究竟和哪个构造体相对应,由配置语句来实现。如果选用构造体netlist,则用:CONFIGURATION rsffconl OF rsff IS FOR netlist END FOR;END rsffconl;,如果选用构造体behave,则用:CONFIGURATION rsffconl OF rsff IS FOR behave END FOR;END rsffconl;这只是非常简单的一类配置,详细说明请读者参考相关文献。,123 数据对象、数据类型和运算操作符,1231 数据对象 1232 数据类型 1233 运算操作符,12.3.1 数据对象 VHDL的数据对象保存有专门类型的值,数据对象包括信号(Signal)、变量(Variable)、常数(Constant)和文件(File),在使用之前必须给予详细的说明。1.信号(Signal)信号与电路内部的硬件连接相对应,端口也是信号。作为连线,信号可以是逻辑门的输入或输出,也可以表达存储元件的状态。信号通常在构造体、包集合和实体中说明。信号说明的格式为,12.3数据对象、数据类型和运算操作符,SIGNAL 信号名:数据类型约束条件:=表达式;例如,SIGNAL enable:BIT:=0;SIGNAL count:BIT-VECTOR(3 DOWNTO 0);2.变量(Variable)变量只能在进程语句、函数语句和过程语句中使用,它是一个局部量。和信号不同,分配给信号的值必须经过一段时间的延迟后才能成为当前值,而分配给变量的值则立刻成为当前值,信号和硬件的“连线”相对应,而变量不能表达连线和存储元件。变量的说明格式为,VARIABLE 变量名:数据类型约束条件:=表达式;例如,VARIABLE x,y:INTEGER;VARIABLE count:INTEGER RANGE 0 TO 255:=10;变量的赋值是直接的,非预设的。而信号的值必须经过一段延迟后,才能成为当前值的赋值,信号赋值采用“=”符号。变量的赋值和初始化的符号“:KG-*4=”表示立即赋值。,3.常数(Constant)常数是一个固定的值。所谓常数说明就是对某一常数名赋予一个固定的值。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指出,常数一旦被赋值就不能再改变。常数说明的一般格式如下:CONSTANT 常数名:数据类型:=表达式;例如,CONSTANT VCC:REL:=5.0;CONSTANT DALY:TIME:=100ns;,4.文件(File)文件包含一些专门类型的数值,它不可以通过赋值来更新文件的内容。文件可以作为参数向子程序传递,通过子程序对文件进行读写操作。因此文件参数没有模式。,12.3.2 数据类型 VHDL具有很强的数据类型,这使得VHDL能够创建高层次的系统和算法模型。VHDL的数据类型分别为标量类型、复合类型、存取类型和文件类型。其中前两种用于综合,后两种主要用于建立仿真模型。这里主要讨论标量类型和复合类型。1.标量类型(Scalar Types)标量类型是最基本的数据类型,它包括:整数类型、浮点类型、物理类型和枚举类型。,1)整数类型(Integer Types)整数类型严格地和算术整数相似,能够处理VHDL的软件必须支持-(231-1)+(231-1),即-2 147 483 647+2 147 483 647范围的整数,例如:VARIABLE a:INTEGER range-63+63;2)浮点类型(Floating Types)浮点类型用于表达大部分实数,VHDL规定其范围为-1.0E38+1.0E38。综合工具通常不支持浮点类型。3)物理类型(Physical Types)物理类型对于综合意义不大,主要用于仿真。,4)枚举类型(Enumeration Types)枚举类型是一种非常重要的数据类型,用于建立抽象的模型。设计者用枚举类型严格地表达一个特定操作所需要的值。枚举类型的所有值由用户定义,这些值为标识符或某个字母的字面值。标识符像一个名字,例如,abc,black,clock等。文字字符的字面值是用引号括起来的字符,例如:X、1等。举例如下:TYPE Two-level-logic is(0,1);TYPE color is(red,yellow,blue);KH*2,2.复合类型(Composite Types)标量类型的数据对象在任何时刻仅持有一个值,而复合类型的数据对象则在某个时刻可持有多个值。复合类型由数组类型和记录类型组成。1)数组类型(Array Types)一个数组类型的对象用相同类型的多个元素组成,其定义如下:TYPE 数据类型名 IS ARRAY 范围 OF 原数据类型名;例如:TYPE bit-vector IS ARRAY(0 TO 6)OF STD-LOGIC;,2)记录类型(Record Types)一个记录类型的数据对象可具有不同类型的多个元素,其定义如下:TYPE 数据类型名 IS RECORD 元素名:数据类型名;元素名:数据类型名;END RECORD;例如,TYPE bank IS RECORD addr:STD-LOGIC-VECTOR(7 DOWNTO 0);ro:INTEGER;END RECORD;,表 12.1 VHDL的运算操作符,12.3.3 运算操作符 VHDL定义了丰富的运算操作符,主要有算术运算符、关系运算符、逻辑运算符、赋值运算符、关联运算符和其他运算符,如表 12.1 所示。,续表(2),续表(3),124 仿真和逻辑综合,1241 仿真 1242 逻辑综合,12.4仿真和逻辑综合,12.4.1 仿真 前面介绍了VHDL语言的基本语句,掌握了这些就可以利用VHDL语言设计数字逻辑电路。为了验证设计模块是否正确,还需对这些设计进行仿真。仿真是利用HDL语言进行硬件设计的一个必不可少的步骤,它贯穿整个过程。目前仿真工具有许多,如:Synopsys公司的 VHDL SystemSimulator等。仿真输入信息的产生通常有两种方法:程序直接产生方法和读TEXIO方法,这里不再详细介绍。,在硬件系统设计过程中一般要进行3次仿真:行为级仿真、RTL级仿真和门级仿真。它们的仿真目的和仿真程序模块的书写要求各不相同。1.行为级仿真 行为级仿真的目的是验证系统的数学模型和行为是否正确,因而对系统的抽象程度较高。对行为级仿真程序模块的书写没有太多限制,凡是VHDL语言中的语句和数据类型都可以在程序中使用。,2.RTL级仿真 通过行为级仿真以后,下一步就是将行为级描述的程序改写为RTL描述的程序模块。RTL仿真是为了使被仿真模块符合逻辑工具的要求,使其能生成门级逻辑电路。3.门级电路仿真 RTL程序模块经逻辑综合后就生成了门级电路。在门级电路的仿真中,主要考虑门的延时对系统工作情况的影响。,12.4.2 逻辑综合 逻辑综合就是将较高抽象层次的描述自动地转换到较低抽象层次的描述的一种方法。就现有的逻辑综合工具而言,就是将RTL级的描述转换成门级网络表(用基本逻辑元件表示的文件);如果需要,可以将逻辑综合的结果以逻辑原理图输出。,当前,已有十几种逻辑综合工具,如Synopsys公司的 Design Compiler Family,Cadence Design Systems公司的 Synerey等。要求的输入为:RTL描述的程序模块;约束条,如面积、速度、功耗、可测性;支持工艺库,如TTL工艺库、MOS工艺库、CMOS工艺库等。输出是门级网络表。1.RTL级描述 RTL级描述的特点是规定设计中采用各种寄存器形式,然后在寄存器之间插入组合逻辑。组合逻辑或者由逻辑方程、顺序控制语言和子程序描述,或者通过并行语句由寄存器之间的云图文件来表示。,2约束条件 在逻辑综合过程中,为了优化输出和工艺映射的需要,一定要有相应的约束条件,以实现所设计结构的控制,也就是说,采用不同的约束条件如面积、延时、功耗和可测性,对于同一个系统,其实现的结构是不同的。3.属性 属性用于规定设计进行的环境,例如属性规定输出器件必须驱动的负载数、驱动器件的驱动能力、输入信号的定时等。,4.工艺库 在根据约束条件建立网表时,工艺库含有使综合进程作正确选择的全部信息。它不仅含有ASIC单元的逻辑功能,还有该单元的面积、输入到输出的定时关系、输出的扇出限制和对单元所需的定时检查。5.逻辑综合的基本步骤 为了将RTL描述转换到门级,一般应有 3 步:转换、优化和映射到门,12.5 VHDL基本逻辑电路设计举例,3-8译码器是一个常用的数字电路,例如芯片74LS138。由有关手册可知,该译码器由8个3输入“与非”门,4个反相器和一个3输入“或非”门构成。如果事先不作说明,只给出电路,读通该电路就要花较多的时间。如果采用VHDL语言,从行为、能来对3-8译码器进行描述,不仅逻辑设计变得非常容易,而且阅读起来也会很方便。,3-8译码器是最常用的一种小规模集成电路,它有3个二进制输入端a、b、c和8个译码输入端y0y7。对输入a、b、c的值进行译码,就可以确定输入端y0y7的哪一个输出端变为有效(低电平),从而达到译码的目的。源程序如下:LIBRARY IEEE;USE IEEE.STD-LOGIC-1164.ALL;ENTITY decoder-3-to-8 IS PORT(a,b,c,g1,g2a,g2b:IN STD-LOGIC;,y:OUT STD-LOGIC-VECTOR(7 DOWNTO 0);END decoder-3-to-8;ARCHITECTURE rtl OF decoder-3-to-8 IS BEGIN Indata=c&b&a:PROCESS(indata,gl,g2a,g2b)BEGIN IF(g1=1AND g2a=0AND g2b=0)THEN CASE indata IS,WHEN 000=yyyyyyyy=01111111,WHEN OTHERS=y=XXXXXXXX;END CASE;ELSE y=11111111;END IF;END PROCESS;END rtl;,本章小结,一个数字系统,当我们借助EDA工具进行设计时,都需要对所设计系统的功能结构进行描述,即为EDA工具提供规定格式的输入数据,硬件描述语言HDL就是一种对数字系统在系统级至电路级进行设计描述的语言。VHDL语言设计的基本单元主要由实体和构造体来组成。实体由端口描述和若干个程序体描述组成,端口描述定义了该实体的外部特性,程序体描述则表述该实体的内部特性。,一个结构体的描述可以用结构描述、数据流描述和行为描述中的一种或三种形式的混合来描述。对于VHDL的包集合、库、配置以及数据类型和运算符等,本章都简要进行了介绍,限于篇幅,更深入详细的内容,请读者参考相关文献。,习题12,12.1 VHDL的基本结构由哪几部分组成?12.2 请写出实体说明和构造体说明的一般格式。12.3 构造体的描述方式有哪些?请简要介绍。12.4 参考有关书籍,试设计一个一位七段数码管的显示译码电路,写出VHDL的源程序。,