Спец курс (Верификация цифровых схем)/Практические задания (Лекция 1)
Материал из Wiki
Лекции ВЦС
Лекции
Практические задания
|
Тесты
Табель успеваемости
Экзамен
Доп. материалы
Правила оформления
- Задания выполнять в одном файле с названием : vds_lab1__<firstname_lastname>.v
- Для каждого задания должен быть реализован отдельный модуль : module task__<number> ();
- Для запуска каждого отдельного модуля использовать параметр симулятора : -top <top_module_name>
- Файл с лабораторной должен содержать заголовок в виде комментария : //// -> Фамилия Имя Отчество
- Перед выводом результатов выполнения всегда добавлять сообщение вида : START_TASK__<number>
- После того как работа модуля завершилась выводить сообщение вида : END_TASK__<number>
- СМ. доп правила оформления для каждого задания отдельно
Задания
- Вывести в консоль значения литералов в десятичном, двоичном, шестнадцатиричном и строковом форматах.
- Вывод литералов осуществлять в порядке указанном в задании, каждый вывод в отдельной строке, в каждой строке вывода должны быть сообщения об выводимом формате:
- HEX: x01,
- DEC: 'd98 ....
- Вывод литералов осуществлять в порядке указанном в задании, каждый вывод в отдельной строке, в каждой строке вывода должны быть сообщения об выводимом формате:
- Создать тип данных структура, содержащую 4 различных поля. Поля должны иметь тип целочисленный, строковый, бит-вектор. Создать две переменные полученного типа. Проинвертировать все битовые поля в первой переменной. Значение всех полей первой и второй переменных типа структуры вывести в консоль.
- Перед выводом первой переменной добавить сообщение вида VAR1FIELD1: VAR1FIELD2: ......
- Перед выводом второй переменной добавить сообщение вида VAR2FIELD1: VAR2FIELD2: ......
- Объявить и заполнить строковую переменную. Вывести на экран первый и последний элемент строки. Длинна строки должна быть больше 10 символов.
- Формат вывода:
- String = "<your string>"
- First symbol = '*'
- Last symbol = '*'
- Формат вывода:
- Объявить и заполнить строковую переменную. Длинна строки должна быть больше 30 символов. Строка содержит символы пробела, разделяющие строку на слова, слов более одного. Создать массив строковых переменных и заполнить их словами из исходной переменной.
- Создать 2-х мерный массив целочисленных переменных, заполнить случайными значениями и после отсортировать элементы в порядке возрастания в каждой строке массива.
- Создать упакованный массив данных, в который поместить значения из предыдущего задания и вывести в консоль все элементы друг за другом без пробелов.
- Создать динамический массив байт размером 10000 Б. Создать еще один динамический массив целых чисел подходящего размера и поместить в него значения первого. Заполнять нужно по порядку все байты массива без пропусков. Второй массив не должен занимать более 10000 Б.
- Первый массив заполнять цифрами 0,1,2......255,0,1,2....255,0....
- После заполнения массива, вывести в консоль значения элементов 0,1,2,3,4,5,6,7,252,253,254,255,2551,2552,2553,2554 в hex формате, 2 hex символа на одно значение.
- формат вывода A1[<номер элемента>]=<hex значение>
- После заполнения второго массива, вывести значения элементов 0,1,63,631 в консоль в hex формате, 8 hex символов на одно значение..
- формат вывода A2[<номер элемента>]=<hex значение>
- Создать ассоциативный массив из 1024 элементов, каждый элемент которого представляет собой динамический массив размером 1024 бит + номер. Номер определяется так, добавляем в ассоциативный массив первый элемент номер равен 1, второй 2, и т.д. Значения векторов в динамическом массиве заполнить случайным образом.
- Вывести в консоль случайным образом 5 элементов из ассоциативного массива. Элементы массива выводить в bit формате.
- Формат вывода случайного элемента AA[<ключ по которому обратились в массив>]=<значение в этом элементе >
- Создать очередь, каждый элемент которой представляет собой структуру данных из 2-го задания. Заполнить очередь 10 значениями. Вывести в консоль значения очереди. После удалить первые 3 элемента из очереди и вывести значения полей элементов в консоль.
- Вывод первой очереди $display("Q1:", <имя очереди>);
- Вывод очереди после удаления $display("Q2:", <имя очереди>);
- Объявить класс A_ARRAY_T, содержащий 3 переменные A, minAi, maxAi. Класс параметризован (ex: paramter N=1) количеством элементов в массиве. A статический массив целых чисел размера N, minAi - минимальное значение, maxAi - максимальное значение в массиве, создать методы класса возвращающие максимальное и минимальное значение в массиве. Создать функцию printa() для вывода значений всех переменных класса в консоль, функция должна быть виртуальной. Создать объект класса A_ARRAY_T aat, массив должен содержать 10 случайных значений. Вывести значения переменных в консоль используя созданную функцию.
- Функция выводит значения в формате :
- ___AI={<1 элемент>,<2 элемент>,<3 элемент>,....<10 элемент>}
- minAI=AI[<номер>]=<значение>
- maxAI=AI[<номер>]=<значение>
- Функция выводит значения в формате :
- Объявить класс B_ARRAY_T, наследуемый от класса в предыдущем задании и переопределить функцию вывода значений всех переменных printa(). Добавить к существующему выводу, вывод сообщения об разработчике класса (ФИО латиницей). Создать объект класса B_ARRAY_T bbt, массив должен содержать 10 случайных значений. Вывести значения переменных в консоль используя переопределённую функцию.
- Функция выводит значения в формате :
- FIO: <F> <O> //обязательно 3 слова
- ___AI={<1 элемент>,<2 элемент>,<3 элемент>,....<10 элемент>}
- minAI=AI[<номер>]=<значение>
- maxAI=AI[<номер>]=<значение>
- Функция выводит значения в формате :
- Объявить переменную класса A_ARRAY_T aat, B_ARRAY_T bbt. Создать объект bbt. Затем указатель bbt присвоить переменной aat. Вызвать функцию printa используя переменную aat (aat.printa()). Пояснить результат вывода(Напечатать в консоль почему результат вывода соответствует классу bbt, несмотря на то что функция printa вызвана из класса att).
- Формат вывода пояснения: NOTE: "<текст пояснения на английском>"
- Кавычки обязательны
- Объявить пакет, который будет содержать объявления классов из двух предыдущих заданий. Объявить еще один класс в модуле, наследуемый от одного из классов описанных в пакете. Использовать импорт пакета. В наследуемом классе переопределить еще раз метод вывода сообщений, убрав вывод информации о разработчике.
- Объявить класс, содержащий задачу, выводящую значения 1, 2, 3, ... и т.д. с периодичностью 1 us симуляционного времени. Объявить еще одну задачу, которая выводит текстовые сообщения "1000us", "2000us", "3000us" ... с периодичностью 1 ms. Объявить третью задачу, которая выводит сообщение "Start check processing..." после того как в первой задаче значения превысили 10000, и выводит сообщение "End check processing..." после того как вторая задача выведет сообщение "5000us". Запустить три задачи в параллель. Провести моделирование 100 ms.
- Описать генератор тактового сигнала используя оператор цикла while.
- Объявить и заполнить два ассоциативных массива произвольными данными. Реализовать функцию сравнения этих массивов.
- Создать очередь целых чисел. Реализовать функции поиска максимального и минимального элементов.
- Создать очередь массивов фиксированной длины, каждый из которых содержит два элемента. Элементы будут задавать нижнюю и верхнюю границы диапазона значений. Реализовать функцию проверки того, что заданные диапазоны во всех элементах очереди не пересекаются между собой.
- Реализовать базовый класс А с полем data (динамический массив) и наследуемый от него класс B. Реализовать класс С, содержащий произвольную функцию (например, для подсчета суммы элементов массива data) с входным параметром типа класс A и далее вызвать эту функцию, передав в качестве аргумента объект типа класс B. Для этого следует правильно передать и обработать поле data объекта типа класс B в реализуемой функции класса С.
- Реализовать интерфейс, параметризируемый двумя значениями: ширина адреса и ширина данных.