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