Skip to content

ryuz/jelly

Repository files navigation

Jelly -- SoC platform for FPGA

概要

もともとMIPS互換のCPUコアを書き始めたのがきっかけですが、現状ではFPGAでSoCを実現する為のプラットフォームになりつつあります。 主に Xilinx のFPGAをターゲットにした、様々なコードを蓄積しており、主に Verilog 2001 と SystemVerilog で開発しております。

最近は、作者の発案したFPGA用のバイナリニューラルネットである LUT-Network の実行にも一部コードを流用しており、作者の中でも重要性が高まっております。

基本的には色々なものをごった煮で含んでいる状況ですが、参考になる部分だけ活用いただければと思います。

なお、現在少し詳細なドキュメントをこちらに準備中です。

作者が書き溜めたソースの集合体で、多数のプロジェクトを内包したモノリポとなっております。

いろいろなサンプルプロジェクト

Jelly 内のサンプルプログラムの紹介です。

ZynqMP 共通

Kria KV260

Kria KR260

Ultra96 V2

Zybo Z7

Tang Nano 4k

Tang Nano 9k

ライブラリ群

各プロジェクトで利用している Jelly の共有ライブラリ群が rtl の下にあります。いくつかのバージョンで整理を始めており

Directory 説明
rtl/v1 Verilog-2001 で記述した昔のコード
rtl/v2 一部 SystemVerilog の機能を限定的に利用し始めたコード
rtl/v3 SystemVerilog の Interface や type などの機能をフルに使い始めたもの
rtl/jellyvl 実験的に Veryl を試したもの(submodule)

となっています。 v2 までは logic や always_ff を使い始めた程度なので SystemVerilog 対応を謡っているものなら概ね対応可能と思われます。

v3 は処理系を選ぶ可能性があります。

rtl の下にある分類を v2 を例に説明すると

Directory 説明
rtl/v2/library FIFOとかRAMとか様々なRTLのパーツ
rtl/v2/bus AXIとかWISHBONEとかのバスブリッジ等のパーツ
rtl/v2/math GPUとかで使うような算術パーツ
rtl/v2/peripheral UARTとかI2CとかTIMERとかののパーツ
rtl/v2/video DVIとかHDMIとかのビデオ処理
rtl/v2/image 画像処理用パーツ(ニューラルネットの畳み込みでも利用)
rtl/v2/model シミュレーション用の便利モデルいろいろ

のような感じになっています。

各種機能開発

MIPS-I 互換プロセッサ

作者が一番最初に Verilog の勉強を始めるきっかけとして 自作CPU に挑戦したものです。

/rtl/v1/mipsi/

以下にあります。

Verilogの勉強を始めた頃に Spartan-3 向けに試しに書いてみたプロセッサです。

ブロック図などはWebサイトの方にあります。

RISV-V 互換プロセッサ

/rtl/jfive

以下にあります。

サンプルは

などになります。

FPGA化リアルタイムOS

/rtl/rtos

以下にあります。

FPGAで作成したRealTime-OSアクセラレータです。

今のところ ZynqMP の RPU(Cortex-R5) のアクセラレートのみですが、ITRON風味のRTOSスケジューリング補助回路となっています。

現状 Rust での開発を想定してサンプルを準備しております。

リアルタイムGPU

/rtl/v1/gpu

以下にあります。

フレームメモリを使わないフィルタ型の低遅延なリアルタイム描画を目指したものです。

動画はこちらです。

その他

ZynqMP ネタが増えてきたのでZynqMPを理解しようという記事を書いてみました。

作者情報

渕上 竜司(Ryuji Fuchikami)

ライセンス

license.txt にある通り、MIT ライセンスとして置いておきます。

ただし submodule など、他から引用しているものについてはその限りではありませんので、個別ライセンス記述がある場合はそちらに従ってください。