
По просьбе преподавателя одного из российских вузов выписал список тем, связанных с MIPSfpga. Это теоретически может помочь встроить лабы в различные программы. Список является микстурой из Харриса & Харриса и всяких индустриальных навыков. Короче чего вижу, о том пою:
Концепции, которыми, как мы ожидаем, студент уже владеет. Если чем-то нет, можно будет устроить короткий ликбез:
Общие вопросы электронной промышленности
Электронная индустрия, полупроводниковая индустрия, индустрия средств автоматизации проектирования (Electronic Design Automation - EDA), индустрия полупроводниковой интеллектуальной собственности (Semiconductor IP).
Уровни абстракции системы на кристалле - программы, архитектура / система команд, микроархитектура / устройство конвейера, уровень регистровых передач (Register Transfer Level - RTL), уровень логических элементов, уровень транзисторов, уровень физики.
Маршрут разработки системы на кристалле: спецификация, описание на RTL, logic synthesis, place & route, GDSII, производство.
Уровни моделирования: моделирование системы, моделирование на уровне системы команд (instruction set simulator), моделирование на уровне языка описание аппаратуры (Hardware Description Language - HDL), дискретное моделирование, очередь событий, дельта-цикл.
Почему FPGA? Почему ASIC? Экономика разработки и производства разных типов микросхем - Application-Specific Integrated Circuit (ASIC) и Field-Programmable Gate Array (FPGA). Баланс между стоимостью, гибкостью, количеством, начальными тратами и тратами за время жизни проекта.
Основый цифровой логики
Комбинационная логика: базовые логические элементы, базовые комбинационные блоки (мультиплексоры, дешифраторы), временные характеристики (задержка распостранения, задержка реакции)
Последовательностная логика: D-триггеры, временные характеристики (время предустановки, время удержания), временные ограничения, максимальная тактовая частота, синхронизаторы асинхронных входов
Цифровые функциональные узлы: арифметические схемы, базовые последовательностные блоки (счетчики, сдвигающие регистры), память (статическая, динамическая)
Конечные автоматы, диаграммы состояний, использование
Концепция конвейера, применимость для повышения пропускной способности
Языки описания аппаратуры, желательно Verilog (хотя и VHDL OK)
Модули, порты, экземпляры (instance), иерархия модулей, параметризованные модули
Типы данных (reg, wire, logic), значения x, регистовые файлы, выражения
Оператор непрерывного присваивания, always-блоки, блокирующие и неблокирующие единовременные присваивания
Операторы if, case, for; конструкции task и function; полезно но не обязательно - generate
Подмножество для синтеза и симуляции, правила использования присваиваний в синтезируемом RTL-подмножестве
Среда тестирования на Verilog (не SystemVerilog), timescale, спецификация задержек, несинтезируемые циклы while, генерация тактового сигнала и сброса
Использование любого симулятора Verilog-а (Synopsys VCS, Cadence IUS / NCVerilog, Mentor ModelSim / Questa, Icarus Verilog)
Понимание временных диаграмм
Общее представление, как синтезируются различные конструкции синтезируемого подмножеста HDL
Концепция архитектуры компьютера, ассемблер
Команды, операнды, регистры, константы
Адрес, память, базовый регистр, смещение, прямое и обратное размещение байтов (little/big endian)
Арифметические и логические операции
Метки, условные и безусловные переходы
Вызов подпрограммы, стек, передача параметров, возврат значения
Представление соответствия конструкций и деклараций языка программирования Си и ассемблера
Исключения и прерывания
Элементы микроархитектуры, устройство конвейера
Измерение производительности, максимальная тактовая частота, IPC, DMIPS / MHz, CoreMark / MHz
Сравнение однотактного процессора, многотактного процессора и конвейерного процессора, приостановки, сбросы, байпас / форвардинг
Основы кэшей, локальность обращений к памяти, ассоциативные кэши, кэши прямого отбражения, наборно-ассоциативные кэши, алгоритмы выткснения
Протоколы для систем на кристалле и систем на плате
Протоколы систем на кристалле - AMBA APB, AHB-Lite, AXI, OCP
Протоколы систем на плате - SPI, UART, I2C - общие принципы
Общие для разработчика навыки работы с компьютером
Программирование на Си, использование make, системы контроля версий (GitHub) итд
Концепции и навыки, которыми владеть желательно, но их можно ввести и в процессе семинара по MIPSfpga
Работа с Xilinx Vivado и Altera Quartus II - общие вопросы
Создание проекта
Связывание портов с выходами FPGA
Задание ограничений по временным характеристикам
Рассматривание схем до и после синтеза и mapping-а
Чтение отчетов синтезатора, place & route, negative slack, max frequency, utilization
Загрузка в FPGA
Работа с Xilinx Vivado и Altera Quartus II - более специальные вопросы
Генерация макро для PLL. Что это такое, зачем это нужно, как это сделать
Как подсказать синтезатору, что тот или иной модуль - память. Файлы инициализации памяти, директивы ram_style (Xilinx), ram_init_file (Altera), синтезируемого $readmemh
Работа с симулятором Verilog-а Mentor ModelSim Student Edition
Структура среды тестирования / testbench
Создание проекта, симуляция
Анализ временных диаграм, использование waveform viewer
Работа с Codescape - средой разработки программного обеспечения для MIPS на основе GNU (gcc, gdb и т.д.)
Использование BusBlaster и OpenOCD
BusBlaster - проба для загрузки программ с PC в устройство с интерфейсом JTAG (в данном случае MIPS-specific EJTAG) и работе с отладчиком GDB
OpenOCD - программное обеспечение для BusBlaster
Элементы ассемблера MIPS
Можно для скорости введения попрактиковаться полчаса на MIPS MARS Simulator
Обзор процессорного ядра MIPS microAptiv UP, на основе которого сделан MIPSfpga
Структура конвейера
Кэши и управление ими
Протокол внешней шины AHB-Lite
Разного рода связанные темы, которые привязаны к тематике
Улучшенные микроархитектуры, длинные конвейеры, предсказание переходов, суперскалярные конвейеры, внеочередное выполнение команд, векторные расширения, многопоточность - как вообще, так и на примере MIPS
Виртуальная память вообще и конкретно в MIPSfpga, трансляция адресов и ее применение, буфер ассоциативной трансляции и его строение, защита памяти
Создание многоядерных систем с когерентными кэшами, протоколы MESI, directory-based и т.д. - как вообще, так и на примере MIPS
Технологии верификации on-chip протоколов и RTL блоков используя SystemVerilog и coverage-driven constrained-random verification methodology, обзор библиотеки Universal Verification Methodology (UVM)
Технологии верификации процессора и систем, совместная симуляция аппаратного и программного обеспечения
Создание сопроцессоров, специализированных вычислителей на основе UDI/CorExtend и Cop2
Исследование баланса между вычислениями в софтвере и хардвере, создание специализированных средств разработки для гибкого распределения подобныз вычислений