程序由程序块和连线组成
Start、Set、Input、Print、If/Else、For、While 和 Do-While 都是程序块;它们之间的连线表示控制流。按下 Run,正在执行的程序块会高亮显示。表达式支持数字和文本、&& || !、比较运算及常见算术运算。
EVIA Paradigma
EVIA Paradigma 是一款可视化编程工具,适合想了解机器实际接收内容的人。图表就是程序,语言只是一个设置。在画布上连接程序块并运行,然后选择生成目标:使用 Clang 或 GCC 的 C99 至 C++20、Arduino 草图、适用于 AVR 或 PIC32 芯片的裸机 C,或用于 FPGA 的 SystemVerilog、Verilog 或 VHDL。
支持 Windows 和 Linux;macOS 版本稍后恢复。免费开源,采用 MIT 许可证。
Start、Set、Input、Print、If/Else、For、While 和 Do-While 都是程序块;它们之间的连线表示控制流。按下 Run,正在执行的程序块会高亮显示。表达式支持数字和文本、&& || !、比较运算及常见算术运算。
类包含带初始值的字段、构造函数和方法;每个方法都是从 Enter 到 Exit 的独立程序框图。每个 Exit 都会成为调用程序块的输出。使用相同对象名称的程序块共享同一个对象。将类保存为模块(.eviam)并导入其他程序。
图表描述程序的功能,而不是它使用的语言。同一画布可生成八种 C 和 C++ 标准、Arduino 草图、裸机 AVR 或 PIC32 C,或用于 FPGA 的 SystemVerilog、Verilog-2001 和 VHDL。Run 会直接执行图表本身,因此你可以将输出与任何生成版本进行比较。如果目标不支持某个程序块,错误会指出该程序块,而不会悄悄改变程序含义。
在工具栏中选择 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 严格编译。
右键点击程序块并选择 View source code:生成的文件会打开,并准确高亮该程序块对应的代码行。也可查看整个方法或类,并支持所选的任何语言。Compile & Run 会直接使用 Clang 或 GCC 编译;在 Windows 上,应用会自动安装 llvm-mingw 或 WinLibs GCC,无需 Visual Studio。
Pin Mode、Digital Write and Read、Analog Read and 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,并在输出中显示每次引脚变化,让你在接上开发板之前先测试程序。
AVR C 可为 ATmega328P、ATmega2560 或 ATmega32U4 编写不依赖 Arduino 核心库的程序:使用易读的 C 配置端口、定时器、PWM、ADC 和 UART。avr-gcc 可将程序编译到约 4 KB,Upload 会通过 avrdude 将程序写入开发板。每个示例都会在 simavr 模拟器中运行,并与解释器进行比对。
0.5 新增:PIC32 C 使用 Microchip XC32 为九款 PIC32MX 芯片实现相同功能;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。五个积木把程序的数字发布给代理服务器并读回命令:UART2 接 WiFi 模块的 PIC32MX、自带 WiFi 的 ESP32,以及对着你电脑上代理服务器运行的 Run。生成的客户端对着真实代理服务器检查过,但没有 WiFi 模块或芯片参与。随附两个示例,其中一个用于 PIC32 Ethernet Starter Kit II。0.6.7 新增:在 MX695、MX795 和入门套件上,MQTT 还可以从芯片自带的以太网口出去,生成的文件成为 MPLAB X Harmony 项目的应用程序;这是实验性的,尚未用真正的 Harmony 构建过。界面本身也可在设置中选择英语、俄语或亚美尼亚语。
在图表上滚动鼠标滚轮,可朝指针方向将缩放比例调整到 25% 至 300%。程序块、文本和连线始终清晰,任何比例下都可以继续编辑。Ctrl+0 恢复到 100%,Ctrl+9 显示完整图表。0.6.1 新增:按住鼠标中键并拖动即可平移画布,可从空白处或程序块上开始拖动。
File, New Project 会创建一个包含程序、模块文件夹、README 和 Git 仓库的文件夹。Git 菜单中可执行 Commit、push 和 pull;Connect to GitHub 会使用 Git 已有的登录信息发布项目。应用不会索要或保存密码。
evia --run program.evia 和 evia --gen program.evia --lang c11 -o program.c 可用于脚本和 Makefile。完整教程包含所有截图,提供七种语言的 PDF:English、Русский、Հայերեն、Deutsch、简体中文、繁體中文、日本語。也可在应用的 Help、Tutorial 中查看,或阅读 README。

File、New Project。保持选中 Create a Git repository。

将 Set、For 和 Print 拖到画布上,连接它们并按 Run。

Edit、New Class:为 Counter 添加 total 和 calls 字段。

将 Counter.add(x) 拖入循环,并将对象命名为 c。

右键点击程序块并选择 View source code。

切换到 C11 或任意 C++ 标准,代码会重新生成。

选择 Git、Commit,然后选择 Connect to GitHub。

模块、示例和指南(F1)。
同一个 blink 图表可转换为适用于 Artix-7 和 GateMate 开发板的硬件。完整教程的第 10 步见上方 PDF,指南中也有 FPGA 主题(F1)。
语言:SystemVerilog、Verilog-2001 或 VHDL。开发板:Nexys A7、Arty A7、Basys 3 或 GateMate。
File、Open Example、FPGA Boards、Blink。引脚名称示例:LED0、SW3、BTNC 和 JA1。
按 F7。引脚约束位于第一条注释中,命令行会将其写入单独的文件。
在 Settings 中选择 Vivado 或开源工具。Upload 会对开发板进行编程。
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 运行或加载到真实开发板。
每个安装包都自带 Java 运行环境,无需安装其他软件。编译生成的代码需要 Clang 或 GCC(Windows 上应用会自动配置其中一个)。
| 系统 | 文件 | 说明 |
|---|---|---|
| Windows 10 / 11, x64 | EVIA-Paradigma-0.6.7-windows-x64.exe | 尚未进行代码签名:出现 SmartScreen 警告时,选择 More info,再选择 Run anyway。 |
| 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 23 | 416 项中的 416 项 |
| Linux,全部 8 种 C 和 C++ 标准 | GCC 13 | 416 项中的 416 项 |
| Windows, C99, C17, C++98, C++14, C++20 | llvm-mingw Clang 23,静态编译 | 260 项中的 260 项 |
| Windows, C99, C17, C++98, C++14, C++20 | WinLibs GCC 16,静态编译 | 260 项中的 260 项 |
| 开发板示例:在 simavr 中运行的裸机 AVR C(ATmega328P、2560、32U4) | avr-gcc 14 | 30 项中的 30 项 |
| 在 simavr 中运行的 Arduino Uno 和 Mega 2560 草图 | arduino-cli, arduino:avr | 15 项中的 15 项 |
| 仿真中的 FPGA 设计(SystemVerilog、Verilog-2001、VHDL) | Icarus Verilog、GHDL | 27 项中的 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