johan 0 6 августа, 2015 Опубликовано 6 августа, 2015 (изменено) · Жалоба Всем доброго дня. Допустим есть такой интерфейс: // master -> slave logic [15:0] addr; cmd_t cmd; logic valid; // slave -> master logic ready; где cmd_t это просто typedef ( в рамках задачи не принципиально, можно и дефайнами сделать ) typedef enum int unsigned { INSERT, SEARCH, DELETE, ... } cmd_t; Есть модуль, который получает по этому интерфейсу команды и их "исполняет". Хочется удостоверится, что покрытие близко к 100%. Да, можно перебирать адреса (младшие, средние, старшие), перебирать команды, и в принципе понятно, как это сделать с помощью coverpoint/covergroup, но это покрывает только одну транзакцию. Интересно проверить поведение модуля на транзакциях, которые идут следом друг за другом: addr = 0x15 cmd = DELETE addr = 0x15 cmd = SEARCH addr = 0x15 cmd = INSERT Понятно, если мы что-то удалили из адреса 0x15, то при следующем поиске там ничего не должно быть, и мы это и хотим проверить. И так в самых различных комбинациях, как на одном адресе, так и на разных: addr = 0x15 cmd = DELETE addr = 0x16 cmd = INSERT addr = 0x15 cmd = SEARCH Транзакции идут друг за другом (насколько позволяет ready) и т.к. система сделана конвейером есть опасения, какая-то из ситуаций, возможно, не верно отработает. Вопрос: как правильно организовать (описать) covergroup/coverpoint последовательных транзаций с каким-то окном (W=3, а может и 5 транзакциям)? Заранее спасибо. P.S. Буду благодарен, если порекомендуете хорошую литературу по coverage в коммерческой разботке либо хорошие примеры из открытых проектов. Изменено 6 августа, 2015 пользователем johan Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 6 августа, 2015 Опубликовано 6 августа, 2015 · Жалоба Возможно вам стоит подняться на один уровень абстракции выше. И продумать модель функционального покрытия в целом не привязываясь к covergroup/cover directive, это так сказать, средства реализации вашей модели функционального покрытия. Из литературы по классике сайт verificationacademy.com книга coverage-cookbook-complete-verification-academy так же хорошая книга [srikanth_Vijayaraghavan,_Meyyappan_Ramanathan] A Practical Guide for SystemVerilog Assertions там раздел 2.4 Functional coverage хороший пример подхода к составлению coverage plan, может быть это натолкнет вас на понимание как покрыть последовательность транзакций в вашем случае. Так же в Questa tutorial есть хорошие главы про Functional coverage. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 9 августа, 2015 Опубликовано 9 августа, 2015 · Жалоба Для работы с последовательностью состояний можно использовать Sequence Property. Начните с просмотра разделов 16.7-16.9 и 16.13 IEEE Standard for SystemVerilog. Хотя глава 16 посвящена Assertions, то что касается Sequence Property применимо и для Coverage - в главах по Assertions иногда даже в примерах разбираются одновременно assert property и cover property. Вообще, для вашего запроса я бы порекомендовал повесить на шину монитор, который бы классифицировал все, что на ней происходит и записывал в массив из n элементов по принципу FIFO. Состояние этого массива через каждые n транзакций можно использовать для расчета покрытия последовательностей команд. Можно также считать покрытие по состоянию массива после каждой транзакции - тогда получится скользящее окно (применимо оно к вашему случаю или нет решать Вам). Классификация существенно сокращает количество возможных комбинаций - редко когда действительно необходимо, чтобы, скажем, адрес "пробежал" абсолютно по всем возможным значениям. Например, адреса можно классифицировать относительно предыдущей транзакции как {EQUAL, NEAR, FAR}. Ваш монитор обнаружив очередную транзакцию анализирует ее относительно предыдущей и сохраняет для расчета покрытия ее классификацию. Код команды сохраняется как есть, а вместо адреса сохраняется только его классификация. Как только в массиве набралось заданное количество транзакций вызываете sample() для вашей covergroup. Чтобы все это корректно работало Вам нужно продумать классификацию происходящего на шине и правильно описать covergroup. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
johan 0 9 августа, 2015 Опубликовано 9 августа, 2015 · Жалоба Mad_max, Sefo спасибо за советы и литературу, попробую что-нибудь придумать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться