EAD课程-第3章VHDL基本结构_第1页
EAD课程-第3章VHDL基本结构_第2页
EAD课程-第3章VHDL基本结构_第3页
EAD课程-第3章VHDL基本结构_第4页
EAD课程-第3章VHDL基本结构_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

第3章VHDL基本结构

3.1概述

3.2

VHDL语言设计实体的基本结构

3.3

VHDL语言结构体的描述方式3.4VHDL语言的库、程序包及配置3.5VHDL语言的语言要素3.6VHDL语言的描述语句1EDA技术

3.1概述

VHDL语言是一种在EDA设计中广泛流行的硬件描述语言,主要用于描述数字系统的结构、行为、功能和接口。

除了含有许多具有硬件特征的语句外,VHDL语言的句法、语言形式和描述风格十分类似于一般的计算机高级语言,是目前硬件描述语言中应用最为广泛的一种。

第3章VHDL硬件描述语言

2EDA技术

3.1.1VHDL语言简介

VHDL语言全称是“超高速集成电路硬件描述语言”,它诞生于1982年,由美国国防部于20世纪七、八十年代组织研制开发,其目的首先是用这种语言描述复杂电路,其次是希望这种语言能够成为一种标准语言。

第3章VHDL硬件描述语言

1987年底,VHDL语言被电气和电子工程师协会IEEE和美国国防部确认为标准硬件描述语言,版本为IEEE-1076(简称87版)。此后在电子产业界被广泛地接受,并逐步取代了原有的非标准硬件描述语言(如CUPL、ABEL等)。

3EDA技术

3.1.1VHDL语言简介

1993年,IEEE对VHDL进行了修订,增加了一些功能,并从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了VHDL新的版本,编号为IEEEStd1076-1993(简称93版)。

第3章VHDL硬件描述语言

1995年中国国家技术监督局组织编写并出版了《CAD通用技术规范》,推荐VHDL语言作为我国电子自动化硬件描述语言的国家标准。1996年,IEEE1076.3成为VHDL综合标准。

4EDA技术

3.1.1VHDL语言简介

目前,VHDL已经成为一个数字电路和硬件系统描述、综合、优化和布线的IEEE工业标准,已得到众多EDA公司的支持,越来越多的硬件电路设计工具向VHDL标准靠拢,支持VHDL语言。在电子工程领域中,无论ASIC设计人员,还是系统设计人员,都需要学习VHDL语言来提高自己的工作效率。有专家认为,在未来的IT行业中,VHDL语言和VerilogHDL语言将承担几乎全部的数字系统设计任务。

第3章VHDL硬件描述语言

5EDA技术

3.1.2VHDL语言特点

VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,支持从系统级到逻辑门级电路所有层次的设计,适合于复杂逻辑电路和系统的设计。第3章VHDL硬件描述语言

作为高级硬件描述语言,VHDL有如下特点:①

支持从系统级到逻辑门级电路的描述;②具有很强的硬件描述能力;

③设计技术齐全、方法灵活、支持广泛;④对设计描述具有相对的独立性;⑤具有很强的移植能力;

⑥易于共享和复用;

⑦具有丰富的仿真语句和库函数;6EDA技术

3.1.2VHDL语言特点

第3章VHDL硬件描述语言

作为高级硬件描述语言,VHDL有如下特点:

⑧设计结构清晰、易读易懂;

⑨易实现系统的更新和升级;

⑩数据类型丰富、安全性好。7EDA技术1)2输入与非门NAND2的逻辑描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--IEEE库及其中程序包的使用说明

ENTITYMYNAND2ISPORT(A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDMYNAND2;--实体NAND2的说明

ARCHITECTUREART1OFMYNAND2IS--实体NAND2的结构ART1的说明

BEGINY<=ANANDB;ENDART1;第3章VHDL硬件描述语言

8EDA技术2)MY74LS00的描述

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--IEEE库及其中程序包的使用说明ENTITYMY74LS00ISPORT(A1,B1,A2,B2,A3,B3,A4,B4:INSTD_LOGIC;Y1,Y2,Y3,Y4:OUTSTD_LOGIC);ENDMY74LS00;--实体MY74LS00的说明ARCHITECTUREART2OFMY74LS00IS--实体MY74LS00的结构体ART2的说明

第3章VHDL硬件描述语言

9EDA技术

COMPONENTNAND2IS--元件调用说明

PORT(A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDCOMPONENTNAND2;BEGINU1:NAND2PORTMAP(A=>A1,B=>B1,Y=>Y1);--元件连接说明U2:NAND2PORTMAP(A=>A2,B=>B2,Y=>Y2);U3:NAND2PORTMAP(A3,B3,Y3);U4:NAND2PORTMAP(A4,B4,Y4);ENDART2;第3章VHDL硬件描述语言

10EDA技术

3.2VHDL语言设计实体的基本结构

用VHDL语言设计的电路无论规模大小,都要使用一个完整的VHDL程序结构,这个完整的程序结构称为设计实体或实体。

设计实体是指能被VHDL语言综合器所接受,并能作为独立的设计单元,以元件的形式存在的VHDL语言程序。

所谓的元件,既可以被高层次的系统调用,成为系统的一部分,也可以作为一个电路的功能模块,独立存在和运行。

第3章VHDL硬件描述语言

11EDA技术

3.2.1VHDL语言设计实体的组成

VHDL语言的设计实体都由实体说明(Entity)和结构体(Architecture)两个最基本的部分组成。

实体说明部分用来描述该模块或系统的接口信息,包括端口的数目、方向和类型,其作用相当于传统设计方法中所使用的元件符号。结构体部分则描述该模块的内部电路,对应于原理图、逻辑方程和模块的输入/输出特性。

一个设计实体可以包含一个或多个结构体,用于描述其的逻辑结构和逻辑功能。

第3章VHDL硬件描述语言

12EDA技术

1.VHDL设计实体的结构

第3章VHDL硬件描述语言

一个完整的VHDL设计实体(设计文件),通常包括:

实体说明(Entity)

结构体(Architecture)

配置(Configuration)

库(Library)和程序包(Package)

13EDA技术

1.VHDL设计实体的结构

第3章VHDL硬件描述语言

库、程序包配置

设计实体实体说明结构体进程或其他并行结构

基本结构:

14EDA技术

2.设计实体举例

【例3.2.1】试用VHDL语言设计一个四选一数据选择器。

第3章VHDL硬件描述语言

数据输入:D3D2D1D0

数据输出:Y

选择控制:S1S0

15EDA技术第3章VHDL硬件描述语言

VHDL程序如下:

LIBRARYIEEE;--IEEE库

USEIEEE.STD_LOGIC_1164.ALL;--程序包

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYmux41IS--定义实体名

PORT(S1,S0:INSTD_LOGIC;--定义输入信号

D3,D2,D1,D0:INSTD_LOGIC;Y:OUTSTD_LOGIC--定义输出信号);

ENDmux41;

ARCHITECTURE

behaveior

OFmux41IS--定义结构体名

BEGIN--逻辑功能描述Y<=D0WHENS1=‘0’ANDS0=‘0’ELSED1WHENS1=‘0’ANDS0=‘1’ELSED2WHENS1=‘1’ANDS0=‘0’ELSED3;

END

behaveior;

程序包

实体说明

结构体

16EDA技术

2.设计实体举例

库:是用来存放已设计好的程序包、数据集合体、元件的仓库,供用户进行VHDL设计时调用。第3章VHDL硬件描述语言

程序包:用VHDL语言编写的共享文件,定义了将要使用的常数、数据类型、子程序和设计好的电路单元等。实体说明:定义电路单元的输入、输出引脚信号。以标识符ENTITY开始,以END结束。结构体:用来描述电路内部结构和逻辑功能。并以标识符ARCHITECTURE开头,以END结尾。

17EDA技术

3.2.2VHDL语言的实体说明

实体说明是VHDL程序设计中最基本的组成部分,主要用来描述设计实体的外部接口信号,定义设计单元的输入、输出端口,是设计实体对外的一个通信界面,但它不描述设计的具体功能。

第3章VHDL硬件描述语言

实体说明语句的格式如下:ENTITY

实体名

IS[GENERIC(类属表);][PORT(端口表);]

END[ENTITY]实体名;实体说明语句类属说明语句端口说明语句结束语句

规则:①

实体声明语句必须以“ENTITY

实体名

IS”开始,以“ENDENTITY

实体名;”结束;②

实体名是设计者给设计实体的命名;③

方括号内的语言描述可任选。18EDA技术

1.实体说明语句ENTITY

该语句是实体说明的引导语句,用来指明实体说明部分的开始,并定义实体名。第3章VHDL硬件描述语言

关键字:ENTITY

格式:ENTITY

实体名IS在设计编程时,实体名必须与设计文件名相同,否则无法编译。

19EDA技术

2.

类属说明语句GENERIC

该语句用来确定设计实体中定义的局部常数,将外部环境的信息参数传递到设计实体,并用类属表的形式指明器件的一些特征。

第3章VHDL硬件描述语言

关键字:GENERIC

格式:GENERIC(常数名{,常数名}:数据类型[:设定值]

{;常数名{,常数名}:数据类型[:设定值]})

常数名:是由设计者定义的类属常数名;

数据类型:常取INTEGER或TIME的类型;

设定值:为常数名所代表的数值。20EDA技术

2.

类属说明语句GENERIC

例如:第3章VHDL硬件描述语言

类属表对数据总线的类型和宽度做了定义,类属参数datawith的数据类型为整数,数据宽度为8位。

ENTITYbodyIS

GENERIC(datawidth:INTEGER:=8);……

类属说明必须位于端口说明之前,用于指定设计实体和外部环境通信的参数,并以关键字GENERIC引导一个类属参数表,在表中提供时间参数、总线宽度等信息。

21EDA技术

3.

端口说明语句PORT

该语句是设计实体与外界接口的描述,用来指明实体的输入、输出信号及其模式,包括端口的名称、数据的类型和数据的传递方向(端口模式)。

第3章VHDL硬件描述语言

关键字:PORT

格式:PORE

(端口名{,端口名}:端口模式

数据类型

{;端口名{,端口名}:端口模式

数据类型})

端口名:是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名。

端口模式:即端口方向,用来定义外部引脚的信号方向,共有五种模式。

数据类型:用来指定每个端口信号的取值类型,共有10种。

22EDA技术

3.

端口说明语句PORT

端口模式说明:

第3章VHDL硬件描述语言

23EDA技术

3.

端口说明语句PORT

端口模式的符号

第3章VHDL硬件描述语言

IN端口模式

OUT端口模式:INOUT端口模式:BUFFER端口模式:24EDA技术

3.

端口说明语句PORT

【例3.2.2】编写2输入与非门的实体说明。第3章VHDL硬件描述语言

设与非门的输入为A和B,输出为Y。

ENTITYnand2IS

GENERIC

(risew:TIME:=1ns;

fallw:TIME:=1ns);

PORT

(A:INSTD_LOGIC;B:INSTD_LOGIC;Y:OUTSTD_LOGIC);

ENDnand2;--定义risew为上升沿--定义fallw为下降沿--定义A、B和Y为逻辑位25EDA技术73页

VHDL源程序如下。libraryIEEE;--库useIEEE.std_logic_1164.all;entitych0isport(d0:instd_logic;d1:instd_logic;--实体

sel:in

std_logic;

q:out

std_logic);endch0;第3章VHDL硬件描述语言

26EDA技术architectureconnectofch0isbeginprocess(d0,dl,sel)variabletempl,temp2,temp3:std_logic;--结构体begintemp1:=d0andsel;temp2:=d1and(notsel);temp3:=temp1ortemp2;q<=temp3;endprocess;endconnect;第3章VHDL硬件描述语言

27EDA技术

3.3VHDL语言的结构体

结构体是设计实体的核心,它具体指明了设计实体的行为、元件及内部连接关系。

第3章VHDL硬件描述语言

结构体所承担的任务

①定义结构体内部所使用的各项元素;

②通过VHDL提供的语句来描述设计实体所要求的具体行为和功能;③描述各元件之间的连接。28EDA技术

3.3VHDL语言的结构体

结构体内部构造的描述层次和描述内容:第3章VHDL硬件描述语言

结构体结构体说明结构体功能描述常数说明数据类型说明信号说明例化元件说明子程序说明块语句进程语句信号赋值语句子程序调用语句元件例化语句29EDA技术

3.3VHDL语言的结构体

第3章VHDL硬件描述语言

结构体由两个基本部分组成:

结构体说明,用来对数据类型、常数、信号、子程序和元件等进行说明。②结构体功能描述,用来描述设计实体的逻辑行为,可以用不同的描述风格来表达设计实体的逻辑功能。30EDA技术第3章VHDL硬件描述语言

结构体的格式:

1.结构体的基本格式

ARCHITECTURE

结构体名OF

实体名IS[结构体说明语句;]

BEGIN[功能描述语句;]

END[ARCHITECTURE][结构体名];

31EDA技术第3章VHDL硬件描述语言

结构体引导语句用来引导结构体的开始,并定义结构体的名称。

2.结构体引导语句关键字:ARCHITECTURE

格式:ARCHITECTURE

结构体名OF

实体名IS

结构体名是给予结构体的名称,是该结构体唯一的名字,用来表明该结构体所隶属于哪个实体。

32EDA技术第3章VHDL硬件描述语言

用于定义结构体中所用的数据对象和子程序,并对所引用的元件加以说明,如:

3.结构体说明语句

●信号(SIGNAL)

●类型(TYPE)

●常数(CONSTANT)

●元件(COMPONENT)

●函数(FUNCTION)

●过程(PROCEDURE)

33EDA技术第3章VHDL硬件描述语言

4.功能描述语句

用于描述实体的逻辑功能。

功能描述语句结构可以含有五种不同类型。结构体功能描述块语句进程语句信号赋值语句子程序调用语句元件例化语句34EDA技术第3章VHDL硬件描述语言

4.功能描述语句

①块语句(BLOCK)

块语句结构是由若干个并行执行语句构成的组合体,其功能是将结构体中的并行语句包装在一起,组成一个或多个模块(即子模块)。②进程语句(PROCESS)

定义顺序语句模块,其内部为顺序语句,将从外部获得的信号值,或内部的运算数据向其他信号进行赋值。

③信号赋值语句(SIGNAL)

用来将设计实体内的处理结果向所定义的信号或界面端口进行赋值。

35EDA技术第3章VHDL硬件描述语言

4.功能描述语句

④子程序调用语句

由过程(PROCEDURE)和函数(FUNCTION)组成,其内部是顺序语句。用来调用过程和函数,并将结果赋值给信号。

⑤元件例化语句(COMPONENT)

元件例化语句用来调用另一个设计实体所描述的电路。调用时,元件例化语句对其他的设计实体做元件调用说明,并将元件的端口与其他元件、信号或高层设计实体的界面端口进行连接。

36EDA技术第3章VHDL硬件描述语言

【例3.2.3】编写一个四位二进制加法计数器的结构体。

计数器共有三个输入和五个输出。输入:时钟输入端CLK、使能控制端EN和异步清零端Rd。输出:四位状态输出Q3~Q0和进位输出CO。

设计程序的结构体如下:ARCHITECTUREbehaviorOFcounter16IS

BEGINCO<=‘1’

WHEN(Q=“1111”AND

EN=‘1’AND

Rd=‘1’)

ELSE

‘0’;

--条件赋值语句

PROCESS(CLK,Rd)--进程语句

BEGIN

IF(Rd=‘0’)THENQ<=“0000”;--IF语句

ELSIF(CLK’EVENT

ANDCLK=‘1’)THEN

--CLK上升沿计数

IF(EN=‘1’)THENQ<=Q+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDbehavior;37EDA技术VHDL语言结构体的描述方式

VHDL语言的结构体可以用不同的语句类型和描述方式来表达电路所期望的逻辑行为,而对于相同的逻辑行为,可以有不同的语句表达方式。第3章VHDL硬件描述语言

在VHDL语言中,这些描述方式或建模方式称为VHDL语言的描述风格。

常用的描述方式主要有:

行为描述

●数据流描述

●结构描述

●混合描述38EDA技术行为描述依据设计实体的功能或算法对结构体进行描述,不需要给出实现这些行为的硬件结构,只强调电路的行为和功能。

在结构体中,行为描述主要用函数、过程和进程语句,以功能或算法的形式来描述数据的转换和传送。

第3章VHDL硬件描述语言

1结构体的行为描述

39EDA技术【例3.3.1】试用行为描述完成二选一数据选择器的设计。第3章VHDL硬件描述语言

设数据输入为d0和d1、选择输入为s,输出为y。程序清单:

ENTITYmux21IS

PORT(d1,d0:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDmux21;

ARCHITECTUREbehaviorOFmux21IS

BEGINy<=d1WHENs=‘1’ELSEd0;

ENDbehavior;40EDA技术

行为描述类似于高级编程语言,主要是对设计实体的功能或数学模型进行描述,其抽象程度远高于数据流描述和结构描述,其特点如下:

第3章VHDL硬件描述语言

行为描述具有很高的抽象程度,远高于数据流描述和结构描述;

行为描述只需描述清楚输入与输出的行为,而与它们的结构无关;

描述程序大多采用算术运算、关系运算、惯性延时、传输延时等语句;

结构体中的过程语句属于典型的行为描述。41EDA技术

即逻辑描述,它利用VHDL语言中的赋值符和逻辑运算符进行描述,既包含逻辑单元的结构信息,又隐含地表示某种行为。第3章VHDL硬件描述语言

2结构体的数据流描述

例如:

y<=aNORb;

z<=NOT(aXORb);//y等于a与b的或非运算//z等于a与b的同或运算这种方式主要采用非结构化的并行语句描述。42EDA技术【例3.3.2】将例3.3.1中的数据选择器采用数据流描述。第3章VHDL硬件描述语言

逻辑表达式:y

=

d0·s

+

d1·s

程序清单:

ENTITYmux21IS

PORT(d1,d0:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDmux21;

ARCHITECTUREdataflowOFmux21IS

SIGNALtmp1,tmp2,tmp3:STD_LOGIC;

BEGINtmp1<=d1ANDs;tmp2<=d0AND(NOTs);tmp3<=tmp1ORtmp2;y<=tmp3;

ENDdataflow;43EDA技术

结构描述是从设计实体的内部结构对结构体进行描述的,并给出该实体所包含的模块或元件的相互连接关系。

这种方式主要采用元件例化(COMPONENT)的形式对设计实体进行描述。可以用不同类型的结构来实现多层次的工程设计,从简单的门电路到复杂的元件来描述整个系统,元件之间的连接通过定义的端口界面来实现。

第3章VHDL硬件描述语言

3结构体的结构描述

44EDA技术

结构描述建模的步骤如下:第3章VHDL硬件描述语言

3结构体的结构描述

①元件说明:描述局部接口。

②元件例化:相对于其他元件放置元件。

③元件配置:指定元件所有的设计实体。

结构描述用于层次化设计,高层次的设计模块调用低层次的设计模块,或直接用门电路来构成一个复杂的逻辑电路。

45EDA技术【例3.3.3】将例3.3.1中的数据选择器采用结构描述。

第3章VHDL硬件描述语言

程序清单:

ENTITYmux21IS

PORT(d1,d0:INSTD_LOGIC;s:INSTD_LOGIC;y:OUTSTD_LOGIC);

ENDmux21;

ARCHITECTUREstructureOFmux21IS

COMPONENTand2--2输入与门器件调用声明并定义其端口

PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);

END

COMPONENT;

COMPONENT

or2--2输入或门器件调用声明并定义其端口

PORT(a,b:INSTD_LOGIC;c:OUT

STD_LOGIC);

END

COMPONENT;&&≥11

d1

d0

s

y

aa

ab

ns

U1

U3

U2

U446EDA技术【例3.3.3】将例3.3.1中的数据选择器采用结构描述。

第3章VHDL硬件描述语言

程序清单:&&≥11

d1

d0

s

y

aa

ab

ns

U1

U3

U2

U4COMPONENTnot1--1输入非门器件调用声明并定义其端口

PORT

(a:INSTD_LOGIC;c:OUTSTD_LOGIC);

END

COMPONENT;

SIGNAL

aa,ab,ns:STD_LOGIC;

BEGINU1:not1PORTMAP(s,ns);--元件连接说明U2:and2PORTMAP

(d1,s,aa);U3:and2PORTMAP(ns,d0,ab);U4:or2PORTMAP(aa,ab,y);

ENDstructure;47EDA技术

混合描述就是在结构体中同时使用多种不同的描述方式,它可以使描述简单灵活。

例如,在同一结构体中,分别使用元件例化语句和并行语句,就可以构成由两种描述方式的混合描述。

第3章VHDL硬件描述语言

4结构体的混合描述

48EDA技术【例3.3.4】用混合描述完成半加器的设计。

第3章VHDL硬件描述语言

表达式:sn=an⊕bn

cn=an·bn

数据流描述

结构描述

程序清单:

ENTITYhalf_adderIS

PORT(an,bn:INSTD_LOGIC;

sn,cn:OUTSTD_LOGIC);

ENDhalf_adder;

ARCHITECTUREmix_haOFhalf_adderIS

COMPONENTand2

PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);

ENDCOMPONENT;

BEGIN

sn

<=anXOR

bn;

U1:and2PORTMAP(an,bn,cn);

ENDmix_ha;49EDA技术第3章VHDL硬件描述语言

块(BLOCK)语句可以将一些实现某一特定功能的并行语句组合在一起,其主要目的是利用多个块语句结构将一个复杂的结构体划分成几个不同功能的模块,使复杂的结构体结构分明、功能明确,使程序的编排更加清晰、更有层次,改善并行语句的结构和可读性,便于程序的编写、调试和查错。

3.4.1.块语句

3.4VHDL结构体的子结构50EDA技术第3章VHDL硬件描述语言

(1)块语句的格式

块语句是将结构体中并行语句进行组合的一种方法。

块标号:BLOCK

说明语句

BEGIN

并行语句

ENDBLOCK

块标号;

格式:

说明语句:主要包括接口说明和类属说明等,用来定义块内局部信号、数据类型、元件和子程序。

并行语句:可以使用所有的并行语句。

51EDA技术第3章VHDL硬件描述语言

(2)块语句的应用

利用块语句可以将结构体中的并行语句划分成多个并行方式的子块,每一个子块都是一个独立的设计实体,具有自己的类属参数和界面端口,以及与外部环境的衔接描述。

块语句还可以实现嵌套,内层的块语句可以使用外层块语句所定义的信号,但外层块语句不能使用内层块语句定义的信号。52EDA技术第3章VHDL硬件描述语言

运算电路的输入为A和B,输出为SUM(八位和)、SUB(八位差),以及进位CO和借位BO。

【例3.4.1】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。

LIBRARYIEEE;

USEIEEE.STD

LOGIC

1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY

add_sub

IS

PORT(A,B:INSTD

LOGIC_VECTOR(7DOWNTO0);

SUM,SUB:

OUTSTD

LOGIC_VECTOR(7DOWNTO0);

CO,BO:OUTSTD

LOGIC);

END

add_sub;53EDA技术第3章VHDL硬件描述语言

【例3.4.1】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。

ARCHITECTUREexample12OF

add_sub

IS

SIGNALAA,BB,SM,SB:STD_LOGIC_VECTOR(1DOWNTO0);

BEGINAA<=‘0’&A;BB<=‘0’&B;

WITHsSELECTADDER:BLOCK

BEGINSM<=AA

+

BB;SUM<=SM(

7DOWNTO0

);CO<=SM(

8

);

ENDBLOCKADDER;--ADDER块行为描述语句--运算结果送入SUM--进位送入CO54EDA技术第3章VHDL硬件描述语言

【例3.4.1】试用块语句设计一个运算电路,包括一个八位加法器和一个八位减法器。

SUBTRACTER:

BLOCK

BEGINSB<=AA

-

BB;SUB<=SB(

7DOWNTO0

);BO<=SB(

8

);

ENDBLOCKSUBTRACTER;ENDexample12;--SUBTRACTER块行为描述语句--运算结果送入SUB--进位送入BO55EDA技术块语句的结果78页libraryieee;Useieee.std_logic_1164.all;entitych4isport(do,d1:instd_logic_vector(3downto0);s:in

std_logic;y:outstd_logic_vector(3downto0);endch4;architecturedatofch4issignaltemp1,temp2,temp3:std_logic_vector(3downto0);begin第3章VHDL硬件描述语言

56EDA技术ladel:blockbegintemp1(3)<=d0(3)ands;temp1(2)<=d0(2)ands;temp1(1)<=d0(1)ands;temp1(0)<=d0(0)ands;temp2(3)<=d1(3)and(nots);temp2(2)<=d1(2)and(nots);temp2(1)<=d1(1)and(nots);temp2(0)<=d1(0)and(nots);temp3<=temp1ortemp2;y<=temp3;endblocklabel;enddat;第3章VHDL硬件描述语言

57EDA技术第3章VHDL硬件描述语言

卫式块语句79页libraryieee;useieee.std_logic_1164.all;entitych4_isport(d:in

std_logic;

clk:in

std_logic;

q,qb:out

std_logic);endch4_1;architecturedatofch4_1isbeginlabel:block(clk='1')beginq<=guardeddafter3ns;qb<=guarded(notd)after3ns;endblocklabel;enddat;58EDA技术第3章VHDL硬件描述语言

进程(PROCESS)语句是在结构体中用来描述特定电路功能的程序模块,它提供了一种用顺序语句描述电路逻辑功能的方法。

3.4.2

进程语句

一个结构体中可以有多个并行运行的进程结构,而每个进程结构的内部由一组顺序语句组成。

进程语句结构具有并行执行和顺序处理的双重特性。

59EDA技术第3章VHDL硬件描述语言

(1)进程语句的结构

[进程标号:]PROCESS[(敏感信号参数表)][IS][进程说明部分]BEGIN顺序描述语句

ENDPROCESS[进程标号];

格式:

当敏感信号表中的某个信号发生变化时,立即启动进程语句,将进程中的顺序语句按顺序循环执行,直到敏感信号稳定不变为止。

60EDA技术第3章VHDL硬件描述语言

(2)进程语句的组成

①进程说明部分进程语句的结构由三部分组成,即进程说明部分、顺序描述语句部分和敏感信号参数表。

用于定义该进程所需要的局部数据环境。如:数据类型、常数、属性、子程序等。

注意:不能在进程内部定义信号和共享变量,信号只能在结构体说明中定义。

61EDA技术第3章VHDL硬件描述语言

(2)进程语句的组成

顺序描述语句部分

是一段顺序执行语句,用于描述该进程的行为。

信号赋值语句:在进程中将计算或处理的结果赋值给信号。●

变量赋值语句:在进程中以变量的形式存储计算的中间值。●

子程序调用语句:对已定义的过程和函数进行调用,并参与计算。62EDA技术第3章VHDL硬件描述语言

(2)进程语句的组成

顺序描述语句部分

进程启动语句:当PROCESS语句未列出任何敏感信号时,进程的启动可通过WAIT语句来实现。●

顺序描述语句:包括IF语句、CASE语句、LOOP语句和NULL语句。●

进程跳出语句:包括NEXT语句和EXIT语句。③敏感信号参数表

用于启动本进程可读入的信号名。63EDA技术进程语句结构80页libraryieee;useieee.std_logic_1164.all;entitych5isport(d0,d1,d2,d3:instd_logic_Vector(7downto0);

s1,s0:instd_logic;

q:outstd_logic_Vector(7downto0);endch5;architecturebehofch5isbeginprocess(d0,d1,d2,d2,s0,s1)variabletmp:integerrange0to4;begintmp:=0;if(s0='1')thentmp:=tmp+1;endif;if(s1='1')thentmp:=tmp+2;endif;casetmpiswhen0=>q<=d0;when1=>q<=d1;when2=>q<=d2;when3=>q<=d3;whenothers=>null;endcase;endprocess;endbeh;第3章VHDL硬件描述语言

64EDA技术

81页libraryieee;useieee.std_logic_1164.all;entitych6isport(d,clk:in

std_logic;q1,q2:outstd_logic);endch6;architecturebehofch6isbegin

processbeginWaitUntilclk='1';Q1<=d;endprocess;processbeginWaitUntilclk='0';Q2<=notd;endprocess;endbeh;第3章VHDL硬件描述语言

65EDA技术82页libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitych7isport(clk:in

Std_logic;

irq:out

Std_logic);endch7;architecturebehofch7issignalcou:std_logic_vector(3downto0);beginprocessbeginWaitUntilClk='1';cou<=cou+'1';endprocess;processbeginWaitUntilClk='1';If(cou="1111")then

Irq<='0';Else

Irq<='1';Endif;endprocess;endbeh;66EDA技术第3章VHDL硬件描述语言

【例3.4.2】用进程语句描述异步清零计数器。

异步清零方式与时钟信号clk无关,当清零端clr=0时,计数状态Q=0;当clr=1时,计数器为计数状态。

PROCESS(

clk,clr

)

BEGIN

IF

clr=‘0’THEN

Q<=X“00”;

ELSIF(

clk=‘1’AND

clk’EVENT

)THEN

Q<=Q

+

1;

ENDIF;

ENDPROCESS;67EDA技术第3章VHDL硬件描述语言

【例3.4.2】用进程语句描述异步清零计数器。

若计数器采用同步清零,则敏感表中可无clr信号,此时进程如下:

PROCESS(

clk)

BEGIN

IF(

clk=‘1’AND

clk’EVENT

)THEN

IFclr=‘0’THENQ<=X“00”;ELSE

Q<=Q

+

1;

ENDIF;ENDIF;

ENDPROCESS;68EDA技术第3章VHDL硬件描述语言

3.5VHDL语言的子程序

子程序是一个VHDL程序模块,它是利用顺序语句来定义和完成算法的。

子程序的应用包括“子程序定义”和“子程序调用”两个内容。

子程序的定义可以在程序包、结构体和进程中进行,并且定义后才能被主程序调用。

主程序和子程序之间通过端口参数列表,以位置关联的方式进行数据传送,子程序可以被多次调用完成重复性的工作。

子程序类型:过程(PROCEDURE)

函数(FUNCTION)

69EDA技术第3章VHDL硬件描述语言

过程的作用是传递信息,即通过参数进行信息的传递。这些参数可以是常量、变量和信号,传递方向可以是输入、输出和双向。

过程语句包括:过程的定义

过程的调用

过程的定义由过程首和过程体两部分组成。

1.

过程语句

(1)过程的定义

过程首:是过程的索引,用于快速检索相应过程体的内容。

过程体:由说明部分和顺序语句组成。

70EDA技术第3章VHDL硬件描述语言

过程首的定义格式:

(1)过程的定义

参数表:用于对常数、变量和信号等数据对象做出说明,并用关键字IN、OUT和INOUT定义这些参数的工作模式。

PROCEDURE

过程名称(参数表);

过程体的定义格式:

PROCEDURE

过程名称(参数表)IS[说明部分]BEGIN

顺序语句;ENDPROCEDURE

过程名称;

71EDA技术第3章VHDL硬件描述语言

(2)过程的调用

过程的调用就是执行给定名称和参数的过程。

过程调用的格式:

过程名称(形参数名称=>实参数表达式,形参数名称=>实参数表达式);

形参数名称:是对被调用的过程已做说明的参数名。

实参数表达式:是一个标识符或具体数值,是当前过程调用中形参数的接受体。

对应关系:位置关联名称关联

72EDA技术第3章VHDL硬件描述语言

(2)过程的调用

过程调用需完成的内容:

将实参数值赋给被调用过程的形参数;②

执行过程;③

将过程中的形参数值返回给对应的实参数。

过程调用有两种方式:顺序语句方式:并行语句方式:

即在进程中的过程调用。即在结构体或块中的过程调用。73EDA技术第3章VHDL硬件描述语言

【例3.5.1】试用过程语句编写实现数据求和的运算程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYaddISPORT(

A,

B,

C:INSTD_LOGIC_VECTOR(

3DOWNTO0

);

CLK,

SET:INSTD_LOGIC;

S:OUTSTD_LOGIC_VECTOR(

3DOWNTO0

));

ENDadd;

ARCHITECTUREexample15OFaddIS

PROCEDUREadd_1(

VARIABLEdata1,data2,data3:INSTD_LOGIC_VECTOR;

VARIABLE

dataout:OUTSTD_LOGIC_VECTOR)ISBEGIN

dataout:=data1+data2+data3;

ENDadd_1;

--过程体定义74EDA技术第3章VHDL硬件描述语言

【例3.5.1】试用过程语句编写实现数据求和的运算程序。

BEGIN

PROCESS(CLK)

VARIABLE

tmp:STD_LOGIC_VECTOR(

3DOWNTO0

);

BEGIN

IF

(CLK=‘1’ANDCLK’EVENT)THEN

IFSET=‘1’THEN

tmp:=“0000”;

ELSEadd_1(A,B,C,tmp);

ENDIF;

ENDIF;

S<=tmp;

ENDPROCESS;

ENDexample15;--过程调用75EDA技术第3章VHDL硬件描述语言

函数的作用是将输入的若干个参数,通过函数进行运算,并直接返回函数值。

函数语句包括函数定义语句和函数调用语句。

函数的定义与过程的定义一样,由函数首和函数体两部分组成。

2.

函数语句

(1)函数首定义

函数首是函数的索引,由函数名称、参数表和返回值的数据类型三部分组成。

函数首的定义格式:

FUNCTION

函数名称(参数表)RETURN

数据类型;

函数名:可以是普通的标识符,也可以是运算符;

参数表:是对参与函数运算的数据类型进行说明,可以是常量、变量和信号三类数据对象;

数据类型:用来定义返回值的数据类型。76EDA技术第3章VHDL硬件描述语言

(2)函数体定义

函数体由说明部分、顺序语句和返回语句组成。

函数首的定义格式:

FUNCTION

函数名(参数表)RETURN

数据类型IS [说明部分];

BEGIN

顺序语句;

RETURN[返回变量名];

ENDFUNCTION[函数名];

说明部分:用来对数据类型、常数、变量等进行局部说明。

顺序语句:用以完成规定算法或转换。

77EDA技术第3章VHDL硬件描述语言

(3)函数的调用

是用来完成某些数据的运算和转换的。与过程的调用十分类似,所不同的是,函数的调用将返回一个指定数据类型的值,函数的参数只能是输入值。

函数首的定义格式:

函数名称(形参数名称=>实参数表达式,形参数名称=>实参数表达式);78EDA技术第3章VHDL硬件描述语言

【例3.5.2】使用函数定义FUNCTION语句描述求最小数电路。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYminIS

PORT(

A,

B:INSTD_LOGIC_VECTOR(

7DOWNTO0

);

Y:

OUTSTD_LOGIC_VECTOR(

7DOWNTO0

));

ENDmin;

79EDA技术第3章VHDL硬件描述语言

【例3.5.2】使用函数定义FUNCTION语句描述求最小数电路。

ARCHITECTUREexample16OFminIS

FUNCTIONmin(

a,

b:INSTD_LOGIC_VECTOR)

RETURNSTD_LOGIC_VECTOR;

FUNCTIONmin(

a,

b:INSTD_LOGIC_VECTOR)RETURNSTD_LOGIC_VECTORIS

BEGIN

IF(

a<b)THEN

RETURNa;

ELSE

RETURNb;

ENDIF;

ENDmin;

BEGINY<=min(A,B);

ENDexample16;

--定义函数首--定义函数体80EDA技术第3章VHDL硬件描述语言

用来结束子程序的执行,无条件跳转到子程序的结束处。

子程序返回语句只能用于子程序体中,有两种格式。

3.

子程序返回语句

该语句为无条件返回,只能用于过程。

格式1:

RETURN;

该语句只能用于函数,返回时给出一个函数返回值。

格式2:

RETURN表达式

81EDA技术第3章VHDL硬件描述语言

3.6VHDL语言的库、程序包及配置

在VHDL设计实体中,除了实体说明和结构体外,还有库、程序包和配置三个各自独立的组成部分。依据VHDL语言的规则,VHDL程序所使用的文字、数据对象、数据类型都需要预先定义。

将预先定义好的数据类型、元件调用声明及一些常用子程序收集在一起,形成程序包,供VHDL设计实体共享和调用。若干个程序包则形成库。

82EDA技术

库(Library)是用于存放预先设计好的程序包和数据的集合体。

第3章VHDL硬件描述语言

3.6.1VHDL库

1.常用的库

VHDL语言中常用的五种库:

IEEE库②

STD库③

WORK库④

VITAL库⑤

用户自定义库

——VHDL语言设计中最常见的库。

——VHDL语言的标准库。

——用户的VHDL语言工作库。

——VHDL语言的时序仿真库。

——用户自定义的资源库。

83EDA技术第3章VHDL硬件描述语言

84EDA技术第3章VHDL硬件描述语言

2.资源库和设计库

VHDL语言所使用的库可以分成两类:

●资源库

●设计库

用于存放常规元件、标准模块、预定义数据类型等,如:IEEE库。

是一种符合VHDL标准的预定义库。

如:STD库定义了一些基本的数据类型、子类型和函数等;WORK库存放用户设计和定义的设计单元及程序包等。

85EDA技术第3章VHDL硬件描述语言

3.库的使用

关键字:LIBRARY

格式:LIBRARY

库名称

库说明语句:

说明:用来指明所使用的库,库名称为一系列由逗号分隔的库名。

库说明语句总是位于设计实体的最前面,通常与USE语句一起使用。

86EDA技术第3章VHDL硬件描述语言

3.库的使用

格式1:USE

库名.程序包名.项目名;

USE语句用来指明库中的程序包,有两种格式:

作用:为本设计实体开放指定库中的特定程序包内所选定的项目。

例如:LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.STD_ULOGIC;

USEIEEE.STD_LOGIC_1164.RISING_EDGE;

87EDA技术第3章VHDL硬件描述语言

3.库的使用

格式2:USE

库名.程序包名.ALL;

作用:为本设计实体开放指定库中的特定程序包内所有的内容。

例如:LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

88EDA技术在VHDL语言中,用户可以将已定义的常数、信号、函数、数据类型、元件和子程序等收集在一起形成一个程序包,以便更多的设计实体利用和共享。第3章VHDL硬件描述语言

3.6.2VHDL程序包

定义程序包的一般语句格式:

PACKAGE

程序包IS

程序包首说明

END

程序包名;

PACKAGEBODY

程序包IS

程序包体说明

END

程序包名;

程序包首程序包体89EDA技术

程序包首收集了VHDL设

温馨提示

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

评论

0/150

提交评论