在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

SystemVerilog中的類的繼承

芯片驗(yàn)證工程師 ? 來(lái)源:芯片驗(yàn)證工程師 ? 作者:芯片驗(yàn)證工程師 ? 2022-11-15 09:47 ? 次閱讀

繼承是基于類的面向?qū)ο?a href="http://www.xsypw.cn/v/tag/1315/" target="_blank">編程(object-oriented pro - gramming)的最重要特性之一。

擴(kuò)展類,簡(jiǎn)言之,就是基類的擴(kuò)展。

擴(kuò)展類繼承了基類的所有屬性和方法,并且支持在繼承類中重寫(xiě)基類的屬性和方法以及新增更多的屬性和方法。

所以,繼承類的好處是什么?

1、繼承類對(duì)基類的復(fù)用+改進(jìn)
2、基類的改動(dòng)能很快地影響到所有繼承類,減少公共代碼的修改

例如,可以定義一個(gè)名為EthernetPacket的基類。然后定義擴(kuò)展類,如EtherErrorPacket、EtherLatencyPacket等,除了繼承基類的屬性,還可以根據(jù)需要新增更多的新屬性和方法。

module class_TOP( );

class base;
logic [31:0] data1;
logic [31:0] data2;
logic [31:0] busx;

function void bus;
busx = data1 | data2;
endfunction

function void disp;
$display("From Base Class :: busx OR = %h", busx);
endfunction

endclass : base

class ext extends base;
logic [31:0] data3; //add a new property
function new ( );
$display("Call base class method from extended class - 
super.disp");
super.disp;
endfunction

function void bus; //redefne function 'bus' of class 'base'
busx = data1 & data2 & data3;
//data1,data2 inherited from class 'base'
endfunction

function void disp; //redefne function 'disp' of 
class 'base'
$display("From Extended Class :: busx AND = %h",busx);
endfunction

endclass : ext

initial begin
base b1;
ext e1;
b1 = new;
e1 = new;
b1.data1 = 32'h ffff_0000;
b1.data2 = 32'h 0000_ffff;
b1.bus;
b1.disp( );
e1.data1 = 32'h 0101_1111;
e1.data2 = 32'h 1111_ff;
e1.data3 = 32'h 1010_1010;
e1.bus;
e1.disp( );
end
endmodule

仿真log:

Call base class method from extended class - super.disp
From Base Class :: busx OR = xxxxxxxx
From Base Class :: busx OR = ffffffff
From Extended Class :: busx AND = 00001010
 V C S S i m u l a t i o n R e p o r t

在class “base”中,我們定義了屬性data1、 data2和busx,然后又定義了2個(gè)functions “bus”和“disp”

由于我們沒(méi)有顯式地定義構(gòu)造函數(shù)new(),所以變量data1, data2和busx都會(huì)被初始化成“x”態(tài) 。

class “ext”是class “base”的繼承類,所以類“ext”自然也會(huì)有屬性“data1,” “data2,” 和“busx”。

同時(shí)我們?cè)陬悺癳xt”中額外聲明了屬性“data3”,并且覆蓋了父類中函數(shù)“bus”和“disp”的聲明。

在上面的例子中,我們?cè)跀U(kuò)展類"ext"中的構(gòu)造函數(shù)中通過(guò)關(guān)鍵字“super.”來(lái)調(diào)用父類中聲明的函數(shù)。所以會(huì)打印:

From Base Class :: busx OR = xxxxxxxx

在initial語(yǔ)句塊中,我們賦值父類中的屬性,然后打印出“busx.”(即data1 | data2)。然后修改擴(kuò)展類中的屬性,然后打印出“busx.”(覆蓋過(guò)的函數(shù)data1 & data2 & data3)

仿真的log也證明了父類的函數(shù)被成功地覆蓋掉了。

每一個(gè)class 都會(huì)有一個(gè)構(gòu)造函數(shù)new()(隱式或者顯式的),在擴(kuò)展類的構(gòu)造函數(shù)中,第一件事就是要去調(diào)用父類的構(gòu)造函數(shù)“super.new( )”。然后如果你忘了在擴(kuò)展類的構(gòu)造函數(shù)中添加,編譯仿真工具也會(huì)自動(dòng)幫你添加的。

一般來(lái)說(shuō)不需要顯式地添加super.new(),但是如果構(gòu)造函數(shù)帶參數(shù),那么必須要顯式地添加supoer.new()

Inheritance Memory Allocation

還是那句話,理解一個(gè)語(yǔ)言的很多特性都需要從內(nèi)存分配的角度去理解。

如果需要完全理解擴(kuò)展類,就需要理解基類和擴(kuò)展類中的屬性和函數(shù)的內(nèi)存分配。

module class_TOP( );
 class aa;
 int i1;
 function funAA;
 endfunction
 endclass : aa
 
 class bb extends aa;
 int i1;
 function funBB;
 endfunction
 endclass : bb
 
 initial begin
 bb b;
 b = new( );
 end
 endmodule


在上面的例子中,雖然我們只是調(diào)用了擴(kuò)展類的構(gòu)造函數(shù)“b = new( ),” ,但是實(shí)際上,我們不僅分配的類“bb”的內(nèi)存空間,還分配了基類“aa”的內(nèi)存空間,即使變量名稱一樣。

93d6f52a-6436-11ed-8abf-dac502259ad0.png

這個(gè)同名的變量需要通過(guò)作用域(不同的內(nèi)存分配)進(jìn)行區(qū)分。

審核編輯:湯梓紅

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

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110243
  • System
    +關(guān)注

    關(guān)注

    0

    文章

    165

    瀏覽量

    37019

原文標(biāo)題:SystemVerilog中的類的繼承

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SystemVerilog構(gòu)造函數(shù)new

    systemverilog,如果一個(gè)沒(méi)有顯式地聲明構(gòu)造函數(shù)(new()),那么編譯仿真工具會(huì)自動(dòng)提供一個(gè)隱式的new()函數(shù)。這個(gè)new函數(shù)會(huì)默認(rèn)地將所有屬性變量。
    發(fā)表于 11-16 09:58 ?3695次閱讀

    SystemVerilog的Virtual Methods

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

    關(guān)于Java繼承的問(wèn)題

    在Java繼承是面向?qū)ο缶幊?b class='flag-5'>中的一個(gè)重要概念,它允許一個(gè)(稱為子類或派生繼承另一個(gè)
    的頭像 發(fā)表于 09-30 10:48 ?582次閱讀

    淺析多繼承派生的虛基

    繼承派生與基有何關(guān)系?多繼承派生與虛基有何關(guān)系?
    發(fā)表于 09-30 06:26

    python繼承

    的同時(shí),又可以根據(jù)需要進(jìn)行修改、拓展。繼承的語(yǔ)法結(jié)構(gòu)是class 子類(父):1. 單繼承舉個(gè)例子:下面的代碼。先是定義了一個(gè) People
    發(fā)表于 03-08 16:40

    什么是繼承?

    什么是繼承?繼承是子類利用父定義的方法和變量就像它們屬于子類本身一樣. class Car {   int color_number;&n
    發(fā)表于 04-28 14:26 ?722次閱讀

    Java繼承與派生

    對(duì)于面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言來(lái)說(shuō),毫無(wú)疑問(wèn)是其最重要的基礎(chǔ)。抽象、封裝、繼承、多態(tài)這四大特性都離不開(kāi),只有存在,才能體現(xiàn)面向?qū)ο缶幊痰奶攸c(diǎn),今天我們就來(lái)了解一些
    發(fā)表于 09-27 10:55 ?0次下載
    Java<b class='flag-5'>類</b>的<b class='flag-5'>繼承</b>與派生

    構(gòu)造函數(shù)()繼承的方式與實(shí)驗(yàn)

    繼承:利用構(gòu)造函數(shù)()繼承的方式 : JS是沒(méi)有的概念的 , 把JS
    發(fā)表于 11-24 15:26 ?662次閱讀

    C++繼承訪問(wèn)級(jí)別學(xué)習(xí)總結(jié)(二)

    上一篇文章我們介紹了c++繼承學(xué)習(xí)總結(jié);今天我們繼續(xù)來(lái)分享c++繼承
    的頭像 發(fā)表于 12-24 16:10 ?771次閱讀

    python繼承詳解

    和方法的同時(shí),又可以根據(jù)需要進(jìn)行修改、拓展。 繼承的語(yǔ)法結(jié)構(gòu)是 class 子類(父): 1. 單繼承 舉個(gè)例子:下面的代碼。先是定義了一個(gè) People
    的頭像 發(fā)表于 03-08 16:40 ?3133次閱讀

    怎樣在Java實(shí)現(xiàn)多繼承

    Java是一種面向?qū)ο蟮闹辉试S單繼承的語(yǔ)言,那么怎樣在Java實(shí)現(xiàn)多繼承呢? 2 方法 1. 多層繼承 如果要直接繼承
    的頭像 發(fā)表于 02-17 14:55 ?1351次閱讀

    簡(jiǎn)述繼承

    繼承:一個(gè)繼承另一個(gè),自動(dòng)擁有這個(gè)的屬性和方法,類似于包含與被包含的關(guān)系。被
    的頭像 發(fā)表于 02-17 15:00 ?1071次閱讀
    簡(jiǎn)述<b class='flag-5'>類</b>的<b class='flag-5'>繼承</b>

    Python繼承詳解

    在 Python 繼承是一種重要的面向?qū)ο缶幊谈拍睢Mㄟ^(guò)繼承,我們可以定義一個(gè)新的,它繼承了現(xiàn)有
    的頭像 發(fā)表于 04-20 16:56 ?1333次閱讀

    Python繼承的基本規(guī)則

    繼承規(guī)則 與其他基于的語(yǔ)言一樣,可以通過(guò)繼承組合多個(gè)定義。 定義可以擴(kuò)展(或繼承)多個(gè)其他
    的頭像 發(fā)表于 09-20 14:24 ?545次閱讀

    java子類可以繼承的什么

    Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它支持繼承的概念。繼承是面向?qū)ο缶幊痰娜筇匦灾唬试S一個(gè)(稱為子類或派生繼承另一個(gè)
    的頭像 發(fā)表于 08-20 11:02 ?1378次閱讀
    主站蜘蛛池模板: 久青草国产手机在线观| 2022国产情侣真实露脸在线| 很黄很色网站| 四虎永久免费在线| 亚洲无卡| 2017天天天天做夜夜夜做| www操com| 国产手机看片| 人人玩人人弄人人曰| 奇米影视婷婷| 福利视频999| 久久国产精品岛国搬运工| 久久黄视频| 国产在线观看黄| 视频网站免费| 九九热在线免费观看| aaa在线| 亚洲区在线播放| hdhdhd69日本xxx| 中文字幕第一| 最近2018中文字幕免费看在线| 亚洲成人99| 欧美日韩一区二区三区视频| 日韩毛片免费看| 另类视频色综合| 大尺度视频在线| 美女bbbb视频| 国产精品天天看大片特色视频| 日本69xxx| 黄免费网站| 日本丶国产丶欧美色综合| 国产一区二区在线不卡| 国产色婷婷精品免费视频| 亚洲国产系列| 天天躁日日躁狠狠躁中文字幕老牛| 日韩成人免费观看| 久久亚洲国产成人精品性色| 黄在线观看在线播放720p| 一级做a爱片特黄在线观看免费看| 人人插人人插| 夜夜爽8888|