Спец курс (Верификация цифровых схем)/Практические задания (Лекция 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 интерфейс

