Specman e:有没有办法打印单位实例名称?

时间:2018-06-03 19:42:53

标签: specman e

我已经构建了一个通用的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 :(得分:2)

使用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!

答案 1 :(得分:1)

不确定“实例名称”究竟指的是什么,但有几点需要注意。

e_path()的预定义any_unit方法。

结构和单元实例有一个唯一标识符,由类型名称和唯一编号组成,由to_string()方法返回。此唯一标识符已作为消息的一部分打印出来。

此外,您可以使用预定义的挂钩方法create_formatted_message(),最好与定义自己的新message_format一起使用,以自定义消息的打印方式。例如,您可以将e_path()的结果附加到格式化的消息字符串中,如果您希望它自动显示在所有消息中。

您还可以使用short_name()挂钩为单位提供自己的符号名称,这些名称将显示在消息中而不是to_string()的结果中。

原则上,您也可以覆盖to_string()本身,但这样做的效果不仅仅是消息打印输出。