Slide 1

Slide 1 text

FPGA向け オープンソースEDAの動向あれこれ 三好 健文 わさらぼ合同会社 2024.7.11

Slide 2

Slide 2 text

略歴 • 学生時代 • マルチVLIW向け自動並列化コンパイラ • ハードウェアWebサーバーの実装(HTTP/ファイルシステムのRTL実装) • 卒業後 • メニーコア向けコンパイラ・ソフトウェアスタック • メニーコアプロセッサエミュレーションプラットフォーム(たくさんのFPGA) • マルチGPU向けプログラミング環境 • 就職後 • ネットワーク関連FPGA IPコア + α @e-trees.Japan, Inc. • 物理実験装置 - たくさんのADCの値をまとめてFPGAに送り込む • ストリーム処理向けFPGAアクセラレータ • データセンター向けFPGAアクセラレータ • Javaベースの高位合成処理系 Synthesijer の開発 • 量子コンピュータ制御装置の研究・開発・販売 @QUEL, Inc. これが今日のきっかけかと

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

FPGAとは? • すごく便利なLSI • 十徳ナイフみたいな • 力を発揮するところで発揮してくれるとよい • 個人の見解です • もっとこういう側面もある->すごく便利 4

Slide 5

Slide 5 text

FPGAのデザインコスト大きすぎ問題 5 Ivo Bolsens, “FPGA2032 Roadmap:A Personal Perspective", FPGAs in 2032: Challenges and Opportunities in the next 20 years,” Feb. 2012

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Synthesijer • JavaプログラムをFPGA上のハードウェアに変換 • 複雑なアルゴリズムのハードウェア実装を楽に • オブクジェクト指向設計による再利用性の向上 • 特殊な記法,追加構文はない • ソフトウェアとして実行可能.動作の確認、検証が容易 • 書けるプログラムに制限は加える • HDLモジュールのJavaからのインスタンス生成 8

Slide 9

Slide 9 text

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設計に活用したい

Slide 10

Slide 10 text

Synthesijer 10 • JavaっぽさをHW設計に活用したい

Slide 11

Slide 11 text

Synthesijer + qflow 11

Slide 12

Slide 12 text

Synthesijer 12 • 自分でいくつかのプロジェクトに利用した • miyaさんがいろいろ遊んでくれた • SuzukiさんがForth作ってくれた(という記憶) • 組み込み系の研究室でネタの一つにしてもらった • 倒立振子をつくってもらった • アーキ系の研究室でネタの一つにしてもらった • パイプライン化に取り組んでもらった • チップ分割手法のベースに使ってもらった • Vivado HLS無償化!! • やっぱり速い/小さい回路はけないとダメ • 自分でも仕事でそのままはつかえなかった

Slide 13

Slide 13 text

最近の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

Slide 14

Slide 14 text

市販FPGAにおけるOSS利用 • QuickLogic – EOS-S3 • CologneChip – GateMate FPGA • Renesas – Forge FPGA 14

Slide 15

Slide 15 text

GateMate FPGA • ドイツのCologne社のFPGA • 8-LUT 15

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Forge FPGA • ルネサスの小さいFPGA • 1000LUT 17

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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, 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!

Slide 22

Slide 22 text

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