Спец курс (Языки верификации аппаратуры)/Практические задания 2 — различия между версиями
Материал из Wiki
Vidokq (обсуждение | вклад) (→Часть 1) |
Vidokq (обсуждение | вклад) (→Варианты) |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 7: | Строка 7: | ||
* В цикле вызвать функцию вывода для каждого объекта. | * В цикле вызвать функцию вывода для каждого объекта. | ||
* Продемонстрировать работу функций encode, decode, копирования и сравнения. | * Продемонстрировать работу функций encode, decode, копирования и сравнения. | ||
− | === Варианты | + | === Варианты === |
− | :'''Вариант 1.''' | + | :'''Вариант 1.''' |
*Транзакция содержит поля data, addr, strob, mode | *Транзакция содержит поля data, addr, strob, mode | ||
*Ширина данных 32 бита (data) | *Ширина данных 32 бита (data) | ||
Строка 26: | Строка 26: | ||
**end - 4-битное беззнаковое целое число | **end - 4-битное беззнаковое целое число | ||
**ctx_id - 16-битное беззнаковое целое число | **ctx_id - 16-битное беззнаковое целое число | ||
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом {user_id, start, end, ctx_id} = data |
*Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Транзакция-ответ должна включать следующие поля: | *Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Транзакция-ответ должна включать следующие поля: | ||
**user_id - 8-битное беззнаковое целое число | **user_id - 8-битное беззнаковое целое число | ||
**status - 8-битное беззнаковое целое число | **status - 8-битное беззнаковое целое число | ||
**ctx_id - 16-битное беззнаковое целое число | **ctx_id - 16-битное беззнаковое целое число | ||
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом {user_id, status, ctx_id} = data |
*Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (user_id, start и др.) | *Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (user_id, start и др.) | ||
*Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса | *Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса | ||
*Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса | *Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса | ||
− | :'''Вариант 2.''' | + | :'''Вариант 2.''' |
*Транзакция содержит поля data, addr, strob, mode, status | *Транзакция содержит поля data, addr, strob, mode, status | ||
*Ширина данных 128 бита (data) | *Ширина данных 128 бита (data) | ||
Строка 46: | Строка 46: | ||
*Поле data принимает максимальное и минимальное значения с вероятностью 1% | *Поле data принимает максимальное и минимальное значения с вероятностью 1% | ||
*Поле addr меньше переменной max_user_addr и меньше максимально возможного MAX_BUS_ADDR | *Поле addr меньше переменной max_user_addr и меньше максимально возможного MAX_BUS_ADDR | ||
− | addr должен иметь значения адресующие только по 8 байт, если значение поля mode равно Чтение | + | *addr должен иметь значения адресующие только по 8 байт, если значение поля mode равно Чтение |
*Заполнение 1 поля strob должно начинаться с бита, номер которого равен значению младших 3-разрядов адреса. | *Заполнение 1 поля strob должно начинаться с бита, номер которого равен значению младших 3-разрядов адреса. | ||
*Поле статус всегда равно OK, если mode равен Запись, иначе UNDEF | *Поле статус всегда равно OK, если mode равен Запись, иначе UNDEF | ||
Строка 55: | Строка 55: | ||
**r1 - 4-битное беззнаковое целое число | **r1 - 4-битное беззнаковое целое число | ||
**ctx_id - 16-битное беззнаковое целое число | **ctx_id - 16-битное беззнаковое целое число | ||
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом {opcode, r0, r1, ctx_id} = data[127:96] |
*Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Транзакция-ответ должна включать следующие поля: | *Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Транзакция-ответ должна включать следующие поля: | ||
**result - 14-битное беззнаковое целое число | **result - 14-битное беззнаковое целое число | ||
**status - 2-битное беззнаковое целое число | **status - 2-битное беззнаковое целое число | ||
**ctx_id - 16-битное беззнаковое целое число | **ctx_id - 16-битное беззнаковое целое число | ||
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом {result , status , ctx_id} = data[127:96] |
*Для транзакций-запросов и ответов поле addr всегда должно быть кратно 16 и strob равняться всем единицам. | *Для транзакций-запросов и ответов поле addr всегда должно быть кратно 16 и strob равняться всем единицам. | ||
*Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (result , status и др.) | *Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (result , status и др.) | ||
Строка 66: | Строка 66: | ||
*Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса | *Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса | ||
− | :'''Вариант 3.''' | + | :'''Вариант 3.''' |
*Транзакция содержит поля data, addr, strob, mode, status, delay_en, write_delay, read_delay | *Транзакция содержит поля data, addr, strob, mode, status, delay_en, write_delay, read_delay | ||
*Ширина данных 64 бита (data) | *Ширина данных 64 бита (data) | ||
Строка 83: | Строка 83: | ||
**x - 32-битное беззнаковое целое число | **x - 32-битное беззнаковое целое число | ||
**y - 32-битное беззнаковое целое число | **y - 32-битное беззнаковое целое число | ||
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом: все четные биты data образуют число x, все нечетные образуют число y. |
*Переопределить в классе-наследнике функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (x, y) | *Переопределить в классе-наследнике функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (x, y) | ||
*Переопределить в классе-наследнике функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса | *Переопределить в классе-наследнике функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса | ||
*Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса | *Реализовать виртуальные функции копирования, сравнения и вывода для базового класса и переопределить их в классе-наследнике. В функциях класса-наследника вызывать соответствующие функции базового класса | ||
− | :'''Вариант 4.''' | + | :'''Вариант 4.''' |
*Транзакция содержит поля data, addr, strob, mode | *Транзакция содержит поля data, addr, strob, mode | ||
*Ширина данных 32 бита, поле data - очередь из N данных | *Ширина данных 32 бита, поле data - очередь из N данных | ||
Строка 104: | Строка 104: | ||
**len - 4-битное беззнаковое целое число, равное размеру очереди (значение 0 соответствует размеру 1, а значение 15 - размеру 16) | **len - 4-битное беззнаковое целое число, равное размеру очереди (значение 0 соответствует размеру 1, а значение 15 - размеру 16) | ||
**ctx_id - 16-битное беззнаковое целое число | **ctx_id - 16-битное беззнаковое целое число | ||
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом {user_id, key, len, ctx_id} = data[0] (первый элемент очереди данных) |
*addr[0] всегда кратен 4 | *addr[0] всегда кратен 4 | ||
*strb[0] всегда 4'hF | *strb[0] всегда 4'hF | ||
*Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Размер очередей всегда равен 1. Транзакция-ответ должна включать следующие поля: | *Описать класс транзакицй-ответов, который наследуется от описанного ранее базового класса. mode всегда равен Чтение для такой транзакции. Размер очередей всегда равен 1. Транзакция-ответ должна включать следующие поля: | ||
− | **user_id - 8-битное | + | **user_id - 8-битное без знаковое целое число |
− | **status - 8-битное | + | **status - 8-битное без знаковое целое число |
− | **ctx_id - 16-битное | + | **ctx_id - 16-битное без знаковое целое число |
− | *Данные поля должны | + | *Данные поля должны вычисляться на основе поля data базового класса следующим образом {user_id, status, ctx_id} = data[0] |
*Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (user_id, status и др.) | *Переопределить в классах-наследниках функцию encode так, чтобы она заполняла поле data базового класса на основе значений производного класса (user_id, status и др.) | ||
*Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса | *Переопределить в классах-наследниках функцию decode так, чтобы она заполняла поля класса-наследника исходя из значения поля data базового класса |
Текущая версия на 02:01, 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.
- Транзакция содержит поля 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.
- Транзакция содержит поля 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.
- Транзакция содержит поля 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 были проверены в тесте.