《EDA第2章硬件描述语言VHDL.ppt》由会员分享,可在线阅读,更多相关《EDA第2章硬件描述语言VHDL.ppt(73页珍藏版)》请在三一办公上搜索。
1、第2章 硬件描述语言VHDL,用来实现硬件电路结构的描述语言称为硬件描述语言(Hardware Describe Language,HDL)。它是一种人工语言,主要用于从多种抽像层次上进行数字系统的建模。,2.1VHDL简介,VHDL的发展及特点传统设计与VHDL设计对照,VHDL的发展及特点,VHDL的英文全名是(Very High Speed Integrated Circuit,VHSIC)Hardware Description Language,VHDL是20世纪80年代中期,由美国国防部资助的VHSIC项目开发的产品。,1VHDL的发展,2VHDL的主要特点,(1)功能强大,灵活性
2、高(2)器件无关性(3)可移植性(4)自顶向下的设计方法(5)数据类型丰富(6)建模方便(7)运行库和程序包丰富,传统设计与VHDL设计对照,传统硬件设计方法有如下几个特征。(1)采用自下而上的设计方法(2)采用通用逻辑元器件(3)在系统硬件设计的后期进行调试和仿真(4)设计结果是一张电路原理图,1传统硬件设计方法,2使用VHDL的硬件设计方法,(1)支持自顶向下的设计方法,所谓自顶向下的设计方法就是从系统的总体要求出发,自顶向下分3个层次对系统硬件进行设计。第1个层次是行为描述。第2个层次是数据流描述。第3个层次为逻辑综合。,(2)采用大量的ASIC芯片(3)早期仿真,以确定系统的可行性(4
3、)设计更容易(5)只需写出系统的HDL源程序文件,在进行较复杂可编程逻辑电路设计时,通常建议采用原理图和VHDL结合的方法来设计。,2.2VHDL程序的基本结构,VHDL程序的基本单元与构成实体结构体库、程序包和配置,图2.1 VHDL程序结构示意图,VHDL程序的基本单元与构成,VHDL中的所有设计均与实体有关,实体是设计中最基本的模块。设计的最顶层是顶层实体。如果设计分层次,那么在顶级实体中将包含较低级别的实体。实体中定义了该设计所需的输入/输出信号、信号的输入/输出类型(即端口模式),同时,实体中还定义他们的数据类型。,实体,实体的格式如下:entity is port end;,图2.
4、2实体所对应的符号,每个端口必须进行如下定义:端口信号名、端口模式及端口数据类型。,图2.3端口模式示意图,所有能被仿真的实体都由一个结构体描述,结构体描述实体的行为功能,即设计的功能。,结构体,图2.4 结构体构成示意图,结构体的一般格式如下:architecture of is-结构体声明区域-声明结构体所用的内部信号及数据类型-如果使用元件例化,则在此声明所用的元件begin-以下开始结构体,用于描述设计的功能-concurrent signal assignments并行语句信号赋值-processes 进程(顺序语句描述设计)-component instantiations 元件例
5、化end;,库、程序包和配置,程序包定义了一组数据类型说明、常量说明、元件说明和子程序说明,以供其他多个设计实体引用。,1程序包,-包头说明package logic is type three_level_logic is(0,l,z);constant unknown_value:three_level_logic:=0;function invert(input:three_level_logic)return three_level_logic;end logic;-包体说明package body logic is-如下是函数invert的子程序体:function invert(i
6、nput:three_level_logic)return three_level_logic;begin case input is when 0=return 1;when 1=return 0;when z=return z;end case;end invert;end logic;,2库,库是专门存放预先编译好的程序包的地方,这样这些程序包就可以在其他设计中被调用。在VHDL中,可以存在多个不同的库,但是库与库之间是独立的,不能相互嵌套。目前VHDL中使用的库有STD库、IEEE库、Work库、ASIC的Vital库和用户定义库。,表2.1IEEE库及程序包说明,3配置,一个实体可用
7、多个结构体描述,在具体综合时选择哪一个结构体来综合,则由配置来确定。,图2.5一个设计实体的配置,2.3VHDL的语法要素,VHDL的文字规则VHDL的数据对象VHDL的数据类型运算操作符,VHDL的文字规则,标识符是描述VHDL中端口、信号、常数、变量以及函数等名称的字符串。,1标识符,VHDL87标识符书写规则如下。使用的字符:26个英文字母,数字09以及下划线。标识符必须以英文字母开始。下划线的前后必须是英文字母。VHDL中用于标识符的英文字母不区分大小写。标识符中不能有空格。标识符不能与VHDL的关键字重名。,VHDL93标识符基本部分的定义规则与VHDL87标准的相同,但除了基本部分
8、的定义外,VHDL93标准还支持扩展标识符。,2数字,(1)整数文字 整数文字都是十进制的数。(2)实数文字 实数文字也是十进制的数,但必须带有小数点。,(3)以数制基数表示的文字,用这种方式表示的数字由5个部分组成。十进制数标明数制进位的基数。数制隔离符号“#”。表达的文字(实际要表达的具体数字)。指数隔离符号“#”。用十进制表示的指数部分,如果这一部分为0,则可以略去。,3字符串,(1)字符 字符是用单引号括起来的ASCII字符,可以是数值,也可以是符号或字母(2)文字字符串 文字字符串是用双引号括起来的一串文字(3)数字字符串 数字字符串称为矢量,分别代表二进制、八进制、十六进制的数组。
9、,VHDL语言常用的数据对象为常量(Constant)、信号(Signal)、变量(Variable)。,VHDL的数据对象,1常量,常量在设计描述中保持某一规定类型的特定值不变。,2信号,信号用于声明内部信号,而非外部信号(外部信号对应为in,out,inout,buffer),它在元件之间起互连作用,可以赋值给外部信号。,3变量,变量只在给定的进程中用于声明局部值或用于子程序中。,表2.2VHDL语言数据对象定义位置和作用范围,4信号与变量的区别,说明的位置不同 赋值符号不同 赋值后的结果不同 信号在整个结构体内有效,变量只在定义的进程或子程序内有效。,表2.3信号与变量赋值语句功能比较,
10、VHDL的数据类型,VHDL本身标准(VHDL预定义)的数据类型有10种。它们都是在VHDL标准程序包Standard中定义的。,1标准的数据类型,(1)整数(2)实数(3)位(4)位矢量(5)布尔量(6)字符(7)字符串(8)时间(9)错误等级(10)自然数和正整数,2std_logic和std_logic_vector类型(IEEE预定义)3用户自定义的数据类型,(1)type语句用法 type语句的语法结构如下:type 数据类型名 is 数据类型定义 of基本数据类型;或type 数据类型名 is 数据类型定义;,(2)subtype语句用法,subtype语句的语法格式如下:subt
11、ype 子类型名is基本数据类型range约束范围;,4数据类型转换,(1)调用预定义的类型转换函数,表2.4 数据类型转换表,(2)调用算符重载函数,为了方便各种不同数据类型间的运算操作,VHDL允许用户对原有的基本操作符重新定义,赋予新的含义和功能,从而建立一种新的操作符。这种附有新的含义的操作符叫做算符重载函数。,运算操作符,1操作符的种类及其对应的操作数类型,表2.5VHDL操作符列表,表2.5 VHDL操作符列表 续表,2各种操作符的使用说明,严格遵循在基本操作符间操作数是相同数据类型的规则;严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致的规则。注意操作符之间的优先级别
12、。VHDL共有7种基本逻辑操作符,对于数组型(如std_logic_vector)数据对象的相互作用是按位进行的。,表2.6VHDL操作符优先级,关系操作符的作用是将相同数据类型的数据对象进行数值比较(=、/=)或关系排序判断(、=),并将结果以布尔类型(boolean)的形式表示出来,即TRUE或FALSE两种。并置运算符的操作数的数据类型是一维数组,可以利用并置运算符将普通操作数或数组组合起来形成各种新的数组。表2.5中所列的16种算术操作符可以分为求和操作符、求积操作符、混合操作符、移位操作符等四类操作符。,图2.6移位操作示例图,2.4VHDL结构体的描述方式,顺序描述语句并行描述语句
13、属性描述语句,数字电路的工作方式是系统各单元电路同时上电工作,单元电路内部按顺序工作。这种特点决定了VHDL语句有顺序(Sequential)描述语句和并行(Concurrent)描述语句两种。顺序描述语句。顺序描述语句为行为描述方式,包括if语句、case语句、loop语句、wait语句、null语句、assert语句。并行描述语句。并行描述语句有三种描述方式,分别是结构描述方式、数据流描述方式和行为描述方式。,结构(Structural)描述语句:所谓结构描述,是指描述该设计单元的硬件结构,即该硬件是如何构成的。数据流(Data flow)描述语句:它以类似于寄存器传输级的方式描述数据的传
14、输和变换,以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。对应的语句有简单信号赋值语句、条件信号赋值语句、选择信号赋值语句。行为(Behavioral)描述语句:行为描述只表示输入与输出间转换的行为,它不包含任何结构信息。进程语句具有顺序和并行两个特征。,图2.7进程语句的构成,进程语句的语法描述格式如下::process-此处声明局部变量,数据类型及其他局部声明(用于进程中)begin-进程开始-进程中为顺序语句 signal and variable assignments-信号与变量的赋值 if and case statements-if-then-else语句 ca
15、se-when语句 while and for loops-loop循环语句 function and procedure calls-函数,过程调用 end process;-进程结束,要深刻理解进程,就要掌握以下几点。结构体中多个进程之所以能并行运行,一个很重要的原因就是进程之间的通信是通过传递信号来实现的。虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的,因而在进程中只能设置顺序语句。进程的激活必须由敏感信号表中定义的敏感信号的变化来启动,否则必须由一个显式的wait语句来激活。一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。而异步时序逻辑必须由多个
16、进程来表达。,VHDL有如下6类基本顺序语句:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句和空操作语句。,顺序描述语句,1赋值语句,(1)信号赋值语句,信号赋值语句格式为信号赋值目标:=赋值源,(2)变量赋值,变量赋值格式为变量赋值目标:=赋值源,2流程控制语句,(1)if语句,if的门闩控制。if条件 then 顺序语句;end if;,if的选择控制。,格式二:if条件1 then顺序语句elsif 条件2 then顺序语句 else顺序语句end if;,格式一:if 条件then顺序语句else顺序语句end if;,(2)case语句,case语句的结构如下:case
17、表达式 iswhen 选择值=顺序语句;when 选择值=顺序语句;when others=顺序语句;end case;,(3)loop语句,单loop语句语法格式:标号:loop 顺序语句 end loop标号;for-loop语句语法格式:标号:for循环变量in 循环次数范围 loop 顺序语句;end loop 标号;while-loop语句的语法格式:标号:while 循环控制条件 loop 顺序语句 end loop 标号:,(4)next语句,next loop 标号 when 条件表达式;,(5)exit语句,exit loop标号 when条件表达式;,3等待语句,wait;
18、wait on信号表;wait until条件表达式;wait for 时间表达式;第一种表示永远挂起。第二种类似于process(敏感表格式)。第三种需满足下列条件。在条件表达式中的信号发生了变化。此信号改变后,且满足wait语句所设的条件。两个条件同时满足,才能解除挂起,继续执行wait后的顺序语句。第四种:等到时间到。,4子程序调用,子程序调用有两种方式,即顺序语句方式和并行语句方式。子程序包括过程(procedure)和函数(function)。函数的格式:function 函数名(参数1,参数2)return 数据类型名 is 定义变量语句 begin 顺序语句 return 返回变
19、量名;end 函数名;,过程的格式:procedure 过程名(参数1,参数2)is定义变量语句begin 顺序语句end 过程名;,5返回语句,其格式有两种:(1)return;(2)return 表达式;,6空操作语句,其语句格式如下:null;,1声明,包装:,并行语句在结构体中的使用格式如下:architecture结构体名of实体名is 说明语句;begin并行语句;end architecture结构体名;,并行描述语句,1并行信号赋值语句,(1)简单信号赋值语句信号赋值目标=表达式;(2)条件信号赋值语句赋值目标=表达式 when 赋值条件 else 表达式 when 赋值条件
20、else 表达式;,(3)选择信号赋值语句,with选择表达式select赋值目标信号=表达式when选择值,表达式when选择值,表达式when选择值,表达式when others;,2元件例化语句,元件例化是一种连接关系,它将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前设计实体中的端口相连接,从而为当前设计实体引入一个新的低层的设计单元。元件例化语句由两部分组成:前一部分是将一个现成的设计实体定义为一个元件(元件声明);第二部分是对此元件输入、输出与当前设计实体中端口或信号的连接说明(元件连接)。,其格式如下:-第一部分component 元件名 generic(类
21、属表)port(端口名表);end component;-第二部分例化名:元件名 port map(端口名=连接端口名,);,3生成语句,生成(generate)语句具有复制作用,用来产生多个相同的结构,它有forgenerate和ifgenerate两种形式。其格式如下:标号:for 变量in取值范围generate 说明部分;并行语句 end generate 标号;标号:if 条件generate 说明部分 并行语句 end generate 标号;,4子程序调用5块语句,当一个构造体所描述的电路比较复杂时,可以通过块(block)结构将构造体划分为几个模块,每个模块都可以有独立的结构,这样可以减小程序的复杂性,同时使构造体的结构清晰易懂。,采用block语句描述局部电路的书写格式如下所示:块结构名:block块内定义语句;-定义block内部使用的信号或常数的名称及类型 begin block块内的并行描述语句;end block 块结构名,属性指的是关于实体、结构体、类型、信号的一些特征。,属性描述语句,1值类属性2信号类属性3范围类属性,