朱巖巖,方建勇,許壽全
(江蘇自動化研究所,江蘇連云港 222061)
物理原型驗證方法是一種即耗時又昂貴[1]的ASIC驗證方法。對于每一種芯片,物理原型驗證要求要有獨立的原型設計,并且在對這些芯片進行實時驗證時,要考慮所有可能的測試向量輸入,這是一項十分棘手的工作。
近年來, 隨著現場可編程門陣列(Field Programmable Gate Array,FPGA)技術的快速發展,FPGA以其高靈活性、高集成度、高速度、低功耗和低成本[2]的優勢,成為物理原型驗證方法的良好載體。基于FPGA的物理原型驗證方法在ASIC驗證領域得到了越來越廣泛的應用。這種方法一方面可使設計者可以較好把握硬件設計的物理特性[3],另一方面可以獲得相比較于傳統RTL仿真工具1000倍以上的仿真速度[4]。
目前, 國外許多半導體廠商已經使用FPGA完成物理原型驗證。如飛思卡爾半導體應用基于FPGA的IC原型驗證技術, 加速了芯片開發速度、降低了成本、提高了流片成功率[5]。而我國ASIC驗證起步較晚,與發達國家還存在較大差異,隨著芯片驗證的需求不斷增加,國內對FPGA物理原型驗證方法的研究也日益重視。VCD(Value Change Dump)波形文件是 Verilog HDL語言標準的一部分,它記錄了仿真過程中的輸入輸出引腳變化信息[6]。在ASIC驗證中,VCD波形文件被廣泛應用于功能驗證,如ATE(Automatic Test Equipment)測試設備[7]等。考慮到FPGA技術不斷進步的優勢,針對中小規模的ASIC設計,將VCD波形與FPGA原型驗證相結合,實現基于VCD波形的FPGA原型驗證平臺,能夠替代昂貴的測試設備,有效降低成本,且具有較好的靈活性。
基于此種背景,本文研究開發了一套基于FPGA的硬件和相應軟件組成的物理原型驗證平臺。驗證平臺的輸入使用了VCD仿真波形文件。在本驗證平臺中,驗證平臺首先對VCD波形進行預處理,將其下載到FPGA中,并進一步應用到實時環境中。而從被測對象(DUT)返回的響應數據經驗證平臺驗證后被傳回上位機,上位機軟件可顯示該驗證結果。驗證人員或設計人員可以分析驗證結果,找到設計的問題所在。本研究所開發的驗證平臺提供了一個易于使用,驗證成本低廉的驗證環境,彌補了模擬仿真與硬件驗證之間的不足。
VCD仿真波形文件包含的時序信息十分豐富。在將VCD波形文件作為驗證平臺的輸入時,要對VCD波形文件進行處理,提取其內部的有效信息。處理VCD波形文件的方法是先對VCD文件進行周期化切割,測試時序中的定時沿,最后進行向量編譯[8]。本研究對VCD波形的處理正是采用了這種方法,將VCD波形文件按照其特定格式以時間周期切割成比特流,測定其定時沿后,以報文形式編譯為測試向量。
VCD波形文件的處理只是對其內容信息的提取,使用VCD波形文件作為驗證平臺的輸入時需要另外注意一些問題。一般來說, 這些問題包括[9]:
1) 每次對數據進行處理時,數據大小是不同的,另外,所有信號的時鐘頻率也不盡相同,單獨操縱它們無疑會使硬件設計變得非常復雜;
2) 每個接口信號都需要存儲,這增加了存儲的需求;
3) 驗證平臺需要存儲每個時間的變化以及該時間點所對應的邏輯值;另一方面,由于時序信息比較豐富,比對這些值需要耗費較長的時間。
由于使用VCD波形文件會面對這些問題,硬件平臺的搭建過程要充分考慮VCD仿真波形文件的特點。本研究正基于此對驗證平臺進行了設計,提出了合理的硬件結構和具體可行的設計方案。
FPGA能夠提供功能驗證所需的速度,I/O[10]和可伸縮性[11]。本驗證平臺使用的FPGA芯片是XILINX Virtex-7系列芯片(XC7V585T)。該芯片提供了豐富的I/O口和可用于存儲測試向量和響應數據的28 Mbit的RAM。FPGA驗證平臺架構如圖1所示。其中包括了COMe模塊、FPGA模塊、DDR3模塊、PCIe總線和FMC接口等。
在工作流程上,COMe模塊對VCD波形進行處理生成測試向量,測試向量在FPGA轉化為測試激勵,測試激勵經FMC接口傳到DUT上。讀取響應過程則相反,FPGA通過FMC讀取DUT的響應數據,并將其與預期值進行比對,最后將驗證結果返回PC端進行顯示。

圖1 FPGA驗證平臺架構
FPGA驗證輔助軟件用于連接模擬器和硬件環境。該軟件的體系結構如圖2所示,該軟件獨立于任何計算機輔助設計(CAD)環境,并能運行于Windows操作系統中。它需要一個VCD波形文件作為輸入,該軟件讀取輸入并將其轉換為一組兼容的Test Pattern。
軟件首先對輸入進行處理生成Test Pattern,接著將Test Pattern輸出到驗證平臺。驗證的結果從驗證平臺傳回,再通過軟件處理存儲為標準VCD文件。

圖2 FPGA驗證輔助軟件架構
由于待測對象的接口信號屬于多個時鐘域,如果以時鐘域的形式將接口信號劃分為多個組,每個組分別對應不同的時鐘,那么硬件設計上不僅會變得更為簡單,還可以解決多時鐘接口信號的問題。
本研究基于FPGA驗證平臺將時鐘域劃分為相互獨立的4個組,每組的接口信號均包含input、output和inout信號。對于驗證平臺,同樣以時鐘域將Test Pattern復制劃分為4個組,每組Pattern對應于時鐘域接口信號的驅動。時鐘域的劃分方法如下:
1) 根據時鐘域將Pattern劃分為4個子Pattern,如Pattern-1, Pattern-2, Pattern-3, Pattern-4,每個Pattern對應一組驗證接口信號,Pattern之間相互獨立,每個Pattern具有完整的幀結構;
2) 主機依次load這幾個Pattern,等待所有Pattern完成加載后才可以開始驗證;
3) 根據時鐘域通過Pin-ctrl模塊將Pattern加載和存儲,將此過程劃分為對應不同時鐘域的幾個組,如Group1,Group2,Group3,Group4;
4) 每個Group均包含若干個PIN-DRIVE, PIN-CAPTURE, PIN-INOUT信號;
5) CLK模塊提供多個時鐘,分別對應于劃分的多個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上的片上資源有限,不能滿足所有數據的處理需求。為解決此問題,驗證平臺引入了存儲器來緩沖數據。
驗證平臺在FPGA上外掛兩個2 G的DDR3存儲器,分別用于緩沖來自CPU的測試向量和來自FPGA的響應數據。在驗證過程中,CPU產生的測試向量先寫入到一塊DDR3上,FPGA以讀方式讀取此塊DDR3的測試向量;FPGA產生的響應數據以寫方式寫入另一塊DDR3,CPU從這塊DDR3上讀取響應數據。其工作原理圖如圖3所示。

圖3 數據緩沖原理圖
存儲器的引入相當于在CPU與FPGA之間插入一個緩沖器,用來解決數據流量過大引起的存儲問題,減輕了FPGA的負擔。這種設計方法同時也改善了CPU與FPGA的數據傳輸速度不匹配的問題,使得FPGA可以實現更靈活的程序設計。
本驗證平臺采用了CPU+FPGA的架構,其中CPU負責生成測試向量,FPGA擔任協處理器,主要用于測試向量注入的解算和驗證結果對比的解算。
在注入解算上,使用FPGA片上Block RAM搭建雙端口DPRAM組(圖4中a1-an)來存儲測試向量文件。DPRAM一端接受來自Pattern-load-ctrl塊寫入的數據;另一端讀出數據給Pin-ctrl。其中,Pattern-load-ctrl用于承載測試向量并進行DPRAM的分配,Pin-ctrl能夠控制PIN的驅動和獲取,并選擇對應的接口。圖4中的b1-bn代表這些接口。測試向量注入解算的流程如圖4所示。

圖4 測試向量注入解算過程
響應數據的接收與測試向量注入解算過程相反,這里不再贅述。
在對比解算上,同樣使用FPGA片上RAM。響應數據被暫存在一組RAM上(圖5中的m1-mn),期望值數據被暫存在另一組RAM上(圖5中的n1-nn),根據響應數據中的每條行頭標記對應的描述行序號,將兩組RAM進行匹配,分別同時進行對比。其解算過程如圖5所示。

圖5 驗證結果對比解算過程
注入解算和對比解算利用了FPGA并行的特點。CPU只負責測試向量的生成與響應數據的讀取,而FPGA將數據進行分組,以其并行計算的優勢,在較短的時間內同時處理大量接口信號的信息,進而縮短了驗證時間。
FPGA驗證平臺采用子板加母板架構,用戶可根據子板功能對子板進行預先設計,免除了對母板的頻繁修改,FPGA驗證平臺實物如圖6所示。

圖6 FPGA驗證平臺
為測試基于VCD波形的FPGA驗證平臺能否正常工作,本文對一個已驗證好的芯片子板進行驗證。其結構框圖如下圖7所示。

圖7 實驗驗證結構框圖
其中,DUT為包含Counter模塊芯片的被測子板,FPGA驗證平臺中設計了用于與子板通信的三類接口:DRIVE-PINS-CLK、DRIVE-PINS和CAPTURE-PINS。
啟動驗證過程中,VCD波形首先被轉化為測試向量,測試向量文件如圖8所示。
在本次實驗驗證中,測試向量格式被定義如下:
1) 測試向量.txt文件由若干行組成,每行96 bit數字,取值1,0或z;行數與記錄的時鐘周期數有關;
2) [95]:reserve,保留位;
3) [94:80]:ptn-line-num,測試向量文件行號,從零開始遞增;
4) [79]:檢查使能;
5) [78:64]:ptn-hold-num,表示該行測試向量延續多少個時鐘周期;

圖8 測試向量文件
6) [63:23]:drive-pins的記錄值,FPGA驗證平臺根據該值驅動drv-pins,1為高電平,0為低電平,z為高阻;
7) [31:0]:cap-pins,FPGA驗證平臺將cap-pins作為待測FPGA設計輸出信號的期望值,1為高電平,0位低電平,z表示不關心。
在測試向量文件中,為了驗證FPGA驗證平臺能否正常運行,通過修改mem[4]、mem[6],注入錯誤行,在Vivado上觀察前后波形變化:
測試向量未注入錯誤行時,圖9中cap-error-valid信號一直為低電平,無錯誤發生。測試向量注入錯誤行后時,圖10中cap-error-valid信號有兩處高電平,標記出兩處錯誤,第一個錯誤期望值為0x00,真實值為0x02;第二個錯誤期望值為0x03,真實值為0x01。波形圖表明,FPGA驗證平臺能檢測出VCD轉化的測試向量出現的錯誤,驗證結果能夠正確顯示出來。
通過本次驗證,檢驗了基于VCD波形的FPGA驗證平臺的整個工作流程。實驗結果證明,基于VCD波形的FPGA驗證平臺各功能模塊能夠正常運行,FPGA驗證平臺能夠正常工作。

圖9 注入錯誤行前波形

圖10 注入錯誤行后波形
本文在VCD波形文件處理的基礎上,通過分析VCD波形文件特點,合理設計了FPGA硬件平臺,包括時鐘域的劃分,數據緩沖的實現以及異構解算處理方法等。這些方法對ASIC驗證有一定借鑒意義。如果進一步擴展,未來驗證平臺將用于驗證小型系統。可以考慮在待驗板上集成多個FPGA或ASIC形成DUT,這將更適用于實際的工程應用。