數字信號處理(DSP )系統測試和調試4
仿真功能
仿真可以提供一套用于集成和調試階段的標準操作。它的一些主要功能如下:
斷點(Breakpoints)
仿真技術的一個普通功能就是支持斷點。斷點可以中斷DSP,并讓開發者可以檢測目標系統上的數據或寄存器。斷點功能是由仿真器來控制的。仿真器執行協議來在執行流盡可能早的地方停止CPU,并讓開發者在需要時從當前點繼續執行。
由于從運行狀態轉向暫停狀態可以在瞬時發生,大部分斷點都是同步的。
軟件斷點是同步斷點的一種形式。它可以在特定斷點處保存指令,并以能創建出一個例外條件的不同指令取而代之。這樣一來,控制功能就被轉移到了可保存重要DSP 狀態寄存器上下文的控制器上。當由主調試器來進行控制時,開發者就可以在CPU 暫停時在寄存器上“查看并修改”。如果反過來,就可以讓CPU 從當前位置繼續執行。這種類型的斷點可用于包含RAM 的目標系統,以編寫并更換指令。
斷點的另一種形式叫做硬件斷點。這種斷點是通過采用目標設備上的自定義硬件來實現的。它適用于有復雜取指序列的DSP 設備,并可在不能用軟件斷點來替換指令的帶ROM 的系統中設置斷點。這一硬件邏輯是用來監控設備上的一組地址和狀態信號,并當指令拾取在某個特定地點進行時停止設備執行。
事件檢測器(Event Detectors)
圖9 中的事件探測器提供了更好的目標可視性和執行中斷。圖4 中的總線事件和輔助事件檢測邏輯可以檢測到系統中發生的一系列復雜事件并進行仿真斷開。除了硬件和軟件斷點提供的代碼執行斷點,事件檢測器也可以在數據訪問、其它地址和數據的結合以及其它系統狀態下斷點。圖9 中的事件檢測器包含了一套比較儀和其它邏輯。用戶可以通過調試器界面對這些比較儀進行編程以找到系統中事件的一個特定樣式。比較儀會觸發其它事件邏輯執行相關任務,例如停止執行,增加一個計數器來跟蹤某個特定事件的發生,或者在一個可被其它設備所用的管腳上產生一個信號以進行其它操作。
圖9:開發人員可以通過用戶界面設置事件計數器和比較儀,并能編程復雜事件,只受到設備上邏輯數量的限制。
開發人員完成編程后,總線和輔助事件系統邏輯就將依照邏輯中設定的條件對運行的系統進行監控。一旦檢測到情況,就會作出預先設定的響應。它可能會給仿真器發出一個指令,讓它停止執行,也可能會設置一個輸出管腳來告知其它器件或測試設備。這種片上邏輯的一個優勢就在于它能“看”到設備內部發生的情況,而采用外部管腳時則只能看到管腳所代表的信號或情況。DSP 廠商已經通過提供可實現DSP 可視性的片上邏輯改進了這方面的功能。這一點是非常關鍵的,因為DSP 和其它嵌入式處理器都在向片上系統結構過渡,而這種系統恰恰會限制設備可視性的程度。
由于這些事件觸發功能都是直接創建到DSP 處理器中的,它們不會占據過多的CPU 周期或存儲器空間。因此,當被通過用戶控制啟動時,事件觸發設備邏輯能以非侵入形式檢測到所有事件,而不需停止CPU。這樣可以讓系統保持實時運行,并縮短調試時間,因為開發人員不必在每個單獨事件上設置斷點,并能夠重復執行,知道下一個復雜事件發生。
跟蹤(Trace)
圖8 中的跟蹤采集區塊是DSP 仿真功能的擴展。它讓開發人員能以全時鐘速度從設備中抽取程序計數器、時序信息和原始數據訪問信息。該數據被保存在一個外部大型存儲器上并被格式化。通過這一數據,開發人員可以極其詳細地了解處理器的活動情況。這有利于調試各種目標系統上的間歇性硬件和軟件問題。跟蹤功能可以由事件邏輯來控制,僅當系統發生一系列特定情況時才啟動,例如計數器達到了某個預設值,某個特殊模塊被執行,或者接入到了某個特定變量。程序計數器和/或數據訪問信息一般都帶有時間戳標記,可幫助開發人員確定訪問次數、中斷潛伏、模塊執行次數和其它有用數據。
圖8:DSP 設備上的仿真邏輯能帶來有效系統集成所需的可視性
連續執行可視性(Continuous Execution Visibility)
有些DSP 應用要求在繼續服務中斷時停止處理器。這對于硬盤應用等控制應用來說尤其重要,因為此時DSP 在控制著磁頭的位置。在連續執行可視化模式中,當發生了一個物理中斷時,調試器會停止控制,并讓應用執行硬件中斷。接著,從硬件中斷服務程序(ISR)中恢復后,處理器又會被暫停。在這些系統中,DSP是用來控制伺服系統以避免通信時發生磁頭撞擊。但是,在系統調試過程中,開發人員必須保持和通信系統的同步。這要求DSP 在調試系統時繼續服務中斷。此功能需要特殊DSP 仿真邏輯才能實現。這只是DSP 仿真如何定制以便用于一些由應用域來決定所需仿真功能類型的DSP 系列的例子之一。
源級調試(Source Level Debugging)
源級調試讓開發人員可以在一個更高的抽象層集成系統。開發人員可以將從系統抽取的數據連接到高級源代碼(程序就是以該代碼編寫而成的),并采用來自源代碼的符號名或數據所在的原始存儲器地址來接入到系統變量和其它程序的位置。源代碼一般可以和匯編代碼一起顯示,這樣可以讓開發人員看到編譯器生成了什么匯編代碼。當優化編譯器來生成代碼時,這一點是非常重要的。DSP 編譯器具有多個級別的高性能優化能力。當采用代碼優化切換時,每個高等級語言語句匯編代碼的可視性都非常重要。根據創建系統時所選擇的調試選項,開發人員可以通過一組由編譯器和連接器生成的符號來接入各種程序變量、結構和片段。
這些符號信息會在每個調試過程之前被導入到仿真器。
仿真功能的另一個有用之處在于可實現被執行匯編語言的可視性。由于在編輯過程中創建的目標文件是一個二進制文件,二進制目標代碼(機器代碼)必須轉換成匯編指令。這個轉換過程被稱為“反匯編”。反匯編功能將二進制數導入到存儲器并將之反匯編,讓用戶可以查看產生機器語言代碼的實際匯編語言流。
跟蹤功能還需要反匯編操作。跟蹤反匯編必須選取跟蹤幀,并反匯編從該原始跟蹤數據執行的代碼。該數據對于開發人員來說是非常有幫助的。它可以準確顯示數據采集期間系統中發生的情況。利用數據跟蹤,用戶不僅能夠查看實際被執行的指令(不是應該被執行的指令),還能查看這些指令所進行的數據訪問。
評論