2012-04-02 15 views
1

1239ページのは、合成不可能なalwaysブロックに対して警告します。また、合成不可能なalwaysブロックを誤って作成する可能性を減らすために、テンプレートに従います。しかし、このガイドでは、なぜブロックの合成が可能でないのかについて説明していません。alwaysブロックは合成できません。`always`ブロックの合成

alwaysブロックが合成不可能な最も一般的な理由は何ですか?

+0

通常の手続き型コードのパフォーマンスに関する質問とよく似ていますが、何が起こるかを知る最良の方法の1つは、試してみることです。例を挙げて、SynopsysのDesign Compilerにパンチし、回路図ビューアで生成された[netlist](http://en.wikipedia.org/wiki/Netlist)を見てください。 [SpringSoft's](http://www.springsoft.com/)Debussy/Verdiがあなたにアクセスできるなら、最高です。 –

答えて

2

基本的に常にすべてのブロックは、フリップフロップのグループ、ラッチのグループ、または組み合わせ回路のブロックを表しています。

これらの3つのコーディングフォーマットは異なるため、混在しないようにしてください。そうでない場合、合成できない可能性があります。 (ときどきラッチ回路と組み合わせ回路が混在することは避けてください)

これらの3種類の回路にマップできないブロックは、常に合成できません。

たとえば、フリップフロップはエッジトリガーとレベルトリガーを同時に行うことができないため、信号とエッジの混合された機密リストは合成できません。

3つ以上のクロックは合成できません。

埋め込み常時ブロックは合成できません。

1

タイミング遅延の追加は合成できませんが、検証でよく使用されます。また、表示文を合成しようとすると、いくつかのツールが文句を言うでしょう。

always @* begin 
$display("%t", $realtime); 
#1 x = y;     //Delayed by 1 time unit 
$display("%t", $realtime); 
end