Menu
Coddy logo textTech

Unsized Numbers

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

サイズ指定なしの数値とは、何ビットあるかを指定せずに記述された数値です。サイズ接頭辞なしで数値を記述すると、Verilog はデフォルトでそれを32 ビットとして扱います。

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

Unsized numbers は、形式と値のみを使用します: [format][value]

  • <strong>format</strong>: 数値の基数: binary の場合は b、decimal の場合は d、hexadecimal の場合は h、または octal の場合は o
  • <strong>value</strong>: 実際の数値(例: 1010

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

  • 'b1010: 32ビットの2進数 1010
  • 'd255: 32ビットの10進数 255
  • 'hFF: 32ビットの16進数 FF
  • 'b1: 32ビットの2進数 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 と Sized

 UnsizedSized
1010 または 'd2558'b1010 または 8'd255
ビット幅32 bits(デフォルト)Explicit(指定どおり)
アポストロフィ形式とともに必要必須
使用する場面シンプルなテストベンチコードハードウェアへの代入

潜在的な問題

Unsized 数値をより小さいレジスタに代入すると、予期しない動作を引き起こす可能性があります。

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

2つ目の例では、32ビット値 10000 を4ビットのレジスタに代入します。下位4ビットだけが保持され(0000)、これは期待している結果ではないかもしれません。

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

Unsized 数値は次の用途に便利です:

  • テストベンチ内の単純な数値
  • ループカウンタ
  • $display

実際のハードウェアへの代入では、明示的に指定し、警告を避けるためにサイズ指定された数値を使用してください

challenge icon

チャレンジ

以下のコードでは、一部の数値がサイズ指定されていません。警告を避けるため、サイズ指定された数値(8ビット)に変更してください。

実行すること:

  1. Change a を 1010 を表す 8ビットの binary 数値に変更する
  2. Change b を 255 を表す 8ビットの decimal 数値に変更する
  3. Change c を FF を表す 8ビットの 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腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ