在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SystemVerilog動態(tài)數(shù)組的大小更改展示

芯片驗(yàn)證工程師 ? 來源:芯片驗(yàn)證工程師 ? 作者:驗(yàn)證哥布林 ? 2022-10-21 09:43 ? 次閱讀

動態(tài)數(shù)組是一個unpacked數(shù)組,其大小可以在運(yùn)行時(shí)更改。

需要使用" new "操作符實(shí)例化一個動態(tài)數(shù)組,使用[]表示。在實(shí)例化過程中,會設(shè)置動態(tài)數(shù)組的大小。動態(tài)數(shù)組聲明的語法如下:

data_type array_name [ ];

下面是簡單的動態(tài)數(shù)組示例:

module darray;
 integer da [ ]; //dynamic array ‘da’ of type integer
 initial
 begin
    da = new[4]; //construct and allocate a size of 4 elements
    $display($stime,,, "da size = %0d",da.size);
    da.delete( ); //delete elements of an array
    $display($stime,,, "da size = %0d",da.size);
    da = '{1,2,3,4}; //array initialization
    $display($stime,,, "da = ",da);
 end
 endmodule

仿真log:

0 da size = 4
0 da size = 0
0 da = '{1, 2, 3, 4}
V C S S i m u l a t i o n R e p o r t

上面的module聲明了一個名為“da[]”的動態(tài)數(shù)組,其中數(shù)據(jù)項(xiàng)的類型為integer。

Dynamic Arrays– Resizing

下面的示例展示了SystemVerilog動態(tài)數(shù)組的大小更改。

module darray;
 bit [7:0] d_array1[ ];
 initial begin
    //memory allocation
    d_array1 = new[2];
    $display($stime,,, "d_array1 size = %0d",d_array1.size);
    $display("
");
    //array assignment - changes the size of the array
    d_array1 = {2,3,4}; //add 1 more element to the array
    $display($stime,,, "d_array1 size = %0d",d_array1.size);
    $display($stime,,, "d_array1=",d_array1);
    $display("
");
 d_array1[2]=5;
    $display($stime,,, "d_array1[0]=",d_array1[0]);
    $display($stime,,, "d_array1[1]=",d_array1[1]);
    $display($stime,,, "d_array1[2]=",d_array1[2]);
    $display($stime,,, "d_array1=",d_array1);
    $display("
");
    d_array1[3]=6; //will not change the size of the array or
    //add a new element - Warning
    $display($stime,,, "d_array1 size = %0d",d_array1.size);
    $display($stime,,, "d_array1=",d_array1);
    $display("
");
    d_array1 = {2,3,4,6};
    $display($stime,,, "d_array1 size = %0d",d_array1.size);
    $display($stime,,, "d_array1=",d_array1);
    $display("
");
    //increase the size of d_array1
    d_array1 = new [d_array1.size( ) + 1] (d_array1) ;
    $display($stime,,, "d_array1 size = %0d",d_array1.size);
$display($stime,,,"d_array1=",d_array1);
 end
 endmodule

仿真log:

 0 d_array1 size = 2
 0 d_array1 size = 3
 0 d_array1='{'h2, 'h3, 'h4}
 
 0 d_array1[0]= 2
 0 d_array1[1]= 3
 0 d_array1[2]= 5
 0 d_array1='{'h2, 'h3, 'h5}
 0 d_array1 size = 3
 0 d_array1='{'h2, 'h3, 'h5}
 0 d_array1 size = 4
 0 d_array1='{'h2, 'h3, 'h4, 'h6}
 0 d_array1 size = 5
0 d_array1='{'h2, 'h3, 'h4, 'h6, 'h0}
 V C S S i m u l a t i o n R e p o r t

聲明一個動態(tài)數(shù)組d_array1.

分配2個數(shù)據(jù)項(xiàng)大小

 d_array1 = new[2];
 $display($stime,,, "d_array1 size = %0d",d_array1.size);
 
 0 d_array1 size = 2

初始化數(shù)組,增加了一個數(shù)據(jù)項(xiàng),表明動態(tài)數(shù)組的數(shù)據(jù)項(xiàng)是可以動態(tài)更改的:

//array assignment - changes the size of the array
 d_array1 = {2,3,4}; //add 1 more element to the array
 $display($stime,,, "d_array1 size = %0d",d_array1.size);
 $display($stime,,, "d_array1=",d_array1);

仿真log打印:

 0 d_array1 size = 3
 0 d_array1='{'h2, 'h3, 'h4}

改變第2個數(shù)據(jù)項(xiàng)的值,然后打印所有的動態(tài)數(shù)組值。

 d_array1[2]=5; //Change the value of 2nd  element
 $display($stime,,, "d_array1[0]=",d_array1[0]);
 $display($stime,,, "d_array1[1]=",d_array1[1]);
 $display($stime,,, "d_array1[2]=",d_array1[2]);
 $display($stime,,, "d_array1=",d_array1);

仿真log打印:

 0 d_array1[0]= 2
 0 d_array1[1]= 3
 0 d_array1[2]= 5
 0 d_array1='{'h2, 'h3, 'h5}

給不存在的index 3數(shù)據(jù)項(xiàng)賦值,結(jié)果是什么都不會發(fā)生,下面的賦值會被忽略:

 d_array1[3]=6; //will not change the size of the array –//Warning
 
 $display($stime,,, "d_array1 size = %0d",d_array1.size);
 $display($stime,,, "d_array1=",d_array1);

仿真log會打?。?/p>

 0 d_array1 size = 3
 0 d_array1='{'h2, 'h3, 'h5}

結(jié)果是什么都不會發(fā)生,上面的賦值會被忽略。

總結(jié)來說動態(tài)數(shù)組的大小只能通過重新初始化來更改。

d_array1 = {2,3,4,6};
 $display($stime,,, "d_array1 size = %0d",d_array1.size);
 $display($stime,,, "d_array1=",d_array1);
-------------------------
 0 d_array1 size = 4
 0 d_array1='{'h2, 'h3, 'h4, 'h6}

以及

d_array1 = new [d_array1.size( ) + 1] (d_array1);
 //increase the size of d_array1
 $display($stime,,, "d_array1 size = %0d",d_array1.size);
 $display($stime,,, "d_array1=",d_array1);
---------------------------
0 d_array1 size = 5
0 d_array1='{'h2, 'h3, 'h4, 'h6, 'h0}

Copying ofDynamic Arrays

可以將一個動態(tài)數(shù)組復(fù)制到另一個動態(tài)數(shù)組。

module darray; //copying of arrays
 int oarray [ ];
 int carray [ ];
 initial begin
 // Allocate 5 memory locations to "oarray" and
 // initialize with values
 oarray = new [5];
 oarray = '{1, 2, 3, 4, 5};
 carray = oarray; // copy "oarray" to "carray"
 $display ("carray = %p", carray);
 // Grow size by 1 and copy existing elements to the 
"carray"
 carray = new [carray.size( ) + 1] (carray);
 $display("carray size = %0d",carray.size);
 // Assign value 6 to the newly added location [index 5]
 carray [carray.size( ) - 1] = 6;
 $display("carray[5]=%0d",carray[5]);
 // Display contents of new "carray"
 $display ("carray = %p", carray);
 oarray = carray; //copy carray to oarray
 $display ("oarray = %p", oarray);
 // Display size of both arrays
 $display ("oarray.size( ) = %0d, carray.size( ) = %0d", 
oarray.size( ), carray.size( ));
 end
 endmodule

我們聲明了兩個動態(tài)數(shù)組,即“oarray”和“carray”。我們初始化“oarray”,然后復(fù)制到“carray”。然后我們增加carray的大小,將它復(fù)制回“oarray”中。

仿真log:

carray = '{1, 2, 3, 4, 5}
carray size = 6
carray[5]=6
carray = '{1, 2, 3, 4, 5, 6}
oarray = '{1, 2, 3, 4, 5, 6}
oarray.size( ) = 6, carray.size( ) = 6
 V C S S i m u l a t i o n R e p o r t

初始化數(shù)組oarray并初始化大小為5。然后復(fù)制
“oarray”到“carray?!?/p>

carray = '{1, 2, 3, 4, 5}

重新初始化“carray”,動態(tài)數(shù)組大小增加1。所以,現(xiàn)在新創(chuàng)建的carray的大小將是6:

carray size = 6

然后我們給第6個數(shù)據(jù)項(xiàng)賦值6,然后打印整個數(shù)組:

carray [5] = 6
carray = '{1,2,3,4,5,6}

現(xiàn)在,復(fù)制“carray”回“oarray”并打印整個數(shù)組“oarray”。

oarray = '{1,2,3,4,5,6}

最后,我們顯示原始的“oarray”和復(fù)制的“carray”的大小。它們應(yīng)該是一樣的。

oarray.size( ) = 6, carray.size( ) = 6

總結(jié)來說,oarray和carray操作的實(shí)際上是同一個數(shù)組,只是通過不同的指針而已。

Dynamic Array ofArrays

動態(tài)數(shù)組也可以多維,即動態(tài)數(shù)組中每一個數(shù)據(jù)項(xiàng)都是一個另外的動態(tài)數(shù)組。

module darray;
 int abc[ ][ ]; //array of arrays
 initial begin
 abc = new[3]; //sub array still not created
 $display("abc = ",abc);
 //Create sub-arrays
 foreach (abc[i]) begin
    abc[i] = new[4];
    $display("abc[%0d] = %p", i, abc[i]);
 end
    $display("abc = ",abc);
    //assign values to array and sub-array
 foreach(abc[i , j]) begin
    abc[i][j] = (j+1)+i;
 end
 //display
 foreach (abc[i , j]) begin
    $display("abc[%0d][%0d] = %0d", i, j, abc[i][j]);
 end
 $display("abc = ",abc);
 end
 endmodule

仿真log:

abc = '{'{}, '{}, '{}}
abc[0] = '{0, 0, 0, 0}
abc[1] = '{0, 0, 0, 0}
abc[2] = '{0, 0, 0, 0}
abc = '{'{0, 0, 0, 0} , '{0, 0, 0, 0} , '{0, 0, 0, 0} }
abc[0][0] = 1
abc[0][1] = 2
abc[0][2] = 3
abc[0][3] = 4
abc[1][0] = 2
abc[1][1] = 3
abc[1][2] = 4
abc[1][3] = 5
abc[2][0] = 3
abc[2][1] = 4
abc[2][2] = 5
abc[2][3] = 6
abc = '{'{1, 2, 3, 4} , '{2, 3, 4, 5} , '{3, 4, 5, 6} }
 V C S S i m u l a t i o n R e p o r t

我們聲明一個名為“abc”的二維動態(tài)數(shù)組。然后我們分配內(nèi)存,讓它有三個元素(abc = new[3])。注意,此時(shí)只有第一維動態(tài)數(shù)組完成了初始化,第二維動態(tài)數(shù)組仍然沒有進(jìn)行初始化,所以都為空數(shù)組。

abc = '{'{}, '{}, '{}}

接下來,使用for循環(huán)為每個第二維數(shù)組初始化(int類型的默認(rèn)值為0)

abc[0] = '{0, 0, 0, 0}
abc[1] = '{0, 0, 0, 0}
abc[2] = '{0, 0, 0, 0}

然后就可以再次使用foreach語法遍歷賦值和打印每個數(shù)據(jù)項(xiàng)了。注意所使用的語法。

foreach(abc[i , j])
abc[0][0] = 1
abc[0][1] = 2
abc[0][2] = 3
abc[0][3] = 4
abc[1][0] = 2
abc[1][1] = 3
abc[1][2] = 4
abc[1][3] = 5
abc[2][0] = 3
abc[2][1] = 4
abc[2][2] = 5
abc[2][3] = 6

abc = '{'{1, 2, 3, 4} , '{2, 3, 4, 5} , '{3, 4, 5, 6} }




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:SystemVerilog中的動態(tài)數(shù)組

文章出處:【微信號:芯片驗(yàn)證工程師,微信公眾號:芯片驗(yàn)證工程師】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    labview能否對動態(tài)數(shù)組的元素每循環(huán)一次就比較一次大小

    labview能否對一個動態(tài)數(shù)組,每進(jìn)行一次循環(huán),就比較一下本次元素值和上次元素值的大小,若大于上次循環(huán)元素,則記錄,不大于,則不記錄
    發(fā)表于 11-16 17:11

    轉(zhuǎn)一篇Systemverilog的一個牛人總結(jié)

    Systemverilog數(shù)據(jù)類型l 合并數(shù)組和非合并數(shù)組1)合并數(shù)組:存儲方式是連續(xù)的,中間沒有閑置空間。例如,32bit的寄存器,可以看成是4個8bit的數(shù)據(jù),或者也可以看成是1個
    發(fā)表于 08-27 14:50

    更新數(shù)組元素同時(shí)可更改數(shù)組大小

    大神們,求助,在我的程序中需要輸入一個2維數(shù)組作為數(shù)據(jù)輸入,但是當(dāng)?shù)谝淮螌懭霐?shù)據(jù)后,就確定了該數(shù)組的維度和大小,當(dāng)我再次更改數(shù)據(jù)時(shí),就不能改變數(shù)組
    發(fā)表于 05-10 16:24

    emOsprey動態(tài)數(shù)組的特性

    來源:公眾號【魚鷹談單片機(jī)】作者:魚鷹OspreyID :emOsprey動態(tài)數(shù)組???不知道你是否聽說過 C99 有一個動態(tài)數(shù)組的特性,也就是說,
    發(fā)表于 01-11 06:28

    變長數(shù)組動態(tài)數(shù)組區(qū)別

    動態(tài)數(shù)組是指在聲明時(shí),沒有確定數(shù)組大小數(shù)組,它可以隨程序需要而重新指定大小。
    的頭像 發(fā)表于 09-28 15:20 ?2226次閱讀

    SystemVerilog數(shù)組的賦值、索引和切片

    數(shù)組可以作為參數(shù)傳遞給子程序,當(dāng)數(shù)組作為值傳遞給子程序時(shí),會將這個數(shù)組復(fù)制一份傳遞給子程序。
    的頭像 發(fā)表于 10-20 10:13 ?5868次閱讀

    SystemVerilog中的操作方法

    SystemVerilog提供了幾個內(nèi)置方法來支持數(shù)組搜索、排序等功能。
    的頭像 發(fā)表于 10-31 10:10 ?3445次閱讀

    SystemVerilog中可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog中除了數(shù)組、隊(duì)列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1928次閱讀

    網(wǎng)絡(luò)和變量的未壓縮數(shù)組

    SystemVerilog有兩種類型的數(shù)組:壓縮數(shù)組和非壓縮數(shù)組。壓縮數(shù)組是連續(xù)存儲的位的集合,通常稱為向量。非壓縮
    的頭像 發(fā)表于 02-09 14:50 ?900次閱讀
    網(wǎng)絡(luò)和變量的未壓縮<b class='flag-5'>數(shù)組</b>

    C語言中的數(shù)組空間動態(tài)開辟

    C語言中的數(shù)組空間動態(tài)開辟 在C語言中,必不可少的需要使用到數(shù)組,通常為了動態(tài)的開辟數(shù)組空間,可以使用 malloc 函數(shù),在C++中可以使
    的頭像 發(fā)表于 02-10 12:42 ?2435次閱讀

    使用SystemVerilog解決數(shù)組問題

    數(shù)獨(dú)是一種非常流行的游戲,數(shù)獨(dú)本質(zhì)上也是一個約束問題,所以我們可以讓SystemVerilog的約束求解器來幫助我們解決。 約束求解器的精妙之處就是,我們只描述約束限制,繁重的數(shù)值生成工作由工具來幫我們完成。 你只需“既要...又要...”,其他的讓下人干吧。
    的頭像 發(fā)表于 03-08 14:06 ?1844次閱讀

    一些有趣的數(shù)組相關(guān)的SystemVerilog約束

    我們在工作中常常會針對數(shù)組施加各式的約束,下面列舉一下有趣的Systemverilog數(shù)組約束示例。
    的頭像 發(fā)表于 03-08 13:12 ?1228次閱讀

    一些有趣的數(shù)組相關(guān)的SystemVerilog約束

    我們在工作中常常會針對數(shù)組施加各式的約束,下面列舉一下有趣的**Systemverilog數(shù)組約束**示例
    的頭像 發(fā)表于 05-30 11:13 ?1027次閱讀

    帶你了解SystemVerilog中的關(guān)聯(lián)數(shù)組

    SystemVerilog中,我們知道可以使用動態(tài)數(shù)組實(shí)現(xiàn)數(shù)組元素個數(shù)的動態(tài)分配,即隨用隨分
    的頭像 發(fā)表于 06-09 09:46 ?8258次閱讀
    帶你了解<b class='flag-5'>SystemVerilog</b>中的關(guān)聯(lián)<b class='flag-5'>數(shù)組</b>

    動態(tài)數(shù)組和C++ std::vector詳解

    std::vector是C++的默認(rèn)動態(tài)數(shù)組,其與array最大的區(qū)別在于vector的數(shù)組動態(tài)的,即其大小可以在運(yùn)行時(shí)
    的頭像 發(fā)表于 07-19 11:07 ?1335次閱讀
    主站蜘蛛池模板: 很黄很色网站 | 久久亚洲国产精品五月天 | 成人男女啪啪免费观看网站 | 抽搐一进一出gif免费男男 | 亚洲精品午夜视频 | 永久免费影视在线观看 | 黄色一级片播放 | 日本.www| 免费国产成人午夜私人影视 | 最新欧美伦理网 | 亚洲成人激情电影 | 狠狠色狠狠色综合久久一 | 丁香六月婷婷精品免费观看 | 欧美日韩一区二区三区毛片 | yy8090韩国日本三理论免费 | 韩漫免费网站无遮挡羞羞漫画 | 久久999| 日本68xxxxxxxxx59 日本68xxxxxxxxx老师 | 国产精品亚洲玖玖玖在线靠爱 | 香港三级理论在线影院 | 非常黄的网站 | 国产免费一区二区三区最新 | 四虎永久在线精品 | 亚洲综合五月天婷 | 天天综合网天天综合色不卡 | 男人j进女人j视频 | 在线视频 亚洲 | 男女交性永久免费视频播放 | 亚洲性后网 | 国产综合精品久久久久成人影 | 日在线视频 | 人人爱天天操 | 五月婷婷六月合 | 黄色18网站 | 欧美一级黄色录相 | h版欧美一区二区三区四区 h网站亚洲 | 伊人三级| freesexvideo性2| 男女在线观看视频 | 日本aaaaa毛片在线视频 | 香蕉视频黄色在线观看 |