Global Sources
電子工程專輯
 
電子工程專輯 > EDA/IP
 
 
EDA/IP  

一種演算法與結構模組聯合建模的系統級設計和驗證方法

上網時間: 2004年10月01日     打印版  Bookmark and Share  字型大小:  

關鍵字:SLD  System Level Design  系統級設計  CCSS  CoCentric System Studio 

系統級建模和驗證在如今規模龐大的SoC設計中佔據越來越重要的地位。本文提供了一種演算法與結構模組聯合建模的系統級設計和驗證方法。在SLD階段將演算法模型重用成RM模型,掛接到基於AMBA匯流排系統的架構上去進行模擬驗證。將演算法模組和雙層匯流排架構模組連接,進行聯合設計驗證、及軟硬體協同除錯。圖1:SystemC的設計層次結構。

隨著深次微米時代的到來,SoC設計規模越來越複雜,技術上的不斷演進和成熟,使系統級設計SLD(System Level Design)和驗證技術及其應用受到日益廣泛的關注。IC產業在數位設計系統方面將由RTL向SLD逐漸轉移。SystemC作為一種適於高級建模和模擬的SLD業界標準語言,已被廣泛應用於功能驗證和軟硬體協同驗證等多個領域。

SLD包括從系統規格開始的C/C++/SystemC輸入、系統驗證、功能驗證、虛擬硬體原型產生、軟硬體共同開發以及C/C++/SystemC、VHDL和Verilog的混合驗證、軟硬體的協同驗證,直到暫存器級的HDL原始碼產生和驗證。

SLD設計過程

在規格級階段就執行SLD,可以防止在產品需求分析過程中產生有缺陷的規格(Spec),避免在後續的SOC設計流程中缺陷被不斷放大,進而導致整個ASIC開發過程迴圈或晶片出錯。據業界統計,在SOC的設計過程中,Spec的錯誤可能會造成價值100萬美元的的損失。

SLD能完成SPEC階段需求和性能分析,進行SOC架構需求和性能分析、演算法需求和性能分析,避免Spec設計中的Bug。SLD將透過設立系統級的抽象模型,執行模擬驗證分析和評估給出量化的指標和數據,因而對Spec階段的需求和性能作出正確的設計,隨後在SLD的基礎上進行軟硬體模組劃分。建模是透過C/SystemC在不同抽象等級進行的,包括:無時序功能級UTF(Untimed Functional)、時序功能級TF(Timed Functional)、匯流排循環精確級BCA(Bus-Cycle Accurate)和循環精確級CA(Cycle Accurate)。

SLD可採用Synopsys的系統設計工具CoCentric System Studio(以下簡稱為CCSS)。CCSS可提供運算規則和架構的建模和模擬,另外在軟硬體協同除錯中可連接軟體除錯器,如ARM的ADU/AXD、Tornado等進行除錯。系統級的DesignWare庫包括ARM_Processor和AMBA的SystemC模圖2:DW_AMBA_AHB_SC模組与AHB <a href=CLI函數的承接關係。">型庫。

在SystemC合成方面,Sysnopsys提供支援SystemC合成的SystemC編譯器,目前支援RTL SystemC合成和行為級SystemC合成。

在進行演算法鏈路建模模擬時,可以採用CCSS。CCSS中增加了OR、AND、GATED等多種控制模型(層次化有限狀態機(FSM)模型)。Cossap的底層模組在CCSS中為PRIM模組,層次模組為數據流圖(DFG)模組。

用CCSS執行演算法鏈路建模模擬,具有多種優勢:建模種類多,數據類型豐富;版本控制更容易;變速率模組編寫簡單,PRIM模組編程直接支援埠的變速率;CCSS模擬速度更快,除錯方法更方便(例如:可以在編程時使用inline函數,或透過調用外部函數提高模擬速度;將模擬鏈路中的反饋部份用PRIM模成立模型,其模擬速度快於SDS模組的模擬速度;在產生模擬時關閉除錯選項,提高模擬速度)。

可以使用SystemC進行系統建模。SystemC是一種C++類庫(包括C++程式、庫、封裝等),是用來模擬硬體包含DSP、ASIC、IP Core和介面的SOC設計方法學。它可以完成系統級設計功能:在抽象層建模,細化成硬體;模擬軟體模型,如中斷、異常處理;在系統級範圍驗證;硬體/軟體聯合驗證;能利用IP。它還可提供VHDL和Verilog的所有優點:並發性如方式(methods)、執行緒、時脈執行緒;時脈的概念;位元寬可變的bit_true數據類型等。目前採用2.0.1版。

SystemC能在任何支援ANSI C++的編譯環境下編譯產生可執行的程式,如Gnu g++的2.95及以後版本,Microsoft Visual C++ 6.0及以後版本。可以利用標準C/C++的除錯工具進行程式碼級除錯,例如Unix、Linux下的gdb、ddd、xgdb、dbx;Windows下的Visual C++整合開發環境。在程式碼中可以利用C++的I/O語句,也可以採用SystemC內嵌函數製作文件、記錄波形,支援VCD、WIF和ISDB三種標準格式。

SystemC的設計分為四層:(見圖1)

UTF級:就是一個系統可以執行的系統規格書。系統被描述成一系列透過抽象的通訊連接起來的進程,可以採用時序方式/並發方式或兩者兼而有之,時間只是作為因果關係而導入。

TF級:是一個高層抽象性能模型,UTF中的進程和通訊連接都分配了執行的時間,特別指時脈周期或實際時間,對應於HDL語言的架構級。

BCA級:對應於HDL語言的行為級。

CA級:對應於HDL語言的RTL級。

在SystemC系統設計中,系統由不同的模組組成,模組由一系列並發的進程構成,每個進程完成一定的功能,進程之間透過訊號來通訊。在SystemC中,模組是分解設計最基本的功能單元,在開發組中將一個複雜系統分解成模組,交給不同的設計人員來完成。模組化的設計隱藏了內部的數據和演算法,透過公共介面與其他模組進行通訊,這就使得整個系統很容易改變和維護。例如設計人員可以改變一個模組的內部數據和實現方式,只要外部介面不變,模組所實現的功能不變,使用這模組的用戶來就不知道模組內部已改變。這樣就允許設計人員在內部進行最佳化。進程是SystemC可執行的基本單元,它被調用來模擬設備或系統的行為。圖3:FDD Modem功能子模組和層1軟體。

AHB周期級介面規格CLI(Cycle Level Interface:由ARM公司及其合作夥伴定義的一種介面標準)為AHB SystemC介面,用於將SystemC模型或用SystemC封裝的IP連接到AHB匯流排結構上。AHB CLI定義了一組SystemC API,用戶可以使用這些API來開發基於SystemC的AHB模型,如AHB主模型、AHB從模型、解碼器和仲裁器等。AMBA AHB CLI 1.1.0可支援AHB多層匯流排結構,它覆蓋了AMBA2.0,包括AHB Lite和ARM11擴展結構等。AHB CLI 1.1.0主要規定了主模型、從模型、匯流排模型的介面函數(其中匯流排模型規格用於傳輸執行和觸發執行方式的方式序列),定義了地址解碼器和仲裁器的IF介面函數,還規定了用於匯流排監測的的Monitor介面函數。

Synopsys提供SystemC的DesignWare,包括DW_AMBA_SC、DW_ARM_Processor_SC庫。DW_ARM_Processor_SC處理器模型是交易層模型TLM(Transaction Level Modeling),包括如下介面:指令AHB匯流排埠ibiu、數據AHB匯流排埠dbiu、ITCM埠、DTCM埠、中斷和復位埠(nIRQ、nFIQ、nReset)、初始化埠(VINITHI和INITRAM)、時脈埠。

DW_ARM_Processor_SC包括DW_arm926ejs處理器模型、DW_arm946ejs處理器模型。DW_AMBA_APB庫中主要包括AHB2APB橋接、APB BUS TLM模型、定時器、監測器等模組。DW_AMBA_AHB庫中含有主、從和匯流排功能模組。AHB匯流排上常用的模組在庫中都有,例如仲裁器、解碼器、FIFO讀/寫、Bus2Slave、Master2Bus、TMemory、監測器、StimuliGen、AHB匯流排TLM(一般為BCA級)模型、雙層AHB互連矩陣(ICM)等SystemC模型。不過原始程式碼對用戶是不開放的,所以無法基於上述模型進行修改,形成自己需要的模型。DW_AMBA_AHB庫中還有一些例子,其SystemC原始程式碼是可見的。在IP_Router可以找到DMA模組等。

在基於ARM匯流排架構的SystemC硬體模組設計過程中,常用的架構可以透過DW_AMBA_SC模組搭建,當然需要進行處理器、仲裁器、解碼器、監視器等的設置,其它的主、從模組需要採用供應商提供的SC的IP或自行設計。用戶通常可以在dw_amba_sc這個層次上進行建模,在dw_amba_sc提供的模型不滿足要求的情況下再涉及CLI編程。結建構模設計中的承接關係見圖2。

目前硬體模型編譯工作站CCSS上採用GNU g++2.95及以後版本,Windows系統採用Visual C++ 6.0及以後版本。CCSS上用g++進行編譯介面不夠友好,gmake編譯速度較慢。

g++在執行編譯時,總共需要4個步驟:


a. 預處理,產生.i的文件[預處理器cpp];


b. 將預處理後的文件轉換成匯編語言,產生文件.s[編譯器egcs];


c. 將匯編後的文件變為目標程式碼(機器程式碼),產生.o文件[匯編器as];


d. 連接目標程式碼,產生可執行程式[鏈接器ld];圖4:算法模型的埠。

在模組編譯時,通常會遇到-g、-O、-c、-l、-L等編譯選項問題,其中,-g表示編譯器在編譯時產生除錯資訊;-O是編譯器的最佳化選項;0、1、2、3是編譯器最佳化選項的4個等級;-O0表示沒有最佳化;-O1為缺省值;-O3最佳化等級最高;-c表示只啟動預處理、編譯和匯編,即程式僅產生obj文件;-llibrary是指定編譯時使用的庫;-Ldir是指定編譯時搜索庫的路徑。

在CCSS環境可採用ddd、gdb(命令行介面)、xgdb(圖形介面)和dbx作為SystemC硬體模型除錯器。在Windows環境中用Visual C++ 6.0及以後版本進行除錯。ARM架構上的軟體程式碼可用C/C++/SystemC編寫。比如Synopsys提供的IP_Router例子的軟體程式碼是用SystemC寫的;軟體程式碼編譯採用ARM公司提供的編譯器,包括armcc、armasm、armlink等。軟體程式碼除錯器可用ARM提供的ADU、AXD等。

通常系統設計流程經過反覆迴圈進行演算法模擬和分析,確定演算法結構,然後逐漸細化演算法模組,使之成為可實現的邏輯模組。在上述過程中,設立起來的演算法鏈路用途比較單一。而在現代複雜的系統開發過程中,由於在Spec階段進行系統建模分析,採用已有的演算法鏈路形成的參考模型(RM)將會節省大量的時間和人力。

實際計畫中,在SLD階段,原來由Cossap搭建的基頻處理演算法鏈路(可認為是SystemC階段無時序模型,基於數據串流驅動的模型)可重用成RM模型,透過對演算法模型進行時序封裝(加時序Wrapper),可以掛接到基於ARM的系統架構上。根據模組介面需求進行封裝,RM模型需求的抽象程度可逐漸細化。例如,最初模型介面是粗糙的時序功能模型或匯流排精確級模型,演算法模組被封裝成時序級或匯流排級與匯流排的IF進行交互,就能逐漸細化到循環精確級模型,以接近更準確的介面時序。可以透過Wrapper的設計來完成模型的介面與真實硬體實現的逼近。例如,逼近邏輯模組與匯流排進行的事件及中斷交互等。用演算法建模模擬速度要比結構模型快10∼100倍。(見表1)我們採用在CCSS環境中進行結構與演算法模型聯合建模模擬。

SLD級演算法和結構的聯合建模模擬

將UTF模組透過封裝在架構中進行模擬。在SLD設計過程中,演算法模組可以認為是抽象的RM(UTF),因此在演算法模組周邊透過封裝時序介面的Wrapper,可以達到作為高層次抽象級的RM,以實現可執行的架構規格。

在SLD級實現可執行的架構規格有利於進行初步系統架構的性能分析;為邏輯設計提供介面參考,或者與邏輯設計部份協調好介面;可以逐步明確詳細的軟硬體劃分方案;為後面的模擬、原型和驗證等提供數據對比。

系統級軟硬體劃分(見圖3)。基頻結構包含了FDD數據機絕大部份的功能子模組和層1軟體程式,層1的軟體與FDD數據機功能模組進行控制流程式交互。圖中發送器的功能是將訊息通道編碼作為輸入作為實體訊息通道的數據部份發送。

SLD建模可明確劃分出圖中層1邏輯模組與層1軟體,確定層1硬體模組和軟體部份進行交互的事件和中斷。其中,硬體模組原型可由UTF的演算法模組加上匯流排介面模型,作為UTF RM進行建模和模擬。在UTF基礎上,可進一步利用SystemC改寫演算法模組和匯流排之間的介面模型,使該模型能夠描述圖中層1邏輯模組與層1軟體/CPU進行交互的介面時序。

TLM級RM的設立表1:算法和結构建模的對比。

基頻模組中,如小區搜索鏈路等頂層演算法模型是一個封閉的鏈路,作為DFG的整體,Symbol沒有輸入和輸出埠,而要將演算法模型封裝上的時序模型掛接到匯流排上,就需要將演算法模型引出輸入和輸出埠,在原有數據源輸入處將數據源去掉,改成輸入埠,這樣由Wrapper封裝透過AMBA匯流排進行數據源輸入,即透過匯流排上CPU模型執行指令程式碼將相應的數據配置送入作為硬體行為的演算法數據串流中。同樣,輸出埠可由Wrapper封裝透過AMBA匯流排進行輸出讀取。

如圖4所示,將頂層演算法模型掛接到AHB匯流排上,需要增加用於AHB匯流排作業的Wrapper,Wrapper與AHB匯流排透過AHB匯流排通道連接,Wrapper透過繼承AHB_Slave介面類與AHB匯流排介面進行匯流排存取作業,通道為AHB_Slave_if類,Wrapper與頂層演算法模型相接進行數據串流交互,其間的通道為FIFO類型。

在基頻實體層鏈路中小區搜索鏈路模型,輸入為數據源,輸出為擾碼識別號。SCF約束文件中設置的最大模擬的模組數在聯合模擬時可大幅縮小,以縮短演算法模組模擬時間。另外,由原Cossap的ASN文件倒換過來的SCF文件存在小的語法錯誤,在啟動模擬調用SCF文件時會出現提示,要根據提示修改SCF中相應的內容。

在SLD模擬中,系統編譯結束後硬體模擬開始,啟動ADU調用軟體程式進行協同模擬,當匯流排存取到Wrapper封裝的演算法模組時,演算法模組進行模擬,數據結果傳送給Wrapper。Wrapper與AHB匯流排之間透過通道連接,Wrapper作為從模型,透過SystemC函數完成暫存器配置和地址空間映射,透過繼承AHB_Slave_IF類函數進行匯流排讀、寫、控制狀態(control_info),如觸發模式,以及Trans、Prot等行為。

Wrapper的頭文件中繼承了AHB匯流排介面Ahb_Slave_if類,透過通道連接Wrapper與AHB匯流排模型之間的介面,調用介面方式來作業與AHB匯流排的register_bus、set_data、response、read、write、control_info、get_address_map、name功能,因而完成對應的匯流排作業。構造體為Wrapper(sc_module_name, ahb_addr_t),需要初始設置的參數是SlaveID。Wrapper模組中定義了sc_module_name和基地址,使用該Slave時需要配置基地址,初始時需要配置SlaveID的值,以便解碼器進行地址解碼。在Slave配置介面中,函數register_port()用於獲取Master的參數配置;register_bus()用於返回SlaveID的值;set_data()用於設置儲存緩衝器的頭指針,以顯示用於讀寫Slave的地址;response響應Slave在上一個地址周期中讀寫的作業狀態;read為Slave讀作業;write為Slave寫作業;control_info為匯流排控制資訊;direct_read、direct_write作為Master的直接存取介面。(具體請參見CLI函數定義和說明)

RM模型與軟體的協同除錯

ARM架構是基於示例IP_Router進行修改的,Synopsys提供了一個IP Router的例子,其中最簡單的SOC原型系統包括ARM926EJ-S處理器模型,獨立的數據匯流排和指令匯流排,數據AHB BUS上有譯碼器和仲裁器。在此基礎上我們裁剪並保留了ARM926EJ-S和雙層匯流排系統,增加了RM模型,作為從模型掛接在DAHB匯流排上,其中需配置解碼器對該從模型進行地址譯碼。Wrapper具有hclk和hresetn訊號線。

CCSS在演算法鏈路編譯時,如果出現提示行“pre-compiled Cossap Library...........*.a is imported and used in System Studio library MS_MODH, you might need to enter‘make lib’command to re-compile”,顯示無法找到MS_MODH庫,這時需要清空MS_MODH等庫,重新建構目標程式碼後,產生-g、-u、-o等庫,才可正確編譯。若除錯時出現諸如“no rule to make target‘.../ccsssystemc.h’”的提示,如果工程名為SLDwork,則刪除lib-gccsparcOS5下的*lib-g目錄下對應的工程名為SLDwork.a的文件,該文件在每次編譯時都打包或增加每個子模組的.o編譯結果(即cr-a每個子模組),當子模組被刪除後,如果該工程的.a文件沒有刪除,則會繼續按.a文件原模組的規則來構造目標。

軟體模組非常簡單,在對RM模型的Slave模組進行作業的部份中,RM Slave在記憶體配置中為FIFO類型(暫存器),因此軟體適用於讀RM Slave對應地址的暫存器值,程式碼如下:


_start_address = get_destination_address();//獲取RM Slave對應的記憶體地址


read_memory( _start_address , &local_flags);//讀取該地址的值


其中read採用AHB匯流排埠的Burst_Read類型的CLI函數:

burst_read( ahb_data_t, // 數據緩衝器


ahb_addr_t, // 起始地址


int, // 脈衝時間


ahb_hburst, // 觸發模式


ahb_hsize = SIZE_32); // 傳輸數據大小

在軟體編譯和除錯階段,程式碼*.cpp、*.h透過Makefile編譯成AXF文件,連接過程中需進行初始化文件init.s設置和向量表設置等。AXF文件透過ADU/AXD除錯器載入Image文件後進行除錯。

本文總結

系統級建模和驗證在如今規模龐大的SoC設計中佔據越來越重要的地位,透過設立系統級的抽象模型,模擬或驗證給出定量的分析數據,因而可以指導SoC設計人員在系統規格階段就能夠根據系統的性能需求作出正確的設計,並在系統級設計基礎上進行軟硬體模組劃分等。

通常的設計流程需要在演算法模型成為行為級/RTL程式碼級的邏輯模組之後,才能進行整體性能的分析,而無法實現在系統規格階段即對系統性能需求,包括對演算法性能需求進行分析。

本文提出一種新方法,可以在系統級設計階段即可將演算法和結構模組聯合建模,因而設立基於架構的虛擬原型系統模型,並可進行模擬和性能分析。其主要思路是,在SLD設計階段將演算法模型(基於數據串流驅動的模型)重用成RM模型,透過對演算法模型進行時序封裝,掛接到基於AMBA匯流排系統的架構上進行模擬驗證。本文還闡述了將上述演算法模組和以AMBA匯流排為基礎,以ARM926EJS為核的雙層匯流排架構模組連接,在CCSS環境下進行聯合設計驗證及軟硬體協同除錯的過程。

作者:韓澤耀


SoC系統設計工程師


Email: zeyaohan@huawei.com


華為技術有限公司上海研究所





投票數:   加入我的最愛
我來評論 - 一種演算法與結構模組聯合建模的系統級...
評論:  
*  您還能輸入[0]個字
*驗證碼:
 
論壇熱門主題 熱門下載
 •   將邁入40歲的你...存款多少了  •  深入電容觸控技術就從這個問題開始
 •  我有一個數位電源的專利...  •  磷酸鋰鐵電池一問
 •   關於設備商公司的工程師(廠商)薪資前景  •  計算諧振轉換器的同步整流MOSFET功耗損失
 •   Touch sensor & MEMS controller  •  針對智慧電表PLC通訊應用的線路驅動器
 •   下週 深圳 llC 2012 關於PCB免費工具的研討會  •  邏輯閘的應用


EE人生人氣排行
 
返回頁首