Jump to content
    

Использование rand_mode с queue в xcelium

Здравствуйте. Наткнулся на то, что в xcelium 23 (и 24) отключение рандомизации для queue объектов не работает, как с другими типами.
Вот пример:

class object;
  local rand int a;

  function new();
    a = 0;
  endfunction

  function void print();
    $display("a = %0d", a);
  endfunction
endclass

typedef object object_q[$];

class rand_mode_test;
  rand local object_q objects;

  function new();
    objects.rand_mode(0);
  endfunction

  function void pre_randomize();
    initialize_objects();
  endfunction

  local function void initialize_objects();
    objects = {};
    repeat(1) begin
      object temp = new();
      objects.push_back(temp);
    end
  endfunction

  function void print();
    foreach(objects[i]) begin
      objects[i].print();
    end
  endfunction
endclass

module tb;
  initial begin
    main();
    #1000ns;
    $finish;
  end

  task automatic main();
    rand_mode_test test = new();
    assert(test.randomize());
    test.print();
  endtask
endmodule

Я ожидаю, что после выполнения строчки test.print() - выведутся все 0, потому что рандомизация отключена, но выводятся явно рандомные значения.
Запуск в xcelium 23 и 24 дает следующий результат:
 

xmsim(64): 24.03-s001: (c) Copyright 1995-2024 Cadence Design Systems, Inc.
Loading snapshot work.tb:module .................... Done
SVSEED default: 1
xcelium> source /var/eda/cadence/XCELIUM2403/tools/methodology/UVM/CDNS-1.2/additions/sv/files/tcl/uvm_sim.tcl
xcelium> run
a = 1491695440
Simulation complete via $finish(1) at time 1 US + 0

То есть очевидно, что рандомизация не отключилась. В стандарте я не нашел, почему бы этот пример не должен работать, как я ожидаю.

Share this post


Link to post
Share on other sites

Здравствуйте,

Вот Ваш код с небольшими изменениями:

Спойлер

class object;
  local rand int a;

  function new();
    a = 0;
  endfunction

  function void print();
    $display("a = %0d", a);
  endfunction
endclass

typedef object object_q[$];

class rand_mode_test;
  rand local object_q objects;

  function new();
    //objects.rand_mode(0);
  endfunction

  function void pre_randomize();
    initialize_objects();
  endfunction

  local function void initialize_objects();
    objects = {};
    repeat(1) begin
      object temp = new();
      objects.push_back(temp);
    end
    objects.rand_mode(0); // !!!
  endfunction

  function void print();
    foreach(objects[i]) begin
      objects[i].print();
    end
  endfunction
endclass

module tb;
  initial begin
    main();
    #1000ns;
    $finish;
  end

  task automatic main();
    rand_mode_test test = new();
    assert(test.randomize());
    test.print();
  endtask
endmodule

 

Выключение рандомизации после выделения памяти под целевые объекты приводит к искомому результату.

Share this post


Link to post
Share on other sites

Спасибо.
Но в процессе отладки примера выше, я хотел посмотреть, а какой rand_mode будет в итоге у поля objects в классе rand_mode_test. Когда я пытался вывести rand_mode, у меня случалась ошибка компиляции. Но я опять же не пойму почему, ведь очередь  - это переменная, которая может быть объявлена с модификатором rand, то есть у нее должно быть можно посмотреть с помощью метода rand_mode(), в каком она сейчас состоянии (моде).

Я пришел к более простому примеру, который у меня не компилируется.
 

typedef int int_q[$];

class rand_mode_test;
  rand int_q data;

  constraint c_data_size {
    data.size() inside {[5 : 10]};
  }

  function void pre_randomize();
    $display("data.rand_mode() = %0b", data.rand_mode());
  endfunction
endclass

module tb;
  initial begin
    main();
    #1000ns;
    $finish;
  end

  task automatic main();
    rand_mode_test test = new();
    assert(test.randomize());
  endtask
endmodule

 

xmvlog: *E,EXPRMS (/home/tsymbalenko-dn/playground/sim/tb/tb.sv,11|52): Expecting an array element as the prefix to a rand_mode function.


Правильно ли я понимаю, что в xcelium просто нереализован этот функционал или я что-то неправильно делаю?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...