systemverilog學習(4)動態數組


本節主要內容:動態數組,隊列,聯合數組,數組基本操作,結構體類型,枚舉類型

一:動態數組

 1:基礎

   在run-time才知道元素個數,在compile-time不知道

      可以在仿真的時候再確定元素個數

2:表示

  data_type name_of_dynamic_array[];

  name_of_ dynamic_array = new[number of elements];

  實例:int dyn[]; dyn = new[5];dyn.delete();

3:可將固定數組賦值給動態數組,要求是元素個數相同

二:隊列(先進先出)

1:基礎知識

  可插入,刪除,sort,search,push,pop,add,remove;可將固定數組或者動態數組賦給隊列

2:表示

  data_type queue_name[$] = {..} //隊列賦值時大括號前面不加單引號

  實例:int b[$] = {3,4}; //{3,4}

     b.insert(1,1);   //{3,1,4} 在第一個元素后面添加1

     b.delete(1);  //{3,4} 刪除元素1

     b.push_front(6) ; //{6,3,4}

     j = b.pop.back;  //{6,3}, j = 4

三:聯合數組

1:基礎知識

  充分利用內存里的離散空間,不連續空間;

  索引值可以為整型,字符型,一維數組

2:表示

  data_type associative_array_name[*/string]

3:示例

  

  在內存中的存儲  

  說明:標准數組存儲時,所有的存儲器都用到了;聯合數組使用內存時,稀疏。

4:操作

  遍歷(foreach),first,next,prev,delete,exits

四:數組的操作

1:算術運算

  sum,product,and,or and xor

  例如下面是sum舉例:

  

  說明:on.sum返回on的位數,即一位,即值1(5個1相加取一位);將on.sum賦給位寬為8bit的summ,則返回值5。

2:sort,rsort(反過來排序),reverse,shuffle(打亂排序),find_first,find_first_with_index,unique(得到元素不重復的數組)

  

        //find_index with (item > 3); //元素大於3的索引值

3:sum的擴展用法

  

  //d.sum(x) with ((x>7)*x); //9*9+8*8

五:總結

Fixed Arrays: 在compile time時知道size;連續內存存放,支持多維

Dynamic Arrays:run time時得到size;連續內存;

Queues Arrays:FIFO/Stack

Associative Arrays:離散數據內存,索引可以為數字或者字符串;用於hash

六:結構體

  將變量放在一起,比如總線協議放在結構體里;默認是unpacked存放

1:示例

  

  使用:Instruction_Word.address = 24'hF00000;

2:packed存放(加入packed關鍵字)

  

  第一個數據放在內存的左側。

七:枚舉類型

1:表示

  enum {red,green.blue} RGB  //red = 0,green = 1,blue = 2

2:枚舉值類型

  **顯式指定枚舉值 enum{one = 1, five = 5, ten = 10} state;

  **部分顯式指定值 

3:枚舉指定類型

  enum bit {false,true} Boolean;

  enum logic [1:0] {WAITE,LOAD,READY} state;

  enum logic [1:0] {

    WAITE=3'b001,

    LOAD=3'b010,

    READY=3'b100} state;  //error;因為枚舉類型是兩位,賦值超過兩位

  emum logic {on = 1'b1,OFF=1'bz} out;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM