ξ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;
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科4数据类型数据对象全文阅读和word下载服务。
相关推荐: