具有结构类型的总线的覆盖范围
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)
我有一辆以下类型的公交车
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)