Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FPGA向け オープンソースEDAの動向あれこれ

miyo
July 11, 2024

FPGA向け オープンソースEDAの動向あれこれ

- Synthesijer (自己紹介)
- 最近のFPGA向けオープンソースEDAの動向
- FPGAツールチェイン全体とOSSツール
- GateMate FPGA / ForgeFPGA
- F4PGA
- LiteX
- Yosys
- まとめ

miyo

July 11, 2024
Tweet

More Decks by miyo

Other Decks in Technology

Transcript

  1. 略歴 • 学生時代 • マルチVLIW向け自動並列化コンパイラ • ハードウェアWebサーバーの実装(HTTP/ファイルシステムのRTL実装) • 卒業後 •

    メニーコア向けコンパイラ・ソフトウェアスタック • メニーコアプロセッサエミュレーションプラットフォーム(たくさんのFPGA) • マルチGPU向けプログラミング環境 • 就職後 • ネットワーク関連FPGA IPコア + α @e-trees.Japan, Inc. • 物理実験装置 - たくさんのADCの値をまとめてFPGAに送り込む • ストリーム処理向けFPGAアクセラレータ • データセンター向けFPGAアクセラレータ • Javaベースの高位合成処理系 Synthesijer の開発 • 量子コンピュータ制御装置の研究・開発・販売 @QUEL, Inc. これが今日のきっかけかと
  2. FPGAにキラーアプリはない 6 Florent de Dinechin, "Building Custom Arithmetic Operators with

    the FloPoCo Generator”, http://www.hipeac.net/conference/berlin/tutorial/flopoco
  3. FPGAにキラーアプリはない 7 Florent de Dinechin, "Building Custom Arithmetic Operators with

    the FloPoCo Generator”, http://www.hipeac.net/conference/berlin/tutorial/flopoco
  4. Synthesijer • JavaプログラムをFPGA上のハードウェアに変換 • 複雑なアルゴリズムのハードウェア実装を楽に • オブクジェクト指向設計による再利用性の向上 • 特殊な記法,追加構文はない •

    ソフトウェアとして実行可能.動作の確認、検証が容易 • 書けるプログラムに制限は加える • HDLモジュールのJavaからのインスタンス生成 8
  5. Synthesijer 9 import synthesijer.rt.unsynthesizable; public class ThreadTest{ private final ThreadCounter

    t0 = new ThreadCounter(); private final ThreadCounter t1 = new ThreadCounter(); public void test(){ t0.start(); t1.start(); } // このメソッドはSynthesijerでは無視する @unsynthesizable public static void main(String... args){ ThreadTest t = new ThreadTest(); t.test(); while(true){ System.out.println("t0:" + t.t0.counter); System.out.println("t1:" + t.t1.counter); try{ Thread.sleep(1); }catch(Exception e){} } } } /* * リスト11: ThreadCounter.java * Threadの活用例 */ // JavaではThreadクラスを継承したクラスを作る public class ThreadCounter extends Thread{ public int counter = 0; // Threadの処理はrunメソッドで実装する public void run(){ while(true){ // 変数をインクリメントする無限ループ counter++; } } } • JavaっぽさをHW設計に活用したい
  6. Synthesijer 12 • 自分でいくつかのプロジェクトに利用した • miyaさんがいろいろ遊んでくれた • SuzukiさんがForth作ってくれた(という記憶) • 組み込み系の研究室でネタの一つにしてもらった

    • 倒立振子をつくってもらった • アーキ系の研究室でネタの一つにしてもらった • パイプライン化に取り組んでもらった • チップ分割手法のベースに使ってもらった • Vivado HLS無償化!! • やっぱり速い/小さい回路はけないとダメ • 自分でも仕事でそのままはつかえなかった
  7. 最近のFPGA向けオープンソースEDAの動向 • 設計言語 • 高位合成処理系 • Bambu • HDL(Verilog, VHDL,

    AltHDL) • Yosys, GHDL, Chisel, SpinalHDL, Migen, Veriloggen, XLS, Veryl, ... • 合成 • Yosys + ABC, ... • 配置配線 • vpr, nextptr, ... • ユーティリティ • openFPGALoader, OpenOCD • シミュレータ • Icarus Verilog, Verilator • システム,SoC設計 • LiteX, PULP Platform, RgGen, ... 13 ツールチェインプラットフォーム: F4PGA
  8. GateMate FPGA 16 # 合成 $ yosys -qql log/synth.log -p

    'read -sv src/blink.v; synth_gatemate -top blink -nomx8 –vlog # 配置配線 $ p_r -i net/blink_synth.v -o blink -ccf src/blink.ccf -cCP > log/impl.log # 書き込み $ sudo $HOME/tools/GateMate/bin/openFPGALoader -b gatemate_evb_jtag blink_00.cfg
  9. ForgeFPGA 18 read -sv "../src/sevenseg.v" "../src/timer_FSM.v" "../src/dynamic_indication.v" "../src/counter_1s.v" "../src/uart_tx.v" "../src/clk_div.v"

    "../src/uart_rx.v" " ../src/uart_sender.v" "../lib/seven_segment_disp.v" "../lib/sync_fifo.v" synth_xilinx -flatten -nodsp clean write_verilog "post_synth_results.v" write_edif "netlist.edif" tee -q -o post_synth_report.txt stat
  10. F4PGA • Yosys, Vtrなど一式のパッケージ • yosys -> pack(vpr) -> ioplace-generic

    -> place_constraints-generic -> place(vpr) -> route(vpr) -> fasm • Xilinx(7シリーズ), QuickLogic(EOS-S3), Lattice(iCE40, ECP5) 19
  11. LiteX • SoCシステムの構築 • VexRiscV + I/O • https://github.com/enjoy-digital/litex •

    Vivado / F4PGA • Vivado • F4PGA(VPR) 20 +--------------------------------------------+------+-------+------------+-----------+-------+ | Site Type | Used | Fixed | Prohibited | Available | Util% | +--------------------------------------------+------+-------+------------+-----------+-------+ | Slice | 1497 | 0 | 0 | 15850 | 9.44 | | SLICEL | 976 | 0 | | | | | SLICEM | 521 | 0 | | | | … | -------------------------------------------+------+-------+------------+-----------+-------+ Resource usage... Netlist 2125 blocks of type: BLK-TL-SLICEL … Netlist 36 blocks of type: BLK-TL-SLICEM
  12. Yosys • read_verilog, read_json, ... / write_verilog, write_json, ... •

    showでネットリストの可視化 • Jsonを読み込んで合成できる • 高位合成処理系を作るときに Json を入力言語にしてもよいのでは?? • 自分でPassを作れる • yosys/guidelines/GettingStarted に解説がある 21 #include "kernel/yosys.h" USING_YOSYS_NAMESPACE PRIVATE_NAMESPACE_BEGIN struct HelloWorldPass : public Pass { HelloWorldPass() : Pass("hello_world") { } void execute(vector<string>, Design*) override { log("Hello World!¥n"); } } HelloWorldPass; PRIVATE_NAMESPACE_END $ yosys-config --exec --cxx --cxxflags --ldflags ¥ -o hello.so -shared hello.cc –ldlibs $ yosys –m hello.so … yosys> hello_world Hello World!
  13. OSSなFPGA向けEDA • 有名どころは環境がちゃんと整備されている(だから有名なのか) • Think of it as the GCC

    of FPGAs. • 昔のGCCのほうがよっぽどビルドは大変だったかも... • 新しいFPGA開発がはかどる(のかも) • 開発フローの自動化などが容易になるかも • ベンダ製ツールのかゆいとこに手が届かなさ • ベンダ製ツールを使いこなす仕事をしたいわけではない • 開発の継続性 • メンテナンスが継続されるかはメンテナ次第 • 一式の管理がユーザ次第の場合も 22