《VHDL 数字电路设计教程》电工版/第4章:运算操作符和属性

4.1    运算操作符

    ①赋值运算符

    <=    用于对SIGNAL赋值。

    :=    用于对VARIABLECONSTANTGENERIC赋值,也可用于赋初始值

    =>    给矢量的某些位赋值,或对某些位之外的其他位(常用OTHERS表示)赋值。

w <= (0 => '1', OTHERS => '0');
--最低位是1,其他位是0。

    ②逻辑运算符

    操作数必须是BITSTD_LOGICSTD_ULOGIC类型或它们的扩展(BIT_VECTORSTD_LOGIC_VECTORSTD_ULOGIC_VECTOR,逻辑运算时各位分别进行逻辑运算)。

    ·NOT——取反

    ·AND——与

    ·OR——或

    ·NAND——与非

扫描二维码关注公众号,回复: 1848507 查看本文章

    ·NOR——或非

    ·XOR——异或

    ·XNOR——同或

    从上至下,优先级依次递减

    ③算数运算符

    +    加        

    -    减        

    *    乘        

    /    除        

    **    指数运算        

    MOD    取模        

    REM    取余        

    ABS    取绝对值

    上述运算符中,“+”、“-”和“*”是可以综合成逻辑电路的,对于“/”,只有在除数为2的n次幂时才可以综合,相当于将被除数右移n位。对于指数运算“**”,只有当底数和指数都是静态数值(CONSTANTGENERIC参数)时才可以综合。

    下述3个运算符(MOD、REM和ABS)都是不可综合的,其中注意:

    y MOD x 运算结果是y除以x所得的余数,运算结果通过信号x(即正负号与x相同)返回;

    y REM x  运算结果是y除以x所得的余数,运算结果通过信号y(即正负号与y相同)返回;

    两个异号整数取模取值规律 (当是小数时也是这个运算规律),先将两个整数看作是正数,再作除法运算,能整除时,其值为0;不能整除时,其值=除数×(整商+1)-被除数,符号根据上述规律确定。

    ④关系运算符

    =    /=    <    >    <=    >=

    关系运算符左右两边的操作数的数据类型(适用于所有数据类型)必须相同

    ⑤移位操作符

    语法结构:<左操作数><移位操作符><右操作数>

    其中,左操作数必须是BIT_VECTOR,右操作数必须是INTEGER类型(可带正负号)。

    

    ⑥并置运算符

    用于位的拼接,其操作数是支持逻辑运算的任何数据类型。

    例 

z <= x & "1100";
z = ('1','1','1','0','0');

4.2    属性

    ①数值类属性(可综合

    d'LOW    返回数组索引的下限值

    d'HIGH    返回数组索引的上限值

    d'LEFT    返回数组索引的左边界值

    d'RIGHT    返回数组索引的右边界值

    d'LENGTH    返回矢量的长度值

    d'RANGE    返回矢量的位宽范围

     d'REVERSE_RANGE    按相反的次序,返回矢量的位宽范围

    例

SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);

    则有:d'LOW=0,d'HIGH=7;d'LEFT=7,d'RIGHT=0;d'LENGTH=8;d'RANGE=(7 DOWNTO 0),

d'REVERSE_RANGE=(0 TO 7)。

    ②信号类属性(可综合

    s'EVENT    如果s的值发生变化,则返回值为布尔量TRUE,否则返回FALSE

    s'STABLE    如果s保持稳定,没有发生变化,则返回值为布尔量TRUE,否则返回FALSE

例    

如果信号clk出现了上升沿,那么将返回TRUE,即括号中的返回值为TRUE。

IF (clk'EVENT AND clk = '1')...
IF (NOT clk'STABLE AND clk = '1')...
IF RISING_EDGE(clk)...

4.3    自定义属性

    第一步,属性声明:

ATTRIBUTE attribute_name: attribute_type;

    其中,attribute_type可以是任何数据类型。

    第二步,进行属性描述:

ATTRIBUTE attribute_name OF target_name:class IS value;

    其中,class可以使数据类型、信号、变量、函数、实体或构造体等。

4.4    通用属性语句

    GENERIC(属性)语句提供了一种指定常规参数的方法,所指定的参数是静态的。

    GENERIC(属性)语句必须在ENTITY中进行声明,且其指定的参数是全局的。其语法结构如下:

GENERIC (parameter_name1 : parameter_type1 := parameter_value1;
         parameter_name2 : parameter_type2 := parameter_value2;
          ...);


猜你喜欢

转载自blog.csdn.net/jackiezhang1993/article/details/79738229