AR# 8709

6.0.0 SYNPLIFY- クロック イネーブルまたはリセットが適切に判断されない。 syn_direct_enable が必要

説明

キーワード : flip, flop, flip-flop, CE, register, Synplicity, フリップ, フロップ, フリップフロップ, レジスタ

重要度 : 標準

概要 :
Synplify でクロック イネーブル、リセットが正しく判断されない場合があります。 たとえば、次のコードが FDRE ではなく FDR/FDE に合成されることがあります。

always@ (posedge clk)
if (reset)
q <= "1010"
else if (enable)
q <= d;

これは既知の問題で、Synplify の 6.2 のリリースでは、認識されるイネーブルまたはリセット信号の数が増える予定です。それでも場合によっては、このエラーが発生する可能性があります。

Synplicity はこの問題をバグ番号 #14321 として処理しています。

ソリューション

1

この問題の解決策として、イネーブル信号に次の属性を設定します。

Verilog

wire enable /* synthesis syn_keep = 1 syn_direct_enable = 1 */

VHDL

attribute syn_keep: boolean;
attribute syn_direct_enable: boolean;
attribute syn_keep of enable: signal is true;
attribute syn_direct_enable of enable: signal is true;

SDC

define_attribute {n:enable} syn_direct_enable {1}

注意 : 「イネーブル」はクロックイネーブル ネットを指します。

2

This solution might not work for Spartan devices. この問題はバグとして処理されており、2001 年 8/9 月にリリース予定の Synplify 6.1 で修正されることになっています。

当面は次の手順でこの問題を処理してください。

1. FDCE を手動でインスタンシエートし、CE ピンにアクセスする。
2. LogiBLOX カウンタを生成し、HDL ファイルの中でインスタンシエートする。

注 : COREGen カウンタは Spartan デバイスでは利用できません。

3

syn_direct_enable 属性でこの問題を解決できない場合は、イネーブル信号を確認し、信号の宣言時にロジックを割り当てていないことを確認してください。

次に例を示します。

次のコードを、

wire enable1 = we1 | we 2;

次のコードに変更してください。

wire enable1 /* synthesis syn_keep = 1 syn_direct_enable=1 */;
assign enable1 = we1 | we2 ;
AR# 8709
日付 09/10/2002
ステータス アーカイブ
種類 一般