在UVM或者SV中,經常會碰到被virtual修飾的 class、sequence、sequencer、interface、function,不知道你有沒有這樣的疑問,為什么需要使用virtual,不用可不可以?所以就總結了一下。
-
virtual class
在一切面向對象編程語言中,類最基本的元素。基類(或者說父類)可以包含最基礎的一些組成,特征,形成最基本的框架,但是并不完整。基類作為一個不完整的類, 它的主要作用不是被實例化,而是被拓展 ,因為,不完整就實例化也沒有意義。
在后續的環境構建當中,可以從這個基類擴展出很多的子類,豐富基類的結構。這樣的類,就可以設置成virtual class,使其變得抽象。注意,一個抽象的類,是不能夠被實例化的,它只能被繼承/擴展,如果實例化,則會出錯。
-
virtual function和pure virtual function
pure virtual function是偶然在工作中遇到的,可能見到的次數不多,但還是要學習一下。
virtual function和類的多態性有關,使用戶在設計和實現類時不需要擔心句柄指向的對象類型是父類還是子類,只要通過虛方法,就可以進行動態綁定,或者SV中稱為動態查找方法(摘自紅寶書)。
簡單理解就是,virtual function是基類中的函數模板,可在派生類中使用新代碼重寫該函數模板’,它存在對的目的就是為了后續能夠重寫該函數。如果分不清到底需不需要加上virtual,可以都加上,便于后續的重寫,不重寫也不會報錯。
pure virtual function 虛純函數是基類中的函數模板, 必須在派生類中用新代碼重寫 。
總結一下:對于virtual function ,是在base中提供了一個函數模板,但不是必須進行override,但對于pure virtual function 而言,必須進行override,如果你忘記override,則會出現編譯錯誤,也起了一種提示作用。
-
virtual sequence/sequencer
-
virtual interface
virtual interface你可以認為語法就是這樣。作為類和dut之間進行通信的唯一方法,在一個類中,如果實例化一個interface,是不允許的,出現了就會報語法錯誤,只能在module里面直接
-
UVM
+關注
關注
0文章
182瀏覽量
19196 -
Module
+關注
關注
0文章
68瀏覽量
12862 -
sequence
+關注
關注
0文章
23瀏覽量
2852
發布評論請先 登錄
相關推薦
評論