軟硬件搭橋改善SoC驗(yàn)證效率
本例中使用的SoC有四個(gè)捕獲站:一個(gè)位于處理器時(shí)鐘域,標(biāo)為1號(hào)捕獲站(60MHz),針對(duì)362個(gè)信號(hào);一個(gè)位于RX以太網(wǎng)域,標(biāo)為2號(hào)捕獲站(25MHz),針對(duì)17個(gè)信號(hào);一個(gè)位于TX以太網(wǎng)域,標(biāo)為3號(hào)捕獲站(25MHz),針對(duì)17個(gè)信號(hào);最后一個(gè)位于閃存時(shí)鐘域,標(biāo)為4號(hào)捕獲站(33MHz),針對(duì)178個(gè)信號(hào)。每個(gè)捕獲站都并行運(yùn)行,能夠選擇性地觀測(cè)任意信號(hào)組合。Analyzer工具的最終輸出是一個(gè)表示實(shí)際硅片器件中時(shí)鐘周期準(zhǔn)確信號(hào)事務(wù)的波形,如圖4所示。
圖4: SoC波形實(shí)例。
盡管軟件調(diào)試設(shè)施和硬件調(diào)試設(shè)施在目標(biāo)平臺(tái)上觀測(cè)只限于軟件問(wèn)題或硬件問(wèn)題時(shí)效果很好,但在了解涉及軟件和硬件交互的行為時(shí),則面臨著明顯挑戰(zhàn)。表1列出了我們的測(cè)試臺(tái)開(kāi)發(fā)過(guò)程中遇到的部分問(wèn)題,以及我們?cè)跇I(yè)界看到的代表性問(wèn)題。
主要挑戰(zhàn)在于,盡管使用軟件調(diào)試設(shè)施或硬件調(diào)試設(shè)施能夠“看到”非預(yù)期行為的影響,但通常很難確定觀測(cè)到的不正確行為到底是因還是果。這個(gè)問(wèn)題經(jīng)常變成軟件中非預(yù)計(jì)的行為是硬件行為不正確的結(jié)果,還是其它方式。關(guān)鍵在于確定多個(gè)事件之間的臨時(shí)關(guān)系,這要求軟件調(diào)試視圖和硬件調(diào)試視圖之間有一個(gè)公共參照物。
事件管理
重建軟件調(diào)試視圖和硬件調(diào)試視圖之間臨時(shí)關(guān)系的能力,涉及兩種調(diào)試設(shè)施中調(diào)試狀態(tài)和事件處理的整合,或綜合硬件管理,如圖5所示。
圖5: 綜合事件管理。
在本例中,Clarus Suite提供的分布式異步儀器使得每個(gè)捕獲站可以視作自治設(shè)備。為支持儀器之間的“交叉觸發(fā)”,有一條共享事件總線及一個(gè)集中式事件處理器。集中式事件處理器在圖5中標(biāo)為接入控制(Access Control),把調(diào)試事件和狀態(tài)傳送給Analyzer軟件,Analyzer軟件管理著整個(gè)調(diào)試基礎(chǔ)設(shè)施。這可以對(duì)多個(gè)功能單元和時(shí)鐘域同時(shí)進(jìn)行高效硬件調(diào)試。為創(chuàng)建綜合事件管理,這些信息傳播到軟件調(diào)試設(shè)施中,并從軟件基礎(chǔ)設(shè)施中收集數(shù)據(jù)。通過(guò)采用綜合事件管理,基礎(chǔ)設(shè)施可以檢測(cè)軟件斷點(diǎn)事件,調(diào)試處理器的狀態(tài)。同樣,軟件調(diào)試設(shè)施能夠檢測(cè)硬件觸發(fā),調(diào)試硬件調(diào)試設(shè)施的狀態(tài)。
綜合事件管理的兩大優(yōu)勢(shì)是軟件調(diào)試發(fā)起的事件能夠控制硬件觸發(fā),硬件調(diào)試發(fā)起的事件能夠控制軟件調(diào)試。更具體地說(shuō),軟件斷點(diǎn)可以映射到特定硬件行為,硬件觸發(fā)可以在某個(gè)點(diǎn)中斷軟件。圖6和圖7分別說(shuō)明了這兩種場(chǎng)景的實(shí)例。
圖6:由軟件發(fā)起的事件。
圖7:由硬件發(fā)起的事件。
為演示綜合調(diào)試系統(tǒng)中軟件發(fā)起的斷點(diǎn)功能,我們修改了Linux內(nèi)核,在磁盤(pán)扇區(qū)0x00041d90上發(fā)生讀取時(shí)打印消息“BLOCK”.然后,把目標(biāo)對(duì)準(zhǔn)調(diào)試設(shè)施中來(lái)自“sysace”Compact Flash控制器的軌跡。我們使用GDB,在xsysace.c文件第714行上設(shè)置了一個(gè)硬件斷點(diǎn)(printk發(fā)生的行)。然后配置測(cè)試設(shè)施,使用綜合事件管理監(jiān)測(cè)軟件調(diào)試設(shè)施。最后,“find/”命令強(qiáng)制內(nèi)核讀取整個(gè)磁盤(pán)。如圖6所示,軟件斷點(diǎn)在希望的行上暫停了內(nèi)核執(zhí)行,另外還觸發(fā)了硬件調(diào)試設(shè)施。結(jié)果,可以在軟件斷點(diǎn)時(shí)間上看到詳細(xì)的硬件行為。
我們使用硬件適配器,演示綜合調(diào)試系統(tǒng)中硬件發(fā)起的觸發(fā)功能。我們?cè)O(shè)置成在Linux內(nèi)核清除以太網(wǎng)適配器中的“RX Packet Ready Interrupt Bit”時(shí)發(fā)生硬件觸發(fā)。我們把綜合事件管理界面配置成把硬件事件映射到軟件調(diào)試設(shè)施。到系統(tǒng)中路由器IP地址的ping從SoC到路由器應(yīng)答位置發(fā)起一個(gè)發(fā)送包。在應(yīng)答發(fā)生時(shí),這個(gè)包到達(dá)以太網(wǎng)物理層,由以太網(wǎng)適配器處理。然后處理器被中斷,Linux內(nèi)核服務(wù)中斷。在中斷服務(wù)結(jié)束時(shí),中斷被清除。這導(dǎo)致硬件觸發(fā)和軟件被暫停,如圖7所示。得到的視圖顯示了從物理層直到操作系統(tǒng)的整個(gè)復(fù)雜系統(tǒng)中硬件和軟件的同步行為或時(shí)間相關(guān)行為。
小結(jié)
通過(guò)在軟件調(diào)試設(shè)施和硬件調(diào)試設(shè)施之間創(chuàng)建綜合事件管理界面,可以圍繞軟件調(diào)試事件和硬件調(diào)試事件實(shí)現(xiàn)單事件同步。這種同步可以有意義地表示同時(shí)來(lái)自這兩種基礎(chǔ)設(shè)施的調(diào)試數(shù)據(jù)。這樣一個(gè)完整的系統(tǒng)視圖為觀察涵蓋軟件和硬件的各種SoC功能之間的臨時(shí)關(guān)系打開(kāi)了一扇窗戶(hù),可以更快、更高效地調(diào)試日益復(fù)雜的SoC設(shè)計(jì)。
評(píng)論