ビット幅付き数値
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 14/90。
Verilogでは、特定のサイズを指定して数値を宣言する方法があります。これはサイズ指定数値と呼ばれます。数値が何ビットなのかについての混乱を防ぎ、ハードウェアが期待どおりに正確に動作することを保証できるため便利です。
サイズ指定された数値は次の形式になります: [bits]'[format][value]
bits: ビット数(例:8)': サイズと形式を区切るアポストロフィ(必須)
format: 数値の基数。2進数はb、10進数はd、16進数はh、8進数はovalue: 実際の数値(例:1010)
例:
4'b1010:4ビット、2進数の1010(10進数の10)8'd255:8ビット、10進数の255(2進数の11111111)16'hFF:16ビット、16進数のFF(2進数の0000000011111111)3'b1:3ビット、2進数の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 ビットの2進数 (10101010)
b = ______; // 12 を表す 4 ビットの2進数 (1100)
c = ______; // 255 を表す 16 ビットの16進数 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", c);
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ
変換を確かめる: N進数変換