中心議題:
- 什么時候應(yīng)使用邏輯分析儀
- 定時分析儀基礎(chǔ)
- 選擇正確的采樣方法
- 觸發(fā)定時分析儀
- 狀態(tài)分析儀基礎(chǔ)
- 觸發(fā)狀態(tài)分析儀
在選擇是使用示波器,還是使用邏輯分析儀時,多數(shù)工程師會選擇示波器。為什么? 因為大多數(shù)用戶更熟悉示波器。但示波器的測量能力不能適應(yīng)有些應(yīng)用的需要,而邏輯分析儀卻可能提供更有用的信息。由于示波器和邏輯分析儀在測量能力上有所重疊,因此在某些情況下兩種儀器都可以使用。如何確定哪種儀器更適合您的應(yīng)用呢?
什么時候應(yīng)使用示波器
- 當您需要看到信號上小的電壓變化
- 當您需要很高的時間間隔精度
一般來說,在需要高垂直或電壓分辨率時應(yīng)使用示波器。即如果您需要看到如圖1 所示的每一微小電壓變化,就應(yīng)使用示波器。許多示波器,包括新一代數(shù)字示波器,還能夠提供非常高的時間間隔分辨率。也就是能以很高的精度測量兩個事件間的時間間隔。總之,當您需要參數(shù)信息時,就應(yīng)使用示波器。
圖1. 示波器波形
什么時候應(yīng)使用邏輯分析儀當您需要同時看到許多信號當您需要以與硬件相同的工作方式觀察系統(tǒng)中的信號當您需要在若干信號線的高或低電平上進行碼型觸發(fā),并觀察結(jié)果邏輯分析儀源出于示波器。它們用和示波器相同的方式展現(xiàn)數(shù)據(jù),水平軸代表時間,垂直軸代表電壓幅度。但與示波器提供很高的電壓分辨率及時間間隔精度不同,邏輯分析儀能同時捕獲和顯示數(shù)百個信號,這是示波器達不到的。當系統(tǒng)中的信號穿越閾值電平時,邏輯分析儀的反應(yīng)與您的邏輯電路相同。它能識別信號是低電平還是高電平。它也能在這些信號的高和低電平的碼型上觸發(fā)。
一般來說,當您需要觀察多于示波器通道數(shù)的信號線,并且不需要精密的時間間隔信息時,就應(yīng)使用邏輯分析儀。如果您需要得到像上升和下降時間這類參數(shù)信息時,邏輯分析儀并非好的選擇(見圖2)。而在觀察總線— 例如微處理器地址、數(shù)據(jù)或控制總線上的時間關(guān)或數(shù)據(jù)時,邏輯分析儀是特別有用的。邏輯分析儀還能解碼微處理器總線信息,并以有意義的形式呈現(xiàn)??傊?,當您完成了參數(shù)設(shè)計階段,開始關(guān)注許多信號間的定時關(guān)系和需要在邏輯高和低電平碼型上觸發(fā)時,邏輯分析儀就是正確的工具。
圖2. 示波器和定時波形
什么是邏輯分析儀?
到目前為止,“邏輯分析儀”這一術(shù)語的使用并不十分嚴格。實際上大多數(shù)邏輯分析儀是定時分析儀和狀態(tài)分析儀的綜合體。我們下面將講述這兩種分析儀各自的特殊功能。
定時分析儀基礎(chǔ)
定時分析儀是邏輯分析儀中類似示波器的部分。我們可以將它們看成是親密的堂兄堂弟。定時分析儀用與示波器相同的通用形式顯示信息,水平軸代表時間,垂直軸代表電壓幅度。由于這兩種儀器上的波形與時間相關(guān),因此稱為“時域”中的顯示。
選擇正確的采樣方法
定時分析儀通過采樣輸入波形確定信號是高還是低。定時分析儀只關(guān)心用戶定義的電壓閾值。如果采樣時信號高于該閾值,就以高或1顯示; 低于閾值的用0或低顯示。從這些采樣點得到一張由 1 和0 組成,代表輸入波形1 bit 圖的列表。分析儀只確定波形是高還是低— 而不認可中間電平。這張表格保存在存儲器中,并可用它重建輸入波形的1bit 圖,如圖3所示。
圖3. 定時分析儀采樣點
現(xiàn)在我們觀察圖4上的顯示,這里數(shù)字示波器和定時分析儀顯示實際相同的信號(正弦波)。定時分析儀趨向于把各種信號拉成方波,這似乎會影響到它的可用性,但我們應(yīng)記住定時分析儀并非是用作參數(shù)測量的儀器。如果您要檢驗信號的上升時間,就不應(yīng)使用分析儀,而應(yīng)使用示波器。但如果您需要通過同時觀察幾條甚至幾百條信號線驗證信號間的定時關(guān)系,那么定時分析儀就是正確選擇。[page]
例如,假定我們必須每2 ms 刷新一次系統(tǒng)中的動態(tài)RAM。為保證存儲器內(nèi)的所有內(nèi)容均在這2 ms內(nèi)刷新,我們用計數(shù)器對RAM的所有行順序計數(shù)并進行刷新。如果要確認在再次開始前計數(shù)器已完成對所有行的計數(shù),就可把定時分析儀設(shè)置為在計數(shù)器開始和顯示所有計數(shù)時觸發(fā)。這里并不關(guān)心參數(shù)— 我們僅僅要檢查計數(shù)器從1 到N 的計數(shù),然后再次開始。
圖4. 示波器和定時分析儀顯示相同的信號
當定時分析儀對輸入線進行采樣時,得到的是狀態(tài)高或低。如果信號線在某次采樣時為一種狀態(tài)(高或低),在下一次采樣時為相反的狀態(tài),分析儀就“知道”輸入信號在兩次采樣間的某個時刻產(chǎn)生跳變。它并不知道跳變究竟發(fā)生在何時,因此把跳變點放在下一次采樣上,如圖3所示。這就造成分析儀對跳變實際產(chǎn)生時刻和顯示時刻的不確定性。這種不確定性的最壞情況是一個采樣周期,即在上一采樣點后跳變立即產(chǎn)生的情況。在采用這項技術(shù)時,需要對分辨率和總采集時間作適當權(quán)衡。應(yīng)記住每個采樣點都要使用一個存儲器位置。分辨率越高(采樣率越快),采集窗就越短。
圖5. 定時分析儀采樣輸入線
跳變采樣
當我們捕獲如圖6所示帶有數(shù)據(jù)突發(fā)的輸入線上的數(shù)據(jù)時,我們必須把采樣率調(diào)到高分辨率(例如4 ns),以捕獲開始處的快脈沖。這意味著具有4K (4096樣本)存儲器的定時分析儀在16.4 μs后將停止采集數(shù)據(jù),使您不能捕獲到第二個數(shù)據(jù)突發(fā)。應(yīng)注意在通常的調(diào)試工作中,我們采樣和捕獲了長時間沒有活動的數(shù)據(jù)。它們使用了邏輯分析儀存儲器,卻不能提供更多的信息。如果我們知道跳變何時產(chǎn)生,是正跳變還是負跳變,就能夠解決這一問題。只存儲跳變發(fā)生時刻的基本信息,可以更有效地使用存儲器。為實現(xiàn)跳變定時,我們可在定時分析儀和計數(shù)器的輸入處使用“跳變探測器”?,F(xiàn)在定時分析儀只保存跳變前的那些樣本,以及至上一跳變的流逝時間。采用這種方法,每一跳變就只需使用兩個存儲器位置,輸入無活動時就完全無需存儲器。
這里我們談到了“有效存儲器深度”,它等于捕獲的總時間數(shù)據(jù)除以采樣周期(4 ns)。
毛刺捕獲
數(shù)字系統(tǒng)中一個令人頭痛的問題是“毛刺”。毛刺因為會在最不恰當?shù)臅r間造成災(zāi)難性的后果而聲名狼藉。如何捕獲36小時才產(chǎn)生一次,并會導(dǎo)致系統(tǒng)崩潰的毛刺呢? 定時分析儀在此可大顯身手。毛刺可由電路板走線間的電容性耦合、電源紋波、某些器件要求的高瞬時電流,或其它事件造成。定時分析儀可采樣輸入數(shù)據(jù),保持對采樣間所產(chǎn)生任何跳變的跟蹤,從而容易地識別毛刺。在分析儀中,把毛刺定義為相鄰兩次采樣間穿越邏輯閾值一次以上的任何跳變(圖5)。正如我們在前面所討論的,分析儀保持對采樣間所有跳變的跟蹤。為了識別毛刺,我們要“教”分析儀保持對所有多個跳變的跟蹤,并將它們作為毛刺顯示。顯示毛刺是一種很有用的功能,它也有助于提供毛刺觸發(fā)和顯示產(chǎn)生于毛刺前數(shù)據(jù)的能力,從而幫助我們確定毛刺產(chǎn)生的原因。這種能力也能使分析儀只捕獲毛刺產(chǎn)生時我們所要的數(shù)據(jù)。
回顧本節(jié)開始時提到的例子。我們有一個系統(tǒng)因毛刺出現(xiàn)在一條信號線上周期性的崩潰。由于周期很長,即使能保存所有數(shù)據(jù)(假定我們有足夠的存儲能力),也必須對如此不可思議的巨大信息量分類。另一種方法是使用沒有毛刺觸發(fā)能力的分析儀,按儀器前面板的run 按鈕,直到您看到毛刺。可惜這兩種方法都不實際。如果我們能告訴分析儀在毛刺上觸發(fā),它就能在找到毛刺后停止,捕獲毛刺出現(xiàn)前的所有數(shù)據(jù)。我們先讓分析儀工作,在系統(tǒng)崩潰時就得到導(dǎo)致錯誤的數(shù)據(jù)記錄。
圖8. 毛刺
觸發(fā)定時分析儀
用戶非常熟悉的另一個示波器術(shù)語是“觸發(fā)”。它也在邏輯分析儀中使用,但常稱為“跟蹤點”。與示波器的跡線總是在觸發(fā)后開始不同,邏輯分析儀連續(xù)捕獲數(shù)據(jù),并在找到跟蹤點后停止采集。這樣,邏輯分析儀就能顯示出被稱為負時間的跟蹤點前的信息,以及跟蹤點后的信息。[page]
碼型觸發(fā)
設(shè)置定時分析儀的跟蹤特性與設(shè)置示波器的觸發(fā)電平和斜率稍有一點區(qū)別。許多分析儀是在跨多條輸入線的高和低碼型上觸發(fā)。注意圖6中的菜單。我們已告訴分析儀當“INT4”的通道0, 2 , 4 , 6為高(邏輯1),1 , 3 , 5 , 7 通道為低(邏輯0)時開始捕獲數(shù)據(jù)。圖7顯示得到的結(jié)果,中間的垂直線示出了跟蹤點。在跟蹤點,通道0 , 2 , 4 , 6均為高,而通道1 , 3, 5, 7 均為低。為使某些用戶更感方便,絕大多數(shù)分析儀的觸發(fā)點不僅可用二進制(1 和0),而且可用十六進制,八進制,ASCII或十進制設(shè)置。例如在前面的例子若采用十六進制設(shè)置,觸發(fā)特性即可用55代替0101 0101。在查看4, 8, 16, 24, 32 bit 寬的總線時,使用十六進制的觸發(fā)點會更加方便。想想如果用二進制設(shè)置24 bit
總線會多麻煩啊!
圖9. INT4 設(shè)置在高低碼型上觸發(fā)
邊沿觸發(fā)
邊沿觸發(fā)對習(xí)慣使用示波器的用戶是一種很熟悉的概念。在調(diào)節(jié)示波器的“觸發(fā)電平”旋鈕時,您知道是在設(shè)置電壓比較器的電平,它告訴示波器在輸入電壓穿越該電平時觸發(fā)。定時分析儀的邊沿觸發(fā)與其基本相似,只是觸發(fā)電平已預(yù)設(shè)置到邏輯閾值。為什么在定時分析儀中也包含邊沿觸發(fā)? 許多邏輯器件都與電平相關(guān),這些器件的時鐘和控制信號都對邊沿敏感。邊沿觸發(fā)使您能與器件時鐘同步地捕獲數(shù)據(jù)。例如,考慮一個不能正確移位數(shù)據(jù)的邊沿觸發(fā)移位寄存器。這是數(shù)據(jù)問題還是時鐘沿問題呢? 為了檢查這一器件,我們需要驗證時鐘邊沿記錄的數(shù)據(jù)(圖11)。
您能告訴分析儀在時鐘邊沿(上升或下降)捕獲數(shù)據(jù),并獲取移位寄存器的所有輸出。當然在這種情況下,我們必須延遲跟蹤點,以顧及通過移位寄存器的傳播延遲。
圖10. 帶有跟蹤點的波形
圖11. 邊沿觸發(fā)移位寄存器
狀態(tài)分析儀基礎(chǔ)
在本應(yīng)用指南的第一部分,我們講述了作為邏輯分析儀兩個主要部分之一的定時分析儀。下面我們介紹邏輯分析儀的另一主要部分—狀態(tài)分析儀。如果您從未使用過狀態(tài)分析儀,您可能認為這是一種極為復(fù)雜的儀器,需要花很多時間才能掌握使用方法。您還會問自己: “我為什么要用狀態(tài)分析儀呢? 我設(shè)計的是硬件。”事實上,許多硬件設(shè)計師發(fā)現(xiàn)狀態(tài)分析儀是很有價值的工具,特別是跟蹤軟件或硬件中的一些小錯誤時。它可避免產(chǎn)生問題時硬件研制組與軟件研制組間的相互指責(zé)。且掌握狀態(tài)分析儀也并不比定時分析儀困難。
什么時候應(yīng)使用狀態(tài)分析儀如果要了解什么時候應(yīng)使用狀態(tài)分析儀,我們首先要知道什么是“狀態(tài)”。一個邏輯電路的“狀態(tài)”是數(shù)據(jù)有效時對總線或信號線的采樣樣本。例如,取一個如圖12 所示的簡單“D”觸發(fā)器。“D”輸入端的數(shù)據(jù)直到時鐘上升沿到來時才有效。這樣,觸發(fā)器的狀態(tài)就是時鐘上升沿產(chǎn)生時的狀態(tài)?,F(xiàn)在,假定我們有8個這樣的觸發(fā)器并聯(lián)。所有8個觸發(fā)器都連到同樣的時鐘信號上(圖13)。當時鐘線上產(chǎn)生正跳變時,所有8個觸發(fā)器都要捕獲各自“D”輸入端的數(shù)據(jù)。這樣,每當時鐘線上正跳變時就產(chǎn)生一個狀態(tài),這8條線類似于微處理器總線。如果我們把狀態(tài)分析儀接到這8條線上,并告訴它在時鐘線正跳變時收集數(shù)據(jù),狀態(tài)分析儀將照此執(zhí)行。除非時鐘跳到高電平,否則輸入的任何活動將不被狀態(tài)分析儀捕獲。
這說明了定時分析儀和狀態(tài)分析儀的主要區(qū)別。定時分析儀有內(nèi)部時鐘控制采樣,因此它是對被測系統(tǒng)作異步采樣。而狀態(tài)分析儀從系統(tǒng)得到采樣時鐘,因此它是對系統(tǒng)同步采樣。作為經(jīng)驗法則,您應(yīng)記住要用狀態(tài)分析儀檢查總線上發(fā)生了“什么”,而用定時分析儀查看“什么時候”發(fā)生。因此,狀態(tài)分析儀通常用列表方式顯示數(shù)據(jù),而定時分析儀用波形圖顯示數(shù)據(jù)。在邏輯分析儀用波形圖顯示狀態(tài)數(shù)據(jù),或以列表顯示定時數(shù)據(jù)時,我們應(yīng)非常小心,以避免錯誤地解釋數(shù)據(jù)。
理解時鐘
在定時分析儀中,采樣是沿著單一內(nèi)部時鐘的方向進行,從而使事情非常簡單。但微處理器系統(tǒng)中往往會有若干個“時鐘”,讓我們來看一個簡單的例子。假定某個時刻我們要在RAM中的一個特定地址上觸發(fā),并查看所保存的數(shù)據(jù)。再假定使用的微處理器是Zilog 80。為了用狀態(tài)分析儀從Z80 捕獲地址,我們要在MREQ線為低電平時進行捕獲。而為捕獲數(shù)據(jù),需要在WR線為低(寫周期)或RD線為低(讀周期)時讓分析儀采樣。某些微處理器可在同一條線上對數(shù)據(jù)和地址進行多路轉(zhuǎn)換。分析儀必須能得到來自相同信號線不同時鐘的時鐘脈沖輸入信息。在讀寫周期期間,Z80首先把一個地址放在地址總線上。接著設(shè)置MREQ,表示該地址對存儲器的讀或?qū)懹行?。最后根?jù)現(xiàn)在是讀還是寫設(shè)置RD或WR狀態(tài)。WR線只有在總線數(shù)據(jù)有效后才能進行設(shè)置。這樣,定時分析儀就作為多路分配器在適當?shù)臅r間捕獲地址,然后在同一信號線上捕獲產(chǎn)生的數(shù)據(jù)。
圖14. RAM 定時波形[page]
觸發(fā)狀態(tài)分析儀
像定時分析儀一樣,狀態(tài)分析儀也提供限定所要保存數(shù)據(jù)的能力。如果我們要尋找地址總線上由高低電平構(gòu)成的特定碼型,可告訴分析儀在找到該模式時開始保存,直到分析儀的存儲器完全裝滿。在下面的例子中,我們把觸發(fā)點設(shè)置為FFF03187(十六進制)(圖15)。在這種情況下我們要找出FFF03187 位置中的內(nèi)容,因此把數(shù)據(jù)觸發(fā)設(shè)置為不予關(guān)注(XXXX)態(tài)。這就告訴分析儀對地址FFF03187觸發(fā),而不管該點是什么數(shù)據(jù)。分析儀捕獲地址FFF03187 和所有其后的狀態(tài)。應(yīng)注意地址FFF03187的數(shù)據(jù)是554103E7(圖16),并且所有信息均以十六進制格式顯示。當然也可使用二進制格式。但在解碼至匯編碼時,十六進制可能更為方便。如果您規(guī)定所有總線信息都用十六進制顯示,就得到如(圖16)這樣的顯示。
圖15. 狀態(tài)分析儀的觸發(fā)設(shè)置
這些十六進制代碼是什么意思?
在使用處理器時,特定的十六進制字符包含一個處理器指令。如果您很熟悉十六進制代碼,就能查看這些類似圖13 所示的十六進制代碼表,并知道它們代表的指令。但我們大部分人做不到這一點。因此,絕大多數(shù)分析儀制造商設(shè)計了稱為反匯編器的軟件包。這些軟件包把十六進制代碼轉(zhuǎn)換成易于閱讀的匯編碼。例如圖13中有0000 41B0 和0000 41B1。我們可以從MotorolaPowerQUICC 手冊中查到它們代表存儲器寫0x00 指令。反匯編器可以為我們做這些事情,使我們不需要查找這些代碼。請查看圖17 并注意它們之間的差別。
圖16. 狀態(tài)分析儀捕獲的數(shù)據(jù)
圖17. 把十六進制碼翻譯成匯編碼
理解序列級
狀態(tài)分析儀具有幫助觸發(fā)和存儲的“序列級”。序列級使您能比單一觸發(fā)點更精確地限定要保存的數(shù)據(jù)。也就是說可使用更精確的數(shù)據(jù)窗,而不必存儲不需要的信息。序列級的一般形式為:
1 find xxxx
else on xxxx go to level x 2
then find xxxx
else on xxxx go to level x 3
trigger on xxxx
在從程序中的特定點進入子程序時,序列級是特別有用的。節(jié)省存儲器和時間的選擇性保存序列級使我們有可能調(diào)用經(jīng)選擇的保存。選擇性的保存意味著可只保存較大整體中的一部分。例如,假定我們有一個計算給定數(shù)平方的匯編例程。如果該例程不能正確計算平方,我們就告訴狀態(tài)分析儀捕獲這一例程。具體做法是先讓狀態(tài)分析儀尋找該例程的起始地址。當它找到起始地址時,我們再告訴它尋找終止地址,并保存兩者之間的所有信息。當發(fā)現(xiàn)例程結(jié)束時,我們告訴分析儀停止保存(不保存任何狀態(tài))。圖18示出選擇性保存的工作情況。使用觸發(fā)功能與定義每一序列級相比,更好的方法是使用預(yù)定義的觸發(fā)功能。常用的觸發(fā)功能庫,如“尋找產(chǎn)生的第N 個沿”和“尋找事件N 次”提供把分析儀設(shè)置在常見事件和條件上觸發(fā)的簡便方法。狀態(tài)和定時采集這兩種工作模式均可使用這些功能。
您也可把預(yù)定義的觸發(fā)功能作為建立自定義功能的開始點。當您拆分一個功能時,就能使用所有的資源分配字段和分支選項。您也能通過改變這些字段改變觸發(fā)結(jié)構(gòu)。您也許需要通過這些工作建立自定義的觸發(fā)規(guī)范,或在您的觸發(fā)序列中建立循環(huán)和跳轉(zhuǎn)。
第1 步: 搜索該例程的第1 行,搜索中不存儲任何信息
第2 步: 在找到第1 行后,開始存儲。連續(xù)存儲,直到找到最后一行
第3 步: 當遇到最后一行時,停止存儲
圖18. 選擇性的保存
使用觸發(fā)功能
與定義每一序列級相比,更好的方法是使用預(yù)定義的觸發(fā)功能。常用的觸發(fā)功能庫,如“尋找產(chǎn)生的第N 個沿”和“尋找事件N 次”提供把分析儀設(shè)置在常見事件和條件上觸發(fā)的簡便方法。狀態(tài)和定時采集這兩種工作模式均可使用這些功能。您也可把預(yù)定義的觸發(fā)功能作為建立自定義功能的開始點。當您拆分一個功能時,就能使用所有的資源分配字段和分支選項。您也能通過改變這些字段改變觸發(fā)結(jié)構(gòu)。您也許需要通過這些工作建立自定義的觸發(fā)規(guī)范,或在您的觸發(fā)序列中建立循環(huán)和跳轉(zhuǎn)。