具有结构类型的总线的覆盖范围

Coverage for a bus with struct type

我有一辆以下类型的公交车

typedef struct packed { logic vld; logic [ASI_MAX_PCL_CYC_M:0] cyc; } type_t;

有一定的宽度说 [3:0]

所以type_t[3:0]my_bus_req;

我如何编写一个说明在任何时钟周期只有一个 vld 为高电平的 coverpoint 即 my_bus_req[0].vld = 1 和 rest = 0。(只有一个请求进来)

如果信号不是结构类型,例如逻辑 [3:0] my_req_bus; 我们可以简单地完成

覆盖点 i iff (my_bus_req[i].vld == 1 && $onehot(my_bus_req))

但不确定如何为结构类型的总线完成

由于您将其设为打包数组,因此没有可以直接使用的简单表达式,而无需创建单独的函数或强制转换为未打包的数组。

typedef type_t type_unpacked_t[4];
type_unpacked temp;
temp = type_unpacked'(my_bus_req);
...
coverpoint i iff (temp[i].vld == 1 && temp.sum() with (int'(item.vld)) == 1)