趙祉喬,周 理,荀長慶,潘國騰,鐵俊波,王偉征
(1.長沙理工大學(xué)計(jì)算機(jī)與通信工程學(xué)院,湖南 長沙 410114;2.國防科技大學(xué)計(jì)算機(jī)學(xué)院,湖南 長沙 410073)
從芯片設(shè)計(jì)到正式上市的整個(gè)階段中,片上系統(tǒng)SoC(System on Chip)的驗(yàn)證是一項(xiàng)非常繁復(fù)的任務(wù)[1]。投入到SoC驗(yàn)證的時(shí)間和精力,可以占據(jù)整個(gè)系統(tǒng)開發(fā)設(shè)計(jì)時(shí)間的60%甚至更多[1,2]。只有在硅前驗(yàn)證階段有了足夠充分的驗(yàn)證結(jié)果支持,才有信心進(jìn)行流片。然而在系統(tǒng)級(jí)驗(yàn)證階段,對(duì)于芯片功能、性能等方面的高效驗(yàn)證手段有限。在功能驗(yàn)證方面,查錯(cuò)時(shí)使用抓取波形等常規(guī)調(diào)試方法往往難以定位具體出錯(cuò)的模塊,且可能會(huì)消耗一個(gè)月甚至數(shù)月的時(shí)間,極大地影響了效率;而在性能分析方面,當(dāng)SoC性能未達(dá)到預(yù)期設(shè)計(jì)指標(biāo)時(shí),很難根據(jù)有限的全系統(tǒng)性能數(shù)據(jù)定位具體性能瓶頸[3]。因此,在SoC開發(fā)過程中,如何高效準(zhǔn)確地進(jìn)行功能驗(yàn)證與性能分析,是亟待解決的難題。
互聯(lián)總線處在系統(tǒng)的核心地帶,為了試圖解決這些問題,有研究提出從總線協(xié)議入手,通過片上網(wǎng)絡(luò)協(xié)議分析獲取更多芯片內(nèi)部的狀態(tài)信息,提高芯片可觀察性[2],進(jìn)而高效地對(duì)問題進(jìn)行定位分析和處理。Synopsys公司、Cadence公司也相繼推出驗(yàn)證IP VIP(Verification IP)[4,5]用于標(biāo)準(zhǔn)片上網(wǎng)絡(luò)協(xié)議CHI(Coherent Hub Interface)、AXI(Advanced eXtensible Interface)等的驗(yàn)證,采用通用的驗(yàn)證方法學(xué)UVM(Universal Verification Methodology)實(shí)現(xiàn),具有良好的可重用性和可擴(kuò)展性。然而,這些工具都是使用不可綜合的System Verilog語言,只適用于軟件仿真驗(yàn)證,不適用于在FPGA原型平臺(tái)驗(yàn)證。UltraSoC公司針對(duì)CHI總線、片上自定義總線開發(fā)了可綜合的VIP和對(duì)應(yīng)軟件[6],完成了對(duì)多類總線的同時(shí)監(jiān)測,并可通過 USB(Universal Serial Bus)或JTAG(Joint Test Action Group)導(dǎo)出。然而,其全部可綜合的實(shí)現(xiàn)方法在實(shí)際的使用中存在數(shù)據(jù)導(dǎo)出緩慢、對(duì)FPGA原型平臺(tái)的硬件資源占用較大等問題。
因此,針對(duì)硅前驗(yàn)證階段的需求和現(xiàn)有研究的不足,本文設(shè)計(jì)了一種軟硬件混合的高效CHI協(xié)議分析方法,通過DPI(Directed Programming Interface)連接C代碼,實(shí)現(xiàn)了一種適用于FPGA原型平臺(tái),且硬件資源占用少、可重用性高的系統(tǒng)級(jí)驗(yàn)證方法,能夠在FPGA原型平臺(tái)上實(shí)現(xiàn)對(duì)CHI協(xié)議的高效監(jiān)測和分析,有效加速SoC問題的定位和性能分析,提升設(shè)計(jì)與驗(yàn)證的效率。
如圖1所示,待測SoC包含多個(gè)處理器核CORE、數(shù)據(jù)存儲(chǔ)單元DDR(Double Data Rate)和輸入輸出單元IOU(Input and Output Unit)等。其中,片上網(wǎng)絡(luò)基于mesh結(jié)構(gòu)實(shí)現(xiàn),處理器核的L2 Cache與片上網(wǎng)絡(luò)通過CHI協(xié)議互聯(lián),是一款高性能眾核SoC。
Figure 1 Basic structure of the SoC under test圖1 待測SoC的基本結(jié)構(gòu)
CHI協(xié)議[7]是目前廣泛采用的一種片上協(xié)議規(guī)范,從其運(yùn)行情況可以了解通過片上網(wǎng)絡(luò)互聯(lián)的多個(gè)部件的運(yùn)行狀態(tài),有助于問題的定位及分析。
如圖2示,以讀數(shù)據(jù)為例,處理器核要從主存儲(chǔ)器中讀取一個(gè)數(shù)據(jù)。處理器核作為請(qǐng)求節(jié)點(diǎn)RN(Request Node)發(fā)出一個(gè)讀請(qǐng)求ReadNotSharedDirty給下一級(jí)的主節(jié)點(diǎn)ICN(InterConNect),主節(jié)點(diǎn)ICN接收到請(qǐng)求后在目錄中查找。如果有該緩存數(shù)據(jù)則返回CompData給處理器核,處理器核收到全部數(shù)據(jù)之后再返回一個(gè)CompACK作為收到的回復(fù);如果主節(jié)點(diǎn)ICN中沒有該緩存數(shù)據(jù),則繼續(xù)向下一級(jí)的從節(jié)點(diǎn)SN(Slave Node)發(fā)送讀請(qǐng)求ReadNoSNP。
Figure 2 Read transaction flow圖2 讀請(qǐng)求事務(wù)流程
在數(shù)據(jù)片(Data Flit)中存在多個(gè)ID字段用于標(biāo)識(shí)網(wǎng)絡(luò)路由。如圖3所示,以讀請(qǐng)求事務(wù)為例,通過TgtID尋址到主節(jié)點(diǎn)ICN及從節(jié)點(diǎn)SN,通過SrcID就可以將響應(yīng)返回到請(qǐng)求節(jié)點(diǎn)及主節(jié)點(diǎn)。事務(wù)號(hào)TxnID用來唯一標(biāo)識(shí)同一對(duì)節(jié)點(diǎn)的不同事務(wù)流,返回節(jié)點(diǎn)號(hào)ReaturnNID及事務(wù)序號(hào)ReaturnTxnID用于標(biāo)識(shí)返回?cái)?shù)據(jù)的目標(biāo)節(jié)點(diǎn)及事務(wù)號(hào),主節(jié)點(diǎn)號(hào)HomeNID標(biāo)識(shí)該事務(wù)的主節(jié)點(diǎn),即為反饋報(bào)文的目標(biāo)節(jié)點(diǎn)號(hào)TgtID,數(shù)據(jù)緩存區(qū)號(hào)DBID用于標(biāo)識(shí)數(shù)據(jù)的存放位置。
Figure 3 ID field transform of ReadNotSharedDirty transaction flow圖3 ReadNotSharedDirty事務(wù)流的ID域變換
如圖4所示,在CHI協(xié)議中,由主請(qǐng)求通道TXREQ、從數(shù)據(jù)通道RXDAT、從反饋通道RXRSP、從監(jiān)聽通道RXSNP、主反饋通道TXRSP、主數(shù)據(jù)通道TXDAT 6個(gè)通道進(jìn)行信號(hào)傳輸,每一個(gè)通道由4個(gè)信號(hào)來完成。
Figure 4 Channel and signal of CHI protocol圖4 CHI協(xié)議的通道及信號(hào)
以圖2中的讀數(shù)據(jù)為例子,讀請(qǐng)求在請(qǐng)求通道中傳輸,REQFLITPEND信號(hào)為傳輸?shù)絹砬暗穆暶?表示在下面幾個(gè)時(shí)鐘周期該通道會(huì)有報(bào)文傳輸,用于低功耗模式;REQFLITV信號(hào)標(biāo)識(shí)當(dāng)前數(shù)據(jù)片是否有效;REQFLIT信號(hào)為完整的數(shù)據(jù)片報(bào)文;REQLCRDV信號(hào)為信用信號(hào),當(dāng)其值為1時(shí),返回一個(gè)信用給請(qǐng)求報(bào)文的發(fā)送方。
本文方法由軟硬件協(xié)同實(shí)現(xiàn),包含離線模式與在線模式,具體流程如圖5所示。
Figure 5 Flow chart of protocol analysis圖5 協(xié)議分析流程圖
該方法由數(shù)據(jù)傳輸模塊、數(shù)據(jù)片解碼組碼模塊、協(xié)議分析模塊協(xié)同完成。數(shù)據(jù)傳輸模塊用于捕捉待測SoC中的CHI報(bào)文,并將其從FPGA原型平臺(tái)通過DPI-C接口傳輸?shù)焦ぷ髡局?。?shù)據(jù)片解碼組碼模塊處理CHI協(xié)議中的數(shù)據(jù)片,將數(shù)據(jù)片按照數(shù)據(jù)傳輸模塊中的配置信息解碼,將解碼后的數(shù)據(jù)片結(jié)構(gòu)體中的事務(wù)流控制變量組碼。協(xié)議分析模塊可完成事務(wù)流的追蹤、報(bào)文的正確性檢驗(yàn)和報(bào)文類型的覆蓋率監(jiān)測。具體結(jié)構(gòu)如圖6所示。
Figure 6 Structure of collaborative monitoring unit圖6 協(xié)同監(jiān)測單元結(jié)構(gòu)
本文方法在FPGA原型平臺(tái)中利用DPI-C接口傳輸數(shù)據(jù)[8],可綜合的硬件部分對(duì)共享函數(shù)體進(jìn)行聲明,軟件部分共享使用的函數(shù)體也由此定義。不可綜合的軟件部分對(duì)共享函數(shù)體進(jìn)行實(shí)例化,用以捕捉待測SoC中通過CHI協(xié)議各個(gè)通道的報(bào)文。
如圖7所示,數(shù)據(jù)傳輸模塊中可綜合的軟件部分使用System Verilog語言實(shí)現(xiàn),包括:存儲(chǔ)參數(shù)配置部件、共享函數(shù)體聲明部件和監(jiān)測器狀態(tài)控制部件。不可綜合的軟件部分使用C++語言實(shí)現(xiàn),包括:數(shù)據(jù)片參數(shù)配置模塊、監(jiān)測器數(shù)據(jù)管理模塊和監(jiān)測器模式控制模塊。
Figure 7 Structure of data transmission module圖7 數(shù)據(jù)傳輸模塊結(jié)構(gòu)
存儲(chǔ)參數(shù)配置部件用于設(shè)置監(jiān)測器的數(shù)據(jù)存儲(chǔ)方式,包含離線模式中輸出的數(shù)據(jù)包DAT和在線模式中輸出的日志文件LOG的輸出位置、針對(duì)該待測SoC中CHI協(xié)議的參數(shù)配置文件位置、被監(jiān)測節(jié)點(diǎn)句柄索引。在SoC中可能存在多個(gè)CHI協(xié)議節(jié)點(diǎn)需要綁定監(jiān)測單元,因此該方法在不可綜合部分采用句柄列表的方法管理各個(gè)節(jié)點(diǎn)的生成數(shù)據(jù)。每個(gè)節(jié)點(diǎn)由唯一的句柄索引標(biāo)識(shí)其在表中的位置。
共享函數(shù)體聲明部件通過導(dǎo)入(import)的方式在可綜合的硬件部分中聲明硬件部分與軟件部分共享函數(shù)體。監(jiān)測器數(shù)據(jù)管理模塊完成共享函數(shù)體的實(shí)例化,并將2.2節(jié)中所述的6個(gè)通道中的數(shù)據(jù)傳輸給軟件部分。共享函數(shù)體列表見表1。
為了盡可能降低數(shù)據(jù)傳輸代價(jià),監(jiān)測器狀態(tài)控制部件用于控制監(jiān)測器的使能。當(dāng)存在監(jiān)測器使用需求時(shí),將監(jiān)測器的使能信號(hào)置高,調(diào)用CreateDb函數(shù)使監(jiān)測器開始工作。之后通過Db-Write函數(shù)將數(shù)據(jù)從硬件部分傳輸至軟件部分。當(dāng)沒有監(jiān)測器使用需求時(shí),在FPGA平臺(tái)將監(jiān)測器的使能信號(hào)置低,停止通過DPI-C接口向工作站傳輸數(shù)據(jù),使用CloseDb函數(shù)關(guān)閉文件,減少資源的占用。如果總線已經(jīng)在工作,開啟監(jiān)測時(shí)應(yīng)當(dāng)忽略監(jiān)測初期事務(wù)流中缺失的請(qǐng)求通道和監(jiān)聽通道報(bào)文及其相關(guān)報(bào)文,以防止誤判。
由于CHI協(xié)議標(biāo)準(zhǔn)中的部分字段存在可配置的情況,各個(gè)待測SoC中實(shí)現(xiàn)的CHI協(xié)議字段的定義存在不同,本文方法的數(shù)據(jù)片參數(shù)配置模塊使用參數(shù)輸入的方法讀入CHI協(xié)議的可配置參數(shù)字段。此外,通過配置節(jié)點(diǎn)的最大信用這一參數(shù),可以修改支持的最大未完成請(qǐng)求數(shù)目。
本文提出的方法存在2種模式,通過宏定義的方法選擇離線或在線模式。如表2所示為離線模式與在線模式的對(duì)比,離線模式下對(duì)CHI報(bào)文不進(jìn)行檢驗(yàn)直接輸出;在線模式下對(duì)CHI報(bào)文進(jìn)行解碼、組碼以及指定的協(xié)議分析處理后再輸出監(jiān)測結(jié)果。離線模式的輸出數(shù)據(jù)如圖8所示。
Table 2 Comparison between offline mode and online mode
Figure 8 Data format of offline mode output圖8 離線模式輸出的數(shù)據(jù)格式
數(shù)據(jù)傳輸模塊捕捉到的是CHI協(xié)議中的數(shù)據(jù)片。數(shù)據(jù)片解碼組碼模塊對(duì)6種通道的數(shù)據(jù)片分別進(jìn)行字段的解碼,對(duì)其中事務(wù)流相關(guān)字段進(jìn)行組碼。
解碼模塊按照配置的字段格式,將完整數(shù)據(jù)片通過移位和與或操作分解為各個(gè)字段信息,將解碼后的字段信息存儲(chǔ)在請(qǐng)求報(bào)文、監(jiān)聽報(bào)文、反饋報(bào)文、數(shù)據(jù)報(bào)文4種結(jié)構(gòu)體中。在解碼過程中為每一條事務(wù)流生成唯一的標(biāo)識(shí)碼,用于定位單個(gè)事務(wù)流。
組碼模塊將數(shù)據(jù)片結(jié)構(gòu)體中的數(shù)據(jù)解析為事務(wù)流控制變量。事務(wù)流控制變量具體包含是否為無數(shù)據(jù)類型報(bào)文、是否為可監(jiān)聽類型報(bào)文、是否為原子類型報(bào)文、是否為緩存狀態(tài)設(shè)置相關(guān)報(bào)文、是否為DVM(Distributed Virtual Memory)類型報(bào)文等變量,這些變量按照操作碼字段的含義賦值。
協(xié)議分析模塊是本文方法的核心模塊,主要負(fù)責(zé)對(duì)協(xié)議的解析與正確性檢驗(yàn)。如圖9所示,協(xié)議分析模塊包含事務(wù)流追蹤模塊、報(bào)文檢驗(yàn)?zāi)K、問題反饋模塊、覆蓋率監(jiān)測模塊。
Figure 9 Schematic diagram of protocol analysis module圖9 協(xié)議分析模塊結(jié)構(gòu)示意圖
事務(wù)流追蹤模塊按照時(shí)間順序依次讀取數(shù)據(jù)包中6個(gè)通道的報(bào)文,使用等待響應(yīng)的事務(wù)表存儲(chǔ)未完成的事務(wù),在事務(wù)表內(nèi)通過目標(biāo)節(jié)點(diǎn)號(hào)、事務(wù)號(hào)對(duì)事務(wù)進(jìn)行追蹤。通過參數(shù)配置該SoC中支持的最大待完成請(qǐng)求數(shù)目,進(jìn)而實(shí)現(xiàn)6種通道數(shù)據(jù)事務(wù)流的追蹤及基礎(chǔ)檢驗(yàn)。具體流程如圖10所示。
報(bào)文檢驗(yàn)?zāi)K用于檢驗(yàn)6種通道中報(bào)文的正確性,包含通道信用計(jì)數(shù)檢驗(yàn)、報(bào)文字段檢驗(yàn)、事務(wù)流的正確性檢驗(yàn)等。通過對(duì)Opcode、AllowRetry、ExpCompAck和Order字段進(jìn)行監(jiān)測,實(shí)現(xiàn)多種不同類型的事務(wù)流程判定。當(dāng)監(jiān)測到問題發(fā)生時(shí),通過問題反饋模塊上報(bào)錯(cuò)誤,并將問題發(fā)生的事務(wù)流完整信息和基本錯(cuò)誤提示輸出在監(jiān)測日志中,根據(jù)用戶設(shè)置可以選擇停止或繼續(xù)仿真。具體流程如圖11所示。
Figure 11 Flow chart of packet verification module圖11 報(bào)文檢驗(yàn)?zāi)K流程圖
覆蓋率監(jiān)測模塊,用于監(jiān)測請(qǐng)求通道和監(jiān)聽通道中的報(bào)文,統(tǒng)計(jì)CHI協(xié)議中的請(qǐng)求報(bào)文和監(jiān)測報(bào)文中有多少報(bào)文類型已經(jīng)被執(zhí)行過。并使用計(jì)數(shù)記錄每種報(bào)文類型發(fā)生的次數(shù)。當(dāng)監(jiān)測到對(duì)應(yīng)報(bào)文時(shí),計(jì)數(shù)加1。監(jiān)測完成時(shí),輸出各個(gè)通道中各報(bào)文類型的發(fā)生次數(shù)、覆蓋率等統(tǒng)計(jì)信息。如表3所示為輸出的覆蓋率統(tǒng)計(jì)結(jié)果。
Table 3 Coverage statistics results and their explanations
本文實(shí)驗(yàn)基于FPGA原型平臺(tái)在Linux操作系統(tǒng)下實(shí)現(xiàn),使用2.1節(jié)中所述基于4×4 Mesh實(shí)現(xiàn)待測SoC。監(jiān)測單元與待測SoC的綁定方法如圖6所示。分別在單核、四核環(huán)境中設(shè)置綁定1個(gè)監(jiān)測單元和4個(gè)監(jiān)測單元的實(shí)驗(yàn)進(jìn)行測試。節(jié)點(diǎn)最大未完成事務(wù)數(shù)目設(shè)為16。
離線模式下向工作站中輸出數(shù)據(jù)文件DAT,之后在工作站端對(duì)其進(jìn)行解析,生成監(jiān)測日志及覆蓋率統(tǒng)計(jì)結(jié)果。在線模式下向工作站輸出監(jiān)測日志LOG,包含錯(cuò)誤提示信息和錯(cuò)誤發(fā)生報(bào)文完整事務(wù)流信息。如圖12所示為一次實(shí)驗(yàn)的結(jié)果展示,其中圖12a為離線輸出數(shù)據(jù)DAT;圖12b為在線輸出監(jiān)測日志LOG;圖12c為覆蓋率統(tǒng)計(jì)結(jié)果。
Figure 12 Display of experimental results圖12 實(shí)驗(yàn)結(jié)果展示
如表4所示為單核環(huán)境中正常工作情況下離線模式與在線模式輸出數(shù)據(jù)大小對(duì)比。實(shí)驗(yàn)結(jié)果表明,在正常工作狀態(tài)下在線模式不存在輸出數(shù)據(jù),沒有存儲(chǔ)資源被占用。離線模式下輸出數(shù)據(jù)的大小隨仿真周期的延長線性增大,對(duì)資源占用較大。
Table 4 Size comparison of output data between offline mode and online mode
如表5所示為使用本文提出的監(jiān)測器前后FPGA資源的占用情況對(duì)比。
Table 5 Comparison of FPGA resource usage before and after using monitor
本文監(jiān)測器框架在硬件側(cè)只需要增加對(duì)協(xié)議信號(hào)進(jìn)行傳輸?shù)倪壿?而復(fù)雜的協(xié)議正確性檢查邏輯在軟件側(cè)得到了實(shí)現(xiàn),因此軟硬件混合的監(jiān)測單元對(duì)FPGA原型平臺(tái)的硬件占用僅占0.01%,在實(shí)際應(yīng)用中可以忽略不記。
如表6和表7所示,分別為單核(單核 DDR4G 初始仿真頻率為1 380 KHz)、四核(四核 DDR16G 初始仿真頻率1 309 KHz)的環(huán)境中離線模式與在線模式下對(duì)于npb-omp[9]測試題目的實(shí)驗(yàn)結(jié)果。
Table 6 Results of offline mode and online mode under single-core environment
Table 7 Results of offline mode and online mode under four-core environment
對(duì)于單核環(huán)境,監(jiān)測單元的離線模式對(duì)仿真時(shí)間沒有影響,在線模式的仿真時(shí)間平均變長了1.13倍。對(duì)于四核環(huán)境,離線模式的仿真時(shí)間平均變長了1.03倍,在線模式的仿真時(shí)間平均變長了1.25倍。其中,對(duì)仿真時(shí)間沒有影響的離線模式實(shí)驗(yàn)組占總離線模式實(shí)驗(yàn)組的95.46%,對(duì)仿真時(shí)間沒有影響的在線模式實(shí)驗(yàn)組占總在線模式實(shí)驗(yàn)組的54.55%,最長的仿真時(shí)間變長了1.83倍。
實(shí)驗(yàn)結(jié)果表明,離線模式對(duì)于仿真速率影響不大,在線模式對(duì)仿真速率的影響也在可接受范圍內(nèi),該監(jiān)測方法可以達(dá)到對(duì)CHI協(xié)議監(jiān)測不影響整體仿真速率的目的。
本文設(shè)計(jì)了一種軟硬混合的高效CHI協(xié)議分析方法,用于對(duì)CHI總線上的信號(hào)進(jìn)行高效地監(jiān)測與分析。該方法可以在多核SoC的原型系統(tǒng)平臺(tái)中使用,離線模式對(duì)仿真速率影響不大,在線模式對(duì)存儲(chǔ)資源占用較少、可重用性高,其DPI接口可以擴(kuò)展,以對(duì)AXI等協(xié)議進(jìn)行監(jiān)測,應(yīng)用于SoC的驗(yàn)證過程可以加快問題出錯(cuò)點(diǎn)的定位過程,具有一定的應(yīng)用價(jià)值。