プログラムはブロックと接続線で構成
Start、Set、Input、Print、If/Else、For、While、Do-Whileはブロックです。ブロック間の接続線が制御フローを表します。Runを押すと、実行中のブロックが強調表示されます。数値やテキストを使った式に対応し、&& || !、比較演算、一般的な算術演算も利用できます。
EVIA Paradigma
EVIA Paradigmaは、コンピューターが受け取る内容を見たい人のためのビジュアルプログラミング環境です。図がプログラムそのもので、言語は設定にすぎません。キャンバス上でブロックをつないで実行し、C99からC++20(ClangまたはGCC)、Arduinoスケッチ、AVRまたはPIC32チップ向けのベアメタルC、FPGA向けのSystemVerilog、Verilog、VHDLから出力先を選べます。
EVIA 0.6.7 をダウンロード GitHubでソースを見る
WindowsとLinuxに対応。macOS版は後日再開予定です。無料のオープンソース、MITライセンス。
Start、Set、Input、Print、If/Else、For、While、Do-Whileはブロックです。ブロック間の接続線が制御フローを表します。Runを押すと、実行中のブロックが強調表示されます。数値やテキストを使った式に対応し、&& || !、比較演算、一般的な算術演算も利用できます。
クラスには初期値を持つフィールド、コンストラクター、メソッドがあります。各メソッドはEnterからExitまでの独立したブロック図です。各Exitは呼び出し側ブロックの出力になります。同じオブジェクト名を使うブロックは、同じオブジェクトを共有します。クラスをモジュール(.eviam)として保存し、ほかのプログラムにインポートできます。
図が表すのはプログラムの動作であり、記述言語ではありません。同じキャンバスから8種類の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向けにビルドできます。Runはコンピューター上でUnoをシミュレートし、ピンの変化をすべて出力するので、実機がなくてもプログラムを試せます。 UART、SPI、I2C、MQTT もブロックです。
AVR CではArduinoコアを使わず、ATmega328P、ATmega2560、ATmega32U4向けのプログラムを作成できます。ポート、タイマー、PWM、ADC、UARTを読みやすいCで設定します。avr-gccで約4 KBにビルドでき、Uploadからavrdudeでボードに書き込めます。各例はsimavrで実行し、インタープリターと照合されます。
0.5の新機能:PIC32 CはMicrochip XC32を使い、9種類のPIC32MXチップにも対応しました。UART、SPI、I2CはRunと3種類すべてのボード言語でブロックとして利用できます。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。5つのブロックがプログラムの数値をブローカーへ公開し、コマンドを読み戻します。UART2 に WiFi モジュールをつないだ PIC32MX、自前の WiFi を持つ ESP32、そして自分のパソコン上のブローカーに対する Run で動きます。生成されたクライアントは実際のブローカーで検査していますが、WiFi モジュールやチップは含まれていません。2つの例が付属し、そのうち1つは PIC32 Ethernet Starter Kit II 用です。0.6.7 の新機能:MX695、MX795、スターターキットでは、MQTT はチップ自身の Ethernet ポートから出ることもでき、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で利用できます。スクリーンショット付きの完全なチュートリアルを7言語の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、C と C++ の全8規格 | Clang 23 | 416件中416件 |
| Linux、C と C++ の全8規格 | 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スケッチはESP32を含む全12ボード向けにもビルドされます(70件、警告なし)。PIC32の例はMicrochipデバイスヘッダーに対する構文のみのコンパイルで確認しています(144/144)。FPGAの例とテストはすべてyosysでArtix-7向けに合成し、GateMate設計は配置、配線を行いビットストリームにします。Vivado、openXC7、実機はCIの対象外です。アプリ、モジュール、プロジェクト、Git、実際のウィンドウでのズームと移動も確認します。GitHub Actionsを参照してください。 MQTT クライアントはビルドマシンでコンパイルし、実際のブローカーに対して実行して検査します。
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