以下のコードは、modelsim ase10.1d にて、以下の手順で動作確認を行いました。
vlib work
vlog -sv tb_top.sv
vsim -c tb_top -do "run -all;quit"
--- tb_top.sv (module)
`timescale 1ps/1psmodule tb_top;  `include "data_item.sv"  `include "c_scrbd.sv"  c_scrbd #(data_item) _scrbd;  initial begin    int i;    data_item item;    logic [7:0] data_q[$];    _scrbd = new();    fork _scrbd.run(); join_none    // データ生成    for(i=0; i<8; i=i+1)begin      data_q.push_back($urandom_range(255,0));    end    for(i=0; i<8; i=i+1)begin      item = new("EXP");      item.set_data(i, data_q[i]);      _scrbd.write_exp(item);    end    for(i=0; i<8; i=i+1)begin      item = new("OBS");      item.set_data(i, data_q[i]);      _scrbd.write_obs(item);    end    #100 $finish;  endendmodule--- c_scrbd.sv (class)
class c_scrbd #(type T = int);  string name = "m_scrbd";  T exp_q[$];  T obs_q[$];  function void set_name(string _name);    name = _name;  endfunction  function void write_exp(T item);    exp_q.push_back(item);  endfunction  function void write_obs(T item);    obs_q.push_back(item);  endfunction  virtual task run;    forever begin      wait(obs_q.size()!=0);      if(exp_q[0].compare(obs_q[0]))begin        $display("%0t [SCRBD] %s compare OK ===================================", $time, name);        exp_q[0].print;      end else begin        $display("%0t [SCRBD] %s compare NG ===================================", $time, name);        exp_q[0].print;        obs_q[0].print;      end      exp_q.delete(0);      obs_q.delete(0);    end  endtaskendclass--- data_item.sv (class)
class data_item;  string name;  logic [7:0] data0;  logic [7:0] data1;  function new (string name="data_item");    this.name = name;  endfunction  function bit compare(data_item item);    if(data0===item.data0 && data1===item.data1)begin      return 1;    end else begin      return 0;    end  endfunction  function void set_data(logic [7:0] data0, data1);    this.data0 = data0;    this.data1 = data1;  endfunction  function void print;    $display("----------------------------------------------------------");    $display("%0t [%s] data0 : %02xh", $time, name, data0);    $display("%0t [%s] data1 : %02xh", $time, name, data1);    $display("----------------------------------------------------------");  endfunctionendclass