English version is here
jelly-fpga-serverは、Zynq/ZynqMP をターゲットとしたgRPCベースのサーバーアプリケーションです。主にZynq UltraScale+デバイス(Kria KV260など)での使用を想定しています。
root 権限が必要な PL(Programmable Logic) 部などの制御を gRPCサーバーとしてサービス起動しておくことで、FPGA開発を効率化します。
ボード内だけでなく、ネットワーク経由でもアクセス可能ですので、Vivado などの動作する高性能なPCからクロスコンパイルで開発する場合もシームレスな開発が可能となります。
なお、研究開発用途を想定しており、認証などの機能は組み込んでいないため、ローカルネットワークでの使用を推奨します。
現状、以下の環境で動作確認を行っています。
主に jelly-fpga-loader を使用したFPGAビットストリームダウンロードや、各種言語バインディングからのFPGA操作を想定しています。
- Rust : jelly-fpga-client-rs
- Python : jelly-fpga-client-py
- Elixir : jelly-fpga-client-ex
サーバーをインストールするFPGAボード側の Linux にて、以下の手順でインストールを行います。
dtc (Device Tree Compiler) と bootgen を利用しますので、以下のコマンドでインストールしてください。
sudo apt update
sudo apt install libssl-dev dtcgit clone https://github.com/Xilinx/bootgen
cd bootgen/
make
sudo cp bootgen /usr/local/bin/以下のコマンドを実行すると、github のリリースページから最新のバイナリをダウンロードしてインストールします。
curl -LsSf https://raw.githubusercontent.com/ryuz/jelly-fpga-server/master/binst.sh | sudo bashRust のインストールが必要です。以下のコマンドでインストールしてください。
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/envProtocol Buffers コンパイラ (protoc) のインストールも必要です。以下のコマンドでインストールしてください。
sudo apt update
sudo apt install protobuf-compiler次に、リポジトリをクローンしてインストールスクリプトを実行します。
git clone https://github.com/ryuz/jelly-fpga-server.git
cd jelly-fpga-server
sudo ./install.sh以下のコマンドでアンインストールを行います。
git clone https://github.com/ryuz/jelly-fpga-server.git
cd jelly-fpga-server
sudo ./uninstall.shもしくは手動で以下のようにアンインストールしてください。
sudo systemctl stop jelly-fpga-server
sudo systemctl disable jelly-fpga-server
sudo rm /usr/local/bin/jelly-fpga-server
sudo rm /etc/systemd/system/jelly-fpga-server.service
sudo rm /etc/default/jelly-fpga-serverサービスとしての起動:
sudo systemctl start jelly-fpga-serverサービスの状態確認:
sudo systemctl status jelly-fpga-serverサービスの停止:
sudo systemctl stop jelly-fpga-server/etc/default/jelly-fpga-server に環境変数を設定することで、サービス起動時のオプションを指定できます。
オプション:
-v, --verbose <VERBOSE> 詳細レベル(0-2)[default: 0]
--external 外部接続を許可
-p, --port <PORT> リスニングポート [default: 8051]
--allow-sudo sudo権限での実行を許可
-h, --help ヘルプメッセージを表示
-V, --version バージョン情報を表示デフォルトで --external を有効化しており、外部からの接続を許可しています。必要に応じて変更してください。
- FPGAにビットストリームを読み込み
- デバイスツリーオーバーレイの適用
- xmutil や dfx-mgr-client で管理するアクセラレータの登録・削除
- メモリマップドI/Oアクセス
- Userspace I/Oデバイスアクセス
- u-dma-buf へのアクセス
サーバーは以下のgRPCサービスを提供します:
Reset: システムリセットLoad: ビットストリームの読み込みUnload: ビットストリームのアンロード
UploadFirmware: ファームウェアのアップロード(ストリーミング)RemoveFirmware: ファームウェアの削除LoadBitstream: ビットストリームの読み込みLoadDtbo: デバイスツリーオーバーレイの読み込み
OpenMmap: メモリマップドアクセサの作成OpenUio: UIOアクセサの作成OpenUdmabuf: UDMABUFアクセサの作成Subclone: サブアクセサの作成Close: アクセサのクローズ
WriteMemU/I: メモリへの整数書き込みReadMemU/I: メモリからの整数読み込みWriteRegU/I: レジスタへの整数書き込みReadRegU/I: レジスタからの整数読み込みWriteMemF32/F64: メモリへの浮動小数点書き込みReadMemF32/F64: メモリからの浮動小数点読み込みMemCopyTo/From: バイト配列のコピー
詳細なAPI仕様はprotos/jelly_fpga_control.protoを参照してください。
- jelly-fpgautil-rs - FPGA制御ユーティリティ
- jelly-uidmng-rs - UID管理ユーティリティ
- jelly-mem_access - メモリアクセスライブラリ
本ソフトに関係する記事が下記にあります。