joomla 1.6

Последние статьи

Популярные статьи

11. Класс Coverage

Оценка функционального покрытия очень важна при генерации случайных тестовых воздействий. Без этой оценки невозможно сказать - достаточно ли было послано транзакций на тестируемое устройство. Требования, которые предъявляет план верификации к функциональному покрытию, как правило, специфичны для каждой тестируемой схемы, поэтому сложно создать здесь универсальный класс для сбора информации о работе любого устройства.
Понятие функционального покрытия включает в себя покрытие данных (data-oriented coverage) и покрытие сценариев (control-oriented coverage). В рассматриваемой схеме блок оценки функционального покрытия собирает только информацию о покрытие данных, которое служит для оценки полноты набора входных воздействий. Как писалось ранее, случайных воздействий не всегда достаточно для достижения высокой степени покрытия сценариев и возникает необходимость в направленных тестах. Для оценки степени покрытия сценариев используются SystemVerilog утверждения с директивой cover (см. раздел Утверждения).
Несмотря на то, что оценка покрытия применяется к транзакции, в тестовом окружении экземпляр класса Coverage создается в классе Driver. В процессе симуляции создаются тысячи транзакций, поэтому привязка групп покрытия (coverage group) к транзакции повлечет большие накладные расходы - при каждой симуляции будут созданы тысячи групп покрытия. Лучше проводить оценку покрытия транзактором (в нашем случае драйвером), например, делать выборку между генерациями новых значений, т.е. каждый раз перед посылкой транзакции на тестируемое устройство или после. При этом будет создана одна группа покрытия, которая сделает по одной выборке для каждой транзакции.
Группы покрытия записывают количество возникновений различных значений данных — точек покрытия. При оценке покрытия данных все посылаемые на тестируемое устройство сигналы являются точками покрытия. Точки покрытия, выборка которых происходит в одно и то же время, объединяется в группу покрытия. Для каждой точки покрытия SystemVerilog создает 2N «корзин» (bin), где N — разрядность сигнала, для записи того, сколько раз возникало каждое значение точки покрытия. Эти корзины представляют собой обычные счетчики и являются основными единицами измерения покрытия данных. Когда происходит выборка, значение посылается в ту или иную корзину. В конце симуляции формируются базы данных, содержащие информацию обо всех созданных корзинах и попавших в них значениях. С помощью специальных средств анализа эти базы данных читаются и генерируются итоговые отчеты, содержащие информацию по каждой точке покрытия и суммарную оценку покрытия.
Точка покрытия позволяет собрать информацию только об отдельном сигнале. Если необходимо проанализировать значения комбинации двух или более точек покрытия совместно, то применяется инструмент перекрестного покрытия (cross coverage). В качестве примера рассмотрим схему вычисления адресов операндов, изображенную на рис. 3. Проверка правильности работы каждого сумматора производится путем перебора значений входящих в сумматор сигналов. Например, для сумматора, складывающего A, B и C, для каждого из 26 значений A нужно перебрать 212 значений B и С. Всего будет создано 218 корзин.
Для наиболее полной оценки покрытия данных анализируются комбинация всех посылаемых на тестируемое устройство сигналов. Это наиболее легкий способ, т.к. не нужно выделять отдельные комбинации сигналов. Минусом здесь является большое количество затрат времени. При тестировании устройства с большим количеством многоразрядных сигналов для достижения высокой степени покрытия понадобится послать астрономическое число транзакций. Поэтому все же рекомендуется выделять комбинации сигналов для оценки покрытия.
В классе Coverage, описаном в файле Coverage.sv, объявлена группа покрытия coverage_group:

covergroup coverage_group;

    a : coverpoint trans.a;
    b : coverpoint trans.b;
    c : coverpoint trans.c;
    d : coverpoint trans.d;
    all_cross: cross a, b, c, d;

endgroup				

В эту группу покрытия объединены 5 точек покрытия, из которых 4 точки покрытия посылаемых сигналов и 1 точка покрытия комбинации сигналов.
Помимо этого в классе Coverage есть конструктор и метод sample() для выборки значений, который вызывается драйвером.
SystemVerilog-описание класса Coverage:

`ifndef _COVERAGE_
`define _COVERAGE_

class Coverage;
Transaction trans;

covergroup coverage_group;

    a : coverpoint trans.a;
    b : coverpoint trans.b;
    c : coverpoint trans.c;
    d : coverpoint trans.d;
    all_cross: cross a, b, c, d;

endgroup

function new();
    coverage_group = new();
endfunction : new

task sample(Transaction trans);
    this.trans = trans;
    coverage_group.sample();
endtask : sample

endclass

`endif
  • 0.0/5 rating (0 votes)

Комментарии (0)

Написать комментарий

You are commenting as guest.

Cancel Submitting comment...

SystemVerilog.ru

SystemVerilog

↑ Ссылка на наши новости

Последние новости Apple
Apple-портал: новости, обзоры, приложения
Все об iPhone 5 и iPad 3
Топовый софт
Последнии версии признанных во всем мире программ
Softenok.com
Компьютерный портал
Лучшее из мира компьютеров на Super4computeR.com
Super4computeR.com
Лучшее из мира WEB
Лучшее из мира web-дизайна на Super4desigN.com
Super4desigN.com
Аренда коттеджа в Подмосковье
Отличные места для проведения любого мероприятия. Близко к Москве и недорого!
CottageArenda.ru
мини-логотип сайта systemverilog.ru

2010-2011 SystemVerilog.ru, все права защищены. | Обратная связь