サイズ指定なしの数値
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 または 'd255 | 8'b1010 または 8'd255 |
| ビット幅 | 32ビット(デフォルト) | 明示的(指定通り) |
| アポストロフィ | フォーマット指定時に必要 | 必須 |
| 使用場面 | 単純なテストベンチコード | ハードウェアの代入 |
潜在的な問題
サイズ指定のない数値は、より小さなレジスタに代入されると予期しない動作を引き起こす可能性があります:
reg [3:0] small;
small = 'b1111; // 32ビットの値ですが、4ビットに収まります (問題なし)
small = 'b10000; // 32ビットの値ですが、大きすぎます! (警告)2番目の例では、32ビットの値 10000 を4ビットのレジスタに代入します。下位4ビットのみが保持され(0000)、これは期待通りの動作ではないかもしれません。
サイズ指定のない数値を使用するタイミング
サイズ指定のない数値は、以下の場合に便利です:
- テストベンチ内の単純な数値
- ループカウンタ
$display文
実際のハードウェア割り当てでは、明示的に記述し警告を避けるために、サイズ指定された数値を使用してください。
チャレンジ
以下のコードでは、いくつかの数値のサイズが指定されていません。警告を避けるために、それらをサイズ指定された数値(8ビット)に変更してください。
やるべきこと:
aを 1010 の8ビットバイナリ数に変更してくださいbを 255 の8ビット10進数に変更してください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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。