0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SystemC的隨機(jī)驗(yàn)證過(guò)程是怎樣的?

sanyue7758 ? 來(lái)源:處芯積律 ? 2023-08-07 09:43 ? 次閱讀

SystemC是基于C++的系統(tǒng)級(jí)設(shè)計(jì)語(yǔ)言,兼具描述硬件電路模型和面向?qū)ο蟮某橄竽芰?。?a href="http://www.wenjunhu.com/v/tag/137/" target="_blank">芯片設(shè)計(jì)開(kāi)發(fā)中,常用于芯片架構(gòu)的建模、性能仿真和評(píng)估、軟硬件聯(lián)合仿真等場(chǎng)景。尤其是在融合TLM2.0事務(wù)級(jí)建模方法以后,SystemC的模型也出現(xiàn)事務(wù)級(jí)、cycle級(jí)等不同抽象等級(jí)的劃分,用于不同的場(chǎng)景需求。

隨著基于systemC建模的廣泛適用,對(duì)SC模型的驗(yàn)證也是應(yīng)運(yùn)而生;正如Systemverilog用于對(duì)verilog的驗(yàn)證。SystemC Verification (SCV)就是SC中的一個(gè)驗(yàn)證庫(kù),其包含了:

transaction-based verification

data introspection

constrainted and weighted randomization

01cc2b1a-3473-11ee-9e74-dac502259ad0.png

這篇文章準(zhǔn)備介紹SCV中的約束隨機(jī):constrainted randomization。在systemverilog中隨機(jī)約束是CDV的一大利器,SV中具有豐富的隨機(jī)表達(dá)語(yǔ)法,比如inside、dist、solve before、->、unique等。C/C++中卻不具備如此豐富的約束能力,而SCV作為SC的驗(yàn)證庫(kù),引入了約束隨機(jī)描述。

Basic Randomization

無(wú)論是sc內(nèi)建的基本數(shù)據(jù)類(lèi)型,如sc_int/sc_uint等;還是自定義的struct數(shù)據(jù),都可以使用scv_smart_ptr修飾,進(jìn)行基本的隨機(jī)化操作。常見(jiàn)的用法如下:

//基本數(shù)據(jù)類(lèi)型隨機(jī)
scv_smart_ptr< sc_uint<8> > data; 
data->next(); 
//自定義數(shù)據(jù)結(jié)構(gòu)隨機(jī)
struct packet_t { 
int data; 
int array[10]; 
}; 
scv_smart_ptr< packet_t > p; 
// generate a random value and assign it to the data field 
p->data.next(); 


//generate a random value and assign it to the array element with index 3 
p->array[3].next(); 


// generate random values for all fields and all array elements 
p->next(); 


// generate random values for all fields and all array elements, 
//except for the data field
p->data.disable_randomization(); 
p->next();

scv_smart_ptr會(huì)例化一個(gè)內(nèi)部的隨機(jī)對(duì)象,使用next方法產(chǎn)生隨機(jī)值。
對(duì)于自定義符合數(shù)據(jù)結(jié)構(gòu),也可以只針對(duì)其中部分參數(shù)進(jìn)行隨機(jī);不需要隨機(jī)的參數(shù),使用disable_randomization關(guān)閉隨機(jī)。

Constrained Randomization

上述的簡(jiǎn)單約束,可以使用scv_smart_ptr實(shí)現(xiàn)。對(duì)于其他的復(fù)雜約束,則需要借助scv_constraint_base實(shí)現(xiàn)。(scv_smart_ptr可以認(rèn)為是systemverilog中的random函數(shù),而constraint或者solve-before,則必須要在class中實(shí)現(xiàn))。
用法如下:

class write_constraint : virtual public scv_constraint_base { 
public: 
scv_smart_ptr< rw_task_if::write_t > write; 
SCV_CONSTRAINT_CTOR(write_constraint) { 
SCV_CONSTRAINT( write->addr() < 0x00FF ); 
SCV_CONSTRAINT( write->addr() != write->data() ); 
} 
}; 
//上面SCV代碼的systemverilog等效格式:
class write_constraint extend scv_constraint_base ; 
rand rw_task_if::write_t  write; 
constraint write_constraint { 
write.addr < 0x00FF; 
write.addr != write.data; 
} 
endclass

在scv_constraint_base擴(kuò)展出的子類(lèi)中,需要隨機(jī)的參數(shù)仍需要使用scv_smart_ptr修飾。使用SCV_CONSTRAINT_CTOR聲明一段約束,SCV_CONSTRAINT用于添加一條約束表達(dá)式。
約束表達(dá)式可以支持:算術(shù)表達(dá)式(+,-,*,/),關(guān)系表達(dá)式(==, !=, >, >=, <, <=),邏輯表達(dá)式( !, &&, ||)。約束表達(dá)式有三種:

1.SCV_CONSTRAINT代表是一種hard constraint;

2.SCV_SOFT_CONSTRAINT表達(dá)一種soft constraint;

3. SCV_BASE_CONSTRAINT代表基類(lèi)中的約束。

此處的hard和soft constraint含義和systemverilog中soft修飾隨機(jī)的含義基本一致。

上述的隨機(jī)類(lèi)定義好后,便可以進(jìn)行實(shí)例化和隨機(jī)。前面提到的disable_randomization仍然可以使用,并且統(tǒng)一使用next方法進(jìn)行隨機(jī)生成。

write_constraint c("write constraint"); 
for (int i=0; i<2; ++i) { 
c.next(); 
cout << *c.write << endl; 
} 


write_constraint c("write constraint"); 
c.write->addr->disable_randomization(); 
for (int i=0; i<2; ++i) { 
c.write->addr = i; 
c.next(); 
cout << *c.write << endl; 
}

Weight and Biased Randomization

在systemverilog隨機(jī)約束中,經(jīng)常會(huì)使用到inside、dist,用來(lái)表達(dá)帶有權(quán)重的隨機(jī)。同樣,SCV支持指定范圍隨機(jī)和帶權(quán)重的隨機(jī),通過(guò)scv_bag實(shí)現(xiàn)。scv_bag可以用來(lái)收集需要范圍隨機(jī)信息以及權(quán)重信息。
單值權(quán)重設(shè)置使用scv_bag表達(dá),實(shí)例:

scv_bag bag; 
bag.push(1,60); 
bag.push(2,40); 
scv_smart_ptr data; 
data->set_mode(bag); 
data->next(); 
//systemverilog的等效表達(dá)
rand int data;
data dist {1:/60,2:/40};

在scv_bag收集好權(quán)重信息后,通過(guò)set_mode函數(shù)傳遞給參數(shù)的隨機(jī)對(duì)象即可。范圍權(quán)重設(shè)置使用scv_bag< pair< int,int> >表達(dá),實(shí)例:

scv_smart_ptr data; 
scv_bag< pair< int,int> > distribution; 
distribution.push( pair(0,1), 40); 
distribution.push( pair(2,10), 60); 
data->set_mode(distribution); 
data->next(); 
//systemverilog的等效表達(dá)
rand int data;
data dist {[0:1]:/60,[2:10]:/40};

從上面可以看出如果需要添加范圍約束和權(quán)重約束,就必須要定義scv_bag,添加約束范圍和權(quán)重,并通過(guò)set_mode設(shè)置,稍顯復(fù)雜。因此SCV中引入keep_only和keep_out方法,用于添加隨機(jī)約束范圍,類(lèi)似systemverilog中的inside和~inside。

scv_smart_ptr i; 
i->keep_only(0,4); 
i->keep_out(2); 
i->next(); 
// generate a value among { 0, 1, 3, 4 } 
//如果使用scv_bag方式,方法如下:
scv_smart_ptr i; 
scv_bag bag; 
bag.add(0); bag.add(1); bag.add(3);bag.add(4);  
i->next();

keep_only和keep_out除了可以接受固定數(shù)值外,還可以接收l(shuí)ist類(lèi)型的變量。

scv_smart_ptr i; 
list i_range;
i_range.push_back(0);
i_range.push_back(4);
i->keep_only(i_range); 
i->keep_out(2); 
i->next(); 
// generate a value among { 0, 3, 4 }

總結(jié)來(lái)看,設(shè)置隨機(jī)約束有如下方式:

set_mode方法

keep_only、keep_out方法

SCV_CONSTRAINT約束表達(dá)式

set_mode和keep_only/out的隨機(jī)約束設(shè)置會(huì)進(jìn)行覆蓋。使用reset_distribution方法可以取消set_mode和keep_only/out方法設(shè)置的隨機(jī)約束。實(shí)例如下:

scv_smart_ptr i; 
i->keep_only(0,4); 
i->keep_out(2); 
i->next(); // generate a value among { 0, 1, 3, 4 } 
 
scv_bag b; 
b.add(2); b.add(7); 
i->set_mode(b); 
i->next(); // generate a value among {2,7} 


i->reset_distribution(); 
i->next(); // generate a value between INT_MIN and INT_MAX.

寫(xiě)在最后

SCV 約束除了作為SC模型的驗(yàn)證隨機(jī)約束外,一方面可以把SC模型階段的驗(yàn)證激勵(lì)復(fù)用到中后期的RTL驗(yàn)證;

0203e56e-3473-11ee-9e74-dac502259ad0.png

另一方面還可以在CPU核相關(guān)的C語(yǔ)言case中使用,由于SCV是基于C/C++語(yǔ)言,因此可以比較容易地和C based case結(jié)合,具體融合方式需要一些轉(zhuǎn)接件,這個(gè)后續(xù)有機(jī)會(huì)再做介紹。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片設(shè)計(jì)
    +關(guān)注

    關(guān)注

    15

    文章

    1023

    瀏覽量

    54931
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1019

    瀏覽量

    83803
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137111
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59849
  • Verilog語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8277

原文標(biāo)題:聊聊SystemC的驗(yàn)證隨機(jī)

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    [1.6.1]--1.6.1學(xué)習(xí)視頻-典型隨機(jī)過(guò)程

    隨機(jī)過(guò)程
    jf_75936199
    發(fā)布于 :2023年03月09日 01:01:58

    如何在ModelSim下用SystemC的做驗(yàn)證?

    如何在ModelSim下編譯和仿真SystemC的設(shè)計(jì)?如何在ModelSim下用SystemC的做驗(yàn)證?SystemC作為一種系統(tǒng)級(jí)設(shè)計(jì)與驗(yàn)證
    發(fā)表于 03-01 11:30

    如何基于uvm方法學(xué)采用systemc進(jìn)行IC驗(yàn)證?

    請(qǐng)教各位大佬,UVM是基于sv的驗(yàn)證方法學(xué),如果采用systemc語(yǔ)言編程,如何實(shí)現(xiàn)?
    發(fā)表于 11-07 15:30

    怎樣去描述RRM測(cè)試中的隨機(jī)接入過(guò)程

    怎樣去介紹隨機(jī)接入過(guò)程?隨機(jī)接入過(guò)程包括哪些步驟?RRM測(cè)試中對(duì)隨機(jī)接入有哪些硬性規(guī)定?
    發(fā)表于 04-15 06:42

    硬件驗(yàn)證語(yǔ)言——簡(jiǎn)介

    HDL 中的易于位級(jí)操作的特性。許多 HVL 將提供受約束的隨機(jī)激勵(lì)生成和功能覆蓋構(gòu)造,以協(xié)助進(jìn)行復(fù)雜的硬件驗(yàn)證。如果 HDL 意味著設(shè)計(jì),那么 HVL 意味著驗(yàn)證那些 HDL 代碼。 現(xiàn)在問(wèn)題來(lái)了
    發(fā)表于 02-16 13:36

    SystemC進(jìn)行SoC的系統(tǒng)級(jí)設(shè)計(jì)與仿真

    IC 技術(shù)已發(fā)展到SoC 階段,系統(tǒng)級(jí)設(shè)計(jì)、仿真和驗(yàn)證已成為IC 設(shè)計(jì)面臨的巨大挑戰(zhàn)。SystemC 是新興的系統(tǒng)級(jí)設(shè)計(jì)語(yǔ)言,為復(fù)雜系統(tǒng)的設(shè)計(jì)與驗(yàn)證提供了解決方案。本文介紹SystemC
    發(fā)表于 05-18 13:44 ?28次下載

    設(shè)計(jì)驗(yàn)證中的隨機(jī)約束

    隨機(jī)約束在現(xiàn)代集成電路驗(yàn)證中已得到國(guó)際IC 設(shè)計(jì)業(yè)界的普遍認(rèn)可,并逐漸開(kāi)始普及。與傳統(tǒng)的定向測(cè)試比較,它在驗(yàn)證效率、驗(yàn)證覆蓋率等方面具有諸多優(yōu)勢(shì)。最新公布的Sys
    發(fā)表于 12-14 09:54 ?13次下載

    基于SystemC的系統(tǒng)驗(yàn)證研究和應(yīng)用

    視頻編解碼芯片中運(yùn)動(dòng)估計(jì)與補(bǔ)償單元(MECU)的算法復(fù)雜,使用傳統(tǒng)硬件描述語(yǔ)言建立模型和模型驗(yàn)證過(guò)程繁瑣耗時(shí),為了縮短芯片驗(yàn)證時(shí)間,本文針對(duì)MECU模塊提出了基于SystemC語(yǔ)言
    發(fā)表于 02-24 12:07 ?16次下載

    應(yīng)用隨機(jī)過(guò)程

    應(yīng)用隨機(jī)過(guò)程是現(xiàn)代應(yīng)用隨機(jī)過(guò)程教材,內(nèi)容從入門(mén)知識(shí)到學(xué)術(shù)前沿,包括預(yù)備知識(shí)、隨機(jī)過(guò)程的基本類(lèi)型、
    發(fā)表于 03-19 08:47 ?0次下載

    數(shù)字專(zhuān)用集成電路設(shè)計(jì)中的SystemC建模驗(yàn)證方法

    數(shù)字專(zhuān)用集成電路設(shè)計(jì)中的SystemC建模驗(yàn)證方法
    發(fā)表于 07-17 16:36 ?31次下載

    SystemC 和SystemVerilog的比較

    SystemC 和 SystemVerilog 這兩種語(yǔ)言而言, SystemC 是C++在硬件支持方面的擴(kuò)展,而 SystemVerilog 則繼承了 Verilog,并對(duì) Verilog 在面向?qū)ο蠛?b class='flag-5'>驗(yàn)證能力方面進(jìn)行了擴(kuò)
    發(fā)表于 08-16 10:52 ?5399次閱讀

    SystemC驗(yàn)證方法和流程介紹

    SystemC 是由C++衍生而來(lái),本質(zhì)是在C++的基礎(chǔ)上添加了硬件擴(kuò)展庫(kù)和仿真核,這使SystemC 可以在不同抽象級(jí)對(duì)復(fù)雜電子系統(tǒng)建模。
    發(fā)表于 07-19 11:55 ?5098次閱讀
    <b class='flag-5'>SystemC</b> 的<b class='flag-5'>驗(yàn)證</b>方法和流程介紹

    采用SystemC ESL設(shè)計(jì)的九個(gè)理由

    支持SystemC的電子系統(tǒng)級(jí)(ESL)設(shè)計(jì)和驗(yàn)證環(huán)境旨在設(shè)計(jì),分析,優(yōu)化和驗(yàn)證片上系統(tǒng)(SoC)平臺(tái)模型。這樣的環(huán)境構(gòu)成了已建立的RTL實(shí)現(xiàn)流程的前端。
    的頭像 發(fā)表于 10-03 17:05 ?5216次閱讀

    看看使用芯片驗(yàn)證隨機(jī)帶來(lái)的六宗罪

    以前看到不少驗(yàn)證技術(shù)書(shū)籍都在說(shuō)驗(yàn)證環(huán)境中隨機(jī)怎么怎么好,然后為了隨機(jī),UVM,SV 提供了什么什么支持。
    的頭像 發(fā)表于 04-10 11:21 ?702次閱讀

    怎樣設(shè)計(jì)和驗(yàn)證TRL校準(zhǔn)件以及TRL校準(zhǔn)的具體過(guò)程

    怎樣設(shè)計(jì)和驗(yàn)證TRL 校準(zhǔn)件以及TRL 校準(zhǔn)的具體過(guò)程
    發(fā)表于 12-14 09:40 ?0次下載