可编程器件第3章硬件描述语言.ppt
《可编程器件第3章硬件描述语言.ppt》由会员分享,可在线阅读,更多相关《可编程器件第3章硬件描述语言.ppt(186页珍藏版)》请在三一办公上搜索。
1、VHDL语言,1,主要内容,VHDL的元素VHDL语言程序的结构VHDL的描述语句VHDL语言的描述方式深入掌握与应用VHDL语言,VHDL的元素,3,VHDL的元素,(1)VHDL语言的词法和标识符(2)VHDL语言的对象(3)VHDL语言的数据类型(4)VHDL语言的运算符,VHDL语言的词法和标识符,5,词法和标识符,短标识符VHDL-93接收了VHDL-87关于标识符的全部标准,VHDL-87标准中的标识符称为短标识符,VHDL-93标准中的标识符称为扩展标识符。短标识符的组成:英文字母、数字、下划线短标识符的开始:必须以英文字母开始短标识符不敏感大小写短标识符的最后一个字符不能是下划
2、线下划线不能连续出现不能采用保留字作为短标识符,6,词法和标识符,扩展标识符 扩展标识符用反斜杠来界定,例如:data_bus扩展标识符的两个反斜杠之间可以使用保留字。ENTITY扩展标识符区分大小写扩展标识符允许下划线连续使用同名的扩展标识符和短标识符是不一样的。例如:data_bus和data_bus不一样,7,词法和标识符,注释以“-”开始直到本行结束的一段文字注释不会被编译注释起到对程序说明和解释。程序应该包括充分的注释,8,词法和标识符,数字VHDL语言中数字的表示方法:十进制/二进制/十六进制/整数/实数相邻两个数字之间插入下划线、在数字之前添加若干个0对数字无影响,但任何位置插入
3、空格会改变数字。例如:123_456等价与123456 001234等价与1234 123 456不表示123456,9,词法和标识符,字符和字符串字符是用单引号括起来的ASCII码,VHDL敏感字符的大小写。例如:A与a是不同的。字符串是用双引号括起来的字符序列。字符和字符串不能混为一谈。”a”和a是不同的。,10,词法和标识符,位串位串是用双引号括起来的数字序列,并在数字序列前加上一个基数说明符。例如:B”00111111”表示二进制数,只有二进制数才能将基数说明符省略。X”3F”表示十六进制数。,VHDL语言的对象,12,VHDL语言的对象,在VHDL语言中,凡可被赋予一个值的客体就是数
4、据对象常量:规定的常数信号:对应物理设计中的硬件连线变量:局部数据的暂时缓存文件:作为参数向子函数传递对象的说明格式对象类型 标志符表:类型标识:表达式;例:CONSTANT WIDTH:INTEGER:=8;,13,常量,常量常量(Constant)是指在设计实体中不会发生改变的值常量的物理意义:通常代表硬件电路中的电源或地线。常量说明的一般格式:CONSTANT 常量名:数据类型:=表达式;例如:CONSTANT pi:REAL:=3.14;CONSTANT VCC:REAL:=3.3;常量说明的位置:程序包、实体说明、结构体的说明部分、进程语句的说明部分。不同的说明部分具有不同的作用范围
5、。常常赋予的值与类型要一致,否则出错。例如:CONSTANT VCC:REAL:=”0101”;-这是错误的,14,常量的作用范围,常量的作用范围与其定义的区域有关在程序包中说明的常量,可以由所含的任何实体、结构体所引用在实体中说明的常量,只能被该实体的结构体所引用在结构体中说明的常量,只能被该结构体内部的语句所引用在进程说明的常量,只能在本进程中进行引用,15,常量的应用,模拟ROM定义一个常量型ARRAY给每一个元素赋值,16,VHDL语言的对象,信号(Signal)信号是内部硬件连线的抽象表示,没有方向说明。信号的物理意义:它表示硬件电路中的一条硬件连线。信号说明的一般格式:SIGNAL
6、 信号名,信号名:数据类型:=表达式;当对信号进行初始赋值时,赋值符号为“:=”,但是当在程序中进行信号赋值时,采用的赋值符号为“=”。例如:SIGNAL address_bus:std_logic_vector(7 DOWNTO 0);SIGNAL reset:std_logic:=1;,17,VHDL语言的对象,信号(Signal)当对信号进行初始赋值时,赋值符号为“:=”,但是当在程序中进行信号赋值时,采用的赋值符号为“=”。例如:SIGNAL address_bus:std_logic_vector(7 DOWNTO 0);SIGNAL reset:std_logic:=1;说明信号量
7、时可以赋初值,也可以不赋初值。不赋初值时,信号默认取数据类型的最左边的值或最小值。例如address_bus,没有赋初值时,其初始值为“UUUUUUUU”,18,VHDL语言的对象,信号(Signal)信号说明的位置:程序包、实体说明、结构体说明部分信号可以作为结构体中各进程之间通信的手段信号的赋值被称为带入,它可以附加延时。例如:s1=s2 after 10ns;信号的带入是不是立即发生的,19,信号的作用范围,在程序包中说明的信号,可以由所含的任何实体、结构体所引用在实体中说明的信号,只能在本设计的实体中使用在结构体中说明的信号,只能被该结构体内部的语句所引用,20,信号的应用,不同设计单
8、元之间的通信手段层次化设计中层次联系的媒介解决设计难题的重要帮手!,21,VHDL语言的对象,变量(Variable)用于对暂时的数据进行局部的存储,是一个局部变量。变量的物理意义:主要用于局部数据的暂时存储,是一种载体。变量说明的一般格式:VARIABLE 变量名:数据类型 约束条件:=表达式 例如:VARIABLE cnt:integer:=0;VARIABLE cnt:integer RANGE 1 TO 100:=1;,22,VHDL语言的对象,变量(Variable)变量的说明位置:进程语句、函数语句、子程序语句变量不能用于硬件连线和存储元件在系统综合时,变量用于计算,作为索引载体和
9、数据的暂存进程中的变量的作用范围只在进程内,若要将变量作用于进程外,则必须将该变量赋给一个相同类型的信号。变量的赋值不能附加延时。,23,信号和变量的区别,信号赋值是有延时的,而变量的赋值没有延时信号除当前值外,还有历史信息等其他信息;变量只有当前信息进程只对信号敏感,不对变量敏感信号可以是多个进程的全局信号,变量只能在一个进程范围内。信号是硬件连线的抽象描述,变量无实际的对应关系,通常用于计算变量的值可以传给信号,但信号不能传给变量信号的代入符号(=)和变量的赋值符号(:=)不同。,24,信号和变量的区别,两者的操作过程不同:SIGNAL A,B,C,D:STD_LOGIC;PROCESS(
10、A,B,C,D)BEGIN D=A;X=B+D;D=C;Y=B+D;END PROCESS结果:X=B+C;Y=B+C;,PROCESS(A,B,C)VARIABLE:D:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN D:=A;X=B+D;D:=C;Y=B+D;END PROCESS 结果:X=B+A;Y=B+C;,25,VHDL语言的对象,文件文件是一种传输大量数据的载体文件说明的格式如下所示:FILE 文件名,文件名:文件类型 is 方向 路径;FILE用来声明一个文件;文件类型用来指明文件是什么形式的文件;方向是一个可选项,它用来表明文件是输入文件还是输出文件,分
11、别用保留字“IN”和“OUT”来表示;路径表达式的作用是指明文件的实际存储位置。文件类型通常需要事先定义例:P59,VHDL语言的数据类型,27,VHDL语言的数据类型,VHDL语言要求为各种常量、变量、信号指定明确的数据类型一个对象只能具有一种数据类型;对某对象进行操作的类型必须与该对象的数据类型相匹配;具有不同数据类型的对象之间不能直接进行赋值操作。,28,VHDL语言的数据类型,标准定义的数据类型,29,VHDL语言的数据类型,常用的标准数据类型BIT/BIT_VECTOR布尔量:是一个二值枚举类型,它和位类型不同,没有数值的含义,不能进行算术运算,只能进行关系运算。整型范围与补码表示不
12、同实现时用二进制来表示,但不能看作位矢量,即不能对整型进行逻辑运算时间:物理类型的一种;一个完整的时间数据应该包括数值和单位两个部分;预定义的时间类型给出了7个时间单位:ps、ns、us、ms、sec、min、hr。时间类型常常用于仿真,而不用于逻辑综合,30,VHDL语言的数据类型,用户定义的数据类型用户定义数据类型的书写格式为:TYPE 数据类型名,数据类型名,数据类型定义;用户可以定义的数据类型有:枚举类型(Enumeraterd)整数类型(Integer)实数(Real)、浮点(Floating)类型数组(Array)类型存取(Access)类型文件(Files)类型记录(Record
13、)类型时间(Time)类型,31,用户定义的数据类型举例,Type 数据类型名 is(元素,元素,);Type color is(blue,green,yellow,red);(2)Type 数据类型名 is 数据类型定义 范围;Type signal_level is range-10.00 to+10.00;(3)Type 数据类型名 is array 范围 of 原数据类型;Type word is array(31 downto 0)of BIT;Type 数据类型名称 is Record 元素名称:数据类型名称;元素名称:数据类型名称;End Record;,32,用户定义的数据类型
14、,可枚举类型 TYPE 枚举数据类型名 IS(枚举元素,枚举元素,);对于有限状态的编码用二进制表示时不直观,此时应该采用枚举类型。例如:表示一周之内每天的状态,这时可以定义一个名字为week的可枚举类型,如下所示:TYPE week IS(monday,tuesday,wednesday,thursday,friday,saturday,sunday);,33,用户定义的数据类型,可枚举类型可枚举数据类型存在着这样的顺序关系:最左边的值低于所有其它的值,最右边的值大于所有其它的值,每一个值均大于其左边数据值而低于其右边数据值。例如:SIGNALtoday:week;Result=friday
15、 ELSE 0;可枚举类型的应用将微处理器的全部指令表示成一个可枚举类型对有限状态机的全部状态描述成一个可枚举类型,34,用户定义的数据类型,数组类型TYPE 数组类型名 IS ARRAY 约束范围 OF 数组元素类型;示例:P64P65数组的赋值对整个数组进行一次赋值按照下标对每一个数组元素进行赋值数组的引用引用整个数组引用数组元素,35,用户定义的数据类型,子类型:基本类型的子集 SUBTYPE 子类型名 IS 基本数据类型名 范围限制;基本类型与子类型子类型的范围要小于或等于基本类型的范围子类型和基本类型还允许在两种类型之间进行赋值,子类型总可以对基本类型赋值;基本类型向子类型赋值,要看
16、基本类型对象的值是否在子类型范围之内,如果在范围之内,则可以进行赋值,否则不可以。TYPE定义的类型是一种全新的类型,36,VHDL语言的数据类型,常用的数据类型 VHDL语言中经常使用的数据类型是可枚举类型STD_ULOGIC及其子类型STD_LOGIC。在IEEE 1164标准的“STD_LOGIC_1164”程序包中,可枚举类型STD_ULOGIC的定义格式如下:TYPE std_ulogic IS(U,-初始态 X,-不定状态 0,-低电平 1,-高电平 Z,-高阻 W,-弱不定态 L,-弱低电平 H,-弱高电平-);-可忽略值,37,VHDL语言的数据类型,数据类型STD_LOGIC
17、是可枚举类型STD_ULOGIC的子类型,它的值与STD_ULOGIC的值相同,但它具有一个决断函数,称为resolved。在IEEE 1164标准的“STD_LOGIC_1164”程序包中,数据类型STD_LOGIC的类型定义如下:SUBTYPE std_logic IS resolved std_ulogic;此外,经常使用的矢量类型bit_vector、std_ulogic_vector、std_logic_vector,它们在IEEE 1076和IEEE 1164标准的程序包中定义。,38,VHDL语言的数据类型,数据类型的限定 有时候根据上下文能判断出某一数据的类型,例如:signa
18、l a:std_logic_vector(7 downto 0);a yy=”10111111”;,39,数据类型转换,为了不同数据类型之间的运算,必须将它们转换成同一的数据类型。VHDL不同的程序包提供了转换函数。,40,数据类型转换举例,dataout=conv_std_logic_vector(conv_integer(datain)*fullout)/ff),8);,VHDL语言的运算符,42,VHDL语言的运算符,VHDL语言提供了四种基本运算操作逻辑运算(Logic)关系运算(Relational)算术运算(Arithmetic)连接运算(Concatenation)。,43,逻辑
19、运算(Logic),not(取反)、and(与)、or(或)、nand(与非)、nor(或非)、xor(异或)、xnor(异或非)一般情况下对于只有and、or、xor的情况下可以不加括号,其他情况下应该加括号,44,关系运算(Relational),=(等于)、=(不等于)、(大于)和=(大于等于)操作结果为BOOLEAN型:TRUE或FALSE特别当心“=”(小于等于)和“=”(信号赋值),45,算术运算(Arithmetic),*(指数)、abs(绝对值)、*(乘)、(除)、mod(求模)、rem(取余)、+(正号)、-(负号)、+(加)、-(减)、SLL(逻辑左移)、SRL(逻辑右移)
20、、SLA(算术左移)、SRA(算术右移)、ROL(逻辑循环左移)、ROR(逻辑循环右移)一般只有+(加)、-(减)、*(乘)能被综合为对应的逻辑电路,其他运算很难不同的运算,其操作数的类型有不同的要求,具体请参考相关资料移位操作符为二元运算符,左操作数必须为BIT或BOOLEAN型的一维数组,右操作数为整数,46,连接运算(Concatenation),并置运算符“,47,操作运算符,运算符的优先级,48,VHDL语言的词法,注释注释在VHDL语言中是以两短横线“-”开始直到本行程序末尾的一段文字数字可以表示成十进制,也可以表示成二进制、八进制或十六进制;数字既可以是整数,也可以是实数 字符和
21、字符串位串就是用双引号括起来的数字序列 B”10111101”O”275”X”BD”,VHDL语言程序的结构,50,结构组成,一个完整的VHDL语言程序通常被称为实体。,51,结构组成,52,VHDL语言的基本设计单元,53,组成框架,从数字系统的角度理解,54,一个设计中通常包括的几个部分,(1)库(Library)(2)程序包(Package)(3)实体说明(Entity Declaration)(4)结构体(Architecture Body)(5)配置(Configuration),55,库(Library),库(Library):用来存放已经编译过的实体说明、结构体、程序包和配置。库
22、中的各元素可以用做其他设计的资源若要引用库中已编译好的单元,需在VHDL设计的程序开始说明引用的库。格式如下:LIBRARY,56,库(Library),说明引用库后,还要说明要使用库中的哪一个设计单元,用USE语句。USE.ALL程序包名就是实际设计要使用的库中的设计单元。ALL表示使用程序包中的所有项目。,57,库(Library),专门存放预先编译好的程序包的地方库对应着一个目录,在这个目录中有许多预编译好的程序包用户自建的库即为设计文件所在的目录,默认为当前的工作库:WORK库。库名与目录名的对应关系可在编译软件中指定VHDL中的两个符合IEEE的标准库“STD”和“ieee”,58,
23、标准库中的程序包,59,关于库的说明,STD库是默认的标准库,即默认是可见的,因此可以省去库的声明IEEE库虽得到了IEEE的认可,却常常被认为是用户的库,因此使用时需要声明 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;,60,几种常见的库,STD库IEEE库WORK库ASIC库用户自定义的库,61,关于库的说明,Altera在Quartus II软件系统中还提供了LPM库:MegafunctionsPrimitivesothers,62,关于库的说明,LPM库:参数化的模块库使用不同的端口指定不同的参数Library lpm;Use,63,LPM库举例,
24、LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE;ENTITY tst_mux ISPORT(a:in std_logic_2d(3 downto 0,15 downto 0);sel:in std_logic_vector(1 downto 0);y:out std_logic_vector(15 downto 0);END tst_mux;ARCHITECTURE behavior OF tst_mux ISBEGINu1:lpm_mux GENERIC MAP(lpm_width=16,lpm_size=4,lpm_widt
25、hs=2)PORT MAP(data=a,sel=sel,result=y);END behavior;,64,实体说明(Entity Declaration),描述一个设计的外貌,即定义对外的输入输出接口以及一些参数定义格式如下:ENTITY 实体名 IS GENERIC(类属表);PORT(端口表);END ENTITY 实体名;,65,实体说明之 类属参数说明,为设计实体指定参数,如用来定义端口宽度、器件延时参数等格式如下:GENERIC(CONSTANT参数名:数据类型:=静态表达式,);例如:GENERIC(delay:time);表示参数名delay是时间类型的,在结构体中将del
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 器件 硬件 描述 语言
链接地址:https://www.31ppt.com/p-6251683.html