回答:
合成とは、(Verilogで)記述した内容を実際のハードウェアに変換することです。
Verilogで、50nsの遅延があると言います。では、ハードウェアの観点から、これを実際のハードウェアにどのように変換しますか?
FPGAを使用している場合、使用可能なFPGAリソース(LUT、レジスタ、Ramエレメントなど)を使用して50nsの遅延を実際にどのように構築しますか?追加のルーティング遅延を追加することによって?1秒の遅延を指定するとします。チップのルーティング機能をすべて使用しないと不可能です(おそらく十分ではありません)。デザインを合わせることができません。ASICについても同様です。シリコン表面の80%を使用して、1行に遅延を追加します。
動作するはずの方法は、同期設計を使用し、カウンターまたは他の手法を使用して遅延を自分で実装することです。しかし、遅延はその要素のクロックの倍数でなければなりません。
通常、「10 ns後」などの項目は伝播遅延です。行う場合の理想の Verilogのシミュレータ上でシミュレーションを入力が変化したときに、出力が正確に起こります。これは現実的ではなく、実際のハードウェアの動作を説明するものではありません。これを考慮して、出力が変更される時間を指定できます。遅延宣言を使用します。
SOから私の答えを移植します。絶対遅延を合成することが実際的でない理由に焦点を当てています
クロックツリーを合成する場合、合成ツールは遅延を追加することでこれらのバランスを調整し、すべてのノードが同時にクロックを受信するようにします。そのため、合成ツールには遅延を追加する機能があるようです。
ただし、ASICの製造時には速度にばらつきがあり、高レベルでは、低速、標準、高速と見なすことができます。実際には、これらのコーナーには何百ものバリエーションがあり、シリコン内の特定のタイプのデバイスは高速で実行され、その他のデバイスは低速で実行されます。
シリコンのこれらのコーナーにも温度定格があり、最悪のケースでは+ 140C Fastシリコンと-40C Slowシリコンになる可能性があります。この場合のバッファを介した遅延の変動は、1nsから30nsになる可能性があります。
#10
合成可能であった場合、これをVerilogに戻すと、実際には155 + -145、つまり10nsから300ns #20
になります。同じインターフェースまたは制御構造の一部となるように設計した場合、20nsから600nsの範囲になります。 。したがって、すべてが設計に対して有効ではありません。あなたは正確なもの#10
を取得していません、そして#20
それは指定されました。
クロックツリーは、最大遅延と最小遅延を制限するように設計されており、クロックツリー上のすべてのノードが互いに相対的にスケーリングされます。組み合わせ回路でこれを物理的に保証することは物理的に不可能であるため、10nsでなければならないような厳しい規則は決して与えられません。
時間の絶対単位は、外部クロックからのものだけです。任意の遅延はどこから発生しますか-同等のディスクリートデジタルロジックと同等のものは、クロックからそれを生成しますか?
合成可能な遅延が必要な場合は、外部クロック入力と、特定のクロックサイクル数をカウントする適切なステートマシン/カウンターを使用する必要があります。