Возврат массива в Specman - PullRequest
1 голос
/ 19 мая 2009

Как мне вернуть массив из вызова метода в Specman ? Э.Г.

method a : list of uint is { 
   var data: list of uint;
   .....
   result = data;

};

extend sys {
 var data_sys: list of uint;
 run() is also {
  data_sys = a();
 };
};

Моя распечатка показывает, что некоторые элементы отличаются от данных массива и data_sys. Можете ли вы сказать мне, что я пропустил?

Ответы [ 2 ]

1 голос
/ 15 марта 2010

просьба предоставить sscce .

без этого, этот очень простой пример мог бы сделать:

extend sys {
  m() : list of uint is {
    print result.size(); // result.size() = 0
  };

  run() is also {
    var m := m();
  };
};

методы могут возвращать массив, который выделен для вас по умолчанию. он возвращается по указателю, так что имейте в виду.

как правило для большого пальца, старайтесь избегать методов, возвращающих список, когда вы вычисляете их. попробуйте передать список в качестве параметра, чтобы передать его динамическую природу, если метод не является методом создания или получателем:

collect_packets(packets : list of packet) is {...};
get_collected_packets() : list of packet is {...};
1 голос
/ 19 мая 2009

Код, который вы разместили, не будет компилироваться. Вставьте больше операторов печати или установите точку останова в specview и пошагово пройдитесь по коду. Знаете ли вы, на какой стадии теста вы распечатываете? Если вы хотите процедурно установить data_sys (вместо того, чтобы Specman генерировал его), вы должны указать модификатор do-not-generate '!'.

[...]
!data_sys : list of uint;
[...]
...