可编程器件第3章硬件描述语言.ppt

上传人:牧羊曲112 文档编号:6251683 上传时间:2023-10-10 格式:PPT 页数:186 大小:1.35MB
返回 下载 相关 举报
可编程器件第3章硬件描述语言.ppt_第1页
第1页 / 共186页
可编程器件第3章硬件描述语言.ppt_第2页
第2页 / 共186页
可编程器件第3章硬件描述语言.ppt_第3页
第3页 / 共186页
可编程器件第3章硬件描述语言.ppt_第4页
第4页 / 共186页
可编程器件第3章硬件描述语言.ppt_第5页
第5页 / 共186页
点击查看更多>>
资源描述

《可编程器件第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

26、ay初始化成不同的数值从而满足实际的需要。例如:GENERIC(n:INTEGER);表示参数名n是整数类型的,66,类属参数说明实例,ENTITY ex1 ISGENERIC(wlength:integer:=8;alength:integer:=3);PORT(clk:IN STD_LOGIC;data:OUT STD_LOGIC_VECTOR(wlength-1 downto 0);add:OUT STD_LOGIC_VECTOR(alength-1 downto 0);END ex1;,67,实体说明之 PORT(端口)说明,对一个设计实体界面的说明及对设计实体与外部电路的接口通道的说

27、明,包括对每一接口的输入输出模式和数据类型的定义。格式如下:PORT(端口名:端口模式 数据类型;端口名:端口模式 数据类型);端口名是设计者为实体的每一个对外通道所取的名字端口模式用于定义端口上数据的流动方向和方式,68,端口模式,IN:IN定义的通道为单向只读模式,规定数据只能通过此端口被读入实体中。OUT:OUT定义的通道为单向输出模式,规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。,69,端口模式,INOUT:定义端口为双向(输入输出)即从端口的内部看,可以对此端口进行赋值,也可以通过此端口读入外部的数据信息从端口的外部看,信号既可以从此端口流出,也可以向

28、此端口输入信号,如RAM的数据端口,单片机的I/O口。在实际电路描述中,INOUT模式的正确使用还应该考虑其它因素。建议少用INOUT模式定义双向端口占用了更多的硬件资源有些开发环境并不支持该模式不要用该模式代替其它模式,70,端口模式,BUFFER:BUFFER的功能与INOUT类似,区别在于当需要输入数据时,只允许内部回读输出的信号,即允许反馈。如计数器的设计,可将计数器输出的计数信号回读,以作下一计数值的初值。与INOUT模式相比,BUFFER回读(输入)的信号不是由外部输入的,而是由内部产生,向外输出的信号。,71,端口模式,LINKAGE:方向未定(即任何方向均可连接使用),72,关

29、于信号方向,IN,IN,IN,OUT,BUFFER,INOUT,OUT,73,数据类型,VHDL作为一种强类型语言,任何一种数据对象(信号、变量、常数)必须严格限定其取值范围,即对其传输或存储的数据类型作明确的界定。常见的数据类型主要有STD_LOGIC(标准逻辑位)、STD_LOGIC_vector(标准逻辑位向量)、BIT(逻辑位)、BIT_VECTOR(位向量)。BIT数据类型的信号规定的取值范围是逻辑位1和0。在VHDL中,逻辑位0和1的表达必须加单引号,否则VHDL综合器将0和1解释为整数数据类型INTEGER。,74,数据类型,BIT数据类型可以参与逻辑运算或算术运算,其结果仍是位

30、的数据类型。VHDL综合器用一个二进制位表示BIT。BIT数据类型定义在VHDL标准程序包STANDARD中,而程序包STANDARD包含于VHDL标准库STD中。这是系统默认的库。STD_LOGIC(标准逻辑位)、STD_LOGIC_vector(标准逻辑位向量)数据类型的定义包含在IEEE库的包集合STD_LOGIC_1164中,因此需要用包集合的说明语句说明:USE STD_LOGIC_1164.ALL;,75,实体说明部分,实体说明部分放在端口说明部分的下面,主要作用是说明设计实体接口中的公共信息。例如,可以用来定义结构体需要用到的新的数据类型、信号以及常量等。实体说明部分有时候还会包

31、括断言语句、过程调用语句和被动进程语句等并发语句。但是,这些语句不能包含信号赋值语句。,76,“实体说明”的几点说明,以VHD为后缀名的文件名要求与实体名一致。端口定义的每一行以“;”结尾,但最后一行定义完后没有分号,分号在括号的外面。以“-”开始到本行结束为注释行,77,“实体说明”举例,触发器的实体:ENTITY DFF1 IS PORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END DFF1;-87标准,也可以写成ENDENTITY DFF1,这是93标准,78,“实体说明”举例,3-8译码器的实体:ENTITY decoder

32、 IS PORT(datain:IN STD_LOGIC_VECTOR(2 DOWNTO 0);g1,g2a,g2b:IN STD_LOGIC;y:OUT STD_LOGIC_vector(7 downto 0);END decoder;,79,“实体说明”举例,流水线加法器ENTITY add_lp is GENERIC(WIDTH:integer:=15;WIDTH1:integer:=7;WIDTH2:integer:=8;ONE:integer:=1);PORT(x,y:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0);sum:out STD_LOGIC_VE

33、CTOR(WIDTH-1 DOWNTO 0);clk:IN std_logic);END ENTITY add_lp;,80,结构体(Architecture Body),能被仿真的实体都包含有结构体一个实体和其对应的结构体构成一个完整的VHDL设计,一个实体可以有多个结构体。不同的结构体可以采用不同的描述方式结构体的命名只要符合标识符的规定就可以。但是结构体一般采用行为/寄存器/结构描述方式,因此按照见名知义的要求,其名字一般为behave/rtl/structure。,81,结构体(Architecture Body),结构体一般包括声明区(Declarations)和并发语句区两个部分组

34、成。声明区用于声明该结构体内使用的类型、常数、元件、子程序等。并发语句区用来描述结构体的行为和连接关系。并发语句的类型主要有块语句、进程语句、信号赋值、子程序调用、元件例化语句。结构体部分包含了VHDL的很多元素,掌握好它们是灵活应用VHDL的关键。,82,结构体的一般形式,ARCHITECTURE OF IS-声明区,声明结构体内所用的内部信号及数据类型-若使用元件例化,则声明所用的元件BEGIN-CONCURRENT SIGNAL ASSIGNMENTS;-PROCESS;-COMPONENT INSTANTIATIONS;END;,83,Tips,实体和结构体分别是以“END ENTIT

35、Y xxx;”和“END ARCHITECTURE xx;”语句结尾的,这是符合VHDL的IEEE STD 1076_1993版的语法要求的。若根据VHDL87版本,IEEE STD 1076_1987的语法要求,这两条结尾语句只需写成“END;”和“END xx;”。但考虑到目前绝大多数常用的EDA工具中的VHDL综合器都兼容两种VHDL版本的语法规则,且许多最新的VHDL方面的资料,仍然使用VHDL87版本语言规则。,84,结构体举例十进制计数器,ARCHITECTURE BEHAVE OF COUNTER ISSIGNAL CNT STD_LOGIC_VECTOR(3 DOWNTO 0)

36、;BEGIN PROCESS(CLK)BENGIN IF(RISING_EDGE(CLK)IF(CNT=”1001”)THEN CNT=”0000”;ELSE CNT=CNT+1;END IF;END IF;END PROCESS;END BEHAVE;,85,结构体举例二选一电路,二选一电路mux21a的实体和结构体如下面的图所示。,86,结构体举例二选一电路,ENTITY mux21a IS PORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE STRUCTURE OF mux21a IS SIGNAL d,e

37、:BIT;BEGIN d=a AND(NOT S);e=b AND s;y=d OR e;END ARCHITECTURE STRUCTURE;,87,程序包(Package),程序包定义了一组数据类型说明、常量说明、元件说明和子程序说明,以供其他多个设计引用。如同C语言中的头文件(*.H)。通过引用程序包,使得程序包中的说明对引用的实体成为可见程序包有事先定义好的,也有用户定义的。引用程序包时,使用USE语句,放在设计的开始。如 USE IEEE.STD_LOGIC_1164.ALL;,88,创建用户自己的程序包,1.程序包说明部分PACKAGE logic IS TYPE three_le

38、vel_logic IS(0,L,Z);CONSTANT unknown_value:three_level_logic:=0;FUNCTION invert(INPUT:three_level_logic)RETURN three_level_logic);END logic;,89,创建用户自己的程序包,2.程序包体部分 PACKAGE BODY logic IS-如下是函数invert的子程序体 FUNCTION invert(INPUT:three_level_logic)RETURN three_level_logic);BEGIN CASE input IS WHEN 0=RETU

39、RN 1;WHEN 1=RETURN 0;WHEN Z=RETURN Z;END CASE;END invert;END logic;,90,创建用户自己的程序包,3.使用程序包用USE语句使得unknown_value和invert对实体说明成为可见:USE;USE Logic.three_level_logic.invert;或者使用关键字ALL,使得程序包中的所有元素可见:USE Logic.ALL;,91,常见的程序包,(1)程序包standard(2)程序包textio(3)程序包std_logic_1164(4)程序包numeric_std(5)程序包numeric_bit(6)s

40、td_logic_arith(7)std_logic_unsigned,92,配置(Configuration),描述层与层之间的连接关系以及实体与结构体之间的连接关系格式如下:CONFIGURATION 配置名 OF 实体名 IS 语句说明(选配的结构体名)END 配置名,VHDL语言的描述语句,94,描述语句的种类,并发描述语句并发语句用来描述各模型算法之间的连接关系根据信号发生变化的顺序执行 顺序描述语句语句按照出现的先后顺序依次执行描述电路的行为关系,95,并发语句,实际的数字电路、数字系统中,许多操作是并发执行的;VHDL作为一种广泛使用的硬件描述语言,应该能够描述数字系统中的各种操

41、作和行为;为了描述数字系统中的这种并发操作,VHDL提供了并行语句;VHDL的结构体由一个或者多个并行语句构成;并行语句的书写顺序不代表它们的执行顺序;并行语句的执行顺序由它们的触发事件来决定。,96,并发描述语句,ARCHITECTURE 结构体名 OF 实体名 IS-说明语句BEGIN-并发语句END ARCHITECTURE 结构体名,97,并发描述语句,进程(Process)语句并发信号代入(Concurrent Signal Assignment)语句条件信号代入(Conditional Signal Assignment)语句选择信号代入(Selective Signal Assi

42、gnment)语句并发过程调用(Concurrent)语句块(Block)语句Generate语句Component语句,98,进程语句,VHDL中最重要、使用最频繁的结构体描述语句进程与进程之间是并行关系;进程内定义了一组连续执行的顺序语句;结构体的进程模型:,99,进程语句,对一个数字系统进行系统建模时,通常将数字系统描述成一个并发执行的多个进程所构成的网络模型;构成网络模型的各个进程的执行是并发的,而进程内部的各个语句则是顺序执行的;各个进程之间通过信号或共享变量进行通信。,一个结构体可以有多个进程进程之间是并发执行的进程之间通过信号进行通信,100,进程(Process),进程(Pro

43、cess)语句的格式:进程名:Process(信号1,信号2,)Begin-顺序执行语句;end process 进程名;,101,进程语句,敏感信号量表 敏感信号是指那些值发生改变后能够引起进程语句执行的信号。可以是输入信号或是信号量任意敏感信号发生改变,PROCESS就会执行一遍进程的运行依赖于敏感表或WAIT参数的变化隐含信号量表PROCESS后括号中的信号量表显式敏感信号在PROCESS中的WAIT语句一个进程中不能既有敏感表又有WAIT语句,102,进程(Process)示例,隐含敏感信号p1:process(a,b)Beginand2=a and b;end process p1;

44、,显式敏感信号p1:processBeginand2=a and b;wait on a,b;end process p1;,103,Entity test1 isport(clk,d,reset:in bit;q:out bit);end test1;,architecture test1_body of test1 isBegin process(clk,d,reset)beginif(reset=1)then q=0;elsif(clk=1)then q=d;end if;end process;end test1_body;,进程语句示例,104,进程语句示例,Entity test1

45、 isport(clk,d,reset:in bit;q:out bit);end test1;,architecture test1_body of test1 isbeginprocess(clk)begin if(reset=1)then q=0;elsif(clk=1)then q=d;end if;end process;end test1_body;,105,进程内部的语句是顺序执行的,Process(sel,a,b)Beginf=a;If sel=1 then f=b;end if;End process;,Process(sel,a,b)BeginIf sel=1 thenf=

46、b;end if;f=a;End process;,结果f总是等于a,106,并发信号代入语句,处于结构体之中但在进程语句之外格式:赋值目标=表达式;“=”称为信号带入操作符并发信号代入语句是靠事件来驱动的,因此对于并发信号代入语句来说,只有当赋值符号“=”右边的对象上有事件发生时才会执行该语句。,107,并发信号代入语句,例如ARCHITECTURE DEPICT OF MYDES ISBEGINSUM=A XOR B;CARRIER=A AND B;END,108,条件信号代入(Conditional Signal Assignment)语句,条件信号代入(Conditional Sign

47、al Assignment)语句的格式如下:目的信号量=表达式1when 条件1else表达式2when 条件2else表达式n-1 when 条件n-1 else表达式n;,109,条件信号代入,Entity test1 isport(in1,in2,in3,in4:in bit;sel1,sel2:in bit;d:out bit);end test1;architecture test1_body of test1 isbegin d=in1 when sel1=0 and sel2=0 else in2 when sel1=0 and sel2=1 else in3 when sel1

48、=1 and sel2=0 else in4;end test1_body;,110,选择信号代入(Selective Signal Assignment)语句,With 表达式 select 目标信号量=表达式1 when 条件1,表达式2 when 条件2,表达式n when 条件n;,111,选择信号代入,Entity test1 isport(in1,in2,in3,in4:in bit;sel:in integer;out1:out bit);end test1;architecture test1_body of test1 isbeginwith sel select out1=

49、in1 when 0;in2 when 1;in3 when 2;in4 when 3;end test1_body;,112,Component语句,如果已经在VHDL语言某个模块中定义了逻辑电路后,就可以在其他的模块中调用该逻辑电路,将此称之为设计元件模块化。调用工作库中不存在的元件的步骤元件的创建引用元件元件说明元件例化,113,元件的创建,创建就是完整的描述一个电路*.VHD例如:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY half_adder ISPORT(a,b:IN STD_LOGIC;sum:OUT STD_LOGIC;c:O

50、UT STD_LOGIC);END ENTITY half_adder;ARCHITECTURE depict OF half_adder ISBEGINsum=NOT(a XOR(NOT b);c=a AND b;END depict;,114,Component说明,Component语句的说明格式如下:COMPONENT GENERIC;PORT;END COMPONENT;元件说明通常放在结构体的声明区(声明SIGNAL的地方)声明的目的:为了引用元件,115,元件例化,为了把引用的元件嵌入到高一层的结构体描述中,就必须把被引用的元件端口信号与结构体中的相应端口信号正确地连接起来元件例

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号