您好,登錄后才能下訂單哦!
這篇文章主要介紹“singleton class是什么”,在日常操作中,相信很多人在singleton class是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”singleton class是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
SystemVerilog中Singleton class是指只有一個對象(object)的類。這個對象只創(chuàng)建一次,為所需的全局變量提供一個namespaces。
Singleton class定義全局的行為,例如printing。
Singleton class 在compile-time創(chuàng)建一個對象,然后在run-time操作其中的成員,不需要用戶在仿真時在建立一個新的實例。
program top;
class singleton;
int unsigned var1;
// Need to declare it as static, as it is accessed by static method 'create'
static singleton single;
// Declared as 'protected', so user can't directly create instance of this class
protected functionnew();
endfunction:new
static functionsingleton create();
if (single ==null) begin
$display("Object single is null, so creating new object");
single =new();
end
return single;
endfunction:create
endclass:singleton
singleton s1, s2;
initial begin
s1 = singleton ::create();
$display (" 1 : s1.var1 = %0d", s1.var1);
s1.var1 =10;
$display (" 2 : s1.var1 = %0d", s1.var1);
s2 = singleton ::create();
$display (" 3 : s2.var1 = %0d", s2.var1);
s2.var1 =20;
$display (" 4 : s2.var1 = %0d", s2.var1);
$display (" 5 : s1.var1 = %0d", s1.var1);
end
endprogram
Output:
// 1 : s1.var1 = 0 // 2 : s1.var1 = 10 // 3 : s2.var1 = 10 // 4 : s2.var1 = 20 // 5 : s1.var1 = 20
A singleton object is a globally accessiblestatic object providing customizable service methods.
Synopsys UVM1.2 Workshop
在下面的例子中:
class service_class; protected static service_class me =get(); static function service_class get(); if(me = null) me = new() ; return me ; endfunctionextern virtual function void error (string msg) ;endclass
error method需要用戶自行定義所需要的行為。
在UVM的workshop中使用了一個名稱為proxy_class的singleton class很好地詮釋了其在factory機制的應用。
class proxy_class#(type T =base) ;
type proxy_class#(T) this_type ; //just for coding convenience
protected function new();
endfunction
static function this_type get();
if(me== null) me = new() ;
return me;
endfunction
static function T create();
create=new() ;
function
endcase
class driver xtends base;
typedef proxy_class(driver) proxy ;
endclass
class monitor xtends base;
typedef proxy_class(monitor) proxy ;
endclass
class environment ; driver drv ; monitor mon; function new; drv = driver::proxy::create() ; mon = monitor::proxy::create() ; endfunctionendclass
這個proxy class提供了一個創(chuàng)建不同的singleton bject的機制。
為了使proxy class更有意義,我們需要一個virtual base class和factory機制。proxy class根據(jù)不同的factory注冊和base class生成特定的proxy object。
到此,關于“singleton class是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。