chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

SystemVerilog中class是什么意思

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:驗證哥布林 ? 2022-11-14 09:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

class,是面向對象編程(object-oriented programming (OOP))的基礎,而OOP可以讓你創(chuàng)建更高抽象級別的驗證環(huán)境(如UVM)。

class就是相對于verilog更高級別的抽象,因為verilog太過關注細節(jié),不利于驗證和建模。

隨著SystemVerilog中class的引入,這一切都變了。

class包括變量(類屬性,properties)和子程序(類方法,methods)。

SystemVerilog中的類方法一般就是SystemVerilog task(可能消耗時間)/function(不能消耗時間)。

簡言之,類屬性和類方法定義了這個類有什么以及能夠干什么。

通過類屬性和類方法,我們可以更加容易地創(chuàng)建模塊化的驗證平臺,因為在事務級而不是RTL級別,能夠更容易理解設計和編碼驗證用例。

一般,類中會有一個構造函數(shù)(new,我們可以理解為RTL中module的例化,只有調用構造函數(shù)后,才真正存在類的實體,在這之前就只是一個文本的定義而已。

在一個類沒有指向任何的對象實體時,Systemverilog的垃圾回收機制會自動地釋放相應的內存空間。

Base Class

基類是類層次結構中最頂層的類,從這個基類可以派生出更加豐富多彩的派生類。

下面是一個基類PCI的例子,類中有command、address,data,CycleType等屬性。此外,這個基類還可以基于這些屬性,做各種各樣的事情,例如命令的發(fā)送。

每個設計中PCI總線支持的特性都是不同的,但是作為一個基類,PCI具有一些可以統(tǒng)一封裝在定義中的公共屬性和方法。

 module class_TOP( );
 
 class PCI;
    //Class properties
    logic [3:0] command;
    logic [31:0] address;
    logic [31:0] data;
    logic [3:0] CycleType;
    //base class constructor -  initialization
    function new( );
        command = 0;
        address = 0;
        CycleType = 4'hf;
        data = 64'bz;
        $display("PCI Init: data=%h command=%b addr=%h 
CycleType=%b", data, command, address, CycleType);
    endfunction
 task PCIWriteCycle (clk);
 begin
    command = $urandom;
    address = $urandom;
    CycleType = $urandom;
    $display("PCI Write Cycle : clk=%b data=%h command=%b 
addr=%h CycleType=%b", clk, data, command, address, CycleType);
 end
 endtask
 endclass : PCI
 
 bit clock;
 PCI PCI1; //defne variable PCI1 of type PCI
 initial begin
    PCI1 = new( ); //instantiate class – allocate memory
 //PCI1 now holds an object handle.
 end
 initial begin
    clock = 0;
    forever begin
    #10; clock=!clock;
 end
 
 end
 always @(posedge clock) begin
 //access class property using object handle PCI1
    PCI1.data = $urandom;
 //Call Class method PCIWriteCycle
    PCI1.PCIWriteCycle(clock);
 end
 
 initial #60 $finish(2);
 endmodule

1、首先,我們聲明一個名為PCI的類。在這個類中,我們聲明了類屬性:

 logic [3:0] command;
 logic [31:0] address;
 logic [31:0] data, mem;
 logic [3:0] CycleType;

2、然后聲明類構造函數(shù)new(),用于初始化類屬性。如果不聲明,當類被實例化時會調用隱式的new()函數(shù)。

在本例中,函數(shù)new()將初始化為類中各個屬性的默認值。2態(tài)變量初始化為0,4態(tài)變量初始化為x。

function new( );
 command = 0;
 address = 0;
 CycleType = 4'hf;
 data = 64'bz;
 $display("PCI Init: data=%h command=%b addr=%h 
CycleType=%b", data, command, address, CycleType);
 endfunction

3、然后定義一個名為PCIWriteCycle的方法,這里是一個systemverilog function。

在這個方法我們我們完成一些類屬性的簡單賦值,從設計的含義上就是隨機發(fā)送不同的命令/地址/傳輸類型等信息。

task PCIWriteCycle (clk);
 begin
 command = $urandom;
 address = $urandom;
 CycleType = $urandom;
 $display("PCI Write Cycle : clk=%b data=%h command=%b 
addr=%h CycleType=%b", clk, data, command, address, CycleType);
 end
 endtask

4、在類定義之后,我們繼續(xù)聲明一個類的對象并示例化。注意:只有在調用new()之后才分配了實際的內存,PCI1(對象)就是一個指向這個內存空間的指針(或者是句柄,handle)。

而如果不示例化,變量PCI1就是一個空指針“null”

PCI PCI1; //defne variable PCI1 of type PCI
PCI1 = new( ); //instantiate class – allocate memory

5、然后,我們使用對象句柄PCI1去調用類的方法PCIWriteCycle。

always @(posedge clock) begin
 //access class property using object handle PCI1
 PCI1.data = $urandom;
 //Call Class method PCIWriteCycle
 PCI1.PCIWriteCycle(clock);
end

仿真log:

PCI Init: data=zzzzzzzz command=0000 addr=00000000 CycleType=1111
PCI Write Cycle : clk=1 data=12153524 command=0001 addr=8484d609 
CycleType=0011
PCI Write Cycle : clk=1 data=06b97b0d command=1101 addr=b2c28465 
CycleType=0010
PCI Write Cycle : clk=1 data=00f3e301 command=1101 addr=3b23f176 
CycleType=1101
$fnish called from fle "testbench.sv", line 52.
$fnish at simulation time 60
 V C S S i m u l a t i o n R e p o r t





審核編輯:劉清

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

    關注

    0

    文章

    182

    瀏覽量

    19542
  • OOP
    OOP
    +關注

    關注

    0

    文章

    14

    瀏覽量

    8918
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8555

原文標題:SystemVerilog中class的基本概念

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SystemVerilog的Virtual Methods

    SystemVerilog多態(tài)能夠工作的前提是父類的方法被聲明為virtual的。
    發(fā)表于 11-28 11:12 ?864次閱讀

    SystemVerilog的“const”類屬性

    SystemVerilog可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
    發(fā)表于 11-29 10:25 ?2345次閱讀

    SystemVerilog的聯(lián)合(union)介紹

    SystemVerilog ,聯(lián)合只是信號,可通過不同名稱和縱橫比來加以引用。
    的頭像 發(fā)表于 10-08 15:45 ?1872次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯(lián)合(union)介紹

    更好地理解SystemVerilog的多態(tài)Polymorphism

    多態(tài)(Polymorphism) ,從字面意思上看指的是多種形式,在OOP(面向對象編程)中指的是同一個父類的函數(shù)可以體現(xiàn)為不同的行為。在SystemVerilog,指的是我們可以使用父類句柄來
    發(fā)表于 12-05 17:34

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    SystemVerilog$cast的應用

    SystemVerilog casting意味著將一種數(shù)據(jù)類型轉換為另一種數(shù)據(jù)類型。在將一個變量賦值給另一個變量時,SystemVerilog要求這兩個變量具有相同的數(shù)據(jù)類型。
    的頭像 發(fā)表于 10-17 14:35 ?3384次閱讀

    SystemVerilog的操作方法

    SystemVerilog提供了幾個內置方法來支持數(shù)組搜索、排序等功能。
    的頭像 發(fā)表于 10-31 10:10 ?3526次閱讀

    SystemVerilog可以嵌套的數(shù)據(jù)結構

    SystemVerilog除了數(shù)組、隊列和關聯(lián)數(shù)組等數(shù)據(jù)結構,這些數(shù)據(jù)結構還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1992次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數(shù)據(jù)類型的集合。
    的頭像 發(fā)表于 11-07 10:18 ?2863次閱讀

    SystemVerilogclass的基本概念

    class,是面向對象編程(object-oriented programming (OOP))的基礎,而OOP可以讓你創(chuàng)建更高抽象級別的驗證環(huán)境(如UVM)。
    的頭像 發(fā)表于 11-14 09:11 ?2171次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對象復制的概念是有區(qū)別的。
    的頭像 發(fā)表于 11-21 10:32 ?1150次閱讀

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗語)是一個多個進程之間同步的機制之一,這里需要同步的原因是這多個進程共享某些資源。
    的頭像 發(fā)表于 12-12 09:50 ?3782次閱讀

    C++struct和class的區(qū)別?

    C++struct和class的區(qū)別是什么?C++struct和class的最大區(qū)別在于: ? ? ? ? struct的成員默認是公有的, 而
    的頭像 發(fā)表于 03-10 17:41 ?994次閱讀

    Systemverilogclass類型的記錄

    class里面包含data和對data進行操作的subroutines(functions and tasks)。class的data稱為class properties,subroutines稱為methods。兩者都是
    的頭像 發(fā)表于 05-24 14:29 ?1047次閱讀
    <b class='flag-5'>Systemverilog</b>里<b class='flag-5'>class</b>類型的記錄

    Systemverilog的Driving Strength講解

    systemverilog,net用于對電路連線進行建模,driving strength(驅動強度)可以讓net變量值的建模更加精確。
    的頭像 發(fā)表于 06-14 15:50 ?2061次閱讀
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength講解