- Бакалаврский диплом
тема: «Реализация модуля моделирования аппаратуры для SCADA-систем»
Центр научного программирования МФТИ
- https://sciprog.center/projects/controls
- docs: device spec
- "Troisk nu-mass" experiment: https://www.inr.ru/~numass/
- docs: device spec
- https://git.sciprog.center/kscience/dataforge-core
- из telegram @SciProgCentre:
- про создание внутреннего формата представления ~VCD: https://t.me/SciProgCentre/24449
- про задачу моделирования аппаартуры: https://t.me/SciProgCentre/26576
- про Chisel: https://t.me/SciProgCentre/26604
- пока ничего на youtrack issues
Сравнение: COMPARISON_TABLE.md
AnyLogic
LabView
MathWorks: Mathlab & Simulink
- https://www.mathworks.com/company.html
- Mathlab
- MATLAB for FPGA, ASIC, and SoC Development: https://www.mathworks.com/solutions/fpga-asic-soc-development.html
- MATLAB for FPGA Prototyping: https://www.mathworks.com/solutions/fpga-asic-soc-development/prototyping.html
- MATLAB for FPGA, ASIC, and SoC Production Design and Verification: https://www.mathworks.com/solutions/fpga-asic-soc-development/production-design-verification.html
- Getting Started Using MATLAB and Simulink for FPGA, ASIC, and SoC Development: https://www.mathworks.com/solutions/fpga-asic-soc-development/resources.html
- MATLAB for FPGA, ASIC, and SoC Development: https://www.mathworks.com/solutions/fpga-asic-soc-development.html
- Simulink
Amesim
ЦИТМ Экспонента
- Engee: https://start.engee.com/
- хвалебные оды на хабре: https://habr.com/ru/companies/etmc_exponenta/articles/854554/
CIRCT — Circuit IR Compilers and Tools
- https://circt.llvm.org/
- Description: https://circt.llvm.org/docs/Charter/
- https://github.com/llvm/circt
- Releases firtool: https://github.com/llvm/circt/releases — collection of llvm, mlir, circt tools
- https://godbolt.org/noscript/circt
- Using CIRCT for FPGA Physical Design: https://capra.cs.cornell.edu/latte22/paper/10.pdf
Основан на MLIR и предлагает свои диалекты для описания различной логики аппаратуты: https://circt.llvm.org/docs/Dialects/
- hw: https://circt.llvm.org/docs/Dialects/HW/
- Dialect Rationale: https://circt.llvm.org/docs/Dialects/HW/RationaleHW/
- low documentation, so should see sources: https://github.com/llvm/circt/blob/main/lib/Dialect/HW/HWTypes.cpp
- arc: https://circt.llvm.org/docs/Dialects/Arc/
- arc.sim — используется при симулировании работы прямо в MLIR (
@entry
для запуска в arcilator ¶)
- arc.sim — используется при симулировании работы прямо в MLIR (
- sv: https://circt.llvm.org/docs/Dialects/SV/
- Dialect Rationale: https://circt.llvm.org/docs/Dialects/SV/RationaleSV/
- ...
Arcilator — симулятор моделей на диалектах CIRCT (MLIR) (компилятор в llvm и/или исполнение этого кода)
video 2023 LLVM Dev Mtg - Arcilator: Fast and cycle-accurate hardware simulation in CIRCT
video 2024 EuroLLVM - Arcilator for ages five and up: flexible self-contained hardware simulation made..
slides: Circuit IR for Compilers and Tools, Creating hardware for ML
issues
Тесты
- https://github.com/circt/arc-tests — тесты для различных проектов, например, rocket rv-chip исполняющий код из elf-файла
CHISEL —
Зависимость на
-
Firtool для генерации Verilog
-
Verilator для симуляции Verilog
-
Обзор Chisel для генерации сложных цифровых схем и сравнение с System Verilog:
FIRRTL — Промежуточное представление для Chisel, теперь диалект CIRCT
- https://github.com/chipsalliance/firrtl
- https://circt.llvm.org/docs/Dialects/FIRRTL/
Project Panama — https://openjdk.org/projects/panama/
- FFM API — Foreign Function & Memory API
- Настя Лисицкая — FFM API — ничего общего с радио — https://youtu.be/HiF7EjAtdZM
- Linker API: https://github.com/openjdk/panama-foreign/blob/foreign-memaccess%2Babi/doc/panama_ffi.md
-
Performance-wise, the reader might ask how efficient calling a foreign function using a native method handle is; the answer is very. The JVM comes with some special support for native method handles, so that, if a give method handle is invoked many times (e.g, inside a hot loop), the JIT compiler might decide to generate a snippet of assembly code required to call the native function, and execute that directly. In most cases, invoking native function this way is as efficient as doing so through JNI.
-
- jextract —
JNI
Different samples of native interop
Knee -- seamlessly interop
- https://opensource.deepmedia.io/knee
- Только андроид?
ПИШ ИТМО: https://pish.itmo.ru/
ВИТШ ИТМО: https://itmo.ru/ru/viewfaculty/115/
Сообщество FPGA Systems: https://t.me/fpgasystems
Venus rv32i — Kotlin RISC-V emulator:
- https://github.com/kvakil/venus БЭВМ на Java
- https://github.com/tune-it/bcomp
MiL/SiL/PiL/HiL
- https://youtu.be/EZthOn4_0rw
- https://www.mathworks.com/matlabcentral/answers/440277-what-are-mil-sil-pil-and-hil-and-how-do-they-integrate-with-the-model-based-design-approach#answer_356873
Quokka:
- https://www.youtube.com/live/_MrGRMY-6jE
- https://github.com/EvgenyMuryshkin/qusoc
Verik:
FPGA Twitch 03 - Введение в высокоуровневый синтез - High Level Synthesis (часть 1 из 2):
ИРИС – инструментарий разработки интегральных схем в среде С++:
- Kotlin
- IR
- *iL = * in the Loop
- HardWare
- CIRCT = Circuit IR Compilers & Tools
- Controls.kt ~ ctl, ctrl
Хочется иметь возможность симулировать систему прямо в Kotlin, вместе с остальной системой, но главная задача это сделать транслятор в промежуточное представление. Отсяда вопрос: на каком уровне должно быть это *представление? Ведь у нас может быть "низкоуровневое" типа CIRCT или какое-то повыше в виде схемы данных в Kotlin через композицию Data-классов, к примеру.
При условии того, что компилятор свой разрабатывать выглядит очень расточительным, можно ограничиться функциональным DSL, который в результате запуска будет давать IR или напрямую симулировать аппаратуру, т.к. обычно это какой-то Top-модуль, в который интегрируются все другие функциональные компоненты. Что-то вроде Gradle получится. Остается еще учесть специфику Controls.kt и его архитектурные подходы через делегирование пропертей и, видимо, непрерывное время нетипичное для моделей аппаратуры.
Наверное было бы хорошо иметь возможность переключать режимы работы модуля: трансляция в IR и симуляция поведения.
Еще как альтернативный вариант это всегда получать промежуточное предтавление и потом через сторонник инструменты взаимодействовать с ними, условно, скомпилировать в CIRCT и запустить модель через arcilator, к которому подключается модель из Kotlin через Native.
- Либо пойти дальше и написать модуль выполняющий симуляцию по данному IR, что пока выглядит нецелесообразно из-за сложности такого предприятия и непригодности JVM для таких симуляций; по сути придется сделать декомпилятор из IR в Kotlin (?).
Информация для заполнения блока задания:
Реализовать программный модуль для моделирования аппаратуры совместимый с фреймворком Controls.kt.
- Репозиторий исходных кодов и документация проекта Controls.kt.
- Документация к проектам CIRCT, Chisel, Verik.
Выпускная квалификационная работа предполагает реализацию программного модуля предоставляющего возможности по моделированию аппаратуры совместимого с фреймворком для создания и моделирования SCADA-систем Controls.kt.
Предоставление возможности моделирования и тестирования системы на уровне цифровых схем.
- Изучение и анализ архитектуры фреймворка Controls.kt.
- Исследование имеющихся решений для моделирования аппаратуры.
- Проектирование архитектуры программного модуля.
- Разработка программного модуля.
- Тестирование разработанного модуля и проверка совместимости с системой Controls.kt.
- Документирование разработанных компонентов.
- Архитектур SCADA-систем и систем моделирования.
- Языки описания аппаратуры.
- Проект CIRCT.
- ...
Информация для заполнения блока задания:
- форма представления основных или дополнительных результаты ВКР:
- форма представления Приложений (например: программный код, чертежи, презентация, и пр.):
Отчет. Пояснительная записка, программный код, презентация.
14 октября 2024 год.
Рекомендации: Срок сдачи готовой работы не позднее даты начала ГИА (по графику учебного процесса). Срок загрузки итоговой версии ВКР для проверки в системе «Антиплагиат» - не позднее чем за 10 дней до даты защиты ВКР (см.Положении о ВКР)
25 мая 2025 год.
Можете конкретизировать график представления материалов ВКР или указать любую другую информацию по этапам работы на ВКР.
google presentation (comments)
Тема ВКР: Реализация модуля моделирования аппаратуры для SCADA-систем
Контекст:
Controls.kt — фреймворк для создания легковесных SCADA-систем на языке программирования Kotlin, основан на DataForge-control.
Инструмент развивается Центром научного программирования МФТИ.
- "Declarative analysis in "Troitsk nu-mass" experiment"
- "A Novel Solution for Controlling Hardware Components of Accelerators and Beamlines"
- "Controls-kt, a Next Generation Control System"
Актуальность темы:
- Активно развивающийся фреймворк Фокус фреймворка сместился в сторону встраивания аналитики и моделирования с целью тестирования подобно подходам MiL/SiL/PiL/HiL.
-
Современные технологии Фреймворк облегчает процесс создания SCADA-систем.
- Современные инструменты расширяют сферу применимости технологий.
- Единый язык для описания всех компонентов системы.
-
Circuit IR Compilers and Tools
- Инфраструктура для создания промежуточного представления цифровых схем на базе MLIR (проект LLVM). → Симуляция работы и синтез специализированных приборов.
-
Controls.kt (former DataForge-control):
Если интересен пример - сейчас я работаю над моделью анализатора крови [URIT-5360/5380/5381 5-Part-Diff Auto Hematology Analyzer]. Это достаточно сложное устройство из многих составных частей, со своими особенностями.
Цель и задачи ВКР:
Цель:
Предоставление возможности моделирования и тестирования системы на уровне цифровых схем.
Задачи:
- Изучение и анализ архитектуры фреймворка Controls.kt.
- Исследование имеющихся решений для моделирования аппаратуры.
- Проектирование архитектуры программного модуля.
- Разработка программного модуля.
- Тестирование разработанного модуля и проверка совместимости с системой Controls.kt.
- Документирование разработанных компонентов.
План работы:
- Анализ существующих решений для моделирования аппаратуры.
- изучение архитектуры фреймворка.
- Анализ требований к программному модулю.
- Проектирование
- Разработка архитектуры программного модуля.
- Определение интерфейсов взаимодействия с Controls.kt.
- Документирование архитектурных решений.
- Разработка программного модуля.
- Тестирование этого модуля.
- Разработка функциональных тестов.
- Интеграционное тестирование с Controls.kt
- Анализ и устранение выявленных дефектов.
- Документирование разработанных компонентов.
- А какие еще есть технологии для разработки SCADA-систем? Зачем Controls.kt?