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

Спец курс (Верификация цифровых схем)/Практические задания (Лекция 1)

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

Лекции

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

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

Экзамен

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

Правила оформления

  1. Задания выполнять в одном файле с названием  : vds_lab1__<firstname_lastname>.v
  2. Для каждого задания должен быть реализован отдельный модуль  : module task__<number> ();
  3. Для запуска каждого отдельного модуля использовать параметр симулятора : -top <top_module_name>
  4. Файл с лабораторной должен содержать заголовок в виде комментария  : //// -> Фамилия Имя Отчество
  5. Перед выводом результатов выполнения всегда добавлять сообщение вида  : START_TASK__<number>
  6. После того как работа модуля завершилась выводить сообщение вида  : END_TASK__<number>
  7. СМ. доп правила оформления для каждого задания отдельно

Задания

  1. Вывести в консоль значения литералов в десятичном, двоичном, шестнадцатиричном и строковом форматах.
    • Вывод литералов осуществлять в порядке указанном в задании, каждый вывод в отдельной строке, в каждой строке вывода должны быть сообщения об выводимом формате:
      HEX: x01,
      DEC: 'd98 ....
  2. Создать тип данных структура, содержащую 4 различных поля. Поля должны иметь тип целочисленный, строковый, бит-вектор. Создать две переменные полученного типа. Проинвертировать все битовые поля в первой переменной. Значение всех полей первой и второй переменных типа структуры вывести в консоль.
    1. Перед выводом первой переменной добавить сообщение вида VAR1FIELD1: VAR1FIELD2: ......
    2. Перед выводом второй переменной добавить сообщение вида VAR2FIELD1: VAR2FIELD2: ......
  3. Объявить и заполнить строковую переменную. Вывести на экран первый и последний элемент строки. Длинна строки должна быть больше 10 символов.
    • Формат вывода:
      String = "<your string>"
      First symbol = '*'
      Last symbol = '*'
  4. Объявить и заполнить строковую переменную. Длинна строки должна быть больше 30 символов. Строка содержит символы пробела, разделяющие строку на слова, слов более одного. Создать массив строковых переменных и заполнить их словами из исходной переменной.
  5. Создать 2-х мерный массив целочисленных переменных, заполнить случайными значениями и после отсортировать элементы в порядке возрастания в каждой строке массива.
  6. Создать упакованный массив данных, в который поместить значения из предыдущего задания и вывести в консоль все элементы друг за другом без пробелов.
  7. Создать динамический массив байт размером 10000 Б. Создать еще один динамический массив целых чисел подходящего размера и поместить в него значения первого. Заполнять нужно по порядку все байты массива без пропусков. Второй массив не должен занимать более 10000 Б.
    1. Первый массив заполнять цифрами 0,1,2......255,0,1,2....255,0....
    2. После заполнения массива, вывести в консоль значения элементов 0,1,2,3,4,5,6,7,252,253,254,255,2551,2552,2553,2554 в hex формате, 2 hex символа на одно значение.
    3. формат вывода A1[<номер элемента>]=<hex значение>
    4. После заполнения второго массива, вывести значения элементов 0,1,63,631 в консоль в hex формате, 8 hex символов на одно значение..
    5. формат вывода A2[<номер элемента>]=<hex значение>
  8. Создать ассоциативный массив из 1024 элементов, каждый элемент которого представляет собой динамический массив размером 1024 бит + номер. Номер определяется так, добавляем в ассоциативный массив первый элемент номер равен 1, второй 2, и т.д. Значения векторов в динамическом массиве заполнить случайным образом.
    1. Вывести в консоль случайным образом 5 элементов из ассоциативного массива. Элементы массива выводить в bit формате.
    2. Формат вывода случайного элемента AA[<ключ по которому обратились в массив>]=<значение в этом элементе >
  9. Создать очередь, каждый элемент которой представляет собой структуру данных из 2-го задания. Заполнить очередь 10 значениями. Вывести в консоль значения очереди. После удалить первые 3 элемента из очереди и вывести значения полей элементов в консоль.
    1. Вывод первой очереди $display("Q1:", <имя очереди>);
    2. Вывод очереди после удаления $display("Q2:", <имя очереди>);
  10. Объявить класс, содержащий 3 переменные A, minAi, maxAi. A-массив целых чисел, minAi - минимальное значение, maxAi - максимальное значение в массиве, создать методы класса возвращающие максимальное и минимальное значение в массиве. А также методы вывода значений всех переменных в консоль, функция должна быть виртуальной. Массив заполнить 10 случайными значениями. Создать объект класса и вывести значения переменных в консоль.
  11. Объявить класс, наследуемый от класса в предыдущем задании и переопределить функцию вывода значений всех переменных. Добавить к существующему выводу, вывод сообщения об разработчике класса (ФИО латиницей).
  12. Объявить пакет, который будет содержать объявления классов из двух предыдущих заданий. Объявить еще один класс в модуле, наследуемый от одного из классов описанных в пакете. Использовать импорт пакета. В наследуемом классе переопределить еще раз метод вывода сообщений, убрав вывод информации о разработчике.
  13. Объявить класс, содержащий задачу, выводящую значения 1, 2, 3, ... и т.д. с периодичностью 1 us симуляционного времени. Объявить еще одну задачу, которая выводит текстовые сообщения "1000us", "2000us", "3000us" ... с периодичностью 1 ms. Объявить третью задачу, которая выводит сообщение "Start check processing..." после того как в первой задаче значения превысили 10000, и выводит сообщение "End check processing..." после того как вторая задача выведет сообщение "5000us". Запустить три задачи в параллель. Провести моделирование 100 ms.
  14. Описать генератор тактового сигнала используя оператор цикла while.
  15. Объявить и заполнить два ассоциативных массива произвольными данными. Реализовать функцию сравнения этих массивов.
  16. Создать очередь целых чисел. Реализовать функции поиска максимального и минимального элементов.
  17. Создать очередь массивов фиксированной длины, каждый из которых содержит два элемента. Элементы будут задавать нижнюю и верхнюю границы диапазона значений. Реализовать функцию проверки того, что заданные диапазоны во всех элементах очереди не пересекаются между собой.
  18. Реализовать базовый класс А с полем data (динамический массив) и наследуемый от него класс B. Реализовать класс С, содержащий произвольную функцию (например, для подсчета суммы элементов массива data) с входным параметром типа класс A и далее вызвать эту функцию, передав в качестве аргумента объект типа класс B. Для этого следует правильно передать и обработать поле data объекта типа класс B в реализуемой функции класса С.
  19. Реализовать интерфейс, параметризируемый двумя значениями: ширина адреса и ширина данных.