Существует ли метод systemverilog для проверки временной детализации? - PullRequest
0 голосов
/ 15 апреля 2020

Мне трудно работать с типом данных systemverilog.

Допустим, есть два пакета от третьей стороны.

package p1;
  import p2:*;
  class d;
    time c;
    function print();
      $display("t1 is %t, t2 is %t\n", c.t1, c.t2);
      c = t2 - t1;
      $display("c is %t\n", c);
    endfunction  
endpackage : p1

package p2;
  class c;
    time t1;
    time t2;
  endclass : c
endpackage : p2

Если t2 равно 100 нс, t1 равно 10 нс, c распечатывает 900000. Может кто-нибудь сказать мне, что могло случиться с кодом выше? Есть ли способ проверить временную гранулярность в обоих пакетах?

1 Ответ

1 голос
/ 16 апреля 2020

Прежде всего, в типе данных time нет ничего особенного - это просто 64-разрядное целое число без знака. Важна временная шкала / единица, в которой вы присваиваете t1 и t2, используя $time

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

realtime t1;

t1 = $realtime/1ns;

Лучше всего использовать $ realtime, чтобы получить дробные временные шаги.

...