ネットと変数

Wire

Wire(ワイヤ)はネットをモデル化した変数の一つです。ワイヤは単一のゲートか継続代入文によって接続されます。ワイヤを宣言するためには、以下のように記述します。

wire <[最上位桁: 最下位桁]> ワイヤ名;

ネットの宣言時に、信号を接続することもできます。

wire <[最上位桁: 最下位桁]> ワイヤ名 = 変数;

以下に例を示します。

wire flag; // 1ビットのワイヤ
wire [3: 0] counter; // 4ビットのワイヤ
wire [3: 0] new_counter = counter; // counterをnew_counterへ代入

Reg

Reg(レグ)はレジスタをモデル化した変数です。レグを用いてフリップフロップやラッチを生成することができます、レグを宣言するためには、以下のように記述します。

reg <[最上位桁: 最下位桁]> レグ名;

以下に例を示します。

reg flag; // 1ビットのレグ
reg [3: 0] counter; // 4ビットのレグ

配列

Regやwireなどの変数は配列にすることができます。配列を宣言するためには、以下のように記述します。

reg [最上位桁: 最下位桁] レグ名[最上位桁: 最下位桁]...[最上位桁: 最下位桁];
wire [最上位桁: 最下位桁] ワイヤ名[最上位桁: 最下位桁]...[最上位桁: 最下位桁];

配列の要素へアクセスするためには以下のように記述します。

レグ名[添字]...[添字];
ワイヤ名[添字]...[添字];

以下に例を示します。

reg flag[1: 0]; // 1ビット、深さ2のレグ
wire [7: 0] images[319: 0][239: 0] // 8ビット、320x240のワイヤ
....
assign image[319][239] = 8'b0; // image[319][239]へ代入
....
always @(posedge clock) begin
...
  flag[0] <= 1'b0; // flagの0番目の要素へ代入
  flag[1] <= 1'b1; // flagの1番目の要素へ代入
...
end