程式由方塊和連線組成
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