Kopart 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Есть в модуле enum input в зависимости от состояния которого формируются другие внутренние сигналы. В текущем тесте используются не все состояния этого enum. Поэтому в отчете по покрытию есть непокрытые code lines с неиспользуемыми состояниями этого enum. Попробовал через covergroup-->coverpoint-->ignore_bins переопределить несуществующие состояния enum для исключения их из общего отчета по покрытию. В VCS вижу, что эти состояния исключаются для созданной covergroup (отчет group), но в общем отчете по покрытию все также code lines в этом модуле считаются непокрытыми и неисключенными. У кого-то получалось красиво исключать из покрытия неиспользуемые состояния? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Пробовали поиграться с "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'а из общего отчета по покрытию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Походу Вам достаточно заменить 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Остается только вариант с option.weight и type_option.weight. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 14 сентября, 2016 Опубликовано 14 сентября, 2016 · Жалоба Остается только вариант с option.weight и type_option.weight. Проверил и всё также без изменений. Покрытие по бранчам показывает, что эти case не покрыты. Также проверил нет ли влияния условия семплирования - заменив always_comb на always_ff Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 16 сентября, 2016 Опубликовано 16 сентября, 2016 · Жалоба В VCS вижу, что эти состояния исключаются для созданной covergroup (отчет group), но в общем отчете по покрытию все также code lines в этом модуле считаются непокрытыми и неисключенными. У кого-то получалось красиво исключать из покрытия неиспользуемые состояния? ЕМНИП, я убирал такое постпроцессингом, объявляя линии кода, которые нужно исключить из анализа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 16 сентября, 2016 Опубликовано 16 сентября, 2016 · Жалоба ЕМНИП, я убирал такое постпроцессингом, объявляя линии кода, которые нужно исключить из анализа Вот как раз хотелось избежать этого неуниверсального exlude, хоть и с контрольной суммой по исходнику. Пришлось городить ifdef для некоторых состояний типа enum. Еще интересный момент - при указании параметра исключается из coverage константные присвоения. Только это это не работает для десятичного числа с SV приведением разрядности (PARAM'(1)). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 1 октября, 2016 Опубликовано 1 октября, 2016 · Жалоба Решил еще раз проверить на простом примере без UVM и с одним DUT - covergroup_exlude.zip Результат всё тот же. :smile3046: В отчете по covergroups показывает, что и заданный и автосгенеренный bin должны быть исключены, но общем отчете по branches/toggles это не учитывается. Причем это и в VCS и Questasim так происходит :maniac: . Кто-то можете перепроверить на VCS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 3 октября, 2016 Опубликовано 3 октября, 2016 · Жалоба ... Кто-то можете перепроверить на 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" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 3 октября, 2016 Опубликовано 3 октября, 2016 · Жалоба При таком описании coverpoint конструкция illegal_bins действительно не срабатывает. У меня такая версия - для точек покрытия (coverpoint) создаются списки ожидаемых значений (EXPECTED). Если явно не задать диапазон значений, то в этот список попадут все возможные значения без учета illegal_bins/ignore_bins. А у вас это исправило проблему? Проверил с вашими параметрами запуска. (Version K-2015.09-SP2-1). У меня ничего не исправилось :smile3046: Все также ветка С не исключена Хотя должна быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 3 октября, 2016 Опубликовано 3 октября, 2016 · Жалоба Существуют разные метрики покрытия (ссылка). Ваш пример я дополнил, чтобы сделать покрытие комбинационной логики (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 ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 3 октября, 2016 Опубликовано 3 октября, 2016 · Жалоба Если речь идет о покрытии строк кода (Line Coverage) (1-й скриншот), то тут нет никаких illegal_bins/ignore_bins - есть только строки кода. Этот отчет показывает, какие строки исполнялись в процессе моделирования, а какие - нет. Пусть состояние C и неправильное, но оно описано у Вас в коде, а значит должно быть проверено. Или: Не совсем правильно привел screenshot из отчета по Line Coverage. Тем самым хотел отобразить, что в код добавлена логика и ничего не поменялось. Меня в частности интересует отчет по Branch Coverage для которого illegal bin должен применяться. Но как видно он не учитывается и подобно должно исключаться для отчета Toggle Coverage для сигнала sel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexus.mephi 0 3 октября, 2016 Опубликовано 3 октября, 2016 · Жалоба ... Но как видно он не учитывается и подобно должно исключаться для отчета Toggle Coverage для сигнала sel Для корректировки отчетов Toggle и Branch у Synopsys отдельный инструмент. 1) Запускаем в графическом режиме DVE для просмотра отчетов: $ dve -cov -covdir simv.vdb 2) Там находим ненужную ветку и отключаем: 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 и получаем: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopart 0 3 октября, 2016 Опубликовано 3 октября, 2016 · Жалоба Для корректировки отчетов Toggle и Branch у Synopsys отдельный инструмент. Так вот с этого всё и началось. :smile3009: Думал, что через illegal_bins/ignore_bins можно избежать задания exlude правил. :cranky: Что задать во сразу всех блоках где используется enum, а не добавляя "портянку" правил для каждого модуля :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться