分析测试百科网

搜索

喜欢作者

微信支付微信支付
×

逻辑分析仪基础知识(八)

2020.9.28
头像

王辉

致力于为分析测试行业奉献终身

触发序列:

虽然逻辑分析仪触发通常很简单,但它们却需要复杂的程序。例如,可能想在某一信号的上升沿后跟另一信号的上升沿时触发。这意味着逻辑分析器必须在开始寻找下一个上升沿之前找到第一个上升沿。由于拥有一个可查找触发的步骤序列,因此它被称为触发序列。序列的每个步骤被称为一个序列步骤。

每个序列步骤由两部分组成:条件和操作。条件是指布尔逻辑表达式,例如“If ADDR = 1000”或“If there is a rising edge on SIG1”。操作是指符合条件时逻辑分析仪应当执行的内容。操作的示例包括触发逻辑分析仪、转至另一序列步骤以及启动定时器。这类似于编程中的 If/Then 语句。

触发序列中的每个步骤都被指定一个数字。执行的第一个序列步骤总是序列步骤 1,但由于“转到”操作,剩余的序列步骤可以以任意顺序执行。

执行一个序列步骤且布尔逻辑表达式均为假时,逻辑分析仪将采集下一样本并再次执行同一序列步骤。例如一个简单的示例,考虑以下触发序列:

1. If DATA = 7000 then Trigger
如果采集以下样本,逻辑分析仪将在采集样本 #6 时触发。

 样本号 ADDR DATA 1 1000 2000 2 1010 3000 3 1020 4000 4 1030 5000 5 1040 6000 6 1050 7000 <- 此处为逻辑分析仪的触发位置 7 1060 2000
实际上,序列步骤 1 相当于“Keep acquiring more samples until DATA=7000, then trigger”。

如果符合一个序列步骤中的布尔逻辑表达式,那么在执行下一序列步骤之前总是采集另一样本。换句话说,如果一个样本符合序列步骤 1 的条件,在执行序列步骤 2 前将采集另一样本。这意味着一个单独的样本不可能符合多个序列步骤的条件。每个序列步骤都可以看作是代表了在不同点及时发生的事件。两个序列步骤可以从不用于指定同时发生的两个事件。

例如,考虑以下触发序列:
1. If ADDR = 1000 then Go to 2 2. If DATA = 2000 then Trigger
如果采集以下样本,逻辑分析仪将在采集样本 #7 时触发。

 样本号 ADDR DATA 1 1000 2000 <- 此样本符合序列步骤 #1 中的条件 2 1010 3000 3 1020 4000 4 1030 5000 5 1040 6000 6 1050 7000 7 1060 2000 <- 此处为逻辑分析仪的触发位置
请注意,由于在符合序列步骤 1 中的条件和测试序列步骤 2 中的条件二者之间采集了新的样本,因此逻辑分析仪不会在采集样本 #1 时触发。可将此触发序列看作是“Find ADDR = 1000 followed by DATA = 2000 and then trigger”。触发序列中的多序列步骤暗示了“后接”。

逻辑分析仪触发后,将不会再次触发。换句话说,即使度个样本符合触发条件,逻辑分析仪也只触发一次。例如,使用“ADDR=1000”作为触发,如果逻辑分析器采集以下样本,它将会在采集样本 #2 时触发,并且只在采集样本 #2 时触发。

样本号 ADDR 1 0000 2 1000 <- 此处为逻辑分析仪的触发位置 3 2000 4 1000 <- 逻辑分析仪不会在此处再次触发 5 1040
一个经常遇到的问题是“如果不符合序列步骤中的条件会怎样?”例如,有一个条件是“If ADDR = 1000 Then Trigger”,那么如果当前样本是 ADDR = 2000,结果会怎样?逻辑分析仪只采集下一样本并试图再次执行此序列步骤。实际上,如果触发条件是“ADDR = 1000”,这相当于“持续采集样本直到找到条件为 ADDR=1000 的样本”。因此,如果设置一个从不符合的触发条件,逻辑分析器将不会触发。

当符合序列步骤中的条件时,使用“转到”操作时下一步将执行哪个序列步骤将会非常清楚,但是如果没有使用“转到”操作,则不可能知道执行哪个序列步骤。在一些逻辑分析仪上,如果没有“转到”,这意味着应当执行下一序列步骤。在其他逻辑分析仪上,意味着将再次执行同一序列步骤。由于比较混乱,最好使用“转到”操作而不依靠默认。状态和定时模块通过在每个序列步骤中自动包含一个“转到”或“触发”操作来解决这一问题。例如: If ADDR = 1000 and DATA = 2000 then Go to 1 <- 这是自动添加的

布尔逻辑表达式:当多个序列步骤表示“后跟”时,可以在序列步骤内使用布尔逻辑表达式。示例:
If ADDR = 1000 and DATA = 2000 此表达式意指在同一样本中 ADDR 必须等于 1000 且 DATA 等于 2000,才能符合此表达式。换句话说,在 ADDR 等于 1000 的同时 DATA 等于 2000。因此,如果要在同时发生两个事件时触发,则应使用布尔逻辑表达式。常见错误是应使用布尔逻辑表达式时尝试使用两个序列步骤,或者应使用两个序列步骤时尝试使用布尔逻辑表达式。当多个事件同时发生时使用布尔逻辑表达式,而在一个事件接着一个事件发生时使用多个序列步骤。

分支:分支类似于 C 编程语言中的 Switch 语句和 Basic 中的 Select Case 语句。分支可提供测试多个条件的方法。每个分支都有其独有的操作。下面是多分支的一个示例:
 1. If ADDR < 1000 then Go To 2 <- This is a branch of Level 1 Else If ADDR > 2000 then Go To 3 <- This is a 2nd branch of Level 1 Else If DATA = 2000 then Trigger <- This is a 3rd branch of Level 1 2. If DATA <= 7000 then Trigger 3. If there is a Rising Edge on SIG1, then Trigger 在序列步骤 1 中,存在三个分支,因此存在三个可以采用的操作。

如果符合某一分支的条件,则不对其下面的任何分支进行测试。换句话说,无法根据单个样本执行多个分支,即使该样本可导致符合多个分支条件。也就是说,每个分支都是一个“Else If”。
沿:沿表示单个信号从下到上或从上到下的转变。通常,沿被指定为“上升沿”、“下降沿”或“任一时钟沿”,其中“上升沿”表示从下到上的转变。在大多数逻辑分析仪上,触发序列中最多可包含两个沿,而有些则只允许包含一个沿。

范围:指定值的范围是划分范围的一种便捷方式,如“1000 到 2000 范围内的 ADDR”。大多数逻辑分析仪还支持“not in range”功能。范围是一种方便的快捷方式,因此您无需指定“ADDR >= 1000 and ADDR <= 2000”。
标志:标志是用于从一个模块向另一个模块发送信号的布尔变量。当某种情况在某一模块中发生而稍后被另一模块测试时可以设置标志。在下面的示例中,标志 1 用于跟踪在模块 1 的触发序列中发生的情况,以便在模块 2 中使用此信息。

模块 1 的触发序列:
1. If ADDR < 5000 then Set Flag 1 Trigger and fill memory
模块 2 的触发序列:
 1. If DATA = 5000 and Flag 1 is set then Trigger Else if DATA = 1000 and not Flag 1 then Trigger
计数器:发生计数器用于想要查找事件的“第 N 次”出现的情况。例如,如果想在 ADDR = 1000 第 5 次出现时触发,可以将触发设置为:


互联网
文章推荐