Menu
Coddy logo textTech

ベクタ

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

vector はマルチ bit の wire や reg です。single bit の代わりに、vector を使用すると data の bus を扱うことができます。これはまとめてグループ化された bits の集合です。

注: vectorは別のデータ型ではありません。単に wirereg のマルチビット版です。

wire single;        // 単一ビット
wire [7:0] bus;     // 8ビットベクトル(ビット7から0まで)

ベクトルを宣言するには、[MSB:LSB] という構文を使用します。ここで MSB は最上位ビット(most significant bit)、LSB は最下位ビット(least significant bit)です。

wire [3:0] a;       // 4ビットのwireベクトル
reg [7:0] data;     // 8ビットのregベクトル
wire [15:0] addr;   // 16ビットのwireベクトル

ビットへのアクセス

ベクトルの個々のビットやスライスにアクセスする際は、ビット位置(インデックス)には十進数を使用し、代入には 2 進数値(0 または 1)を使用します。

これは、ビット位置が住所のような場所であり、自然と十進数で表されるのに対し、そのビットに格納される値は 0 または 1(バイナリの選択肢)にしかならないためです。

例えば、data[0] は「bit 番号 0」を意味し、= 1 は「ハイに設定する」ことを意味します。single bit に 75 のような 10 進数を assign しても 75 は保存されません — Verilog は黙って最下位 bit のみを保持します — そのため、常に明示的に 0 または 1 を記述してください。

reg [7:0] data;

data = 170;  
data[0] = 1;             // LSBを1に設定
data[7] = 0;             // MSBを0に設定
data[3:1] = 3'b101;      // Set bits 3,2,1 to 101 (binary remains)

Bit Order

ビットの順序は重要です:

wire [3:0] a;     // a[3] は MSB、a[0] は LSB
wire [0:3] b;     // b[0] は MSB、b[3] は LSB(あまり一般的ではない)

ほとんどの設計者は、MSBを左側にした [MSB:LSB] フォーマットを使用します。

値の代入

reg [3:0] a;

a = 10;       
a = 5;         
a = 3;        

ベクタースライス

ビットの範囲にアクセスできます:

reg [15:0] word;

word[15:8] = 255;        // 上位バイトを代入 (8'hFF = 255)
word[7:0]  = 0;          // 下位バイトを代入 (8'h00 = 0)
word[3:1]  = 3'b101;     // Assign a slice 
challenge icon

チャレンジ

以下の module には vector 宣言が必要です。 

作業内容: 

  1. 各 input と output を 8-bit の vector に Change してください。

自分で試してみよう

module vector_example(
  input a,          // 8ビットベクトル [7:0] に変更
  input b,          // 8ビットベクトル [7:0] に変更
  output c          // 8ビットベクトル [7:0] に変更
);
  
  assign c = a & b;
  
endmodule
quiz icon腕試し

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

基礎のすべてのレッスン