UVM/Использование Register model
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() в регистровой модели, чтобы обновить её. Схема иллюстрируют отношения между этими компонентами.
![]() |
---|
Рисунок 1: Register Predictor |
В вашем окружении вы могли бы создать экземпляр uvm_reg_predictor параметрированный типом транзакции шины. В connect_phase вы могли бы сделать следующее:
- Установить карту(map) предиктора в карту регистровой модели.
- Установить адаптер предиктора в адаптер регистра.
Подключите предиктор к монитору.
Этот режим предсказания можно использовать для передачи транзакций шины, но также отлично подходит для проверки, так как он держит в актуальном состоянии модель в соответствии со значениями в RTL.
Passive Prediction
Passive prediction is exactly like explicit prediction with one exception; it is not connected to a sequencer. With no sequencer, read and write transactions cannot be issued. This mode of prediction is used for checking only.
Let’s review a code example that you would add to the existing dut_env class.
I have declared two instances of the register model: regmodel and sb_regmodel. The first one, regmodel, is for sequences only and will use implicit prediction. The second one, sb_regmodel, will use explicit prediction so that it can perform accurate checking and that data could be used in a scoreboard. In the connect_phase, I create the adapter for regmodel and associate the adapter and the sequencer to this model with the set_sequencer method of the map. I then set the auto predict for implicit prediction. I do the same for the sb_regmodel, but the predictor is also configured. Here I set the auto predict for explicit prediction and enable checking via the read function with the set_check_on_read call. It would also be perfectly valid to use passive prediction here since the sb_regmodel will not be issuing transactions. To make it passive prediction, the set_sequencer call would not be made.
This chapter was meant to serve as an introduction of the usage of the register model. I highly encourage you to take a look at the User’s Guide for more information as you begin to develop your model.
Пассивный прогноз в точности как явного прогнозирования с одним исключением; он не подключен к секвенсор. При отсутствии секвенсор, читать и писать операции не может быть выдан. Этот способ прогнозирования используется для проверки только.
Давайте рассмотрим пример кода, который вы бы добавить к существующему классу dut_env.
Я объявил два экземпляра модели зарегистрироваться: regmodel и sb_regmodel.Первый, regmodel, предназначена только для последовательностей и будет использовать неявное предсказание. Второй, sb_regmodel, будет использовать явное предсказание так, что он может выполнять точную проверку и что данные могут быть использованы в табло. В connect_phase, я создаю адаптер для regmodel и связать адаптер и секвенсор этой модели с помощью метода set_sequencer карты. Затем я авто предсказать неявной предсказания. Я делаю то же самое для sb_regmodel, но предиктором также настроен. Здесь я поставил авто предсказать явного прогнозирования и включить проверку с помощью функции чтения с призывом set_check_on_read. Было бы также вполне допустимо использовать пассивный прогноз здесь с sb_regmodel не будет выдавать операции. Чтобы сделать это пассивный прогноз, вызов set_sequencer не будет сделано.
В этой главе был призван служить в качестве введения использования модели регистра. Я настоятельно рекомендую вам взглянуть на руководстве пользователя для получения дополнительной информации, вы начинаете развивать свою модель.