可编程逻辑电路原理与应用第三章 VHDL语言与应用设计.ppt
《可编程逻辑电路原理与应用第三章 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程逻辑电路原理与应用第三章 VHDL语言与应用设计 可编程 逻辑电路 原理 应用 第三 VHDL 语言 设计

链接地址:https://www.31ppt.com/p-2431206.html