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

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

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

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

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

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:驗證哥布林 ? 2022-11-24 09:58 ? 次閱讀

要想理解清楚SystemVerilog語言中的Upcasting和Downcasting概念,最好的方式從內(nèi)存分配的角度理解。

57c37406-6b24-11ed-8abf-dac502259ad0.png

class “e”擴(kuò)展自class “c”,class “c”又繼承自class “a”。同時,class “b”擴(kuò)展自class “a.”

如果我們執(zhí)行了下面的代碼:

 a a1; //base class variable
 e e1;
 e1 = new;
 a1 = e1; //assigning extended object handle 'e1' to base class variable 'a1'

當(dāng)我們實例化'e1 = new()'時,同時我們實例化了class e, class c和class a。

將擴(kuò)展對象句柄“e1”賦值給基類句柄a1,就是一個“upcast”。

這意味著,如果你此時你訪問“a1.i”,實際上訪問到的就是上面class a所占用的內(nèi)存空間。

換句話說,“a1.i”、“c1.i”和“e1.i”實際上是不同的內(nèi)容。

SystemVerilog支持Upcasting,即將擴(kuò)展類句柄直接賦值給基類句柄。

 a a1;
 e e1;
 a1 = new;
 e1 = a1; //ILLEGAL

在上面的例子中,我們實例化了對象a1,此時會為對象a1分配內(nèi)存空間,但是此時并沒有為對象c1和對象e1分配內(nèi)存空間。

所以,如果此時我們賦值“e1 = a1”是不允許的,因為e1并沒有一個合適的物理空間去指向。

這種就是downcasting的概念,只能通過$cast()進(jìn)行檢查之后(如果a1確實指向了一個足夠的內(nèi)存空間e1就可以賦值)才能完成賦值。

$cast(e1,a1); //dynamic casting

首先看一個將子類句柄賦值給父類的示例:

class p_class;
bit [31:0] p_Var;
function void display();
$display("p_Var = %0d",p_Var);
endfunction
endclass

class c_class extends p_class;
bit [31:0] c_Var;

function void display( );
super.display( );
$display("c_Var = %0d",c_Var);
endfunction
endclass

module top;
initial begin
p_class p;
c_class c = new( );
c.p_Var = 10;
c.c_Var = 20;
//assigning child class handle to parent class variable
p = c;
c.display( );
end
endmodule

在這個例子中,我們聲明了一個父類“p_class”和其擴(kuò)展類“c_class.”

然后賦值c_class中的屬性 c.p_Var和c.c_Var,最后進(jìn)行upcasting,打印信息如下:

p_Var = 10
c_Var = 20
 V C S S i m u l a t i o n R e p o r t

因為我們在實例化c_class時,同樣為其父類p_class分配了內(nèi)存空間。

相反,如果我們將父類句柄賦值給子類句柄

c = p

會得到一個編譯錯誤

Error-[SV-ICA] Illegal class assignment
testbench.sv, 32
"c = p;"
Expression 'p' on rhs is not a class or a compatible class and hence cannot
be assigned to a class handle on lhs.
Please make sure that the lhs and rhs expressions are compatible.

我們再看一個upcast的示例:

class animals;
 string color = "white";
 function void disp;
 $display("color = %s", color);
 endfunction
 endclass
 
 class bufalo extends animals;
 string color = "black";
 function void disp;
 $display("color = %s", color);
 endfunction
 endclass
 
 program tb;
 initial begin
 animals p;
 bufalo c;
 c = new( ); //allocate memory for c
 //this will allocate memory for both 'c' and 'p'
 p = c; //upcasting
 p.disp;
 c.disp;
 end
 endprogram

仿真log:

color = white
color = black

$fnish at simulation time 0
 V C S S i m u l a t i o n R e p o r t

在上面的例子中,雖然我們只是實例化了擴(kuò)展類bufalo,但是同時也為父類animals分配的內(nèi)存空間,所以打印了

color = white
color = black




審核編輯:劉清

聲明:本文內(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)注

    0

    文章

    113

    瀏覽量

    8249

原文標(biāo)題:SystemVerilog中的Upcasting和Downcasting

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

收藏 人收藏

    評論

    相關(guān)推薦

    C語言中多級指針的概念和使用方法

    多級指針在C語言中是一種特殊的指針類型,它可以指向其他指針的指針。
    發(fā)表于 08-16 16:16 ?1117次閱讀

    C語言中指針的基本概念和用法

    在C語言中,指針是一項重要的概念,它允許我們直接訪問和操作內(nèi)存地址。
    發(fā)表于 08-17 15:30 ?786次閱讀

    C語言中枚舉的基本概念和常見用法

    在C語言中,枚舉是一種方便組織和表示一組相關(guān)常量的工具。枚舉類型有助于提高代碼的可讀性和可維護(hù)性。本文將介紹C語言枚舉的基本概念、語法和用法,以及一些高級技巧。
    發(fā)表于 08-17 15:32 ?1470次閱讀

    基于Rust語言中的生命周期

    Rust是一門系統(tǒng)級編程語言具備高效、安和并發(fā)等特,而生命周期是這門語言中比較重要的概念之一。在這篇教程中,我們會了解什么是命周期、為什么需要生命周期、如何使用生命周期,同時我們依然會使用老朋友
    的頭像 發(fā)表于 09-19 17:03 ?912次閱讀

    SystemVerilog設(shè)計語言

    SystemVerilog 是過去10年來多方面技術(shù)發(fā)展和實際試驗的結(jié)晶,包括硬件描述語言(HDL)、硬件驗證語言(HVL)、SystemC、Superlog和屬性規(guī)范語言。它們都從技
    發(fā)表于 09-07 09:55 ?1178次閱讀

    基于SystemVerilog語言的驗證方法學(xué)介紹

    文章主要介紹《VMM for SystemVerilog》一書描述的如何利用SystemVerilog語言,采用驗證方法學(xué)以及驗證庫開發(fā)出先進(jìn)驗證環(huán)境。文章分為四部分,第一部分概述了用Syst
    發(fā)表于 05-09 15:22 ?52次下載
    基于<b class='flag-5'>SystemVerilog</b><b class='flag-5'>語言</b>的驗證方法學(xué)介紹

    C語言中的關(guān)鍵字

    C語言中的入門教程
    發(fā)表于 10-14 16:24 ?3次下載

    SystemVerilog語言介紹匯總

    作者:limanjihe ?https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一種硬件描述和驗證語言
    的頭像 發(fā)表于 10-11 10:35 ?2402次閱讀

    詳細(xì)介紹go語言中的閉包的實現(xiàn)

    什么是閉包? 什么場景下會用閉包 ? 本文對 go 語言中的閉包做了詳細(xì)介紹。 閉包是由函數(shù)及其相關(guān)引用環(huán)境組合而成的實體(即:閉包=函數(shù)+引用環(huán)境)。 Go中的閉包 閉包是函數(shù)式語言中概念
    的頭像 發(fā)表于 10-20 16:18 ?1867次閱讀

    帶你了解go語言中的閉包

    概念,沒有研究過函數(shù)式語言的用戶可能很難理解閉包的強大,相關(guān)的概念超出了本書的范圍。Go語言是支持閉包的,這里只是簡單地講一下在Go語言中
    的頭像 發(fā)表于 11-02 15:27 ?2455次閱讀

    IEEE SystemVerilog標(biāo)準(zhǔn):統(tǒng)一的硬件設(shè)計規(guī)范和驗證語言

    IEEE SystemVerilog標(biāo)準(zhǔn):統(tǒng)一的硬件設(shè)計規(guī)范和驗證語言
    發(fā)表于 08-25 15:52 ?1次下載

    go語言中怎么使用HTTP代理

    go語言中怎么使用HTTP代理。
    的頭像 發(fā)表于 09-01 14:41 ?2422次閱讀

    Systemverilog event的示例

    event是SystemVerilog語言中的一個強大特性,可以支持多個并發(fā)進(jìn)程之間的同步。
    的頭像 發(fā)表于 10-17 10:21 ?1561次閱讀

    FPGA學(xué)習(xí)-SystemVerilog語言簡介

    SystemVerilog是一種硬件描述和驗證語言(HDVL),它基于IEEE1364-2001 Verilog硬件描述語言(HDL),并對其進(jìn)行了擴(kuò)展,包括擴(kuò)充了 C語言 數(shù)據(jù)類型、
    的頭像 發(fā)表于 12-08 10:35 ?2169次閱讀

    簡述C語言中指針重點

    在C語言中一個函數(shù)可以返回一個整型值、字符值、實型值等,也可以返回指針型的數(shù)據(jù),即地址,其概念與以前類似,只是返回的值的類型是指針類型。
    的頭像 發(fā)表于 03-10 15:28 ?612次閱讀
    主站蜘蛛池模板: 在线免费观看国产| 动漫美女被吸奶| 激情内射亚洲一区二区三区爱妻| 亚洲AV综合99一二三四区| 狠狠狠狠狠狠干| 97人妻精品全国免费视频| 日本漫画母亲口工子全彩| 国产欧美一区二区精品性色tv | 啪啪漫画无遮挡全彩h同人| 成人在免费观看视频国产| 亚洲AV无码国产精品午夜久久| 久久精品中文字幕有码日本| 超碰人人澡人人胔| 亚洲精品国产高清不卡在线| 棉签和冰块怎么弄出牛奶视频| 国产 亚洲 另类 欧美 在线| 一级特黄aa大片欧美| 日本撒尿特写| 久久精品久久精品| 大学生宿舍飞机china free| 伊人久久青草| 泰国淫乐园实录| 久久亚洲网站| 国产乱子影视频上线免费观看| 69日本人xxxx16—18| 香蕉久久夜色精品国产小优| 内射白嫩少妇超碰| 韩国女人高潮嗷嗷叫视频| YELLOW在线观看高清视频免费| 亚洲人成影院在线播放| 日本久久精品免视看国产成人 | WWW久久只有这里有精品| 亚洲免费黄色| 色屁屁影院| 男助理憋尿PLAY灌尿BL出去| 黑人强伦姧人妻日韩那庞大的| 被黑人做的白浆直流| 在线免费观看成年人视频| 亚洲国产成人久久精品影视| 日本亚洲中文字幕无码区| 毛片免费在线播放|