EVIA Paradigma

Нарисуйте программу.
Выберите её язык.

EVIA Paradigma — визуальное программирование для тех, кто хочет видеть, что получает машина. Схема и есть программа, а язык — это настройка. Соединяйте блоки на холсте, запускайте их, а затем выбирайте, во что они превратятся: от C99 до C++20 со сборкой Clang или GCC, скетч Arduino, bare-metal C для микросхемы AVR или PIC32, либо SystemVerilog, Verilog или VHDL для FPGA.

Скачать 0.6.7 Исходный код на GitHub

Windows и Linux; сборки для macOS вернутся позже. Бесплатно, открытый исходный код, лицензия MIT.

Блок-схема: Start, Set n = 3, цикл For от 1 до n, который печатает шаг и вызывает c.add(i) у объекта Counter, затем c.show() и End.

      
Схема слева в том виде, в каком её пишет генератор. Все 32 варианта выводят то же, что и встроенный интерпретатор.

Что умеет программа

Программа — это блоки и связи

Start, Set, Input, Print, If/Else, For, While и Do-While — это блоки, а связи между ними задают порядок выполнения. Нажмите Run, и выполняемый блок подсвечивается. Выражения работают с числами и текстом: && || !, сравнения и обычная арифметика.

Цикл For, собранный из блоков, и его вывод: step 1, step 2, step 3.

Классы, объекты и модули

У класса есть поля с начальными значениями, конструктор и методы, и каждый метод — отдельная блок-схема от Enter до Exit. Каждый Exit становится выходом вызывающего блока. Блоки с одинаковым именем объекта работают с одним объектом. Классы можно сохранить как модули (.eviam) и подключать в другие программы.

Окно класса Counter: вкладки полей, конструктора и методов; метод add(x) прибавляет x к this.total.

Одна схема — четырнадцать языков

Схема говорит, что программа делает, а не на чём она написана. Один и тот же холст превращается в восемь стандартов C и C++, скетч Arduino, bare-metal C для AVR или PIC32, либо в SystemVerilog, Verilog-2001 и VHDL для FPGA, а Run выполняет саму схему, так что её вывод можно сравнить с любым из них. Если цель не может сохранить блок, ошибка называет этот блок, вместо того чтобы молча менять смысл программы.

Открытое меню Code Language and Mode: от C99 до C++20, Arduino, AVR C, PIC32 C, SystemVerilog, Verilog-2001 и VHDL, а под ними — стиль кода и значения.

Восемь стандартов C и C++ и два стиля кода

Выберите на панели инструментов C99, C11, C17, C++98, C++11, C++14, C++17 или C++20. Structured пишет if/else, циклы и switch; Goto превращает каждый блок в метку, а каждую связь — в переход. Значения Safe хранят текст и сохраняют все проверки интерпретатора; значения Fast — это простые double без проверок во время выполнения. Среда выполнения C содержит только то, что использует программа, поэтому код компилируется без предупреждений с -Wall -Wextra -Wpedantic -Werror.

Окно кода: программа на C11, скомпилированная Clang и запущенная.

Код любого блока

Щёлкните блок правой кнопкой и выберите View source code: откроется сгенерированный файл, в котором подсвечены именно те строки, в которые превратился блок. Так же это работает для целого метода или класса, на любом выбранном языке. Compile & Run тут же собирает код с помощью Clang или GCC; в Windows программа сама устанавливает llvm-mingw или WinLibs GCC, Visual Studio не нужна.

Сгенерированный C++ с подсвеченными строками блока c.add(i), скомпилированный Clang и запущенный.

Платы Arduino и ESP32

Pin Mode, Digital Write и Read, Analog Read и Write, Delay и Millis — тоже блоки. Один скетч Arduino собирается для Uno, Nano, Mega 2560, Leonardo, Micro и Pro Mini, а также для ESP32, ESP32-S2, -S3, -C3, -C6 и -H2. UART, SPI, I2C и MQTT — тоже блоки. Run имитирует Uno прямо на компьютере и показывает каждое изменение пинов, так что программу можно опробовать ещё до того, как плата окажется на столе.

Пример blink с блоками Board в палитре; в выводе видно, как имитируемый пин 13 переключается каждые 500 мс.

Без Arduino, прямо на регистрах

AVR C пишет программу для ATmega328P, ATmega2560 или ATmega32U4 без ядра Arduino: порты, таймеры, ШИМ, АЦП и UART настраиваются на понятном C. avr-gcc собирает её примерно в 4 КБ, а Upload загружает на плату через avrdude. Каждый пример запускается в симуляторе simavr и сверяется с интерпретатором.

Новое в 0.5: PIC32 C делает то же для девяти микросхем PIC32MX с Microchip XC32, а UART, SPI и I2C стали блоками, в Run и во всех трёх языках для плат. Код PIC32 проверен по заголовочным файлам Microchip, но ещё не собирался XC32 и не запускался на микросхеме.

Новое в 0.6: поддержка FPGA. SystemVerilog, Verilog-2001 и VHDL превращают ту же схему в аппаратуру для Artix-7 (Nexys A7, Arty A7, Basys 3) и плат Cologne Chip GateMate. Результат моделировался в сравнении с Run и синтезировался открытыми средствами, но не проходил через Vivado и не загружался в плату.

Новое в 0.6.5: MQTT. Пять блоков публикуют числа программы брокеру и читают команды обратно: на PIC32MX с модулем WiFi на UART2, на ESP32 с собственным WiFi и в Run — брокеру на вашем компьютере. Сгенерированный клиент проверяется на настоящем брокере; ни модуля WiFi, ни микросхемы в этой проверке не было. К нему идут два примера, один — для PIC32 Ethernet Starter Kit II. Новое в 0.6.7: MQTT может уходить и через собственный порт Ethernet чипов MX695, MX795 и стартового набора — как приложение для MPLAB X Harmony; это экспериментально и ещё не собиралось с настоящей Harmony. Сам интерфейс тоже теперь на английском, русском или армянском — выбирается в Настройках.

Программа blink на AVR C без Arduino, собранная avr-gcc 14 для Arduino Uno: 4032 байта кода.

Масштаб и перемещение холста мышью

Прокрутите колесо над схемой, чтобы менять масштаб от 25% до 300% в сторону указателя. Блоки, текст и связи остаются чёткими, а редактировать можно при любом масштабе. Ctrl+0 возвращает 100%, Ctrl+9 вписывает всю схему. Новое в 0.6.1: удерживайте среднюю кнопку мыши и перетаскивайте, чтобы двигать холст — с пустого места или с блока.

Схема в масштабе 161%.

Проекты, Git и GitHub

File, New Project создаёт папку с программой, папкой модулей, README и Git-репозиторием. Commit, push и pull — в меню Git; Connect to GitHub публикует проект под той учётной записью, которую уже использует ваш git. Программа никогда не запрашивает и не хранит пароль.

Окно Connect to GitHub с именем репозитория sbrutyan01/CounterDemo.

Первая программа за восемь шагов

Полный пошаговый учебник со всеми снимками экрана доступен в PDF на семи языках: English, Русский, Հայերեն, Deutsch, 简体中文, 繁體中文, 日本語. Он доступен в программе в меню Help, Tutorial и в README.

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

    File, New Project. Оставьте отмеченным Create a Git repository.

  2. Соберите цикл

    Перетащите Set, For и Print на холст, соедините их и нажмите Run.

  3. Создайте класс

    Edit, New Class: задайте классу Counter поля total и calls.

  4. Используйте класс

    Перетащите Counter.add(x) в цикл и назовите объект c.

  5. Посмотрите код

    Правый щелчок по блоку, View source code.

  6. Выберите язык

    Переключитесь на C11 или любой стандарт C++, и код сгенерируется заново.

  7. Коммит и публикация

    Git, Commit, затем Connect to GitHub.

  8. Что дальше

    Модули, примеры и руководство (F1).

Ваша первая программа для FPGA в четыре шага

Та же схема мигания становится аппаратурой для плат Artix-7 и GateMate. Полное руководство, шаг 10, в PDF выше, а в справке есть раздел про FPGA (F1).

  1. Выберите язык и плату

    Язык: SystemVerilog, Verilog-2001 или VHDL. Плата: Nexys A7, Arty A7, Basys 3 или плата GateMate.

  2. Откройте пример Blink

    Файл, Открыть пример, FPGA Boards, Blink. Выводы задаются именами: LED0, SW3, BTNC, JA1.

  3. Создайте код

    Нажмите F7. Ограничения выводов лежат в первом комментарии, а командная строка записывает их в отдельный файл.

  4. Сборка и загрузка

    Vivado или открытые средства, выбор в Настройках. Загрузка прошивает плату.

java -jar evia-paradigma.jar --gen examples/fpga/blink.evia --lang sv --board nexys-a7-100t -o blink.sv
# writes blink.sv and blink.xdc
java -jar evia-paradigma.jar --gen examples/fpga/blink.evia --lang vhdl --board olimex-gatemate -o blink.vhd
# writes blink.vhd and blink.ccf

Проверено моделированием в сравнении с интерпретатором и синтезом открытыми средствами. Пока не проходило через Vivado и не запускалось на реальной плате.

Скачать EVIA Paradigma 0.6.7

Каждый установщик содержит собственную среду Java, поэтому больше ничего устанавливать не нужно. Для компиляции сгенерированного кода нужен Clang или GCC (в Windows программа устанавливает любой из них сама).

СистемаФайлПримечания
Windows 10 / 11, x64 EVIA-Paradigma-0.6.7-windows-x64.exe Пока без цифровой подписи: в предупреждении SmartScreen выберите «Подробнее», затем «Выполнить в любом случае».
Ubuntu 22.04+ / Debian 12+ evia-paradigma_0.6.7_amd64.deb sudo apt install ./evia-paradigma_0.6.7_amd64.deb
Любая система с Java 25 evia-paradigma-0.6.7.jar java -jar evia-paradigma-0.6.7.jar

Все выпуски и примечания к ним

Проверено собственным интерпретатором

При каждом изменении CI генерирует все примеры и тестовые программы во всех 32 сочетаниях языка, потока управления и значений, компилирует их с предупреждениями как ошибками, запускает и сравнивает stdout, stderr и код выхода с интерпретатором.

ГдеКомпиляторСовпадает с интерпретатором
Linux, все 8 стандартов C и C++Clang 23416 из 416
Linux, все 8 стандартов C и C++GCC 13416 из 416
Windows, C99, C17, C++98, C++14, C++20llvm-mingw Clang 23, статически260 из 260
Windows, C99, C17, C++98, C++14, C++20WinLibs GCC 16, статически260 из 260
Примеры для плат, AVR C без Arduino в simavr (ATmega328P, 2560, 32U4)avr-gcc 1430 из 30
Скетчи Arduino Uno и Mega 2560 в simavrarduino-cli, arduino:avr15 из 15
Проекты для FPGA в моделировании (SystemVerilog, Verilog-2001, VHDL)Icarus Verilog, GHDL27 из 27

Скетчи Arduino также собираются для всех 12 плат, включая ESP32 (70 сборок, без предупреждений). Примеры PIC32 компилируются (только синтаксис) по заголовкам Microchip (144 из 144). Каждый пример и тест для FPGA синтезируется yosys для Artix-7, а проекты GateMate размещаются, трассируются и упаковываются в битстримы; Vivado, openXC7 и реальные платы в CI не участвуют. Клиент MQTT собирается на машине сборки и проверяется на настоящем брокере. Плюс проверки приложения, модулей, проектов, Git, масштабирования и перемещения холста в настоящем окне. Подробнее — в GitHub Actions.

Документация

java -jar evia-paradigma.jar --run program.evia
java -jar evia-paradigma.jar --gen program.evia --lang c11 -o program.c
clang -std=c11 -O2 -o program program.c -lm