Перейти к содержанию
    

SV: exclude some enum states from coverage (coverpoint/ignore_bins)

Есть в модуле enum input в зависимости от состояния которого формируются другие внутренние сигналы.

В текущем тесте используются не все состояния этого enum.

Поэтому в отчете по покрытию есть непокрытые code lines с неиспользуемыми состояниями этого enum.

Попробовал через covergroup-->coverpoint-->ignore_bins переопределить несуществующие состояния enum для исключения их из общего отчета по покрытию.

 

В VCS вижу, что эти состояния исключаются для созданной covergroup (отчет group), но в общем отчете по покрытию все также code lines в этом модуле считаются непокрытыми и неисключенными.

 

У кого-то получалось красиво исключать из покрытия неиспользуемые состояния?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовали поиграться с "covergroup instance specific options" - weight, per_instance?

 

Вот тут есть интересная фраза на 31 стр.:

"Illegal bins can be used to remove unused or illegal values from the overall

coverage calculation."

 

Походу Вам достаточно заменить ignore_bins на illegal_bins, чтобы убрать ненужные состояния этого enum'а из общего отчета по покрытию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Походу Вам достаточно заменить ignore_bins на illegal_bins, чтобы убрать ненужные состояния этого enum'а из общего отчета по покрытию.

Проверял. Всё также.

covergroup cg (ref  type_enum  test);
  option.per_instance = 0;
  cvp: coverpoint test {
    illegal_bins ignore0 = {A};
    illegal_bins ignore1 = {B};
  }
endgroup
cg cg_inst = new(enum_input);

always @(posedge clk) begin
    cg_inst.sample();
end

 

в общем отчете по Branches все без изменений

178            unique case (enum_input)
                      -1-  
179                A:   reg = 0;
                   ==>
180                B:   reg = 1;
                   ==>
181                C:   reg = 2;
                   ==>
182         default:   reg = 3;
                  ==>

Branches: 
-1-    Status    Tests
A    Not Covered    
B    Not Covered    
С    Covered    T1
default    Covered    T1

 

хотя во вкладке groups

Excluded/Illegal bins 
NAME       COUNT           
auto_A    0    Illegal
auto_B    0    Illegal
ignore1    0    Illegal
ignore0    0    Illegal

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Остается только вариант с

option.weight и type_option.weight.

Проверил и всё также без изменений.

Покрытие по бранчам показывает, что эти case не покрыты.

Также проверил нет ли влияния условия семплирования - заменив always_comb на always_ff

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В VCS вижу, что эти состояния исключаются для созданной covergroup (отчет group), но в общем отчете по покрытию все также code lines в этом модуле считаются непокрытыми и неисключенными.

 

У кого-то получалось красиво исключать из покрытия неиспользуемые состояния?

ЕМНИП, я убирал такое постпроцессингом, объявляя линии кода, которые нужно исключить из анализа

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ЕМНИП, я убирал такое постпроцессингом, объявляя линии кода, которые нужно исключить из анализа

Вот как раз хотелось избежать этого неуниверсального exlude, хоть и с контрольной суммой по исходнику.

Пришлось городить ifdef для некоторых состояний типа enum.

 

Еще интересный момент - при указании параметра исключается из coverage константные присвоения.

Только это это не работает для десятичного числа с SV приведением разрядности (PARAM'(1)).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Решил еще раз проверить на простом примере без UVM и с одним DUT - covergroup_exlude.zip

Результат всё тот же. :smile3046:

В отчете по covergroups показывает, что и заданный и автосгенеренный bin должны быть исключены, но общем отчете по branches/toggles это не учитывается.

 

Причем это и в VCS и Questasim так происходит :maniac: .

 

Кто-то можете перепроверить на VCS?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

 

Кто-то можете перепроверить на VCS?

При таком описании coverpoint конструкция illegal_bins действительно не срабатывает.

У меня такая версия - для точек покрытия (coverpoint) создаются списки ожидаемых значений (EXPECTED). Если явно не задать диапазон значений, то в этот список попадут все возможные значения без учета illegal_bins/ignore_bins.

 

Добавил в Ваш пример:

//dut.sv
...
covergroup cg ();
  option.per_instance = 0;
  cvp: coverpoint sel {
      bins sel_bin[] = {[A:C]};
        illegal_bins exlude_C = {C};
  }
endgroup
...

 

При таком описании значение C не попадает в список EXPECTED - получаем покрытие 100%.

 

P.S. В примере не хватает скрипта для запуска симуляции. Вот вариант tcl для VCS:

vcs_run.tcl:

#!/usr/bin/tclsh

set VLOG_SIM_OPT        {-sverilog -timescale=1ns/1ns}
set VLOG_CMD            "exec vlogan ${VLOG_SIM_OPT}"
eval ${VLOG_CMD}         dut.sv
eval ${VLOG_CMD}         tb.sv
eval                     "exec vcs -lca -cm line+cond+fsm+tgl+path+assert -debug_all tb -R -l vcs.log"
#eval                     "dve -cov -covdir simv.vdb"
eval                    "urg -lca -dir simv.db"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При таком описании coverpoint конструкция illegal_bins действительно не срабатывает.

У меня такая версия - для точек покрытия (coverpoint) создаются списки ожидаемых значений (EXPECTED). Если явно не задать диапазон значений, то в этот список попадут все возможные значения без учета illegal_bins/ignore_bins.

А у вас это исправило проблему?

 

Проверил с вашими параметрами запуска. (Version K-2015.09-SP2-1).

У меня ничего не исправилось :smile3046:

 

Все также ветка С не исключена

post-2972-1475488403_thumb.png

 

Хотя должна быть.

post-2972-1475488406_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Существуют разные метрики покрытия (ссылка).

Ваш пример я дополнил, чтобы сделать покрытие комбинационной логики (Combinational Logic Coverage) - 100%.

Если речь идет о покрытии строк кода (Line Coverage) (1-й скриншот), то тут нет никаких illegal_bins/ignore_bins - есть только строки кода. Этот отчет показывает, какие строки исполнялись в процессе моделирования, а какие - нет.

Пусть состояние C и неправильное, но оно описано у Вас в коде, а значит должно быть проверено. Или:

...
    case (sel)
      A:        out <= 4'h0;
      B:        out <= 4'h1;
//      C:        out <= 4'h2;
      default:  out <= 4'hF;
    endcase
...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если речь идет о покрытии строк кода (Line Coverage) (1-й скриншот), то тут нет никаких illegal_bins/ignore_bins - есть только строки кода. Этот отчет показывает, какие строки исполнялись в процессе моделирования, а какие - нет.

Пусть состояние C и неправильное, но оно описано у Вас в коде, а значит должно быть проверено. Или:

Не совсем правильно привел screenshot из отчета по Line Coverage.

Тем самым хотел отобразить, что в код добавлена логика и ничего не поменялось.

 

Меня в частности интересует отчет по Branch Coverage для которого illegal bin должен применяться.

post-2972-1475497807_thumb.png

Но как видно он не учитывается и подобно должно исключаться для отчета Toggle Coverage для сигнала sel

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

Но как видно он не учитывается и подобно должно исключаться для отчета Toggle Coverage для сигнала sel

Для корректировки отчетов Toggle и Branch у Synopsys отдельный инструмент.

 

1) Запускаем в графическом режиме DVE для просмотра отчетов:

$ dve -cov -covdir simv.vdb

2) Там находим ненужную ветку и отключаем:

 

sshot_2.png

 

3) Дальше выгружаем все исключения в файл *.el:

testtt.el:

CHECKSUM: "4091565883 3988933883"
MODULE: dut
Branch 0 "2970113050" "(~rst_n)" (3) "(~rst_n) 0,C "

 

4) Генерим отчет с учетом исключений:

$ urg -lca -dir ./simv.vdb -elfile testtt.el

 

и получаем:

 

sshot_1.png

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для корректировки отчетов Toggle и Branch у Synopsys отдельный инструмент.

Так вот с этого всё и началось. :smile3009:

Думал, что через illegal_bins/ignore_bins можно избежать задания exlude правил. :cranky:

Что задать во сразу всех блоках где используется enum, а не добавляя "портянку" правил для каждого модуля :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...