色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SystemVerilog中的Shallow Copy

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:芯片驗證工程師 ? 2022-11-21 10:32 ? 次閱讀

SystemVerilog中的句柄賦值對象復制的概念是有區別的。

PCI p1;
p1 = new;
PCI p2;
p2 = p1; //class assignment

經過上面的代碼執行后,“p1”和 “p2” 最終指向的還是同一個內存空間,也就是說他們指向的是同一個對象實例。

如果你希望將p1的內容原封不同地復制到p2,他們就得是兩個不同的對象實例,即指向不同的內存空間。

 PCI p1;
 p1 = new;
 PCI p2;
 p2 = new p1; //shallow copy

在上面的例子中,“p2”是一個新的對象實例,其中所有屬性值都復制自“p1.”

這在概念上稱為“shallow copy”,這是相對于“deep copy”而言的,具體的區別我們后面的文章會介紹。

shallow copy會復制對象中所有的屬性,包括類中其他的對象句柄,注意只能復制類中的對象句柄,而不能復制類中其他的對象實例。

f36bf2b2-688a-11ed-8abf-dac502259ad0.png

在上圖中,我們聲明了一個類“PCI” 和2個類句柄“p1” 和“p2”。

我們實例化“p1”,如上圖所示分配的物理地址空間是0xffff,屬性addr和data的初始值都是0。

然后別分別賦值addr為‘h12,data為‘h56。

shallow copy p1到p2,會分配一個新的物理地址空間0xf0f0。并且將p1中的“addr”和“data”復制給p2。

p2 = new p1;

我們改變p2中addr為34,data為78。因為是不同的對象實例,所以p2不會影響到p1。

假如我們想要復制的類中還有一個類對象,情況會怎樣?

module class_TOP( );
 class PCIChild;
 logic [7:0] burstC;
 function new (logic [7:0] burst);
 burstC = burst;
 endfunction
 endclass : PCIChild
 
 class PCITop;
 logic [31:0] addrTop;
 logic [31:0] dataTop;
 PCIChild PCIc;
 task PCIM(logic [31:0] addr, logic [31:0] data, logic 
[7:0] burst);
 PCIc = new(burst); //instantiate PCIc
 addrTop = addr;
 dataTop = data;
 endtask
 
 function void disp (string instName);
 $display("[%s] addr = %h data = %h burst=%h", instName, 
addrTop, dataTop, PCIc.burstC);
 endfunction
 
 endclass : PCITop
 
 PCITop PCI1, PCI2;
 
 initial begin;
 PCI1 = new;
 PCI1.PCIM(32'h 0000_00f, 32'h f0f0_f0f0, 8'h12);
 PCI1.disp("PCI1");
 PCI2 = new PCI1; //Shallow copy of PCI1 into PCI2
 PCI2.disp("PCI2"); //copied content displayed
 PCI2.addrTop = 32'h1234_5678;
 PCI2.dataTop = 32'h5678_abcd;
 PCI2.PCIc.burstC = 8'h 9a;
 PCI2.disp("PCI2");
 PCI1.disp("PCI1");
 end
 endmodule

仿真log:

[PCI1] addr = 000000ff data = f0f0f0f0 burst=12
[PCI2] addr = 000000ff data = f0f0f0f0 burst=12
[PCI2] addr = 12345678 data = 5678abcd burst=9a
[PCI1] addr = 000000ff data = f0f0f0f0 burst=9a
 V C S S i m u l a t i o n R e p o r t

在上面的例子中,我們聲明了一個名為PCIChild的類,其中含有屬性“burstC”。
我們還聲明了一個叫做PCITop的類,它有兩個屬性“addrTop”和“dataTop”。

我們在類PCITop中聲明類型為PCIChild的變量PCIc并在任務“PCIM”中實例化。

因此,PCIc現在擁有一個PCIChild類型的對象句柄。

后面我們聲明兩個類型為PCITop的變量“PCI1”和“PCI2”,并實例化PCI1。然后我們將PCI1的shallow copy到PCI2中(PCI2 = new PCI1;)。

在打印的log中我們可以發現PCI2中“addrTop”和“dataTop”修改不會反映到PCI1,而對PCI2中對象PCIc的修改會反映到PCI1。

PCI2.PCIc.burstC = 8'h 9a;

這是因為shallow copy只復制了類中的對象句柄,而沒有為對象PCI2.PCIc再次分配內存空間。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110250
  • System
    +關注

    關注

    0

    文章

    165

    瀏覽量

    37020
  • 代碼
    +關注

    關注

    30

    文章

    4821

    瀏覽量

    68890

原文標題:SystemVerilog中的Shallow Copy

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SystemVerilog的Deep Copy概念

    shallow copy只能復制類的對象句柄,如果我們還想為這個對象句柄實例化,并復制其中的內容呢?
    發表于 11-22 09:23 ?457次閱讀

    SystemVerilog的Virtual Methods

    SystemVerilog多態能夠工作的前提是父類的方法被聲明為virtual的。
    發表于 11-28 11:12 ?724次閱讀

    SystemVerilog的“const”類屬性

    SystemVerilog可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
    發表于 11-29 10:25 ?2174次閱讀

    SystemVerilog的聯合(union)介紹

    SystemVerilog ,聯合只是信號,可通過不同名稱和縱橫比來加以引用。
    的頭像 發表于 10-08 15:45 ?1463次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯合(union)介紹

    關于SV擴展類的copy函數的疑問

    最近在學習systemverilog,讀的是經典教材《SystemVerilog for Verification》Chris Spear寫的。8.5.1節對象的復制搞不明白是啥意思。代碼如下
    發表于 04-07 14:28

    如何用questasim進行systemverilog仿真

    剛接觸systemverilog,最近在采用questasim10.1版本進行仿真時,發現貌似questasim不支持擴展類的操作?代碼如下:`timescale 1ns/1nsmodule
    發表于 04-11 09:44

    SystemVerilog的Deep Copy是如何實現的呢

    shallow copy只能復制類的對象句柄,如果我們還想為這個對象句柄實例化,并復制其中的內容呢?那就是deep copy的概念了。deep c
    發表于 11-25 11:17

    SystemVerilog的斷言手冊

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發表于 07-22 14:12 ?20次下載

    SystemVerilog$cast的應用

    SystemVerilog casting意味著將一種數據類型轉換為另一種數據類型。在將一個變量賦值給另一個變量時,SystemVerilog要求這兩個變量具有相同的數據類型。
    的頭像 發表于 10-17 14:35 ?2910次閱讀

    SystemVerilog的操作方法

    SystemVerilog提供了幾個內置方法來支持數組搜索、排序等功能。
    的頭像 發表于 10-31 10:10 ?2953次閱讀

    SystemVerilog可以嵌套的數據結構

    SystemVerilog除了數組、隊列和關聯數組等數據結構,這些數據結構還可以嵌套。
    的頭像 發表于 11-03 09:59 ?1642次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數據類型的集合。
    的頭像 發表于 11-07 10:18 ?2521次閱讀

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗語)是一個多個進程之間同步的機制之一,這里需要同步的原因是這多個進程共享某些資源。
    的頭像 發表于 12-12 09:50 ?3435次閱讀

    帶你了解SystemVerilog的關聯數組

    SystemVerilog,我們知道可以使用動態數組實現數組元素個數的動態分配,即隨用隨分
    的頭像 發表于 06-09 09:46 ?7581次閱讀
    帶你了解<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的關聯數組

    Systemverilog的Driving Strength講解

    systemverilog,net用于對電路連線進行建模,driving strength(驅動強度)可以讓net變量值的建模更加精確。
    的頭像 發表于 06-14 15:50 ?1670次閱讀
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength講解
    主站蜘蛛池模板: 综合人妻久久一区二区精品| 99热久久精品国产一区二区| YY6080A旧里番在线观看| 久热这里在线精品| 在线国产a不卡| 久久偷拍国2017| 最新亚洲一区二区三区四区| 两个人在线观看的视频720| 18岁末年禁止观看免费1000个| 九九久久国产精品大片| 亚洲精品色婷婷在线蜜芽| 好湿好紧水多AAAAA片秀人网| 亚洲精品高清在线观看| 九色PORNY真实丨国产免费| 御姐被吸奶| 你是淫荡的我的女王| G0GO人体大尺香蕉| 熟女人妻AV五十路六十路| 国产一区免费在线观看| 亚洲综合AV色婷婷五月蜜臀| 就操成人网| 办公室激情在线观看| 偷偷鲁青春草原视频分类| 和姐姐做插得很深| 中文字幕精品无码一区二区| JAVAPARSER丰满白老师| 无套内射无矿码免费看黄| 免费国产成人高清在线看软件| 国产呦精品一区二区三区下载| yellow2019在线观看视频| 伊人色综合久久天天| 四虎永久在线精品国产| 能看的黄页最新网站| 久爱精品亚洲电影午夜| 国产精品7777人妻精品冫| av狼新人开放注册区| 长篇高h肉爽文丝袜| 亚洲第一国产| 三级全黄a| 欧美一道本一区二区三区| 久久这里只精品热在线18 |