ModelSimで 27 MHz のクロック信号をセットアップしたいと考えています。私は通常、その信号を右クリックしてクロックをセットアップします->クロック->セットアップ期間。たとえば、50 MHz クロック -> 20 ns または force ステートメントを使用しました。
27 MHz クロックは特殊なため、整数周期ではありません。appx 値でクロックを設定すると、常にタイミングの問題が発生します。
では、この時計をどのように設定すればよいでしょうか。
あなたの時計は非同期です。常に「タイミングの問題」が発生します。2つのクロックエッジが互いに非常に接近している場合(必然的にそうなる場合があります)、一部のフロップは準安定性を示します。
27MHzドメインの信号を50MHzドメインに再同期し、同期が間違っている場合があるという事実を受け入れて軽減する必要があります。「たまに」の値をシステムに適していると思われる値に減らす手法はありますが、それを取り除くことはできません。
FPGA-FAQ 0017、準安定性について教えてくださいを参照してください。
両方のドメイン (50 MHz、27 MHz) を使用する必要がある場合は、2 つのドメイン間の各インターフェイスに同期回路を実装する必要があります。
Signal changes_at50;
Signal read_at27;
あなたは入力しません:
read_at27 <= changes_at50;
ただし、同期回路を介して接続してください。(または非同期 FIFO。)
同期回路は、通常、クロック ドメイン間で発生する準安定性を最小限に抑えるためにカスケード接続されたフリップフロップです。カスケードが多いほど、メタの安定性は低下しますが、データ レイテンシは増加します。デザイン選びです。
1 つのクロックのみで機能シミュレーションを実行している場合、システムの入力と出力が同じレートでクロックされている限り、クロックの正確な周期はあまり重要ではありません。
ターゲット期間に近いクロック期間を選択し、データ ソースを適切にスケーリングすることをお勧めします。