Спец курс (Языки верификации аппаратуры)/Практические задания 2 — различия между версиями
Материал из Wiki
				
								
				
				
																
				
				
								
				Vidokq  (обсуждение | вклад)  (→Часть 1)  | 
			Vidokq  (обсуждение | вклад)   (→Варианты ч1)  | 
			||
| Строка 7: | Строка 7: | ||
* В цикле вызвать функцию вывода для каждого объекта.    | * В цикле вызвать функцию вывода для каждого объекта.    | ||
* Продемонстрировать работу функций encode, decode, копирования и сравнения.  | * Продемонстрировать работу функций encode, decode, копирования и сравнения.  | ||
| − | === Варианты   | + | === Варианты  ===  | 
| − | :'''  | + | :'''Спецификация 1'''    | 
*Транзакция содержит поля data, addr, strob, mode  | *Транзакция содержит поля data, addr, strob, mode  | ||
*Ширина данных 32 бита (data)  | *Ширина данных 32 бита (data)  | ||
Версия 01:56, 4 ноября 2019
Лекции ЯВА
Лекции
Практические задания
Тесты
Табель успеваемости
Экзамен
Доп. материалы
Содержание | 
Часть 1
Требования к оформлению ч1
- Записать ограничения на рандомизацию параметров транзакции в соответствии с требованиями спецификации.
 - Создать очередь транзакций и заполнить ее случайными объектами разных классов (базового и производных).
 - В цикле вызвать функцию вывода для каждого объекта.
 - Продемонстрировать работу функций encode, decode, копирования и сравнения.
 
Варианты
- Спецификация 1
 
- Транзакция содержит поля data, addr, strob, mode
 - Ширина данных 32 бита (data)
 - Ширина адреса 32 бита (addr)
 - Для поля Addr используется побайтовая адресация
 - Ширина строба 4 бита (strob), каждый строб отвечает за один байт в data
 - Поле mode имеет четыре значения Чтение, Запись, Ожидание, Ошибка (кодирование выбрать самостоятельно)
 - Поле strob имеет только непрерывное заполнение единицами, т.е. значения 0000, 1010, 1101 и др. недопустимы
 - Поле data принимает значения 0101….01 и 1010….10 с вероятностью 10% каждое, выпадение остальных значений равновероятно
 - Поле addr меньше переменной max_addr и больше min_addr
 - В режиме чтения адрес должен быть выровнен на 2
 - Если значение поля mode равно Запись, то addr выровнен на 4
 - В классе транзакции объявить 2 виртуальные функции: void decode() и void encode()
 - Описать класс транзакицй-запросов, который наследуется от описанного ранее класса. Поле mode в таком классе всегда принимает значение Запись. Транзакция-запрос должна включать следующие поля:
- user_id - 8-битное беззнаковое целое число
 - start - 4-битное беззнаковое целое число
 - end - 4-битное беззнаковое целое число
 - ctx_id - 16-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом {user_id, start, end, ctx_id} = data
 - Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Транзакция-ответ должна включать следующие поля:
- user_id - 8-битное беззнаковое целое число
 - status - 8-битное беззнаковое целое число
 - ctx_id - 16-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом {user_id, status, ctx_id} = data
 - Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (user_id, start и др.)
 - Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса
 - Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса
 
- Вариант 2. Спецификация 2
 
- Транзакция содержит поля data, addr, strob, mode, status
 - Ширина данных 128 бита (data)
 - Ширина адреса 32 бита (addr)
 - Ширина строба (strob) равна числу байт в шине данных
 - Поле mode имеет четыре значения Чтение, Запись, Ожидание, Ошибка
 - Поле strob имеет только непрерывное заполнение единицами, т.е. значения 0000, 1010, 1101 и др. недопустимы
 - Поле data принимает значения 0101….01 и 1010….10 с вероятностью 10%
 - Поле data принимает максимальное и минимальное значения с вероятностью 1%
 - Поле addr меньше переменной max_user_addr и меньше максимально возможного MAX_BUS_ADDR
 
addr должен иметь значения адресующие только по 8 байт, если значение поля mode равно Чтение
- Заполнение 1 поля strob должно начинаться с бита, номер которого равен значению младших 3-разрядов адреса.
 - Поле статус всегда равно OK, если mode равен Запись, иначе UNDEF
 - В классе транзакции объявить 2 виртуальные функции: void decode() и void encode()
 - Описать класс транзакицй-запросов, который наследуется от описанного ранее класса. Поле mode в таком классе всегда принимает значение Запись. Транзакция-запрос должна включать следующие поля:
- opcode - 8-битное беззнаковое целое число
 - r0 - 4-битное беззнаковое целое число
 - r1 - 4-битное беззнаковое целое число
 - ctx_id - 16-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом {opcode, r0, r1, ctx_id} = data[127:96]
 - Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Транзакция-ответ должна включать следующие поля:
- result - 14-битное беззнаковое целое число
 - status - 2-битное беззнаковое целое число
 - ctx_id - 16-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом {result , status , ctx_id} = data[127:96]
 - Для транзакций-запросов и ответов поле addr всегда должно быть кратно 16 и strob равняться всем единицам.
 - Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (result , status и др.)
 - Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса
 - Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса
 
- Вариант 3. Спецификация 3
 
- Транзакция содержит поля data, addr, strob, mode, status, delay_en, write_delay, read_delay
 - Ширина данных 64 бита (data)
 - Ширина адреса 32 бита(addr)
 - Ширина строба (strob) равна числу байт в шине данных
 - Поле mode имеет четыре значения Чтение, Запись, Ожидание, Ошибка
 - Поле strob имеет только непрерывное заполнение единицами
 - Поле data принимает значения 0101….01 и 1010….10 с вероятностью 5%
 - Поле data принимает максимальное и минимальное значения с вероятностью 1%
 - Поля с именем *delay принимают целые значения большие или равные 0
 - Если значение поля delay_en равно 0, то переменные write_delay, read_dealy равны 0.
 - Значение поля write_delay меньше 10, если dealy_en равен 1
 - Значение поля read_delay меньше 200, если dealy_en равен 1
 - В классе транзакции объявить 2 виртуальные функции: void decode() и void encode()
 - Описать класс транзакицй-координат, который наследуется от описанного ранее класса. Поле mode в таком классе всегда принимает значение Запись. Транзакция-координата должна включать следующие поля:
- x - 32-битное беззнаковое целое число
 - y - 32-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом: все четные биты data образуют число x, все нечетные образуют число y.
 - Переопределить в классе-наследнике функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (x, y)
 - Переопределить в классе-наследнике функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса
 - Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса
 
- Вариант 4. Спецификация 4
 
- Транзакция содержит поля data, addr, strob, mode
 - Ширина данных 32 бита, поле data - очередь из N данных
 - Ширина адреса 32 бита, поле addr - очередь из N адресов
 - Ширина строба равна числу байт в шине данных, strob - очередь из N стробов
 - Число элементов в очередях адреса, данных и стробов должно совпадать и должно быть не более 16.
 - Поле mode имеет два значения Чтение, Запись
 - Поле strob имеет только непрерывное заполнение единицами, с учетом очереди слов (т.е. Множество единиц в словах составленных друг за другом не должны перемешиваться 0, другими словами все стробы со 2-го и до предпоследнего всегда равны всем 1, если 1-й и последний стробы больше 0)
 - Поле data принимает значения 0101….01 и 1010….10 с вероятностью 25%
 - Поле data принимает максимальное и минимальное значения с вероятностью 6%
 - В классе транзакции объявить 2 виртуальные функции: void decode() и void encode()
 - Описать класс транзакицй-запросов, который наследуется от описанного ранее класса. Поле mode в таком классе всегда принимает значение Запись. Размеры очередей всегда больше нуля и меньше либо равны 16. Транзакция-запрос должна включать следующие поля:
- user_id - 8-битное беззнаковое целое число
 - key - 4-битное беззнаковое целое число
 - len - 4-битное беззнаковое целое число, равное размеру очереди (значение 0 соответствует размеру 1, а значение 15 - размеру 16)
 - ctx_id - 16-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом {user_id, key, len, ctx_id} = data[0] (первый элемент очереди данных)
 - addr[0] всегда кратен 4
 - strb[0] всегда 4'hF
 - Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Размер очередей всегда равен 1. Транзакция-ответ должна включать следующие поля:
- user_id - 8-битное беззнаковое целое число
 - status - 8-битное беззнаковое целое число
 - ctx_id - 16-битное беззнаковое целое число
 
 - Данные поля должны вычилсяться на основе поля data базового класса следующим образом {user_id, status, ctx_id} = data[0]
 - Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (user_id, status и др.)
 - Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса
 - Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса
 
Часть 2
Требования к оформлению ч2
2. Задать группу покрытия для сбора функционального покрытия в соответствии с требованиями плана верификации (В конце моделирования вывести процент покрытия ковер-группы).
Варианты ч2
- Вариант 1. Группа покрытия должна содержать точки покрытия для data и addr. Каждая точка покрытия должна проверять, что соответствующая переменная принимала минимальное и максимальное значение. Также она должна проверять, что значения попадали в разные диапазоны допустимых значений. Проверить, что всевозможные комбинации data и addr выпадали при рандомизации.
 - Вариант 2. Группа покрытия должна содержать точку покрытия, в которой покрываются последовательности событий: Проверить что было чтение по адресу 0,1,2,3,4,F после записи по этим же адресам, по-очереди по каждому адресу.
 - Вариант 3. Сделать ковер-группу, которая проверяет, что все размеры очереди в режиме чтения и записи транзакции из Спецификации 4 были проверены в тесте.