第三章 数据对象和数据类型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.2 数据类型
一、预定义的数据类型
1、布尔类型(boolean) 取值:true,false 运算:逻辑运算 2、位类型(bit): 取值:取‘0‟和‘1‟两个值 运算:逻辑运算 例:signal tp:bit Tp<=‟0‟;
3、位矢量(bit_vector):位矢量 注:定义位矢量时,要注意位矢量的宽度和次序 赋值时可整体赋值,也可每1位单独赋值 运算:位矢量和位类型的数据只能进行逻辑运算
conv_std_logic_vector(p,b):
将integer,unsigned,signed,std_logic的操作数
p转换为位宽为b的std_logic_vector类型.
3.3 数据类型间的转换(见书)
conv_integer(p): 将integer,unsigned,signed,std_logic或者 std_ulogic的操作数p转换为integer类型. 注意:不包含std_logic_vector
conv_unsigned(p,b): 将integer,unsigned,signed,或者std_ulogic的 操作数p转换为位宽为b的unsigned类型. conv_signed(p,b): 将integer,unsigned,signed,或者std_ulogic的 操作数p转换为位宽为b的signed类型.
三、变量
变量仅用于局部电路的描述,是临时存放数据的 单元,变量只能在进程,函数等中使用。 格式:VARIABLE 变量名:数据类型【:=初值】; 例:variable c,d:bit 变量的赋值:用“:=”对变量进行赋值,对变量 赋
值是瞬时完成的,只是在局部进程和函数,过程中 使用 例:c:=‟1‟; D:=‟0‟;
y<=”ZZZZ”;
y<=(„0‟,‟1‟,‟0‟,‟1‟); y<=(others=>‟0‟); y<=(1=>‟0‟,others=>‟1‟);
3、整数(integer)
取值:提供最大32位的整数,整数范围( 2 否则综合器默认的位数是32位。
运算:整数类型只能进行算术运算 例:signal d:integer range 0 to 15; Signal f:integer; d<=15(综合后位F,4位);
3、子类型 在原有的数据类型的基础上加一些约束条件,可
定义该数据类型的子类型。
格式:subtype 子数据类型 is 母数据类型 范围
例:subtype mylogic is integer range 0 to 10;
Subtype mystate is state range s0 to s1;
例:constant A1 :bit:=‟1‟; constant B1 :bit_vector(3 downto 0):=“1010”;
二、信号
信号代表电路中的“硬”连线,即用于电路的 输入/输出端口,也用于电路内部各元件之间的互联。 格式:signal 信号名:数据类型[:=初值];( 初值可省略) 例:signal a,b:bit; 信号的赋值:用“<=“符号对信号进行赋值 例:a<=‟1‟; b<=‟0‟; 信号赋值的特点:信号赋值是有延时的;且信号 赋值是并发的;信号是全局的,在整个结构体中全 局使用
第3章 数据对象和数据类型
3.1 数据对象
数据对象:通俗理解,数据对象是存放数据的
容器,在vhdl中数据对象有3种
(1)Байду номын сангаас量(constant)
(2)信号(signal)
(3)变量(variable)
一、常量 用来确定默认值,相当于电路中的固定电平
格式:constant 常量名:数据类型:=常量值;
temp<=temp+1(按照5为2进制数相加, 可加到32)
4、 标准逻辑位类型(std_logic) 标准逻辑位矢量(std_logic_vector) 取值:具有8种不同的值,为什么引入8值, 主要是考虑两个及两个以上的电路输出 端如连在同一节点上,此点的电平与电 路驱动能力有关,驱动能力强的输出可 将节点电平强行拉高或是拉低,因此建 立多值系统是为了对这种情况进行分析。
Signal data1:my_integer;
2、用户定义的枚举类型 数据类型的值由指定的枚举值确定 格式:type 数据类型 is (枚举值) 例:type mylogic is („0‟,‟1‟,‟Z‟) Type state is (s0,s1,s2); Signal ps:state; Ps<=s0; 用户定义的数据类型可存放在自定义的程 序中,也可在主程序中直接定义
31
~ 231 1
)
注:定义整数时,应制定整数的范围,便于综合,
f<=15(综合后位0000000F)
注意:定义整数指定了范围,也就是制定了 定义整数的二进制位数,当自身加一时,整 数值可超限,但是在对其进行具体的赋值 时,不可超限 例:signal temp;integer 0 to 26 Temp<=27(错误)
5、有符号数(signed)和无符号数 (unsigned) 取值:定义和std_logic__vector相同,但支持 算术运算。 运算:算术运算 例:signal aa:signed(7 downto 0); Signal bb:unsigned(7 downto 0); aa<=”11111111”; bb<=”11111111”;
‘x„ 强不确定值 ‘0„强0 „ 1„强1 „Z„高阻 ‘W‟弱不确定值 ‘L‟弱0 „H‟弱1 „-‟不能出现的情况 实际中只有0.1,Z能被综合 运算:位矢量是位类型数据的集合,同样要注意数 据的宽度和次序,而且只能进行逻辑运算 8值:
例: signal aa:std_logic_vector(3 downto 0); aa<=“zzzz”; aa<=“1011”; aa(3)<=„1‟;
例:signal data:bit_vector(3 downtown 0);
Signal y,temp:bit_vector(0 to 3);
data<=”1110”(data(3)=‟1‟,data(2)=‟1‟,data(1)=‟1‟
data(0)=‟0‟)
单独1位赋值:data(3)<=„0‟;
00H~7FH 80H~FFH
有符号数 0~127 -128~-1
无符号数 0~127 128~255
二、用户定义的数据类型(根据用户的需求, 重新定义新的数据类型) 1、用户定义的整数类型
格式:type 数据类型 is 范围
例:type my_integer is range 0 to 100