第四章VHDL语言的数据类型及运算操作符.ppt
《第四章VHDL语言的数据类型及运算操作符.ppt》由会员分享,可在线阅读,更多相关《第四章VHDL语言的数据类型及运算操作符.ppt(59页珍藏版)》请在三一办公上搜索。
1、第四章 VHDL语言的数据类型及运算操作符号,VHDL语言像其它高级语言一样,具有多种数据类型。对大多数数据类型的定义,两者是一致的。但是也有某些区别,如VHDL语言中可以由用户自己定义数据类型,这一点在其它高级语言中是做不到的。,4.1 VHDL语言的客体及其分类,在VHDL语言中凡是可以赋予一个值的对象就称为客体(Object)。客体主要包括以下3种:信号、变量、常数(Signal、Variable、Constant)。在电子电路设计中,这3类客体通常都具有一定的物理含义。例如,信号对应地代表物理设计中的某一条硬件接线;常数对应地代表数字电路中的电源和地等。当然,变量对应关系不太直接,通常
2、只代表暂存某些值的载体。3类客体的含义和说明场合如下表所示。,4.1.1 常数(Constant),常数是一个固定的值。所谓常数说明就是对某一常数名赋予一个固定的值。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。常数说明的一般格式如下:,CONSTANT 常数名:数据类型:=表达式;,例如:CONSTANT Vcc:REAL:=5.0;CONSTANT DALY:TIME:=100 ns;CONSTANT FBUS:BIT_VECTOR:=“0101”;,常数一旦被赋值就不能再改变。上面Vcc被赋值为5.0V,那么在所有的VHDL语言程序中Vcc的值就固定为5.0V,它不像后面所
3、提到的信号和变量那样,可以任意代入不同的数值。另外,常数所赋的值应和定义的数据类型一致。例如:CONSTANT Vcc:REAL:=“0101”;这样的常数说明显然是错误的。,4.1.2 变量(Variable),变量只能在进程语句、函数语句和过程语句结构中使用,它是一个局部量。在仿真过程中,它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。变量说明语句的格式为:,VARIABLE 变量名:数据类型 约束条件:=表达式;,例如:VARIABLE x,y:INTEGER;VARIABLE count:INTEGER RANGE 0 TO 255:=10;,变量在赋值时不能产生
4、附加延时。例如,tmp1,tmp2,tmp3都时变量,那么下式产生延时的方式时不合法的:tmp3:=tmp1+tmp2 AFTER 10ns;,4.1.3 信号(Signal),信号是电子电路内部硬件连接的抽象。它除了没有数据流动方向说明以外,其它性质几乎和前面所述的“端口”概念一致。信号通常在构造体、包集合和实体中说明。信号说明语句格式为:,SIGNAL 信号名:数据类型 约束条件:=表达式;,例如:SIGNAL sys_clk:BIT:=0;SIGNAL ground:BIT:=0;,在程序中,信号值的代入采用“=”代入符,而不是像变量赋值时用“:=”符。而且信号代入时可以附加延时。例如,
5、s1和s2都时信号,且s2的值经10ns延时以后才被代入s1。此时信号传送语句可书写为:s1=s2 AFTER 10ns;信号时一个全局量,它可以用来进行进程之间的通信。一般来说,在VHDL语言中对信号赋值时按仿真时间来进行的。信号值的改变也需按仿真时间的计划表行事。,4.1.4 信号和变量值代入的区别,信号和变量值的代入不仅形式不同,而且其操作过程也不相同。在变量的赋值语句中,该语句一旦被执行,其值立即被赋予变量。在执行下一条语句时,该变量的值就为上一句新赋的值。变量的赋值符为“:=”。信号代入语句采用“=”代入符,该语句即使被执行也不会使信号立即发生代入。下一条语句执行时,仍使用原来的信号
6、值。由于信号代入语句是同时进行处理的,因此,实际代入过程和代入语句的处理是分开进行的。,信号和变量值代入的区别(续),如下面左图所示,信号C和D的代入值(A+B)和(C+B)将由PROCESS外部通过进程的敏感信号A,B,C取得。进程执行时,只从信号所对应的实体取值,只要不碰到WAIT语句或进程执行结束,进程执行过程中信号值是不进行代入的。如下面右图所示,为了进行仿真,需要让代入和处理交替地反复进行。,4.1.5 信号和变量值代入的区别-举例,现在来看下例中两个进程描述的语句。首先,由于信号A发生变化使进程语句开始启动执行。这样一来,仿真器对进程中的各语句自上至下地进行处理。当进程所有语句执行
7、完毕,或者中途碰到WAIT语句时,该进程执行结束,信号代入过程被执行。代入同样应按顺序自上至下地进行。,在第一个进程中,D中最初代入的值是A,接着又代入C值。尽管D中先代入A值,后代入C值,在时间上有一个的延时,但是,在代入时由于不进行处理,因此仿真时认为是时间0值延时。因此D的最终值应为C,这样X和Y的内容都为B+C。,在第二个进程中,D是变量。在执行“D:=A;”语句以后,A的值就被赋给D,所以 X为B+A。此后又执行“D:=C;”,从而使Y为B+C。从这里可以看出,信号量的值将进程语句最后所代入的值作为最终代入值。而变量的值一经赋值就变成新的值。这就是变量赋值和信号代入在操作上的区别。,
8、4.2 VHDL语言的数据类型,如前所述,在VHDL语言中信号、变量、常数都要指定数据类型。为此,VHDL提供了多种标准的数据类型。另外,为使用户设计方便,还可以由用户自定义数据类型。这样使语言的描述能力及自由度更进一步提高,从而为系统高层次的仿真提供了必要手段。与此相反,VHDL语言的数据类型的定义相当严格,不同类型之间的数据不能直接代入,而且,即使数据类型相同,而位长不同时也不能直接代入。这样,为了熟练地使用VHDL语言编写程序,必须很好理解各种数据类型的定义。,数据类型的概念在VHDL语言中十分重要可以说VHDL是一个强数据类型(strongly typed)语言,即意味着每个对象都只能
9、取该对象所指定类型的值而且,对每个操作的定义也都包含了作为操作对象的值的类型这种强类型化的目的是允许设计师可以在设计过程的早期阶段(即在模型的分析阶段)发现错误,4.2.1 VHDL语言标准的数据类型,1、整数(Integer),整数与数学中的整数的定义相同。在VHDL中,整数的表示范围为-21474836472147483647,即从-(232-1)和(232-1),但实际上VHDL语言的执行可以扩充到这个范围之外千万不要把一个实数(含小数点的数)赋予一个整数变量,这是因为VHDL是一个强类型语言,它要求在赋值语句中的数据类型必须匹配。整数的例子如下:+136,+12456,-457,尽管整
10、数值在电子系统中可能是用一系列二进制位值来表示的,但是整数不能看作是位矢量,也不能按位来进行访问,对整数不能用逻辑操作符。当需要进行位操作时,可以用转换函数,将整数转换成位矢量。目前在有的CAD厂商所提供的工具中,对此规定已有所突破,允许对有符号和无符号的整型量进行算术逻辑运算。在电子系统的开发过程中,整数也可以作为对信号总线状态的一种抽象手段,用来准确地表示总线的某一状态。,下面例举两个整数类型的定义:type day_of_month is range 0 to 31;type year is range 0 to 2100;这两个类型是完全不同的,尽管它们包括了一些共同的值因此,如果按下
11、面的方式来声明两个变量:variable today:day_of_month:=9;variable start_year:year:=1987;则如下操作是非法的:start_year:=today;尽管数字是类型year中的一个元素,但是它与day_of_month不是一个类型,二者不相容,2、实数(Real),在进行算法研究或者实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为-1.0E+38+1.0E+38。实数有正负数,书写时一定要有小数点。例如:-1.0,+2.5,-1.0E38有些数可以用整数表示也可以用实数表示。例如,数字1的整数表示为1,而用实数表示
12、则为1.0。两个数的值时一样的,但数据类型却不一样。,浮点类型声明举例:type input level is range-10.0 to+10.0;type probability is range 0.0 to 1.0 声明为浮点类型的变量有一个默认的初始值,即类型区间最左边的数值因此,如果声明一个变量属于上述input level类型:variable input_a:input_level;其初始值即为-10.0,3、位(Bit),在数字系统中,信号值通常用一个位来表示。位值的表示方法是,用字符0或者1(将值放在单引号中)表示之。位与整数中的1和0不同,1和0仅仅表示一个位的两种取值。
13、有时也可以用显式说明之,例如:BIT(1)位数据可以用来描述数字系统中总线的值。位数据不同于布尔数据,当然也可以用转换函数进行转换。,4、位矢量(Bit_Vector),位矢量是用双引号括起来的一组位数据。例如:“001100”X“00BB”在这里,位矢量最前面的X表示是十六进制。用位矢量数据表示总线状态最形象也最方便。在以后的VHDL程序中将会经常用到。,5、布尔量(Boolean),一个布尔量具有两种状态,“真”或者“假”。虽然布尔量也是二值枚举量,但它和位不同,没有数值的含义,也不能进行算术运算。它能进行关系运算。例如,它可以在IF语句中被测试,测试结果产生一个布尔量TRUE或者FALS
14、E。一个布尔量常用来表示信号的状态或者总线上的情况。如果某个信号或者变量被定义为布尔量,那么在仿真中将自动地对其赋值进行核查。一般这一类型的数据的初始值总为FALSE。,6、字符(Character),字符也是一种数据类型,所定义的字符量通常用单引号括起来,如A。一般情况下,VHDL对大小写不敏感,但是对字符量中的大、小写字符则认为是不一样的。例如,B不同于b。字符量中的字符可以是az中的任一个字母,09中的任一个数字以及空白或者特殊字符,如$,%等等。包集合STANDARD中给出了预定义的128个ASCII码字符类型,不能打印的用标识符给出。字符1于整数1和实数1.0都是不相同的。当要明确指
15、出1的字符数据时,则可写为 CHARACTER(1),7、字符串(String),字符串是由双引号括起来的一个字符序列,它也称字符矢量或字符串数组。例如:“integer range”字符串常用于程序的提示和说明。,8、时间(Time),时间时一个物理量数据。完整的时间量数据应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。例如,55 sec,2 min等。在包集合STANDARD中给出了时间的预定义,其单位为fs,ps,ns,us,ms,sec,min,hr。下面时时间数据的例子:20 us,100 ns,3 sec在系统仿真时,时间数据特别有用,用它可以表示信号延时,从而使
16、模型系统能更逼近实际系统的运行环境。,9、错误等级(Severity Level),错误等级类型数据用来表征系统的状态,它共有4中:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)。在系统仿真过程中可以用这4种状态来提示系统当前的工作情况。这样可以使操作人员随时了解当前系统工作的情况,并根据系统的不同状态采取相应的对策。,10、大于等于零的整数(Natural),正整数(Positive),这两类数据是整数的子类,Natural类数据只能取值0和0以上的正整数;而Positive类数据则只能为正整数。,11、VHDL语言标准的数据类型小结,上述10种数据类型
17、是VHDL语言中标准的数据类型,在编程时可以直接引用。如果用户需使用这10种以外的数据类型,则必须进行自定义。但是,大多数的CAD厂商已在包集合中对标准数据类型进行了扩展。例如,数组型数据等。由于VHDL语言属于强类型语言,在仿真过程中,首先要检查赋值语句中的类型和区间,任何一个信号和变量的赋值均必须落入给定的约束区间中,也就是说要落入有效数值的范围中。约束区间的说明通常跟在数据类型说明的后面。例如:INTEGER RANGE 100 DOWNTO 1 BIT_VECTOR(3 DOWNTO 0)REAL RANGE 2.0 TO 30.0这里DOWNTO表示下降;而TO表示上升。一个BCD数
18、的比较器,利用约束区间说明的端口说明语句可以写为:ENTITY bcd_compare IS PORT(a,b:IN INTEGER RANGE 0 TO 9:=0;c:OUT BOOLEAN);END bcd_compare;,应该来说严格将VHDL语言的数据类型化为标准类型和非标准类型是没有意义而事实上VHDL语言类型的划分也没有种标准类型之多下面我们从另一个角度来总结对于语言的数据类型,可以分为标题类型,复合类型,访问类型,文件类型四中,而后面两种我们暂时不做讨论而前面我们定义的种标准数据类型全部属于标题类型,标题类型,分立类型,浮点类型,物理类型,real,整数类型,枚举类型,time
19、,interger,boolean,severity_level,character,bit,如上图所表示的那样,我们可以从分立类型,浮点类型,物理类型三个类型的划分去具体记忆我们前面所提到的中标准类型。,4.2.2 用户定义的数据类型,在VHDL语言中,使用户最感兴趣的一个特点是,可以由用户自己来定义数据类型。由用户定义的数据类型的定义书写格式为:TYPE 数据类型名,数据类型名 数据类型定义;在VHDL语言中还存在不完整的用户定义的数据类型的书写格式:TYPE 数据类型名,数据类型名;这种由用户做的数据类型定义是一种利用其它已定义的说明所进行的“假”定义,因此它不能进行逻辑综合。,1、用户
20、定义的数据类型的种类,枚举(Enumerated)类型;整数(Integer)类型;实数(Real)、浮点数(Floating)类型;数组(Array)类型;存取(Access)类型;文件(File)类型;记录(Recode)类型;时间(Time)类型(物理类型)。,2、枚举(Enumerated)类型,在逻辑电路中,所有的数据都是用“1”或“0”来表示的,但是人们在考虑逻辑关系时,只有数字往往时不方便的。在VHDL语言中,可以用符号名来代替数字。例如,在表示一周每一天状态的逻辑电路中,可以假设“000”为星期天,“001”为星期一。这对阅读程序是非常不方便的。为此,可以定义一个叫“week”
21、的数据类型。TYPE week IS(sun,mon,tue,wed,thu,fri,sat);由于上述的定义,凡是用于代表星期二的日子都可以用tue来代替,这比用代码“010”表示星期二直观多了,使用时也不易出错。枚举类型数据的定义格式为:TYPE 数据类型名 IS(元素,元素,);这类用户定义的数据类型应用相当广泛,例如在包集合STD_LOGIC和STD_LOGIC_1164中都由此类数据的定义。如:TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,-);,3、整数类型(Integer),实数类型(Real),整数类型在VHDL语言中已存在,这里所说的是用户所定义的整数类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 VHDL 语言 数据类型 运算 操作
链接地址:https://www.31ppt.com/p-6005507.html