<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 復雜器件內部的實(shí)時(shí)可視性的實(shí)現方法

復雜器件內部的實(shí)時(shí)可視性的實(shí)現方法

作者: 時(shí)間:2006-05-08 來(lái)源:網(wǎng)絡(luò ) 收藏

如果在一個(gè)系統中擁有幾個(gè)處理器和外設,要開(kāi)發(fā)具有成本效益、可靠的產(chǎn)品,尤其是在今天很短的產(chǎn)品開(kāi)發(fā)時(shí)間的條件下,了解所有這些芯片的特性將變得非常重要。嵌入式系統越來(lái)越多地在多內核ASIC或系統級芯片(SoC)上實(shí)現,以利用這些器件所具有的低功耗、低成本和更高集成度的優(yōu)點(diǎn)。

開(kāi)發(fā)者所擁有的很多這些標準設計工具是依賴(lài)于了解老的技術(shù)產(chǎn)品的運行情況來(lái)實(shí)現的,已經(jīng)不適用于這些新型的、功能強大的多功能設計了。通過(guò)集成,SoC架構在單個(gè)硅片上擁有多個(gè)處理器、存儲器、外設、控制器和其它重要的子系統組件。高速總線(xiàn)連接這些不同的組件,整體的性能決定于他們之間的數據流的高效管理。瓶頸、延遲和對于像總線(xiàn)和存儲器等共享資源的競爭這些問(wèn)題,對于數據傳輸來(lái)說(shuō)是致命的。為了獲得最佳性能,開(kāi)發(fā)者應比以前更需要了解芯片運行的具體情況。

然而,對系統組件之間的事務(wù)處理的監控不再是像以前那樣連接一個(gè)邏輯分析儀或者總線(xiàn)分析儀那么簡(jiǎn)單了,因為很多感興趣的信號深“埋”在芯片內部。對SoC的可視性需要一套硬件和軟件相混合的裝置來(lái)采集SoC本身內部的數據,并由特征描述以及關(guān)聯(lián)工具提供支持,這些工具能幫助開(kāi)發(fā)者分析所采集的數據。

當然可以通過(guò)不同的方式實(shí)現可視性。在很多情況下,可以觀(guān)察許多組件(如存儲器、系統總線(xiàn)和I/O端口)來(lái)采集信息。換言之,當評估過(guò)程本身影響到結果的時(shí)候,要評估總線(xiàn)利用率和存儲器競爭情況就很難。挑戰在于在不影響系統性能的情況下采集和上載數據點(diǎn)。

回到現實(shí)情況

傳統上,當沒(méi)有邏輯分析儀可用,或者太難于設置時(shí),開(kāi)發(fā)者使用軟件測試工具來(lái)獲得對他們設計的可視性。他們會(huì )向目標對象增加調試代碼來(lái)采集、處理和上載調試數據。例如,在進(jìn)入和離開(kāi)一個(gè)函數時(shí)打開(kāi)和關(guān)閉某個(gè)計時(shí)器,無(wú)論是過(guò)去還是現在,對于通過(guò)軟件分析器來(lái)對函數進(jìn)行描述來(lái)說(shuō),這種方法都是一種的簡(jiǎn)捷方法。

盡管這只需要增加很少的C語(yǔ)言printf指令到測試代碼中,對采集的數據進(jìn)行格式化,并輸出到一個(gè)標準的I/O器件,但此時(shí)這些代碼對代碼的大小、存儲器利用、緩沖器性能、時(shí)序和系統資源競爭都有很大的影響。這些缺點(diǎn)使得printf只適合于測試非實(shí)時(shí)的控制代碼。對于實(shí)時(shí)的或者確定性代碼,例如,用在消費媒體播放器和錄制設備、手持無(wú)線(xiàn)通信設備、電信、機器人技術(shù)或汽車(chē)上的應用,需要采用其它的對系統影響較小的技術(shù),以避免干擾目標程序的執行或錯失實(shí)時(shí)期限。

減少干擾

有很多方法可以在增加可視性的同時(shí)減少干擾。從概念上來(lái)說(shuō),對一個(gè)系統進(jìn)行監測涉及到數據采集、數據緩沖、上載來(lái)自目標器件的數據、后續處理以及進(jìn)行顯示等。認真安排這些活動(dòng)在什么時(shí)候以及哪里發(fā)生,可以將它們對系統性能的影響減到最小。減少與測試代碼以及數據采集設備相關(guān)的存儲器區域,可以采集到更多的數據,并增加對系統實(shí)時(shí)行為測試的精度或廣度。

一般需要數據點(diǎn)幾倍大小的存儲空間來(lái)記錄關(guān)聯(lián)信息,這些關(guān)聯(lián)信息用于更準確地對其進(jìn)行理解。例如,除了在采集時(shí)的數據值,可能還需要標記數據相關(guān)聯(lián)的變量名字,獲得一個(gè)數據采集時(shí)間的時(shí)間戳,并注意當在獲得時(shí)間戳時(shí)正在執行的函數等。有幾種方法用于獲得和組織這種關(guān)聯(lián)信息,并且不需要依賴(lài)于printf和其字符串格式化功能。通常在數據中包含pattern,如果用某種方式來(lái)采集數據,那么可以推斷出一些額外的特性,而不需要將它們包含到緩沖器中。增加可視性的一些方法包括:

1. 記錄格式

如果在緩沖器中采集一個(gè)變量,則不再需要對所采集的什么變量進(jìn)行標記。如果需要采集多個(gè)值,就可以創(chuàng )建一種記錄格式,每一個(gè)值對應一個(gè)給定的位置,這樣避免了不得不對采集的內容再次進(jìn)行標注的情況。

2. 多個(gè)緩沖器

通過(guò)將相似的數據點(diǎn)分組在一起,可以簡(jiǎn)化循環(huán)緩沖管理,減少對每個(gè)數據點(diǎn)的采集延時(shí)。同樣地,如果按照優(yōu)先級來(lái)對數據采集進(jìn)行隔離,那么當系統在100%的利用狀態(tài)時(shí),可能使循環(huán)緩沖器抓取到非關(guān)鍵信息的溢出,而不是用一個(gè)非實(shí)時(shí)的上載來(lái)弄亂了實(shí)時(shí)系統的時(shí)限要求。在任何情況下,都需要用來(lái)標記溢出的機制。并且如果緩沖器存在一些前提條件,例如需要重構的時(shí)間戳,則可能追蹤丟失了多少數據。

3. 采樣數據

配置硬件計數器并使其運行對系統的影響很小。無(wú)論如何,讀取一個(gè)計數器并上載其值都是具有干擾性的。對計數器的記錄越頻繁,記錄就越準確,但采集和上載的干擾就越大。在確定確實(shí)需要更準確的信息之前,保持較低的記錄頻率。例如,一個(gè)記錄當前哪個(gè)函數在執行的周期性分析器能確保得到一個(gè)非常準確的代碼使用百分比情況。這樣的分析器僅收集了在每個(gè)函數調用的記錄期間所采集的信息的一部分,于是干擾很小。也可以按低優(yōu)先級任務(wù)來(lái)對數據點(diǎn)采樣,盡管這樣可能使得結果產(chǎn)生一些偏差。

4. 確定性的數據

如果數據采樣獲取的頻率固定的話(huà),不必要加入一個(gè)時(shí)間戳。作為一種替代選擇,如果數據必須通過(guò)一組連續的運算塊,只需記錄數據值和時(shí)間戳,因為可以從時(shí)間戳的次序確定實(shí)際的程序塊。如果獲取了幾個(gè)值,可能更有效率,以確保數據流能通過(guò)一系列的程序塊,此時(shí)只需記錄函數和時(shí)間戳,并采用數據記錄格式。

5. /智能記錄

通常只在需要時(shí)采集數據(換言之,在對某些信息感興趣的情況下),這樣減少了數據采集產(chǎn)生的影響。利用幾個(gè)調試標記,可以縮小采集的范圍。這可以通過(guò)設置一個(gè)特定的標記來(lái)實(shí)現,這個(gè)標記只有在感興趣的情況下才有效,通過(guò)這種方法,不會(huì )因為上載不需要的信息使系統過(guò)載。這也減少了捕獲數據過(guò)程的開(kāi)銷(xiāo),節約緩沖器空間。設置或檢查一個(gè)標記只需要一個(gè)或者兩個(gè)處理器周期,因此這是非常有用的方法,即使是對于基于硬件的計數器亦是如此。

6. 塊狀記錄

在某些情況下,在不影響執行時(shí)(如沒(méi)有實(shí)時(shí)運算時(shí))有可能可以暫停對象。此時(shí)可以通過(guò)在能安全暫停的情況下觸發(fā)一次暫停來(lái)“避免”緩沖期上載開(kāi)銷(xiāo),然后在系統暫停的時(shí)候再對緩沖器上載。

7. 按塊上載

如果任務(wù)比較空閑,可以在系統沒(méi)有完全利用時(shí)用來(lái)上載緩沖器。盡管這不會(huì )減少上載開(kāi)銷(xiāo),但卻可以將上載的影響轉移到一個(gè)對系統性能影響更小的時(shí)段。

8. RTOS監測

對于更復雜的監測,可以在實(shí)時(shí)操作系統上找到支持。很多操作系統具有內置的機制和庫,能支持片上監測硬件,即易于配置又為管理循環(huán)緩沖器和向外發(fā)送數據流需要的基礎架構提供基本代碼,并提供用于自監測的Hook函數。通過(guò)對記錄過(guò)程抽象化以及卸載數據,可以快速地對監測的對象、監測的方式、監測的頻率、獲取數據的位置以及卸載方式等進(jìn)行重新配置。在創(chuàng )建自己的基礎來(lái)測試代碼之前,應首先檢查RTOS提供的內容。

9. 避免訪(fǎng)問(wèn)存儲器和其它系統資源

只有在硬件機制不足的情況下,才應該用軟件手段作為補充,例如當需要非常大的緩沖器或者當有限的處理降低了整體的干擾時(shí)。理想的情況是,如果在不使用系統總線(xiàn)或存儲器的情況下監測系統總線(xiàn)或存儲器,將能得到更準確的結果。如果將采集的數據量控制到最小,就可以避免使用存儲器中的緩沖器,只是通過(guò)JTAG或總線(xiàn)直接發(fā)送。

10. 連續采集

在過(guò)程中監測如果需要采集大量的數據,可以考慮連續采集。注意,因為在每次運行時(shí)會(huì )采集到不同的信息,將無(wú)法對結果進(jìn)行關(guān)聯(lián),因為時(shí)間戳包含不同的測試延時(shí)。在考慮從什么地方開(kāi)始發(fā)現問(wèn)題時(shí),這種方法最好。因為這樣能降低概率,也能降低監測的等級。

11. 模塊

如果通過(guò)JTAG或總線(xiàn)發(fā)送數據,則可以在目標和主機之間放置一個(gè)處理模塊來(lái)處理時(shí)間戳的產(chǎn)生和有限的數據處理。通過(guò)將時(shí)間戳的工作卸載到該模塊,可以釋放測試總線(xiàn)的帶寬,用來(lái)發(fā)送更多的信息。模塊也是實(shí)現完全無(wú)干擾監測的非常有效的方法。例如,模塊可以監測系統總線(xiàn),監測測試總線(xiàn)上某個(gè)特定的存儲器地址范圍,或使用直接存儲器訪(fǎng)問(wèn)(DMA)來(lái)觸發(fā)一次準實(shí)時(shí)的數據塊獲取。

給定不同實(shí)時(shí)應用的特性,將希望測試不同的采集方案,來(lái)確定哪些組合能實(shí)現最小的干擾的最高可視性。例如,如果有多余的存儲器,那么可以增加緩沖器大小。這取決于采集什么樣的數據及采集多少數據。

硬件輔助監測

在某些情況下,測試代碼可能要么對系統影響太大,要么不夠準確,或者不能簡(jiǎn)單地獲得理解流過(guò)復雜的SoC的數據流的特性所需要的信息。越來(lái)越多的SoC架構包含用于輔助監測器件的硬件運行的功能,以滿(mǎn)足這些需求:

1. 事件計數器

用軟件監測一個(gè)事件時(shí),很多細微的細節不容易被發(fā)現。例如,記錄某個(gè)特定的CPU內核在等待訪(fǎng)問(wèn)共享資源(如外部存儲器)時(shí)停止的次數,采用軟件就無(wú)法實(shí)現。包含一些設置很好的計數器的硬件設計,可以以很低的額外成本實(shí)現對系統動(dòng)態(tài)特性的深入了解。數據可以通過(guò)調試器的JTAG接口讀出,或被周期性地讀出,例如,由軟件中的背景任務(wù)讀出并寫(xiě)入到緩沖器中,以便在稍后的時(shí)間進(jìn)行查詢(xún)。

2. 高水印計數器

通常,開(kāi)發(fā)者需要理解器件會(huì )運行的極限惡劣狀況,例如,服務(wù)中斷的最大時(shí)間或輸入數據中的最小和最大抖動(dòng)。高水印計數器提供硬件,這些硬件能被配置用于監測特定總線(xiàn)事件,并鎖存最大的(高水印)或者最小的(低水印)的時(shí)間參數。在不需要太大的開(kāi)銷(xiāo)情況下,他們能提供非常寶貴的統計數據,否則需要用目標軟件來(lái)實(shí)現,或采集數據并發(fā)送到片外以作后續處理。

3. 跟蹤

一種成本很高但非常有用的硬件輔助監測方法是跟蹤。在這種方法中,總線(xiàn)事務(wù)被記錄在專(zhuān)用的片上存儲器中,這樣一來(lái),可以捕獲導致產(chǎn)生一個(gè)事件的最后的N個(gè)總線(xiàn)事務(wù)。

上載捕獲的數據

一般來(lái)說(shuō),你會(huì )上載數據到一個(gè)開(kāi)發(fā)系統中(如電腦),或者上載到一個(gè)監控模塊作進(jìn)一步分析。一旦確定需要采集什么樣的調試信息,以及如何采集以盡量減少干擾,那么必須決定如何從芯片向外發(fā)送數據-理想的情況是在應用程序還在運行時(shí)能夠發(fā)送。

應該做的是緩沖器深度和上載頻率之間的折衷。你調試數據緩沖器越小,上載數據的頻率越高。頻繁上載將對系統性能產(chǎn)生持續的影響。如果有一個(gè)大的存儲器池用于緩存調試數據,那么采集數據對系統性能的影響就會(huì )較小。然而,更大緩沖器則需要更多的目標存儲器,在器件運行期間上載數據對系統性能的影響將更顯著(zhù)。

在應用現場(chǎng),通過(guò)像串行總線(xiàn)、TCP/IP連接或者USB端口等系統端口上載數據可能非常有用。增加的數據吞吐量不僅消耗這些端口的帶寬,但也占用處理器周期,來(lái)處理協(xié)議并完成數據傳輸。

當采集比芯片上能實(shí)時(shí)提供的還多的數據時(shí),將不可避免地在獲取的數據中引入空隙。在這些情況中,有必要周期性地插入足夠的關(guān)聯(lián)信息,以確保數據在最終從片上捕獲后能被成功解碼。對數據打包或者引入周期性的“同步點(diǎn)”是在數據流中提供這種額外信息的兩種方法??梢宰鳛閿祿陷d過(guò)程的一部分來(lái)完成這個(gè)工作,這樣冗余的信息就不必存儲在片上。

如果在一個(gè)SoC中多個(gè)CPU內核共同工作,常常需要并行地對每個(gè)內核上載獲取的信息,以便體現一個(gè)系統的完整情況。如果多個(gè)上載路徑不可用,要么在上載之前將來(lái)自多個(gè)內核的數據結合起來(lái)放到一個(gè)緩沖器中,要么將它們按照某種方式復用起來(lái)以共享上載路徑。同樣的,在決定處理這些問(wèn)題的最佳方法時(shí),需要考慮系統的動(dòng)態(tài)特性和數據的相對重要性。如果有很多相對不重要的數據來(lái)自其中的一個(gè)內核,而另外一個(gè)內核偶爾會(huì )發(fā)送一些重要信息,你需要采用一種方法確保重要的信息能優(yōu)先于非重要的信息。

可視化及分析

將從SoC器件中產(chǎn)生的原始信息轉換成一種易于理解的格式對SoC本身提出了許多挑戰。能采集到的數據種類(lèi)、用于采集這些數據需要的特定硬件機制以及各類(lèi)不同的應用,用戶(hù)需要解決所有這些特殊的問(wèn)題,這就使得創(chuàng )建一個(gè)通用的可視化工具非常具有挑戰性。模塊和定制化工具能進(jìn)行定制,使其能用于特定的硬件、軟件和要解決的問(wèn)題領(lǐng)域,這通常是克服這些挑戰所需的靈活性的最佳方法。使用一種模塊化的框架使其很容易將來(lái)自不同的數據流的數據進(jìn)行關(guān)聯(lián),針對特定類(lèi)型的信息分析關(guān)聯(lián)的數據,并以一種易于理解的形式顯示這些從數據中得到的信息。這里描述了這種框架應該提供的一些功能類(lèi)型實(shí)例:

1. 關(guān)聯(lián)數據點(diǎn)

在解決一個(gè)多處理器SoC中的瓶頸、競爭或負載均衡這類(lèi)系統級問(wèn)題時(shí),可能需要從多個(gè)處理器和加速器采集數據。在這種情況下,重構系統行為需要將多個(gè)記錄關(guān)聯(lián)到一個(gè)時(shí)間線(xiàn)。在某些系統上,系統時(shí)鐘的實(shí)用性較高,從而可以使這個(gè)問(wèn)題簡(jiǎn)單化。而對于另外一些系統,可能需要通過(guò)利用像DMA這樣的系統資源,從其它內核來(lái)訪(fǎng)問(wèn)的方式利用時(shí)鐘。如果公共時(shí)鐘不可行,可以使用其他機制來(lái)周期性地同步多個(gè)內核的時(shí)間。其中的一個(gè)方法是使用中斷來(lái)將一個(gè)同步時(shí)間戳通過(guò)共享存儲器傳遞。理想情況時(shí),可視化工具能適應這些不同的記錄關(guān)聯(lián)方法。

2. 分析基礎架構

一種模塊框架能夠將常見(jiàn)的分析活動(dòng)制作成模塊,這些模塊能用來(lái)實(shí)現很多不同的分析和可視化工具,例如,一種普通的可定制數據轉換器和表格,可以很容易用于創(chuàng )建一種消息記錄瀏覽器;一種能夠將基于一事件或時(shí)間戳的多個(gè)數據流關(guān)聯(lián)起來(lái)的分析模塊,可以被用作為一個(gè)構建塊,來(lái)構造送往其它分析模塊的數據;一種用來(lái)分析過(guò)去一段時(shí)間的高水位標志的模塊能為特定應用的Dashboard、帶寬利用率監測器等提供一些基本依據。

3. 可擴展性

盡管可以用一些普通組件來(lái)評估所采集的大量數據,但最好是能夠構造定制組件來(lái)擴展工具的環(huán)境。

4. 可配置性

可視化工具對于從大的緩沖器上載中提取有意義的信息非常關(guān)鍵,開(kāi)發(fā)者需要能配置工具來(lái)強調特殊的差異性和數據峰值以發(fā)現一般的行為和異常的行為。為了從目標對象上卸載數據處理,所用工具應該提供允許將智能特性構建到工具中的可編程基本功能,并減少需要采集的數據量。還應該提供足夠的控制以確定在任何給定的時(shí)間,來(lái)規定應該采集什么樣的數據。

看看現實(shí)

獲得對實(shí)時(shí)SoC系統內部的可視性的挑戰當然并不是微不足道的小事。采集到足夠的信息來(lái)產(chǎn)生不需要校正的有意義的結果,需要一種系統級的方法。通過(guò)使用軟件工具庫,利用硬件輔助監測以及對數據如何從芯片上發(fā)送出來(lái)的管理,增加準確性、寬度、深度和采集數據的粒度,使得開(kāi)發(fā)者能采集更多的可靠信息。新的靈活工具套件和軟件開(kāi)發(fā)策略將幫助開(kāi)發(fā)者來(lái)應對測試和調試用于具有高精度和高置信度的實(shí)時(shí)應用的復雜SoC架構的挑戰。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>