数据类型语法_第1页
数据类型语法_第2页
数据类型语法_第3页
数据类型语法_第4页
数据类型语法_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

(优选)数据类型语法第一页,共40页。二、VHDL数据类型与数据对象在VHDL程序中,我们经常会遇到这样的语句:

SignalA:std_logic;VariableB:std_logic_vector(7downto0);

ConstantC:integer;数据对象类型数据类型数据对象名第二页,共40页。VHDL语言中的基本数据类型逻辑类型数值类型布尔代数(Boolean)位(Bit)标准逻辑(Std_Logic)整数(Integer)实数(Real)二、VHDL数据类型与数据对象第三页,共40页。

逻辑数据类型

(1)布尔代数(Boolean)型;(2)位(Bit);(3)标准逻辑(Std_logic);typeBITis(‘0’,‘1’);typeBOOLEANis(FALSE,TRUE);二、VHDL数据类型与数据对象第四页,共40页。标准逻辑类型

TypeStd_LogicIs(‘U’,--Undefined(未初始化)

‘X’,--ForcingUnknown(强未知)‘0’,--Forcing0(强0)

‘1’,--Forcing1(强1)

‘Z’,--HignImpedance(高阻)

‘W’,--WeakUnknown(弱未知)

‘L’,--Weak0(弱0)

‘H’,--Weak1(弱1)

‘-’,--Don’tCare(忽略))二、VHDL数据类型与数据对象

标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型.第五页,共40页。

逻辑序列位序列(Bit_Vector)

标准逻辑序列(Std_Logic_Vector)二、VHDL数据类型与数据对象第六页,共40页。Signaldata:Std_Logic_Vector(7downto0);Signaladdr:Bit_Vector(0to3);序列的范围大小声明方式:To,Downto

序列的使用二、VHDL数据类型与数据对象第七页,共40页。

序列的分解与合成SignalA:Std_Logic_Vector(3downto0);SignalB:Std_Logic_Vector(0to3);SignalC:Std_Logic_Vector(0to1);SignalD:Std_Logic_Vector(1downto0);C<=A(2downto1);B<=A(3)&

D

&

‘1’;二、VHDL数据类型与数据对象第八页,共40页。

数值类型(1)整数TypeIntegerIsRange-231~231-1

限定整数取值范围的方法:SignalA:Integer;SignalB:IntegerRange0to7;SignalC:IntegerRange-1to1;二、VHDL数据类型与数据对象第九页,共40页。

无符号数Unsigned与标准逻辑序列相似,声明时必须指明其位数。SignalA:Unsigned(3downto0);SignalB:Unsigned(7downto0);注意:必须使用downto形式。二、VHDL数据类型与数据对象第十页,共40页。(2)实数TypeRealIsRange-1.7E38to1.7E38;

实数类型的表示可用科学计数形式或者带小数点的形式。二、VHDL数据类型与数据对象第十一页,共40页。VHDL中的运算符二、VHDL数据类型与数据对象

算术运算符:

+ 加

- 减

* 乘

/ 除

** 乘方

mod 求模

rem 求余

abs 求绝对值

逻辑运算:

and

逻辑与

or

逻辑或

nand

与非

nor

或非

xor

异或

xnor 同或

not

逻辑非第十二页,共40页。关系运算符:

= 等于

/= 不等于

< 小于

<= 小于或等于

> 大于

>= 大于或等于注:其中‘<=’操作符也用于表示信号的赋值操作。

&

连接符,将两个数据对象或矢量连接成维数更大的矢量,它可给代码书写带来方便。例如:

vabc=a&b&c;如果a=‘1’

,b=‘0’

,c=‘1’

,则

vabc=“101”

。二、VHDL数据类型与数据对象第十三页,共40页。

用户自定义数据类型:(1)列举数据类型Type列举名称is(元素1,元素2,…)例子:Typestateis(S0,S1,S2,S3);SignalA:state;二、VHDL数据类型与数据对象第十四页,共40页。(2)数组类型

Type数组名称isArray(范围)of数据类型;例子:

TypeByteisArray(7downto0)ofBit;Signalsdo:Byte;二、VHDL数据类型与数据对象第十五页,共40页。

数据类型的转换

在VHDL语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就需要类型转换函数将其中的一种类型数据转换为另一中数据类型后,再进行信号的传递。二、VHDL数据类型与数据对象第十六页,共40页。例如:SignalY:Std_logic_vector(7downto0);SignalX:Integerrange0to255;Y<=CONV_STD_LOGIC_VECTOR(X,8);二、VHDL数据类型与数据对象第十七页,共40页。CONV_INTEGER

将数据类型UNSIGNED,SIGNED转换为INTEGER

类型.CONV_UNSIGNED

将数据类型INTEGER,SIGNED转换为UNSIGNED

类型.CONV_SIGNED

将数据类型INTEGER,UNSIGNED转换为SIGNED类型. CONV_STD_LOGIC_VECTOR

将数据类型INTEGER,UNSIGNED,SIGNED,STD_LOGIC转换为STD_LOGIC_VECTOR

类型.

二、VHDL数据类型与数据对象第十八页,共40页。

数据对象常量信号变量(DataObjects)二、VHDL数据类型与数据对象第十九页,共40页。(1)常量

定义格式:Constant常量名称:数据类型:=给定值;常量通常来来定义延迟和功耗等参数。

注意!常数定义的同时进行赋初值。

常数可以在实体说明、结构体描述中使用。二、VHDL数据类型与数据对象第二十页,共40页。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;--必需定义+entityexam1is

port(ip:instd_logic_vector(3downto0);op:outstd_logic_vector(3downto0));endexam1;architecturem1ofexam1isconstantnum:integer:=6;beginop<=ip+num;endm1;二、VHDL数据类型与数据对象第二十一页,共40页。(2)信号定义格式Signal信号名称:数据类型[:=初始值];信号相当于电路内部元件之间的物理连线,因此信号的赋值有一定的延迟时间.二、VHDL数据类型与数据对象第二十二页,共40页。“信号”数据对象,代表电路内部信号或连接线路,其在元件之间起互连作用。注意!信号定义的时候尽管可以直接赋初值,但系统往往忽略。建议信号对象定义后再进行赋值。信号为全局量。在实体说明、结构体描述和程序包说明中使用。信号赋值的语法格式为:信号名<=表达式;如:SignalS1:Std_logic_vector(3Downto0);

S1<=“0000”;二、VHDL数据类型与数据对象第二十三页,共40页。(3)变量

定义格式Variable变量名称:数据类型[:=初始值];

变量只能用于“进程”

之中,变量的赋值是立即生效的,常用于高层次抽象的算法描述

当中。二、VHDL数据类型与数据对象第二十四页,共40页。“变量”数据对象,它用于对中间数据的临时存储,并不一定代表电路的某一组件。注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。建议变量对象定义后再进行赋值。变量为局部量。仅限于进程(Process)或子程序中使用。变量赋值的语法格式为:目标变量:=表达式;如:VariableS1:Std_logic_vector(3Downto0);

S1

:=“0000”;二、VHDL数据类型与数据对象第二十五页,共40页。信号和变量的比较

(1)信号和变量的对应关系不同:信号代表电路内部信号或连接线路;而变量则不是。

(2)信号和变量声明的位置不同:信号声明在子程序、进程的外部;而变量声明在子程序、进程的内部。

(3)信号为全局量,而变量只在定义它的域中才可见。因此,变量不能在两个进程之间传递信息。

(4)在一个进程中多次为一个信号赋值时,只有最后一个值会起作用;而变量则不同,每次赋值都会改变它的值。(5)赋值不同。在进程中,信号赋值只有在进程结束时起作用,而变量赋值是立即进行的。而且赋值符号不同:信号赋值为“<=”,变量赋值为“:=”。第二十六页,共40页。数据对象属性(1)数值类属性:(数组类型的数据对象)数值类属性有

’left,’right,’low,’high,’length。其中用符号

隔开对象名及其属性。

left表示数组的左边界;

right表示数组的右边界;

low表示数组的下边界;

high表示数组的上边界;

length表示数组的长度。第二十七页,共40页。如:SignalA:std_logic_vector(7downto0);SignalB:std_logic_vector(0to3);则这两个信号的属性值分别为:

A’left=7;A’right=0;A’low=0;A’high=7;A’length=8;B’left=0;B’right=3;B’low=0;B’high=3;B’length=4;数据对象属性第二十八页,共40页。(2)’event属性:

’event属性,它的值为布尔型,如果刚好有事件发生在该属性所附着的信号上(即信号有变化),则其取值为True,否则为False。

利用此属性可识别时钟信号的变化情况,即时钟是否发生。

数据对象属性第二十九页,共40页。例如:时钟边沿表示:

signalclk:instd_logic;If(clk’eventandclk=’1’)thenQ<=Q+1;

则clk’eventandclk=’1’表示时钟的上升沿。即时钟变化了,且其值为1。

clk’eventandclk=’0’表示时钟的下降沿。即时钟变化了,且其值为0。数据对象属性第三十页,共40页。例2:设计组合逻辑电路设计一个1bit全加器。输入X,Y,CI输出Z,CO第三十一页,共40页。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityfull_bit_adderisport(a,b,ci:instd_logic;y,cout:outstd_logic);endfull_bit_adder;第三十二页,共40页。architecturebh1offull_bit_adderisbeginy<=((nota)and(notb)andci)or((nota)and(b)and(notci))or((a)and(notb)and(notci))or((a)and(b)and(ci));cout<=(bandci)or(aandci)or(aandb);endbh1;第三十三页,共40页。architecturebh2offull_bit_adderisbeginy<=axorbxorci;cout<=(aandb)or(aandci)or(bandci);endbh2;configurat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论