Assign ステートメントは、ネット上の値を駆動するために使用されます。そして、それはまた、 データフローモデリング 。
ワイヤー タイプまたはデータ タイプの信号には、値を継続的に割り当てる必要があります。 +5V バッテリーがワイヤの一端に適用されている限り、ワイヤの他端に接続されているコンポーネントは必要な電圧を取得します。
この概念は、任意のワイヤまたは他の同様のワイヤ (データ型) を値で連続的に駆動できる assign ステートメントによって実現されます。値は、定数、または信号のグループで構成される式のいずれかです。
構文
割り当て構文はキーワード assign で始まり、その後に信号名が続きます。信号名は、信号または異なる信号ネットの組み合わせのいずれかになります。
Javaのインターフェース
の 推進力 そして 遅れ はオプションであり、実際のハードウェアに合成するよりもデータフロー モデリングに主に使用されます。
右側の信号が評価され、左側のネットまたはネットの式に割り当てられます。
assign = [drive_strength] [delay]
遅延値は、ゲートの遅延を指定するのに役立ち、実際のハードウェアでのタイミング動作をモデル化するために使用されます。この値は、いつネットに評価値を割り当てるかを決定します。
ルール
assign ステートメントの使用中には、いくつかのルールに従う必要があります。
- LHS は常にスカラー、ベクトル、またはスカラー ネットとベクトル ネットの組み合わせである必要がありますが、スカラー レジスターやベクトル レジスターであってはなりません。
- RHS には、スカラーまたはベクトルのレジスターと関数呼び出しを含めることができます。
- RHS のオペランドの値が変更されると、LHS は新しい値で更新されます。
- Assign ステートメントは連続代入とも呼ばれます。
reg 変数の割り当て
運転したり割り当てたりすることはできません 登録 reg 変数はデータを格納でき、継続的に駆動されないため、assign ステートメントを使用して type 変数を使用することはできません。
Excelで最初の文字を削除する方法
Reg 信号は、always やInitial などの手続き型ブロックでのみ駆動できます。
暗黙的な連続代入
assign ステートメントを使用して特定のネットに何らかの値を割り当てる場合、それはステートメントと呼ばれます。 明示的な 割り当て
ネット中に実行される割り当てが宣言されている場合、それは と呼ばれます。 暗黙 割り当て。
wire [1:0] a; assign a = x & y; // Explicit assignment wire [1:0] a = x & y; // Implicit assignment
組み合わせロジック設計
組み合わせゲートと対応するゲートから作られた次のデジタル回路を考えてみましょう。 ベリログ コード。
組み合わせロジックでは、値がクロックのエッジでキャプチャされて保存されるフリップフロップのようなシーケンシャル要素とは異なり、出力を維持するために入力を継続的に駆動する必要があります。
右側の入力が変更されるたびに出力 o が更新されるため、割り当てられたステートメントは目的を満たします。
// This module takes four inputs and performs a Boolean // operation and assigns output to o. // logic is realized using assign statement. module combo (input a, b, c, d, output o); assign o = ~((a & b) | c ^ d); endmodule
ハードウェア回路図
設計の精緻化と合成の後、組み合わせ回路は、assign ステートメントでモデル化されたものと同じように動作します。
信号 o は、RHS 上の組み合わせ式が true になるたびに 1 になります。
同様に、RHS が false の場合、o は 0 になります。入力は同時に X であるため、出力 o は 0ns から 10ns まで X になります。