文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.174703
中文引用格式: 陳崢. 基于動(dòng)態(tài)連續(xù)數(shù)據(jù)的GPU調(diào)試系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,,2018,,44(6):8-10,14.
英文引用格式: Chen Zheng. A GPU debug system based on continuous dynamic data[J]. Application of Electronic Technique,,2018,,
44(6):8-10,14.
0 引言
隨著GPU技術(shù)的發(fā)展,,GPU結(jié)構(gòu)變得越來(lái)越復(fù)雜,,對(duì)硬件的調(diào)試成為一個(gè)越來(lái)越困難的任務(wù)。硬件調(diào)試的困難在于硬件本身的不透明性,。在發(fā)生問(wèn)題的時(shí)候,,工程師沒(méi)有辦法像軟件調(diào)試那樣,看到硬件內(nèi)部發(fā)生了什么,,也不能像軟件調(diào)試那樣,,半路設(shè)一個(gè)斷點(diǎn),把硬件停下來(lái),。
為方便對(duì)硬件的調(diào)試,GPU設(shè)計(jì)人員開(kāi)發(fā)出很多種硬件調(diào)試方法來(lái)降低硬件調(diào)試的難度,,傳統(tǒng)上有DebugBus,、掃描路徑法、ARM CoreSightTM技術(shù),。這些方法的目的都是用某種方法將硬件內(nèi)部信息暴露給工程師,,降低硬件的不透明性,但其暴露出的信息都是硬件內(nèi)部某個(gè)時(shí)間點(diǎn)的靜態(tài)信息,,對(duì)硬件工程師的幫助是有限的,。
本文提出一種新的調(diào)試架構(gòu),相對(duì)于傳統(tǒng)技術(shù),它能夠提供一段時(shí)間內(nèi)的動(dòng)態(tài)數(shù)據(jù)給工程師,,讓工程師能夠了解在這段時(shí)間內(nèi)硬件內(nèi)部狀況是如何變化的,,使得工程師能迅速定位到造成問(wèn)題的異常變化。甚至更進(jìn)一步,,工程師可以將得到的信息導(dǎo)入模擬環(huán)境,,在模擬環(huán)境里面重現(xiàn)硬件的問(wèn)題。
1 傳統(tǒng)硬件調(diào)試方式及其缺陷
1.1 DebugBus
DebugBus技術(shù)是最早在芯片設(shè)計(jì)中引進(jìn)的調(diào)試技術(shù)[1-2],。其基本原理是在硬件設(shè)計(jì)中添加一批狀態(tài)寄存器,,每個(gè)模塊都把自己的狀態(tài)編碼后送到這個(gè)狀態(tài)寄存器中。當(dāng)發(fā)生問(wèn)題的時(shí)候,,工程師讀取狀態(tài)寄存器中的狀態(tài)碼,,從而可以分析問(wèn)題發(fā)生的原因。
DebugBus技術(shù)缺陷在于,,狀態(tài)寄存器的位是有限的,,所以能反映模塊的狀態(tài)也是有限的,工程師通過(guò)狀態(tài)碼只能大概了解模塊的真實(shí)情況,。
1.2 基于掃描路徑法的可測(cè)性設(shè)計(jì)技術(shù)
基于掃描路徑法的可測(cè)性設(shè)計(jì)技術(shù)是可測(cè)性設(shè)計(jì)(DFT)技術(shù)的一個(gè)重要方法[3-5],,這種方法能夠從芯片外部設(shè)定電路中各個(gè)觸發(fā)器的狀態(tài),并通過(guò)簡(jiǎn)單的掃描鏈設(shè)計(jì),,掃描觀測(cè)觸發(fā)器是否工作在正常狀態(tài),,以此來(lái)檢測(cè)電路的正確性。
這種技術(shù)的缺陷在于它速度太慢,,因?yàn)樗且粋€(gè)串行的操作,,不能一次讀出全部數(shù)據(jù),導(dǎo)致工程師不能得到一個(gè)即時(shí)的數(shù)據(jù)[6],。
1.3 ARM CoreSightTM技術(shù)
CoreSightTM技術(shù)是ARM公司在2004年推出的一個(gè)新的調(diào)試體系架構(gòu),,以提供更為強(qiáng)大的調(diào)試能力[7]。
CoreSightTM技術(shù)比較適合于軟件調(diào)試,,因?yàn)樗峁┙o工程師的是模塊之間的指令和寄存器傳遞序列,,軟件工程師可以知道自己送給硬件的命令是如何在硬件各個(gè)模塊之間傳遞。但硬件開(kāi)發(fā)工程師更多的是想了解模塊和模塊之間完整的會(huì)話信息,,甚至是模塊內(nèi)部的一些信號(hào)[8-9],。
2 新調(diào)試系統(tǒng)硬件部分
對(duì)于硬件開(kāi)發(fā)工程師來(lái)說(shuō),要調(diào)試硬件問(wèn)題需要得到大量硬件內(nèi)部模塊和模塊之間的會(huì)話信息,,這些信息最好是某個(gè)時(shí)間段內(nèi)連續(xù)的信息,,而不是簡(jiǎn)單的某個(gè)時(shí)間點(diǎn)的信息。
但是要把所有這些信息收集給調(diào)試人員,,就需要解決兩個(gè)問(wèn)題:
第一,,每個(gè)時(shí)鐘周期產(chǎn)生的信息是大量的,,為了不影響后面的時(shí)序,必須在一個(gè)時(shí)鐘周期內(nèi)處理完,。但硬件帶寬的限制又決定了這些不可能在一個(gè)周期內(nèi)處理完,。這也是過(guò)去技術(shù)上只能提供簡(jiǎn)略信息的主要原因。
第二,,由于每個(gè)時(shí)鐘周期都產(chǎn)生大量的信息,,因此我們要處理的整體信息量非常巨大,導(dǎo)致這些信息的存儲(chǔ)就是一個(gè)問(wèn)題,。
為了解決這些問(wèn)題,,設(shè)計(jì)了一個(gè)雙時(shí)鐘系統(tǒng)。當(dāng)我們發(fā)現(xiàn)需要存儲(chǔ)信息的時(shí)候,,我們就把全局時(shí)鐘停止,,從而使得各個(gè)模塊停止工作。同時(shí)我們用另外一套時(shí)鐘系統(tǒng)驅(qū)動(dòng)調(diào)試模塊收集和壓縮信息,。當(dāng)信息收集完成以后,,就把相關(guān)的數(shù)據(jù)發(fā)送到存儲(chǔ)模塊去存儲(chǔ)。當(dāng)存儲(chǔ)完成時(shí)候,,再重新激活全局時(shí)鐘,,讓各個(gè)模塊繼續(xù)工作。
由于采用了雙時(shí)鐘系統(tǒng),,提供了足夠的時(shí)間來(lái)進(jìn)行信息的收集和存儲(chǔ),。因此在存儲(chǔ)媒介上,我們放棄了價(jià)格昂貴但容量偏小的閃存,,而是選擇了從板載內(nèi)存中分配一塊較大的區(qū)間,,這樣就能在成本范圍內(nèi)提供能夠存放足夠多信息的存儲(chǔ)空間。
根據(jù)以上設(shè)計(jì),,我們把新的調(diào)試系統(tǒng)分成了5個(gè)模塊,。
2.1 會(huì)話取樣模塊
會(huì)話取樣模塊負(fù)責(zé)將模塊和模塊之間的會(huì)話傳給會(huì)話監(jiān)控模塊或者會(huì)話記錄模塊。假設(shè)我們有兩個(gè)模塊A和B,,一般情況下,,模塊A和模塊B之間通過(guò)接口C連接,互相傳遞信息,,如圖1所示,。
將會(huì)話取樣模塊放在接口C上,通過(guò)它來(lái)檢查模塊A和模塊B之間是否有會(huì)話,,如果有會(huì)話發(fā)生,,那么就把會(huì)話內(nèi)容傳給會(huì)話存儲(chǔ)模塊,,并由會(huì)話存儲(chǔ)模塊將內(nèi)容整理存儲(chǔ)到存儲(chǔ)媒介上,,如圖2所示。
2.2 會(huì)話監(jiān)控模塊
會(huì)話監(jiān)控模塊負(fù)責(zé)監(jiān)控模塊之間的會(huì)話,一旦它發(fā)現(xiàn)模塊A和模塊B之間發(fā)生了會(huì)話,,那么會(huì)話監(jiān)控模塊就會(huì)通知全局時(shí)鐘控制模塊,,把所有模塊的時(shí)鐘中止,如圖3所示,。
2.3 會(huì)話記錄模塊
會(huì)話記錄模塊負(fù)責(zé)在全局時(shí)鐘停止時(shí),,將會(huì)話的內(nèi)容記錄到內(nèi)存中。我們沒(méi)有采用傳統(tǒng)上的內(nèi)部Cache的模式,,因?yàn)殡m然內(nèi)存中記錄比較慢,,但是可以提供極大的記錄空間,可以記錄相當(dāng)長(zhǎng)時(shí)間的會(huì)話,。只要內(nèi)存足夠大,,就可以記錄足夠長(zhǎng)的會(huì)話。
會(huì)話記錄模塊會(huì)把會(huì)話記錄循環(huán)寫(xiě)入對(duì)于軟件分配給硬件的內(nèi)存,,同時(shí)它提供兩個(gè)寄存器給軟件用于判斷是否有信息寫(xiě)入,。一個(gè)寄存器表示內(nèi)存中未處理信息的頭部,一個(gè)寄存器表示內(nèi)存中未處理信息的尾部,。會(huì)話記錄模塊在寫(xiě)入信息前,,會(huì)檢查未處理信息的尾部是否和未處理信息頭部重合,如果是,,說(shuō)明內(nèi)存中信息已經(jīng)滿了,,那么記錄模塊會(huì)停下等待軟件把信息讀走。
由于各個(gè)模塊之間會(huì)話大小不同,,因此在存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)上,,我們沒(méi)有采取固定長(zhǎng)度的數(shù)據(jù)結(jié)構(gòu),而是設(shè)計(jì)了一種變長(zhǎng)的數(shù)據(jù)結(jié)構(gòu),。它分為頭部和數(shù)據(jù)兩塊,。頭部是一個(gè)固定結(jié)構(gòu),表面數(shù)據(jù)包的信息,,而其后跟隨著一個(gè)變長(zhǎng)的數(shù)據(jù)流,。它包含了三部分信息:
(1)模塊ID:記錄了信息來(lái)自哪個(gè)模塊。
(2)數(shù)據(jù)長(zhǎng)度:會(huì)話信息的大小,。
(3)時(shí)間戳:會(huì)話發(fā)生的時(shí)間,,可以用于仿真模型。
在實(shí)際應(yīng)用中,,內(nèi)存控制器只有一個(gè)輸入,,為了協(xié)調(diào)各個(gè)模塊的寫(xiě)入順序,我們專門(mén)設(shè)計(jì)了一個(gè)記錄控制器,,用來(lái)接收各個(gè)會(huì)話記錄模塊的輸出,,并轉(zhuǎn)送到內(nèi)存控制器中,,如圖4所示。
2.4 全局時(shí)鐘控制器
該模塊用來(lái)控制各個(gè)模塊的時(shí)鐘,。一旦一個(gè)會(huì)話記錄的請(qǐng)求發(fā)生,,那么全局時(shí)鐘控制器就會(huì)向各個(gè)模塊發(fā)出時(shí)鐘停止信號(hào),中止各個(gè)模塊的運(yùn)行,,在會(huì)話記錄完成后,,才會(huì)發(fā)出時(shí)鐘繼續(xù)的信號(hào)。
圖5就是全局時(shí)鐘控制器的模塊圖,,這是整個(gè)架構(gòu)設(shè)計(jì)中最基本的一塊,。
2.5 調(diào)試時(shí)鐘模塊
在全局時(shí)鐘被中止的時(shí)候,雖然其他模塊都停止工作了,,但是會(huì)話記錄模塊,、會(huì)話取樣模塊、內(nèi)存控制器等一系列模塊都還要繼續(xù)工作,,因?yàn)橄到y(tǒng)為他們單獨(dú)設(shè)置了這么一個(gè)時(shí)鐘模塊,,在全局時(shí)鐘被中止時(shí),繼續(xù)為其他模塊提供時(shí)鐘中斷,。
3 新調(diào)試系統(tǒng)的軟件部分
軟件部分的功能就是根據(jù)工程師的需求配置相應(yīng)的調(diào)試環(huán)境,,并將硬件產(chǎn)生的信息存儲(chǔ)到相應(yīng)的文件中去。
雖然新調(diào)試系統(tǒng)解決了存儲(chǔ)時(shí)間較長(zhǎng)的問(wèn)題,,但是為了提高調(diào)試效率,,在存儲(chǔ)過(guò)程中,我們采用多Buffer輪替的方式來(lái)提高數(shù)據(jù)的讀取效率,。
4 應(yīng)用的成果
在新一代GPU的結(jié)構(gòu)中加上了新的硬件調(diào)試架構(gòu),,取得了初步的成果。
在這次設(shè)計(jì)開(kāi)發(fā)中,,在FPGA上通過(guò)大量的應(yīng)用,,利用新的調(diào)試系統(tǒng)對(duì)L2Cache進(jìn)行了研究,獲取了大量的數(shù)據(jù),。圖6是在不同的L1Cache設(shè)計(jì)下,,L2 Cache和內(nèi)存存儲(chǔ)模塊(MXU)之間會(huì)話后的分析結(jié)果。從圖中,,我們可以清晰地看到在實(shí)際中,,L2 Cache是如何處理接收的請(qǐng)求,以及其中的4個(gè)bank各自的負(fù)載情況如何,,使得硬件開(kāi)發(fā)人員可以清晰地發(fā)現(xiàn)Cache設(shè)計(jì)中存在的問(wèn)題,,并為優(yōu)化Cache結(jié)構(gòu)提供了充分的數(shù)據(jù)基礎(chǔ)。
另外,,我們也在FPGA上重現(xiàn)了一些硬件隨機(jī)問(wèn)題,,并且獲取了相應(yīng)的數(shù)據(jù),。在把這些數(shù)據(jù)導(dǎo)入我們的RTL仿真環(huán)境后,成功地在模擬環(huán)境中重現(xiàn)了這些硬件問(wèn)題?,F(xiàn)在通過(guò)調(diào)試系統(tǒng)獲取信息進(jìn)行模擬重現(xiàn),解決了過(guò)去硬件開(kāi)發(fā)人員調(diào)試硬件問(wèn)題由于硬件封裝而只能通過(guò)間接信息分析來(lái)調(diào)試的問(wèn)題,。硬件開(kāi)發(fā)人員可以根據(jù)波形來(lái)分析出問(wèn)題的原因,,極大地提高開(kāi)發(fā)人員調(diào)試的速度。
5 結(jié)語(yǔ)
利用這種雙時(shí)鐘架構(gòu),,我們能否更進(jìn)一步開(kāi)發(fā)單步調(diào)試系統(tǒng),,使得硬件調(diào)試象軟件調(diào)試一樣,可以設(shè)斷點(diǎn),,停下后即時(shí)查看硬件狀態(tài),。如果能實(shí)現(xiàn),那將更進(jìn)一步簡(jiǎn)化硬件調(diào)試能力,,提高硬件開(kāi)發(fā)水平,,這也是我們下一步的研究方向之一。
參考文獻(xiàn)
[1] SUNIL C.On chip logic analyzer debug bus:US,,US6822474.[P/OL].(2004-11-23)[2017-08-30].http://www.freep-atentsonline.com/6822474.pdf.
[2] JOHNSON T J.System and method for using a debug bus as a capture buffer:US,,US 20040193790 A1.[P/OL].2004-09-30.http://www.freepatentsonline.com/20040193790.pdf.
[3] AERTS J,MARINISSEN E J.Scan chain design for test time reduction in core-based ICs[C].International Test Conference,,1998:448-457.
[4] KO H F,,NICOLICI N.Functional scan chain design at RTL for skewed-load delay fault testing[C].Asian Test Symposium,2004:454-459.
[5] GHOSH D,,BHUNIA S,,ROY K.Multiple scan chain design technique for power reduction during test application in BIST[C].IEEE International Symposium on Defect & Fault Tolerance in VLSI Systems,2003:191.
[6] HSU L C,,CHEN H M.On optimizing scan testing power and routing cost in scan chain design[C].International Symposium on Quality Electronic Design.2006:451-456.
[7] ARM Information Center ARM CoreSight Architecture Speci-fication[EB/OL].[2013-09-26].http://infocenter.arm.com/help/topic/com.arm.doc.ihi0029d/IHI0029D_coresight_archi-tecture_spec_v2_0.pdf.
[8] MARTIN T.Debugging with CoreSight.The Designer's Guide to the Cortex-M Processor Family[M].Newnes,,2016:217-254.
[9] 韓格欣,許翔,,劉嘯宇,,等.ARM CoreSight調(diào)試與追蹤體系在Cortex M3內(nèi)核中的實(shí)現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2014(7):22-24.
作者信息:
陳 崢
(上海兆芯集成電路有限公司 軟件部,,上海201203)