潘 奇 王慧麗 雷元武 吳虎成
(國(guó)防科技大學(xué)計(jì)算機(jī)學(xué)院 長(zhǎng)沙 410073)
集成電路制造工藝和微體系結(jié)構(gòu)的迅速發(fā)展,對(duì)數(shù)字信號(hào)處理器(DSP)的處理能力及效率要求越來(lái)越高。單核DSP已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足市場(chǎng)需求,多核DSP的發(fā)展成為主流。然而,隨著DSP的單核數(shù)量的增加,DSP的仿真調(diào)試效率卻面臨著巨大的挑戰(zhàn)。
對(duì)于數(shù)字信號(hào)處理系統(tǒng),其大部分功能需要通過(guò)仿真調(diào)試技術(shù)來(lái)進(jìn)行功能驗(yàn)證和調(diào)試開(kāi)發(fā)[1]。仿真調(diào)試技術(shù)基于JTAG(Joint Test Action Group,聯(lián)合測(cè)試行動(dòng)小組)標(biāo)準(zhǔn)協(xié)議[2~3],采用串行結(jié)構(gòu),而眾核DSP芯片因?yàn)楹藬?shù)量眾多,串聯(lián)調(diào)試鏈路過(guò)長(zhǎng),導(dǎo)致調(diào)試效率很低。因此如何加速眾核DSP芯片的仿真調(diào)試,也成為芯片設(shè)計(jì)者關(guān)注的重點(diǎn)之一。
文章基于我國(guó)自主設(shè)計(jì)研制的銀河飛騰[4]高性能數(shù)字信號(hào)處理器X-DSP,在經(jīng)典菊花鏈仿真調(diào)試技術(shù)的基礎(chǔ)上,采用分組共享的優(yōu)化策略,實(shí)現(xiàn)了一種總-分結(jié)構(gòu)的仿真調(diào)試設(shè)計(jì),極大地提高了眾核DSP仿真調(diào)試效率,縮短了芯片流片前的研發(fā)時(shí)間,高效地支持了DSP用戶的在線調(diào)試及應(yīng)用需求。
基于經(jīng)典菊花鏈的多核調(diào)試設(shè)計(jì)[5~6],如圖1所示。DSPCorex為多核處理器中的單核DSP,ETx為不同單核DSP中的仿真調(diào)試部件。在TAP(Test Access Port)控制器的作用下,指令通過(guò)TDI端口,串行掃描進(jìn)入DSP內(nèi)部,并將需要進(jìn)行調(diào)試的指令移位至對(duì)應(yīng)單核ET部件的指令/數(shù)據(jù)寄存器(IR/DR)中。ET對(duì)該IR/DR中的調(diào)試指令進(jìn)行解碼,向DSP單核發(fā)送調(diào)試請(qǐng)求,并將調(diào)試返回?cái)?shù)據(jù)/狀態(tài)經(jīng)由TDO輸出到DSP外部。
圖1 基于經(jīng)典菊花鏈的仿真調(diào)試結(jié)構(gòu)
經(jīng)典菊花鏈的串聯(lián)設(shè)計(jì)方式,廣泛應(yīng)用于嵌入式芯片的調(diào)試設(shè)計(jì)中[7~9]。但是,當(dāng) DSP 單核數(shù)量增加時(shí),處理器的整條調(diào)試鏈路會(huì)變得很長(zhǎng)。假設(shè)DSP中單核數(shù)量多達(dá)N個(gè),而一個(gè)IR/DR的位寬為IR_Len,則采用菊花鏈結(jié)構(gòu)時(shí),其調(diào)試鏈路長(zhǎng)度為N*IR_Len。在圖1中,如果對(duì)DSP CoreN進(jìn)行調(diào)試,則至少需要經(jīng)過(guò)N*IR_Len個(gè)測(cè)試時(shí)鐘周期(TCK),調(diào)試指令才能由芯片TDI端口到達(dá)DSP CoreN。對(duì)于N達(dá)到一定規(guī)模的眾核DSP處理器,芯片的調(diào)試效率會(huì)發(fā)生顯著的下降[10~13]。因此,如何設(shè)計(jì)更為高效的仿真調(diào)試結(jié)構(gòu),是眾核DSP處理器仿真調(diào)試的重點(diǎn)研究?jī)?nèi)容。
在眾核處理器中,經(jīng)典菊花鏈的調(diào)試效率低下,一個(gè)重要的原因在于:調(diào)試指令只能在軟件的控制下,以串聯(lián)的方式,逐位進(jìn)入到需要進(jìn)行調(diào)試的單核中,即使很多單核并不是調(diào)試的對(duì)象,也不可避免地串聯(lián)進(jìn)了掃描鏈路中。因此,在調(diào)試指令到達(dá)調(diào)試目標(biāo)單核的過(guò)程中,減少不必要的單核進(jìn)入掃描鏈路,是提高調(diào)試效率所面臨的最主要的難題。而基于分組共享的優(yōu)化策略,則比較高效地解決了這個(gè)問(wèn)題。
圖2描述了基于分組共享策略的優(yōu)化方法。如圖2中所示,每?jī)蓚€(gè)DSP單核為一組,共享一個(gè)帶有ID標(biāo)識(shí)的IR/DR資源;JTAG調(diào)試鏈路不再進(jìn)入到單核內(nèi)部,而是以分組為單位,依次串聯(lián)每個(gè)分組共享的IR/DR。在進(jìn)行調(diào)試時(shí),軟件將帶有ID標(biāo)識(shí)的調(diào)試指令發(fā)送到對(duì)應(yīng)的分組中,每個(gè)分組再根據(jù)ID標(biāo)識(shí),將IR/DR發(fā)送到對(duì)應(yīng)的DSP單核中。基于分組共享策略的優(yōu)化方法,其分組方式可以根據(jù)實(shí)際處理的結(jié)構(gòu)和大小進(jìn)行調(diào)整。
圖2 基于分組共享策略的優(yōu)化方法
X-DSP眾核處理器中,包含了M個(gè)DSP簇(DSP Cluster),每個(gè)簇包含Z個(gè)DSP單核(Core)。結(jié)合X-DSP的體系結(jié)構(gòu)及單核數(shù)目,對(duì)圖2中的分組方式進(jìn)行了相應(yīng)的調(diào)整,設(shè)計(jì)了一種基于分組共享策略的總-分JTAG仿真調(diào)試結(jié)構(gòu),如圖3所示。在每個(gè)簇中設(shè)計(jì)一個(gè)JTAG指令譯碼控制(JTAG-Controller,JTAGC),M 個(gè) DSP Cluster在處理器頂層以菊花鏈形式串聯(lián),接收基于JTAG協(xié)議的調(diào)試命令;每個(gè)簇內(nèi)的Z個(gè)單核共享本簇內(nèi)的一個(gè)JTAG控制器,JTAGC在對(duì)調(diào)試指令攜帶的每個(gè)Core的ID標(biāo)識(shí)進(jìn)行譯碼后,通過(guò)AXI協(xié)議將指令發(fā)送到對(duì)應(yīng)的Core中?;诜纸M共享策略的總-分調(diào)試結(jié)構(gòu),其最長(zhǎng)的調(diào)試鏈路為M*(ID+IR_Len),大幅減小了最長(zhǎng)調(diào)試鏈路,有效地提高了調(diào)試效率。
X-DSP的調(diào)試通路進(jìn)行優(yōu)化設(shè)計(jì)后,仿真/調(diào)試部件包括兩個(gè)主要部分:位于DSP簇內(nèi)的JTAG控制器與DSP單核內(nèi)部的仿真調(diào)試部件(ET)。JTAG控制器負(fù)責(zé)TAP控制器以及對(duì)Core ID的譯碼,同時(shí)采用AXI協(xié)議與單核進(jìn)行通信;單核內(nèi)部ET則負(fù)責(zé)對(duì)IR/DR進(jìn)行譯碼,并執(zhí)行相應(yīng)的調(diào)試工作,實(shí)現(xiàn)對(duì)X-DSP的資源訪問(wèn)、流水線控制,以及事件統(tǒng)計(jì)的調(diào)試功能。
圖3 X-DSP眾核處理器的總-分仿真調(diào)試結(jié)構(gòu)
X-DSP眾核處理器中,DSP單核內(nèi)部調(diào)試通路,如圖4所示。單核內(nèi)ET采用AXI協(xié)議,將JTAGC發(fā)送到單核的IR/DR進(jìn)行譯碼后,按照調(diào)試通路的類型,實(shí)現(xiàn)以下三種仿真調(diào)試功能[14~15]:1)配置空間的讀寫(xiě)訪問(wèn)(包括核內(nèi)私有地址空間以及核外共享地址空間),通過(guò)配置總線通路進(jìn)行訪問(wèn);2)數(shù)據(jù)空間的讀寫(xiě)訪問(wèn)(包括核內(nèi)私有地址空間AM/SM以及核外共享數(shù)據(jù)空間),通過(guò)DMA通路進(jìn)行訪問(wèn);3)核內(nèi)的映射(mem-map)地址空間(全部映射到ET的配置空間地址內(nèi)),此部分包括核內(nèi)的非全局編址的寄存器資源,流水線資源,ET的寄存器等,由ET直接進(jìn)行訪問(wèn)。
圖4 單核內(nèi)的調(diào)試通路
高效的仿真調(diào)試設(shè)計(jì),需要軟件和硬件的協(xié)同工作[16]。X-DSP在減少JTAG串行鏈路長(zhǎng)度提高調(diào)試效率的同時(shí),在軟件層面也通過(guò)靈活的驅(qū)動(dòng)調(diào)用方式對(duì)存儲(chǔ)空間的大批量讀操作進(jìn)行了優(yōu)化。
優(yōu)化前的仿真調(diào)試部件,訪問(wèn)一次存儲(chǔ)空間的64bit數(shù)據(jù),需要軟件發(fā)送一個(gè)讀指令I(lǐng)R_Read和一個(gè)捕獲數(shù)據(jù)指令I(lǐng)R_Capture。IR_Read負(fù)責(zé)將所需數(shù)據(jù)讀取到ET內(nèi)部IR寄存器中進(jìn)行保存(64位寬),IR_Capture則負(fù)責(zé)對(duì)ET的IR寄存器的數(shù)據(jù)進(jìn)行捕獲。如果用戶需要訪問(wèn)一個(gè)512bit的數(shù)據(jù)時(shí),則需要分別發(fā)送8次IR_Read和IR_Capture,共16條指令。X-DSP經(jīng)過(guò)硬件優(yōu)化后的仿真/調(diào)試部件中,ET訪問(wèn)存儲(chǔ)體寬度提高為512位,JTAGC接收到一個(gè)IR_Read指令后,即可將512位數(shù)據(jù)讀取到ET中進(jìn)行保存;再通過(guò)8個(gè)連續(xù)的Capture指令,將512位數(shù)據(jù)以64bit為單位分8拍返回。此時(shí),如果用戶需要訪問(wèn)一個(gè)512bit的數(shù)據(jù)時(shí),則只需要由軟件發(fā)送1次IR_Read和8次IR_Capture,共9條指令。軟硬件的聯(lián)合優(yōu)化方式,極大地提高了對(duì)內(nèi)存資源訪問(wèn)時(shí)的效率。
X-DSP眾核處理器的仿真/調(diào)試部件采用兩種驗(yàn)證手段:一種是在NC_verilog環(huán)境下進(jìn)行的模擬驗(yàn)證;另一種是基于FPGA的原型驗(yàn)證。對(duì)仿真調(diào)試/部件的驗(yàn)證需要匯編程序測(cè)試激勵(lì)作為背景程序,此外還需要手工編寫(xiě)仿真/調(diào)試指令和數(shù)據(jù)。通過(guò)分析設(shè)計(jì)文檔提煉出相應(yīng)的功能驗(yàn)證點(diǎn)有如下:1)ET在進(jìn)行資源訪問(wèn)時(shí),與DMA以及總線之間的通信機(jī)制驗(yàn)證。2)流水線基本操作的驗(yàn)證:運(yùn)行、暫停、單步。3)軟件斷點(diǎn)的設(shè)置、恢復(fù)以及取消的驗(yàn)證,硬件斷點(diǎn)的驗(yàn)證。4)性能統(tǒng)計(jì):對(duì)關(guān)鍵事件統(tǒng)計(jì)次數(shù)的驗(yàn)證。
抽取部分驗(yàn)證結(jié)果如圖5~6所示。
圖5 ET通過(guò)DMA的讀操作
圖5為ET通過(guò)DMA通道對(duì)向量存儲(chǔ)器AM地址為0X4_0000_0000進(jìn)行讀寫(xiě)讀操作。如圖所示,當(dāng)ET接收到IR寄存器中的112位命令(0X3FF4_00000001_00000004_00000000)后向DMA發(fā)送請(qǐng)求信號(hào)ET_DMA_Rd以及要讀向量寄存器的地址;DMA接收到ET的訪問(wèn)請(qǐng)求后,在不受到其他條件的干擾下,會(huì)將ET_DMA_Rd(DMA給ET讀數(shù)據(jù)返回有效信號(hào))信號(hào)拉高的同時(shí)將訪問(wèn)該地址的內(nèi)容通過(guò)ET_DMA_Rd信號(hào)以512位數(shù)據(jù)返回。
圖6為ET通過(guò)設(shè)置硬件斷點(diǎn)控制流水線的情況,硬件斷點(diǎn)的設(shè)置不會(huì)改變目標(biāo)指令,但是會(huì)消耗掉很多硬件資源,因此對(duì)硬件斷點(diǎn)的存儲(chǔ)是有限制的,X-DSP為ET部件分配了8個(gè)32的硬件斷點(diǎn)地址寄存器(HBPAR0~7),以及8個(gè)1位的硬件斷點(diǎn)使能寄存器(HBPER0~7)。如圖所示,設(shè)置硬件斷點(diǎn)為0X163,將執(zhí)行指令地址與用戶設(shè)置的地址進(jìn)行比較,發(fā)現(xiàn)一致則觸發(fā)硬件斷點(diǎn)。斷點(diǎn)指令停在E1站即BR_PCE1信號(hào),硬件斷點(diǎn)標(biāo)志信號(hào)HBPC_HWBP拉高,使流水線拉高即ET_Stall信號(hào)拉高,進(jìn)入調(diào)試狀態(tài)。
圖6 ET的硬件斷點(diǎn)操作
對(duì)本文提出的設(shè)計(jì)進(jìn)行綜合,面積和時(shí)序報(bào)告如表1。
表1 面積和時(shí)序報(bào)告
指令寄存器IR(78bit)是與JTAG標(biāo)準(zhǔn)兼容的指令寄存器并且連入TDI和TDO之間。IR本質(zhì)是基于移位寄存器的設(shè)計(jì),在有效狀態(tài)下對(duì)TDI的串行輸入數(shù)據(jù)進(jìn)行移位處理并進(jìn)行相應(yīng)操作。IR即可以存儲(chǔ)指令,也可以產(chǎn)生指令通路的JTAG輸出信號(hào)TDO。優(yōu)化前X-DSP的N個(gè)單核采取依次串聯(lián)的方式構(gòu)成調(diào)試通路,所以調(diào)試鏈路長(zhǎng)度為78*N。經(jīng)過(guò)優(yōu)化后JTAG調(diào)試通路結(jié)構(gòu)如3.1小節(jié),調(diào)試通路有M個(gè)JTAGC控制,每個(gè)DSP簇中包含Z個(gè)DSP單核,IR寬度擴(kuò)至78+Z位,為了提高X-DSP芯片的高性能預(yù)留了8個(gè)單核用于擴(kuò)展,即IR寬度調(diào)至86+Z位。因此優(yōu)化后的調(diào)試鏈路長(zhǎng)度為(86+Z)*M,X-DSP的JTAG串行鏈路長(zhǎng)度降低了1-(86+Z)*M/(78*N)。3.4小節(jié)對(duì)存儲(chǔ)體的進(jìn)行大批量讀操作時(shí),優(yōu)化前需要8個(gè)IR_Read和8個(gè)IR_Capture。通過(guò)軟硬件聯(lián)合優(yōu)化后,需要1個(gè)IR_Read和8個(gè)IR_Capture。所以進(jìn)行大批量讀操所需時(shí)間降低了(112+8*112)/(8*(112+112))。綜上所述,在這種新型的JTAG調(diào)試設(shè)計(jì)中,假設(shè)M為4,Z為24,相比未采用新的JTAG調(diào)試鏈路時(shí),JTAG串行鏈路長(zhǎng)度整體降低了94%,進(jìn)行大批量讀操作所需時(shí)間降低了56%。
本文首先對(duì)經(jīng)典菊花鏈仿真調(diào)試結(jié)構(gòu)在眾核處理器中的工作原理進(jìn)行了介紹,分析這種結(jié)構(gòu)隨著單核數(shù)目增加,而出現(xiàn)的調(diào)試鏈路過(guò)長(zhǎng),調(diào)試效率下降的原因,提出了基于分組共享策略的優(yōu)化方法,并結(jié)合對(duì)X-DSP眾核處理器的體系結(jié)構(gòu)和單核數(shù)目,提出了基于分組共享策略的總-分調(diào)試結(jié)構(gòu),大大提高了X-DSP的調(diào)試性能。最后通過(guò)軟件驅(qū)動(dòng)與硬件設(shè)計(jì)相結(jié)合的軟硬件聯(lián)合優(yōu)化方法,大幅度提升了批量讀內(nèi)存操作的效率。在硬件邏輯設(shè)計(jì)完成后,對(duì)X-DSP中仿真調(diào)試部件進(jìn)行了功能驗(yàn)證,以及后期的綜合優(yōu)化。最終驗(yàn)證結(jié)果與設(shè)計(jì)規(guī)范的期望一致。