• 常见的关系运算符(移位运算符)


    写在前面的话

    移位运算符是双目运算符,将运算符左边的操作数左移或右移指定的位数,用0来补充空闲位。如果右边操作数的值为X或Z,则移位结果为未知数X。在应用以为运算符的时候一定要注意它的这个特性,那就是空闲位用0来填充,也就是说,一个二进制数不管原数值是多少,只要一直移位,最终全部会变为0。

    移位运算符实例

    Verilog HDL 中有两种移位运算符<<(逻辑左移)和>>(逻辑右移)。梦翼师兄编写实例如下:

        /****************************************************          

        *   Engineer        :   梦翼师兄

        *   QQ               :   761664056

        *   The module function:移位运算符模块

    *****************************************************/

    01  module shift(clk,rst_n,a,b);

    02  input clk;

    03  input rst_n;

    04

    05  output reg [3:0]a;

    06  output reg [3:0]b;

    07

    08  always@(posedge clk or negedge rst_n)

    09      begin

    10          if(!rst_n)

    11              begin

    12                  a<=1;

    13                  b<=4;

    14              end 

    15          else 

    16              begin

    17                  a<=(a<<1);

    18                  b<=(b>>1);

    19              end 

    20      end 

    21  endmodule

    编写测试代码如下

        /****************************************************          

        *   Engineer        :   梦翼师兄

        *   QQ              :   761664056

        *   E_mail          :   zxopenwjf@126.com

        *   The module function:移位运算符测试模块

        *****************************************************/

    01  `timescale 1ns/1ps  

    02  module tb;

    03  reg clk;

    04  reg rst_n;

    05

    06  wire [3:0]a;

    07  wire [3:0]b;

    08

    09  initial

    10      begin

    11          clk=0;

    12          rst_n=0;

    13          # 1000.1 rst_n=1;

    14      end 

    15      

    16  always # 10 clk=~clk;   

    17      

    18  shift shift(

    19      .clk(clk),

    20      .rst_n(rst_n),

    21      .a(a),

    22      .b(b)

    23   );

    24

    25  endmodule 

    查看仿真波形如下

    从仿真图,可以看出,每次a都向左边移动移位,后面补充0,直到把逻辑1溢出,后面就一直为0了。每次b都向右边移动移位,前面补充0,直到把逻辑1溢出,就一直为0了。

    总结:移位运算符的使用时,左移一位可以看成是乘以2,右移一位可以看成是除以2。所以移位运算符用在计算中,代替乘法和除法。尤其是除法,使用移位的方式,可以节省资源。但使用的前提是数据位宽要进行拓展哦,不然就全部是零了。

  • 相关阅读:
    Linux(Unix)时钟同步ntpd服务配置方法(转载)
    Linux SSH Publickey登录!
    三个最短路算法
    三个最短路算法
    最大子列和问题
    哈密尔顿环
    最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
    最小生成树应用解(超时)蓝桥杯2015初赛]灾后重建
    c++11的记录
    最大子列和问题
  • 原文地址:https://www.cnblogs.com/mengyi1989/p/11515977.html
Copyright © 2020-2023  润新知