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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuà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”擴展自class “c”,class “c”又繼承自class “a”。同時,class “b”擴展自class “a.”

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

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

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

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

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

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

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

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

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

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

這種就是downcasting的概念,只能通過$cast()進行檢查之后(如果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”和其擴展類“c_class.”

然后賦值c_class中的屬性 c.p_Var和c.c_Var,最后進行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

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

color = white
color = black




審核編輯:劉清

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

    關注

    0

    文章

    113

    瀏覽量

    8475

原文標題:SystemVerilog中的Upcasting和Downcasting

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

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

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

    基于Rust語言中的生命周期

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

    SystemVerilog設計語言

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

    基于SystemVerilog語言的驗證方法學介紹

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

    C語言中的關鍵字

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

    SystemVerilog語言介紹匯總

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

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

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

    帶你了解go語言中的閉包

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

    IEEE SystemVerilog標準:統(tǒng)一的硬件設計規(guī)范和驗證語言

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

    go語言中怎么使用HTTP代理

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

    Systemverilog event的示例

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

    FPGA學習-SystemVerilog語言簡介

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

    簡述C語言中指針重點

    在C語言中一個函數(shù)可以返回一個整型值、字符值、實型值等,也可以返回指針型的數(shù)據(jù),即地址,其概念與以前類似,只是返回的值的類型是指針類型。
    的頭像 發(fā)表于 03-10 15:28 ?773次閱讀
    主站蜘蛛池模板: YELLOW视频直播在线观看高清 | 女教师二十三歳 | 区产品乱码芒果精品P站在线 | 国产高清亚洲日韩字幕一区 | 轻点灬大ji巴太粗太双性高h | 99在线精品国自产拍不卡 | 爱情岛论坛网亚洲品质 | ppypp午夜限制不卡影院私人 | aaa在线观看视频高清视频 | 人成片在线观看亚洲无遮拦 | 久久高清内射无套 | 精品亚洲永久免费精品 | 亚洲精品偷拍影视在线观看 | 国产一区二区免费在线观看 | 国产成人在线小视频 | 国产精品无码AV天天爽色欲 | 欧美最新色p图 | 欧美乱码卡一卡二卡四卡免费 | 99视频全部看免费观 | 性色爽爱性色爽爱网站 | G国产精品无马 | 午夜一区欧美二区高清三区 | AV国产乱码一区二区三视频 | 美女打开双腿扒开屁股男生 | 国产国拍亚洲精品av麻豆 | 毛片在线全部免费观看 | 亚洲 日韩 国产 中文视频 | 无码专区久久综合久综合字幕 | 最近免费中文字幕MV免费高清 | 黄瓜视频苹果直接安装 | 男人的天堂久久精品激情a 男人的天堂黄色片 | 欧美成人中文字幕在线看 | 火影忍者高清无码黄漫 | 99国产精品欲AV蜜桃臀麻豆 | 蜜芽国产在线精品欧美 | 97免费视频在线观看 | 亚洲精品久久久久中文字幕二区 | 囯产精品久久久久久久久免费蜜桃 | 国产精品v欧美精品v日韩 | 一区二区三区国产 | 毛片免费在线视频 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品