一般的な関係演算子(シフト演算子)

EDITORIAL言葉

シフト演算は、ビットの指定された数のオペランドを左オペレータを用いて、左または右、バイナリ演算子である自由な位置を補充する0。右側のオペランドはXまたはZである場合、結果は未知の変位Xです。事業者がそれにこの機能を注意を払う必要があることに加えて、それはアイドルビットはゼロで埋め、それは限りシフトしてきた、そして最終的にはすべてがゼロになるように、関係なく、元の値のどのくらいの、2進数を言うことです。

シフト演算子の例

Verilog HDLのは、2つのシフト演算子があります <<(左論理シフト)>>と(論理右シフト)。次のように書かれた例スリーパー翼の兄弟は、次のとおりです。

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

    *エンジニア:    ドリーム・ブラザーウイング

    * QQ:761664056

    *モジュール機能:シフト演算子モジュール

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

01   モジュールの  シフト CLK RST_N B )。

02   入力  CLK

03   入力  RST_N

04

05   出力 REG  [ 3 0 ]

06   出力 REG  [ 3 0 ] B

07

08   常に(@ posedgeの  CLK または negedgeの  RST_N

09       始めます

10           もし(! RST_N

11               始めます

12 <= 1

13件のB <= 4

14               終了 

15            

16               始めます

17                  a<=(a<<1);

18                  b<=(b>>1);

19              end 

20      end 

21  endmodule

编写测试代码如下

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

    *   Engineer        :   梦翼师兄

    *   QQ              :   761664056

    *   E_mail          :   [email protected]

    *   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。所以移位运算符用在计算中,代替乘法和除法。尤其是除法,使用移位的方式,可以节省资源。但使用的前提是数据位宽要进行拓展哦,不然就全部是零了。

 

おすすめ

転載: www.cnblogs.com/mengyi1989/p/11515977.html