タイトルのように、構造と動作のVerilogの主な違いは何ですか?
IEEE Stdによると、これらの用語の厳密な定義はありません。ただし、通常、structuralは、モジュールインスタンスを使用して設計を記述することを指します(特に、ANDゲートやフリップフロップなどの下位レベルのビルディングブロックの場合)。一方、behavioralは、 always
ブロックを使用して設計を記述します。
ゲートネットリストは常にstructuralであり、RTLコードは通常behavioralです。 RTLには、クロックゲートとシンクロナイザーセルのインスタンスがあるのが一般的です。
構造
ここで、関数は、インバーター、MUX、加算器、デコーダー、基本的なデジタル論理ゲートなどの基本的なコンポーネントを使用して定義されます。これは、関数を実装するために使用できる回路のさまざまな部分を接続して配置するのと同じです。
行動
Verilogの動作記述は、アルゴリズム的な方法でデザインの機能を記述するために使用されます。 Verilogの動作モデリングでは、C言語の構成に類似した構成を使用します。さらに、これは2つのサブカテゴリに分けられます。
出力へのデータの割り当ては継続的です。これは、明示的な「assign」ステートメントを使用するか、宣言中にワイヤに値を割り当てることによって実装されます。割り当てた場合、入力の変更はすぐに出力に影響します。したがって、出力は
wire
として宣言されます。
ここでは、データの割り当ては継続的に実行されるのではなく、感度リストで指定された特定のイベントで発生します。このタイプのモデリングスキームは、「always」や「initial」などの手続き型ブロックを使用して実装されます。
ここで、出力変数は
reg
として定義する必要があります。これは、指定された感度リストの変更後に新しい割り当てが発生するまで、前の値を保持する必要があるためです。
お役に立てれば :)
構造Verilogは、and、or、notなどの単純なWordのプリミティブを処理します。プリミティブはライブラリから呼び出され/推測され、入出力ポートに接続されます。例
module structural(y,a,b);
input a,b;
output y;
and a1 (y,a,b); // and is the primitive inferred and a1 is the instance name.
endmodule
動作ベリログは、システムのロジックまたは動作を扱います。複雑なロジックの実装を処理するため、業界ではすべてRTLと呼ばれるシステムの動作モデルを実装しています。動作RTLがSV/UVMを使用してフロントエンドエンジニアによって検証されると、このRTLはゲートレベル、つまり合成に使用される構造に変換されます。
詳細については、SamirPalnitkarによって書かれたVerilogの本を参照してください。
構造Verilogは通常、合成可能で(正確で意味のあるハードウェアを実現している)Verilogコードと呼ばれ、通常はレジスタ転送レベル(RTL)で記述されます。一方、Behavioral Verilogは通常、より高いレベルのハードウェアまたは機能の動作記述です。ビヘイビアコードは、たとえばタイムスケールでスケーリングされたVerilogコードで遅延を定義する場合、合成可能である必要はありません。シンセサイザーは、コードをロジックとハードウェアに変換するときにそれを考慮しませんが、シミュレーションの目的があります。同じことが構造的および動作的VHDLにも当てはまります。
Behavioralは、Verilogですでに定義されているAnd、Or、Notゲートを使用できる論理ゲートの説明を使用しませんが、Structureは、(And/Or/Not)というモジュールが必要であることを説明し、その機能を説明する論理ゲートの説明を使用します。 &/ | /〜。