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

Спец курс (Верификация цифровых схем)/Практические задания (Лекция 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. Объявить строковую переменную mystr. По умолчанию переменная должна быть инициализирована строкой содержащей больше 30 символов. Заполнить строку используя функцию $value$plusargs("MYSTR=%s",mystr) Строка может содержать любое количество символов пробела, разделяющие строку на слова, слов более одного. Создать массив строковых переменных и заполнить их словами из исходной переменной. Размер строки может изменяться в ходе проверки задания и передаваться через +MYSTR параметр. В конце и начале строки могут быть доп пробелы. Слова могут быть разделены множеством пробелов.
    1. В консоль вывести содержимое строки в формате: MYSTR=<строка>
    2. В консоль вывести содержимое массива, MYSTR[1]=<строка> MYSTR[2]=<строка> ....
  5. Создать 2-х мерный массив целочисленных переменных размера 10 на 10, заполнить случайными значениями в диапазоне от 2 до 23 и после отсортировать элементы в порядке возрастания в каждой строке массива.
    1. Вывести исходный массив в консоль каждый элемент занимает 2 позиции EX:
 А1:
 2 3 4 21 20 17 12 12  1 
12 3 4 12 16 17 22 22 23  
...
...
 2 3 4  2  6  7  2  2  3
    1. Вывести сортированный массив в консоль каждый элемент занимает 2 позиции EX:
  А2:
 1 2 3  4 12 12 17 20 21  
...
...
 2 2 2  2  3  3  4  6  7
  1. Создать упакованный массив данных, в который поместить значения из предыдущего задания и вывести в консоль все элементы друг за другом без пробелов.
  2. Создать динамический массив байт размером 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 значение>
  3. Создать ассоциативный массив из 1024 элементов, каждый элемент которого представляет собой динамический массив размером 1024 бит + номер. Номер определяется так, добавляем в ассоциативный массив первый элемент номер равен 1, второй 2, и т.д. Значения векторов в динамическом массиве заполнить случайным образом.
    1. Вывести в консоль случайным образом 5 элементов из ассоциативного массива. Элементы массива выводить в bit формате.
    2. Формат вывода случайного элемента AA[<ключ по которому обратились в массив>]=<значение в этом элементе >
  4. Создать очередь, каждый элемент которой представляет собой структуру данных из 2-го задания. Заполнить очередь 10 значениями. Вывести в консоль значения очереди. После удалить первые 3 элемента из очереди и вывести значения полей элементов в консоль.
    1. Вывод первой очереди $display("Q1:", <имя очереди>);
    2. Вывод очереди после удаления $display("Q2:", <имя очереди>);
  5. Объявить класс A_ARRAY_T, содержащий 3 переменные A, minAi, maxAi. Класс параметризован (ex: paramter N=1) количеством элементов в массиве. A статический массив целых чисел размера N, minAi - минимальное значение, maxAi - максимальное значение в массиве, создать методы класса возвращающие максимальное и минимальное значение в массиве. Создать функцию printa() для вывода значений всех переменных класса в консоль, функция должна быть виртуальной. Создать объект класса A_ARRAY_T aat, массив должен содержать 10 случайных значений. Вывести значения переменных в консоль используя созданную функцию.
    1. Функция выводит значения в формате :
      1. ___AI={<1 элемент>,<2 элемент>,<3 элемент>,....<10 элемент>}
      2. minAI=AI[<номер>]=<значение>
      3. maxAI=AI[<номер>]=<значение>
  6. Объявить класс B_ARRAY_T, наследуемый от класса в предыдущем задании и переопределить функцию вывода значений всех переменных printa(). Добавить к существующему выводу, вывод сообщения об разработчике класса (ФИО латиницей). Создать объект класса B_ARRAY_T bbt, массив должен содержать 10 случайных значений. Вывести значения переменных в консоль используя переопределённую функцию.
    1. Функция выводит значения в формате :
      1. FIO: и после обязательно 3 слова разделенных пробелами (ex FIO: Zaitsay Viktor Sergeevich )
      2. ___AI={<1 элемент>,<2 элемент>,<3 элемент>,....<10 элемент>}
      3. minAI=AI[<номер>]=<значение>
      4. maxAI=AI[<номер>]=<значение>
  7. Объявить пакет ARRAY_PKG, который будет содержать объявления классов из двух предыдущих заданий. Объявить еще один класс С_ARRAY_T вне пакета в модуле, наследуемый от B_ARRAY_T класса описанного в пакете ARRAY_PKG.Для расширения области видимости использовать импорт пакета ARRAY_PKG в модуле. В наследуемом классе переопределить еще раз метод вывода сообщений printa(), убрав вывод информации о разработчике. Создать объект класса C_ARRAY_T cct, массив должен содержать 20 случайных значений. Вывести значения переменных в консоль используя созданную функцию.
    1. Функция выводит значения в формате, как у класса A_ARRAY_T.
  8. Объявить класс, содержащий задачу, выводящую значения 1, 2, 3, ... и т.д. с периодичностью 1 us симуляционного времени. Объявить еще одну задачу, которая выводит текстовые сообщения "1000us", "2000us", "3000us" ... с периодичностью 1 ms. Объявить третью задачу, которая выводит сообщение "Start check processing..." после того как в первой задаче значения превысили 10000, и выводит сообщение "End check processing..." после того как вторая задача выведет сообщение "5000us". Запустить три задачи в параллель. Провести моделирование 100 ms.
  9. Описать генератор тактового сигнала используя оператор цикла while.
  10. Объявить и заполнить два ассоциативных массива произвольными данными. Реализовать функцию сравнения этих массивов.
  11. Создать очередь целых чисел. Реализовать функции поиска максимального и минимального элементов.
  12. Создать очередь массивов фиксированной длины, каждый из которых содержит два элемента. Элементы будут задавать нижнюю и верхнюю границы диапазона значений. Реализовать функцию проверки того, что заданные диапазоны во всех элементах очереди не пересекаются между собой.
  13. Реализовать базовый класс А с полем data (динамический массив) и наследуемый от него класс B. Реализовать класс С, содержащий произвольную функцию (например, для подсчета суммы элементов массива data) с входным параметром типа класс A и далее вызвать эту функцию, передав в качестве аргумента объект типа класс B. Для этого следует правильно передать и обработать поле data объекта типа класс B в реализуемой функции класса С.
  14. Реализовать интерфейс, параметризируемый двумя значениями: ширина адреса и ширина данных.
  15. Объявить переменную класса A_ARRAY_T aat, B_ARRAY_T bbt (из предыдущих заданий). Создать объект bbt. Затем указатель bbt присвоить переменной aat. Вызвать функцию printa используя переменную aat (aat.printa()). Пояснить результат вывода(Напечатать в консоль почему результат вывода соответствует классу bbt, несмотря на то что функция printa вызвана из класса att).
    1. Формат вывода пояснения: NOTE: "<текст пояснения на английском>"
    2. Кавычки обязательны