[Verilog]Verilogのビット接合演算子{}


Verilogのビット接合演算子{}
 
引用:Verilogでは、複数bit(123 bitなど)の変数にどのように値を付けますか?123 bitを連続的に書く1には及ばないでしょうか?16進数に換算して表しますか?1230 bitならどうしますか?この場合、ビットパッチ演算が必要です.
 
一、Verilogのビット接合演算子
Verilog HDLとC言語は似ていますが、Verilogを学ぶ過程で、つなぎ合わせ演算子{}など、Cとは全く異なる文法に遭遇しました.注意:この{}の使用はC言語とは少しも関係ありません.Verilog言語はコードブロックをbegin-endで表します.
1.2、ビット接合の定義
ビット接合演算子{}は、2つ以上の信号を接合するために使用され、1つの全体の信号、例えば1つのビットフルアダプタが、キャリー出力と結果を接合することができることを示す.
  • 例えば加算器:
  • module fulladder(a, b, cin, sum, cout);
      input a, b, cin;
      output sum, cout;
    
      assign {cout, sum} = a + b + cin;    //            
    
    endmodule
  • は、a+b+cinがオーバーフロービットを生成すると、ちょうど接合に関与するcoutによって受信されるため、式を簡略化する役割を果たす
  • である.
     
  • は、さらに、例えばシフトレジスタにおいて、
  • という部分がある.
    //      store[7:0]
    store <= {0, store[7:1]};
  • 上のコードは0とstoreの左側7ビットを接合することによって右に1ビットシフトする操作則storeの値の変化を実現した:
  • 二、テクニックと注意事項
    2.1、繰り返し数字法を用いて綴り式の書き方を簡略化する
  • 例えば4 bitを表すw
  • {4{w}} <=> {w, w, w, w}

     
  • ネスト方式を用いて書く
  • を簡略化する.
    {a, {3{b, c}}} <=> {a, b, c, b, c, b, c}

    2.2、ビット接合演算子の使用に関する注意:
  • ビットの結合式では、各要素の特定のビット数を指定することが望ましい.そうでない場合、デフォルトは32ビットのバイナリ数
  • である.
     
    三、パラメータでビット幅を指定する
    localparam    MEM_DUMMY_BIT    =  1024;
    
    assign l1_evt_mem_dummy_data = {{(MEM_DUMMY_BIT){1'b0}}, l1_evt_mem_di};

     
    四、参考文献
    4.1、参考リンク:Link