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

Спец курс (Верификация цифровых схем)/Практические задания (Лекция 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. Создать динамический массив байт размером 10 кБ. Создать еще один динамический массив целых чисел подходящего размера и поместить в него значения первого. Второй массив не должен занимать более 10 кБ.
  8. Создать ассоциативный массив из 1024 элементов, каждый элемент которого представляет собой динамический массив размером 1024 бит + номер. Номер определяется так, добавляем в ассоциативный массив первый элемент номер равен 1, второй 2, и т.д. Значения векторов в динамическом массиве заполнить случайным образом.
  9. Создать очередь, каждый элемент которой представляет собой структуру данных из 2-го задания. Заполнить очередь 10 значениями. После удалить первые 3 элемента из очереди и вывести значения полей элементов в консоль.
  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. Реализовать интерфейс, параметризируемый двумя значениями: ширина адреса и ширина данных.