«…Труд избавляет человека от трех великих зол: скуки, порока, нужды…»

UVM/Использование Register model

Материал из Wiki
< UVM
Перейти к: навигация, поиск
Проект Методология UVM

UVM Cookbook


Вебинары
Литература

* OVM *

Implicit Prediction (неявное предсказание)

Implicit prediction является режимом, в котором над регистровой моделью выполняются команды read и write, которые обновляют состояние модели. Однако, для включения автомотического обновления модели необходимо вызвать функцию set_auto_predict со значением 1. Например:

regmodel.default_map.set_auto_predict(1);

Это должно быть выполнено в фазе connect_phase класса env (окружения). При использовании этого режима предсказания, модель "считает, что" она знает, чему равны значения регистров в DUT, потому что этот режим предсказания не собирает транзакции к регистрам проекта, которые происходят не от регистровой модели. Такое неявное предсказание хорошо подходит для последовательностей (sequences), потому что просто выполняются операции (чтения/записи), но это не достаточно для scoreboard, которому необходимо получить точную регистровую информацию для проверки функциональности.


Explicit Prediction

При явном предсказании, регистровая модель также интегрируется с монитором шины. Благодаря этой интеграции, регистровая модель может быть обновлена, даже если она не инициирует транзакцию, поскольку она обновляется с помощью монитора. В этом случае, в set_auto_predict будет передано значение 0, и uvm_reg_predictor должен быть создан.Предиктор является компонентом, который наблюдает транзакции от монитора, а затем вызывает функцию predict() в регистровой модели, чтобы обновить её. Схема иллюстрируют отношения между этими компонентами.

Uvm reg Explicit Prediction.png
Рисунок 1: Register Predictor


В вашем окружении вы могли бы создать экземпляр uvm_reg_predictor параметрированный типом транзакции шины. В connect_phase вы могли бы сделать следующее:

  • Установить карту(map) предиктора в карту регистровой модели.
  • Установить адаптер предиктора в адаптер регистра.

Подключите предиктор к монитору.

Этот режим предсказания можно использовать для передачи транзакций шины, но также отлично подходит для проверки, так как он держит в актуальном состоянии модель в соответствии со значениями в RTL.

Passive Prediction

Пассивное предсказание такое же как и явное предсказание с одним исключением; регистровая модель не подключена к секвенсору. При отсутствии секвенсора, транзакции чтения и записи не могут быть переданы. Этот способ предсказания используется только для проверки.

Давайте рассмотрим пример кода, который вы бы добавили к существующему классу dut_env.

Uvm reg Passive Prediction .png

Я объявил два экземпляра регистровой модели: regmodel и sb_regmodel.Первый, regmodel, предназначен только для последовательностей и будет использовать неявное предсказание. Второй, sb_regmodel, будет использовать явное предсказание так, что он сможет выполнять точную проверку и что данные смогут быть использованы в scoreboard. В connect_phase, я создаю адаптер для regmodel и связываю адаптер и секвенсор этой модели с помощью метода карты(map) set_sequencer(). Затем я устанавливаю авто предсказание для неявного предсказания. Я делаю то же самое для sb_regmodel, но предиктором также настроен. Здесь я установил авто предсказание для явного прогнозирования и включил проверку с помощью функции чтения с вызовом set_check_on_read(). Было бы также вполне допустимо использовать пассивное предсказание здесь, поскольку sb_regmodel не будет передавать транзакции. Чтобы сделать пассивным предсказание, не нужно вызывать метод для карты set_sequencer().

Этой глава была призвана служить в качестве введения использования регистровой модели. Я настоятельно рекомендую вам взглянуть на руководство пользователя для получения дополнительной информации, как только вы начнёте разрабатывать свою модель.