工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilog演算子:合成に必須の算術・制御演算子

処理できないデータは無意味です。デジタル回路とコンピュータシステムには常に何らかの計算が必要です。合成ツールが適切なハードウェア要素を実現するためのVerilog演算子を見ていきましょう。

Verilog算術演算子

除算または剰余演算子の第2オペランドが0の場合、結果はXになります。累乗演算子のいずれかのオペランドが実数なら、結果も実数になります。累乗演算子の第2オペランドが0なら結果は1(a0)です。

演算子説明
a + baプラスb
a - baマイナスb
a * ba乗算b
a / ba除算b
a % baモジュロb
a ** baのb乗
module des;
reg [7:0] data1, data2;
initial begin
    data1 = 45; data2 = 9;
    $display ("Add + = %d", data1 + data2);
    $display ("Sub - = %d", data1 - data2);
    $display ("Mul * = %d", data1 * data2);
    $display ("Div / = %d", data1 / data2);
    $display ("Mod %% = %d", data1 % data2);
    $display ("Pow ** = %d", data2 ** 2);
end
endmodule

シミュレーションログ

ncsim> run
Add + = 54
Sub - = 36
Mul * = 149
Div / = 5
Mod % = 0
Pow ** = 81
ncsim: *W,RNQUIE: Simulation is complete.

Verilog関係演算子

関係演算子を含む式は、真なら1、偽なら0になります。いずれかのオペランドがXまたはZなら結果はX。関係演算子の優先順位は算術演算子より低く、すべての関係演算子は同じ優先順位です。

演算子説明
a < baはbより小さい
a > baはbより大きい
a <= baはb以下
a >= baはb以上

Verilog等価演算子

等価演算子は互いに同じ優先順位で、関係演算子より低い優先順位です。結果は真なら1、偽なら0。論理等価(==)または論理不等価(!=)のいずれかのオペランドがXまたはZなら結果はX。ケース等価演算子(===)またはケース不等価演算子(!==)を使うと、XとZを含めてマッチし、常に既知の値になります。

演算子説明
a === baとbが等しい(x,z含む)
a !== baとbが等しくない(x,z含む)
a == baとbが等しい(結果は未知の可能性)
a != baとbが等しくない(結果は未知の可能性)

Verilog論理演算子

論理積(&&)は両オペランドが真または非ゼロなら1。論理和(||)はいずれかのオペランドが真または非ゼロなら1。いずれかのオペランドがXなら結果もX。論理否定(!)は非ゼロ/真を0に、ゼロ/偽を1に変換し、XはXのまま。

演算子説明
a && baかつbが真なら真
a || baまたはbが真なら真
!a非ゼロをゼロに、逆も同様

Verilogビット演算子

この演算子は、一方のオペランドのビットと、他方の対応するビットを組み合わせて1ビットの結果を計算します。

&01xz
00000
101xx
x0xxx
z0xxx
|01xz
001xx
11111
xx1xx
zx1xx

Verilogシフト演算子

シフト演算子には2種類あります:

module des;
reg [7:0] data;
int i;
initial begin
    data = 8'h1;
    $display ("Original data = 'd%0d or 'b%0b", data, data);
    for (i = 0; i < 8; i +=1 ) begin
        $display ("data << %0d = 'b%b", i, data << i);
    end
    data = 8'h80;
    $display ("Original data = 'd%0d or 'b%0b", data, data);
    for (i = 0; i < 8; i +=1 ) begin
        $display ("data >> %0d = 'b%b", i, data >> i);
    end
    data = 8'h1;
    $display (" data >> 1 = 'b%b", data >> 1);
end
endmodule

シミュレーションログ

ncsim> run
Original data = 'd1 or 'b00000001
data << 0 = 'b00000001
data << 1 = 'b00000010
...
data >> 7 = 'b00000001
data >> 1 = 'b00000000
ncsim: *W,RNQUIE: Simulation is complete.

Verilog

  1. C#演算子完全ガイド:C#における演算子の包括的解説
  2. Verilogマスター:デジタル回路設計のための完全チュートリアル
  3. Verilog連結マスター:実践ガイド
  4. Verilog代入文の理解:種類、構文、ベストプラクティス
  5. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  6. Verilog関数のマスター:効率的なRTL設計のために
  7. Verilogタスクの理解:関数との違い、構文、使用法
  8. Verilogクロックジェネレータ:設計と実装ガイド
  9. Verilog数学関数のマスター:効率的なハードウェア設計のために
  10. Verilog $timeformatのマスター:精度と表示制御
  11. 任意のスコープでのVerilog timescale理解と表示