Курс по FPGA и Clash

В данном курсе мы научимся программировать ПЛИС (Программируемые Логические Интегральные Схемы, они же FPGA). Для этого пройдём путь от элементарных битовых операций на SystemVerilog до описания относительно нетривиальной логики на Clash.

В данном курсе нас будет интересовать применение ПЛИС прежде всего для разработки и отладки внутренней логики (архитектуры) процессоров. По этой причине мы практически не будем уделять внимание особенностям работы с периферией (различного рода датчиками, индикаторами, которые могут подключаться или даже уже присутствуют на многих современных платах с ПЛИС).

Цель курса — познакомиться с высокоуровневым средством программирования ПЛИС Clash. Тем не менее, предполагается, что слушатель не знаком с ПЛИС и разработкой для них, и потому курс начнётся с основ. При этом, многие сопутствующие разделы, такие как основы математической логики, архитектура процессора, язык программирования Haskell (его подробное изучение) будут оставлены на самостоятельное изучение.

В качестве введения, для ознакомления с предметом и историей вопроса, предлагается прочитать минимум первые четыре раздела статьи "Разработка цифровой аппаратуры нетрадиционным методом: Yosys, SpinalHDL, VexRiscv".

Рекомендуемые для изучения материалы

Для тех, кто чувствует дискомфорт при словах bash, Linux, Haskell, цифровая аппаратура, архитектура процессора, могут быть полезны следующие материалы.

  1. Сара Л. Харрис, Дэвид Харрис. Цифровая схемотехника и архитектура компьютера: RISC-V / пер. с англ. В. С. Яценкова, А. Ю. Романова; под ред. А. Ю. Романова. – М.: ДМК Пресс, 2021. – 810 с.: ил.

    • В идеале целиком, для наших целей стоит прочитать первые 4-5 глав.

  2. Школа синтеза цифровых схем.

    • Видеоматериалы.

    • Курс, ориентированный, скорее, на разработку классических процессоров (на примере RISC-V).

  3. Денис Москвин. Функциональное программирование на языке Haskell.

    • Курс на Stepik.

    • Базовый курс, направленный на понимание функциональной парадигмы.

    • Слегка устарел: например стандартным способом установки Haskell теперь является GHCup, а класс Monad зависит от Applicative.

  4. Stephen Diehl. What I Wish I Knew When Learning Haskell.

    • Электронная версия.

    • Не книга, а скорее сборник различных библиотек и технологий, используемых в современном Haskell.

  5. Miran Lipovača. Learn You a Haskell for Great Good!

    • Классическая книга по Haskell.

  6. Антон Холомьёв. Учебник по Haskell.

  7. Type Classes.

    • Весьма разносторонний курс вокруг Haskell и функционального программирования в целом. От основ, до различный специфичных расширений.

  8. Gergő Érdi. Retrocomputing with Clash: Haskell for FPGA Hardware Design.

    • Книга по Clash. На текущий момент (2024 год) единственная в своём роде.

    • Страничка, посвящённая книге, с описанием, содержанием, ссылками на репозитории с кодом, который используется в ней.

  9. Richard Blum, Linux Fundamentals.

    • Базовая книга по Linux.