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