觸發序列:
雖然邏輯分析儀觸發通常很簡單,但它們卻需要復雜的程序。例如,可能想在某一信號的上升沿后跟另一信號的上升沿時觸發。這意味著邏輯分析器必須在開始尋找下一個上升沿之前找到第一個上升沿。由于擁有一個可查找觸發的步驟序列,因此它被稱為觸發序列。序列的每個步驟被稱為一個序列步驟。
每個序列步驟由兩部分組成:條件和操作。條件是指布爾邏輯表達式,例如“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 次出現時觸發,可以將觸發設置為: