如何在SoC設(shè)計(jì)中使用事務(wù)處理(一)
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:便于操控句柄。
評(píng)論