页数:64页文件大小:305.5 KB来源: 数字电路ppt课件
本课件说明硬件描述语言的产生背景与IEEE标准,系统讲解VHDL程序的基本结构,包括实体说明、构造体、配置与包集合的书写格式,介绍常量、变量、信号等数据对象与常用数据类型、运算操作符,说明仿真与逻辑综合的基本流程,并给出门电路、触发器、计数器等基本逻辑电路的VHDL设计实例。
第12章硬件描述语言12·1概述12·2 VHDL语言的基本结构12·3数据对象、数据类型和运算操作符12·4仿真和逻辑综合12·5 VHDL基本逻辑电路设计举例本章小结习题12返回主目录
12.1概述在计算机辅助电子系统设计出现以前,人们完成系统硬件的设计一直采用传统的自下而上的方法,设计者根据系统的具体需要,选择市场上能买到的逻辑元器件,构成所需要的硬件电路,在设计的后期进行仿真和调试,主要的设计文件是电原理图。
随着大规模专用集成电路(ASIC)的开发和研制,各ASIC研制和生产厂家相继开发了用于各自目的的硬件描述语言。
其中最具代表性的是美国国防部开发的VHDL语言(VHSICHardwareDescriptionLanguage),Viewlogic公司开发的VerilogHDL以及日本电子工业振兴协会开发的UDL/I语言。
所谓硬件描述语言,就是可以描述硬件电路的功能、信号连接关系以及定时关系的语言,它比电原理图更能有效地表示硬件电路的特性。
利用HDL语言设计系统硬件,通常采用自上而下的方法,即从系统总体要求出发,自上而下地逐步将设计内容细化,
最后完成系统硬件的整体设计。
在设计过程中,设计者分3个层次对系统硬件进行设计:行为描述、寄存器传输(RTL)方式描述和逻辑综合,并且在每一层次都要进行仿真,以便尽早发现问题。
设计过程如图12.1所示。
图12.1 HDL语言设计系统硬件过程框图
设计者不会受到元器件的限制,可根据设计需要大量采用ASIC芯片。
采用HDL语言设计硬件电路时,主要的设计文件是用HDL语言编写的源程序,如果需要也可以转换成电原理图形式输出。
当前各ASIC芯片制造商都开发了自己的HDL语言,惟一被公认的是美国国防部的VHDL语言,它已成为IEEESTD-1076标准。
VHDL有许多优点,它支持自上而下(TopDown)和基于库(LibraryBased)的设计方法,而且还支持同步电路、异步电路、FPGA以及其他随机电路的设计;
系统硬件的描述能力强;
用VHDL编程可以和工艺无关等。
本章简要介绍VHDL语言的一些基本知识,旨在让读者了解VHDL。
12·2 VHDL语言的基本结构12·2·1语言设计的基本单元及其构成12·2·2 VHDL构造体的描述方式12·2·3包集合、库及配置
12.2 VHDL语言的基本结构一个完整的VHDL程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library)5个部分。
前4种是可分别编译的源设计单元,库可由用户生成或由ASIC芯片制造商提供。
12.2.1VHDL语言设计的基本单元及其构成VHDL语言的一个基本设计单元,简单的可以是一个与门,复杂的可以是一个微处理器或一个系统。
但是,其基本构成是一致的,它们都由实体和构造体两部分组成。
首先我们来看一个例子。
图12.2是二选一电路及其VHDL描述。
图12.2二选一电路及其VHDL描述
ENTITYmuxISGENERIC(m:TIME:=1ns);
PORT(d0,d1,sel:INBIT;
Q:OUTBIT);
ENDmux;
ARCHITECTUREconnectOFmuxISSIGNALtmp:BIT
BEGINcale:PROCESS(d0,d1,sel)VARIABLEtmp1,tmp2,tmp3:BIT;
BEGINtmp1:=d0ANDsel;
tmp2:=d1AND(NOTsel);
tmp1:=tmp1ORtmp2;
tmp<
=tmp3;
1.实体(ENTITY)实体部分主要规定了设计单元的输入和输出或引脚.实体部分的一般格式为ENTITY实体名IS[GENERIC(类属参数说明);
][PORT(端口说明);
]END实体名;
属参数说明表示设计单元的默认类属参数值,例如规定端口的大小、实体的定时特性等。
例如上述程序中的GENERIC(m:TIME:=1ns),指定了构造体内m的值为1ns。
端口说明是对基本设计实体与外部接口的描述,即对外部引脚信号的名称、数据类型和输入输出方向的描述。
PORT(端口名:方向数据类型名;
……端口名:方向数据类型名);
端口方向主要有4种:输入(IN)、输出(OUT)、缓冲(BUFFER)和双向(INOUT)。
数据类型主要有布尔型(BOOLEAN)、位(BIT)位矢量(BIT-VECTOR)、整数(INTEGER)等。
有些VHDL程序中,数据类型的说明符号有所不同,例如LIBRARYIEEEUSEIEEE.STD-LOGIC-1164.ALL;
ENTITYmuISPORT(d0,d1,sel:INSTD-LOGIC;
该例中,BIT类型用STD-LOGIC说明,这两种方法是完全等效的。
只是使用了不同的库和包集合,例如上列程序的前两个语句。
2.构造体构造体主要用来描述实体的内部逻辑,即描述一个实体的功能。
构造体的一般说明格式为ARCHITECTURE构造体名OF实体名IS[定义说明];
BEGIN[语句部分];
END构造体名;
12.2.2构造体的描述方式对系统的构造体进行描述,VHDL允许采用3种不同风格的描述格式来完成,即行为描述、数据流RTL(或寄存器传输)描述和结构描述方式,或者是这些方式的任意组合。
在当前的情况下,采用后两种方式的VHDL程序可以进行逻辑综合,而采用行为描述的VHDL程序大部分只用于系统仿真。
PORT(i0,i1,i2,i3,a,b:INSTD-LOGIC;
a,b为输入,q为输出q:OUTSTD-LOGIC);
ENDmux4;
实体mux4结束ARCHITECTUREbehaveOFmux4IS定义构造体behaveSIGNALsel:INTEGER;
定义信号selBEGINWITHselSELECT用选择信号代入语句描述电路功能q<
=i0WHEN0,例如:当ab为00时,sel为0i1WHEN1,此时输出q为i0,其余类推
i2WHEN2,i3WHEN3,′X′WHENOTHERS;
sel<
=0WHENa=′0′ANDb=′0′ELSE1WHENa=′1′ANDb=′0′ELSE2WHENa=′0′ANDb=′1′ELSE3WHENa=′1′ANDb=′1′ELSE4;
ENDbehave;
构造体结束
2.数据流RTL描述方式所谓数据流描述,是指以类似于寄存器传输级的方式描述数据的传输和变换,主要使用并行的信号赋值语句,既显示了该设计单元的行为,也表示了该设计单元的结构。
为说明这一点,我们仍用四选一电路为例,用数据流描述其功能。
例如,LIBRARYIEEE;
USEIEEE.STD-LOGIC-1164.ALL;
USEIEEE.STD-LOGIC-UNSIGNED.ALL;
ENTITYmux4IS
ARCHITECTURE struct OF mux2 ISCOMPONENT and2PORT(a, b: IN BIT;
c: OUT BIT);
END COMPONENT;
COMPONENT or2PORT(a, b: IN BIT;
c: OUT BIT);
END COMPONENT
COMPONENT invPORT(a: IN BIT;
c: OUT BIT);
END COMPONENT;
SIGNAL aa, ab, nsel: BIT;
BEGINu1: inv PORT MAP (sel, nsel);
u2: and2 PORT MAP (nsel, d1, ab);
图12.3二选一电路
在图12.3所示的二选一电路的构造体中用OMPONENT语句指明了该电路中所使用的已生成的模块(在这里是AND,OR,NOT门电路),供本构造体调用。
用PORT MAP()语句将生成模块的端口与所设计的各模块(在这里为u1, u2, u3, u4)的端口联系起来,并定义相应的信号,以表示所设计的各模块的连接关系。
在上述3种描述方式的介绍中,我们使用了一些描述语句,例如条件信号代入语句、选择信号代入语句等。
对于VHDL语言的主要描述语句,本书不作介绍,有兴趣读者可参考相关文献。
当前VHDL的库主要归纳为5类:IEEE库、STD库、ASIC库、用户定义的库、WORK库。
STD库是VHDL的标准库,其中存放有“STANDARD”的包集合,设计者要调用“STANDARD”中的数据可以不按标准格式说明。
IEEE库中有一个“STD-LOGIC-1164”的包集合,它是IEEE认可的标准包集合。
一般,在使用库时首先要用两条语句进行说明,例如:LIBRARY IEEEUSE IEEE.STD-LOGIC-1164.ALL;
……
2.包集合包集合用来罗列VHDL中要用到的信号定义、常数定义、数据类型、元件语句和函数定义等。
它是一个可编译的设计单元,也是库结构中的一个层次。
要使用包集合可以使用USE语句,例如:USE IEEE.STD-LOGIC-1164.ALL;
3.配置配置语句描述层与层之间以及实体和结构体之间的连接关系。
设计者可以利用配置语句来选择不同的构造体,使其与要设计的实体相对应。
下面是一个RS触发器的例子:
ENTITY rsff ISPORT (set, rest: IN bit;
q, qb: BUFFER bit);
END rsff;
ARCHITECTURE netlist OF rsff IS结构描述COMPONENT NAND2PORT(a, b: IN bit);
END COMPONENT;
BIGINu1: NAND2 PORT MAP(a=>
set, b=>
qb, c=>
q);
u2: NAND2 PORT MAP(a=>
reset, b=>
在上述例子中,实体rsff有两个构造体netlist和behave,实体究竟和哪个构造体相对应,由配置语句来实现。
如果选用构造体netlist,则用:CONFIGURATION rsffconl OF rsff ISFOR netlistEND FOR;
END rsffconl;
如果选用构造体behave,则用:CONFIGURATION rsffconl OF rsff ISFOR behaveEND FOR;
END rsffconl;
这只是非常简单的一类配置,详细说明请读者参考相关文献。
12·3数据对象、数据类型和运算操作符12·3·1数据对象12·3·2数据类型12·3·3运算操作符
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;
变量的赋值是直接的,非预设的。
而信号的值必须经过一段延迟后,才能成为当前值的赋值,信号赋值采用“<
=”符号。
3.常数(Constant)常数是一个固定的值。
所谓常数说明就是对某一常数名赋予一个固定的值。
通常赋值在程序开始前进行,该值的数据类型则在说明语句中指出,常数一旦被赋值就不能再改变。
常数说明的一般格式如下:CONSTANT常数名:数据类型:=表达式;
例如,CONSTANT VCC:REL:=5.0;
CONSTANT DALY:TIME:=100ns;
4.文件(File)文件包含一些专门类型的数值,它不可以通过赋值来更新文件的内容。
文件可以作为参数向子程序传递,通过子程序对文件进行读写操作。
因此文件参数没有模式。
12.3.2数据类型VHDL具有很强的数据类型,这使得VHDL能够创建高层次的系统和算法模型。
VHDL的数据类型分别为标量类型、复合类型、存取类型和文件类型。
其中前两种用于综合,后两种主要用于建立仿真模型。
这里主要讨论标量类型和复合类型。
1.标量类型(Scalar Types)标量类型是最基本的数据类型,它包括:整数类型、浮点类型、物理类型和枚举类型。
)整数类型(Integer Types)整数类型严格地和算术整数相似,能够处理VHDL的软件必须支持-(231-1)~+(231-1),即-2 147 483647~+2 147 483 647范围的整数,例如:VARIABLE a: INTEGER range-63~+63;
2)浮点类型(Floating Types)浮点类型用于表达大部分实数,VHDL规定其范围为-1.0E38~+1.0E38。
综合工具通常不支持浮点类型。
3)物理类型(Physical Types)物理类型对于综合意义不大,主要用于仿真。
表12.1 VHDL的运算操作符12.3.3运算操作符VHDL定义了丰富的运算操作符,主要有算术运算符、关系运算符、逻辑运算符、赋值运算符、关联运算符和其他运算符,如表12.1所示。
功能运算符运算符类型与或与非或非同或非异或ANDORNANDNORXNORNOTXOR逻辑运算符
续表(2)功能运算符运算符类型等于不等于小于大于小于等于大于等于=/=〈〉〈=〉=关系运算符加减乘除取模取余逻辑左移+ˉ×/MODREMSLL算术运算符
续表(3)功能运算符运算符类型逻辑右移算术左移算术右移逻辑循环左移逻辑循环右移平方去绝对值SRLSLASRAROLROR**ABS算术运算符变量赋值信号赋值=:<
=在例化元件时用于形参到实残的映射=>
正负连接+-&
12·4仿真和逻辑综合12·4·1仿真12·4·2逻辑综合
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级描述的特点是规定设计中采用各种寄存器形式,然后在寄存器之间插入组合逻辑。
约束条件在逻辑综合过程中,为了优化输出和工艺映射的需要,一定要有相应的约束条件,以实现所设计结构的控制,也就是说,采用不同的约束条件如面积、延时、功耗和可测性,对于同一个系统,其实现的结构是不同的。
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个译码输入端y0~y7。
对输入a、b、c的值进行译码,就可以确定输入端y0~y7的哪一个输出端变为有效(低电平),从而达到译码的目的。
源程序如下:LIBRARY IEEE;
USE IEEE.STD-LOGIC-1164.ALL;
ENTITY decoder-3-to-8 ISPORT (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 ISBEGINIndata<
=c &
b &
a:PROCESS(indata, gl, g2a, g2b)BEGINIF(g1=′1′AND g2a=′0′AND g2b=′0′) THEN CASEindata IS
WHEN "000"=>
y<
="11111110";
WHEN "001"=>
y<
="11111101";
WHEN OTHERS=>
y<
="XXXXXXXX";
END CASE;
ELSEy<
="11111111";
本章小结一个数字系统,当我们借助EDA工具进行设计时,都需要对所设计系统的功能结构进行描述,即为EDA工具提供规定格式的输入数据,硬件描述语言HDL就是一种对数字系统在系统级至电路级进行设计描述的语言。
VHDL语言设计的基本单元主要由实体和构造体来组成。
实体由端口描述和若干个程序体描述组成,端口描述定义了该实体的外部特性,程序体描述则表述该实体的内部特性。
一个结构体的描述可以用结构描述、数据流描述和行为描述中的一种或三种形式的混合来描述。
对于VHDL的包集合、库、配置以及数据类型和运算符等,本章都简要进行了介绍,限于篇幅,更深入详细的内容,请读者参考相关文献。
习题1212.1 VHDL的基本结构由哪几部分组成?
12.2请写出实体说明和构造体说明的一般格式。
12.3构造体的描述方式有哪些?
请简要介绍。
12.4参考有关书籍,试设计一个一位七段数码管的显示译码电路,写出VHDL的源程序。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}