,
(中國電子科技集團公司 第三十八研究所,合肥 230088)
隨著半導體工藝的快速發(fā)展,超大規(guī)模集成電路設計技術日益成熟,系統(tǒng)芯片(System on Chip, SoC)已成為主流的設計技術。伴隨“摩爾定律”所預言的晶體管增長趨勢,IC設計復雜度還在持續(xù)不斷增大。隨著芯片規(guī)模的快速增長,其相應的設計、驗證的難度也在不斷增大,這使得在芯片設計流程的后期,調試、驗證所需的代價增大。因此,一方面需要盡可能在設計周期的早期給出標準的參考模型,以確定芯片架構并發(fā)現(xiàn)體系結構中存在的問題。另一方面,目標機上運行的軟件開發(fā)和調試也需要一個完整而可靠的參考環(huán)境,也就是說目前在IC設計的各個階段中,構建功能完備、周期精確的全芯片仿真平臺具有重要意義。
基于C/C++的純軟件仿真方法[1-4]具有描述能力強、抽象層次豐富、仿真速度快等諸多優(yōu)勢,但是在一個較大規(guī)模的全芯片系統(tǒng)中想要同時獲取所有子模塊對應的周期精確的軟件模型難度較大,在實際操作中幾乎很難滿足;另一方面,基于硬件描述語言Verilog HDL的前端數(shù)字仿真[5-6]雖然具有周期精確且IP庫豐富的優(yōu)勢,但其行為級描述能力有限,而且通常仿真速度較慢。
本文針對此問題,首先介紹基于SystemC[7]的純軟件虛擬仿真方法并分析其特點,然后提出了一種基于VPI技術的全芯片混合仿真方法并通過實際工程應用證明其有效性。
基于片上網絡的復雜SoC電子系統(tǒng)的設計需要使用先進的系統(tǒng)級描述語言對其進行描述。SystemC是由OSCI(Open SystemC Initiative)提出的一種基于C++的統(tǒng)一建模平臺,其本質是在C++的基礎上添加了硬件擴展庫和仿真內核,這使得SystemC可以在不同的抽象級別對復雜電子系統(tǒng)建模,解決了傳統(tǒng)C++語言在描述硬件時不具有并發(fā)性、時序概念等缺陷,從而可以在系統(tǒng)級用高級語言統(tǒng)一描述軟件和硬件行為。SystemC基本體系結構框架如圖1所示。
圖1 SystemC體系架構
SystemC中關鍵類的繼承關系如圖2所示,其最底層是一個節(jié)拍式仿真內核,由sc_simcontext類封裝。其它常用的關鍵類型有:
① 模塊(sc_module):一種層次化實體,可嵌套其它模塊和過程,一般一個完整的SystemC仿真系統(tǒng)可由大量模塊經實例化后互聯(lián)組成;
圖2 SystemC 類型繼承關系圖
② 過程(sc_process):用來描述模塊的具體功能,可由事件觸發(fā),多個過程可并行執(zhí)行,SystemC支持3種不同的過程類型:方法過程(sc_method、線程過程(sc_thread)及時鐘線程(sc_cthread);
③ 接口(sc_interface):定義了一組方法實現(xiàn)目標,但是不實現(xiàn);
④ 通道(sc_channel):實現(xiàn)了接口中定義的方法,分為基本通道和層次化通道;
⑤ 信號(sc_signal):用來實現(xiàn)各個過程之間的通信,SystemC提供了多種信號格式來滿足從寄存器傳輸級(Register Transmit Level,RTL)到功能級等不同抽象級的模擬;
⑥ 事件(sc_event):用來觸發(fā)各個過程的開始以及暫停,通常多個事件組成一個敏感列表(sensitive list)共同控制一個過程的狀態(tài);
⑦ 時鐘(sc_clock):時鐘在同步電路設計中是一個非常重要的角色,本質上是一種特殊的信號,為仿真過程提供了時間基準。
由于SystemC完全構建于標準C++,使得其對抽象層次較高的行為級、算法級的系統(tǒng)任務天然地具有非常強的描述能力,同時又由于其添加了專門用于硬件描述的類庫和仿真內核,使之也可以在抽象層次較低的RTL層次對系統(tǒng)進行描述。值得一提的是,SystemC支持延遲賦值這一硬件特殊行為,通過支持Δ延遲(delta-delay)來支持硬件信號的行為建模。Δ延遲是最小的仿真步,一個Δ周期包括許多估值(evaluate)和更新(update)相,當事件調用notify()時,將在仿真環(huán)境的事件隊列中插入這個事件,用request_update()發(fā)出更新請求,在更新相時,調用update()更新信號。
當前在使用完全基于SystemC的純軟件仿真方法描述系統(tǒng)時,所面臨的主要問題是基于SystemC建立的周期精確的模型庫還不夠完善,很多面向工業(yè)級應用的IP核依然缺乏,另一方面,由于歷史上Verilog HDL長期在工業(yè)界的數(shù)字前端設計領域占主導地位,因此基于Verilog HDL設計開發(fā)的模型庫是相當豐富的,但是其仿真速度較慢的缺點一直沒有得到很好的解決。
針對前文中對SystemC建模仿真方法的優(yōu)勢及劣勢的分析,本文提出一種基于VPI技術的全芯片混合仿真方法。
VPI(Verilog Procedural Interface)是第三代Verilog HDL與C語言過程調用接口,目前已經成為IEEE1364標準(IEEE Verilog HDL標準)的一部分,其中定義了一組標準API接口用以實現(xiàn)Verilog與標準C之間的通信。利用此接口,一方面可以為Verilog硬件代碼添加額外的用C實現(xiàn)的系統(tǒng)函數(shù),以彌補Verilog行為級描述能力的不足,另一方面,可以在軟件代碼中根據(jù)需要直接以后門方式讀寫Verilog硬件代碼中的仿真部件(如reg、wire、memory等),VPI技術為軟硬件混合仿真的實現(xiàn)提供了必要條件。一些關鍵的VPI接口及其概要描述見表1。
表1 VPI中常用API概述
通過使用VPI技術可以實現(xiàn)全芯片級的軟硬件混合仿真平臺的搭建,將系統(tǒng)中復雜度最高、運算量最集中的模塊使用周期精確的軟件模型構建,同時對其它一些缺乏軟件模型的模塊直接使用Verilog HDL數(shù)字電路模型進行建模,此類功能模塊通常為外設模塊,并非仿真效率的瓶頸,但是卻缺乏周期精確軟件模型的模塊直接使用Verilog HDL數(shù)字電路模型,軟硬件模型之間的通信一方面可以通過傳統(tǒng)的端口連接實現(xiàn),另一方面也可以通過VPI實現(xiàn),如圖3所示。
圖3 基于VPI混合仿真通信模式
圖3中最左側模塊可以認為是一個運算量相對集中、復雜度相對較高的模塊(例如CPU、DSP等中央處理單元模塊),一般認為這種類型的功能模塊是整個系統(tǒng)的仿真效率瓶頸,因此我們使用SystemC建立其周期精確的模擬,最右側使用Verilog模型可能是因為其軟件建模困難,或者已存在成熟的商用IP核(例如AMBA總線或者PCIE外設控制器等模塊),中間的模塊可以視為一個橋接功能模塊,一方面它與軟件模型之間通過TLM[8](Transaction Level Modeling,一種基于SystemC的事務級仿真框架)方式通信,通過C++函數(shù)調用接口nb_transport_bw/nb_transport_fw來傳遞被包裝成generic_payload(TLM中指定的數(shù)據(jù)幀格式)的數(shù)據(jù)幀,另一方面它通過sc_signal
“魂芯”多核DSP[9]是一款完全由中國電子科技集團第三十八研究所自主研發(fā)的面向高性能電子應用領域的通用DSP。由于該款芯片面向高端應用,因此其支持多種高速外設,而同時獲取或者構建所有這些外設控制器的周期精確的軟件模型是不現(xiàn)實的,同時也沒有必要,而邏輯最復雜同時也是計算量最密集的計算內核模塊其周期精確的軟件模型是可用的。
基于以上事實,在該款DSP的實際設計中采用了本文提出的基于VPI技術的方法為其構建了軟硬件混合仿真平臺,該平臺的大致結構如圖4所示。圖中的頂層是全芯片層,其中包含眾多的Verilog硬件模型,如AHB、Uart、RapidIO、PCIE等,而內核計算模型則是由SystemC實現(xiàn)的周期精確的模型。值得注意的是,為了實現(xiàn)DMA控制器的周期精確模型,平臺在軟件計算內核的內部還嵌入了一個DMAC(DMA Controller)硬件電路模型,整個混合仿真平臺既保證了系統(tǒng)的完整性,同時還是周期精確的。
圖4 基于VPI的多核DSP混合仿真平臺結構
由于該混合仿真平臺使用周期精確的軟件模型描述計算內核,因此仿真速度大概是純硬件仿真速度的10~100倍(由目標機運行的應用程序決定),同時由于此平臺包含了幾乎所有高速外設的Verilog HDL模型,因此它也是功能完備的。在芯片流片的窗口期該平臺支撐了操作系統(tǒng)、驅動程序等大量目標機相關生態(tài)軟件的開發(fā)、調試,為大幅縮短產品研發(fā)周期起到了關鍵作用。
仿真技術是IC設計中的一種關鍵技術,基于C++的SystemC仿真方法具有描述能力強、仿真速度快等優(yōu)點,但是目前工業(yè)界中大量使用的還是基于Verilog HDL的IP核,基于SystemC的周期精確的仿真模型相對還比較匱乏。在實際工程應用中試圖搭建純軟件仿真平臺難度較大,需要或者放棄系統(tǒng)的功能完整性,或者放棄系統(tǒng)的周期精確性。本文提出一種基于VPI技術的全芯片混合仿真方法,通過后門讀寫的方式完成軟件模型與硬件模型的交互,使得在搭建全系統(tǒng)仿真平臺時對于模型的選取更加 靈活,最后通過將該方法在一款實際DSP設計中的應用說明了本方法是可行的、有效的。
[1] 韋祎.基于SystemC構建多核DSP軟件仿真平臺[J].微電子學與計算機,2016,33(4):86-90.
[2] 彭德生,蔣志翔.基于SystemC的MIPS處理器建模與架構[J].計算機工程與設計,2015,36(4):1015-1021.
[3] 陳曦,徐寧儀,周祖成.嵌入式系統(tǒng)虛擬原型平臺的SystemC實現(xiàn)[J].計算器輔助設計與圖形學報,2004,16(8):1070-1073.
[4] Keinert J,Schlichter T,Falk J,et al.System Codesigner-an automatic ESL synthesis approach by design space exploration and behavioral synthesis for streaming application[C]//Proc. of the 45th Annual Design Automation Conference,2008:580-585.
[5] 莫寒以,王仁平.32位稀疏樹可逆邏輯加法器的Verilog設計[J].中國集成電路,2017,30(5):28-33.
[6] 趙地,朱興華.基于Verilog的模擬前端時序的實現(xiàn)方法[J].電子科技,2017,30(4):144-147.
[7] IEEE 1666-2005.IEEE Standard SystemC language reference manual,2006.
[8] Ghenassia F.Transaction level modeling with SystemC:TLM concepts and applications for embedded systems[M].Berlin:Springer,2005.
[9] 洪一,方體蓮,趙斌等.“魂芯一號”數(shù)字信號處理器及其應用[J].中國科學:信息科學,2015,45(4):574-586.