По просьбе преподавателя одного из российских вузов выписал список тем, связанных с MIPSfpga

По просьбе преподавателя одного из российских вузов выписал список тем, связанных с MIPSfpga. Это теоретически может помочь встроить лабы в различные программы. Список является микстурой из Харриса & Харриса и всяких индустриальных навыков. Короче чего вижу, о том пою:

  1. Концепции, которыми, как мы ожидаем, студент уже владеет. Если чем-то нет, можно будет устроить короткий ликбез:

    1. Общие вопросы электронной промышленности

      1. Электронная индустрия, полупроводниковая индустрия, индустрия средств автоматизации проектирования (Electronic Design Automation — EDA), индустрия полупроводниковой интеллектуальной собственности (Semiconductor IP).

      2. Уровни абстракции системы на кристалле — программы, архитектура / система команд, микроархитектура / устройство конвейера, уровень регистровых передач (Register Transfer Level — RTL), уровень логических элементов, уровень транзисторов, уровень физики.

      3. Маршрут разработки системы на кристалле: спецификация, описание  на RTL, logic synthesis, place & route, GDSII, производство.

      4. Уровни моделирования: моделирование системы, моделирование на уровне системы команд (instruction set simulator), моделирование на уровне языка описание аппаратуры (Hardware Description Language — HDL), дискретное моделирование, очередь событий, дельта-цикл.

      5. Почему FPGA? Почему ASIC? Экономика разработки и производства разных типов микросхем — Application-Specific Integrated Circuit (ASIC) и Field-Programmable Gate Array (FPGA). Баланс между стоимостью, гибкостью, количеством, начальными тратами и тратами за время жизни проекта.

    2. Основый цифровой логики

      1. Комбинационная логика: базовые логические элементы, базовые комбинационные блоки (мультиплексоры, дешифраторы), временные характеристики (задержка распостранения, задержка реакции)

      2. Последовательностная логика: D-триггеры, временные характеристики (время предустановки, время удержания), временные ограничения, максимальная тактовая частота, синхронизаторы асинхронных входов

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

      4. Конечные автоматы, диаграммы состояний, использование

      5. Концепция конвейера, применимость для повышения пропускной способности

    3. Языки описания аппаратуры, желательно Verilog (хотя и VHDL OK)

      1. Модули, порты, экземпляры (instance), иерархия модулей, параметризованные модули

      2. Типы данных (reg, wire, logic), значения x, регистовые файлы, выражения

      3. Оператор непрерывного присваивания, always-блоки, блокирующие и неблокирующие единовременные присваивания

      4. Операторы if, case, for; конструкции task и function; полезно но не обязательно — generate

      5. Подмножество для синтеза и симуляции, правила использования присваиваний в синтезируемом RTL-подмножестве

      6. Среда тестирования на Verilog (не SystemVerilog), timescale, спецификация задержек, несинтезируемые циклы while, генерация тактового сигнала и сброса

      7. Использование любого симулятора Verilog-а (Synopsys VCS, Cadence IUS / NCVerilog, Mentor ModelSim / Questa, Icarus Verilog)

      8. Понимание временных диаграмм

      9. Общее представление, как синтезируются различные конструкции синтезируемого подмножеста HDL

    4. Концепция архитектуры компьютера, ассемблер

      1. Команды, операнды, регистры, константы

      2. Адрес, память, базовый регистр, смещение, прямое и обратное размещение байтов (little/big endian)

      3. Арифметические и логические операции

      4. Метки, условные и безусловные переходы

      5. Вызов подпрограммы, стек, передача параметров, возврат значения

      6. Представление соответствия конструкций и деклараций языка программирования Си и ассемблера

      7. Исключения и прерывания

    5. Элементы микроархитектуры, устройство конвейера

      1. Измерение производительности, максимальная тактовая частота, IPC, DMIPS / MHz, CoreMark / MHz

      2. Сравнение однотактного процессора, многотактного процессора и конвейерного процессора, приостановки, сбросы, байпас / форвардинг

      3. Основы кэшей, локальность обращений к памяти, ассоциативные кэши, кэши прямого отбражения, наборно-ассоциативные кэши, алгоритмы выткснения

    6. Протоколы для систем на кристалле и систем на плате

      1. Протоколы систем на кристалле — AMBA APB, AHB-Lite, AXI, OCP

      2. Протоколы систем на плате — SPI, UART, I2C — общие принципы

    7. Общие для разработчика навыки работы с компьютером

      1. Программирование на Си, использование make, системы контроля версий (GitHub) итд

  2. Концепции и навыки, которыми владеть желательно, но их можно ввести и в процессе семинара по MIPSfpga

    1. Работа с Xilinx Vivado и Altera Quartus II — общие вопросы

      1. Создание проекта

      2. Связывание портов с выходами FPGA

      3. Задание ограничений по временным характеристикам

      4. Рассматривание схем до и после синтеза и mapping-а

      5. Чтение отчетов синтезатора, place & route, negative slack, max frequency, utilization

      6. Загрузка в FPGA

    2. Работа с Xilinx Vivado и Altera Quartus II — более специальные вопросы

      1. Генерация макро для PLL. Что это такое, зачем это нужно, как это сделать

      2. Как подсказать синтезатору, что тот или иной модуль — память. Файлы инициализации памяти, директивы ram_style (Xilinx), ram_init_file (Altera), синтезируемого $readmemh

    3. Работа с симулятором Verilog-а Mentor ModelSim Student Edition

      1. Структура среды тестирования / testbench

      2. Создание проекта, симуляция

      3. Анализ временных диаграм, использование waveform viewer

    4. Работа с Codescape — средой разработки программного обеспечения для MIPS на основе GNU (gcc, gdb и т.д.)

    5. Использование BusBlaster и OpenOCD

      1. BusBlaster — проба для загрузки программ с PC в устройство с интерфейсом JTAG (в данном случае MIPS-specific EJTAG) и работе с отладчиком GDB

      2. OpenOCD — программное обеспечение для BusBlaster

    6. Элементы ассемблера MIPS

      1. Можно для скорости введения попрактиковаться полчаса на MIPS MARS Simulator

    7. Обзор процессорного ядра MIPS microAptiv UP, на основе которого сделан MIPSfpga

      1. Структура конвейера

      2. Кэши и управление ими

      3. Протокол внешней шины AHB-Lite

  3. Разного рода связанные темы, которые привязаны к тематике (их знать для начала работы с MIPSfpga не требуется, более того, MIPSfpga может помочь их освоить)

    1. Улучшенные микроархитектуры, длинные конвейеры, предсказание переходов, суперскалярные конвейеры, внеочередное выполнение команд, векторные расширения, многопоточность — как вообще, так и на примере MIPS

    2. Виртуальная  память вообще и конкретно в MIPSfpga, трансляция адресов и ее применение, буфер ассоциативной трансляции и его строение, защита памяти

    3. Создание многоядерных систем с когерентными кэшами, протоколы MESI, directory-based и т.д. — как вообще, так и на примере MIPS

    4. Технологии верификации on-chip протоколов и RTL блоков используя SystemVerilog и coverage-driven constrained-random verification methodology, обзор библиотеки Universal Verification Methodology (UVM)

    5. Технологии верификации процессора и систем, совместная симуляция аппаратного и программного обеспечения

    6. Создание сопроцессоров, специализированных вычислителей на основе UDI/CorExtend и Cop2

    7. Исследование баланса между вычислениями в софтвере и хардвере, создание специализированных средств разработки для гибкого распределения подобныз вычислений

Изначально текст опубликован в http://panchul.livejournal.com/484787.html