Тематический план

  • Общее

  • Начало работы с Vivado

  • Логические функции

      1. Машина для голосования.
        • На входе 4 кнопки. На выходе любой один светодиод (можно все сразу, если хочется). Светодиод должен гореть тогда и только тогда, когда большинство кнопок нажаты, т.е. минимум любые 3 из 4. Либо все 4. Арифметику использовать нельзя. Только логику, т.е. "И", "ИЛИ", "НЕ", "Исключающее ИЛИ".
      2. Двухразрядный сумматор.
        • На входе два целых числа: первое число - кнопки 1 и 2, второе число - кнопки 3, 4. На выходе три светодиода (желательно стоящие рядом). Числа вводятся в двоичной системе счисления кнопками. Результат на диодах так же в двоичной системе счисления. Арифметику использовать нельзя. Только логику, т.е. "И", "ИЛИ", "НЕ", "Исключающее ИЛИ".
      3. Трёхразрядный дешифратор.
        • На входе любые три кнопки (желательно стоящие рядом). На выходе 8 светодиодов. Должен загораться тот светодиод, номер которого введён кнопками в двоичной системе счисления. Арифметику использовать нельзя. Только логику, т.е. "И", "ИЛИ", "НЕ", "Исключающее ИЛИ". 
      4. Трёхразрядный селектор. 
        • На входе любые три кнопки (желательно стоящие рядом) и 8 тумблеров. На выходе единственный светодиод. На светодиод должен транслироваться сигнал с того тумблера, номер которого указан кнопками в двоичной системе счисления. Арифметику использовать нельзя. Только логику, т.е. "И", "ИЛИ", "НЕ", "Исключающее ИЛИ". 

  • Синхронные процессы. Память.

      1. Реализовать адресуемую память, данные для которой устанавливаются 8-ю тумблерами а адрес и команда записи кнопками. При вводе соответствующего адреса память должна автоматически выдавать соответствующие данные на светодиоды, а при нажатии кнопки "Записать" сохранять в эту же ячейку новые данные. В памяти должно быть не менее 4-х адресов.
      2. Реализовать сдвиговый регистр. Данные в регистр заносятся по одному биту, кнопками, а выдаются все и сразу, на светодиоды. При вводе каждого следующего бита, предыдущие сдвигаются, что бы освободить новому биту место. Один, самый старый, бит, при этом, будет выброшен.
      3. Реализовать конкурентную память. представляет собой регистр, в который можно выполнить запись из двух источников (первый блок тумблеров и второй). Запись должна происходить только в случае, когда отсутствует конфликт, т.е. когда подан лишь один из двух сигналов записи. В случае же конфликта, следует сигнализировать о нём, зажигая соответствующий светодиод.
      4. Реализовать обратный сдвиговый регистр. Как второе задание, только наоборот. Вводятся данные все сразу, а читаются по одному биту.

  • Конвейеры. DataFlow.

    • Вычислить формулу при помощи конвейера

      Варианты:

      1. x = a * b + 3 * c
      2. x = a / b + c * d
      3. x = (a - b) * (c - e)
      4. x = a * b * c * d
      5. x = a - b * c * d
      6. x = a + b / c + d
      7. x = a + b + c + d
      8. x = (a / b) / (c / d)
      9. x = (a * b) / (c * d)
      10. x = a + b + c * d
      11. x = a * a + b * b
      12. x = (a + b) / (2c)
      13. x = 2(a + b * c)
      14. x = 2(a + b) + c
      15. x = 2(a * b + c * d)
      16. x = 2(e * f + g / t)
      17. x = 2((a / b) / (c - e))
      18. x = 2(a/b)/(c-e)

  • Автоматы

    • Реализовать автомат детектирующий последовательность символов

      1. Только строчные буквы.
      2. Только прописные буквы.
      3. Только десятичные цифры (0-9).
      4. Шестнадцатеричное число (0-F).
      5. Арифметические выражения, т.е. любая последовательность цифр и операций: +-*/
      6. Электронная почта (что угодно с собакой @ в середине)

  • Автомат для синтаксического разбора

    • Выполняется по аналогии с ЛР№5.
      Методички по данной лабораторной работе будут выложены до 25 ноября 2018.

      Задание выложено для тех, кто уже всё сдал и скучает без дела. (По сути ЛР№6 и ЛР№7 бонусные, т.к. получить зачёт можно и без них)

      Реализовать автомат разбирающий последовательность в соответствии с шаблоном. Формат POSIX. Найденные подпоследовательности выводить в консоль в порядке открывающихся круглых скобок (как в POSIX). На строке следующей после последней узнанной подпоследовательности должен быть символ '+', если последовательность хорошая, и '-', если плохая. Символ конца последовательности перенос строки, т.е. ASCII код 13.

      1. email: "([a-zA-Z0-9.-]+)@([a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9])\.([a-zA-Z]{2,4})"
      2. Номер телефона: "(\+?)([0-9]{1,4})-([0-9]{3})-([0-9-]{7,10})"
      3. Число с плавающей точкой: "(-?)([0-9]+)\.([0-9]*)e(\+|-)([0-9]+)" (Сами числа парсить не нужно, только распознать регулярку)
      4. Дату: "(0?[1-9]|[12][0-9]|3[01])[\.](0?[1-9]|1[0-2])[\.](19[0-9]{2}|20[0-9]{2})"
      5. Время: "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])"


  • Автомат управляющий ЦПУ