qshinoの日記

Powershell関係と徒然なこと

SystemVerilog配列

SystemVerilog 配列

SystemVerilog 配列は4種類。

  1. 静的配列
  2. 動的配列
  3. queue
  4. 連想配列

コード例

queueと連想配列使用例。byte型データのメモリ。

// mem.sv
module mem; 

  // Variables
  byte m[int unsigned]; // 連想配列
  int unsigned q[$]; // queue

  // functions
  function void write(int unsigned addr, byte data); 
    m[addr] = data; 
  endfunction 

  // flow
  initial begin 
    for(int unsigned i=0; i<4; i++)begin
      write(4*i, i);     
        q.push_back(4*i); 
    end // for

    for(int unsigned i=0; i<q.size(); i++)begin 
      $display("m[%02xh] = %02xh", q[i], m[q[i]]); 
    end // for
  end // initial

endmodule

// 出力

# m[00h] = 00h
# m[04h] = 01h
# m[08h] = 02h
# m[0ch] = 03h

補足

静的配列

int unsigned a[4];

動的配列

  • int da[];
  • da=new da[8];

queue

int q[$];
int val;
int len;

q.push_back(1);
val = q.pop_front();

q.push_front(2);
val = q.pop_back();

len = q.size();

連想配列

btye aa[int unsigned];
byte b;
int len;

aa[2]=8'h44;
b=aa[2];

len = aa.num(); // 登録サイズ

int key;
key=2;

if (aa.exists(key) ) begin
  $display("hello")
end

// 以下戻り値、0見つからない。1見つかった。keyrefは参照属性。

aa.first(keyref)
aa.next(keyref)
aa.last(keyref)
aa.prev(keyref)

連想配列

module associative_array;
  //array declaration
  int a_array[*]; 
  int index;

  initial begin
    //allocating array and assigning value to it
    repeat(3) begin
      a_array[index] = index*2;
      index=index+4;
    end

    //exists()-Associative array method
    if(a_array.exists(8))
      $display("Index 8 exists in a_array");
    else
      $display("Index 8 doesnt exists in a_array");

    //last()-Associative array method
    a_array.last(index);
    $display("Last entry is a_array[%0d] = %0d",index,a_array[index]);

    //prev()-Associative array method
    a_array.prev(index);
    $display("entry is a_array[%0d] = %0d",index,a_array[index]);

    //next()-Associative array method
    a_array.next(index);
    $display("entry is a_array[%0d] = %0d",index,a_array[index]);
  end

endmodule

Simulator Output:

Index 8 exists in a_array 
Last entry is a_array[8] = 16 
entry is a_array[4] = 8 
entry is a_array[8] = 16

参考

https://sites.google.com/site/playsystemverilog/array/associative_array?authuser=0

連想配列 Associative Arrayについては https://verificationguide.com/systemverilog/systemverilog-associative-array/