Specman e: есть ли способ напечатать имя экземпляра устройства? - PullRequest
0 голосов
/ 03 июня 2018

Я построил универсальный agent, который будет несколько раз создаваться в среде:

unit agent_u {
    monitor : monitor_u is instance;
};

Монитор печатает некоторые сообщения, например:

unit monitor_u {
    run() is also {
        message(LOW, "Hello monitor!");
    };
};

Я бынравится добавлять к сообщениям монитора, какой экземпляр агента их напечатал.Например, для среды:

extend sys {
    first_agent : agent_u is instance;
    second_agent : agent_u is instance;
};

желаемый вывод будет выглядеть примерно так:

first_agent: Hello monitor!
second_agent: Hello monitor!

Я не смог найти ничего, связанного с именем экземпляра, в API отражения ...есть ли способ напечатать имя экземпляра в e?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Не уверен, что именно вы называете «именем экземпляра», но есть несколько моментов, о которых нужно знать.

Существует предопределенный e_path() метод any_unit.

Существует уникальный идентификатор для экземпляров struct и unit, состоящий из имени типа и уникального номера, который возвращается методом to_string().Этот уникальный идентификатор уже напечатан как часть сообщения.

Кроме того, вы можете использовать предопределенный метод перехвата create_formatted_message(), предпочтительно вместе с определением собственного нового message_format, для настройки способа печати сообщений.Например, вы можете добавить результат e_path() в форматированную строку сообщения, если хотите, чтобы он автоматически появлялся во всех сообщениях.

Вы также можете использовать ловушку short_name() для предоставления своих собственных символических именединицам, и они будут появляться в сообщениях вместо результата to_string().

В принципе, вы также можете переопределить сам to_string(), но это будет иметь больше эффектов, чем просто распечатка сообщений.

0 голосов
/ 04 июня 2018

печать с помощью message () уже будет включать указатель экземпляра, в вашем случае что-то вроде:

[0] agent_u-@1: Hello monitor!
[0] agent_u-@2: Hello monitor!

, которое можно различить по этим @ NUM .

или включите «me.e_path ()» в свое сообщение, которое даст полный путь к экземпляру:

     message(LOW, me.e_path(), ": Hello monitor!");

[0] agent_u-@1: sys.first_agent.monitor: Hello monitor! 
[0] agent_u-@2: sys.second_agent.monitor: Hello monitor!
...