=“是矢量型的数据对象的部分进行赋值。以上赋值举例如下:**--属性赋值操作**generic(data_bus:integer:=8);**--_vhdl <=">
赞
踩
作用在于更新被赋值数据对象的值,数据对象主要是指信号和变量。VHDL赋值操作符也有信号赋值与变量赋值的区别,分别是:
以上赋值举例如下:
**--属性赋值操作** generic(data_bus:integer:=8); **--常量赋值操作** constant address_bus:integer range 1 to 7:=7; **--信号初始化赋值操作** signal datasum:std_logic_vector(7 downto 0):="00000000"; **--变量初始化赋值操作** variable temp:integer range 0 to 63:=0; variable seg:std_logic_vector(7 downto 0); **--信号赋值操作** datasum<="11000011"; **--变量赋值操作** temp:=23; **--信号部分赋值操作** signal datasum:std_logic_vector(7downto 0); datasum<=(7=>'0',6=>'1',others=>='0'); **--变量部分赋值操作** variable datasum:std_logic_vector(7 downto 0); datatemp:=(7 =>'0',6=>'1'.others=>'0');
VHDL支持7种逻辑操作符的运算,这些运算操作符所支持的常用数据类型有bit、bit_vector、std_logic、std_logic_vector等。
连续逻辑操作符
当语句中出现连续多个逻辑操作符时,为了提高VHDL程序可读性与正确性,建议用括号加以分隔,如下:
dout<=not a and b xor c;--此语句有歧义
dout<=(not a) and (b xor c);--加上括号分隔更加清晰
VHDL算术操作符属于算法级的操作,只能操作相应的数据类型,而且有些是不可综合的。常用算术操作符主要有以下8种:
可以应用算术操作符的数据类型有integer、signed、unsigned和real。其中,real类型是不可综合的。如果VHDL程序引用ieee库的std_logic_signed或是std_logic_unsigned,则std_logic_vector类型的数据对象也可以应用算术操作符。由于算术操作符是算法级别的,可综合性不同则综合器就不同,一般有以下规则:
关系操作符运算结果都是布尔类型,要么为真(true)要么为假(false),对相同类型数据的对象进行数据大小比较。
使用注意问题:
移位操作符是对矢量数据对象进行移位操作。
位移操作符的使用格式如下:
操作数 移位操作符 进行移位的位数
假设 data=“11001010"举例如下:
data sll 1 --操作后 data="10010100"
data srl 1 --操作后 data="01100101"
data sla 1 --操作后 data="10010100"
data sra 1 --操作后 data="11100101"
data rol 1 --操作后 data="10010101"
data ror 1 --操作后 data="01100101"
使用移位操作符的操作数据类型必须是bit、boolean的数组或是std_logic_vector或是integer数据类型。
连续操作符(”&“)用不同的位来产生一个位数据更多的矢量。连续操作符可用于两个位的连接,也可以用于两个矢量的连接,如下:
signal ba,bb:std_logic;
signal da,db:std_logic_vector(1 downto 0);
signal data:std_logic_vector(3 downto 0);
da<=ba& bb;
db<=ba&'1';
data<=da&db;
data<=ba&'1'&da;
操作符优先级一般指的是同一语句中的优先级,当然括号也可以改变语句中操作的先后顺序。
对于预定义操作符所作用操作数的数据类型必须一致。有时为了方便不同让数据类型的数据对象进行操作,就需要对操作符重新定义,这就是重载。
function "+"(1:std_logic;r:integer) return integer is
variable sum:integer:=0;
begin
if 1='1' then
sum:=r;
end if;
return sum;
end;
--有上面对”+“的重载函数的定义,就可进行下面的操作
variable temp:std_logic;
variable data:integer;
variable sum:integer;
sum:=temp+data;--两个不同类型的数据对就可以进行相加操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。