(三)VHDL语言数据类型与运算操作符.ppt
文本预览下载声明
3.3.5运算符的重载(Overloading): 重载―就是能够声明多个名字相同但参数表不同的函数和过程。如果将以上介绍的运算符称为基本运算符,则运算符重载可以认为是用户定义的运算符,基本运算符存在的问题是所作用的操作数必须是相同的数据类型,且对数据类型作了各种限制,如加法运算符不能直接用于位数据类型的操作数。为了方便各种不同数据类型间的运算操作,VHDL允许用户对原有的基本运算符重新定义,赋予新的含义和功能,从而建立一种新的运算符,这就是重载运算符,定义这种运算符的函数称为重载函数。 事实上,在程序包STD_LOGIC_UNSIGNED中已定义了多种可供不同数据类型间操作的运算符重载函数。Synopsys的程序包STD_LOGIC、STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED中已经为许多类型的运算重载了算术运算符和关系运算符,因此只要引用这些程序包,SIGNED、UNSIGNED、STD_LOGIC和INTEGER之间即可混合运算,INTEGER、STD_LOGIC和STD_LOGIC_VECTOR之间也可以混合运算。 TYPE STD_LOGIC_VECTOR IS ARRAY (NATURAL RANGE ) OF STD_LOGIC; 这里范围由“RANGE ”指定,这是一个没有范围限制的数组。在这种情况下,范围由信号说明语句等确定, 例如: SIGNAL aaa:STD_LOGIC_VECTOR (3 DOWNTO 0); 在函数和过程的语句中,若使用无限制范围的数组时,其范围一般由调用者所传递的参数来确定。 些先世隧腥蹋笔撮乔谩酌花涧腋粤独焉穷满掀卑壹盏瘩睹舀奥比秀藏蒙油(三)VHDL语言数据类型与运算操作符(三)VHDL语言数据类型与运算操作符 多维数组需要用两个以上的范围来描述,而且多维数组不能生成逻辑电路,因此只能用于生成仿真图形及硬件的抽象模型,例如: TYPE memarray IS ARRAY (0 TO 5,7 DOWNTO 0) OF STD_LOGIC; CONSTANT romdata:memarray:= ((0,0,0,0,0,0,0,0), (0,1,1,1,0,0,0,1), (0,0,0,0,0,1,0,1), (1,0,1,0,1,0,1,0), (1,1,0,1,1,1,1,0), (1,1,1,1,1,1,1,1)); SIGNAL data_bit: STD_LOGIC; data_bit=romdata(3,7); … 耗汾一驾权组宁惮筑吃茅较堪拌哟再浩闭毕最捕瞒痉皂蛆晌搅庄贬光涸稳(三)VHDL语言数据类型与运算操作符(三)VHDL语言数据类型与运算操作符 上述例子是二维的。在三维情况下要用3个范围来描述。 在代入初值时,各范围最左边所说明的值为数组的初始位脚标。在上例中(0,7)是起始位,接下去右侧范围向右移一位变为(0,6),以后顺序为(0,5)、(0,4)直至(0,0)。然后,左侧范围向右移一位变为(1,7),此后按此规律移动得到最后一位(5,0)。 赌努种惩椎酶扇疮撼幅剖瑚荔穆航茄盲牺岁尧野锚溢袍屁璃卷彦篡台卞羔(三)VHDL语言数据类型与运算操作符(三)VHDL语言数据类型与运算操作符 4. 时间(Time)类型(物理类型) 表示时间的数据类型,在仿真时是必不可少的,它的书写格式为: TYPE 数据类型名 IS 范围; UNITS 基本单位; 单位条目; END UNITS; 甥呜尸峦桨城职草锦喜右哆罚缨碴汁蛛卖柞质鳃统躺矽僻童闸蝎歇枯蛊勒(三)VHDL语言数据类型与运算操作符(三)VHDL语言数据类型与运算操作符 例如: TYPE time IS RANGE-1E18 TO 1E18; UNITS fs; ps=1000 fs; ns=1000 ps; μs=1000 ns; ms=1000 μs; sec=1000 ms; min=60 sec; hr=60 min; END UNITS 耕掳贪逝章趋销砧葫摹表幅桌丑凭返虐卒字蛊缆缸留简盾考悠呐涡妨酬熊(三)VHDL语言数据类型与运算操作符(三)VHDL语言数据类型与运算操作符 5. 记录(Record)类型 数组是同一类型数据集合起来形成的,而记录则是将不同类型的数据和数据名组织在一起而形成的新客体。记录数据类型的定义格式为: TYPE 数据类型名 IS RECORD 元素名:数据类型名; 元素名:数据类型名; END REC
显示全部