Оглавление секции

    • Курс состоит из двух частей:

      • Теоритическая часть даёт общее представление о функционировании современных цифровых вычислительных систем, а так же о методиках,  используемых при их разработке. В теоритическую часть курса входит:
        • Краткое повторение теоритической базы из ранее прослушанных курсов:
          1. Системы счисления.
          2. Группы, Кольца, Алгебры. Булева алгебра.
          3. Булевы функции.
          4. Автоматы.
          5. Конвейеры.
        • Теория логических схем:
          1. Физические принципы функционирования цифровой электроники.
          2. Синхронные и асинхронные процессы.
          3. HDL языки: VHDL, Verilog, SystemVerilog.
        • Инструменты и методики проэктирования ВС:
          1. ПЛИС (CPLD, FPGA)
          2. XILINX VIVADO
          3. Синтез HDL-схемы.
      • Практическая часть представляет собой лабораторные работы, целью которых является получение практических навыков использования методик разработки вычислительных систем, изученных в теоритической части курса. Темы лабораторных работ:
        • Синхронные/асинхронные процессы.
        • Логические функции.
        • Реализация автомата Мура в HDL.
        • Реализация автомата Мили в HDL.
        • Реализация конвейеров в HDL.
        • Построение ВС на основе конвейеров.
        • Построение ВС на основе автоматов.

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

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

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

      Варианты:

      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])"