• [转帖]第5节 Verilog的运算符


    来源:http://www.eefocus.com/html/08-01/31942s.shtml

    第5节 Verilog 运算符
     

    Verilog 运算符



    • Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。
    • 当一个负数赋值给无符号变量如reg时,Verilog自动完成二进制补码计算。

    算术操作符
       + 加                                                                             
       - 减
       * 乘
       / 除
       % 取模

        • 将负数赋值给reg或其它无符 号变量时,补码。
        • 如果操作数的某一位是x或z,则结果为x
        • 在整数除法中,余数舍弃
        • 模运算中使用第一个操作数的符号

    位操作符
       ~ not
       & and
       | or
       ^ xor
       ~ ^ xnor
       ^ ~ xnor
        •   按位操作符对矢量中相对应位运算。
           regb=4'b1010
           regc=4'b1x10
           num=regb&regc=1010;
        •   位值为x时不一定产生x结果。
        •   当两个操作数位数不同时,位数少的操作数零扩展到相同位数。
            a = 4'b1011; b = 8'b01010011;
            c = a | b; // a扩展为 8'b00001011

    逻辑操作符
       ! not
       && and
       || or
        • 逻辑操作符的结果为一位1,0或x;
        • 逻辑操作符只对逻辑值运算;
        • 如操作数为全0,则其逻辑值为false;
        • 如操作数有一位为1,则其逻辑值为true;
        • 若操作数只包含0、x、z,则逻辑值为x。

    一元归约操作符
        & and
       | or
       ^ xor
       ~ ^ xnor

       ^ ~ xnor
        • 归约操作符的操作数只有一个。
        • 对操作数的所有位进行位操作。
        • 结果只有一位,可以是0, 1, X。

    移位操作符
        >> 逻辑右移:右移指定位数
        << 逻辑左移:左移指定位数
        • 移位操作符对其左边的操作数进行指定位数的向左或向右移位操作;
        • 移位位数是无符号数;
        • 若第二个操作数是x或z则结果为x;
        • 在赋值语句中,如果右边的结果位宽大于左边,则把最高位截去;位宽小于左边,则用零进行扩展。

    关系操作符
       > 大于
       < 小于
       >= 大于等于
       <= 小于等于
        • 关系运算的结果是1比特,1’b1、1’b0或1’bx。


    相等操作符
    (1)
        
        2‘b1x==2’b0x
       值为0,因为不相等
       2‘b1x==2’b1x
       值为x,因为可能不相等,也可能相等
        • 其结果是1’b1、1’b0或1’bx。
        • 如果左边及右边为确定值并且相等,则结果为1。
        • 如果左边及右边为确定值并且不相等,则结果为0。
        • 如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。
        • ! = 不等,结果与 = = 相反。

     

    (2)
        
       2‘b1x===2’b0x
       值为0,因为不相同
       2‘b1x==2’b1x
       值为1,因为相同
        • 其结果是1’b1、1’b0或1’bx。
        • 如果左边及右边的值相同(包括x、z),则结果为1。
        • 如果左边及右边的值不相同,则结果为0。
        • ! = = 不相同,结果与 === 相反。
        • 综合工具不支持。

     

    条件操作符
    (1)

    (2)
      
    条件操作符的语法为:
       <LHS> = <条件> ? <true_expression>:<false_expression>
       意思是:如果条件TRUE,则 LHS=true_expression,否则LHS = false_expression
        registger = condition ? true_value:false_value;
       上式中,若condition为真则register等于true_value;若condition为假则register等于false_value。如果条件值不确定,且true_value和     false_value不相等,则输出不确定值。
       例如:assign out = (sel == 0) ? a : b;
       若sel为0则out =a;若sel为1则out = b。如果sel为x或z,若a = b =0,则out = 0;若a≠b,则out值不确定。

    级联操作符
       { } 级联:
       可以从不同的矢量中选择位并用它们组成一个新的矢量。用于位的重组和矢量构造。
       级联时不限定操作数的数目。在操作符符号{ }中,用逗号将操作数分开。

    复制
       { {} } 复制:复制一个变量或在{ }中的值,前两个{ 符号之间的正整数指定复制次数。

       在级联和复制时,必须指定位数,否则将产生错误。
       错误的例子:
       a[7:0] = {4{ ´b10}};
       b[7:0] = {2{ 5}};
       c[3:0] = {3´b011, ´b0};

     

    来自: http://hi.baidu.com/%D6%EC%CF%E9/blog/item/5b5fc833015ad049ac4b5fb5.html

    编辑器加载中...

  • 相关阅读:
    WinSCP 与 Putty 中文显示乱码解决方法
    centos 6.2上oracle 11g的远程安装
    CentOs 6.3_64静默安装oracle11g_r2
    IP地址修改后ORACLE不能使用问题
    linux查看本机IP、gateway、dns
    linux启动SSH及开机自动启动
    linux下如何从自动获取ip转到手动配置ip
    Linux系统(CentOS 6.4)的NTFS驱动NTFS3g的安装和配置
    正则表达式——去除文本中的非汉字(VB2005)
    遍历排列的实现——VB2005
  • 原文地址:https://www.cnblogs.com/zlh840/p/verilog.html
Copyright © 2020-2023  润新知