«Работать добросовестно — значит: работать, повышая свою квалификацию, проявляя инициативу в совершенствовании продукции, технологий, организации работ, оказывая не предусмотренную должностными инструкциями помощь другим сотрудникам (включая и руководителей) в общей им всем работе.

Спец курс (Языки верификации аппаратуры)/Практические задания 2

Материал из Wiki
Перейти к: навигация, поиск
Лекции ЯВА

Лекции

Практические задания

Тесты

Табель успеваемости

Экзамен

Доп. материалы

Содержание

Часть 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 были проверены в тесте.