Specman E error: Argument to change|fall|rise has to be (short) scalar

Specman E error: Argument to change|fall|rise has to be (short) scalar

我有一个现有的验证环境,其中包含长度为 LEN 的简单端口。 此外,还有一些事件,当只有一个相关端口的位上升时发生:

  // Port declaration:
    port_a : inout simple_port of uint(bits:LEN) is instance;
    port_b : inout simple_port of uint(bits:LEN) is instance;
    ...

  // Events that use the ports for 1 monitor:
    event event_a is rise (smp.port_a$[idx:idx])@clock;
    event event_b is rise (smp.port_b$[idx:idx])@clock;

*** 有很多显示器,每个显示器都有自己的idxevent_aevent_b

问题是我需要将 LEN 定义更改为 64,现在所有事件都失败了,因为 Specman 无法在 64 位总线上定义事件(即使事件实际上是 "look" 仅在 1 位..)

您知道如何解决该问题吗?感谢您的帮助。

实际上,不支持这种定义事件的形式:

event event_a is rise (smp.port_a$[idx:idx])@clock;

在 rise Temporal 表达式中不支持作为位片。 (它也记录在 ‘e语言参考’中的‘事件’章节。

如果您只对这个 64 位信号的一位感兴趣,您可以将此端口定义为 simple_port 个位 并将位片放在hdl_path中,如下所示:

idx:uint(bits:6);
keep idx==34; // the specific bit to this monitor.
port_a : in simple_port of bit is instance;
keep port_a.hdl_path()==read_only(append("signal_name[",idx,":",idx,"]"));

然后将事件定义为:

event event_a is rise(port_a$)@sim;