コンテンツ
ある種の定義
まず、定義されたタイプのいくつかのセットを見てください
最初
データ1(reg)とdata2(wire)の変数をビット幅8で定義します。
reg [7:0] data1;
wire [7:0] data2;
割り当て方法
割り当てやその他の操作を実行する場合は、alwaysブロックを使用して割り当てるか、assignステートメントを使用できます。
二番目
1次元配列を定義する
メモリをreg型の1次元配列として定義します。配列内の任意の要素には、添え字でアクセスできます。このような配列は次のように定義されます。
reg [7:0] data [255:0];
その中で、[7:0]は1次元配列の各要素のビット幅を表し、変数の後の[255:0]はビット幅ではなく、作成された配列の深さを表します。つまり、サイズ1次元配列内の要素の数。これは、配列の容量とも呼ばれます。
割り当て方法
配列内の要素の添え字に直接アクセスできます。次のコードは、1次元配列内の最初の要素への番号1の割り当てを表しています。
reg [7:0] data [255:0];
data[0] = 1;
第3
2次元配列を定義します。これは、一種のベクトルとも言えます。
この定義方法は、一般にVerilogコードが2次元配列の定義を含まないため、比較的まれです。この定義方法は、C言語と非常によく似ています。ビット幅が8の2次元配列です。この定義方法は次のとおりです。マトリックス操作を行っていたときに発見されました.2次元配列をこのように定義することで、マトリックス内の値を2次元配列の各スペースにマッピングできます。一方で、マトリックスを表示することもできます2次元配列として。
reg [7:0] data [255:0] [255:0];
割り当て方法
進入禁止:
reg [7:0] data [255:0] [255:0];
assign data[0] = 1;
このような割り当てでは、「ラベル配列'adaptation'の参照は有効な正味左辺値ではありません」および「連続した割り当ての左側が不正です」というエラーが報告されます。
まず、assignを使用してregタイプの値を割り当てることはできません。割り当てタイプは、 reg タイプではなく、ワイヤタイプ用です。regタイプを操作するには、alwaysブロックのような論理ブロック内にステートメントが必要です。
正しい方法:
reg [7:0] b [0:3] [0:3];
initial begin
// using 2D
for (int i=0; i<=3; i++)
for (int j=0; j<=3; j++)
b[i][j] = i*j;
end
Verilog標準でさえ、2D配列が何であるかについて厳密に定義された理解を持っていません。これは標準によるものです
。reg[7:0] mema [0:255];256個の8ビットレジスタのメモリメモリを宣言します。インデックスは0から255です。
reg arrayb [7:0] [0:255];ビットレジスタラインの2次元配列を宣言します
w_array [7:0] [5:0];は、ラインアレイ
2d配列が "reg arrayb [7:0] [0:255];であることを宣言します。これは、範囲が名前の前にある場合、それがベクトルであるためです。
for-generateステートメントを使用して2次元配列を使用して同種構造を拡張することはまれです。ほとんどの場合、チャネルのデータバス、メモリ、複数のモジュールインスタンスの同種出力など、1次元のベクトル配列が使用されます。