如何在SoC設(shè)計(jì)中使用事務(wù)處理(一)
建模、驗(yàn)證與調(diào)試需要統(tǒng)一標(biāo)準(zhǔn)的符號(hào)和框架,以便使架構(gòu)師和設(shè)計(jì)工程師能夠協(xié)同進(jìn)行復(fù)雜SoC的開發(fā)。事務(wù)處理級(jí)模型(TLM)是進(jìn)行這種分析的理想模型,在片上系統(tǒng)(SoC)設(shè)計(jì)中使用事務(wù)處理級(jí)建模,可讓設(shè)計(jì)從高效率協(xié)同仿真和高產(chǎn)出的分析與調(diào)試中受益。
片上系統(tǒng)(SoC)平臺(tái)是異質(zhì)性的實(shí)體。它們通常包含至少一個(gè)處理器部件(譬如微處理器或DSP),以及外圍設(shè)備、隨機(jī)邏輯、嵌入式存儲(chǔ)器、通訊基礎(chǔ)結(jié)構(gòu)和傳感器、傳動(dòng)裝置之類的外部接口元件。這些變化多樣的設(shè)計(jì)平臺(tái)正在將設(shè)計(jì)焦點(diǎn)和折衷分析轉(zhuǎn)移至通訊層面。
由 于SoC內(nèi)的功能單元常常是通過(guò)若干標(biāo)準(zhǔn)及基于數(shù)據(jù)總線的專有協(xié)議來(lái)實(shí)現(xiàn)通信,所以理解模塊間通訊已經(jīng)成為驗(yàn)證的一個(gè)關(guān)鍵。設(shè)計(jì)活動(dòng)向通訊基礎(chǔ)架構(gòu)設(shè)計(jì)的 轉(zhuǎn)移,也促進(jìn)了對(duì)混合級(jí)建模以及調(diào)試技術(shù)的使用。這些技術(shù)使設(shè)計(jì)工程師能夠完全應(yīng)對(duì)從電阻晶體管邏輯電路(RTL)到更高事務(wù)處理級(jí)的轉(zhuǎn)移,而且無(wú)需中斷 使用目前的功能驗(yàn)證方法。
有鑒于現(xiàn)今協(xié)議的復(fù)雜性,要詳盡理解信號(hào)級(jí)上的同步互動(dòng)是艱難而又費(fèi)時(shí)的。此外,由于不同的團(tuán)隊(duì)和個(gè)人都將設(shè)計(jì)視為從規(guī)格到實(shí)現(xiàn)的提煉過(guò)程,所以各個(gè)設(shè)計(jì)團(tuán)隊(duì)之間以及團(tuán)隊(duì)內(nèi)部都需要找到一個(gè)通用參考框架(frame)。
有代表性的參考標(biāo)準(zhǔn)必須足夠靈活以便適合于多個(gè)應(yīng)用領(lǐng)域。它也必須經(jīng)得起抽象和提煉,以便適用于由上而下設(shè)計(jì)或由下而上的配置。事務(wù)處理級(jí)建模(TLM)被用作所需的中間建模抽象級(jí),成為連接頂層和底層的橋梁。
事務(wù)處理級(jí)建模的概念
目前的SoC設(shè)計(jì)流程是一個(gè)混合過(guò)程,包括由上而下的從規(guī)格制定到實(shí)現(xiàn)、從下而上的設(shè)計(jì)模塊集成,以及對(duì)來(lái)自外部供應(yīng)商或內(nèi)部重用模塊的知識(shí)產(chǎn)權(quán)的驗(yàn)證。事 務(wù)處理可以作為連接不同設(shè)計(jì)建模層間間隙的一個(gè)最終優(yōu)化規(guī)范。這包括用高級(jí)語(yǔ)言實(shí)現(xiàn)的無(wú)時(shí)序(untimed)純功能性建模、通過(guò)架構(gòu)估計(jì)得到大致時(shí)序的 功能級(jí),一直到實(shí)現(xiàn)級(jí)、循環(huán)精確的RTL。
除此之外,事務(wù)處理級(jí)建模也作為系統(tǒng)工程師和專用模塊開發(fā)者之間的一個(gè)通用描述性媒介而發(fā)揮著 作用,該媒介超越了不同的適用于具體設(shè)計(jì)或驗(yàn)證活動(dòng)的語(yǔ)言的界限。于是,事務(wù)處理就變成實(shí)施構(gòu)架開發(fā)和折衷分析的一種形式。它是一種通過(guò)分析系統(tǒng)功能有效 性和性能度量(譬如整體吞吐量、模塊與存儲(chǔ)器交互延遲等)來(lái)自動(dòng)進(jìn)行設(shè)計(jì)理解和調(diào)試過(guò)程的手段。
圖1顯示的是從算法級(jí)到實(shí)現(xiàn)級(jí)的各個(gè)抽象級(jí),通常包括SystemC(IEEE P1666)、SystemVerilog(IEEE P1800)和e(IEEE P1647)在內(nèi)的幾種功能建模與驗(yàn)證語(yǔ)言(及標(biāo)準(zhǔn))被用于設(shè)計(jì)。另外,先進(jìn)的方法實(shí)踐,例如從OpenVera的“參考驗(yàn)證法指南”以及e的“e再使用法推薦”抽取出的方法實(shí)踐,為算法、構(gòu)架以及事務(wù)處理級(jí)建模提供參考。
事務(wù)處理級(jí)建模是一個(gè)相當(dāng)普通的應(yīng)用,它涉及并描述設(shè)計(jì)的每一個(gè)功能線程。事務(wù)處理級(jí)的焦點(diǎn)是“如何”進(jìn)行,特別是通訊交互“如何”進(jìn)行,而不在于功能是 “什么”。事務(wù)處理所提供的是執(zhí)行細(xì)節(jié)在時(shí)間上的抽象與空間上的封裝在――這是最初注重通訊基礎(chǔ)架構(gòu)而不是功能模塊的思想的體現(xiàn)。做這樣的抽象建模的好處 是驗(yàn)證效率高。事實(shí)上,對(duì)事務(wù)處理的運(yùn)用正變得日益廣泛、多種多樣,并成為主流。
在模塊間捕捉同步傳輸?shù)氖聞?wù)處理也注定會(huì)成為折衷分析中的重要角色。因此,建模與記錄事務(wù)處理對(duì)提升基于事務(wù)處理的驗(yàn)證和調(diào)試技術(shù)非常關(guān)鍵,而驗(yàn)證和調(diào)試技術(shù)是提高開發(fā)效率與設(shè)計(jì)質(zhì)量所必須的。
如何進(jìn)行事務(wù)處理級(jí)建模
高級(jí)語(yǔ)言(也稱為“HLL”,例如SystemC)、其它的硬件驗(yàn)證語(yǔ)言(也稱為“HVL”,例如OpenVera、e)以及測(cè)試向量(testbenchz)與硬件設(shè)計(jì)語(yǔ)言(例如SystemVerilog)對(duì)事務(wù)處理都有程度不一的內(nèi)在支持。SystemC (www.SystemC.org)可為建模語(yǔ)言內(nèi)置的用戶驅(qū)動(dòng)事務(wù)處理的創(chuàng)建提供支持,并可把它們記錄到數(shù)據(jù)庫(kù)中,就如同采用SCV函數(shù)庫(kù)的sc_trace()寫入數(shù)據(jù)庫(kù)一樣。SCV有許多預(yù)先定義的非常有用的類,包括下面三個(gè)主要的記錄對(duì)象:scv_tr_db: 事務(wù)處理數(shù)據(jù)庫(kù)對(duì)象,它允許用戶控制記錄。該對(duì)象是通用的且獨(dú)立于數(shù)據(jù)庫(kù)格式。第三方記錄API供應(yīng)商可以將底層服務(wù)對(duì)應(yīng)到他們自己的數(shù)據(jù)庫(kù)方案中。
scv_tr_stream: 事務(wù)處理流建模對(duì)象。流是一種抽象通訊方法,包括重疊事務(wù)處理在內(nèi)的事務(wù)處理可以發(fā)生流中,例如一個(gè)帶有讀/寫事務(wù)處理的存儲(chǔ)流。因此一個(gè)流可以被認(rèn)為是一個(gè)抽象信號(hào),在這個(gè)信號(hào)中事務(wù)處理是可以被信號(hào)使用的抽象值,例如一個(gè)數(shù)據(jù)傳送總線的地址或數(shù)據(jù)流。
scv_tr_generator: 圍繞一個(gè)特定的事務(wù)處理類別并且允許創(chuàng)建和增加屬性的對(duì)象,可以是包括設(shè)計(jì)信號(hào)和信息以及通用有效負(fù)載數(shù)據(jù)在內(nèi)的任何對(duì)象。
下面的代碼段 顯示了如何利用SCV以一種相對(duì)比較直接的方式創(chuàng)建事務(wù)處理。每一個(gè)代碼段前的注釋均指出其后語(yǔ)句的目的。事務(wù)處理可以以一種無(wú)縫的方式(不需要用戶的直 接干預(yù))被記錄進(jìn)數(shù)據(jù)庫(kù)中。為了實(shí)現(xiàn)這一點(diǎn),工具供應(yīng)商可以通過(guò)在上述三個(gè)類中提供的注冊(cè)機(jī)制來(lái)注冊(cè)回叫,從而實(shí)現(xiàn)記錄功能。用戶只需要增加一些初始化調(diào) 用即可。
// Inside sc_main() or some other context
// SCV startup
scv_startup();
// Initialization
API_vendor_initialization(); // set SCV callbacks here
scv_tr_db db("my_db");
scv_tr_db::set_default_db(&db);
// Define a stream and a generator
scv_tr_stream mem_stream("memory", "transactor");
scv_tr_generator read_gen("read", mem_stream, "mem");
scv_tr_handle tr_handle;
// Modeling code here
// Transaction begin with a tr_data attribute
tr_data.addr= addr_signal;
tr_data.data=data_signal;
tr_handle=write_gen.begin_transaction(tr_data);
// Transaction end
tr_handle.end_transaction();
// Other modeling code here
SCV也有許多其它的類,例如,在不同的事務(wù)處理之間建立關(guān)系的scv_tr_relation。在確定諸如前續(xù)-后繼之類的因果關(guān)系、如父-子之類的層次關(guān)系以及成分分析集合體時(shí),關(guān)系在分析以及調(diào)試方面都相當(dāng)有用。
由于OpenVera(www.open-vera.org)是一種面向?qū)ο蟮慕UZ(yǔ)言,它可以輕而易舉地容納事務(wù)處理級(jí)建模的封裝概念。該語(yǔ)言目前不具備與SCV類似的內(nèi)置事務(wù)處理類。但可有可能為了這一目的而創(chuàng)建類,例如下面的極小集:trans_db:用于數(shù)據(jù)庫(kù);
trans_stream:事務(wù)處理流建模對(duì)象;
trans_type:創(chuàng)建事務(wù)處理以及事務(wù)處理的屬性;
trans_handle:便于操控句柄。