SystemVerilog 類物件,變數和控制代碼

2021-08-16 21:12:59 字數 1826 閱讀 6100

類物件是你在呼叫其建構函式 new()時建立的類定義的例項。 在systemverilog中,所有類物件都是動態建立的; 在時間0之後或之後.lrm不指定如何或何時可以銷毀物件 - 只有當它不能被銷毀時。

類變數是變數的值表示對類物件的引用。 像任何其他變數一樣,類變數的生命週期取決於它的定義方式和位置(靜態,自動或動態)。

類控制代碼表示對類物件的引用的值。 您永遠無法檢視或表示控制代碼的文字值(除特殊控制代碼:null外)。 您必須在表示式中使用類變數,以便使用儲存在變數中的類控制代碼來引用類物件中的成員或方法。

舉例如下:

module top;

class class_name

int i;

endclass

class_name class_variable;;

initial $display("hello world");

endmodule

你將建立乙個靜態變數class_name但不包含類物件。 所以沒有控制代碼存在class_name。 現在呼叫建構函式。

module top;

class class_name

int i;

endclass

class_name class_variable;;

initial $display("hello world");

initial begin

class_variable = new();

class_variable.i = 1;

$display(class_variable.i);

end

endmodule

new()是乙個返回控制代碼給class_name物件的函式。 class_variable.i表示使用儲存在class_variable中的控制代碼來引用物件,並選擇該物件的變數i。 在c / c ++中,這看起來像指標引用class_name-> i; 在systemverilog中,你永遠不會直接使用這個物件,你總是引用使用儲存在類變數中的控制代碼。

關於控制代碼的通俗解釋(什麼是控制代碼?為什麼會有控制代碼?):

從廣義上,能夠從乙個數值拎起一大堆資料的東西都可以叫做控制代碼。控制代碼的英文是"handle",本義就是"柄",只是在電腦科學中,被特別地翻譯成"控制代碼",其實還是個"柄"。從乙個小東西拎起一大堆東西,這難道不像是個"柄"嗎?

然後,指標其實也是一種"控制代碼",只是由於指標同時擁有更特殊的含義——實實在在地對應記憶體裡地乙個位址——所以,通常不把指標說成是"控制代碼"。但指標也有著能從乙個32位的值引用到一大堆資料的作用,這不是控制代碼又是什麼?

windows系統中有許多核心物件(這裡的物件不完全等價於"物件導向程式設計"一詞中的"物件",雖然實質上還真差不多),比如開啟的檔案,建立的執行緒,程式的視窗,等等。這些重要的物件肯定不是4個位元組或者8個位元組足以完全描述的,他們擁有大量的屬性。為了儲存這樣乙個"物件"的狀態,往往需要上百甚至上千位元組的記憶體空間,那麼怎麼在程式間或程式內部的子過程(函式)之間傳遞這些資料呢?拖著這成百上千的位元組拷貝來拷貝去嗎?顯然會浪費效率。那麼怎麼辦?當然傳遞這些物件的首位址是乙個辦法,但這至少有兩個缺點:

暴露了核心物件本身,使得程式(而不是作業系統核心)也可以任意地修改物件地內部狀態(首位址都知道了,還有什麼不能改的?),這顯然是作業系統核心所不允許的;

作業系統有定期整理記憶體的責任,如果一些記憶體整理過一次後,物件被搬走了怎麼辦?

所以,windows作業系統就採用進一步的間接:在程序的位址空間中設一張表,表裡頭專門儲存一些編號和由這個編號對應乙個位址,而由那個位址去引用實際的物件,這個編號跟那個位址在數值上沒有任何規律性的聯絡,純粹是個對映而已。

在windows系統中,這個編號就叫做"控制代碼"。

system Verilog 跳轉操作

在verilog中,使用disable宣告來從執行流程中的某一點跳轉到另一點。特別地,disable宣告使執行流程跳轉到標註名字的宣告組末尾,或者乙個任務的末尾。verilog中的disable命令用法有很多,下面是乙個簡單的例子,解釋了disable的作用範圍 1 find first bit s...

System Verilog任務 函式

在system verilog中,begin end是可選的 task mytask1 output logic x,input logic y endtask還可以使用ref型別的引數對變數進行引用,類似於c中的指標,但ref不允許進行陣列引數的傳遞 還可以使用預設引數 增加了return語句 方...

SystemVerilog語言簡介 二

6.使用者定義的型別 verilog不允許使用者定義新的資料型別。systemverilog通過使用typedef提供了一種方法來定義新的資料型別,這一點與c語言類似。使用者定義的型別可以與其它資料型別一樣地使用在宣告當中。例如 typedef unsigned int uint uint a,b ...