溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SystemVerilog中$cast方法的作用是什么

發(fā)布時間:2021-08-11 14:45:15 來源:億速云 閱讀:782 作者:Leah 欄目:互聯(lián)網(wǎng)科技

這篇文章給大家介紹SystemVerilog中$cast方法的作用是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

$cast是systemverilog中的內(nèi)建方法。

$cast可以對不同的內(nèi)建類型進行轉(zhuǎn)換,用的更多的是不同層次之間類的轉(zhuǎn)換。在這種父類與子類之間的轉(zhuǎn)換里, 父類站的高,子類在底下,從父類向子類的轉(zhuǎn)換,稱為向下類型轉(zhuǎn)換,而子類向父類的轉(zhuǎn)換稱為向上類型轉(zhuǎn)換。向上類型轉(zhuǎn)換是安全的,而反之則是不安全的。原因在于子類既然繼承了父類,就擁有父類的一切屬性,除此之外,龍生九子,各有不同,子類還有自己獨特的個性,這些是父類沒有的。當進行向上類型轉(zhuǎn)換時,相當于父類的句柄指向子類對象,這樣的話句柄仍然能對子類對象與父類相同的屬性進行訪問。但是反過來,如果向下類型轉(zhuǎn)換也那么自由,當試圖把子類的句柄指向父類的對象會發(fā)生什么呢?父類本來劃好了一小塊地盤,但是因為子類含有比父類更豐富的屬性,它很有可能會訪問父類并不包含的資源,這時就找不到該資源,越界了,因此會有error。父類就好像上海,子類相當于長三角地區(qū),包含但不僅僅是上海,因此父類能到的地方子類都可以到,反之不行,因此把子類的句柄給父類沒關(guān)系,但反之不行,所以向下類型是需要有嚴格的類型檢查的,阻止非法轉(zhuǎn)換。

ex1:

class father;    string m_name;
   function new (string name);      m_name = name;    endfunction : new
   function void print ();      $display("Hello %s", m_name);    endfunction : printendclass : father
class child1 extends father;    string area1 = "jiangzhehu";
   function new (string area1);      super.new(area1);    endfunction : newendclass : child1
class child2 extends father;    string area2 = "shanghai";
   function new (string area2);      super.new(area2);    endfunction : newendclass : child2

program top;    father f;    child1 c10,c11,c12;    child2 c20,c21,c22;
   initial begin            f = new ("shanghai");            f.print();            c10 = new("jiangzhehu");            f = c10;            f.print();            c20 = new("changsanjiao");            f = c20;            f.print();            c20.area2 = "zhejiang";            $cast(c21, f);            c21.print();            $display("has %s", c21.area2);            c22 = c20;            c22.print();            $display("has %s", c22.area2);            c20.area2 = "hangzhou";            c21.print();            $display("has %s", c21.area2);            c22.print();            $display("has %s", c22.area2);
   end  endprogram : top

仿真結(jié)果如下:

# Hello shanghai# Hello jiangzhehu# Hello changsanjiao# Hello changsanjiao# has zhejiang# Hello changsanjiao# has zhejiang# Hello changsanjiao# has hangzhou# Hello changsanjiao# has hangzhou

請注意,不能直接把$cast(c21, f);前提是先把子類賦給父類才行。

使用cast也不能把c20給c10;

關(guān)于SystemVerilog中$cast方法的作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI