Menu
Coddy logo textTech

サイズ指定なしの数値

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

Unsized な数値(サイズ指定のない数値)とは、ビット数を明示せずに記述された数値のことです。サイズ プレフィックスを指定せずに数値を記述した場合、Verilog はデフォルトで 32 bits であるとみなします。

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // 上記と同じだが、明示的

サイズ未指定の数値(Unsized numbers)は、フォーマットと値の形式のみを使用します: [format][value]

  • <strong>format</strong> — 数値の基数: 2進数は b、10進数は d、16進数は h、8進数は o
  • <strong>value</strong> — 実際の数値(例えば、1010

アポストロフィ ' はフォーマットと値の間に引き続き必要ですが、その前にビット数の指定はありません。

  • 'b1010 — 32ビットの binary 1010
  • 'd255 — 32ビットの decimal 255
  • 'hFF — 32ビットの hex FF
  • 'b1 — 32ビットの binary 1(先頭に31個のゼロが付く)

コード例:

reg [7:0] data;

initial begin
  data = 1010;      // サイズ未指定: 32ビット値(警告が出る可能性あり)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // サイズ未指定: 32ビット16進数 FF
end

Unsized vs Sized

 UnsizedSized
1010 または 'd2558'b1010 または 8'd255
ビット幅32 bits(デフォルト)explicit(指定通り)
アポストロフィフォーマット指定時に必要必要
使用場面シンプルなテストベンチコードハードウェアの代入

Potential Problem

Unsized numbers can cause unexpected behavior when assigned to smaller registers:

reg [3:0] small;
small = 'b1111;      // 32-bit value, but fits in 4 bits (fine)
small = 'b10000;     // 32ビット値だが、大きすぎる!(警告)

2番目の例では、32-bitの値 10000 を4-bitのレジスタに代入します。下位4 bit(0000)のみが保持されますが、これは意図した動作とは異なる場合があります。

Unsized数値を使用すべきタイミング

Unsized数値は以下の場合に便利です:

  • テストベンチでのシンプルな数値
  • ループカウンタ
  • $display ステートメント

実際のハードウェアへの代入では、明確にし警告を避けるためにsized数値を使用してください。

challenge icon

チャレンジ

以下のコードでは、いくつかの数値が unsized になっています。警告を回避するために、それらを sized の数値(8 bits)に変更してください。

作業内容:

  1. a を 1010 の 8-bit binary 数値に変更します
  2. b を 255 の 8-bit decimal 数値に変更します
  3. c を FF の 8-bit hex 数値に変更します

自分で試してみよう

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // サイズ付きに変更(8ビット10進数)
    c = 'hFF;      // Change to sized (8-bit hex)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %b", c);
    $finish;
  end
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン