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
endUnsized と Sized
| Unsized | Sized | |
|---|---|---|
| 例 | 1010 または 'd255 | 8'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文
実際のハードウェアへの代入では、明示的に指定し、警告を避けるためにサイズ指定された数値を使用してください。
チャレンジ
以下のコードでは、一部の数値がサイズ指定されていません。警告を避けるため、サイズ指定された数値(8ビット)に変更してください。
実行すること:
- Change
aを 1010 を表す 8ビットの binary 数値に変更する - Change
bを 255 を表す 8ビットの decimal 数値に変更する - 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このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ