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

Verilog 演算子

処理できないデータはまったく役に立ちません。デジタル回路やコンピューター システムでは、常になんらかの計算が必要になります。合成ツールが適切なハードウェア要素を実現できるようにする Verilog の演算子のいくつかを見てみましょう。

Verilog 算術演算子

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

演算子 説明
a + b プラスb
a - b a マイナス b
a * b a に b を掛けたもの
a / b a 割る b
a % b a modulo b
a ** b a の b 乗

算術演算子の使用例を以下に示します。

  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  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 a 未満 b
a> b b より大きい
a <=b b 以下
a>=b b以上のa
  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  data2;
  
  initial begin
    data1 = 45;
    data2 = 9;
    $display ("Result for data1 >= data2 : %0d", data1 >= data2);
    
    data1 = 45;
    data2 = 45;
    $display ("Result for data1 <= data2 : %0d", data1 <= data2); data1 = 9; data2 = 8; $display ("Result for data1 > data2 : %0d", data1 > data2);
    
    data1 = 22;
    data2 = 22;
    $display ("Result for data1 < data2 : %0d", data1 < data2);
    
  end
endmodule

  
シミュレーションログ
ncsim> run
Result for data1 >= data2 : 1
Result for data1 <= data2 : 1 Result for data1 > data2 : 1
Result for data1 < data2 : 0
ncsim: *W,RNQUIE: Simulation is complete.

Verilog 等値演算子

等値演算子はそれらの間で同じ優先順位を持ち、関係よりも優先順位が低くなります オペレーター。結果は、真の場合は 1、偽の場合は 0 です。論理等価 (==) または論理不等価 (!=) のオペランドのいずれかが X または Z の場合、結果は X になります。大文字と小文字の等価演算子 (===) または大文字と小文字の不等価演算子を使用できます。 (!==) X と Z を含めて一致し、常に既知の値を持ちます。

演算子 説明
a ===b x と z を含む b と等しい a
a !==b a が b と等しくない (x と z を含む)
a ==b a が b と等しい、結果が不明な場合がある
a !=b a が b と等しくないため、結果が不明になる可能性があります
  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  data2;
  
  initial begin
    data1 = 45;     data2 = 9;      $display ("Result for data1(%0d) === data2(%0d) : %0d", data1, data2, data1 === data2);
    data1 = 'b101x; data2 = 'b1011; $display ("Result for data1(%0b) === data2(%0b) : %0d", data1, data2, data1 === data2);
    data1 = 'b101x; data2 = 'b101x; $display ("Result for data1(%0b) === data2(%0b) : %0d", data1, data2, data1 === data2);
    data1 = 'b101z; data2 = 'b1z00; $display ("Result for data1(%0b) !== data2(%0b) : %0d", data1, data2, data1 !== data2);
    data1 = 39;     data2 = 39;     $display ("Result for data1(%0d) == data2(%0d) : %0d", data1, data2, data1 == data2);
    data1 = 14;     data2 = 14;     $display ("Result for data1(%0d) != data2(%0d) : %0d", data1, data2, data1 != data2);  
  end
endmodule

  
シミュレーションログ
ncsim> run
Result for data1(45) === data2(9) : 0
Result for data1(101x) === data2(1011) : 0
Result for data1(101x) === data2(101x) : 1
Result for data1(101z) !== data2(1z00) : 1
Result for data1(39) == data2(39) : 1
Result for data1(14) != data2(14) : 0
ncsim: *W,RNQUIE: Simulation is complete.

Verilog 論理演算子

両方のオペランドが true または非ゼロの場合、論理積 (&&) の結果は 1 または true になります。論理和 (||) の結果は、オペランドのいずれかが真またはゼロ以外の場合、1 または真になります。オペランドのいずれかが X の場合、結果も X になります。論理否定 (!) 演算子は、ゼロ以外または真のオペランドを 0 に変換し、ゼロまたは偽のオペランドを 1 に変換しますが、X は X のままです。

演算子 説明
a &&b and の場合に true と評価されます bは真です
a || b またはの場合に真と評価されます bは真です
!a ゼロ以外の値をゼロに、またはその逆に変換します
  
  
module des;
  reg [7:0]  data1;
  reg [7:0]  data2;
  
  initial begin
    data1 = 45;     data2 = 9; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 0;      data2 = 4; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 'dx;    data2 = 3; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 'b101z; data2 = 5; $display ("Result of data1(%0d) && data2(%0d) : %0d", data1, data2, data1 && data2);
    data1 = 45;     data2 = 9; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 0;      data2 = 4; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 'dx;    data2 = 3; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 'b101z; data2 = 5; $display ("Result of data1(%0d) || data2(%0d) : %0d", data1, data2, data1 || data2);
    data1 = 4;                 $display ("Result of !data1(%0d) : %0d", data1, !data1);
    data1 = 0;                 $display ("Result of !data1(%0d) : %0d", data1, !data1);    
  end
endmodule

  
シミュレーションログ
ncsim> run
Result of data1(45) && data2(9) : 1
Result of data1(0) && data2(4) : 0
Result of data1(x) && data2(3) : x
Result of data1(Z) && data2(5) : 1
Result of data1(45) || data2(9) : 1
Result of data1(0) || data2(4) : 1
Result of data1(x) || data2(3) : 1
Result of data1(Z) || data2(5) : 1
Result of !data1(4) : 0
Result of !data1(0) : 1
ncsim: *W,RNQUIE: Simulation is complete.

Verilog ビット演算子

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

& 0 1 x z
0 0 0 0 0
1 0 1 x x
x 0 x x x
z 0 x x x
| 0 1 x z
0 0 1 x x
1 1 1 1 1
x x 1 x x
z x 1 x x
  
  
module des;
  reg 		 data1 [4] ;
  reg 		 data2 [4] ;
  int 		 i, j;
  
  initial begin
    data1[0] = 0;  data2[0] = 0;
    data1[1] = 1;  data2[1] = 1;
    data1[2] = 'x; data2[2] = 'x;
    data1[3] = 'z; data2[3] = 'z;
    
    for (i = 0; i < 4; i += 1) begin
      for (j = 0; j < 4; j += 1) begin
        $display ("data1(%0d) & data2(%0d) = %0d", data1[i], data2[j], data1[i] & data2[j]);
      end
    end
  end
endmodule

  
シミュレーションログ
ncsim> run
data1(0) & data2(0) = 0
data1(0) & data2(1) = 0
data1(0) & data2(x) = 0
data1(0) & data2(z) = 0
data1(1) & data2(0) = 0
data1(1) & data2(1) = 1
data1(1) & data2(x) = x
data1(1) & data2(z) = x
data1(x) & data2(0) = 0
data1(x) & data2(1) = x
data1(x) & data2(x) = x
data1(x) & data2(z) = x
data1(z) & data2(0) = 0
data1(z) & data2(1) = x
data1(z) & data2(x) = x
data1(z) & data2(z) = x
ncsim: *W,RNQUIE: Simulation is complete.

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 << 2 = 'b00000100
data << 3 = 'b00001000
data << 4 = 'b00010000
data << 5 = 'b00100000
data << 6 = 'b01000000
data << 7 = 'b10000000
Original data = 'd128 or 'b10000000
data >> 0 = 'b10000000
data >> 1 = 'b01000000
data >> 2 = 'b00100000
data >> 3 = 'b00010000
data >> 4 = 'b00001000
data >> 5 = 'b00000100
data >> 6 = 'b00000010
data >> 7 = 'b00000001

data >> 1 = 'b00000000
ncsim: *W,RNQUIE: Simulation is complete.


Verilog

  1. C# 演算子
  2. Verilog チュートリアル
  3. Verilog 連結
  4. Verilog 割り当て
  5. Verilog ブロッキング &ノンブロッキング
  6. Verilog 関数
  7. Verilog タスク
  8. Verilog クロック ジェネレーター
  9. Verilog 数学関数
  10. Verilog タイムフォーマット
  11. Verilog タイムスケール スコープ