SystemVerilog:动态数组的关联数组

时间:2016-11-30 09:09:08

标签: multidimensional-array associative-array system-verilog dynamic-arrays

在systemverilog中 - 是否可以创建动态数组的关联数组?

具体来说 - 我需要从某种类型的请求的id(整数)到字节数组(对请求的响应)的映射,但是每个数组的 size 只在运行时才知道字节数。

如果不可能,有没有办法让一个关联的指针或指针对象数组?或者对这些类型的数据结构的解决方案的任何其他想法?

我知道我可以为数组创建一个包装类,但对于这样一个基本需求来说这似乎有点麻烦......

谢谢

1 个答案:

答案 0 :(得分:3)

可以有一个动态数组的关联数组(或动态数组的动态数组等),例如:

byte AA_OF_DA_OF_BYTE [*][]; 

问题是,一旦你获得了动态数组的多个维度,System-Verilog语言会有点挣扎,你必须开始编写更多的代码:

module ASSOC_OF_DYN;

  //
  // here's your associative array of dynamic arrays
  //

  byte AA_OF_DA_OF_BYTE [*][]; 


  // 
  // iterate over the associative array to fill it full
  //

  // eg 16 possible dynamic arrays...
  int unsigned NO_AI = 16;

  // ...of up to 256 bytes
  int unsigned MAX_DA_SIZE = 256;

  // this array is indexed by consequtive unsigned ints, but you can index by
  // whatever you like
  initial begin : FILL
    for (int AI = 0; AI < NO_AI; AI++) begin : AI_LOOP

      // pick a random size for the dynamoc array...
      automatic int unsigned DA_SIZE = $urandom_range(0, MAX_DA_SIZE-1);

      // ...and allocate the AIth dynamic array
      AA_OF_DA_OF_BYTE[AI] = new[DA_SIZE];

      // fill the dynamic array - this could be done some other way
      for (int DI = 0; DI < DA_SIZE; DI++)
        AA_OF_DA_OF_BYTE[AI][DI] = $urandom_range(0, 255);  // because it is a byte

    end : AI_LOOP
  end : FILL


  // 
  // display the filled array
  // 
  final begin : DISPLAY
    for (int AI = 0; AI < NO_AI; AI++) 
      $display("AA_OF_DA_OF_BYTE[%d]= %p", AI, AA_OF_DA_OF_BYTE[AI]);
  end : DISPLAY

endmodule

https://www.edaplayground.com/x/kZM