サイズ指定ありの数値
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 14/90。
Verilogには、特定のサイズを持つ数を宣言する方法があります。これはサイズの指定された数(sized number)と呼ばれます。数が何ビットを持っているかに関する混乱を防ぎ、ハードウェアが期待どおりに正確に動作することを保証するために役立ちます。
サイズ指定された数値は次の形式に従います: [bits]'[format][value]
<strong>bits</strong>— ビット数(例:8)<strong>'</strong>— サイズとフォーマットを区切るアポストロフィ(必須)
<strong>format</strong>— 数値の基数:bは 2 進数(binary)、dは 10 進数(decimal)、hは 16 進数(hexadecimal)、oは 8 進数(octal)<strong>value</strong>— 実際の数値(例:1010)
例えば:
4'b1010— 4 bits、binary 1010 (decimal 10)8'd255— 8 bits、decimal 255 (binary 11111111)16'hFF— 16 bits、hex FF (binary 0000000011111111)3'b1— 3 bits、binary 001 (左側のビットはゼロ埋めされます)
コード例:
reg [7:0] data;
data = 8'b10101010; // 8 bits, binary 10101010
data = 8'd170; // 8ビット、10進数 170
data = 8'hAA; // 8 bits, hex AA3つの例はすべて、同じ値を data に代入します。
サイズの重要性
サイズがない場合:
reg [7:0] data;
data = 1; // これはどういう意味ですか?1ビット?8ビット?Verilogはデフォルトで小さい数を32ビットとみなすため、問題が発生する可能性があります。
サイズ指定あり:
reg [7:0] data;
data = 8'b00000001; // Clear: 8-bit value 1ゼロパディング
小さな値をより大きなベクターに代入すると、Verilogは左側のビットをゼロで埋めます:
reg [7:0] data;
data = 4'b1010; // Becomes 8'b00001010チャレンジ
正しいサイズ指定の数値を記述してコードを完成させてください。
作業内容:
aに 10 進数の 170(2 進数 10101010)を表す 8 ビットの 2 進数を設定します。bに 10 進数の 12(2 進数 1100)を表す 4 ビットの 2 進数を設定します。cに 10 進数の 255(16 進数 FF)を表す 16 ビットの 16 進数を設定します。
自分で試してみよう
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // 170の8ビットバイナリ (10101010)
b = ______; // 12の4ビットバイナリ (1100)
c = ______; // 255の16ビット16進数 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", c);
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。