SignalTap* II 基于状态的触发流程

author-image

作者

基于状态的触发流让您可以定义自定义触发流程来组织触发条件。这些示例显示了常见触发流程场景的模板,并说明了基于状态的触发流程有用的各种场景。对于所有这些示例,您可以使用显示模式一个窗口显示所有状态,将流程描述直接粘贴到 SignalTap II 基于状态的触发流程选项卡中,并修改描述以适合您的调试场景。

在缺席大于或等于 5 个时钟周期的事件上触发

触发条件设置

设置选项卡中将一个基本触发条件定义为所需的值。下图所示的 TrigCond1 是使用 Mnemonic 表设置的 AA 设置值的别名。

基于状态的触发流程描述

//make sure if condition containing trigger action is first,

// since conditional statements are priority based.

if ( c1 >= 5)

trigger;

else if ( ! condition1 )

increment c1;

else if ( condition1 && c1 < 5 )

reset c1;

数据分析结果

在缺席少于 5 个时钟周期的事件上触发

触发条件设置

设置选项卡中将一个基本触发条件定义为所需的值。下图所示的 TrigCond1 是使用 Mnemonic 表设置的 AA 设置值的别名。

基于状态的触发流程描述

state ST1:

if ( condition1 && c1 > 0 && c1 < 5)

trigger;

else if ( ! condition1 && c1 < 6)

increment c1;

else if ( condition1 && c1 > 5 )

reset c1;

在条件 1 未发生的长序列情况下,如果有条件声明防止计数器包装,则在第二个序列中添加了布尔条件 c1 <6。

数据分析结果

在群组值的第 5 次发生时触发

触发条件设置

设置选项卡中将一个基本触发条件定义为所需的值。下图所示的 TrigCond1 是使用 Mnemonic 表设置的 AA 设置值的别名。

基于状态的触发流程描述

state ST1:

if ( c1 >= 5)

trigger;

else if ( condition1 )

increment c1;

数据分析结果

在群组值的第 5 次转换时触发

方法 #1: 使用边缘敏感触发器

触发条件设置

对于这种情况,我们可以定义一个边缘敏感触发条件来检测所有总线转换到所需的组值。我们需要通过与所需的组值进行比较,对逻辑与运算的数据总线上的任何位进行边缘检测。在这种情况下,需要高级触发条件。高级触发条件编辑器的设置如下所示。

基于状态的触发流程描述

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;

//wait condition; stay in this state until condition 1 is false to ignore

//all occurrences of condition1 that are not bus transitions

else if (! condition1)

begin

goto ST1;

end

数据分析结果

请注意,与第一种方法相比,数据捕获方式的行为略有不同。在这种情况下,电平敏感触发器用于触发条件。如果总线值在数据分析开始时停在所需的组值处,则该方法将组值包括在计数中。由于第一种方法只计算到所需组值的总线转换,如果组值在采集开始时已经停在总线上,则第一种方法将忽略组值的第一次出现。

在条件 1 后触发,然后是条件 2

触发条件设置

在设置选项卡中将三个基本触发条件定义为所需的值。前两个触发条件设置为所需的组值。第三个触发条件旨在捕获第一个和第二个条件之间总线上某种类型的空闲事务。如果更合适,您可以将此触发条件设置为“不在乎”。请注意对 TrigCond1、TrigCond2 和 IDLE 使用助记符。

基于状态的触发流程描述

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;

数据分析结果

在条件 1 上触发,然后紧接着是条件 2

触发条件设置

为所需的组值定义了两个基本触发条件。再次注意对 TrigCond1 和 TrigCond2 使用助记符。

基于状态的触发流程描述

state ST1:

if ( condition1 )

goto ST2;

state ST2:

if ( condition1 )

goto ST2;

else if (condition2 )

trigger;

else

goto ST1;

数据分析结果

在条件 2 上触发,条件 1 与条件 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;

数据分析结果

在条件 1 的第 5 次连续发生时触发

触发条件设置

设置选项卡中将一个基本触发条件定义为所需的值。下图所示的 TrigCond1 是使用 Mnemonic 表设置的 AA 设置值的别名。

基于状态的触发流程描述

state ST1:

if ( c1 >= 5 )

trigger;

else if ( condition1 )

increment c1;

else if ( ! condition1 )

reset c1;

数据分析结果

违反序列后触发:条件 1-> 条件 2-> 条件 3-> 条件 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;

数据分析结果

在边缘序列上触发

触发条件设置

为所需的序列设置了三个边缘敏感的基本触发条件。此示例在通道 1 上查找上升沿,在通道 2 上查找下降沿,然后在通道 3 上查找上升沿。

基于状态的触发流程描述

state ST1:

if (condition1)

goto ST2;

state ST2:

if (condition2)

goto ST3;

state ST3:

if (condition3)

trigger;

else

goto ST1;

数据分析结果

5 个时钟周期后在条件 1 上触发然后是条件 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;

数据分析结果

5 个样本内在条件 1 上触发然后是条件 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;

数据分析结果

5 个样本内在条件 1 上触发然后不是条件 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;

数据分析结果

当条件 1 在条件 2 和条件 3 之间发生小于 5 次时触发

触发条件设置

此示例需要三个边缘敏感触发条件,每个触发条件都包含与所需组值的比较。这可以使用高级触发条件编辑器来完成。下图显示了三个边缘敏感触发条件之一的示例。

基于状态的触发流程描述

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;

数据分析结果