Verilog 割り当て
ネットと変数に値を配置することを代入と呼びます。 3 つの基本的な形式があります。
- 手続き
- 連続
- 手続き型継続
法定 LHS 値
割り当てには、右側 (RHS) と左側 (LHS) の 2 つの部分があり、その間に等号 (=) または不等号 (<=) があります。
割り当てタイプ | 左側 |
---|---|
手続き型 |
|
連続 |
|
手続き型連続 |
|
RHS には、最終値に評価される任意の式を含めることができ、LHS は、RHS の値が割り当てられるネットまたは変数を示します。
module tb;
reg clk;
wire a, b, c, d, e, f;
reg z, y;
// clk is on the LHS and the not of clk forms RHS
always #10 clk = ~clk;
// y is the LHS and the constant 1 is RHS
assign y = 1;
// f is the LHS, and the expression of a,b,d,e forms the RHS
assign f = (a | b) ^ (d & e);
always @ (posedge clk) begin
// z is the LHS, and the expression of a,b,c,d forms the RHS
z <= a + b + c + d;
end
initial begin
// Variable names on the left form LHS while 0 is RHS
a <= 0; b <= 0; c <= 0; d <= 0; e <= 0;
clk <= 0;
end
endmodule
手続き上の割り当て
手続き型割り当ては、always、initial、タスク、関数などの手続き内で発生し、変数に値を配置するために使用されます。変数は、同じ変数への次の代入まで値を保持します。
シミュレーション中のある時点でシミュレーションがこのステートメントを実行すると、値が変数に配置されます。これは、if-else-if、case ステートメント、ループ メカニズムなどの制御フロー ステートメントを使用して、必要な方法で制御および変更できます。
reg [7:0] data;
integer count;
real period;
initial begin
data = 8'h3e;
period = 4.23;
count = 0;
end
always @ (posedge clk)
count++;
変数宣言の代入
次に示すように、宣言時に変数に初期値を設定できます。代入には期間がなく、同じ変数への次の代入が発生するまで値が保持されます。配列への変数宣言の代入は許可されていないことに注意してください。
module my_block;
reg [31:0] data = 32'hdead_cafe;
initial begin
#20 data = 32'h1234_5678; // data will have dead_cafe from time 0 to time 20
// At time 20, data will get 12345678
end
endmodule
reg [3:0] a = 4'b4;
// is equivalent to
reg [3:0] a;
initial a = 4'b4;
以下に示すように、変数が宣言中および初期ブロックの時間 0 で初期化される場合、評価の順序は保証されないため、8'h05 または 8'hee のいずれかになる可能性があります。
module my_block;
reg [7:0] addr = 8'h05;
initial
addr = 8'hee;
endmodule
reg [3:0] array [3:0] = 0; // illegal
integer i = 0, j; // declares two integers i,j and i is assigned 0
real r2 = 4.5, r3 = 8; // declares two real numbers r2,r3 and are assigned 4.5, 8 resp.
time startTime = 40; // declares time variable with initial value 40
手続きブロックと割り当てについては、後のセクションで詳しく説明します。
連続任務
段階的なシミュレーションの例については、ここをクリックしてください!
これは、スカラー ネットとベクター ネットに値を割り当てるために使用され、RHS に変更があるたびに発生します。これは、ゲートの相互接続を指定せずに組み合わせロジックをモデル化する方法を提供し、論理式でネットを簡単に駆動できるようにします。
// Example model of an AND gate
wire a, b, c;
assign a = b & c;
b または c がその値を変更するたびに、RHS の式全体が評価され、
ネット宣言の割り当て
これにより、ネットを宣言する同じステートメントに連続代入を配置できます。ネットは 1 回しか宣言できないため、1 つのネットに対して 1 つの宣言の割り当てのみが可能であることに注意してください。
wire penable = 1;
手続き型連続割り当て
これらは、式をネットまたは変数に連続的に割り当てることができる手続き型ステートメントで、2 つのタイプがあります。
assign
...deassign
force
...release
割り当て解除
これは、変数へのすべての手続き型割り当てをオーバーライドし、deassign
で同じシグナルを使用して非アクティブ化します .変数の値は、変数が手続き型または手続き型の連続代入によって新しい値を取得するまで同じままです。 assign
の LHS ステートメントは、ビット選択、部分選択、または配列参照にすることはできませんが、変数または変数の連結にすることはできます。
reg q;
initial begin
assign q = 0;
#10 deassign q;
end
強制解除
これらは assign - deassign
に似ています 文だけでなく、ネットや変数にも適用できます。 LHS は、ネットのビット選択、ネットの部分選択、変数、またはネットにすることができますが、配列への参照および変数のビット/部分選択にすることはできません。 force
ステートメントは、release
を使用して解放されるまで、変数に行われた他のすべての割り当てをオーバーライドします。 キーワード。
reg o, a, b;
initial begin
force o = a & b;
...
release o;
end
Verilog