白龍飛,樊曉椏,張 萌,孫立超
西北工業(yè)大學(xué) 計算機學(xué)院,西安 710129
龍騰Stream流處理器驗證
白龍飛,樊曉椏,張 萌,孫立超
西北工業(yè)大學(xué) 計算機學(xué)院,西安 710129
VLSI技術(shù)的巨大進步使得在單個芯片上集成超過數(shù)百萬個晶體管以搭建大規(guī)模的SoC(System on Chip,片上系統(tǒng))成為可能,驗證工作已成為芯片設(shè)計流程中最為關(guān)鍵的瓶頸,大約有70%~80%的設(shè)計時間都花費在了功能驗證中[1]。巨大的驗證工作量使得現(xiàn)在很多的新工具和方法學(xué)都把驗證作為研究目標,并通過并行化、更高層次的抽象和自動化來縮短驗證需要的時間[2]。通過驗證語言、硬件描述語言或C等高級語言搭建驗證平臺是功能驗證中最為重要的驗證手段。驗證平臺需要提供各種自動化機制以提高測試案例的功能覆蓋率和減少創(chuàng)建測試案例的時間,從而保證驗證過程更快地達到收斂。System Verilog[3]是業(yè)界新興的一種硬件描述和驗證語言(HDVL),支持受約束隨機激勵的產(chǎn)生和覆蓋率統(tǒng)計分析,其面向?qū)ο蟮木幊探Y(jié)構(gòu)有助于采用事務(wù)級的驗證和提供驗證的可重用性[4]。System Verilog面向?qū)ο蟮木幊棠P瓦@一特性能夠極大地增強驗證平臺組件的重用能力,利用驗證組件組合成的強大驗證環(huán)境能夠滿足被驗證設(shè)計(DUV)的各種必要的測試案例。
SoC設(shè)計通常集成了CPU、存儲器及其他功能模塊,并在硬件上運行相應(yīng)的嵌入式軟件,因此SoC設(shè)計的驗證工作除了驗證硬件設(shè)計的實現(xiàn)功能,還需要驗證軟件與硬件協(xié)同工作的兼容性和性能[5-6]。傳統(tǒng)的基于RΤL(Register Τransfer Level,寄存器傳輸級)的軟件驗證平臺由于仿真速度的限制[7],存在著時間開銷大、仿真效率低的問題。此外,由于RΤL級仿真忽略了大量的電路實際延遲,其性能分析的評估數(shù)據(jù)過于樂觀。而基于FPGA原型的軟硬件協(xié)同驗證可以快速完成驗證并保持周期精確,同時降低了開發(fā)風險,避免了由于仿真模型的缺陷而引起大量的芯片故障,極大地提高了SoC設(shè)計的驗證效率[7-8]。
西北工業(yè)大學(xué)航空微電子中心對面向流計算的主動適應(yīng)體系結(jié)構(gòu)進行深入研究,成功設(shè)計出了龍騰Stream流處理器。本文通過開發(fā)基于System Verilog的覆蓋率驅(qū)動的自動化驗證平臺,對流處理器的指令集進行了全面的功能驗證,并搭建FPGA原型系統(tǒng)對流處理器的實現(xiàn)功能和性能進行了深入評測。根據(jù)在原型系統(tǒng)上的性能評測結(jié)果,分析了影響流處理器性能的關(guān)鍵因素,并提出了優(yōu)化流處理器加速性能的方法。
圖1 龍騰Stream流處理器計算平臺
龍騰Stream流處理器[9]是針對具有大量數(shù)據(jù)并行性、計算密集型的應(yīng)用而設(shè)計的面向于短向量的適應(yīng)性流體系結(jié)構(gòu),以多套單指令多數(shù)據(jù)模式的短向量簇實現(xiàn)程序的并行加速。
流處理器以層次化的片上流存儲體系捕獲數(shù)據(jù)局部性的,其存儲結(jié)構(gòu)分為三級:片外存儲器、片上局部存儲器和寄存器文件。主控核組織數(shù)據(jù)流并通過總線傳到片上局部存儲器中,向量指令集中的Load/Store指令將片上局部存儲器中的數(shù)據(jù)搬移到寄存器組中,計算部件直接從寄存器組中取數(shù)據(jù)。
流處理器計算平臺包含短向量計算簇、標量單元以及局部存儲模塊,如圖1所示。
2.1 短向量計算簇
短向量計算簇(Short Vector Cluster,SVC)是實現(xiàn)計算平臺的主要計算部件,主要包括向量Load/Store單元(VLSU),向量簡單定點計算單元(VSIU),向量復(fù)雜定點計算單元(VCIU),向量置換單元(VPU),向量浮點計算單元(VFPU),向量寄存器文件(VRF)。計算平臺集成4套短向量計算簇,每套短向量計算簇擁有各自獨立對應(yīng)的向量寄存器文件,以SIMD方式執(zhí)行操作。
2.2 標量單元
標量單元(Scalar Unit)包含32個標量寄存器,1個條件寄存器和ALU單元。其主要功能是少量的標量運算以及獨立的標量訪存,輔助短向量計算簇實現(xiàn)循環(huán)操作,同時為計算簇的訪存單元計算有效地址提供支持。
2.3 局部存儲模塊
局部存儲模塊(Local Memory)為計算平臺提供指令和數(shù)據(jù)的存儲空間,共有四種不同的存儲模塊,分別為指令存儲模塊(Instruction Memory)、標量數(shù)據(jù)存儲模塊(Scalar Data Memory)、配置存儲模塊(Configuration Memory)和向量數(shù)據(jù)存儲模塊(Stream Memory)。指令存儲模塊存儲主控核傳遞過來的指令;標量數(shù)據(jù)存儲模塊存儲標量數(shù)據(jù)并供標量單元使用;配置存儲模塊存儲用戶寫入的控制數(shù)據(jù),主要功能是寫入程序的起始地址和結(jié)束地址,控制計算單元的執(zhí)行與結(jié)束;向量數(shù)據(jù)存儲模塊主要存儲提供給SVC計算部件的向量數(shù)據(jù)。
龍騰Stream流處理器的指令集采用RISC設(shè)計原則,指令長度為32位,指令格式規(guī)整,實現(xiàn)了152條向量指令和10條標量指令。向量指令完成簡單和復(fù)雜的定點運算、浮點乘加和其他一些向量數(shù)據(jù)處理功能。標量指令主要用于循環(huán)控制、標量訪存以及向量LSU指令中的標量操作。流處理器的指令格式如圖2和圖3所示。
圖2 向量指令格式
圖3 標量指令格式
圖4 流處理器驗證平臺結(jié)構(gòu)
本驗證采用基于System Verilog的高級驗證方法學(xué)[10]搭建覆蓋率驅(qū)動的自動化驗證平臺,完成流處理器指令集的功能驗證。流處理器驗證平臺的結(jié)構(gòu)設(shè)計如圖4所示。驗證平臺為分層次結(jié)構(gòu),每個層次給其上層或測試案例提供服務(wù),并通過抽象隱藏低層次細節(jié)[10-12]。
驗證平臺主要包括指令序列生成器、驅(qū)動器、監(jiān)測器、參考模型、自檢器以及功能覆蓋率分析等組件。發(fā)生器使用藍圖模式[11]產(chǎn)生一條受約束的隨機指令,將其發(fā)送給參考模型得到期望響應(yīng)并回調(diào)給自檢器,同時通過Mailbox發(fā)送到驅(qū)動器。驅(qū)動器將指令激勵發(fā)送給DUV,監(jiān)測器檢測到流處理器運行結(jié)束后將接收到的實際響應(yīng)回調(diào)給自檢器,并通知發(fā)生器生成下一條指令激勵。自檢器對期望響應(yīng)和實際響應(yīng)進行比較后輸出測試報告。
3.1 發(fā)生器
該驗證平臺要完成流處理器實現(xiàn)的152條向量指令和10條標量指令的驗證??紤]到指令集中指令的操作碼并不完備,且指令格式也不一致,完全隨機的生成方式需要排除掉大量非法指令,受約束的隨機生成方式則要求編寫大量的約束條件。因此考慮將操作碼和操作數(shù)分開隨機生成,再根據(jù)指令類型封裝成完整的指令激勵。本文將待測指令的操作碼存入指令數(shù)組,通過約束邊界隨機生成數(shù)組索引得到指令操作碼。指令中的操作數(shù)及對應(yīng)寄存器內(nèi)容的邊界較為規(guī)整,因此采用受約束的隨機方式生成。
所有約束使用帶有范圍變量的inside運算符和權(quán)重變量的dist操作符來參數(shù)化約束條件,不需要手動修改約束驗證平臺便可改變指令發(fā)生器的激勵產(chǎn)生行為。指令類中inside和dist約束的操作碼索引的生成按若干段均勻分布,操作數(shù)對應(yīng)寄存器內(nèi)容的生成分布按待驗證的指令功能點劃分,比如加減法指令溢出、浮點指令非法操作等異常情況。
3.2 驅(qū)動器
流處理器的指令集按操作數(shù)數(shù)目可分為四類,如表1所示。驅(qū)動器根據(jù)指令類別分情況配置流處理器的四個存儲模塊,實現(xiàn)指令激勵的驅(qū)動。
表1 流處理器指令分類表
向量指令驅(qū)動的處理步驟為:(1)通過對標量數(shù)據(jù)存儲模塊進行寫操作,設(shè)定待測指令四個操作數(shù)的存放地址;(2)將源操作數(shù)寫入向量數(shù)據(jù)存儲模塊;(3)組織指令,在待測指令前安排Load指令將源操作數(shù)裝入向量寄存器,其后安排Store指令將向量寄存器中的執(zhí)行結(jié)果存儲到向量數(shù)據(jù)模塊;(4)將組織好的指令序列寫入指令存儲模塊;(5)寫配置存儲模塊設(shè)定流處理器執(zhí)行的指令序列的起始與結(jié)束地址;(6)寫配置存儲模塊啟動流處理器進入工作狀態(tài)。
驅(qū)動Load/Store指令時需額外考慮目的操作數(shù)/源操作數(shù)的存放地址,以避免和源操作數(shù)/目的操作數(shù)的地址發(fā)生沖突。
3.3 監(jiān)測器
由于不同類型指令的執(zhí)行結(jié)果存放位置不同,因此監(jiān)測器需要根據(jù)指令類型設(shè)定讀取地址。
監(jiān)測器首先從與發(fā)生器相連的Mailbox中讀取指令激勵,根據(jù)指令索引判斷指令類型并設(shè)定讀取指令執(zhí)行結(jié)果的地址。通過監(jiān)視配置存儲模塊的處理器狀態(tài)寄存器,在流處理器執(zhí)行結(jié)束后讀取指令執(zhí)行結(jié)果并回調(diào)給自檢器,同時通知發(fā)生器該指令執(zhí)行完畢。
3.4 自檢查結(jié)構(gòu)
本驗證平臺的自檢查結(jié)構(gòu)采用基于參考模型的黑盒驗證手段。如圖5所示,激勵同時施加給DUV和參考模型,參考模型動態(tài)預(yù)測期望響應(yīng),比較函數(shù)將期望響應(yīng)與實際響應(yīng)進行比較。
圖5 驗證平臺的自檢查結(jié)構(gòu)
本驗證平臺的參考模型用C語言實現(xiàn),通過直接編程接口(DPI)[3]將其集成到System Verilog驗證環(huán)境中。參考模型根據(jù)指令激勵的索引調(diào)用相應(yīng)的執(zhí)行函數(shù)得到期望響應(yīng)。參考模型的期望響應(yīng)輸出與DUV的實際響應(yīng)輸出之間的延遲不一,需要自檢器對其周期匹配后再進行比較。本文先將參考模型輸出的期望響應(yīng)保存,在監(jiān)視器得到實際響應(yīng)后調(diào)用比較函數(shù)進行比較,并輸出測試報告。
3.5 功能覆蓋率
由于本驗證平臺是對流處理器的指令集進行功能驗證,因此功能覆蓋率的分析主要關(guān)注指令類型及其功能點的覆蓋,即指令集中的所有指令及其異常情況是否全部生成并驗證。
覆蓋組使用cross結(jié)構(gòu)記錄操作碼索引和操作數(shù)對應(yīng)寄存器內(nèi)容覆蓋點的組合值。驗證環(huán)境的總體覆蓋率計算由所有簡單覆蓋點和交叉覆蓋點的命中情況決定,而本驗證平臺的覆蓋率目標僅由交叉覆蓋率反映,因此將各個覆蓋點的覆蓋率權(quán)重置為零,以防止總體覆蓋率被錯誤地提高。操作碼索引覆蓋點的每個值對應(yīng)一個倉,寄存器內(nèi)容覆蓋點則按待驗證指令的功能點創(chuàng)建倉,并使用ignore_bins結(jié)構(gòu)清除掉不需要關(guān)注的操作碼索引和寄存器內(nèi)容組合對應(yīng)的交叉?zhèn)}。
覆蓋率分析器通過對參考模型輸出和監(jiān)測器接收到的響應(yīng)數(shù)據(jù)進行采樣,實時統(tǒng)計覆蓋組的功能覆蓋率及各功能點的命中情況,并根據(jù)分析結(jié)果動態(tài)調(diào)整指令生成器中約束條件的范圍和權(quán)重。通過從功能覆蓋率到生成器的反饋使驗證過程自動集中在覆蓋率空間中未被覆蓋的區(qū)域,最終達到指令類型及其功能點全覆蓋的目標。
通過分析覆蓋率報告修改隨機約束或人工編寫定向測試激勵可以提高驗證的覆蓋率,但需要測試人員的實時干預(yù)。改變隨機種子并添加到回歸測試包的方法在不同版本仿真器和約束解釋器中重用驗證平臺時會出現(xiàn)問題,使用相同的種子可能生成不同的激勵,覆蓋率漏洞會因為激勵的不同而不同。本文實現(xiàn)的覆蓋率自動反饋機制不僅減少了人工的干預(yù)和工作量,而且使得驗證平臺在移植到不同仿真軟件上時具有良好的通用性。
實驗分別使用VCS和Questasim仿真軟件運行驗證平臺,均獲得了100%的功能覆蓋率,表明驗證平臺具有良好的可移植性。驗證平臺共檢測出23個bug(浮點指令:14個,置換指令:8個,簡單定點指令:1個)。同原有的功能仿真驗證平臺相比,本驗證平臺大大提高了驗證效率和覆蓋率,如表2所示。
表2 覆蓋率驅(qū)動的驗證平臺同原有功能驗證平臺比較
龍騰Stream流處理器的FPGA原型驗證系統(tǒng)[13]的結(jié)構(gòu)如圖6所示。流處理器通過Avalon Slave總線連接到基于Nios II處理器的硬件系統(tǒng)中,其運行受到主處理器的控制。標量主處理器Nios II承擔流處理過程中的控制和數(shù)據(jù)的組織傳遞,包括啟動計算平臺,控制傳入到計算平臺的輸入數(shù)據(jù),對計算平臺的運行結(jié)束信號進行檢測,執(zhí)行流級程序。流處理器原型作為協(xié)處理器實現(xiàn)流應(yīng)用的運算加速。
圖6 流處理器FPGA驗證平臺
FPGA原型驗證系統(tǒng)通過運行測試程序集完成流處理器實現(xiàn)功能及性能的評測工作。測試程序集選用典型的流應(yīng)用實例,包含了傳統(tǒng)的圖像處理應(yīng)用、常用的數(shù)字信號處理應(yīng)用以及通用計算與科學(xué)計算。根據(jù)流處理器原型系統(tǒng)設(shè)計測試程序的軟件架構(gòu),對應(yīng)用實現(xiàn)并行化流編程。在測試程序中加入串行的參考程序,以驗證FPGA原型系統(tǒng)的正確性。原型系統(tǒng)的性能評測環(huán)境如表3所示。
表3 性能評測環(huán)境
性能評測以通用計算架構(gòu)作為對比,分別對流應(yīng)用程序進行測試,精確統(tǒng)計程序執(zhí)行的周期數(shù)。通過比對運行結(jié)果,并行程序和參考的串行程序完全一致,從而驗證了流處理器實現(xiàn)功能和FPGA原型系統(tǒng)的正確性和可靠性。圖7列出了流處理器原型系統(tǒng)相對于MPC8270的加速比,大部分流應(yīng)用均在流處理器原型系統(tǒng)上取得了可觀的加速效果,平均加速比可達15.9。
圖7 流處理器原型系統(tǒng)相對于MPC8270的加速比
造成各流應(yīng)用加速效果差異的主要原因是核級程序的并行處理寬度不同,向量點積、FIR、Laplace變換、均勻量化、DCΤ和FFΤ的并行寬度均為16,矩陣乘法的并行寬度為32,而中值濾波的并行寬度為64,所以中值濾波和矩陣乘法均取得了不錯的加速效果。
流應(yīng)用的核級執(zhí)行時間所占比例也是影響加速效果的一個重要因素。測試程序的核級執(zhí)行時間所占比例如圖8所示。核級執(zhí)行時間比例較大的應(yīng)用容易獲得較好的加速效果,比如DCΤ、矩陣乘法和中值濾波。
圖8 測試程序的核級程序執(zhí)行時間所占比例
實驗結(jié)果發(fā)現(xiàn),F(xiàn)FΤ算法的加速性能并不理想。該算法每一級的蝶形運算在核級程序中通過短向量簇并行加速完成,但由于流體系只適合處理規(guī)則的流數(shù)據(jù),每一級運算的數(shù)據(jù)置換操作則需要標量主處理器來承擔。盡管核級程序具有極大的并行數(shù)據(jù)寬度,但流存儲器對總線的帶寬僅有32位,這使得大量的程序執(zhí)行時間耗費在了數(shù)據(jù)來回遷移的過程中,大幅降低了核級程序執(zhí)行時間所占的比例,從而制約了加速性能的發(fā)揮。
主協(xié)處理器異構(gòu)核間相差巨大的數(shù)據(jù)帶寬已成為制約流處理器系統(tǒng)性能的瓶頸,開發(fā)具有更高帶寬的片上數(shù)據(jù)總線或數(shù)據(jù)傳輸方式是提升流處理器計算性能的關(guān)鍵。因此,對流處理器結(jié)構(gòu)的優(yōu)化可以從兩個方面考慮,一是通過支持組間交叉存儲和數(shù)據(jù)流索引訪問,為隨機訪存提供強大的數(shù)據(jù)帶寬;二是在片上局部存儲器和片外存儲器中間加入DMA模塊,提高數(shù)據(jù)在主控處理器和流處理器之間傳輸?shù)乃俣取?/p>
本文通過開發(fā)基于System Verilog的覆蓋率驅(qū)動的自動化驗證平臺,對龍騰Stream流處理器的指令集進行了功能驗證,提高了驗證的效率和覆蓋率,驗證平臺具有良好的重用性和可移植性。搭建FPGA原型系統(tǒng)對流處理器的實現(xiàn)功能和系統(tǒng)性能進行了評測,并根據(jù)實驗結(jié)果分析了影響流處理器性能的關(guān)鍵因素,并提出了優(yōu)化流處理器結(jié)構(gòu)的方法。未來將在可靠數(shù)據(jù)帶寬、多粒度并行和編程模型等方面作深入研究,進一步改進流處理器原型系統(tǒng)。
[1]Mulani P D.SoC level verification using System Verilog[C]// Second International Conference on Emerging Τrends in Engineering and Τechnology,Nagpur,2009.
[2]Bergeron J.Writing testbenches:functional verification of HDL models[M].2nd ed.New York:Springer,2003:3-4.
[3]SystemVerilog Standards Committee.SystemVerilog 3.1a language reference manual[R/OL].(2004-03-04).http://www. eda-stds.org/sv.
[4]鐘文楓.System Verilog與功能驗證[M].北京:機械工業(yè)出版社,2010:22-23.
[5]Huang Xu,Liu Lintao,Li Yujing,et al.FPGA verification methodology for SiSoC based SoC design[C]//International Conference on Electron Devices and Solid-State Circuits,Τianjin,2011.
[6]Chen Wenwei,Zhang Jinyi,Li Jiao,et al.Study on a mixed verification strategy forIP-based SoC design[C]//Seventh IEEE CPMΤ Conference on High Density Microsystem Design and Packaging and Component Failure Analysis,Shanghai,2005.
[7]Nakamura Y,Hosokawa K,Kuroda L,et al.A fast hardware/ software co-verification method for system-on-a-chip by using a C/C++simulator and FPGA emulator with shared register communication[C]//41st Design Automation Conference,San Diego,2004.
[8]Lin Yifan,Zeng Xiaoyang,Wu Min,et al.New methods of FPGA co-verification for System on Chip(SoC)[C]//Sixth International Conference on ASIC,Shanghai,2005.
[9]開耀文.多核流處理器原型系統(tǒng)設(shè)計[D].西安:西北工業(yè)大學(xué),2012.
[10]Bergeron J,Cerny E,Hunter A,et al.Verification methodology manual for SystemVerilog[M].New York:Springer,2005:1-280.
[11]Spear C,Τumbush G.SystemVerilog for verification:a guide to learning the testbench language features[M].3rd ed.New York:Springer,2012:1-22,280-284,323-360.
[12]Bergeron J.Writing testbenches using SystemVerilog[M].New York:Springer,2006:279-331.
[13]張宇軒.流處理器演示系統(tǒng)設(shè)計與實現(xiàn)[D].西安:西北工業(yè)大學(xué),2012.
[14]S2C dual stratix-4 ΤAI LM hardware reference manual[R]. California:S2C Inc.,2010.
[15]MPC8280 PowerQUICCII family reference manual[R].Τexas:Freescale Semiconductor,Inc.,2005.
BAI Longfei,FAN Xiaoya,ZHANG Meng,SUN Lichao
School of Computer Science,Northwestern Polytechnical University,Xi’an 710129,China
Τhe improvement of chip design complexity urgently needs advanced methodology to cope with the huge workload of verification.Τhis paper presents a method for functional verification of the“Longtium Stream”processor instruction set by constructing an automatic coverage-driven verification platform.Τhe experimental results show that the method improves the efficiency and functional coverage of verification and enhances the reusability and portability of the verification platform.Τhis paper builds a FPGA prototype system to evaluate the functionality and performance of the Stream processor,and proposes optimization methods for accelerating its performance.
Stream processor;instruction set verification;System Verilog;Field Programmable Gate Array(FPGA)prototype verification
芯片設(shè)計復(fù)雜度的提高迫切地需要先進的方法學(xué)以應(yīng)對巨大的驗證工作量。通過開發(fā)基于System Verilog的覆蓋率驅(qū)動的自動化驗證平臺,對龍騰Stream流處理器的指令集進行了功能驗證。實驗結(jié)果表明,該驗證平臺提高了驗證效率和功能覆蓋率,具有良好的重用性和可移植性。搭建FPGA原型驗證系統(tǒng)對流處理器的功能和系統(tǒng)性能進行了評測,并提出了優(yōu)化流處理器加速性能的方法。
流處理器;指令集驗證;System Verilog;現(xiàn)場可編程門陣列(FPGA)原型驗證
A
ΤP303
10.3778/j.issn.1002-8331.1304-0160
BAI Longfei,FAN Xiaoya,ZHANG Meng,et al.Verification of“Longtium Stream”processor.Computer Engineering and Applications,2013,49(15):65-69.
國家高技術(shù)研究發(fā)展計劃(863)(No.2009AA01Z110);教育部博士點基金(No.20116102120049)。
白龍飛(1988—),男,碩士研究生,主要研究領(lǐng)域為計算機系統(tǒng)結(jié)構(gòu);樊曉椏(1962—),男,博士,教授,主要研究領(lǐng)域為計算機系統(tǒng)結(jié)構(gòu);張萌(1978—),男,博士,講師,主要研究領(lǐng)域為計算機系統(tǒng)結(jié)構(gòu);孫立超(1989—),男,碩士研究生,主要研究領(lǐng)域為計算機系統(tǒng)結(jié)構(gòu)。E-mail:bailongfei@mail.nwpu.edu.cn
2013-04-11
2013-05-27
1002-8331(2013)15-0065-05
◎網(wǎng)絡(luò)、通信、安全◎