Группа покрытия SystemVerilog включает точку покрытия на основе параметра - PullRequest
0 голосов
/ 11 января 2019

Я создаю покрытие для своего дизайна и хочу повторно использовать определение группы покрытия для нескольких экземпляров. Первый экземпляр должен использовать все точки покрытия по назначению, но во втором случае я хочу исключить некоторые из точек покрытия в группе покрытия.

Я думал, что мог бы использовать вход для группы покрытия и iff () нежелательные точки покрытия, так что первый экземпляр связывает вход с 1, а второй экземпляр связывает вход с 0. Однако я думаю, что это все еще покажет точки покрытия для второго экземпляра как всегда не ударил, и я хочу, чтобы они вообще не были включены.

covergroup cg_address(input bit enable) @ (posedge clock);
    address_check: coverpoint (address){
        bins addr_0 = {5'd0};
        bins addr_1 = {5'd1};
    }
    data_check: coverpoint (data) iff (enable){
        bins data_0 = {10'd0};
        bins data_1 = {10'd1};
    }
endgroup : cg_address

cg_address cg_address_inst0 = new(1'b1);
cg_address cg_address_inst1 = new(1'b0); //want this one to exclude data_check coverpoint

Я знаю, что приведенный выше код не будет работать, потому что у второго экземпляра все еще будет точка покрытия data_check, он просто никогда не попадет ни в один из бинов, потому что enable связан с 0. Есть ли другой способ, которым я могу попытаться исключить data_check точка прикрытия для второго экземпляра?

1 Ответ

0 голосов
/ 11 января 2019

Вам нужно сделать две вещи:

  1. Установите вес точки покрытия равным 0.
  2. Включите option.per_instance = 1; для группы покрытия.

Например:

covergroup cg_address(input bit enable) @ (posedge clock);
    option.per_instance = 1;
    address_check: coverpoint (address){
        bins addr_0 = {5'd0};
        bins addr_1 = {5'd1};
    }
    data_check: coverpoint (data) {
        option.weight = enable;
        bins data_0 = {10'd0};
        bins data_1 = {10'd1};
    }
endgroup : cg_address

cg_address cg_address_inst0 = new(1);
cg_address cg_address_inst1 = new(0); //want this one to exclude data_check coverpoint
...