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 の実行にも一部コードを流用しており、作者の中でも重要性が高まっております。

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

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

MIPS-I 互換プロセッサ

/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 以下にあります。

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

動画はこちらです。

ライブラリ群

もはやこれが Jelly のメインかもです

  • 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 シミュレーション用の便利モデルいろいろ

Zynqベースのシステム

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

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

ライセンス

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