精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SystemC的隨機驗證過程是怎樣的?

sanyue7758 ? 來源:處芯積律 ? 2023-08-07 09:43 ? 次閱讀

SystemC是基于C++的系統級設計語言,兼具描述硬件電路模型和面向對象的抽象能力。在芯片設計開發中,常用于芯片架構的建模、性能仿真和評估、軟硬件聯合仿真等場景。尤其是在融合TLM2.0事務級建模方法以后,SystemC的模型也出現事務級、cycle級等不同抽象等級的劃分,用于不同的場景需求。

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

transaction-based verification

data introspection

constrainted and weighted randomization

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

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

Basic Randomization

無論是sc內建的基本數據類型,如sc_int/sc_uint等;還是自定義的struct數據,都可以使用scv_smart_ptr修飾,進行基本的隨機化操作。常見的用法如下:

//基本數據類型隨機
scv_smart_ptr< sc_uint<8> > data; 
data->next(); 
//自定義數據結構隨機
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會例化一個內部的隨機對象,使用next方法產生隨機值。
對于自定義符合數據結構,也可以只針對其中部分參數進行隨機;不需要隨機的參數,使用disable_randomization關閉隨機。

Constrained Randomization

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

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擴展出的子類中,需要隨機的參數仍需要使用scv_smart_ptr修飾。使用SCV_CONSTRAINT_CTOR聲明一段約束,SCV_CONSTRAINT用于添加一條約束表達式。
約束表達式可以支持:算術表達式(+,-,*,/),關系表達式(==, !=, >, >=, <, <=),邏輯表達式( !, &&, ||)。約束表達式有三種:

1.SCV_CONSTRAINT代表是一種hard constraint;

2.SCV_SOFT_CONSTRAINT表達一種soft constraint;

3. SCV_BASE_CONSTRAINT代表基類中的約束。

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

上述的隨機類定義好后,便可以進行實例化和隨機。前面提到的disable_randomization仍然可以使用,并且統一使用next方法進行隨機生成。

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隨機約束中,經常會使用到inside、dist,用來表達帶有權重的隨機。同樣,SCV支持指定范圍隨機和帶權重的隨機,通過scv_bag實現。scv_bag可以用來收集需要范圍隨機信息以及權重信息。
單值權重設置使用scv_bag表達,實例:

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

在scv_bag收集好權重信息后,通過set_mode函數傳遞給參數的隨機對象即可。范圍權重設置使用scv_bag< pair< int,int> >表達,實例:

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的等效表達
rand int data;
data dist {[0:1]:/60,[2:10]:/40};

從上面可以看出如果需要添加范圍約束和權重約束,就必須要定義scv_bag,添加約束范圍和權重,并通過set_mode設置,稍顯復雜。因此SCV中引入keep_only和keep_out方法,用于添加隨機約束范圍,類似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除了可以接受固定數值外,還可以接收list類型的變量。

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 }

總結來看,設置隨機約束有如下方式:

set_mode方法

keep_only、keep_out方法

SCV_CONSTRAINT約束表達式

set_mode和keep_only/out的隨機約束設置會進行覆蓋。使用reset_distribution方法可以取消set_mode和keep_only/out方法設置的隨機約束。實例如下:

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.

寫在最后

SCV 約束除了作為SC模型的驗證隨機約束外,一方面可以把SC模型階段的驗證激勵復用到中后期的RTL驗證;

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

另一方面還可以在CPU核相關的C語言case中使用,由于SCV是基于C/C++語言,因此可以比較容易地和C based case結合,具體融合方式需要一些轉接件,這個后續有機會再做介紹。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片設計
    +關注

    關注

    15

    文章

    1005

    瀏覽量

    54819
  • 仿真器
    +關注

    關注

    14

    文章

    1016

    瀏覽量

    83647
  • C語言
    +關注

    關注

    180

    文章

    7601

    瀏覽量

    136251
  • RTL
    RTL
    +關注

    關注

    1

    文章

    385

    瀏覽量

    59710
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8219

原文標題:聊聊SystemC的驗證隨機

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    [1.6.1]--1.6.1學習視頻-典型隨機過程

    隨機過程
    jf_75936199
    發布于 :2023年03月09日 01:01:58

    如何在ModelSim下用SystemC的做驗證

    如何在ModelSim下編譯和仿真SystemC的設計?如何在ModelSim下用SystemC的做驗證SystemC作為一種系統級設計與驗證
    發表于 03-01 11:30

    如何基于uvm方法學采用systemc進行IC驗證?

    請教各位大佬,UVM是基于sv的驗證方法學,如果采用systemc語言編程,如何實現?
    發表于 11-07 15:30

    怎樣去描述RRM測試中的隨機接入過程

    怎樣去介紹隨機接入過程隨機接入過程包括哪些步驟?RRM測試中對隨機接入有哪些硬性規定?
    發表于 04-15 06:42

    硬件驗證語言——簡介

    HDL 中的易于位級操作的特性。許多 HVL 將提供受約束的隨機激勵生成和功能覆蓋構造,以協助進行復雜的硬件驗證。如果 HDL 意味著設計,那么 HVL 意味著驗證那些 HDL 代碼。 現在問題來了
    發表于 02-16 13:36

    SystemC進行SoC的系統級設計與仿真

    IC 技術已發展到SoC 階段,系統級設計、仿真和驗證已成為IC 設計面臨的巨大挑戰。SystemC 是新興的系統級設計語言,為復雜系統的設計與驗證提供了解決方案。本文介紹SystemC
    發表于 05-18 13:44 ?28次下載

    設計驗證中的隨機約束

    隨機約束在現代集成電路驗證中已得到國際IC 設計業界的普遍認可,并逐漸開始普及。與傳統的定向測試比較,它在驗證效率、驗證覆蓋率等方面具有諸多優勢。最新公布的Sys
    發表于 12-14 09:54 ?13次下載

    基于SystemC的系統驗證研究和應用

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

    應用隨機過程

    應用隨機過程是現代應用隨機過程教材,內容從入門知識到學術前沿,包括預備知識、隨機過程的基本類型、
    發表于 03-19 08:47 ?0次下載

    數字專用集成電路設計中的SystemC建模驗證方法

    數字專用集成電路設計中的SystemC建模驗證方法
    發表于 07-17 16:36 ?31次下載

    SystemC 和SystemVerilog的比較

    SystemC 和 SystemVerilog 這兩種語言而言, SystemC 是C++在硬件支持方面的擴展,而 SystemVerilog 則繼承了 Verilog,并對 Verilog 在面向對象和驗證能力方面進行了擴
    發表于 08-16 10:52 ?5356次閱讀

    SystemC驗證方法和流程介紹

    SystemC 是由C++衍生而來,本質是在C++的基礎上添加了硬件擴展庫和仿真核,這使SystemC 可以在不同抽象級對復雜電子系統建模。
    發表于 07-19 11:55 ?5027次閱讀
    <b class='flag-5'>SystemC</b> 的<b class='flag-5'>驗證</b>方法和流程介紹

    采用SystemC ESL設計的九個理由

    支持SystemC的電子系統級(ESL)設計和驗證環境旨在設計,分析,優化和驗證片上系統(SoC)平臺模型。這樣的環境構成了已建立的RTL實現流程的前端。
    的頭像 發表于 10-03 17:05 ?5104次閱讀

    看看使用芯片驗證隨機帶來的六宗罪

    以前看到不少驗證技術書籍都在說驗證環境中隨機怎么怎么好,然后為了隨機,UVM,SV 提供了什么什么支持。
    的頭像 發表于 04-10 11:21 ?663次閱讀

    怎樣設計和驗證TRL校準件以及TRL校準的具體過程

    怎樣設計和驗證TRL 校準件以及TRL 校準的具體過程
    發表于 12-14 09:40 ?0次下載