《VHDL结构及语言要素.ppt》由会员分享,可在线阅读,更多相关《VHDL结构及语言要素.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第九讲第九讲 VHDL结构及语言要素结构及语言要素(1)1.文字规则文字规则2.数据对象数据对象3.数据类型数据类型4.操作符操作符1-邹云海-一一.VHDL文字规则文字规则1、数字型文字、数字型文字(1)整数文字)整数文字:十进制整数:十进制整数 如:如:5,678,156E2(=15600),),45_234_287(=45234287)(2)实数文字)实数文字:带小数的十进制数:带小数的十进制数 如:如:23.34,2.0,44.99E-2(=0.4499)88_67_551.23_909(8867551.23909)注:注:_用以提高数字可读性;数字间不允许用以提高数字可读性;数字间不
2、允许空格空格2006-102(3)以数制基数表示的文字)以数制基数表示的文字 格式:格式:基数基数#数字文字数字文字#E指数指数 (5部分组成)部分组成)如:如:10#170#(=170)2#1111_1110#(=254)16#E#E1 (=2#1110_0000#=224)或:(或:(=1416=224)16#F.01#E+2 (=(15+1/(16 16)16 16=3841.00)2006-103(4)物理量文字)物理量文字 如:如:60 s、100 m、177 A 注:整数可综合实现;注:整数可综合实现;实数一般不可综合实现;实数一般不可综合实现;物理量不可综合实现;物理量不可综合实
3、现;2006-1042、字符串型文字、字符串型文字 按字符个数多少分为:按字符个数多少分为:字符:用单引号引起来的字符:用单引号引起来的ASCII字符,可以是字符,可以是 数值,也可以是符号或字母。数值,也可以是符号或字母。如:如:A,*,Z 字符串:用双引号引起来的一维字符数组字符串:用双引号引起来的一维字符数组2006-105字符串分为:字符串分为:(1)文字字符串:)文字字符串:“文字文字”如:如:“ERROR”,“XXXXXXXX”,“ZZZZZZZZ”,“X”,“BOTH S AND Q EQUAL TO L”,2006-106(2)数位字符串:)数位字符串:(由双引号引起来的数字序
4、列)(由双引号引起来的数字序列)称为位矢量,代表二进制、八进制、十六进称为位矢量,代表二进制、八进制、十六进 制的数组。其位矢量的长度为等值的二进制数的制的数组。其位矢量的长度为等值的二进制数的 位数。位数。格式:格式:其中基数符号有三种:其中基数符号有三种:B:二进制基数符号。二进制基数符号。O:八进制基数符号,每一个八进制数一个八进制基数符号,每一个八进制数一个 3位的二进制数。位的二进制数。X:十六进制基数符号,每一个十六进制数十六进制基数符号,每一个十六进制数 代表代表 一个一个4位的二进制数。位的二进制数。基数符号基数符号“数值数值”B“1_1101_1110”二进制数数组,长度为二
5、进制数数组,长度为9 O“34”八进制数数组,长度为八进制数数组,长度为6 X“1AB”十六进制数数组,长度为十六进制数数组,长度为12 2006-1073、标识符、标识符 定义常数、变量、信号、端口、子程序或定义常数、变量、信号、端口、子程序或 参数的名字。参数的名字。基本标识符的要求(基本标识符的要求(87标准):标准):以英文字母开头;以英文字母开头;不连续使用下划线不连续使用下划线“_”;不以下划线不以下划线“_”结尾;结尾;由由26个大小写英文字母、数字个大小写英文字母、数字09及及 下划线下划线“_”组成的字符串。组成的字符串。2006-108 基本标识符中的英文字母不分大小写;基
6、本标识符中的英文字母不分大小写;VHDL的保留字不能作为标识符使用。的保留字不能作为标识符使用。合法标识符如下:合法标识符如下:my_counter、Decoder_1、FFT、Sig_N、Not_Ack、State0非法标识符如下:非法标识符如下:_Decoder_1、2FFT、Sig_#N、Not-Ack、ALL_RST_、data_BUS、return、entity2006-109扩展标识符(扩展标识符(93标准):标准):以反斜杠来界定,免去了以反斜杠来界定,免去了87标准中基本标标准中基本标识符的一些限制。使描述更加直观、方便识符的一些限制。使描述更加直观、方便 可以以数字打头,可以
7、以数字打头,允许包含图形符号,允许包含图形符号,允许使用允许使用VHDL保留字,保留字,区分字母大小写等区分字母大小写等。如:如:74LS163、Sig_#N、entity、ENTITY 有些有些VHDL工工具并不支持扩具并不支持扩展标识符展标识符2006-10104、下标名及下标段名、下标名及下标段名 下标名:用于指示数组型变量或信号的某一个下标名:用于指示数组型变量或信号的某一个 元素。元素。格式:格式:标识符(表达式)标识符(表达式)下标段名(段名):用于指示数组型变量或信号下标段名(段名):用于指示数组型变量或信号的某一的某一 段元素。段元素。格式:格式:标识符(表达式标识符(表达式
8、to/downto 表达式)表达式)to:下标序列由低到高;下标序列由低到高;downto:下标序列由高到低下标序列由高到低如如:a:std_logic_vector(7 downto 0)a(7),a(6)a(0)a(7 downto 0),a(7 downto 4),a(5 downto 3)2006-10115.5.注释注释用以提高程序可读性用以提高程序可读性以以-开头,直至本行结尾开头,直至本行结尾注释在程序段中以特征颜色标记显示,不参与注释在程序段中以特征颜色标记显示,不参与程序编译程序编译如:如:-定义了器件的端口名称及类型定义了器件的端口名称及类型2006-1012二二.数据对象
9、数据对象(page59-unit4.2)三种对象:常量(三种对象:常量(Constant)变量(变量(Variable)信号(信号(Signal)三种对象的物理含义:三种对象的物理含义:常量常量代表数字电路中的电源、地、恒定逻辑值等代表数字电路中的电源、地、恒定逻辑值等常数;常数;变量变量代表暂存某些值的载体,常用于描述算法;代表暂存某些值的载体,常用于描述算法;信号信号代表物理设计中的某一条硬件连接线,包括代表物理设计中的某一条硬件连接线,包括输入、输出端口。输入、输出端口。2006-1013三种对象的特点及说明场合:三种对象的特点及说明场合:信号信号:全局量,可设置传输延迟,作模块间的:全
10、局量,可设置传输延迟,作模块间的信息载体。用于信息载体。用于architecture、package、entitiy。变量变量:局部量,不可设置传输延迟,最后靠信:局部量,不可设置传输延迟,最后靠信号传递信息。用于号传递信息。用于process、function、procedure。常量常量:全局量,可用于上面两种场合。使实体:全局量,可用于上面两种场合。使实体中某些量易于修改和阅读。中某些量易于修改和阅读。2006-10141、常量说明、常量说明常量说明:对某一个常量名赋予一个固定的值。常量说明:对某一个常量名赋予一个固定的值。格式:格式:例:例:constant data:bit_vect
11、or(3 downto 0):=“1010”constant width:integer:=8;constant x:new_bit:=x;常量数据类型必须与表达式的数据类型一致。常量数据类型必须与表达式的数据类型一致。constant 常数名:数据类型:常数名:数据类型:=表达式;表达式;2006-1015常量的可视性(作用范围):常量的可视性(作用范围):库、程序包 实体(Entity)结构体1 进 程1 结构体2 进 程2 常量是全局常量是全局量,其作用量,其作用范围取决于范围取决于常量被定义常量被定义的位置。的位置。2006-10162、变量说明、变量说明 变量是一个局部量变量是一个局
12、部量,只能在进程和子程序中,只能在进程和子程序中定义、使用。其作用范围仅限于定义了变量的进定义、使用。其作用范围仅限于定义了变量的进程和子程序中。程和子程序中。定义变量格式:定义变量格式:例:例:variable a,b:bit;variable count:integer range 0 to 255:=10;变量的初值可用于仿真,但综合时被忽略。变量的初值可用于仿真,但综合时被忽略。变量赋值语句格式:变量赋值语句格式:目标变量名:目标变量名:=表达式表达式如:如:a:=1;b:=not a;variable 变量名:数据类型变量名:数据类型 :=初始值;初始值;2006-10173、信号说
13、明、信号说明 电子硬件系统运行的基本特性:电子硬件系统运行的基本特性:各部分电路工作的并行特性;各部分电路工作的并行特性;信号传输过程中的延时特性;信号传输过程中的延时特性;多驱动源的总线特性;多驱动源的总线特性;时序电路中触发器的记忆特性时序电路中触发器的记忆特性等。等。信号是电子系统内部硬件连接和硬件特性的抽信号是电子系统内部硬件连接和硬件特性的抽象表示。用来描述硬件系统的基本特性。象表示。用来描述硬件系统的基本特性。信号定义格式:信号定义格式:信号赋值格式:信号赋值格式:目标信号名目标信号名=表达式;表达式;signal 信号名:数据类型信号名:数据类型 约束条件:约束条件:表达式;表达
14、式;2006-1018例:例:signal a,b:bit;signal init:integer:=-1;signal s1:std_logic:=0;signal s2:std_logic_vector(15 downto 0);注:注:a.综合时初值被忽略。综合时初值被忽略。b.信号是全局量。可在结构体、实体、块中说信号是全局量。可在结构体、实体、块中说明和使用信号。可容纳当前值,也可保留历史值明和使用信号。可容纳当前值,也可保留历史值(对应触发器的记忆功能)(对应触发器的记忆功能)c.在进程和子程序中只能使用信号,不能说明在进程和子程序中只能使用信号,不能说明(定义)信号。(定义)信号
15、。2006-1019例:进程中信号与变量的使用例:进程中信号与变量的使用2006-1020信号与端口的区别:信号与端口的区别:除没有方向说明外,信号与除没有方向说明外,信号与 实体的实体的“端口端口(PORT)”概念相似。端口是一种隐形的信号。概念相似。端口是一种隐形的信号。entity exam is port(signal a,b:in std_logic;signal c:out std_logic);end entity exam;端口是一种有方向的信号。端口是一种有方向的信号。即输出端口不能读出数据,只能写入数据;即输出端口不能读出数据,只能写入数据;输入端口不能写入数据,只能读出数
16、据。输入端口不能写入数据,只能读出数据。信号本身无方向,可读可写。信号本身无方向,可读可写。2006-1021三三.VHDL数据类型数据类型(page65unit4.3)VHDL是一种强数据类型语言。是一种强数据类型语言。要求设计实体中的每一个常数、信号、变量、要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的数据类函数以及设定的各种参量都必须具有确定的数据类型,并且相同数据类型的量才能互相传递和作用。型,并且相同数据类型的量才能互相传递和作用。VHDL数据类型分为四大类:数据类型分为四大类:标量类型(标量类型(SCALAR TYPE)复合类型(复合类型(COMPO
17、SITE TYPE)存取类型(存取类型(ACCESS TYPE)文件类型(文件类型(FILES TYPE)2006-1022数据类型又分为:数据类型又分为:预定义数据类型预定义数据类型 用户自定义数据类型用户自定义数据类型1、VHDL的预定义数据类型的预定义数据类型1)布尔量()布尔量(boolean)布尔量具有两种状态:布尔量具有两种状态:false 和和 true 常用于逻辑函数,如相等(常用于逻辑函数,如相等(=)、比较()、比较()等)等中作逻辑比较。只能参与关系运算,无算术运算。中作逻辑比较。只能参与关系运算,无算术运算。如:如:bit 值转化成值转化成boolean 值:值:boo
18、lean_var:=(bit_var=1);2006-10232)位()位(bit)bit 表示一位的信号值。表示一位的信号值。放在单引号中,如放在单引号中,如 0 或或 1。3)位矢量)位矢量(bit_vector)使用时需注明位宽使用时需注明位宽 bit_vector 是用双引号括起来的一组位数据。是用双引号括起来的一组位数据。如:如:“001100”X“00B10B”4)字符()字符(character)用单引号将字符括起来。用单引号将字符括起来。variable character_var:character;.Character_var:=A;2006-10245)整数()整数(in
19、teger)integer 表示所有正的和负的整数。硬件实现时,表示所有正的和负的整数。硬件实现时,利用利用32位的位矢量来表示。可实现的整数范围为:位的位矢量来表示。可实现的整数范围为:-(231-1)to (231-1)VHDL综合器要求对具体的整数作出范围限定,综合器要求对具体的整数作出范围限定,否则无法综合成硬件电路。否则无法综合成硬件电路。如:如:signal s:integer range 0 to 15;使用使用range子句,从而确定综合后的二进制位数子句,从而确定综合后的二进制位数 信号信号 s 的取值范围是的取值范围是015,可用,可用4位二进制数表位二进制数表示,因此示,
20、因此 s 将被综合成由四条信号线构成的信号。将被综合成由四条信号线构成的信号。2006-10256)自然数()自然数(natural)和)和正整数(正整数(positive)natural 是是 integer类型的子类型,类型的子类型,表示非负整数。表示非负整数。positive 是是 integer 类型的子类型,表示正整数。类型的子类型,表示正整数。定义如下:定义如下:subtype natural is integer range 0 to integerhigh;subtype positive is integer range 1 to integerhigh;2006-10267
21、)实数()实数(REAL)或称浮点数或称浮点数 取值范围:取值范围:-1.0E38 +1.0E38 实数类型仅能用于实数类型仅能用于VHDL仿真器,一般综合器仿真器,一般综合器不支持。不支持。8)字符串()字符串(string)string 是是 character 类型的一个非限定数组。用类型的一个非限定数组。用双引号将一串字符括起来。如:双引号将一串字符括起来。如:variable string_var:string(1 to 7);string_var:=“Rosebud”;2006-10279)时间()时间(TIME)由整数和物理单位组成由整数和物理单位组成 如:如:55 ms,20
22、ns10)错误等级()错误等级(SEVERITY_LEVEL)仿真中用来指示系统的工作状态,共有四种:仿真中用来指示系统的工作状态,共有四种:NOTE(注意)(注意)WARNING(警告)(警告)ERROR(出错)(出错)FAILURE(失败)(失败)2006-10282、IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量1)std_logic 类型类型 是标准是标准bit数据类型的扩展数据类型的扩展 由由 ieee 库中的库中的std_logic_1164 程序包定义,为程序包定义,为9值值逻辑系统,如下:逻辑系统,如下:(U,X,0,1,Z,W,L,H,-)U:未初始化的,:未初始化的,
23、X:强未知的,:强未知的,0:强:强0,1:强:强1,Z:高阻态,:高阻态,W:弱未知的,:弱未知的,L:弱:弱0,H:弱:弱1,-:忽略:忽略 use ieee.std_logic_1164.all;2006-1029 由由 std_logic 类型代替类型代替 bit 类型可以完成电子系类型可以完成电子系统的精确模拟,并可实现常见的三态总线电路。统的精确模拟,并可实现常见的三态总线电路。2)std_logic_vector 类型类型 极大方便了总线描述极大方便了总线描述 由由 std_logic 构成的数组。定义如下:构成的数组。定义如下:type std_logic_vector is
24、array(natural range)of std_logic;赋值的原则:相同位宽,相同数据类型。赋值的原则:相同位宽,相同数据类型。Example:程序程序4-52006-10303、其它预定义标准数据类型、其它预定义标准数据类型 Synopsys公司程序包公司程序包 STD_LOGIC_ARITH中:中:1)无符号型()无符号型(UNSIGNED)定义如下:定义如下:type unsigned is array(natural range)of std_logic;UNSIGNED(“1000”)=8 最左位是最高位:最左位是最高位:variable var:unsigned(0 to
25、 10);var(0)是最高位是最高位 signal sig:unsigned(5 downto 0);sig(5)是最高位是最高位 Use;2006-10312)有符号型()有符号型(SIGNED)定义如下:定义如下:type signed is array (natural range)of std_logic;最高位为符号位,综合器认作补码。最高位为符号位,综合器认作补码。SIGNED(“0101”)=5,SIGNED(“1011”)=-5 variable var:signed(0 to 10);var(0)是符号位是符号位3)小整型()小整型(SMALL_INT):):0 TO 12
26、006-10324、用户自定义类型用户自定义类型 用户自定义类型是用户自定义类型是VHDL语言的一大特色。语言的一大特色。可由用户定义的数据类型有:可由用户定义的数据类型有:(1)枚举类型枚举类型;(2)整数和实数类型整数和实数类型;(3)数组类型数组类型;(4)记录类型记录类型;(5)子类型子类型.2006-1033 用类型定义语句用类型定义语句TYPE和子类型定义语句和子类型定义语句SUBTYPE实现用户自定义数据类型。实现用户自定义数据类型。TYPE语句格式:语句格式:type 数据类型名数据类型名 is 数据类型定义数据类型定义 of 基本数据类型基本数据类型;例:例:type byt
27、e is array(7 downto 0)of bit;variable addend:byte;type week is(sun,mon,tue,wed,thu,fri,sat);2006-1034 SUBTYPE语句格式:语句格式:subtype 子类型名子类型名 is 基本数据类型基本数据类型 range 约束范围;约束范围;例:例:subtype digits is integer range 0 to 9;由由subtype 语句定义的数据类型称为子类型。语句定义的数据类型称为子类型。2006-1035TYPE byt IS STD_LOGIC(15 downto 0);SUBTY
28、PE dig3 IS ARRAY(7 downto 0)ofSTD_LOGIC;ERROR!TYPE定义的数据类型应该是全新的,即VHDL预定义库中未被定义过的数据类型,这里的STD_LOGIC已经被定义成标准位了。ERROR!子类型的定义只在基本数据类型上做一些约束,并没有定义新的数据类型,这是与TYPE最大的不同。2006-10361)枚举类型)枚举类型(page74)枚举该类型的所有可能的值。格式:枚举该类型的所有可能的值。格式:type 类型名称类型名称 is (枚举文字枚举文字,枚举文字,枚举文字););2006-1037枚举类型的编码枚举类型的编码(page74 para3)综合器
29、自动实现枚举类型元素的编码,一般将综合器自动实现枚举类型元素的编码,一般将第一个枚举量(最左边)编码为第一个枚举量(最左边)编码为0,以后的依次加,以后的依次加1。编码用位矢量表示编码用位矢量表示,位矢量的长度将取所需表达的,位矢量的长度将取所需表达的所有枚举元素的最小值。所有枚举元素的最小值。如:如:type color is(blue,green,yellow,red);编码为:编码为:blue=“00”;green=“01”;yellow=“10”;red=“11”;2006-10382)整数类型)整数类型 用户定义的整数类型是标准包中整数类型的子范围。用户定义的整数类型是标准包中整数类
30、型的子范围。格式:格式:例:例:type my_integer is integer range 0 to 9;3)数组类型)数组类型 数组:同类型元素的集合。数组:同类型元素的集合。VHDL支持多维数组。支持多维数组。多维数组的声明:多维数组的声明:type byte is array(7 downto 0)of bit;type vector is array(3 downto 0)of byte;限定数组、非限定数组、属性:限定数组、非限定数组、属性:type 类型名称 is range 整数范围;2006-1039限定数组限定数组:其索引范围有一定的限制。其索引范围有一定的限制。格式:
31、格式:非限定数组:数组索引范围被定义成一个类型范围。非限定数组:数组索引范围被定义成一个类型范围。格式:格式:例:例:type bit_vector is array(integer range)of bit;variable my_vector:bit_vector(5 downto-5);type 数组名数组名 is array(数组范围数组范围)of 数据数据类型类型type 数组名数组名 is array(类型名称类型名称 range)of 数据类型数据类型2006-1040属性属性(page122)VHDL为多种类型定义了属性。为多种类型定义了属性。语法如下:语法如下:对象对象属性属
32、性 VHDL为数组预先定义的属性:为数组预先定义的属性:left right high low length range reverse_range2006-1041对应变量:对应变量:variable my_vector:bit_vector(5 downto-5);各属性如下:各属性如下:my_vectorleft 5 my_vectorright -5 my_vectorhigh 5 my_vectorlow -5 my_vectorlength 11 my_vectorrange (5 downto-5)my_vectorreverse_range (-5 to 5)2006-1042
33、4)记录类型)记录类型 记录是不同类型的名称域的集合。记录是不同类型的名称域的集合。格式如下:格式如下:访问记录体元素的方式:访问记录体元素的方式:记录体名记录体名.元素名元素名type 记录类型名记录类型名 is record 元素名:数据类型名;元素名:数据类型名;元素名:数据类型名;元素名:数据类型名;end record;2006-1043例:例:constant len:integer:=8;subtype byte_vec is bit_vector(len-1 downto 0);type byte_and_ix is record byte:byte_vec;ix:intege
34、r range 0 to len;end record;signal x,y,z:byte_and_ix;signal data:byte_vec;signal num:integer;.x.byte=“11110000”;x.ix=2;data=y.byte;num=y.ix;z=x;2006-10445)子类型)子类型 子类型是已定义的类型或子类型的一个子集。子类型是已定义的类型或子类型的一个子集。格式:格式:例:例:bit_vector 类型定义如下:类型定义如下:type bit_vector is array(natural range)of bit;如设计中只用如设计中只用16bi
35、t;可定义子类型如下:;可定义子类型如下:subtype my_vector is bit_vector(0 to 15);注:子类型与基(父)类型具有相同的操作符和子注:子类型与基(父)类型具有相同的操作符和子 程序。可以直接进行赋值操作。程序。可以直接进行赋值操作。subtype 子类型名 is 数据类型名范围;2006-10455、数据类型转换()、数据类型转换()VHDL是一种强类型语言,不同类型的数据是一种强类型语言,不同类型的数据对象必须经过类型转换,才能相互操作。对象必须经过类型转换,才能相互操作。1)类型转换函数方式)类型转换函数方式 通过调用类型转换函数,使相互操作的数据对通
36、过调用类型转换函数,使相互操作的数据对象的类型一致,从而完成相互操作。象的类型一致,从而完成相互操作。2006-10462006-10472)直接类型转换方式)直接类型转换方式 对相互间非常关联的数据类型(如整型、浮对相互间非常关联的数据类型(如整型、浮点型),可进行直接类型转换。格式:点型),可进行直接类型转换。格式:数据类型标识符(表达式)数据类型标识符(表达式)如:如:variable a,b:real;variable c,d:integer;a:=real(c);d:=integer(b);2006-1048四.VHDL中的表达式 (page83)表达式:由操作符和操作数构成,完成算
37、术或表达式:由操作符和操作数构成,完成算术或 逻辑逻辑运算。运算。1、操作符、操作符 VHDL操作符的分类:操作符的分类:逻辑操作符(逻辑操作符(Logical Operator)、)、关系操作符(关系操作符(Relational Operator)、)、算术操作符(算术操作符(Arithmetic Operator)、)、符号操作符(符号操作符(Sign Operator)、)、重载操作符(重载操作符(Overloading Operator)2006-10491)逻辑操作符逻辑操作符 6种:种:and、or、nand、nor、xor、not要求:操作数类型必须相同。可为如下类型:要求:操作
38、数类型必须相同。可为如下类型:bit、bit_vector、std_logic、std_logic_vector、boolean 数组操作数的维数、大小必须相同。数组操作数的维数、大小必须相同。注:当有两个以上的逻辑表达式时,左右没有优先注:当有两个以上的逻辑表达式时,左右没有优先 级差别,必须使用括号,如:级差别,必须使用括号,如:x=(a and b)or(not c and d);例外:当逻辑表达式中只有例外:当逻辑表达式中只有“and”、“or”、“xor”运算符时,可以省略括号。如:运算符时,可以省略括号。如:2006-1050 a=b and c and d and e;a=b o
39、r c or d or e;a=b xor c xor d xor e;2)关系操作符关系操作符 6 种:种:=、/=、=用于比较相同父类的两个操作数,返回用于比较相同父类的两个操作数,返回boolean值。值。2006-10513)加减操作符)加减操作符 加操作符加操作符“+”、减操作符、减操作符“-”、串联(并置)操作符串联(并置)操作符“&”串联操作符串联操作符“&”通过连接操作数来建立新的数通过连接操作数来建立新的数组。操作数可以是一个数组或数组中的一个元素。组。操作数可以是一个数组或数组中的一个元素。例:例:signal a,d:bit_vector(3 downto);signal
40、 b,c,g:bit_vector(1 downto 0);signal e:bit_vector(2 downto 0);signal f,h,i:bit;a=not b¬ c;-array&array d=not e¬ f;-array&element g=not h¬ i;-element&element2006-10524)一元操作符一元操作符 仅有一个操作数的操作符。仅有一个操作数的操作符。包括:包括:“+”、“-”5)乘除操作符乘除操作符 用于整数类型:用于整数类型:“*”、“/”、“mod”、“rem”综合的限制综合的限制:“/”、“mod”、“rem”三种操作
41、符的右操作数必须为三种操作符的右操作数必须为 2的正整数次幂,的正整数次幂,即即 2n。实际电路用移位实现。实际电路用移位实现。2006-10532、操作数、操作数 操作数:操作数:操作符进行运算时所需的数据。操作符进行运算时所需的数据。操作数的种类:操作数的种类:标志符;集合;属性;表达式;函数标志符;集合;属性;表达式;函数 调用;索引名;文字;限定表达式;调用;索引名;文字;限定表达式;记录和域;片段名;类型转换记录和域;片段名;类型转换 2006-10543、重载操作符、重载操作符 VHDL是强类型语言,相同类型的操作数才能进是强类型语言,相同类型的操作数才能进行操作。行操作。VHDL
42、自身定义的算术和布尔函数仅对内部自身定义的算术和布尔函数仅对内部数据类型(数据类型(standard 程序包中的数据类型)有效。即:程序包中的数据类型)有效。即:算术运算符算术运算符+,-,=仅对仅对integerinteger类型有类型有效。逻辑运算符效。逻辑运算符AND,OR,NOT仅对仅对 bit 类型有效。类型有效。如:如:variable a,b,c:integer;variable x,y,z:bit;c:=a+b;z:=x and y;问题:问题:a,b,c 与与 x,y,z 之间,或与之间,或与 std_logic 等其它数据类型之间能否相互操作?等其它数据类型之间能否相互操作
43、?2006-1055重载操作符定义:重载操作符定义:对已存在的操作符重新定义,使其能进行不同对已存在的操作符重新定义,使其能进行不同类型操作数之间的运算,称为重载操作符。定义重类型操作数之间的运算,称为重载操作符。定义重载操作符的函数称为重载函数。载操作符的函数称为重载函数。重载操作符由原操作符加双引号表示。如重载操作符由原操作符加双引号表示。如“+”“+”重载操作符的定义见重载操作符的定义见 IEEE IEEE 库的程序包:库的程序包:std_logic_arith std_logic_arith、std_logic_unsigned std_logic_unsigned、std_logic_signed std_logic_signed2006-10562006-1057重载操作符的使用:2006-1058