ステートベースのトリガーフローでは、カスタムのトリガーフローを定義して、トリガー条件を整理できます。これらの例では、一般的なトリガー・フロー・シナリオのテンプレートを示し、ステートベースのトリガーフローが有用なさまざまなシナリオを提示しています。これらのすべての例では、表示モード すべてのステートを 1 ウィンドウ内を使用して、フローの説明を SignalTap II ステートベースのトリガー・フロー・タブに直接貼り付けて、デバッグのシナリオに合わせて説明を変更できます。
ステートベースのトリガーフローの説明
//トリガーアクションを含む条件が最初にあるかどうかを確認するのは、
// 条件文はプライオリティーに基づいているため。
if ( c1 >= 5)
trigger;
else if ( ! condition1 )
increment c1;
else if ( condition1 && c1 < 5 )
reset c1;
データ分析結果
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 && c1 > 0 && c1 < 5)
trigger;
else if ( ! condition1 && c1 < 6)
increment c1;
else if ( condition1 && c1 > 5 )
reset c1;
Condition1 が発生しない長いシーケンスの場合、カウンターがラップしないように、2 番目の else if 条件ステートメントにブール条件 c1 <6 が追加されました。
データ分析結果
ステートベースのトリガーフローの説明
state ST1:
if ( c1 >= 5)
trigger;
else if ( condition1 )
increment c1;
データ分析結果
5 回目のグループ値トランジションでトリガー
方法 #1: エッジセンシティブなトリガーの使用
トリガー条件のセットアップ
この場合、希望するグループ値へのすべてのバス遷移を検出するために、エッジセンシティブなトリガー条件を定義できます。データバス上の任意のビットのエッジ検出と、希望するグループ値との比較において、論理的 AND を実行する必要があります。この場合、高度なトリガー条件が必要です。高度なトリガー条件エディターからのセットアップを以下に示します。
ステートベースのトリガーフローの説明
state ST1:
if (c1 >= 5)
trigger;
else if (condition1)
increment c1;
データ分析結果
方法 #2: シンプルなトリガーとステートベースのトリガーフローの使用
トリガー条件のセットアップ
バス値が大きい場合に高度なトリガ条件を設定するのは面倒なので、この代替方法では基本的なトリガを使用し、ステートベースのトリガフローを使用して、バスの希望するグループ値へのトランジションを検出します。
ステートベースのトリガーフローの説明
state ST1:
if (condition1)
begin
increment c1;
goto ST2;
end
state ST2:
if (c1 >= 5)
trigger;
//待機条件; 条件 1 が false になるまでこの状態にとどまり、
//バス・トランジションではない条件 1 のすべての発生を無視する
else if (! condition1)
begin
goto ST1;
end
データ分析結果
最初の方法と比べて、データのキャプチャー動作に若干の違いがあることに留意してください。この場合、トリガ条件にはレベル・センシティブなトリガーが使用されます。データ分析の開始時に、バス値が目的のグループ値でパークされる場合、この方法ではグループ値をカウントに含めます。最初の方法では、目的のグループ値へのバス・トランジションのみをカウントするため、取得開始時にグループ値がすでにバス上でパークしている場合、最初の方法ではグループ値の最初の発生を無視することになります。
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST2;
state ST2:
if ( condition1 || condition3 )
goto ST2;
else if (condition2 )
goto ST3;
else if ( ! condition2 )
goto ST1;
state ST3:
trigger;
データ分析結果
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST2;
state ST2:
if ( condition1 )
goto ST2;
else if (condition2 )
trigger;
else
goto ST1;
データ分析結果
Condition1 と Condition3 の間に Condition2 が発生しない場合のトリガー
トリガー条件のセットアップ
3 つの基本トリガー条件が、目的のグループ値に対して定義されています。ここでもニーモニックが使用されています。
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST2;
state ST2:
if ( condition3 )
goto ST4;
else if ( ! condition2 )
goto ST3;
else
goto ST1;
state ST3:
if ( condition3 )
goto ST4;
state ST4:
trigger;
データ分析結果
Condition1 が 5 回連続して発生した場合のトリガー
トリガー条件のセットアップ
1 つの基本トリガー条件が、セットアップ・タブで目的の値に定義されます。下の図の TrigCond1 は、Mnemonic テーブル・セットアップを使ってセットアップした値 AA の別名です。
ステートベースのトリガーフローの説明
state ST1:
if ( c1 >= 5 )
trigger;
else if ( condition1 )
increment c1;
else if ( ! condition1 )
reset c1;
データ分析結果
シーケンス違反後のトリガー: Condition1-> Condition2-> Condition3-> Condition4
トリガー条件のセットアップ
4 つの基本トリガー条件が、目的のシーケンス値に対して設定されます。表示されている 4 つのトリガ条件すべてにニーモニックが使用されています。
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST3;
else if ( condition2 )
goto ST4;
else if ( condition3 )
goto ST5;
else if ( condition4 )
goto ST2;
else
trigger;
state ST2:
if ( condition4 )
goto ST2;
else if (condition1 )
goto ST3;
else
trigger;
state ST3:
if (condition1)
goto ST3;
else if (condition2)
goto ST4 ;
else
trigger;
state ST4:
if (condition2)
goto ST4;
else if (condition3)
goto ST5;
else
trigger;
state ST5:
if (condition3)
goto ST5;
else if ( condition4)
goto ST2;
else
trigger;
データ分析結果
エッジのシーケンスでのトリガー
トリガー条件のセットアップ
目的のシーケンスに対して、3 つのエッジセンシティブな基本トリガー条件が設定されます。この例では、チャンネル 1 の立ち上がりエッジ、チャンネル 2 の立ち下がりエッジ、次いでチャンネル 3 の立ち上がりエッジを探します。
ステートベースのトリガーフローの説明
state ST1:
if (condition1)
goto ST2;
state ST2:
if (condition2)
goto ST3;
state ST3:
if (condition3)
trigger;
else
goto ST1;
データ分析結果
Condition1 に続き、5 クロックサイクル後に Condition2 が発生した場合のトリガー
トリガー条件のセットアップ
2 つの基本トリガー条件が、目的のグループ値に対して定義されます。ここでも、TrigCond1 と TrigCond2 にニーモニックが使用されています。
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST2;
state ST2:
if ( condition1)
goto ST2;
else if ( ! condition2 )
increment c1;
else if (condition2 && c1 >= 5)
trigger;
else if (condition2 && c1 < 5)
goto ST1;
データ分析結果
Condition1 に続き、Condition2 が 5 サンプル以内に発生した場合のトリガー
トリガー条件のセットアップ
2 つの基本トリガー条件が、目的のグループ値に対して定義されます。ここでも、TrigCond1 と TrigCond2 にニーモニックが使用されています。
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST2;
state ST2:
if ( condition1)
goto ST2;
else if ( ! condition2)
increment c1;
else if (condition2 && c1 <= 5)
trigger;
else if (condition2 && c1 > 5)
goto ST1;
データ分析結果
Condition1 に続き、5 サンプル以内に Condition2 が発生しない場合のトリガー
トリガー条件のセットアップ
2 つの基本トリガー条件が、目的のグループ値に対して定義されます。ここでも、TrigCond1 と TrigCond2 にニーモニックが使用されています。
ステートベースのトリガーフローの説明
state ST1:
if ( condition1 )
goto ST2;
state ST2:
if (c1 == 5)
trigger;
else if ( condition1)
goto ST2;
else if ( ! condition2)
increment c1;
データ分析結果
5 回連続のトランジション後にトリガー
トリガー条件のセットアップ
この例では、監視対象のバス上のあらゆるトランジション活動をキャプチャーするためのトリガ条件が必要です。OR 条件が必須なため、高度なトリガー条件が必要です。
ステートベースのトリガーフローの説明
state ST1:
if ( c1 == 5 )
trigger;
else if ( ! condition1)
reset c1;
else if ( condition1 )
increment c1;
データ分析結果
Condition2 と Condition3 の間で Condition1 の発生回数が 5 回未満の場合のトリガー
トリガー条件のセットアップ
この例では、3 つのエッジセンシティブなトリガー条件が必要で、各トリガー条件には目的のグループ値との比較が含まれます。これは、高度なトリガー条件エディターを使用して行えます。下の図に、3 つのエッジセンシティブなトリガー条件の 1 つの例を示します。
ステートベースのトリガーフローの説明
state ST1:
if ( condition2)
begin
reset c1;
goto ST2;
end
state ST2:
if (condition3 )
goto ST3;
else if ( condition2)
goto ST1;
else if ( condition1 )
increment c1;
else if ( condition3 && (c1 >= 5 ))
goto ST1;
state ST3:
trigger;