Menu
Coddy logo textTech

Vectors

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

vector は複数ビットの wire または reg です。単一のビットの代わりに、vector を使うと data の bus を扱えます。これはまとめてグループ化された bits の集合です。

注: vector は独立したデータ型ではありません。これは単に wire または reg のマルチビット版です。

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

vector を宣言するには、[MSB:LSB] という構文を使用します。ここで MSB は最上位ビット、LSB は最下位ビットを表します。

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

ビットへのアクセス

vector の個々のビットやスライスにアクセスするときは、ビット位置(インデックス)には 10 進数を使用し、代入には binary 値(0 または 1)を使用します。

これは、ビット位置が(アドレスのような)場所であり、通常は10進数で表される一方、そのビットに格納できる値は0または1、つまり二者択一だからです。

たとえば、data[0]は「ビット番号0」を意味し、= 1は「Highに設定する」ことを意味します。単一のビットに75のような10進数を代入しても75は保存されません。Verilogは最低位ビットだけを黙って保持するため、常に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)

ビット順序

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

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ビットのvectorに変更してください。

自分で試してみよう

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

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

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ