在UVM或者SV中,經(jīng)常會(huì)碰到被virtual修飾的 class、sequence、sequencer、interface、function,不知道你有沒(méi)有這樣的疑問(wèn),為什么需要使用virtual,不用可不可以?所以就總結(jié)了一下。
-
virtual class
在一切面向?qū)ο?a target="_blank">編程語(yǔ)言中,類(lèi)最基本的元素?;?lèi)(或者說(shuō)父類(lèi))可以包含最基礎(chǔ)的一些組成,特征,形成最基本的框架,但是并不完整?;?lèi)作為一個(gè)不完整的類(lèi), 它的主要作用不是被實(shí)例化,而是被拓展 ,因?yàn)?,不完整就?shí)例化也沒(méi)有意義。
在后續(xù)的環(huán)境構(gòu)建當(dāng)中,可以從這個(gè)基類(lèi)擴(kuò)展出很多的子類(lèi),豐富基類(lèi)的結(jié)構(gòu)。這樣的類(lèi),就可以設(shè)置成virtual class,使其變得抽象。注意,一個(gè)抽象的類(lèi),是不能夠被實(shí)例化的,它只能被繼承/擴(kuò)展,如果實(shí)例化,則會(huì)出錯(cuò)。
-
virtual function和pure virtual function
pure virtual function是偶然在工作中遇到的,可能見(jiàn)到的次數(shù)不多,但還是要學(xué)習(xí)一下。
virtual function和類(lèi)的多態(tài)性有關(guān),使用戶(hù)在設(shè)計(jì)和實(shí)現(xiàn)類(lèi)時(shí)不需要擔(dān)心句柄指向的對(duì)象類(lèi)型是父類(lèi)還是子類(lèi),只要通過(guò)虛方法,就可以進(jìn)行動(dòng)態(tài)綁定,或者SV中稱(chēng)為動(dòng)態(tài)查找方法(摘自紅寶書(shū))。
簡(jiǎn)單理解就是,virtual function是基類(lèi)中的函數(shù)模板,可在派生類(lèi)中使用新代碼重寫(xiě)該函數(shù)模板’,它存在對(duì)的目的就是為了后續(xù)能夠重寫(xiě)該函數(shù)。如果分不清到底需不需要加上virtual,可以都加上,便于后續(xù)的重寫(xiě),不重寫(xiě)也不會(huì)報(bào)錯(cuò)。
pure virtual function 虛純函數(shù)是基類(lèi)中的函數(shù)模板, 必須在派生類(lèi)中用新代碼重寫(xiě) 。
總結(jié)一下:對(duì)于virtual function ,是在base中提供了一個(gè)函數(shù)模板,但不是必須進(jìn)行override,但對(duì)于pure virtual function 而言,必須進(jìn)行override,如果你忘記override,則會(huì)出現(xiàn)編譯錯(cuò)誤,也起了一種提示作用。
-
virtual sequence/sequencer
-
virtual interface
virtual interface你可以認(rèn)為語(yǔ)法就是這樣。作為類(lèi)和dut之間進(jìn)行通信的唯一方法,在一個(gè)類(lèi)中,如果實(shí)例化一個(gè)interface,是不允許的,出現(xiàn)了就會(huì)報(bào)語(yǔ)法錯(cuò)誤,只能在module里面直接
-
UVM
+關(guān)注
關(guān)注
0文章
183瀏覽量
19972 -
Module
+關(guān)注
關(guān)注
0文章
76瀏覽量
13510 -
sequence
+關(guān)注
關(guān)注
0文章
23瀏覽量
3220
發(fā)布評(píng)論請(qǐng)先 登錄
為什么需要使用virtual,不用可不可以?
評(píng)論