Menu
Coddy logo textTech

負の数

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 16/90。

Verilogでは、負の数は2の補数形式を使用して表現されます。2の補数は、正の数と負の数の両方をバイナリで表現する方法です。最上位ビット(MSB)が符号を示します。

  • 0 = 正の数
  • 1 = 負の数

2の補数の計算方法

ある数値の2の補数を求めるには:

  1. 正の数を2進数で書く
  2. すべてのビットを反転させる(0は1に、1は0にする)
  3. 1を加える

例:-5を4ビットで表現する

ステップ操作結果
1正の5の2進数表記0101
2すべてのビットを反転1010
31を加える1011

4ビットの2の補数における-5は <strong>4'b1011</strong> です

Verilogでの負の数の記述

10進数形式を使用して、負の数を直接記述することができます:

reg signed [3:0] a;
a = -5;        // Verilogは自動的に2の補数を使用します

サイズ指定されたバイナリ数の場合、2の補数値を記述する必要があります:

a = 4'b1011;   // これは4ビットの2の補数における-5です

符号付き vs 符号なし

デフォルトでは、Verilogは数値を符号なしとして扱います。負の数を扱うには、信号をsignedとして宣言します:

reg signed [3:0] negative;   // -8から7まで格納可能
reg [3:0] positive;          // 0から15まで格納可能

符号付き数値の範囲

N ビットの場合、符号付き数値は以下を表現できます:

  • 最小値: -2^(N-1)
  • 最大値: 2^(N-1) - 1
ビット範囲
4ビット-8 ~ 7
8ビット-128 ~ 127
16ビット-32768 ~ 32767

重要な注意事項

  • 負の数の処理を有効にするには、signedキーワードを使用してください
  • signedがない場合、Verilogはすべての値を正として扱います
  • signedを使用すると、2の補数演算が自動的に機能します
  • MSB(最上位ビット)が符号を決定します:1 = 負、0 = 正
challenge icon

チャレンジ

正しい2の補数値を記述して、コードを完成させてください。

やること:

  1. 4ビットの2の補数バイナリを使用して、a に -3 を設定します
  2. 4ビットの2の補数バイナリを使用して、b に -8 を設定します
  3. 4ビットの2の補数バイナリを使用して、c に -1 を設定します

チートシート

Verilogにおいて、負の数は2の補数形式を使用します。MSB(最上位ビット)が符号を示します:0 = 正、1 = 負。

2の補数の計算方法:

  1. 正の数をバイナリ(2進数)で書く
  2. すべてのビットを反転させる
  3. 1を加える

例:4ビットの -5 → 010110101011 = 4'b1011

負の数を扱うには、信号を signed として宣言します:

reg signed [3:0] negative;   // -8 から 7 まで格納可能
reg [3:0] positive;          // 0 から 15 まで格納可能

負の値は、直接代入するか、2の補数のバイナリ経由で代入します:

reg signed [3:0] a;
a = -5;        // Verilogは自動的に2の補数を使用します
a = 4'b1011;   // 同等:4ビットの2の補数形式での -5

Nビットの符号付き(signed)の範囲:-2^(N-1) から 2^(N-1) - 1(例:4ビットの場合、-8 から 7)。

自分で試してみよう

module negative_challenge;
  reg signed [3:0] a, b, c;
  
  initial begin
    a = 4'b______;   // -3 in 4-bit two's complement
    b = 4'b______;   // -8 in 4-bit two's complement
    c = 4'b______;   // -1 in 4-bit two's complement
    
    $display("a = %d", a);
    $display("b = %d", b);
    $display("c = %d", c);
    $finish;
  end
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン