4数据类型数据对象

更新时间:2023-08-14 22:16:01 阅读量: 人文社科 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ξ4 VHDL语言的数据类型及运算操作符

常量 数据对象 变量 信号 标准数据类型

数据类型

自定义数据类型算术

运算操作符

逻辑 关系 并置

4.1 数据对象(Data Object)及其分类凡是可以赋予一个值的对象称为数据对象。类(CLASS) 数据对象 数据类型(DATA TYPES)、 名字(NAME)。 类(CLASS):信号( signal ),变量( variable ),常量 ( constant ) 类型(DATA TYPES):位、位矢量、std、整数、实数等

例: 类 对象 数据类型 signal a: bit;

数据对象的分类:信号、变量、常数。 常数:表示物理设计中那些不变的量 信号:表示物理设计中的某一条硬件连接线,也可 以表示寄存器。 变量:电路暂存某些值的载体

数据对象的特征:允许被赋值、具有一定的数据类型 对象仅在其说明区域可见,区域外不可见

例:作用域为整个构造体的客体的定义ARCHITECTURE rtl Of name IS SIGNAL a:BIT; BEGIN …………………………. END rtl;

在构造体中的任何位置,都可以使用这个信号a。

4.1.1 常数:在设计描述之中不会变化的值 物理含义:可以代表数字电路中的电源、接地、计数 器模值等

CONSTANT 常数名:数据类型:=表达式; 常数所赋的值应和所定义的数据类型一致 例:CONSTANT Vcc:real:=“0101”;

错误,因为所赋的值与所定义的数据类型不一致, 一个为实数,一个为位矢量。例:CONSTANT Vcc:real:=5.0;

4.1.2 变量(variable)

变量仅仅用于进程和子程序,是一个局部量,作用范 围仅限于定义该变量的模块。 说明格式如下: VARIABLE 变量名:数据类型:=表达式; 变量的赋值采用“:=”,赋值后立即生效。 变量可以在定义时被赋初值;也可以在进程中被赋值 例:变量在定义时赋值 VARIABLE B:INTEGER:=1;

例:变量在进程中被赋值PROCESS(……) variable A:BIT_VECTOR; BEGIN …………. A:=”01010”; …………. END PROCESS;

对于综合来说,变量通常用于计算的目的,但

它的综合比较难于定义,或者综合后占用大量的资源。因此,在设计中尽量避免采用变量。除非 在那些我们有信心可预言结果的场合。

4.1.3 信号(signal) 信号能够代表连线,是电子电路内硬件连接的抽象 声明内部信号 没有数据流动方向 SIGNAL 信号名:数据类型 :=表达式; 例:SIGNAL COUNT:BIT:= 0 ; 信号在定义时赋初值,用“:=”代入符 在程序中,信号的赋值采用“<=”代入 符

例:SIGNAL S1,S2:STD_LOGIC; …… S2<= 1 ; S1<=S2; 信号的代入可以附加延时 例如:signal count:bit:= 0 after 10ns; 信号可以在程序中被重新赋值

4.2 运算操作符 按优先级的顺序依次(低到高)为:

逻辑运算符(Logical) 关系运算符(Relational)

并置运算符(Concatenation) 算术运算符(Arithmetic)。

要求操作数的类型必须和操作符所要求的类型一致。

4.2.1 逻辑运算符(Logical)

1、逻辑运算符(Logical)取反 NOT 与 AND 或 OR 与非 NAND 或非 NOR 异或 XOR

2、逻辑运算符的操作对象“STD_LOGIC”; “BIT”; “STD_LOGIC_VECTOR”; “布尔量”(Boolean)

没有优先级差别,按自左至右的优先级顺序运算。例:下式去掉括号就会产生错误: X<=(A AND B) OR (NOT C AND D); 去掉括号: X<=A AND B OR NOT C AND D;

以上两式的运算次序是完全不同的。

逻辑运算符常用于书写逻辑表达式

例:entity and2 is port(a,b,c,d:in bit; q:out bit); end and2;architecture rtl of and2 is begin q<=(a and b) or (c nand d); end rtl;

4.2.2 关系运算符(Relational)

1、关系运算符( Relational )等于 = 不等于 /= 小于 < 小于等 于 <= 大于 > 大于等 于 >=

2、操作对象 1)“=”和“/=”适用于所有类型的数 据。 2)其它关系运算符则适用于 “STD_LOGIC”; “INTEGER”; “REAL”; “STD_LOGIC_VECTOR”

比较时,按自左至右的比较结果作为运算结果。 例:下式比较就会产生错误 X<=“1010”;——10 Y<=“111”;——7 IF (X>Y) THEN… 上式比较结果为Y>X。显然错误。

关系运算符常用于条件的判断 例:最大值选取,输入a(4),b(4),输出q(4) library ieee; use ieee.std_logic_1164.all;entity max is port(a,b:in std_logic_vector(3 downto 0); q:out std_logic_vector(3 downto 0)); end max;

architecture rtl of max is begin q<=a when (a>b) else b; end rtl;

4.2.3 并置运算符(Concatenation)

并置运算符&:用于位的连接 操作对象 “STD_LOGIC”;“BIT”; “STD_LOGIC_VECTOR”; “BIT_VECTOR”; “STD_ULOGIC_VECTOR”;

例:a<=”1010”; b<=”1001”; c<=a & b 结果为:c=”10101001”。

4.2.4 算术运算符(Arithmetic)加 + 减 — 低 高 乘 * 除 / 求模 求余 正 MO D RE M + 负 — 指数 绝 对 值 ** ABS

(优先级顺序)

对std_logic_vector类型的对象进行算术运算时,要 用“use ieee.std_logic_unsigned”提前声明包集合。 该类型只适用于“*”操作,整数型integer适用于所 有。

例:利用算术运算符设计一个矢量乘法器,输入 a(4),b(4),输出q(4) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mult is port(a,b:in std_logic_vector(3 downto 0); q:out std_logic_vector(7 downto 0)); end mult; architecture rtl of mult is begin q<=a * b; end rtl;

本文来源:https://www.bwwdw.com/article/zz5j.html

Top