楊 津,張 盛,林孝康
(清華大學深圳研究生院, 廣東 深圳 518055)
目前,動態的模擬仿真仍然是主要的功能驗證方法,即首先產生一系列的測試向量,然后將測試向量加載到設計上(DUT)通過HDL模擬器得到測試結果,將這些結果與參考結果相比較,以此來驗證設計的正確性。但是隨著設計規模的急劇增大,使用軟件RTL模擬器進行仿真時仿真速度會變得非常低,在Pentium IV的設計驗證中Intel公司使用了6 000個節點的PC Farm進行仿真,而測試的向量不過相當于實際系統運行2 min所執行的測試向量[1]。
盡管使用FPGA可以獲得快速的運行速度,但是使用FPGA進行仿真不能提供設計信號的百分之百可見.而通常需要邏輯分析儀這樣的設備進行調試.可觀測信號的時間窗口范圍也很小,這給調試帶來了很大的困難。硬件加速器很好的平衡了計算速度和差錯能力,因此在海外IC設計公司中被廣泛使用[2]。
本文根據視頻解碼芯片的需要,結合硬件加速器的特性,對視頻解碼芯片使用Cadence Xtreme硬件加速器進行硬件仿真加速,取得高于40倍的加速效果。
圖1是視頻解碼芯片的功能框圖。芯片具有一條32 bit的總線和一條64 bit的總線。 32 bit的總線連接System CPU、Audio CPU及一些外圍設備。System CPU負責運行操作系統和整個芯片的控制,而Audio CPU負責對語音進行處理。外圍的設備則包含了一些接口控制器,如GPIO, UART, IDE等等。

圖1 視頻解碼芯片功能框圖
64 bit的總線連接用于視頻解碼的MPEG2 和H264的IP,以及顯示控制單元等等。兩條總線通過一個32到64的橋進行連接。芯片系統CPU的運行速度為200 MHz,設計規模約為350萬門。
芯片詳細的結構如圖2所示。

圖2 芯片具體結構圖
芯片分為Core_SYS、Core_Vedio和Core_Peri三個部分。其中, Core_SYS主要是運行操作系統的CPU,而Core_Vedio則是包含了MPEG2及H264等用于視頻解碼的IP核,以及顯示控制單元DCU。所有的視頻解碼及顯示控制的數據均存入1 G的64 bitDDR2 RAM中。Core_Peri主要包含了音頻CPU及一些外圍接口控制器如Flash_ide, Ethernet等等。
Xtreme硬件加速器通過把IC設計進行映射,把可綜合的設計放入到硬件加速器中進行仿真,不可綜合的部分留在軟件中仿真以提高仿真的速度。
硬件加速器的仿真方式主要有三種[3]:
(1)軟件仿真方式;
(2)仿真加速方式;
(3)STB(Synthesizable Testbench)模式;
表1分析了幾種硬件仿真方式的特點和不足。

表1 幾種硬件仿真方式各自的特點和不足
由于視頻解碼芯片尚處于設計驗證階段,且包含模擬電路,由表中可以看出,視頻解碼芯片適合使用硬件加速的方式進行硬件加速。
硬件加速器的使用流程如圖3所示。在Compile階段,硬件仿真器的控制軟件對verilog代碼進行語法分析,然后生成文件名為WORK的文件夾,把編譯后的數據放入到WORK文件夾中。在完成信號分析和生成FPGA代碼后,把這些數據放入文件名為AxisWork的文件夾中。同時,生成可執行文件vlg,通過運行vlg開始進行仿真。

圖3 硬件加速器流程圖
視頻解碼芯片硬件仿真加速主要的難點是如何獲得更快的仿真速度。
硬件加速器的仿真時間主要由三部分決定:①硬件仿真器部分運行速度和需要的時間th;②軟件仿真器中部分的運行速度和需要的時間ts;③軟件仿真器和硬件仿真器之間信號和數據傳遞需要花費的時間tt。
由于硬件仿真器的運行速度一般可以達到幾百,千赫茲, SA方式的運行速度主要取決于上面的第②項ts和第③項tt。
顯然, ts和tt不是獨立的, tt越大,則ts也越大。因此,并不一定是放入硬件加速器中的模塊越多,仿真速度就越快,我們要盡量減少仿真系統中硬件和軟件之間的數據交換。在加速過程中,要針對設計的特性具體問題具體分析,才能獲得相對此設計的比較快的仿真速度。
2.3.1 視頻解碼芯片的軟硬件劃分
在進行軟硬件劃分時,需要優先考慮的是盡量減少仿真系統中硬件和軟件之間的數據交換??紤]到芯片仿真開始時需要不斷從測試向量文件讀取數據到Flash Memory中,將Flash Memory放入硬件加速器將會增加大量的軟硬件之間的通信,降低仿真速度,因此,我們將Flash放入軟件中進行仿真,加快仿真速度。圖4是具體的軟硬件劃分示意圖。

圖4 軟硬件劃分示意圖
2.3.2 視頻解碼芯片的編譯準備
在編譯過程中, Xtreme的編譯器會將本來應該放入硬件加速器中但又不可綜合的模塊指定成嵌入式軟件模塊,并將該模塊留在軟件中運行。嵌入式模塊的存在會增加軟件仿真器的負擔,并增加軟件仿真器和硬件仿真器之間的數據交換,造成硬件仿真速度的下降。因此,在確定了仿真模式及軟硬件劃分之后,通常要進行模型的轉換工作。
通過分析Xtreme的編譯報告,我們發現,設計中存在了大量的嵌入式模塊,而進一步的細分,嵌入式模塊主要來自于設計中不可綜合的Memory及一些不可綜合的IP。因此,我們需要完成下面的工作。
(1)設計內部Memory模型的替換
大部分設計使用由IC生產商提供的Memory單元模型,而這些模型很多是軟件仿真準備的,不可綜合。Xtreme提供了Memeory primitive,通過這個模塊可以模擬ROM的功能。 Xtreme memory primitive可以直接用RCC上板載的存儲空間實現,提高性能。視頻解碼芯片的Core_Peri中使用了較多的Artisan Memory,而這些Memory都是行為級模型,不可綜合,因此,我們需要對設計中的Artisan Memory用memory Primitive進行改寫。
(2)不可綜合IP的處理
由于DDR2的IP僅為仿真模型,不可綜合,極大的影響了仿真速度,因此需要對這個IP進行處理,由于DDR2功能復雜,自己改寫將花費大量的時間,且不能保證正確性, 因此, Xtreme可綜合的DDR2代碼由Cadence提供。
(3)Testbench的修改
Teshbench對設計結果進行檢測并記錄到文本中,這個監測記錄的task每個時鐘周期都會運行一次,因此,在軟件和硬件之間存在大量的數據交換,將會嚴重影響仿真速度,所以我們需要考慮對testbench進行修改,減少task的調用次數。
基于上述考慮,我們取消了ap_ba22_monitor和uart_monitor,并對設計進行修改,增加了觸發ba22_monitor的信號,改為事件觸發monitor,極大的加快了仿真速度。但是,這樣的修改會導致監測的信號太少,不利于判斷仿真結果的正確性,同時,不容易對錯誤進行定位。因此,這個修改并不適用于設計驗證階段,但適用于芯片的全功能驗證階段。根據上面的特性,我們在設計驗證階段,采用有monitor的形式monitor_on,可以方便的進行錯誤定位和數據監測,而在芯片全功能階段,我們使用修改后的模式,即monitor_off模式,保證仿真具有較快的速度。
完成上述工作,就可以進行編譯,然后將編譯好的數據下載到硬件加速器中,進行仿真。
硬件仿真系統的加速結果見表2。在Monitor_on模式下,可獲得約為4倍的加速,而在Monitor_off的模式下,獲得了40倍以上的加速。

表2 硬件仿真系統的加速結果
本文根據視頻解碼芯片的需要,結合硬件加速器的特性,對視頻解碼芯片使用
Cadence Xtreme硬件加速器進行硬件仿真加速,取得高于40倍的加速效果。硬件加速器強大的仿真速度和查錯能力無疑為大規模設計的功能驗證提供了一個非常好的解決方案,對比于現在廣泛使用的軟件仿真和FPGA的方法,它是具有無可比擬的優勢的??梢灶A見,隨著芯片設計規模的增大,硬件加速器的使用將可能成為大規模設計功能驗證的標準流程。
[ 1] Bob Bentley.Validatinga Moden Microprocessor[C] //17th Intemational Conference on Comput-Aided Verification:CAV2005, July, 2005.
[ 2] 林豐成,竺紅衛,李立.數字集成電路設計與技術[ M].北京:科學出版社, 2008.
[ 3] Cadence.Xtreme User Guide[S] .Version 6.3.1, 2006.