朱巖巖,方建勇,許壽全
(江蘇自動化研究所,江蘇連云港 222061)
物理原型驗證方法是一種即耗時又昂貴[1]的ASIC驗證方法。對于每一種芯片,物理原型驗證要求要有獨立的原型設(shè)計,并且在對這些芯片進行實時驗證時,要考慮所有可能的測試向量輸入,這是一項十分棘手的工作。
近年來, 隨著現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)技術(shù)的快速發(fā)展,FPGA以其高靈活性、高集成度、高速度、低功耗和低成本[2]的優(yōu)勢,成為物理原型驗證方法的良好載體?;贔PGA的物理原型驗證方法在ASIC驗證領(lǐng)域得到了越來越廣泛的應(yīng)用。這種方法一方面可使設(shè)計者可以較好把握硬件設(shè)計的物理特性[3],另一方面可以獲得相比較于傳統(tǒng)RTL仿真工具1000倍以上的仿真速度[4]。
目前, 國外許多半導(dǎo)體廠商已經(jīng)使用FPGA完成物理原型驗證。如飛思卡爾半導(dǎo)體應(yīng)用基于FPGA的IC原型驗證技術(shù), 加速了芯片開發(fā)速度、降低了成本、提高了流片成功率[5]。而我國ASIC驗證起步較晚,與發(fā)達(dá)國家還存在較大差異,隨著芯片驗證的需求不斷增加,國內(nèi)對FPGA物理原型驗證方法的研究也日益重視。VCD(Value Change Dump)波形文件是 Verilog HDL語言標(biāo)準(zhǔn)的一部分,它記錄了仿真過程中的輸入輸出引腳變化信息[6]。在ASIC驗證中,VCD波形文件被廣泛應(yīng)用于功能驗證,如ATE(Automatic Test Equipment)測試設(shè)備[7]等??紤]到FPGA技術(shù)不斷進步的優(yōu)勢,針對中小規(guī)模的ASIC設(shè)計,將VCD波形與FPGA原型驗證相結(jié)合,實現(xiàn)基于VCD波形的FPGA原型驗證平臺,能夠替代昂貴的測試設(shè)備,有效降低成本,且具有較好的靈活性。
基于此種背景,本文研究開發(fā)了一套基于FPGA的硬件和相應(yīng)軟件組成的物理原型驗證平臺。驗證平臺的輸入使用了VCD仿真波形文件。在本驗證平臺中,驗證平臺首先對VCD波形進行預(yù)處理,將其下載到FPGA中,并進一步應(yīng)用到實時環(huán)境中。而從被測對象(DUT)返回的響應(yīng)數(shù)據(jù)經(jīng)驗證平臺驗證后被傳回上位機,上位機軟件可顯示該驗證結(jié)果。驗證人員或設(shè)計人員可以分析驗證結(jié)果,找到設(shè)計的問題所在。本研究所開發(fā)的驗證平臺提供了一個易于使用,驗證成本低廉的驗證環(huán)境,彌補了模擬仿真與硬件驗證之間的不足。
VCD仿真波形文件包含的時序信息十分豐富。在將VCD波形文件作為驗證平臺的輸入時,要對VCD波形文件進行處理,提取其內(nèi)部的有效信息。處理VCD波形文件的方法是先對VCD文件進行周期化切割,測試時序中的定時沿,最后進行向量編譯[8]。本研究對VCD波形的處理正是采用了這種方法,將VCD波形文件按照其特定格式以時間周期切割成比特流,測定其定時沿后,以報文形式編譯為測試向量。
VCD波形文件的處理只是對其內(nèi)容信息的提取,使用VCD波形文件作為驗證平臺的輸入時需要另外注意一些問題。一般來說, 這些問題包括[9]:
1) 每次對數(shù)據(jù)進行處理時,數(shù)據(jù)大小是不同的,另外,所有信號的時鐘頻率也不盡相同,單獨操縱它們無疑會使硬件設(shè)計變得非常復(fù)雜;
2) 每個接口信號都需要存儲,這增加了存儲的需求;
3) 驗證平臺需要存儲每個時間的變化以及該時間點所對應(yīng)的邏輯值;另一方面,由于時序信息比較豐富,比對這些值需要耗費較長的時間。
由于使用VCD波形文件會面對這些問題,硬件平臺的搭建過程要充分考慮VCD仿真波形文件的特點。本研究正基于此對驗證平臺進行了設(shè)計,提出了合理的硬件結(jié)構(gòu)和具體可行的設(shè)計方案。
FPGA能夠提供功能驗證所需的速度,I/O[10]和可伸縮性[11]。本驗證平臺使用的FPGA芯片是XILINX Virtex-7系列芯片(XC7V585T)。該芯片提供了豐富的I/O口和可用于存儲測試向量和響應(yīng)數(shù)據(jù)的28 Mbit的RAM。FPGA驗證平臺架構(gòu)如圖1所示。其中包括了COMe模塊、FPGA模塊、DDR3模塊、PCIe總線和FMC接口等。
在工作流程上,COMe模塊對VCD波形進行處理生成測試向量,測試向量在FPGA轉(zhuǎn)化為測試激勵,測試激勵經(jīng)FMC接口傳到DUT上。讀取響應(yīng)過程則相反,FPGA通過FMC讀取DUT的響應(yīng)數(shù)據(jù),并將其與預(yù)期值進行比對,最后將驗證結(jié)果返回PC端進行顯示。
圖1 FPGA驗證平臺架構(gòu)
FPGA驗證輔助軟件用于連接模擬器和硬件環(huán)境。該軟件的體系結(jié)構(gòu)如圖2所示,該軟件獨立于任何計算機輔助設(shè)計(CAD)環(huán)境,并能運行于Windows操作系統(tǒng)中。它需要一個VCD波形文件作為輸入,該軟件讀取輸入并將其轉(zhuǎn)換為一組兼容的Test Pattern。
軟件首先對輸入進行處理生成Test Pattern,接著將Test Pattern輸出到驗證平臺。驗證的結(jié)果從驗證平臺傳回,再通過軟件處理存儲為標(biāo)準(zhǔn)VCD文件。
圖2 FPGA驗證輔助軟件架構(gòu)
由于待測對象的接口信號屬于多個時鐘域,如果以時鐘域的形式將接口信號劃分為多個組,每個組分別對應(yīng)不同的時鐘,那么硬件設(shè)計上不僅會變得更為簡單,還可以解決多時鐘接口信號的問題。
本研究基于FPGA驗證平臺將時鐘域劃分為相互獨立的4個組,每組的接口信號均包含input、output和inout信號。對于驗證平臺,同樣以時鐘域?qū)est Pattern復(fù)制劃分為4個組,每組Pattern對應(yīng)于時鐘域接口信號的驅(qū)動。時鐘域的劃分方法如下:
1) 根據(jù)時鐘域?qū)attern劃分為4個子Pattern,如Pattern-1, Pattern-2, Pattern-3, Pattern-4,每個Pattern對應(yīng)一組驗證接口信號,Pattern之間相互獨立,每個Pattern具有完整的幀結(jié)構(gòu);
2) 主機依次load這幾個Pattern,等待所有Pattern完成加載后才可以開始驗證;
3) 根據(jù)時鐘域通過Pin-ctrl模塊將Pattern加載和存儲,將此過程劃分為對應(yīng)不同時鐘域的幾個組,如Group1,Group2,Group3,Group4;
4) 每個Group均包含若干個PIN-DRIVE, PIN-CAPTURE, PIN-INOUT信號;
5) CLK模塊提供多個時鐘,分別對應(yīng)于劃分的多個Pattern,如clk1,clk2,clk3,clk4;
6) 配置寄存器,定義每個group選用哪個時鐘。如果都處于不同時鐘域,可以是Group1選clk1,Group2選clk2,Group3選clk3,Group4選clk4;如果某兩個或多個Group處于同一時鐘域,可以是Group1/2/3都選clk1,Group4選clk4。
VCD文件中含有豐富的接口信號信息,在驗證過程中,FPGA需要對這些接口信號進行不斷處理,但 FPGA上的片上資源有限,不能滿足所有數(shù)據(jù)的處理需求。為解決此問題,驗證平臺引入了存儲器來緩沖數(shù)據(jù)。
驗證平臺在FPGA上外掛兩個2 G的DDR3存儲器,分別用于緩沖來自CPU的測試向量和來自FPGA的響應(yīng)數(shù)據(jù)。在驗證過程中,CPU產(chǎn)生的測試向量先寫入到一塊DDR3上,FPGA以讀方式讀取此塊DDR3的測試向量;FPGA產(chǎn)生的響應(yīng)數(shù)據(jù)以寫方式寫入另一塊DDR3,CPU從這塊DDR3上讀取響應(yīng)數(shù)據(jù)。其工作原理圖如圖3所示。
圖3 數(shù)據(jù)緩沖原理圖
存儲器的引入相當(dāng)于在CPU與FPGA之間插入一個緩沖器,用來解決數(shù)據(jù)流量過大引起的存儲問題,減輕了FPGA的負(fù)擔(dān)。這種設(shè)計方法同時也改善了CPU與FPGA的數(shù)據(jù)傳輸速度不匹配的問題,使得FPGA可以實現(xiàn)更靈活的程序設(shè)計。
本驗證平臺采用了CPU+FPGA的架構(gòu),其中CPU負(fù)責(zé)生成測試向量,FPGA擔(dān)任協(xié)處理器,主要用于測試向量注入的解算和驗證結(jié)果對比的解算。
在注入解算上,使用FPGA片上Block RAM搭建雙端口DPRAM組(圖4中a1-an)來存儲測試向量文件。DPRAM一端接受來自Pattern-load-ctrl塊寫入的數(shù)據(jù);另一端讀出數(shù)據(jù)給Pin-ctrl。其中,Pattern-load-ctrl用于承載測試向量并進行DPRAM的分配,Pin-ctrl能夠控制PIN的驅(qū)動和獲取,并選擇對應(yīng)的接口。圖4中的b1-bn代表這些接口。測試向量注入解算的流程如圖4所示。
圖4 測試向量注入解算過程
響應(yīng)數(shù)據(jù)的接收與測試向量注入解算過程相反,這里不再贅述。
在對比解算上,同樣使用FPGA片上RAM。響應(yīng)數(shù)據(jù)被暫存在一組RAM上(圖5中的m1-mn),期望值數(shù)據(jù)被暫存在另一組RAM上(圖5中的n1-nn),根據(jù)響應(yīng)數(shù)據(jù)中的每條行頭標(biāo)記對應(yīng)的描述行序號,將兩組RAM進行匹配,分別同時進行對比。其解算過程如圖5所示。
圖5 驗證結(jié)果對比解算過程
注入解算和對比解算利用了FPGA并行的特點。CPU只負(fù)責(zé)測試向量的生成與響應(yīng)數(shù)據(jù)的讀取,而FPGA將數(shù)據(jù)進行分組,以其并行計算的優(yōu)勢,在較短的時間內(nèi)同時處理大量接口信號的信息,進而縮短了驗證時間。
FPGA驗證平臺采用子板加母板架構(gòu),用戶可根據(jù)子板功能對子板進行預(yù)先設(shè)計,免除了對母板的頻繁修改,FPGA驗證平臺實物如圖6所示。
圖6 FPGA驗證平臺
為測試基于VCD波形的FPGA驗證平臺能否正常工作,本文對一個已驗證好的芯片子板進行驗證。其結(jié)構(gòu)框圖如下圖7所示。
圖7 實驗驗證結(jié)構(gòu)框圖
其中,DUT為包含Counter模塊芯片的被測子板,FPGA驗證平臺中設(shè)計了用于與子板通信的三類接口:DRIVE-PINS-CLK、DRIVE-PINS和CAPTURE-PINS。
啟動驗證過程中,VCD波形首先被轉(zhuǎn)化為測試向量,測試向量文件如圖8所示。
在本次實驗驗證中,測試向量格式被定義如下:
1) 測試向量.txt文件由若干行組成,每行96 bit數(shù)字,取值1,0或z;行數(shù)與記錄的時鐘周期數(shù)有關(guān);
2) [95]:reserve,保留位;
3) [94:80]:ptn-line-num,測試向量文件行號,從零開始遞增;
4) [79]:檢查使能;
5) [78:64]:ptn-hold-num,表示該行測試向量延續(xù)多少個時鐘周期;
圖8 測試向量文件
6) [63:23]:drive-pins的記錄值,FPGA驗證平臺根據(jù)該值驅(qū)動drv-pins,1為高電平,0為低電平,z為高阻;
7) [31:0]:cap-pins,FPGA驗證平臺將cap-pins作為待測FPGA設(shè)計輸出信號的期望值,1為高電平,0位低電平,z表示不關(guān)心。
在測試向量文件中,為了驗證FPGA驗證平臺能否正常運行,通過修改mem[4]、mem[6],注入錯誤行,在Vivado上觀察前后波形變化:
測試向量未注入錯誤行時,圖9中cap-error-valid信號一直為低電平,無錯誤發(fā)生。測試向量注入錯誤行后時,圖10中cap-error-valid信號有兩處高電平,標(biāo)記出兩處錯誤,第一個錯誤期望值為0x00,真實值為0x02;第二個錯誤期望值為0x03,真實值為0x01。波形圖表明,FPGA驗證平臺能檢測出VCD轉(zhuǎn)化的測試向量出現(xiàn)的錯誤,驗證結(jié)果能夠正確顯示出來。
通過本次驗證,檢驗了基于VCD波形的FPGA驗證平臺的整個工作流程。實驗結(jié)果證明,基于VCD波形的FPGA驗證平臺各功能模塊能夠正常運行,FPGA驗證平臺能夠正常工作。
圖9 注入錯誤行前波形
圖10 注入錯誤行后波形
本文在VCD波形文件處理的基礎(chǔ)上,通過分析VCD波形文件特點,合理設(shè)計了FPGA硬件平臺,包括時鐘域的劃分,數(shù)據(jù)緩沖的實現(xiàn)以及異構(gòu)解算處理方法等。這些方法對ASIC驗證有一定借鑒意義。如果進一步擴展,未來驗證平臺將用于驗證小型系統(tǒng)。可以考慮在待驗板上集成多個FPGA或ASIC形成DUT,這將更適用于實際的工程應(yīng)用。