程 濤
(哲庫科技(上海)有限公司,上海 201210)
本文主要聚焦于消費(fèi)電子類的SoC 芯片驗(yàn)證領(lǐng)域,為芯片驗(yàn)證過程中遇到的功能、功耗、性能驗(yàn)證方面的一些難題提供了有效的解決方案。相比傳統(tǒng)的驗(yàn)證方式,基于Palladium AVIP的驗(yàn)證方案能更加快速高效地達(dá)成驗(yàn)證目的,為芯片按時(shí)成功流片提供了強(qiáng)有力的保障。
AVIP 是在仿真VIP的基礎(chǔ)上專門針對(duì)Emulator 平臺(tái)而設(shè)計(jì)的。如果仿真用的是Cadence的VIP的話,很容易就可以切到基于Emulator的AVIP 上去?;驹硎前言靖郎y(cè)設(shè)計(jì)(Design Under Test,DUT)交互的driver、monitor、interface 等模塊做了一些拆分和修改:軟件側(cè)的代理模型(proxy)提供控制接口給用戶控制發(fā)包行為,并與硬件側(cè)的BFM 進(jìn)行事務(wù)處理(transaction)級(jí)別的交互;硬件側(cè)通過總線行為模型(Bus Function Model,BFM)來獲取軟件側(cè)的發(fā)包請(qǐng)求并驅(qū)動(dòng)DUT。通過Palladium(Cadence 公司的Emulator 產(chǎn)品) 可以大大加速硬件側(cè)DUT的原理,達(dá)到加速整體仿真的目的。目前Cadence的AVIP 支持各種標(biāo)準(zhǔn)協(xié)議,如:MIPI、AMBA、通用串行總線(Universal Serial Bus,USB)、高速串行擴(kuò)展總線標(biāo)準(zhǔn)(Peripheral Component Interconnect Express,PCIE)等。
AVIP 由如下兩部分組成:
(1)硬件側(cè)與DUT 信號(hào)直接相連的BFM;
(2)軟件側(cè)提供函數(shù)接口給用戶開發(fā)測(cè)試平臺(tái)。
軟件和硬件之間底層物理交互是通過仿真加速卡(Simulation Acceleration,SA)把Palladium 仿真加速器和服務(wù)器連接起來的,運(yùn)行時(shí)通過AVIP 軟件側(cè)的proxy 與硬件側(cè)的BFM 進(jìn)行transaction 級(jí)別的通信。AVIP 架構(gòu)圖如圖1 所示。
圖1 AVIP 架構(gòu)圖
AVIP 支持多種不同的測(cè)試平臺(tái)接口及使用模型,支持接口有:UVM、C++、TLM2、嵌入式等。不同的接口可以有不同的使用方式:
(1)UVM 接口一般用來作為仿真加速;
(2)C++也是用來作為仿真加速,相比UVM 接口少了UVM 相關(guān)的方法學(xué)的外殼;
(3)TLM2 接口可以連接虛擬平臺(tái)來使用;
(4)嵌入式速度最快,需要把測(cè)試平臺(tái)寫成可綜合的形式并綜合到Emulator 里去。
用戶需要使用者根據(jù)自己平臺(tái)的特性選擇合適的接口和使用方式,各接口比較如表1 所示。
表1 各接口比較
AVIP的一個(gè)重要作用就是用來做仿真加速,通過加速硬件側(cè)的DUT,同時(shí)減少軟件側(cè)和硬件側(cè)的交互,達(dá)到大幅加快整體仿真速度的目的。
對(duì)于一些大場(chǎng)景的測(cè)試用例,軟件仿真速度太慢了,比如有的可能需要一兩周的時(shí)間才能跑完,對(duì)于芯片驗(yàn)證來說很難滿足驗(yàn)證計(jì)劃的時(shí)間要求。如何在盡可能少改動(dòng)原有仿真環(huán)境以及測(cè)試用例的前提下大幅提升仿真速度是一個(gè)難題。
針對(duì)不同的模塊以及場(chǎng)景,本文將介紹2 種不同的加速方案:UVM 仿真加速和C++仿真加速方案。UVM仿真加速方案適合設(shè)計(jì)驗(yàn)證(Design Verification,DV)人員,可以基于現(xiàn)成的UVM 仿真環(huán)境,把VIP 替換成AVIP 并在Emulator 上進(jìn)行仿真加速。C++的仿真加速方案適合SOC DV 或芯片驗(yàn)證(Chip Validation,CV)人員,尤其是驗(yàn)證case 是基于C 代碼寫的用例,優(yōu)點(diǎn)是環(huán)境相對(duì)比較簡單,沒有UVM 那一套復(fù)雜方法學(xué),可以快速地搭建好仿真環(huán)境。并且運(yùn)行速度理論上會(huì)比基于UVM 仿真加速的方案快一些,缺點(diǎn)是環(huán)境復(fù)用性差一些。
2.1.1 UVM 仿真加速原理簡介
使用硬件加速DUT的同時(shí)仍然受益于UVM 提供的高級(jí)驗(yàn)證環(huán)境,如果是使用Cadence的VIP 搭建的驗(yàn)證環(huán)境,那么可以很方便地切到AVIP的UVMA 環(huán)境,只需要編譯的時(shí)候增加一些編譯選項(xiàng)和宏定義并指定兩個(gè)頂層:硬件層和軟件層,軟件側(cè)主要是實(shí)現(xiàn)UVM 環(huán)境并運(yùn)行在仿真器上。硬件側(cè)主要是實(shí)例化DUT 和AVIP的BFM,把AVIP 和DUT 連接起來并運(yùn)行在硬件加速器上。同時(shí)AVIP 把原本VIP 里與DUT 交互的interface做成可綜合的邏輯并放到了硬件側(cè),軟件側(cè)的driver 和monitor 可以調(diào)用硬件側(cè)interface 定義的task,這樣軟硬件之間就可以通過transaction 進(jìn)行交互了。這樣在做仿真加速時(shí)就能復(fù)用原本的UVM 環(huán)境和測(cè)試用例,減少了重新搭建環(huán)境的工作量。
2.1.2 待測(cè)設(shè)計(jì)介紹
DUT 是一個(gè)有兩個(gè)AXI 接口的圖像處理模塊,一個(gè)AXI 口是用來配置模塊控制寄存器的。另一個(gè)AXI 口是待測(cè)設(shè)計(jì)用來讀取雙倍數(shù)據(jù)速率存儲(chǔ)單元(Double Data Rate,DDR)獲得原始處理圖像數(shù)據(jù)以及處理完數(shù)據(jù)之后把結(jié)果數(shù)據(jù)寫回DDR 通路的。
圖2 UVM 仿真加速架構(gòu)圖
2.1.3 仿真加速流程架構(gòu)
(1)在硬件側(cè)實(shí)例化AVIP的BFM 模型并與待測(cè)設(shè)計(jì)通過信號(hào)連接起來。同時(shí)實(shí)例化一個(gè)帶AXI 口的存儲(chǔ)模型來模擬DDR的功能,并與待測(cè)設(shè)計(jì)連接起來。
(2)在軟件服務(wù)器側(cè)通過調(diào)用AVIP 提供的UVM 接口函數(shù)來控制AVIP的發(fā)包行為。此處的配置信息是從算法組獲得的,可以通過腳本自動(dòng)生成相應(yīng)的測(cè)試用例。原始圖片數(shù)據(jù)可以通過DDR的后門加載進(jìn)去。
(3)DUT 從DDR 讀取原始數(shù)據(jù)處理完后數(shù)據(jù)通過AXI 口寫到DDR 里面,結(jié)束后可以從DDR的后門導(dǎo)出來離線與期望的正確數(shù)據(jù)進(jìn)行對(duì)比。
2.1.4 測(cè)試結(jié)果
使用這種方式的加速比可以達(dá)到十倍左右,因?yàn)橛幸徊糠址菢?biāo)準(zhǔn)協(xié)議接口在,這部分使用了信號(hào)級(jí)別的通信對(duì)速度有一定影響,如果純AVIP的環(huán)境理論上可以達(dá)到幾十甚至上百倍的加速比。原本需要運(yùn)行一周的測(cè)試用例可以十多個(gè)小時(shí)運(yùn)行完,大大加速了驗(yàn)證速度。后續(xù)優(yōu)化速度的辦法是對(duì)于非標(biāo)準(zhǔn)協(xié)議或是沒有AVIP的情況,可以對(duì)這類接口做一些優(yōu)化,處理成自定義的AVIP:主要處理driver 和monitor 與DUT 交互的接口部分,把它做成可綜合的邏輯并放到硬件加速器里去。
2.2.1 基于C++接口的仿真加速原理
Palladium AVIP 提供了運(yùn)行在軟件服務(wù)器側(cè)的proxy模型接口,proxy 模型與硬件側(cè)的BFM 模型通過transaction發(fā)包的形式進(jìn)行交互。BFM 側(cè)則通過解析transaction 成信號(hào)級(jí)別并驅(qū)動(dòng)DUT。
2.2.2 基于C++仿真加速流程架構(gòu)
(1)在硬件側(cè):實(shí)例化MIPI AVIP的BFM 模型,并與待測(cè)設(shè)計(jì)通過信號(hào)連接起來。使用Palladium 硬件來加速DUT 側(cè)的運(yùn)行速度。
(2)在軟件側(cè):通過調(diào)用MIPI RX AVIP 提供的C++接口函數(shù),可以輸入各種格式的圖片數(shù)據(jù),并控制AVIP按照MIPI 協(xié)議把數(shù)據(jù)打包發(fā)送到待測(cè)設(shè)計(jì)里去??梢酝ㄟ^設(shè)置AVIP的時(shí)鐘,以及插入空白行等方式控制發(fā)幀幀率,以及利用AVIP 提供的現(xiàn)成函數(shù)接口控制發(fā)包的長度、類型等。
(3)結(jié)果比對(duì):MIPI TX AVIP 可以把處理好的圖片數(shù)據(jù)存成raw 格式的文件,然后通過離線的方式進(jìn)行比較,判斷測(cè)試用例是成功還是失敗了。
(4)AVIP 與中央處理器(Central Processing Unit,CPU)上執(zhí)行的軟件代碼的交互:通過選取待測(cè)設(shè)計(jì)里不用的寄存器來作為AVIP 和DUT的交互通道。比如CPU如果往某個(gè)寄存器寫0x123,testbench 側(cè)可以通過調(diào)用在硬件描述語言(SystemVerilog,SV)里定義的直接編程接口(Direct Programming Interface,DPI)函數(shù),來解析出這個(gè)編碼,不同的編碼代表不同的測(cè)試用例以及發(fā)包方式,這樣就可以進(jìn)行測(cè)試用例的連續(xù)測(cè)試。如此就達(dá)到了通過CPU 軟件配置寄存器來達(dá)到間接控制AVIP 發(fā)包的目的。
2.2.3 測(cè)試結(jié)果
原來需要運(yùn)行7 個(gè)多小時(shí)的測(cè)試用例,使用基于MIPI AVIP的仿真加速方案只需要10 min 左右就可以運(yùn)行完,加速比達(dá)到了43 倍,大大加速了芯片驗(yàn)證的進(jìn)度。
功耗分析傳統(tǒng)的流程是運(yùn)行出波形用Synopsys的PTPX 或者Cadence的Joules 來算出具體的功耗值。如果是使用仿真的方式來抓取波形,對(duì)于一些大場(chǎng)景的測(cè)試用例面臨的挑戰(zhàn):(1)仿真運(yùn)行時(shí)間很長,有的要以周計(jì),效率很低;(2)波形數(shù)據(jù)很大,但是功耗分析工具只能分析很短的一段波形,如何在很長的一段測(cè)試用例里準(zhǔn)確抓取到感興趣的那一小段波形是一個(gè)難題。
通過結(jié)合MIPI AVIP 發(fā)包來模擬真實(shí)場(chǎng)景、Palladium 網(wǎng)表編譯流程以及Cadence的動(dòng)態(tài)功耗分析流程(Dynamic Power Analysis,DPA),HW-WTC(Hardware Weighted Toggle Count)可以解決上面提到的仿真速度慢以及難以找到感興趣功耗波形窗口的難題。
HW-WTC的基本原理是通過往硬件里增加額外邏輯統(tǒng)計(jì)信號(hào)翻轉(zhuǎn)數(shù),并依據(jù).lib 文件里各個(gè)標(biāo)準(zhǔn)單元功耗信息加入相應(yīng)權(quán)重,以此來統(tǒng)計(jì)模塊所有信號(hào)的翻轉(zhuǎn)數(shù)(動(dòng)態(tài)功耗主要跟信號(hào)翻轉(zhuǎn)率有關(guān))。有了信號(hào)翻轉(zhuǎn)數(shù)就可以通過工具分析得到某個(gè)場(chǎng)景下動(dòng)態(tài)功耗的趨勢(shì)圖,有了這個(gè)趨勢(shì)圖就可以很方便地找到感興趣的窗口(如峰值功耗:peak power),基于這個(gè)窗口就可以只需要抓取一小段波形提供給功耗分析工具,最終得到準(zhǔn)確的功耗值。
圖3 HW-WTC 流程圖
待測(cè)設(shè)計(jì)是一個(gè)圖像處理芯片,通過MIPI 接口輸入輸出圖像數(shù)據(jù),內(nèi)部是一些處理核。
3.2.1 基于MIPI AVIP的功耗流程介紹
(1)編譯后端提供的標(biāo)準(zhǔn)單元的.lib 文件,生成對(duì)應(yīng)的powerdb(包含各個(gè)標(biāo)準(zhǔn)單元模塊功耗信息)。
(2)準(zhǔn)備可以在Emulator 上運(yùn)行的數(shù)據(jù)庫:
①在硬件側(cè)里實(shí)例化AVIP的BFM 模型,并通過force的方式與設(shè)計(jì)連接起來。
②編譯的時(shí)候把powerdb 和后端提供的網(wǎng)表文件編譯成可以在加速器上運(yùn)行的數(shù)據(jù)庫。
(3)編寫基于C++的MIPI AVIP的測(cè)試平臺(tái),模擬照相機(jī)傳輸圖片進(jìn)入DUT,并通過CPU 配置內(nèi)部圖片處理模塊來處理圖像數(shù)據(jù),以此來模擬真實(shí)場(chǎng)景下芯片的工作場(chǎng)景。
(4)運(yùn)行完測(cè)試用例后就可以得到.ppfdata的數(shù)據(jù)庫,可以通過xeDebug工具查看整個(gè)測(cè)試場(chǎng)景下的功耗趨勢(shì)圖,并得到感興趣的窗口。
(5)抓取感興趣那段波形提供給功耗分析工具算出具體的功耗值。
3.2.2 調(diào)試技巧
最好是選取與網(wǎng)表相同版本的RTL 代碼先進(jìn)行測(cè)試,因?yàn)榫W(wǎng)表綜合布線之后很多信號(hào)的極性會(huì)發(fā)生變化,所以需要重新連接AVIP的信號(hào)到DUT。在RTL 版本上測(cè)試通過之后可以確保RTL 和C 代碼是正確的,再上網(wǎng)表版本測(cè)試運(yùn)行迭代次數(shù)會(huì)少很多。
3.2.3 測(cè)試結(jié)果
通過這種方案跑省去了抓取全波形的問題,通過確認(rèn)感興趣窗口以及Emulator的加速,如果有已經(jīng)可以運(yùn)行通的測(cè)試用例,順利的話兩三天就可以得到一個(gè)功耗數(shù)據(jù),相比以前需要周計(jì)的傳統(tǒng)的方式效率更高,結(jié)果也更加準(zhǔn)確。
傳統(tǒng)的性能分析通過查看波形效率十分低下。一些大的場(chǎng)景在Emulator 上跑下來波形文件很占存儲(chǔ)空間,同時(shí)抓波形和轉(zhuǎn)波形的時(shí)間很長。仿真上運(yùn)行速度又太慢,一些大的場(chǎng)景可能要一兩周才能跑完,效率十分低下。如何能夠方便快捷地得到芯片的帶寬以及延遲等性能數(shù)據(jù)是個(gè)難題。
圖4 為各個(gè)主設(shè)備掛上AMBA AVIP 性能監(jiān)視器來抓取各個(gè)master的transaction,并使用Palladium 來運(yùn)行真實(shí)場(chǎng)景。測(cè)試場(chǎng)景運(yùn)行完直接就可以得到各個(gè)模塊的發(fā)包日志。使用SPA(System Performance Analysis)工具分析日志文件就可以得到包括帶寬、延遲、outstanding 等性能結(jié)果。
圖4 AVIP 性能監(jiān)控器框圖
待測(cè)設(shè)計(jì)是一個(gè)圖像處理芯片,通過MIPI 接口輸入輸出圖像數(shù)據(jù),內(nèi)部是一些處理核。并且大部分模塊的接口是AMBA 接口。
(1)實(shí)例化AMBA AVIP 到各個(gè)主設(shè)備口上并編譯得到Palladium 能運(yùn)行的數(shù)據(jù)庫。
(2)通過CPU 執(zhí)行C 代碼進(jìn)行各個(gè)模塊的配置,運(yùn)行期望場(chǎng)景的測(cè)試用例,并通過AMBA AVIP monitor 得到性能相關(guān)的日志。這些日志里面就包含了transaction的信息。在使用的時(shí)候可以應(yīng)用上multi GFIFO/SFIFO技術(shù),這樣可以更加高效地抓取性能日志。因?yàn)橐恍┐蟮膱?chǎng)景日志通常也很大,multi GFIFO/SFIFO 技術(shù)可以把各個(gè)主設(shè)備的日志分開單獨(dú)存放,這樣使用SPA 分析的時(shí)候可以單獨(dú)分析,或者并行分析多個(gè)主設(shè)備的日志,效率會(huì)高很多。
(3)通過SPA工具解析這些性能日志,就可以得到包括帶寬、延遲、outstanding 等性能的結(jié)果。
最終解決了性能分析需要抓很大的波形,轉(zhuǎn)波形的問題,大大節(jié)省了性能評(píng)估的時(shí)間。如果有現(xiàn)成的測(cè)試用例,順利的話基本上一天就可以得到帶寬、延遲、outstanding 等性能報(bào)告。相比之前抓波形轉(zhuǎn)波形都要好幾天加上還要人工去分析波形算性能結(jié)果,大大節(jié)省了人力和時(shí)間,對(duì)芯片架構(gòu)調(diào)整或者軟件代碼優(yōu)化提供了極大的保障。SPA 分析結(jié)果如圖5 所示。
圖5 SPA 分析結(jié)果圖
結(jié)合Palladium AVIP 來進(jìn)行SoC 芯片的驗(yàn)證,可以從多個(gè)維度加速芯片開發(fā)測(cè)試進(jìn)度,涉及功能、功耗、性能等各個(gè)方面。解決了傳統(tǒng)驗(yàn)證方案耗時(shí)耗力的問題,加快了整個(gè)芯片的驗(yàn)證速度,為芯片順利流片提供了極大的保障。