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

Coverage последовательных транзакций

Всем доброго дня.

 

Допустим есть такой интерфейс:

// 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 в коммерческой разботке либо хорошие примеры из открытых проектов.

Изменено пользователем johan

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


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

Возможно вам стоит подняться на один уровень абстракции выше. И продумать модель функционального покрытия в целом не привязываясь к 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.

 

 

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


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

Для работы с последовательностью состояний можно использовать 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.

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


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

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

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

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

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

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

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

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

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

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