タイトルにあるように、Verilog の構造と動作の主な違いは何ですか?
6 に答える
IEEE 規格によると、これらの用語の厳密な定義はありません。ただし、通常、構造はモジュール インスタンス (特に AND ゲートやフリップフロップなどの下位レベルのビルディング ブロック)を使用して設計を記述することを指し、動作always
はブロックを使用して設計を記述することを指します。
ゲート ネットリストは常に構造的であり、RTL コードは通常動作的です。RTL がクロック ゲートとシンクロナイザー セルのインスタンスを持つことは一般的です。
構造的
ここでは、インバータ、MUX、加算器、デコーダ、基本的なデジタル論理ゲートなどの基本的なコンポーネントを使用して機能が定義されます。これは、機能を実装するために利用可能な回路のさまざまな部分を接続して配置するようなものです。
行動的
Verilog のビヘイビア記述は、デザインの機能をアルゴリズム的に記述するために使用されます。Verilog のビヘイビア モデリングでは、C 言語の構造に似た構造が使用されます。さらに、これは 2 つのサブカテゴリに分類されます。
- (a)連続
出力へのデータの割り当ては連続的です。これは、明示的な「割り当て」ステートメントを使用するか、宣言中にワイヤに値を割り当てることによって実装されます。割り当ての場合、入力の変更はすぐに出力に影響します。したがって、出力は次のように宣言されます。
wire
- (b)手続き
ここでは、データの割り当ては継続的に実行されるのではなく、機密リストで指定された特定のイベントで発生します。このタイプのモデリング スキームは、 "always" や "initial" などの手続き型ブロックを使用して実装されます。
ここで、出力変数は
reg
、指定されたセンシティビティ リストの変更後に新しい割り当てが発生するまで、以前の値を保持する必要があるため、 として定義する必要があります。
お役に立てれば :)
Structural Verilog は通常、合成可能 (正確で意味のあるハードウェア実現を備えている) であり、通常はレジスタ転送レベル (RTL) で記述される Verilog コードを指します。一方、Behavioral Verilog は、通常、ハードウェアまたは機能のより高いレベルでの動作記述です。動作コードは合成可能である必要はありません。たとえば、タイムスケールでスケーリングされた Verilog コードで遅延を定義する場合、シンセサイザーはコードをロジックとハードウェアに変換するときに遅延を考慮しませんが、シミュレーションの目的があります。同じことが構造および動作 VHDL にも当てはまります。