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 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に加算する。

1つの図から14種類の言語へ

図が表すのはプログラムの動作であり、記述言語ではありません。同じキャンバスから8種類の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、その下にフローと値。

8種類のC/C++標準と2種類の記述方法

ツールバーから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.add(i)ブロックの行が強調表示された生成C++コード。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向けにビルドできます。Runはコンピューター上でUnoをシミュレートし、ピンの変化をすべて出力するので、実機がなくてもプログラムを試せます。 UART、SPI、I2C、MQTT もブロックです。

パレットにBoardブロックがあるblinkの例。出力にはシミュレートした13番ピンが500ミリ秒ごとに切り替わる様子が表示される。

レジスターまで扱うベアメタル

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 でのビルドはまだ行っていません。画面そのものも英語・ロシア語・アルメニア語から設定で選べます。

Arduino Uno向けにavr-gcc 14でビルドしたベアメタルAVR Cのblinkプログラム:コードサイズ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に設定済みのアカウントを使ってプロジェクトを公開します。アプリがパスワードを要求したり保存したりすることはありません。

リポジトリー名sbrutyan01/CounterDemoを表示したConnect to GitHubダイアログ。

8ステップで最初のプログラムを作成

スクリーンショット付きの完全なチュートリアルを7言語の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)を確認します。

4ステップで最初の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、C と C++ の全8規格Clang 23416件中416件
Linux、C と C++ の全8規格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スケッチは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