AR# 67439

Vivado 2016.1 および 2016.2 のデザイン アドバイザリ - ほかの LUT ロジックを駆動する LUT1 インバーターに ILA プローブを配置すると LUT 論理式が不正になる

説明

このデザイン アドバイザリでは、ほかの LUT ロジックを駆動する LUT1 インバーターに ILA プローブを配置すると、LUT 論理式が不正になる問題について説明します。

このサンプル デザインには、デバッグ用に ILA コアが追加されています。opt_design の実行前後で LUT 論理式が異なることがあります。

次に、opt_design の実行前後の回路図と真理値表を示します。

 

これらを比較すると、インバーターが LUT3 の I1 ピンに挿入されたのを反映して LUT3 の真理値表の論理式が変更されていますが、opt_design 後の回路図から I1 ピンを駆動する LUT1 インバーターが削除されていません。

 

opt_design 実行前 :

 


 

 

opt_design 実行後 :

 


ソリューション

この問題は、最適化中にインバーターがピンに挿入されたときにパスに余分な反転が不正に追加されることが原因で発生します。

ロード LUT の LUT 論理式は変更されますが、プローブがあるためにピンに挿入されたインバーターがパスから削除されず、余分な反転がパスに追加されてしまいます。

問題 :

この問題が原因で、デザインに ILA プローブを追加した後にデザインがハードウェアでエラーとなることがあります。

 

インバーターのピンへの挿入については、次のような情報メッセージがログに表示されます。

INFO: [Opt 31-138] Pushed 2 inverter(s) to 38 load pin(s).

解決策 :

この問題は、Vivado 2016.3 で修正されています。当面の間は、2016.1 および 2016.2 で使用可能な次の回避策を使用してください。

 

オプション 1 :

次のパラメーターを設定します。

set_param logicopt.enablePartialInvPushingInPresenceOfDTBoundaries 0

このパラメーターにより、インバーターのピンへの挿入がディスエーブルになります。このパラメーター設定を init.tcl ファイルに追加すると、すべてのプロジェクトで自動的に設定されるようになります。 

init.tcl の使用の詳細は、『Vivado Design Suite ユーザー ガイド : Tcl スクリプト機能の使用』 (UG894) の「Tcl スクリプトの読み込みと実行」を参照してください。 すべてのユーザーおよびプロジェクトでこのインバーターの問題が発生しないようにするため、このソリューションをお勧めします。

 

オプション 2 :

次の XDC 制約を使用して、関連するどちらかの LUT セルの DONT_TOUCH プロパティを TRUE に設定します。

set_property DONT_TOUCH TRUE [get_cells LUT_instance_name]

このアンサーに、MARK_DEBUG ネットを駆動する LUT1 インバーターを検出する Tcl スクリプト (find_lut1_md.tcl) が添付されています。LUT1 の名前をレポートし、それに DONT_TOUCH プロパティを適用します。 

このスクリプトは、opt_design の前にこの問題を回避するために実行するか、opt_design の後に問題を検出するために実行できます。tcl.pre 機能を使用すると、opt_design の前にこのスクリプトが自動的に実行されるように設定できます。

 

オプション 3 :

プローブを移動して LUT1 インバーター出力に配置されないようにします。プローブによりインバーターの挿入が妨害されるので、これによりロジック レベル数も少なくなります。

添付ファイル

関連添付ファイル

タイトル サイズ ファイルタイプ
find_lut1_md.tcl 354 Bytes TCL
AR# 67439
日付 08/02/2016
ステータス アクティブ
種類 デザイン アドバイザリ
デバイス
ツール