Coverage Cookbook/Метрики и процессы покрытия (Теория)/ru
Содержание |
Покрытие/Что такое покрытие
Как говорится, "Что нельзя измерить, не может быть сделано." И это, конечно, верно в случаях, когда мы пытаемся определить прогресс верификации проекта или пытаемся ответить на вопрос: "Все готово?" Будь ваша методика моделирования основана на методе направленного тестирования или на ограниченно случайной верификации, чтобы понять ход вашей верификации вам необходимо ответить на следующие вопросы:
- Были все конструктивные особенности и требования, определенные в плане теста, верифицированы?
- Были ли строки кода или структуры в проекте, которые никогда не использовались?
Покрытие - это измерения, которое мы используем в процессе моделирования, чтобы ответить на эти вопросы. Тем не менее, как только измерения покрытия стали неотъемлемой частью нашего процессе верификации, это дает возможности для более точных прогнозов работы проекта, а также предоставление средств для оптимизации нашего общего процесса верификации. На данном этапе мы можем задавать такие вопросы как:
- Когда мы тестировали функцию X, мы когда-нибудь проверяли функцию Y в то же самое время?
- Зависал ли наш прогресс верификации по неожиданным причинам?
- Существуют ли тесты, которые мы могли бы устранить, чтобы ускорить наш regression suite и все ещё достигать наших целей покрытия?
Таким образом, покрытие - это измерение в моделировании, которое мы используем для измерения прогресса верификации и завершенности.
Наблюдение и управление
Основой для обсуждения покрытия является понимание понятий управление и наблюдение. Неофициально, управление относится к возможности влиять или активировать встроенный конечный автомат, структуру, специальные строки кода или поведение в проекте, стимулируя различные порты ввода. Обратите внимание, что, в то время как в теории моделирования тестовая программа имеет высокую управляемость портов ввода модели проекта во время верификации, она может иметь очень низкую управляемость внутренней структуры в рамках этой модели. В отличие от управления, наблюдение относится к возможности наблюдать эффекты конкретного внутреннего состояния конечного автомата, структуры или стимулированной строки кода. Таким образом, тестовая программа, как правило, имеет ограниченную возможность наблюдения, если она наблюдает только за внешними портами модели проекта (потому что внутренние сигналы и структуры часто неявно скрыты от тестовой программы).
Чтобы определить ошибку в проекте, используя подход моделирования тестовой программы, следующие условия должны выполняться:
- Тестовая программа должна создавать надлежащие входящие сигналы для активации ошибки проектирования.
- Тестовая программа должна создавать надлежащие входящие сигналы для распространения всех последствий,
связанных с ошибкой проектирования в выходной порт.
- Тестовая программа должна содержать монитор, который может обнаружить ошибку проектирования, который был впервые активирован, затем распространен в точку обнаружения.
Вполне возможно создать условия, где входной сигнал активирует ошибку проектирования, которая не распространяется на наблюдаемые выходные порты. В этих случаях принимается первое условие приведенное выше; однако, второе условие отсутствует, как показано на рисунке 1.
В целом, покрытие - это измерение, которое мы используем для определения качества управления тестовой программы. Например, покрытие кода может непосредственно определить строки кода, которые не были активированы из-за плохой управляемости исходящей от входного сигнала моделирования. Кроме того, функциональное покрытие может определить ожидаемые поведения, которые никогда не были активированы во время моделирования из-за плохой управляемости.
Хотя наши обсуждения в этом разделе сосредоточены на покрытии, важно отметить, что мы можем обратиться к проблемам наблюдения путем внедрения assertions в модели проекта для обеспечения низкого уровня наблюдения и создания мониторов внутри и на выходных портах нашей тестовой программы для обеспечения высокого уровня наблюдения.
Резюме
Так что же такое покрытие? Проще говоря, покрытие - это измерение в моделировании, которое мы используем для измерения прогресса верификации и её завершенности. Измерение покрытия говорит нам, какая часть проекта была активирована во время моделирования (то есть, качества управления тестовой программы). Или, что еще более важно, измерение покрытия определяет части проекта, которые не были активированы в процессе моделирования, что позволяет нам корректировать наш входной сигнал для улучшения верификации.
Существуют различные виды измерений покрытий доступные вам, и процесс, как их использовать описан в Coverage Cookbook examples.
Покрытие/Виды покрытия
Ни одного одиночного измерения недостаточно при полностью characterizing процессе верификации. Например, мы могли бы добиться 100% покрытия кода во время нашей simulation regressions. Однако, это не означает, что 100% функциональности было верифицировано. Причиной этого является то, что покрытие кода не измеряет одновременное взаимодействие поведения внутри или между несколькими блоками проекта, а также не измеряет временной последовательности функциональных событий, которые происходят в проекте. Кроме того, мы могли бы достичь 100% функционального покрытия, но только достигнув 90% покрытия кода. Это может означать, что либо есть проблемы с точностью в нашей функциональной модели покрытия (то есть важное поведение в проекте отсутствовало в модели покрытия), или, возможно, некоторая функциональность была реализована так, что там не определены начальные значения (например, возможно, спецификация и план тестирования должны быть обновлены with some late stage change in the requirements). Таким образом, чтобы получить полное представление о ходе верификации проекта нам часто нужно несколько измерений.
Классификация покрытий
Например, функциональное покрытие является одним из примеров явного измерения покрытия, которое было определено вручную, а затем осуществляется инженером. В то же время, линейное покрытие и expression покрытие являются двумя примерами неявных измерений покрытия, так как их определение и реализация автоматически получены и извлечены из RTL описания.
Классификация пространства покрытия
Покрытие, связанное с двумя категориями, которые мы только что описали, может быть объединено, чтобы сформировать покрытие пространства, которое часто называют покрытие модели. [1] Например, explicit specification пространство покрытия состоит из измерений покрытия, которые созданы вручную инженером, вытекают из требований проекта или спецификации. Другим видом явного покрытия является приспособление, созданное инженером, которое основано на behavior encapsulated by the design implemention, таких как заполнение или опустошение событий, связанных с конкретным FIFO в RTL модели.
Кроме того, implicit implementation пространство покрытия состоит из измерений покрытия, которые автоматически извлекаются с помощью инструментов (таких как симулятор), и полученные от реализации проекта (например, RTL модели). Другая часть implicit specification пространство покрытия состоит из измерений покрытия, которые автоматически извлекаются с помощью инструмента, и полученные из спецификации проекта. Эта часть пространства покрытия в настоящее время область научных исследований, although there have been a few EDA tools recently emerge that attempt to automatically extract higher-level coverage properties by observing the effects of simulation patterns on an implementation. Отметим, что поведения более высокого уровня функционального не могут автоматически извлекаться из реализации в одиночку, поэтому они попадают в измерения покрытия, связанные с implicit implementation пространством покрытия
Измерения покрытий
Существуют две основные формы измерения покрытий используемые сегодня в производстве:
- Code Coverage Metrics (Code Coverage Metrics (Implicit coverage))
- Functional Coverage Metrics (Functional Coverage/Assertion Coverage Metrics (Explicit coverage))
References
[1] A. Piziali, Functional Verification Coverage Measurement and Analysis, Kluwer Academic Publishers, 2004.