Menu
Coddy logo textTech

サイズ指定ありの数値

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

Verilogには、特定のサイズで数値を宣言する方法があります。それはサイズ指定された数値 (sized number)と呼ばれます。これは、数値が何ビットであるかについての混乱を防ぎ、ハードウェアが期待通りに動作することを保証するため、非常に有用です。

サイズ指定された数値は、次の形式に従います:[bits]'[format][value]

  • <strong>bits</strong> — ビット数(例:8
  • <strong>'</strong> — サイズと形式を区切るアポストロフィ(必須)
  • <strong>format</strong> — 数値の基数: 2進数の b、10進数の d、16進数の h、または8進数の o
  • <strong>value</strong> — 実際の数値(例: 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ビット、2進数 10101010
data = 8'd170;        // 8ビット、10進数 170
data = 8'hAA;         // 8ビット、16進数 AA

これら3つの例はすべて、dataに同じ値を代入します。

サイズが重要な理由

サイズ指定がない場合:

reg [7:0] data;
data = 1;        // これはどういう意味でしょうか? 1ビット? 8ビット?

Verilogはデフォルトで小さな数値を32ビットと見なすため、問題が発生することがあります。

サイズ指定あり:

reg [7:0] data;
data = 8'b00000001;   // クリア: 8ビットの値 1

ゼロパディング

小さい値を大きいベクトルに代入すると、Verilogは左側のビットをゼロで埋めます:

reg [7:0] data;
data = 4'b1010;    // 8'b00001010 になります
challenge icon

チャレンジ

正しいサイズの数値を記述して、コードを完成させてください。

手順:

  1. a を10進数の 170(2進数 10101010)を表す8ビットの2進数に設定してください。
  2. b を10進数の 12(2進数 1100)を表す4ビットの2進数に設定してください。
  3. c を10進数の 255(16進数 FF)を表す16ビットの16進数に設定してください。

チートシート

Verilogにおけるサイズ指定された数値は、次の形式に従います:[bits]'[format][value]

  • bits — ビット数
  • ' — 必須のアポストロフィ区切り文字
  • formatb (2進数), d (10進数), h (16進数), o (8進数)
  • value — 実際の数値
reg [7:0] data;

data = 8'b10101010;   // 8ビット、2進数
data = 8'd170;        // 8ビット、10進数
data = 8'hAA;         // 8ビット、16進数(これら3つはすべて等価です)

サイズを指定しない場合、Verilogはデフォルトで32ビットになります。これは予期しない動作を引き起こす可能性があります。値が宣言されたサイズよりも小さい場合、左側のビットはゼロで埋められます:

reg [7:0] data;
data = 4'b1010;    // 8'b00001010 になります

自分で試してみよう

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

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

基礎のすべてのレッスン