• 正文
    • DAP口
    • Debugger
    • Debug系統(tǒng)舉例
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

聊聊芯片Debug模塊及其應(yīng)用

06/05 08:30
410
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

芯片設(shè)計中,通常都會增加一些debug(調(diào)試)電路邏輯,方便定位軟硬件問題。增加這些debug電路的基本要求對系統(tǒng)原有的正常操作無影響,否則可能會出現(xiàn)heisenbug。因此,debug邏輯電路通常用額外的專用資源去實現(xiàn),debug面積占用超過總芯片面積5%的芯片也不在少數(shù)。

由于debug電路邏輯所花費(fèi)的面積不大,而且可以通過power gating技術(shù),在不用debug功能時,把debug電路關(guān)掉,這樣耗電量小,對功耗的影響不大。故debug在復(fù)雜設(shè)計中還是廣泛使用的。

DAP口

Debug電路包含以下三個主要方面,都是通過Debug Access Port (DAP)來進(jìn)行的。

Tracing(追蹤):tracing是將芯片中的關(guān)鍵信息存入到trace buffer(追蹤緩沖);

Triggering(觸發(fā)):triggering決定何時開始或結(jié)束tracing;

Single stepping(單步操作):single stepping允許芯片暫停運(yùn)行、按時鐘或指令來單步調(diào)試;

Trace的信息通常以壓縮形式存放。而且有了trace的內(nèi)容,我們就可以通過debugger(調(diào)試器)控制處理器執(zhí)行的前進(jìn)或回退。

在SoC上,芯片版本、寄存器和寄存器域段信息一般會存放在片上ROM,因此也可以通過DAP口去訪問SoC芯片的一些基本信息。

Debugger

Debugger可以采用標(biāo)準(zhǔn)的技術(shù)去控制芯片包含:

Pause和Step:控制一個核(Core)的停止、按指令單步執(zhí)行、重新開始執(zhí)行等。單步執(zhí)行通常通過執(zhí)行一個指令后觸發(fā)中斷或暫停,這使得debugger可以控制正在被調(diào)試的對象。

訪問處理器的寄存器:在Core內(nèi),程序員模型可見的任何寄存器都可以被debugger讀寫。

遠(yuǎn)程控制讀寫:debugger可以觸發(fā)load或store操作。一種方式是直接通過系統(tǒng)主總線;另一種是通過受控Core發(fā)起的。

觀察點(Watchpoints)和斷點(Breakpoints):在每個Core中可能會存在多個硬件寄存器,debugger可以使用這些寄存器去存儲感興趣的地址。如果load或store地址匹配到存儲在watchpoints寄存器中的地址,那么就產(chǎn)生一個事件。同樣地,當(dāng)程序計數(shù)器(PC)匹配到breakpoints寄存器中的值時,也會產(chǎn)生一個事件。

Cross-trigger狀態(tài)機(jī):每個IP模塊產(chǎn)生的重要event可以作為輸入?yún)R集到中央程序中,形成一個通用的cross-trigger狀態(tài)機(jī)。額外提供了可以被matrix輸出設(shè)置和復(fù)位的狀態(tài)觸發(fā)器,它們的輸出直接反饋到matrix的輸入。因此,可以根據(jù)用戶指定的事件序列來編程狀態(tài)機(jī)。

Debug系統(tǒng)舉例

4.1 單核SoC系統(tǒng)

通常情況下,SoC會有一個邏輯DAP口,如下圖1所示為一個微控制器或單核的SoC。TCP通過USB與SoC連接起來。JTAG使用1-bit的數(shù)據(jù)通路,因此速度會慢一些。連接到Core的DAP也可以自己在主總線上觸發(fā)操作。

在這個簡單的單核系統(tǒng)中,breakpoint和watchpoint寄存器會放在CPU核或PMU(Performance management unit)協(xié)處理器內(nèi)部。DAP可以停止或單步調(diào)試Core,也可以查看和修改Core中的寄存器。當(dāng)有來自watchpoint或breakpoint的事件發(fā)生時,可以通過PMU寄存器計數(shù)或者上報中斷給Core或者暫停Core這幾種可編程選擇的方式去處理,這樣debugger就可以接管了。

圖1 單核SoC的debug硬件。DAP通過JTAG和USB連接到debug工作站

許多非Core類型的IP模塊也會產(chǎn)生事件,對這些事件進(jìn)行統(tǒng)計也是很有用的,在圖1中粉色所示的IP組件的事件可以被連接到某一個Core和PMU,或者可選實現(xiàn)的EMU(Event-Monitoring Unit)組件上。例如,EMU可以對L2緩存缺失率,DRAM的總線事物事件等進(jìn)行計數(shù)。

4.2 多核SoC系統(tǒng)

在多核SoC系統(tǒng)(MPSoC)中,每個core的debug集成不需要很大的變化。不過會新增其它帶有debug接口的IP組件。下圖2為多核SoC系統(tǒng)的兩個主要新增組件,分別是Event Trace LoggingCross-Triggering。為了支持trace logging,Core還另外給出一個接口,用于傳遞trace events信息給專用事件總線(綠色的線)。這個接口支持很多層面的信息,包括關(guān)掉、只報中斷、分支和追蹤足夠的數(shù)據(jù)去復(fù)現(xiàn)。不同Cores的信息通過Trace Event Funnel和Event ?Filters進(jìn)行組合或稀疏。Funnels提供多路選擇和其它一些靈活的功能,比如共享一個timestamp給不同擁有同樣timestamp輸入的數(shù)據(jù)。Lossless Compressor會執(zhí)行連續(xù)系統(tǒng)時間的運(yùn)行長度編碼,或者無損算法,就像Lempel–Ziv??偟脕碚f,事件帶寬必須不能超過事件終點,事件終點要么是片上SRAM事件緩沖或?qū)S酶咝阅芸偩€bond-out。Bond-out在這里的意思是一組Pads。片外追蹤緩存經(jīng)常用于工業(yè)或自動駕駛控制器。對于這些,一個更寬并行DAP將其大部分管腳用于數(shù)據(jù)?;蛘?,一個多gigabit串行器用于快速將數(shù)據(jù)導(dǎo)出。

圖2 現(xiàn)代MPSoC的典型事件追蹤流資源。運(yùn)行的數(shù)據(jù)總線是黑色的。事件流總線是綠色的。Debug訪問總線是藍(lán)色的。粉色箭頭代表來自其他IP組件的事件監(jiān)控線,它們要么沒有自己的計數(shù)器,要么需要提供cross-triggering

從CPU Cores處收集數(shù)據(jù)的話,很容易收集到太多的事件追蹤數(shù)據(jù),因為每個Core執(zhí)行每條指令平均會有10-bits數(shù)據(jù)。因此,數(shù)據(jù)可以從系統(tǒng)總線上收集。如果CPU Core擁有常規(guī)緩存的命中率,那么圖2中連接到DRAM控制器輸入的總線追蹤監(jiān)控器就可以產(chǎn)生少于兩個數(shù)量級的數(shù)據(jù)。此外,如果內(nèi)存可以正常運(yùn)行的話,那么讀數(shù)據(jù)可能都不需要記錄,因為讀數(shù)據(jù)和更早的寫數(shù)據(jù)是一致的。

Event filter可被編程去記錄地址窗口內(nèi)對應(yīng)的事件,這樣可以拓展有效地時間窗口。

由于追蹤內(nèi)存大小是有限的,片上追蹤緩沖使用了基于地址卷繞的圓形排列,這樣在內(nèi)存不夠時可以先覆蓋最老的數(shù)據(jù)。因此,感興趣點的數(shù)據(jù)可以在停止該點追蹤時被捕獲,而且近期歷史記錄也會保存在緩沖。另外,在操作系統(tǒng)的控制下,也有可能周期性的將存儲在SoC DRAM的追蹤數(shù)據(jù)放到主存中。

圖2右下角的ROM會存儲Part/ECO信息。另外,每個IP模塊通常將自己的標(biāo)識號寫死在它內(nèi)部debug空間的第一個寄存器。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄