可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt

上传人:文库蛋蛋多 文档编号:2431206 上传时间:2023-02-19 格式:PPT 页数:302 大小:1.41MB
返回 下载 相关 举报
可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt_第1页
第1页 / 共302页
可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt_第2页
第2页 / 共302页
可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt_第3页
第3页 / 共302页
可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt_第4页
第4页 / 共302页
可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt_第5页
第5页 / 共302页
点击查看更多>>
资源描述

《可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt》由会员分享,可在线阅读,更多相关《可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt(302页珍藏版)》请在三一办公上搜索。

1、第三章 VHDL语言与应用设计,3.1 VHDL硬件描述语言简介 3.2 VHDL的结构与语言要素3.3 VHDL的基本语句3.4 VHDL应用设计实例,3.1 VHDL硬件描述语言简介,VHDL(VHSIC Hardware Description Language)是一种标准的硬件描述语言,它是在20世纪7080年代中,由美国国防部资助的VHSIC(Very High Speed Integrated Circuit)项目开发的产品。在这个语言首次开发出来时,其目标仅是使电路文本化的一种标准,为了使人们采用文本方式描述的设计,能够被其他人所理解。,1987年,VHDL被正式确定为IEEE

2、1076标准。VHDL可使各种复杂度(系统级、电路板级、芯片级、门级)的电路网络在同一抽象程度上被描述。1993年,IEEE 1076标准被升级、更新,新的VHDL标准为IEEE 1164。1996年,IEEE 1076.3成为VHDL综合标准。,(1).VHDL的优点,VHDL已成为一个数字电路和系统的描述、建模、综合的工业标准。在电子产业界,无论ASIC设计人员,还是系统级设计人员,都需要学习VHDL,来提高工作效率。由于VHDL所具有的通用性,它成为可支持不同层次设计者需求的标准语言。VHDL有如下所述的一些优点。,1)功能强大,灵活性强 VHDL具有功能强大的语言结构,可用简洁明确的代

3、码描述来进行复杂控制逻辑的设计。它还具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。VHDL是一种设计、模拟、综合的标准硬件描述语言。,2)不依赖于器件设计 VHDL允许设计者生成一个设计,而并不需要首先选择一个用来实现设计的器件。对于同一个设计描述,可以采用多种不同的器件结构来实现其功能。若需对设计进行资源利用和性能方面的优化,也并不是要求设计者非常熟悉器件的结构才行。,3)可移植性因为VHDL是一个标准语言,故VHDL的设计描述可以被不同的工具所支持,可以从一个模拟工具移植到另一个模拟工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台去执行。,4)性能

4、评估能力 非依赖器件的设计(Device Independent Design)和可移植能力允许设计者采用不同的器件结构和不同的综合工具来评估设计。设计者可以进行一个完整的设计描述,并且对其进行综合,生成选定的器件结构的逻辑功能,然后评估结果,选用最适合你设计需求的器件。为了衡量综合的质量,可用不同的综合工具所得到的综合结果来进行分析、评估。,(2).VHDL的不足之处,VHDL的不足之处是:(1)电路采用高级的简明结构VHDL描述,意味着放弃了对电路门级实现定义的控制;(2)由综合工具生成的逻辑实现效果有时不优化;(3)采用工具的不同导致综合质量不一样。,VHDL设计数字系统,可划分为6个步

5、骤:(1)设计要求的定义;(2)用VHDL进行设计描述(系统描述与代码设计);(3)原代码模拟;(4)设计综合、设计优化和设计的布局布线;(5)布局、布线后的设计模块模拟;(6)设计实现的工作(如芯片的物理版图设计、可编程门阵列器件的编程等)。,(3).VHDL的设计步骤,(4).VHDL程序的结构,库说明(LIBRARY),程序包使用说明(USE),实体说明(ENTITY),结构体(ARCHITECTURE),配置(CONFIGURATION),在VHDL中,基本单元是设计实体。设计实体可以是整个系统,如像CPU那样复杂的系统,也可以是一个芯片、逻辑器件,或者是一个最简单的门电路。在VHDL

6、中,设计实体可以代表任何一个模块,它可以是某个层次中的一个元件,也可以是设计中的顶层模块。,设计实体由实体说明和构造体(结构体)所组成。实体说明用来描述电路的外部特征(接口说明)。构造体用来描述电路的内部逻辑。,图 设计实体的组成,3.2 VHDL的结构与语言要素,VHDL语言是现代数字系统设计的基本硬件描述语言。VHDL+EDA工具+FPGA器件,构成了典型的数字系统现场集成设计方式,正推动着数字系统设计技术的进步。,VHDL硬件描述语言语法的基本要素是:数据对象、数据类型、运算符和标识符。,3.2.1 VHDL基本要素,3.2.1.1 数据对象(data object),定义:可以赋予一个

7、值的对象 VHDL语言的数据对象有:信号、变量、常量,信号,是描述硬件系统的基本数据对象,类似于电路内部的连线和节点。信号说明全局量,用于描述中的结构(构造)体(Architecture)、实体(Entity)和程序包(Package)。,信号定义:SIGNAL信号名:数据类型:=初始值信号定义示例:SIGNAL sl:std_logic:=0定义了一个标准的单值信号sl,初始值为低电平。SIGNAL s2:std_logic_vector(15 DOWNTO 0)定义了一个标准的位矢量信号s2,共有16个信号元素。,信号定义了数据类型后,就可对其赋值。信号的赋值语句格式为:目标信号名=表达式

8、;例:a=y;a=1;s1=s2 after 10ns;表示s2经10ns延迟后,其值才赋值到s1中。,变量,是指在设计实体中值会发生变化的量,程序运算中的中间量。用于对暂时数据进行存储,是局部量。其主要作用是用在进程中作为临时的数据存储单元。,变量定义的语句格式为:VARIABLE 变量名:数据类型:=初始值例:VARIABLE a:integer range 0 TO 15;定义a的取值范围是从0到15的整型变量 VARIABLE b,c:integer:=2;定义b,c为初始值2的整型变量 VARIABLE d:std_logic;定义d为标准逻辑位类型的变量,变量赋值格式为:目标变量名

9、:=表达式;其中,变量赋值符号是“:=”;“表达式”必须是一个与“目标变量名”具有相同数据类型的数值。表达式可以是一个运算表达式,也可是一个数值。目标变量可以是单值变量,也可是一个变量的集合,如位矢量类型的变量。,例:VARIABLE x,y:real;VARIABLE a,b:std_logic_vector(7 DOWNTO 0);x:=100.0;实数赋值y:=1.5+x;运算表达式赋值a:=“10111011”;位矢量赋值;a(0 TO 5):=b(2 TO 7);段赋值,常量,指在VHDL程序中值一经定义,就不再发生变化的量。常量的物理意义在于用来代表硬件电路的电源或地线。常量在构造

10、体(Architecture)、实体(Entity)、程序包(Package)、进程语句(Process)、函数(Function)和过程(Procedure)中均可使用。,常量在使用之前必须进行说明,其说明语句为:CONSTANT 常量名,常量名:数据:=表达式;常量说明示例:CONSTANT Vcc:real:=5.0;CONSTANT GND:real:=0.0;CONSTANT number:integer:=8;CONSTANT delay_time:real:=10ns;,信号和变量的区别,变量赋值是直接生效的,没有延迟;而信号赋值有延时。变量赋值符为“:=”,信号代入符为“=”。

11、进程对变量不敏感而对信号敏感。即在变量的赋值语句中,该语句一旦执行,其值立即将赋予变量;而信号的代入,其语句执行后不会立即使信号发生代入,在下条语句执行时,仍使用原来的信号值,如进程语句中的敏感表的信号代入就是如此。,3.2.1.2.数据类型,VHDL语言是强类型语言,对各操作数的数据类型有严格要求。它的数据类型一般可分为标量类型和组合类型,在实际使用中,也可分成预定义类型和用户定义类型。,(1)预定义类型,1)标准数据类型 整数;不同进制整数常量示例:2:十进制整数10E4:十进制整数12_345_678(=12345678)16#D2#:十六进制整数整数文字均是十进制的数。,以数制基数表示

12、对文字,格式为基数#基于该基的整数.基于该基的整数#E 指数其中,第1部分是用十进制数标明数制进位的基数;第2部分是数制隔离符号“#”;第3部分是表达的文字;第4部分是指数隔离符号“#”;第5部分是用字符“E”加十进制表示的指数部分。,例:10#254#-十进制表示,等于2542#1111_1110#-二进制表示,等于25416#FE#-十六进制表示,等于2548#367#-八进制表示,等于254,实数(浮点数,取值范围-1.0E+38+1.0E38);实数文字也是十进制的数,但需带小数点,如188.993,1.0 位数据(bit;0,1),取值只能为 1,0;CONSTANT c:bit:=

13、1;值为1的位类型常量cVARIABLE q:bit:=0;值为0的位类类型变量qSIGNAL a,b:bit;两个位类型常量a,b,位矢量;是基于bit数据类型的数组,如“10110101”使用位矢量需要注明位宽,即数组中元素的个数和排列,例如:SIGNAL a:bit_vector(7 DOWNTO 0)信号a定义为一个具有8位位宽的矢量,布尔量(“假”,“真”);false,true,字符(ASCII字符);通常用单引号括起来,如A;字符区分大小写,如B;不同于b;VHDL中,标识符的大小写是不区分的,但字符的大小写是有区别的。,时间;完整的时间类型包括整数和物理量单位,且整数和单位之间

14、至少留一个空格,如:55 ms,20 ns。错误等级;用以表征系统工作状态,一般有四种:note(注意),warning(警告),error(出错),failure(失败),自然数(大于等于0的整数);(10)字符串(字符矢量)。即字符串数组,必须用双撇号标明,如VARIABLE string_var:string(1 TO 7)string_var:“a b c d”,VHDL有2种字符串:文字字符串和数位字符串。(1)文字字符串是用双硬撇号引起来的一串文字,如:“ERROR”,“X”,“OTH S AND”,(2)数位字符串也称位矢量,是用字符形式表示的多位数码,表示二进制、八进制或十六进

15、制的数组。数位字符串的表示首先要有计数基数,然后将该基数表示的值放在双引号中,基数符以B,O,X表示,并放在字符串的前面。B:二进制基数符号,表示二进制数位0或1,在字符串的每一位表示一个比特。,O:八进制基数符号(07),在字符串的每一个数表示八进制数,即代表一个3位的二进制数。X:十六进制基数符号(0F),在字符串的每一个数表示十六进制数,即代表一个4位的二进制数。例:B“111011110”-二进制数数组,位矢量数组长度9O“15”-八进制数数组,位矢量数组长度6X“AD0”-十六进制数数组,位矢量数组长度12,用户自定义数据类型用类型定义语句TYPE实现:TYPE 数据类型名 数据类型

16、名 数据类型定义 枚举类型;整数类型;实数类型;数组类型;存取类型;文件类型;记录类型;时间类型。,(2)用户定义的数据类型,枚举类型是一类的数据类型,用文字符号来表示一组实际的二进制数。例:TYPE state1 IS(st0,st1,st2,st3)用以表达4个状态的位矢量长度可以为2,编码默认值为:st0=”00“,st1=”01“,st2=”10“,st3=”11“一般将第一个枚举量的编码为0或0000等,以后的编码值依次加1.,数组类型将一组具有相同类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组定义格式:TYPE 数组类型名 IS ARRAY 约束范围 OF 数据类型实

17、例:TYPE stb IS ARRARY(7 DOWNTO 0)OF std_logic数组名是stb,各元素分别为stb(7),stb(0),若一个对象可能取值范围是某个类型说明定义范围的子集,则需用到子类型。SUBTYPE 子类型名 IS 数据类型名范围 例:SUBTYPE digit is INTEGER RANGE 0 TO 9(子类型digit为整数的09范围)子类型digits是把integer约束到只含10个值的数据类型。,(3)用户定义子类型,1 函数转换法数据类型的变换函数通常由“STD_LOGIC_1164”、“STD_LOGIC_ARITH”、“STD_LOGIC_UNS

18、IGNED”的程序包等提供。,(4)数据类型转换,表 典型的类型变换函数,以下语句表示bit_vector和std_logic_vector的赋值语句:a=XA8 十六进制值可赋予位矢量b=TO_STDLOGICVECTOR(XAF7)b=TO_STDLOGICVECTOR(O5177)八进制变换b=TO_STDLOGICVECTOR(B1010_1111_0111),2 类型标记转换法直接利用类型名进行数据类型的转换,与高级语言的强制类型转换类似。其语句格式为:数据类型标志(表达式):例:VARIABLE a:INTEGER;VARIBALE b:REAL;a:=INTEGER(b);b:=

19、REAL(a);,3.2.1.3 VHDL操作符,VHDL的各种表达式由操作数和操作符组成。其中操作数是各种运算的对象,而操作符则规定运算的方式。VHDL操作符包括逻辑操作符,关系操作符,算术操作符和重载运算符。,表 VHDL中的运算符的优先级,操作符的使用说明,遵循在操作符之间的操作数是相同数据类型的原则。当一个表达式中有两个以上的运算符时,可使用括号将这些运算分组。若一串逻辑运算中的算符相同,且是AND,OR,XOR这三个算符中的一种,则不需使用括号;其他情况则需使用括号。,例:逻辑运算的VHDL描述SIGNAL a,b,c:std_logic_vector(3 DOWNTO 0);SIG

20、NAL d,e,f,g:std_logic_vector(1 DOWNTO 0);SIGNAL h,i,j,k:std_logic;SIGNAL s,m,n,o,p:bollean;,a=b AND c;d=e OR f OR g;-两个操作符OR相同,不需括号s=(m XOR n)AND(o XOR p);-操作符不同,需加括号h=i AND j AND k;-操作符相同,不需加括号,算符操作符号中的并置运算符&的操作数的数据类型是一维数组,可以利用其将普通操作数或数组组合起来形成新的数组。“VH”&“DL”的结果为“VHDL”,例如,并置运算符的使用:tmp_b=b AND(en 第二个语

21、句表示4位位矢量a和4位位矢量b再次连接(并置),构成8位的位矢量y输出。图所示为并置运算符操作的电路示意。,图 并置运算符操作,重载运算符(overloaded operators),是基本操作符作重新定义的函数型操作符。很多重载运算符是由IEEE 1164和IEEE 1076.3标准所定义的。例如,IEEE 1076标准定义了类型为signed和integer以及unsigned和natural重载运算符的函数。,运算符的重载函数在IEEE 1076.3标准的numeric_std集合包中被定义。使用时,此集合包必须用USE从句,使之对设计实体可见。LIBRARY ieee;USE iee

22、e.std_logic_1164.all;USE work.numeric_std.all;ENTITY compare IS PORT(a:IN UNSIGNED(3 DOWNTO 0);x:OUT STD_LOGIC;END add_vec;ARCHITECTURE compare OF compare IS BEGIN x=1 WHEN a=123 ELSE 1;END;,标识符的基本作用就是给VHDL中的语法单位起一个独特的名字,以区别于其它的语法单位。标识符可以是常数、变量、信号、端口、子程序或参数的名字。在VHDL 87中有关标识符的语法规范被VHDL 93全部接受并加以扩展。下面

23、分别介绍扩展前后的标识符命名规则。为了对二者加以区别,前者称为短标识符,后者则称为扩展标识符。,3.2.1.4标识符,1)短标识符 VHDL 87中的短标识符遵循以下命名规则。有效字符包括:英文字母(az,AZ)、数字(09)和下划线(_);必须以英文字母打头;下划线(_)的前后都必须有英文字母或者数字;不区分大小写。在VHDL设计中,应该注意在定义短标识符时,避开使用VHDL中的保留字。这些保留字如下:,2)扩展标识符 VHDL 93中对标识符进行了扩展,扩展后的标识符遵循以下语法规则。扩展标识符用反斜杠来分隔。如:adder,begin_add 扩展标识符允许包含图形符号及空格等。如:co

24、unter&adder,entity%end 扩展标识符的两个反斜杠之间可以用保留字。如:entity,architecture,扩展标识符的两个反斜杠之间可以用数字打头。如:1adder,44counter扩展标识符中允许多个下划线相连。如:addercounter同名的扩展标识符和短标识符不表示同一名称。如:adder和adder不相同。扩展标识符中如果含有一个反斜杠,可以两个反斜杠来代替。如:addercounter表示的扩展标识符名称为addercounter。扩展标识符要区分大小写:GATE和gate不同扩展标识符规则使得VHDL中的标识符的定义更加自由。,3.2.2 VHDL程序的

25、结构,采用VHDL进行数字系统设计,需要根据VHDL的基本语法规则,对所要说明的功能目标进行描述。不管所描述的是一个百万门的数字系统,还是描述一个基本门电路,其基本的结构都是实体。,示例:2选1选择器设计,图1是一个2选1选择器框图,a,b为输入端,s为控制端,y为输出端,其逻辑功能为:,LIBRARY IEEE;-库说明部分USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 IS-实体说明部分PORT(a,b:IN STD_LOGIC;s:IN STD_LOGIC;y:OUT STD_LOGIC);END ENTITY mux21;ARCHITECTURE on

26、e OF mux21 IS-结构体部分 BEGINy=aWHEN s=0ELSE bWHEN s=1;END ARCHITECTURE one;,VHDL程序的基本结构包括:库说明LIBRARY程序包使用说明USE实体说明ENTITY结构体ARCHITECTURE配置CONFIGURATION其中,实体和结构体是VHDL程序的基本组成部分。,LIBARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 IS PORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC);END ENTITY DFF1;ARC

27、HITECTURE bhv OF DFF1 ISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF CLKEVENT AND CLK=1 THENQ1=D;END IF;Q=Q1;END PROCESS;END ARCHITECTURE bhv;,例:D触发器,ENTITY 名称 IS接口信号说明END 名称;ARCHITECTURE 构造名OF 实体名 IS功能描述END 构造名;,1.实体(Entity)实体主要由实体说明和构造体组成。实体说明描述电路的外部特征;结构体描述的是电路内部的逻辑。(1)实体说明主要包括:类属参数说明;端口说明。,实体说明语句

28、格式为:ENTITY 实体名 ISGENERIC(类属表)PROT(端口表)END 实体名,LIBARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 IS PORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUT STD_LOGIC);END ENTITY DFF1;,类属说明语句GENERIC类属参量是一种端口界面常数,以一种说明的形式放在实体或块结构体前的说明部分。类属为设计实体和其外部环境的通信的静态信息提供通道,特别用来规定端口的大小、实体中子元件的数目、实体的定时属性等。,类属说明的一般格式为:GENERIC(常数

29、名:数据类型:=设定值;常数名:数据类型:=设定值);,例:对于译码器电路,其特点是有n个输入,就有2n个输出。用类属统一描述为:ENTITY decoder ISGENERIC(n:positive);PROT(se1:IN bit_vector(1 TO n);dout:OUT bit_vector(1 TO 2*n);END decoder,端口说明语句PROT端口为设计实体和外部环境的动态通信提供通道,实体端口说明语句格式为:PORT(端口名:端口模式数据类型;端口名:端口模式数据类型);,端口名:为实体的对外通道所取的名字端口模式:定义了4种常用模式,输入IN:用于时钟、控制和单向数

30、据的输入;输出OUT:主要用于计数输出;双向BUFFER:信号输出到实体外部,同时在内部反馈使用 缓冲INOUT:信号是双向的,可进入/离开实体。,端口定义,INPUTPORT,OUTPUTPORT,数据类型:VHDL预定义的数据类型有,整数数据类型布尔数据类型boolean标准逻辑位数据类型std_logic位数据类型bit(逻辑位1和0),结构体用以描述实体的内部结构和实体端口之间的逻辑关系。具体实现一个实体,每个实体有多个结构体。对有多个结构体的实体,必须用CONFIGURATION配置语句说明,结构体的语句格式为ARCHITECTURE 结构体名 OF 实体名 IS说明语句 BEGIN

31、并行处理语句END ARCHITECTURE结构体名,说明语句:对结构体的功能描述语句中用到的信号SIGNAL,数据类型TYPE,常数CONSTANT,元件COMPONENT,函数FUNCTION和过程PROCEDURE等加以说明的语句。并行处理语句:描述结构体的行为和结构,例:设a,b是或非门的输入端口,c是输出端口,y 是结构体内部信号,VHDL描述的二输入或非门的结构体为:ARCHITECHTURE nor1 OF nor_2 ISSIGNAL y:std_logicBEGINy=a OR b;c=NOT y;END nor1;,图 设计实体与其实体说明、构造体的关系,3 配置 配置语句

32、是VHDL设计实体中的一个基本单元,综合和仿真中可用配置语句为实体配置一个结构体。设计者可以利用配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某个实体时,可利用配置来选择不同的构造体进行性能对比试验,以得到性能最佳的实体。,CONFIGURATION 配置名 OF 实体名 IS 语句说明 END 配置名最简单的配置格式:CONFIGURATION 配置名 OF 实体名 IS FOR 选配构造体名 END FOR END 配置名,4.库、程序包 1)库 VHDL的库是用来放置和存储可编译设计单元的仓库。为了方便使用VHDL进行编程,IEEE将预定义的数据类型、元件调用声明及一些常用

33、子程序收集在一起,形成程序包,供设计程序时共享和调用。若干程序包形成库,库可以使设计者共享已经编译的设计成果和数据。,VHDL程序利用库中的单元时,需要在每个实体开始说明引用的库,然后利用USE子句来指明要使用库中的哪一个设计单元,即每个实体开始均要有打开库或 程序包的语句。常用的库是IEEE库。VHDL程序需要使用库中的单元时,需要在每个实体开始时说明引用的库,然后用USE子句来说明要使用库中哪一个设计单元。,库说明语句和USE子句的语句结构为:LIBRARY,库名;USE.ALLUSE.;关键词LIBRARY指明所使用的库名,USE指明库中程序包。,例:LIBRARY ieee;USE i

34、eee.std_logic_1164.ALL;USE ieee.std_logic_1164.rising_edge;表示打开ieee库,允许设计程序中被描述器件的输入、输出端口和数据类型使用ieee标准库中的std_logic_1164.ALL程序包和std_logic_1164程序包中的rising_edge函数。,库的种类,VHDL库分为设计库和资源库,设计库不需要使用LIBRARY和USE子句声明,资源库是标准模块和常规元件存放的库,使用之前需要声明。VHDL库的设计库主要是STD库、WORK库;VHDL库的资源库包括用户定义库和IEEE库。,(1)IEEE库 该库存放了IEEE 10

35、76中的标准设计单元,如程序包std_logic_1164、numeric_std和numeric_bit。其中std_logic_1164是最重要和最常用的程序包。Synopsys的std_logic_arith,std_logic_signed,std_logic_unsigned也并入了IEEE库。,(2)STD库 逻辑名为STD的库是所有设计单元隐含定义的库,即下面的LIBRARY子句隐含存在任意设计单元之前,而不需显式地写出。LIBRARY STD;STD库中包含预定义的程序包Standard和Textio。,(3)WORK库 用户当前库,可用于保存当前正在进行的设计;它也是在开发过

36、程中,各种VHDL工具处理设计文件的地方。用户在设计项目中已经设计好的,正在校验、未仿真的中间件等均放在工作库work中。,(4)用户定义库 VHDL工具厂商往往都有他们自己的资源库,其中包括各厂商自己预定义的程序包。用户可以直接使用这些库。另外,用户也可以建立自己的资源库,如对每个项目建立的用户库等。为了使用已经定义好的某个资源库,必须在要使用资源库的每个设计单元的开头用LIBRARY子句显式地说明。,(5)面向ASIC库 FPGA公司提供的现成的IP资源库,有许多可以由用户定制的功能元件形式出现的设计。这些元件的功能范围从简单的加法器、多路选择器等到复杂的系统级的滤波器、存储器模块等。这些

37、功能元件都经过专业设计和验证,并在性能和占用器件资源等方面进行了优化。应用它们对提高设计效率和质量十分有利。,2)程序包 程序包是一个可编译的设计单元,也是库结构中的一个层次,用来存放各个设计共享的信号定义、常数定义、数据类型、元件结构、函数定义和过程定义等。程序包的一般格式:,PACKAGE 程序包名IS 说明单元 END PACKAGE程序包名;以下为程序包包体单元 PACKAGE BODY 程序包名 IS 说明单元 END PACKAGE BODY程序包名;程序包体名应该与其对应的程序包说明的名字相同。,程序包说明单元是主设计单元,它可以独立编译并插入设计库中。程序包体是次级单元,它可以

38、在其对应的主设计单元编译并插入设计库之后独立进行编译,然后插入设计库中。,例如:程序包的说明单元 PACKAGE my_package IS FUNCTION and_f(a,b:STD_LOGIC_VECTOR)RETURN STD_LOGIC_VECTOR;TYPE my_array IS ARRAY 2 DOWNTO 0 OF STD_LOGIC_VECTOR(3 DOWNTO 0);CONSTANT my_5v:STD_LOGIC_VECTOR(7 DOWNTO 0):=(OTHER=1);END;,程序包的包体单元 PACKAGE BODY my_pack IS FUNCTION a

39、dd_f(a,b:STD_LOGIC_VECTOR)RETURN STD_LOGIC_VECTOR IS BEGIN RETURN(0,常用程序包,VHDL标准提供了一些预先定义的标准程序包,包括standard,textio,std_logic_1164,numeric_std,numeric_bit等程序包。,std_logic_1164程序包定义了一些数据类型、子类型和函数,这些定义将VHDL扩展为能描述多值逻辑的硬件描述语言。该程序包对所有设计实体均不可见,在使用时需在VHDL开始部分添加以下语句:LIBRARY ieee;USE ieee.std_logic_1164.ALL;,st

40、d_logic_arith程序包该程序包已预先编译在ieee库中,在std_logic_1164程序包基础上的扩展。std_logic_signed和std_logic_unsigned程序包该程序包已预先编译在ieee库中,其中std_logic_signed定义有符号数的运算,std_logic_unsigned定义无符号数的运算,,standard程序包存在于标准设计库std中。定义了布尔量类型,位类型,字符类型,实数类型,整数类型等。textio程序包存在于标准设计库std中。定义了line类型,text类型,文件input等。,程序包textio对所有设计实体均不可见,故在使用它时需

41、要在VHDL程序的开始部分添加:LIBRARY std;USE std.textio.ALL;,3.3 VHDL的基本语句,VHDL语句主要是并行语句 Concurrent statements和顺序语句Sequential statements。并行语句在执行过程中,语句的执行顺序与语句的书写顺序无关,所有语句是并发执行的。顺序语句在执行过程中,语句的执行顺序按照语句的书写顺序依次执行的。并行语句主要用于表示算法模块间的连接关系,顺序语句主要用于实现模型的算法部分。,结构体中各个模块之间是并行执行的,应采用并行语句来描述。模块内部的语句则需根据描述方式决定,即模块内部既可采用并行描述语句,也

42、可采用顺序描述语句。,实际电子系统中,几乎所有操作都是并发执行的。这些操作没有顺序之分。一旦得到事件触发,它们就会开始工作。为了描述电子系统的工作方式,VHDL提供了并行描述语句。各种并行语句在结构体中的执行是同步进行的,即并行运行的,其执行方式与书写的顺序无关,3.3.1 并行语句,并行语句内部的语句运行方式包括并行执行方式(块语句)和顺序执行方式(进程语句)并行语句在结构体中的格式为:ARCHITECTURE 结构体 OF 实体名IS说明语句;BEGIN并行处理语句;END结构体名,VHDL中的主要并行语句包括:信号赋值语句;块(BLOCK)语句;进程(PROCESS)语句;过程调用语句;

43、生成(GENERATE)语句;元件例化语句;断言(ASSERT)语句。,并行信号复制语句用于进程和子程序外部的信号赋值。并行信号赋值语句有3种形式:基本(简单)信号赋值语句、条件信号赋值语句、选择信号赋值语句。,1)信号赋值语句,基本信号赋值语句将信号直接赋给赋值目标,其格式如下:赋值目标=表达式;注意:赋值目标的数据对象必须是信号,=两边的数据类型必须一致。多条并发信号赋值语句是并行执行的。,例:如下结构体中3条信号赋值语句并行执行。ARCHITECTURE curt OF bcl ISSIGNAL s,e,f,g,h:std_logic;BEGINoutput1=a AND b;outpu

44、t2=c+d;g=e OR f;END curt;,(2)条件信号赋值语句在满足条件表达式的情况下将表达式的值赋给目标信号,其格式如下:赋值目标=表达式 WHEN 赋值条件 ELSE-第一句 表达式 WHEN 赋值条件 ELSE-第二句 表达式;-最后一句,1)执行该语句的过程是,首先判断第一句中的赋值条件是否满足,若满足时就把对应的表达式的值传递个赋值目标,并且结束该赋值语句(整个语句);否则,判断第二句中的赋值条件,如果所有的赋值条件都不满足,把最后一句表达式的值传递给赋值目标。2)语句的执行具有优先次序,第一条优先级最高;3)赋值目标与表达式的值数据类型应相同;4)赋值条件是布尔量,为真

45、时表示条件满足;5)这是一种并行描述语句,不能在进程和子程序中使用。,例:利用条件信号赋值语句描述4选1数据选择电路程序LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mux41_2 ISPROT(s1,s0,d0,d1,d2 d3:IN std_logic;q:OUT std_logic);END mux41_2;ARCHITECTURE bhv OF mux41_2 ISSIGNAL sel:std_logic_vector(1 DOWNTO 0);BEGINsel=s1,(3)选择信号赋值语句与条件信号赋值语句基本相同,都是在条件表达式为真

46、时将表达式赋给目标信号,只是在基本格式上有所不同。选择信号赋值语句的基本格式如下:WITH表达式 SELECT目标信号=表达式1 WHEN 选择条件1;表达式2 WHEN 选择条件2;表达式n WHEN 选择条件n;先进行选择条件表达式的判断,然后根据其值来决定把哪一个表达式赋给目标信号。,例:利用选择信号赋值语句描述4选1数据选择电路程序LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mux41_3 ISPROT(s1,s0,d0,d1,d2 d3:IN std_logic;q:OUT std_logic);END mux41_3;ARCHIT

47、ECTURE bhv OF mux41_3 ISSIGNAL sel:std_logic_vector(1 DOWNTO 0);BEGINsel=s1,选择信号赋值语句需注意:仅当条件表达式的值满足选择条件时,才能将表达式赋给目标信号 是并行描述语句,不能在进程和子程序中使用表达式后面均含WHEN子句。,块语句把多个并行语句打包,形成结构体中的一个单独的块区域,可以看作结构体中的一个子模块。BLOCK语句的目的是改善并行语句及其结构的可读性。,2)块(BLOCK)语句,其基本格式如下:块标号:BLOCK(保护表达式)块说明部分语句 BEGIN 并行描述语句 END BLOCK块标号;,1)块语

48、句本身是并行语句,块内的语句也需是并行语句。2)语句包括类属说明语句和端口说明语句。类属说明语句用于参数的定义,端口说明语句用于信号的定义,通常用GENERIC,PORT语句来实现。3)块中定义的数据类型、数据对象(信号、变量和常量)、子程序等都是局部的。在块嵌套时,外层定义的内容可被内层接受,反之则不然。如果块中出现同名数据对象,则遵循相邻优先的原则。,例:含BLOCK语句的1位全加器LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY full_adder ISPORT(a,b,ci:IN std_logic;co:OUT std_logic;s:

49、OUT std_logci);END full_adder;,ARCHITECTUR rtl OF full_adder ISBEGINexample:BLOCKPORT(a_tmp,b_tmp,ci_tmp:IN std_logic;co_tmp:OUT std_logic;s_tmp:OUT std_logic);,PORT MAP(a,b,ci,co,s);SIGNAL tmp1,tmp2:std_logic;BEGIN P1:PROCESS(a_tmp,b_tmp)BEGINtmp1=a_tmp XOR b_tmp;END PROCESS P1;P2:PROCESS(tmp1,ci_t

50、mp)BEGINtmp2=tmp1 AND ci_tmp;END PROCESS P2;,P3:PROCESS(tmp1,ci_tmp)BEGINs_tmp=tmp1 XOR ci_tmp;END PROCESS P3;P4:PROCESS(a_tmp,b_tmp,tmp2)BEGINco_tmp=tmp2 OR(a_tmp AND b_tmp);END PROCESS P4;END BLOCK example;END rtl;,一个结构体可包一个或多个进程语句,各个进程语句之间是并行执行。而组成进程语句的各个语句是顺序执行的。,3)进程(PROCESS)语句,进程语句基本格式如下:进程标号:

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号