(今日迷惑)systemverilog定义数组时,定义方法不一致导致的错误

博主在使用SystemVerilog定义数组时遇到了问题,由于初始化方式的不同,导致数组顺序出现混乱。通过调整定义方式和使用for循环初始化,解决了这个问题。错误的根本原因在于数组维度定义的顺序不一致,这在查看数据结构时造成了误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日迷惑

我定义了一个类

class sdata;
  bit [255:0] data [2048];
  rand int     data_t [2048][32];
  rand bit       mask [2048][32];
  bit flag;

  constraint c {
      foreach (data_t[i,j]) data_t[i][j]< 5;
      foreach (data_t[i,j]) data_t[i][j]>-5;
  }

  function void post_randomize();
    if (flag) begin
      for (int i = 0; i < 2048; i++) begin
        for (int j = 0; j < 32; j++) begin
          data[i][8*j+:8]=data_t[i][j]*mask[i][j];
        end
      end
    end
  endfunction

endclass : sdata

我想用它来初始化一个ram和一个数组,他们的定义分别是

bit [255:0] mem_fmap_in [2048];

reg [`FMAP_MEM_WD-1:0] ram [`FMAP_MEM_DEP-1:0];

初始化代码

sdata temp;

void'(temp.randomize());

mem_fmap_in=temp.d