Спец курс (Верификация цифровых схем)/Практические задания (Лекция 6)
1. Описать регистровую модель по заданной спецификации тестируемого модуля
Спецификация 1.
|   Регистр  | 
  Размер  | 
  Смещение адреса  | 
  Имя поля  | 
  Размер поля  | 
  Тип доступа  | 
  Описание  | 
|---|---|---|---|---|---|---|
| CTRL | 32 бита | 0x0 |   st1  | 
  2 бита  | 
  RW  | 
  st1 = CTRL[1:0], чтение, запись  | 
|   st2  | 
  6 бит  | 
  RO  | 
  st2 = CTRL[2:7], только чтение  | |||
| sum1 | 8 бит |   RO  | 
  sum1 = CTRL[15:8], только чтение  | |||
|   RO  | 
  остальные биты CTRL[31:16] регистра только для чтения  | |||||
|   DATA_IN  | 
  32 бита  | 
  0x1F  | 
  data  | 
  32 бита  | 
  RW  | 
  data = DATA_IN[31:0], запись, чтение  | 
|   DATA_OUT  | 
  32 бита  | 
  0x4F  | 
  data  | 
  32 бита  | 
  RO  | 
  data = DATA_OUT[31:0], только чтение  | 
Спецификация 2.
|   Регистр  | 
  Размер  | 
  Смещение  | 
  Поля  | 
  Размер поля  | 
  Тип доступа  | 
  Описание  | 
|---|---|---|---|---|---|---|
|   INTR0  | 
  32 бита  | 
  0x0  | 
  rdy0  | 
  1 бит  | 
  RO  | 
  rdy0 = INTR0[0], только чтение  | 
|   INTR1  | 
  32 бита  | 
  0x2F  | 
  rdy1  | 
  1 бит  | 
  RO  | 
  rdy1 = INTR1[0], только чтение  | 
|   INTR2  | 
  32 бита  | 
  0x4F  | 
  rdy2  | 
  1 бит  | 
  RO  | 
  rdy2 = INTR2[0], только чтение  | 
|   INTR3  | 
  32 бита  | 
  0x6F  | 
  rdy3  | 
  1 бит  | 
  RO  | 
  rdy3 = INTR3[0], только чтение  | 
|   MMIN  | 
  32 бита  | 
  0x8F  | 
  min  | 
  16 бита  | 
  RW  | 
  min= MIN[31:16], запись, чтение  | 
|   MMAX  | 
  32 бита  | 
  0xAF  | 
  max  | 
  16 бита  | 
  RW  | 
  max = MAX[15:0], запись, чтение  | 
|   EN_W  | 
  32 бита  | 
  0xBF  | 
  en  | 
  1 бит  | 
  WRC  | 
  en = EN_W[31], запись, после чтения сбрасывается в 0  | 
2. Разработать DUT или Slave Agent который будет работать с регистрами по следующему правилу.
2.1 Спецификация 1.
- После записи CTRL.ST1 в единицу CTRL.ST2 принимает значение 6'b100000 ровно через 100 us.
 - После каждой записи поля CTRL.ST1 значение поля sum регистра CTRL инкрементируется
 - Значение регистра DATA_OUT меняется по правилу связанному со значениями регистра DATA_IN. Каждый раз когда мы записываем в регистр DATA_IN значение, оно сохраняется во внутренней очереди (DUT или SlaveAgent) длинной 4. После записи 4-го значения в DATA_IN, первое записанное значение в DATA_IN появляется в регистре DATA_OUT. До этого момента регистр DATA_OUT хранит нулевое значение, и так далее по приниципу FIFO.
 
2.2 Спецификация 2.
3. Разработать тест по заданному сценарию с использованием регистровой модели.
Сценарий 1
Согласно Спецификации 1, произвести запись в регистр DATA_IN, случайное значение, после записать в поле st1 регистра CTRL значение 01. Дождаться пока поле st2 регистра CTRL примет значение 100000. После вычитать значение поля DATA_OUT. Повторить предыдущие действия 4 раза. После вычитать значение поля sum регистра CTRL. Если значение поля sum < 10, весь сценари повторить.
Сценарий 2
Согласно Спецификации 2, Записать случайные значения в регистры MMIN, MMAX. Значение MMIN < MMAX. Записать в поле en регистрa EN_W единицу. После ожидать пока в поле rdy0 регистра INTR0 появится единица. Записать в поле en регистрa EN_W единицу. После ожидать пока в поле rdy1 регистра INTR1 появится единица. Записать в поле en регистрa EN_W единицу. После ожидать пока в поле rdy2 регистра INTR2 появится единица. Записать в поле en регистрa EN_W единицу. После ожидать пока в поле rdy3 регистра INTR3 появится единица. Прочитать регистр EN_W. Повторить предыдущие дейсвтия для 40 наборов значений регистра MMAX, MMIN.
4. Создать и подключить пользовательский предиктор регистровой модели. Добавить опцию очистки одного регистра при изменении бита в другом используя встроенные функции.
5. Разработать адаптер регистровой модели агента реализующего SPI интерфейс
6. Разработать адаптер регистровой модели агента реализующего AHB интерфейс