この質問は、違いが生じる場合、FPGA合成のコンテキストにあります。データシート (iCE40UP) には、各ロジック セルに非同期リセットおよびクロック イネーブル入力を備えた D タイプ フロップがあると記載されています。
多くの Verilog チュートリアルでは、次のようなシーケンシャル ロジックが導入されています。
always @(posedge clk)
begin
some_reg <= [...]
end
私はクロックロジックに精通しており、これは直感的に理解できます。
次に導入される概念は通常、次のとおりです。
- 本当に必要なのは適切なレジスターであるため、誤ってラッチを作成しないように注意してください。
always @(posedge clk or [pos|neg]edge reset)
always @(*)
ウィキペディアで、「システムが連続入力に依存している場合、これらはメタステーブル状態に対して脆弱である可能性があります。[...] アービターまたはフリップフロップへの入力がほぼ同時に到着した場合、回路は準安定点を通過する可能性が最も高いでしょう。」
形式が不十分であるために質問が閉じられるリスクがあります...何が欠けていますか?
非同期リセットは推奨される設計手法ですか? リセットを他の入力と同じように扱わず、次のサイクルで有効にすることによって何が得られますか? 通常、実際のチップのドキュメントでは、多くのクロック サイクルの間 RST* ピンを Low に保持する必要があります。
デザインにラッチがあると非同期になりますか? クロック ドメイン外の何かによって駆動されるラッチが存在する場合に、適切なタイミングが確実に観測されるようにするにはどうすればよいでしょうか?
クロック制御されたデザインで実際にラッチが必要になるのはいつですか? Verilog を使用すると、誤って簡単に作成してしまうのはなぜですか?
ありがとう!
一見関連する質問: -非同期リセット後に Verilog D-Flip-Flop が再ラッチされない -非同期リセットを使用した場合はどうすればよいですか?