EVIA Paradigma

繪製程式。
選擇它的語言。

EVIA Paradigma 是一款視覺化程式設計工具,適合想了解機器實際接收內容的人。圖表就是程式,語言只是一項設定。在畫布上連接程式方塊並執行,接著選擇產生目標:使用 Clang 或 GCC 的 C99 至 C++20、Arduino 草圖、適用於 AVR 或 PIC32 晶片的裸機 C,或用於 FPGA 的 SystemVerilog、Verilog 或 VHDL。

下載 EVIA 0.6.7 在 GitHub 上檢視原始碼

支援 Windows 和 Linux;macOS 版本稍後恢復。免費開放原始碼,採用 MIT 授權。

程式方塊圖:Start、Set n = 3、一個從 1 到 n 的 For 迴圈(列印步驟並對 Counter 物件呼叫 c.add(i)),接著是 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 草圖、裸機 AVR 或 PIC32 C,或用於 FPGA 的 SystemVerilog、Verilog-2001 和 VHDL。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 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,並在輸出中顯示每次接腳變化,讓你在接上開發板前先測試程式。

範例 blink 的方塊調色盤中包含 Board 方塊;輸出顯示模擬的 13 號接腳每 500 毫秒切換一次。

深入暫存器的裸機程式設計

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 建置過。介面本身也可在設定中選擇英語、俄語或亞美尼亞語。

blink 程式以裸機 AVR C 撰寫,使用 avr-gcc 14 為 Arduino Uno 編譯:程式碼大小 4032 位元組。

使用滑鼠縮放和平移畫布

在圖表上滾動滑鼠滾輪,可朝指標方向將縮放比例調整到 25% 至 300%。方塊、文字和連線始終清晰,任何比例下都可以繼續編輯。Ctrl+0 回到 100%,Ctrl+9 顯示完整圖表。0.6.1 新增:按住滑鼠中鍵並拖曳即可平移畫布,可從空白處或方塊上開始拖曳。

圖表已放大至 161%。

專案、Git 和 GitHub

File, New Project 會建立一個包含程式、模組資料夾、README 和 Git 儲存庫的資料夾。Git 選單中可執行 Commit、push 和 pull;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 程式

同一個 blink 圖表可轉換為適用於 Artix-7 和 GateMate 開發板的硬體。完整教學的第 10 步見上方 PDF,指南中也有 FPGA 主題(F1)。

  1. 選擇語言和開發板

    語言:SystemVerilog、Verilog-2001 或 VHDL。開發板:Nexys A7、Arty A7、Basys 3 或 GateMate。

  2. 開啟 Blink 範例

    File、Open Example、FPGA Boards、Blink。接腳名稱範例:LED0、SW3、BTNC 和 JA1。

  3. 產生程式碼

    按 F7。接腳限制位於第一則註解中,命令列會將其寫入獨立檔案。

  4. 建置並上傳

    在 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 執行或載入實體開發板。

下載 EVIA Paradigma 0.6.7

每個安裝程式都附有 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 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 項
開發板範例:在 simavr 中執行的裸機 AVR C(ATmega328P、2560、32U4)avr-gcc 1430 項中的 30 項
在 simavr 中執行的 Arduino Uno 和 Mega 2560 草圖arduino-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