Menu
Coddy logo textTech

サイズ指定なしの数値

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

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

a = 'b1010;        // サイズ指定なし:Verilogはこれを32ビットとして扱います
a = 32'b1010;    // 上記と同じですが、明示的です

サイズ指定のない数値は、フォーマットと値のみを使用します: [format][value]

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

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

  • 'b1010 — 32ビットのバイナリ 1010
  • 'd255 — 32ビットのデシマル 255
  • 'hFF — 32ビットのヘックス FF
  • 'b1 — 32ビットのバイナリ 1(31個の先行ゼロを含む)

コード例:

reg [7:0] data;

initial begin
  data = 1010;      // サイズ指定なし: 32ビット値(警告が発生する可能性があります)
  data = 'd255;     // サイズ指定なし: 32ビットの10進数 255
  data = 'hFF;      // サイズ指定なし: 32ビットの16進数 FF
end

サイズ指定なし vs サイズ指定あり

 サイズ指定なしサイズ指定あり
1010 または 'd2558'b1010 または 8'd255
ビット幅32ビット(デフォルト)明示的(指定通り)
アポストロフィフォーマット指定時に必要必須
使用場面単純なテストベンチコードハードウェアの代入

潜在的な問題

サイズ指定のない数値は、より小さなレジスタに代入されると予期しない動作を引き起こす可能性があります:

reg [3:0] small;
small = 'b1111;      // 32ビットの値ですが、4ビットに収まります (問題なし)
small = 'b10000;     // 32ビットの値ですが、大きすぎます! (警告)

2番目の例では、32ビットの値 10000 を4ビットのレジスタに代入します。下位4ビットのみが保持され(0000)、これは期待通りの動作ではないかもしれません。

サイズ指定のない数値を使用するタイミング

サイズ指定のない数値は、以下の場合に便利です:

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

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

challenge icon

チャレンジ

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

やるべきこと:

  1. a を 1010 の8ビットバイナリ数に変更してください
  2. b を 255 の8ビット10進数に変更してください
  3. c を FF の8ビット16進数に変更してください

チートシート

Verilogにおけるサイズ指定のない数値は、デフォルトで32ビットになります。構文: '[format][value]

'b1010   // 32ビットバイナリ
'd255    // 32ビット10進数
'hFF     // 32ビット16進数

サイズ指定された数値は、[bits]'[format][value]を使用します:

8'b1010  // 8ビットバイナリ
8'd255   // 8ビット10進数
8'hFF    // 8ビット16進数

サイズ指定のない数値をより小さなレジスタに代入すると、下位ビットのみが保持されます。警告や予期しない切り捨てを避けるために、ハードウェアの割り当てにはサイズ指定された数値を使用してください。

自分で試してみよう

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腕試し

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

基礎のすべてのレッスン