微計算機信息 摘要 : 視頻編解碼芯片中運動估計與補償單元(MECU)的算法復雜,使用傳統硬件描述語言建立模型和模型驗證的過程繁瑣耗時,為了縮短芯片驗證時間,本文針對MECU 模塊提出了基于SystemC 語言的具體系統級驗證流程。在整個芯片驗證工作中,為了實現MECU 模塊和低抽象級的其它外部模塊協同驗證,本文提出的驗證流程利用了SystemC 能在不同抽象級建模的優勢,對MECU 模塊的數據傳輸控制端口進行細化。仿真結果表明:與使用傳統件描述語言驗證方法相比,基于SystemC 的驗證流程簡單有效,大大縮短了建模與驗證時間。 1 引言 當前集成電路制造技術迅速發展,SoC(system-on-chip)設計已經成為集成電路設計的發展方向。隨著SoC 設計的復雜度提高,在開發SoC 的過程中,驗證工作越發重要和繁重,所占的開銷占據總開銷的40%"70%。SoC 設計的驗證過程不但影響到芯片的成功設計,而且影響到芯片的上市時間,因此驗證的正確性及其耗時的縮短成為了SoC 設計的關鍵。 傳統設計中,系統級設計使用高級語言C/C++等描述功能模塊的算法,驗證的時候使用硬件描述語言(VHDL 或Verilog HDL)。系統驗證之前必須通過手工將原始的C/C++代碼轉換為VHDL/Verilog HDL 代碼,這個轉換過程耗時大并且容易產生錯誤。在系統驗證過程中,使用傳統硬件描述語言對復雜模塊的驗證需要耗費大量時間。 為了提高系統級驗證效率,本文針對視頻芯片中的運動估計與補償單元模塊(MECU)提出了基于SystemC 的驗證方法和流程。該方法大大縮短了系統驗證的搭建時間和系統驗證過程的時間。本文利用SystemC 支持設計者在不同抽象級建模的特點,給MECU 添加了低抽象級接口,使該單元能夠和視頻芯片內部其它模型通訊以便完成整個芯片的系統級驗證。本文最后的仿真結果證明了該設計流程的有效性。 2 SystemC 語言 SystemC 是由C++衍生而來,本質是在C++的基礎上添加了硬件擴展庫和仿真核,這使SystemC 可以在不同抽象級對復雜電子系統建模。它既可以描述純功能的模型和系統體系結構,又可以描述軟硬件的具體實現,進行軟硬件的協同驗證。 SystemC 包括以下建模元素: *模塊(module) 相當于C++的類定義,是一個可以多層次的實體。一個模塊可以嵌套其他模塊和一些進程,是SystemC 里面最基本的單元。 *進程(process) 用來描述模塊的功能,包含于模塊中。進程是由事件(event)來觸發的,這種觸發的方式使進程可以并行執行,實現了硬件系統的并行特性,SystemC 包括三種不同的進程。 *接口(interface) 定義了一組方法實現目標,但是不實現這些方法。 *通道(channel) 實現了接口定義的方法,分為基本通道和層次化通道。 *端口(port) 總是與一定的接口類型相關聯,端口只能連接到實現了該類接口的通道上,通過端口模塊和進程來訪問通道內定義的接口方法。 *信號(signal) 用來實現各個進程之間的通訊。SystemC 提供了多種信號格式來滿足從寄存器傳輸級(Register Transmit Level, RTL)到功能級等不同抽象級的模擬。 *事件(event) 用來觸發各個進程的開始以及暫停,通常多個事件組成一個敏感列表(sensitive list)共同決定進程的狀態。 *時鐘信號(clock) 時鐘在同步電路設計中是一個非常重要的角色,本質上它是一種特殊的信號,為仿真過程提供了時間基準。 上述建模元素使得SystemC 能夠順利的搭建硬件平臺。 3 基于SystemC 的建模方法 系統級驗證過程中,對于復雜算法模型只需要建立參考模型(Reference Models),搭建驗證平臺,觀察模型的一些重要功能(算法、進程等等),不需要了解RTL 層面的細節。利用事務級建模方法(TLM, Transaction Level Modeling)技術很容易建立參考模型。一個完整的芯片是由多個功能模塊組成,采用SystemC 對復雜算法單元建立模型能使功能驗證時間縮短,而一些簡單模型的驗證需要在RTL 層面。為了實現不同抽象級模塊通訊,本文對使用SystemC 建立的復雜單元模型進行接口精細化處理。本文對實際芯片單元提出的SystemC 建模驗證流程如圖1 所示: 圖1 SystemC 驗證流程 驗證流程描述: (1)搭建SystemC 系統級模型: 使用基于C++的SystemC 能很容易搭建系統級模型。利用SystemC 對所要實現的系統功能進行描述,主要描述系統的算法、結構等,不考慮每個時鐘周期寄存器數值改變。只有針對復雜算法單元使用SystemC 建模,才能夠發揮SystemC 節省建模和驗證時間的優勢。 (2)系統級功能仿真: 利用支持SystemC 的工具對建立的模型進行仿真驗證系統功能,觀察結果并且不斷進行反饋修改直到仿真正確。 (3)精細化接口: 精細化接口是多模塊驗證過程的關鍵。因為在對單個復雜單元系統級驗證的時候,抽象級很高,只需要考慮其功能性。多個模塊驗證時外部單元模型可能在RTL 級別構建,這時需要利用SystemC 能在不同抽象級建模的優勢,在一個較大的模塊中實現不同的抽象層建模,即在和外部模型接口處將抽象級降低到RTL 級。精細化接口的過程需要根據外部模塊接口調節輸入輸出數據位寬、設置敏感事件列表,并且嚴格按照外部時鐘控制數據的傳輸,保證順利和外部模塊通訊。 (4)協同驗證: 驗證多個模塊共同工作的正確性,這時候發現錯誤就能夠及時進行設計的修改,提高芯片設計效率。驗證結果正確的模塊就可以進行后端流程,建立的驗證平臺也可以作為外部驅動的測試平臺進行軟件的驗證。 4 應用實例 4.1 MECU 原理 廣泛應用在手機中的視頻編解碼芯片編解碼流程包括了DCT 變換、量化、VLC 編碼、反DCT 變換,反量化、運動估計、運動補償、插值計算、邊緣填充等步驟,其中運動估計與補償部分是實現壓縮圖像時間冗余度的重要環節,由于其算法的復雜性該部分占據了大部分的編解碼時間, 對MECU 模塊的驗證是整個芯片驗證中工作量最大的環節。 本文中MECU采用MVFast(Motion Vector Field Adaptive Fast Motion Estimation) 算法實現ME/MC:ME 部分在圖像編碼過程中實現運動預測,計算出運動矢量,同時完成宏塊編碼類型(MBmode)判斷和運動矢量編碼類型判斷;MC 部分在圖像編碼過程中,根據輸入各塊的運動矢量完成YUV 的插值處理輸出運動參考塊數據和當前處理塊數據;在圖像解碼處理中完成插值處理輸出參考塊數據。 4.2 模塊搭建 采用Verilog 語言直接建立MECU 模型用于芯片設計時,由于MECU 算法復雜,建模過程耗時巨大。Verilog 建模期間系統驗證工程師需要等待模型建立完成,這樣增長了芯片設計周期,另一方面對使用Verilog 建立的MECU 模型驗證耗費時間長。由于基于SystemC的建模時間相對Verilog 建模時間縮短3~4 倍,驗證過程具有快速性優勢,本文嘗試采用SystemC 進行前期建模和驗證工作。 依據本文第二部分介紹的驗證方法,首先建立MECU 硬件仿真模型進行功能驗證,然后在這個硬件模型正確的基礎上進行外圍模塊設計的驗證,以實現整個芯片的系統級驗證。 第一步利用SystemC 對ME 和MC 分別進行系統級建模。在建立ME 和MC 這兩個模塊時,只需要實現ME 和MC 各自算法功能和兩個模塊之間的通訊,因此不需要按照精確的時序建模。在C 語言實現MVFAST 算法模型基礎上,用SC_MODULE 將ME 和MC 各自編寫成可仿真的模塊MEU 和MCU,內部的功能利用Process 來實現。模型建立之后,搭建平臺進行功能驗證,觀察數據經過ME 和MC 之后的變化是否完全符合算法要求。 MEU 和MCU 模型功能驗證結束之后需要協同芯片中其它模塊進行驗證,由于MECU的外圍模塊是在RTL 級建模,并且嚴格按照時鐘進行數據處理,因此必須對MECU 接口進行精細化。本實驗添加了SYS_IF ,ZSP-IF, DMA-IF 和BPU-IF 模塊以實現與外圍模塊通訊,這些接口模塊包括和外圍模塊相匹配的輸入輸出端口,并且由時鐘嚴格控制數據的傳輸。 最終建立的SystemC 模型和外部環境定義如圖2 所示。 圖2 MECU 的SystemC 模型 4.3 接口模塊描述 (1)SYS_IF 提供MECU 的外部時鐘以及復位信號接口,這兩個控制信號對MECU 內部所有模塊有效。 (2)MEU 和MCU 的觸發由外部ZSP 產生的開始信號來控制,在MECU 內部包含的控制寄存器也由ZSP 來控制。ZSP_IF 模塊的添加實現了ZSP 對MECU 進行讀寫控制。 (3)MECU 模型編解碼過程需要處理的數據是通過ZSP 控制DMA 提供,因此添加DMA_IF模塊實現和DMA 通訊,搬運數據以供MECU 處理。 (4)最終MC 完成產生的數據,通過BPU_IF 模塊傳輸出到BPU 中(用于軟硬件結果對比)。 從上述結構可以看出,MECU 包括了六個模塊:ME,MC,SYS_IF,ZSP_IF, DMA_IF 以及BPU_IF。ME 和MC 作為核心功能模塊實現了MECU 單元的算法,SYS_IF,ZSP_IF, DMA_IF以及BPU_IF 四個接口模塊由時鐘嚴格控制數據的傳輸,實現和外圍模塊通訊功能。 5 仿真結果分析 利用上述SystemC 模型進行仿真驗證,采用一組352*288 像素的圖像作為仿真對象,使用Mentor 公司的Modelsim 作為仿真工具。首先建立測試平臺,對外部ZSP,DMA 進行模擬以提供控制信號和處理數據,然后利用Modelsim 進行仿真驗證和時序分析。Modelsim得到的部分波形圖如圖三所示: 圖三 MECU 驗證部分波形圖 仿真得到的數據結果完全符合算法的期望值,證明了搭建模型的正確性。時序分析結果表明:使用SystemC 對圖像的一個宏塊(16*16 像素)進行編碼平均需要680 個clock cycle,其中ME 和MC 部分占用11 個clock cycle;用傳統硬件描述語言Verilog 建模進行驗證一個模塊的編碼平均需要3000 個clock cycle,其中ME 和MC 占據2200 個clock cycle。將基于SystemC 和Verilog 兩種建模方法的ME 和MC 驗證時間相比較發現:采用SystemC 進行純功能性驗證時間比使用Verilog 驗證時間縮短了約200 倍,因此驗證時間上的優勢是顯著的。 6 總結 本文對 SystemC 驗證方法進行了深入的研究,針對視頻編解碼芯片MECU 單元的驗證提出了使用SystemC 驗證的建模流程,通過端口細化方法使芯片能在不同抽象級建模驗證,這種方法在當前國內驗證方面使用不多。仿真結果證明了該流程的有效性,和使用傳統硬件描述語言驗證相比時間顯著縮短。 |