色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

SystemVerilog中class的基本概念

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:芯片驗證工程師 ? 2022-11-14 09:11 ? 次閱讀

class,是面向?qū)ο?a href="http://m.1cnz.cn/v/tag/1315/" target="_blank">編程(object-oriented programming (OOP))的基礎(chǔ),而OOP可以讓你創(chuàng)建更高抽象級別的驗證環(huán)境(如UVM)。

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

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

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


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

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

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

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

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

Base Class

基類是類層次結(jié)構(gòu)中最頂層的類,從這個基類可以派生出更加豐富多彩的派生類。
下面是一個基類PCI的例子,類中有command、address,data,CycleType等屬性。此外,這個基類還可以基于這些屬性,做各種各樣的事情,例如命令的發(fā)送。

每個設(shè)計中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、然后聲明類構(gòu)造函數(shù)new(),用于初始化類屬性。如果不聲明,當(dāng)類被實例化時會調(diào)用隱式的new()函數(shù)。在本例中,函數(shù)new()將初始化為類中各個屬性的默認(rèn)值。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。在這個方法我們我們完成一些類屬性的簡單賦值,從設(shè)計的含義上就是隨機發(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ù)聲明一個類的對象并示例化。注意:只有在調(diào)用new()之后才分配了實際的內(nèi)存,PCI1(對象)就是一個指向這個內(nèi)存空間的指針(或者是句柄,handle)。而如果不示例化,變量PCI1就是一個空指針“null”

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

5、然后,我們使用對象句柄PCI1去調(diào)用類的方法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

審核編輯:湯梓紅

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

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110258
  • System
    +關(guān)注

    關(guān)注

    0

    文章

    165

    瀏覽量

    37021
  • Class
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    19759
收藏 人收藏

    評論

    相關(guān)推薦

    Proteus涉及的基本概念

    Proteus涉及的基本概念
    發(fā)表于 08-01 20:58

    Fpga Cpld的基本概念

    Fpga Cpld的基本概念
    發(fā)表于 08-20 17:14

    C語言基本概念

    C語言基本概念
    發(fā)表于 08-01 02:00

    EMI的基本概念

    摘 要: 介紹了電磁干擾(EMI)的基本概念、危害及抑制技術(shù),指出了強化管理,發(fā)展EMI抑制技術(shù)的重要意義。關(guān)鍵詞:電磁干擾;抑制技術(shù);EMC標(biāo)準(zhǔn);管理1 電磁干擾基本概念在復(fù)雜的電磁環(huán)境,任何
    發(fā)表于 05-30 06:28

    阻抗控制相關(guān)的基本概念

    阻抗控制部分包括兩部分內(nèi)容:基本概念及阻抗匹配。本篇主要介紹阻抗控制相關(guān)的一些基本概念
    發(fā)表于 02-25 08:11

    智能天線的基本概念

    1智能天線的基本概念 智能天線綜合了自適應(yīng)天線和陣列天線的優(yōu)點,以自適應(yīng)信號處理算法為基礎(chǔ),并引入了人工智能的處理方法。智能天線不再是一個簡單的單元,它已成為一個具有智能的系統(tǒng)。其具體定義為:智能
    發(fā)表于 08-05 08:30

    CODESYS的基本概念有哪些

    CODESYS是什么?CODESYS的基本概念有哪些?CODESYS有哪些功能?
    發(fā)表于 09-18 06:52

    單片機中斷的基本概念

    文章目錄一.中斷的基本概念二.中斷相關(guān)的寄存器三.中斷的實際使用四.中斷的優(yōu)點:一.中斷的基本概念1.中斷的概念:在單片機,中斷是指:對于CPU來說,當(dāng)它在正常處理事件A時,突然發(fā)生
    發(fā)表于 11-25 08:14

    STM32的中斷系統(tǒng)基本概念

    STM32 中斷系統(tǒng)概述筆記(一)中斷概述中斷相關(guān)的基本概念STM32的中斷系統(tǒng)基本概念:NVIC 嵌套向量中斷控制器中斷通道中斷優(yōu)先級優(yōu)先級分組EXTI 外部中斷控制器三種外部中斷觸發(fā)方式引腳分組
    發(fā)表于 01-07 07:32

    化學(xué)電源基本概念

     化學(xué)電源基本概念 1,電化學(xué)裝置:由兩個電極和電解質(zhì)構(gòu)成。 2,電化學(xué)式: 表明活性物質(zhì)和電解液的組份。例如:鉛酸電池的電化
    發(fā)表于 11-05 09:29 ?1157次閱讀

    SystemVerilogclass是什么意思

    class,是面向?qū)ο缶幊蹋╫bject-oriented programming (OOP))的基礎(chǔ),而OOP可以讓你創(chuàng)建更高抽象級別的驗證環(huán)境(如UVM)。
    的頭像 發(fā)表于 11-14 09:11 ?1334次閱讀

    SystemVerilog的Shallow Copy

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

    SystemVerilog語言中的Upcasting和Downcasting概念解析

    要想理解清楚SystemVerilog語言中的Upcasting和Downcasting概念,最好的方式從內(nèi)存分配的角度理解。
    的頭像 發(fā)表于 11-24 09:58 ?1544次閱讀

    Systemverilogclass類型的記錄

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

    基本概念.zip

    基本概念
    發(fā)表于 12-30 09:21 ?2次下載
    主站蜘蛛池模板: 久热这里只有精品99国产6 | 中文字幕99香蕉在线 | 久久久GOGO无码啪啪艺术 | 国产视频成人 | 好湿好滑好硬好爽好深视频 | 国产三级精品三级男人的天堂 | 久久精品无码人妻无码AV蜜臀 | 亚洲精品无码AV中文字幕蜜桃 | 5G在线观看免费年龄确认18 | 涩涩免费网站 | 中文字幕一区二区三区在线观看 | 午夜福利视频极品国产83 | 国产欧美在线亚洲一区刘亦菲 | 自拍 偷拍 亚洲 经典 | 又爽又黄又粗又大免费视频 | 黑兽在线观看高清在线播放樱花 | 精品视频中文字幕 | 亚洲h视频在线观看 | 97无码欧美熟妇人妻蜜 | 色欲精品久久人妻AV中文字幕 | 伊人青青草 | 美女扒开尿口让男生添动态图 | 麻豆成人久久精品二区三区网站 | 欧美残忍xxxx极端 | 向日葵视频app下载18岁以下勿看 | 男女边吃奶边做边爱视频 | 久久综合九色综合国产 | 十分钟免费视频大全在线观看 | 忘忧草研究所 麻豆 | 黄子佼81岁父亲现状曝光 | 久久精品动漫99精品动漫 | 最近中文字幕高清中文 | 亚洲女人网 | 伦理片午夜在线视频 | 欧美 亚洲 中文字幕 高清 | 白人大战34厘米黑人BD | 第一次玩老妇真实经历 | 色综合五月激情综合色一区 | 97成人精品视频在线播放 | 欧美最猛12teevideos欧美 欧美最猛12teevideos | 日韩精品无码久久一区二区三 |