Submit Search
Reconf_201409
0 likes
2,557 views
Takefumi MIYOSHI
"企業における"なんて話をさせていただくのは 大変おこがましいのですが...
Engineering
Read more
1 of 38
Download now
Downloaded 17 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
More Related Content
PDF
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
PDF
ICD/CPSY 201412
Takefumi MIYOSHI
PDF
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
PDF
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
PDF
Reconf 201506
Takefumi MIYOSHI
PDF
FPGAX6_hayashi
愛美 林
PDF
Fpgax 20130604
Takefumi MIYOSHI
PDF
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
Kentaro Sano
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
ICD/CPSY 201412
Takefumi MIYOSHI
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
Reconf 201506
Takefumi MIYOSHI
FPGAX6_hayashi
愛美 林
Fpgax 20130604
Takefumi MIYOSHI
FPGAによる津波シミュレーション -- GPUを超える高性能計算の手法
Kentaro Sano
What's hot
(20)
PDF
増え続ける情報に対応するためのFPGA基礎知識
なおき きしだ
PPTX
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
PDF
Fpga local 20130322
Takefumi MIYOSHI
PPTX
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
PDF
Vyatta 201310
Takefumi MIYOSHI
PPTX
Myoshimi extreme
Masato Yoshimi
PDF
ACRi_webinar_20220118_miyo
Takefumi MIYOSHI
PPT
FPGA
firewood
PDF
SDN Japan: ovs-hw
ykuga
PPTX
高速シリアル通信を支える技術
Natsutani Minoru
PDF
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
PDF
High speed-pc-router 201505
ykuga
PPTX
FPGAって、何?
Toyohiko Komatsu
PDF
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
Shinya Takamaeda-Y
PDF
Gpu vs fpga
Yukitaka Takemura
PDF
FPGA+SoC+Linux実践勉強会資料
一路 川染
PDF
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
PPTX
研究者のための Python による FPGA 入門
ryos36
PDF
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
Shinya Takamaeda-Y
PPTX
ハードウェア技術の動向 2015/02/02
maruyama097
増え続ける情報に対応するためのFPGA基礎知識
なおき きしだ
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
Fpga local 20130322
Takefumi MIYOSHI
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
Vyatta 201310
Takefumi MIYOSHI
Myoshimi extreme
Masato Yoshimi
ACRi_webinar_20220118_miyo
Takefumi MIYOSHI
FPGA
firewood
SDN Japan: ovs-hw
ykuga
高速シリアル通信を支える技術
Natsutani Minoru
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
High speed-pc-router 201505
ykuga
FPGAって、何?
Toyohiko Komatsu
PyCoRAMを用いたグラフ処理FPGAアクセラレータ
Shinya Takamaeda-Y
Gpu vs fpga
Yukitaka Takemura
FPGA+SoC+Linux実践勉強会資料
一路 川染
ソフトウェア技術者はFPGAをどのように使うか
なおき きしだ
研究者のための Python による FPGA 入門
ryos36
PyCoRAM (高位合成友の会@ドワンゴ, 2015年1月16日)
Shinya Takamaeda-Y
ハードウェア技術の動向 2015/02/02
maruyama097
Ad
Viewers also liked
(8)
PDF
社会の意見のダイナミクスを物理モデルとして考えてみる
takeshi0406
PDF
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
Hiroki Nakahara
PDF
深層学習フレームワークChainerの紹介とFPGAへの期待
Seiya Tokui
PDF
Lengua 5 2
Bernardita Naranjo
PDF
Lengua 5 3
Bernardita Naranjo
PDF
Lengua 5 1
Bernardita Naranjo
PDF
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
PDF
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
社会の意見のダイナミクスを物理モデルとして考えてみる
takeshi0406
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
Hiroki Nakahara
深層学習フレームワークChainerの紹介とFPGAへの期待
Seiya Tokui
Lengua 5 2
Bernardita Naranjo
Lengua 5 3
Bernardita Naranjo
Lengua 5 1
Bernardita Naranjo
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
Ad
Similar to Reconf_201409
(20)
PDF
2012研究室紹介(大川)
猛 大川
PPT
20140310 fpgax
funadasatoshi
PDF
Python physicalcomputing
Noboru Irieda
PDF
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
PDF
FPGA startup 第一回 LT
Yamato Kazuhiro
PDF
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Takefumi MIYOSHI
PDF
Synthesijer fpgax 20150201
Takefumi MIYOSHI
PPTX
ソフトウェア志向の組込みシステム協調設計環境
Hideki Takase
PPTX
Starc verilog hdl2013d
Kiyoshi Ogawa
PDF
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
PDF
Introduction of FPGA
Imaoka Micihihiro
PDF
ソフトウェア技術者から見たFPGAの魅力と可能性
Kenichiro MITSUDA
PPTX
Androidとfpgaを高速fifo通信させちゃう
ksk sue
PDF
[DL Hacks]FPGA入門
Deep Learning JP
PDF
第11回ACRiウェビナー_インテル/竹村様ご講演資料
直久 住川
PDF
第3回ローレイヤー勉強会 : FPGAでコンピュータを作ってみた
Ito Takahiro
PDF
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
Hiroki Nakahara
PDF
FPGAスタートアップ資料
marsee101
PDF
藤枝先生ご講演資料_20210824_de10
直久 住川
PDF
Fpga online seminar by fixstars (1st)
Fixstars Corporation
2012研究室紹介(大川)
猛 大川
20140310 fpgax
funadasatoshi
Python physicalcomputing
Noboru Irieda
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
Shinya Takamaeda-Y
FPGA startup 第一回 LT
Yamato Kazuhiro
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Takefumi MIYOSHI
Synthesijer fpgax 20150201
Takefumi MIYOSHI
ソフトウェア志向の組込みシステム協調設計環境
Hideki Takase
Starc verilog hdl2013d
Kiyoshi Ogawa
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
Introduction of FPGA
Imaoka Micihihiro
ソフトウェア技術者から見たFPGAの魅力と可能性
Kenichiro MITSUDA
Androidとfpgaを高速fifo通信させちゃう
ksk sue
[DL Hacks]FPGA入門
Deep Learning JP
第11回ACRiウェビナー_インテル/竹村様ご講演資料
直久 住川
第3回ローレイヤー勉強会 : FPGAでコンピュータを作ってみた
Ito Takahiro
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
Hiroki Nakahara
FPGAスタートアップ資料
marsee101
藤枝先生ご講演資料_20210824_de10
直久 住川
Fpga online seminar by fixstars (1st)
Fixstars Corporation
More from Takefumi MIYOSHI
(19)
PDF
DAS_202109
Takefumi MIYOSHI
PDF
ACRiルーム1年間の活動と 新たな取り組み
Takefumi MIYOSHI
PDF
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
PDF
Misc for edge_devices_with_fpga
Takefumi MIYOSHI
PDF
Cq off 20190718
Takefumi MIYOSHI
PDF
Synthesijer - HLS frineds 20190511
Takefumi MIYOSHI
PDF
Reconf 201901
Takefumi MIYOSHI
PDF
Hls friends 201803.key
Takefumi MIYOSHI
PDF
Hls friends 20161122.key
Takefumi MIYOSHI
PDF
Slide
Takefumi MIYOSHI
PDF
Das 2015
Takefumi MIYOSHI
PDF
Microblaze loader
Takefumi MIYOSHI
PDF
Synthesijer jjug 201504_01
Takefumi MIYOSHI
PDF
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
PDF
Synthesijer hls 20150116
Takefumi MIYOSHI
PDF
Fpgax 20130830
Takefumi MIYOSHI
PDF
Ptt391
Takefumi MIYOSHI
PDF
Google 20130218
Takefumi MIYOSHI
PDF
Bluespec @waseda(PDF)
Takefumi MIYOSHI
DAS_202109
Takefumi MIYOSHI
ACRiルーム1年間の活動と 新たな取り組み
Takefumi MIYOSHI
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
Misc for edge_devices_with_fpga
Takefumi MIYOSHI
Cq off 20190718
Takefumi MIYOSHI
Synthesijer - HLS frineds 20190511
Takefumi MIYOSHI
Reconf 201901
Takefumi MIYOSHI
Hls friends 201803.key
Takefumi MIYOSHI
Hls friends 20161122.key
Takefumi MIYOSHI
Slide
Takefumi MIYOSHI
Das 2015
Takefumi MIYOSHI
Microblaze loader
Takefumi MIYOSHI
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
Synthesijer hls 20150116
Takefumi MIYOSHI
Fpgax 20130830
Takefumi MIYOSHI
Ptt391
Takefumi MIYOSHI
Google 20130218
Takefumi MIYOSHI
Bluespec @waseda(PDF)
Takefumi MIYOSHI
Reconf_201409
1.
企業におけるFPGAアプリケーション 研究開発の一例 株式会社イーツリーズ・ジャパン/わさらぼ合同会社
三好 健文 2014.09.19
2.
Authentication 2 (株)イーツリーズ・ジャパン
FPGAでWeb(キャッシュ)サーバを作ってきた(いる)会社 2000 2002 2004 2006 2008 2010 2012 TCP HTTP/1.0 IPv4 TCP band width ctrl. IPv6 Redundant load balancing IP filter TCP port forwarding HTTP/1.1 “FPGA” で “高速ネットワーク処理” 〜2014
3.
3 コンテンツ ✔
FPGAアプリケーション事例 ✔ 低消費電力かつ高性能アプリケーション ✔ クロックレベルの決定性の活用 ✔ 容易・柔軟なI/Oアクセスの利用 ✔ I/O性能の指針 ✔ 開発コスト削減の努力
4.
4 コンテンツ ✔
FPGAアプリケーション事例 ✔ 低消費電力かつ高性能アプリケーション ✔ クロックレベルの決定性の活用 ✔ 容易・柔軟なI/Oアクセスの利用 ✔ I/O性能の指針 ✔ 開発コスト削減の努力
5.
5 freeocean ✔
低消費電力,高性能 ネットワークI/F 100/1000BASE-T x 4 対応プロトコルHTTP/1.1, (IPv4, IPv6, TCP, ICMP) メモリ(コンテンツ用) DDR2 SDRAM 4GB〜32GB 最大同時コネクション数491,520 サイズ1.5U(430x603x66 mm) 最大消費電力300W未満
6.
6 freeocean ✔
専用回路ならではの並列性の活用 Ethernet IP TCP HTTP Ethernet IP TCP ・・・ TCP TCP TCP ・・・ TCP HTTP HTTP Filesystem + Storage * モジュール構成はイメージです
7.
7 freeocean ✔
専用回路ならではの並列性の活用 KBps
8.
8 freeocean ✔
参考: 今時Apache/PCにabで負荷をかけてみる ✔ PCのスペック ✔ 結果 CPU Intel(R) Core(TM) i5-3570 CPU@3.4GHz メモリ 32GB ディスク Intel SSDC2W24 OS Fedora release 17 Apache Apache/2.2.23 ➔ 1kB ➔ 1MB 並列度スループット(kBps) 10 40225 100 48865 1000 12494 並列度スループット(kBps) 10 114565 100 114568 1000 N/A 100回試行して最もよかった値. ApacheのMPMは多少いじったが,基本デフォルト. 性能はチューニングに強く依存すると思われる
9.
11 電波伝播エミュレーション 干渉
マルチパス 減衰 など アプリケーション層... トランスポート層 ネットワーク層 物理層 ✔ is 何? = 大量の演算 リアルタイムでの処理が必要 物理層の変動による プロトコルスタックの性能評価
10.
12 電波伝播エミュレーション ✔
低消費電力,高性能 + 広帯域通信 Node 0 Node 1 Node N + Node i Op Op Op ...
11.
13 ネットワーク検査装置 ✔
is 何? ネットワーク = スイッチやルーターの集まり パケットの返り値,返り時間によって, ネットワークをブラックボックステストする
12.
14 ネットワーク検査装置 ✔
クロックレベルの確定性を活用 ネットワーク スイッチやルーターの集まり FPGA Packet Etherport 0 Etherport 1 generator PCIe recv. & comp. counter ram Header + counter 結果(遅延別のカウント数)
13.
15 exStickによる組込みNW機器 ✔
豊富・柔軟なI/Oの活用 GPIOたくさん 100Mbps Ethernet
14.
16 exStickによる組込みNW機器 ✔
豊富・柔軟なI/Oの活用
15.
17 exStickによる組込みNW機器 ✔
豊富・柔軟なI/Oの活用
16.
18 コンテンツ ✔
FPGAアプリケーション事例 ✔ 低消費電力かつ高性能アプリケーション ✔ クロックレベルの決定性の活用 ✔ 容易・柔軟なI/Oアクセスの利用 ✔ I/O性能の指針 ✔ 開発コスト削減の努力
17.
19 IO性能の指針 ✔
PCIe Gen2, Gen3 ✔ SATA FPGA GbE, 10GbE PCIe SATA FPGAの内部バス幅, 動作クロックが十分なため ほぼ理論性能がでる 要は↓のようなシステムを想定したときの だいたいの性能見積もりをしたい
18.
20 PCIe Gen2
✔ よくあるアクセラレータの実装を想定 ✔ KC705
19.
21 PCIe Gen2
20.
FPGA VC709 22
PCIe Gen3 PCIe Integrated Block cc cq pcie2axilite (xapp1201) rc rq bmd_writer/ bmd_reader config./ status DMA Engine SW Host Memory MIG On-board DDR3 int. Controller FIFO FIFO axi_writer axi_reader bmd_writer/ bmd_reader AXI-ST 256bit 250MHz AXI-MM 256bit 250MHz PC->FPGA: 2KByte FPGA->PC: 128Byte src(64bit), dest(64bit), Length(<= 8MB), dir
21.
23 PCIe Gen3
✔ *** Gen2 x8での読み書き性能の測定結果 Write (FPGA Board DDR3 -> Host Memory) 0 2000 4000 6000 8000 1000012000140001600018000 1600 1400 1200 1000 800 600 400 200 0 Bytes MBps Read (Host Memory -> FPGA Board DDR3) 0 2000 4000 6000 8000 1000012000140001600018000 2000 1800 1600 1400 1200 1000 800 600 400 200 0 Bytes MBps
22.
24 SATA ✔
e7SATA: コア+専用FPGAボード2Gb DDR3L Spartan6 XC6SLX45T FMC
23.
25 SATA ✔
e7SATA: コア+専用FPGAボード
24.
26 SATA ✔
e7SATA FPGAボード内での読み出し性能測定 0 500000 1000000 1500000 2000000 2500000 3000000 3500000 4000000 4500000 300 250 200 150 100 50 0 Micron Intel Fujitsu(1st) Fujitsu (2nd〜) Bytes Micron: RealSSD C400, Intel: Intel SSD 330 Series, Fujitsu: MHV2080BS(HDD) MBps
25.
27 コンテンツ ✔
FPGAアプリケーション事例 ✔ 低消費電力かつ高性能アプリケーション ✔ クロックレベルの決定性の活用 ✔ 容易・柔軟なI/Oアクセスの利用 ✔ I/O性能の指針 ✔ 開発コスト削減の努力
26.
28 開発コスト削減の努力 ✔
Universal Protocol Line ✔ Synthesijer ✔ Synthesijer.scala
27.
29 Universal Protocol
Line ✔ ハンドシェイク(Req/Ack)付きのFIFO Clock Request Ack Enable Data 0 1 2 3 4
28.
30 Universal Protocol
Line ✔ UPL over XXX 内部バスUPL送信側UPL受信側 UPL送信側GTX GTX UPL受信側 UPL送信側AXI UPL受信側 ✔ UPL分岐,合流 高速 シリアル AXI Master AXI Slave UPL モジュール UPL送信側splitter merger UPL受信側 UPL モジュール 帯域が余っていて 処理速度が間に合わないとき など
29.
31 Synthesijer ✔
JavaプログラムをFPGA上のハードウェアに変換する高位合成処理系 ✔ ソフトウェアとして実行可能.動作の確認、検証に ✔ 複雑なアルゴリズムのハードウェア実装が楽に ✔ オブクジェクト指向設計による再利用性の向上 ✔ 特殊な記法,追加構文はない Opensource ✔ 書けるプログラムに制限は加える(動的なnew,再帰などは不可) Javaコンパイラ フロントエンド Synthesijer エンジン Javaコンパイラ バックエンド 合成 配置配線 while(){ If(...){ … }else{ … … } …. } 複雑な状態遷移も,Javaの制御構文を使って楽に設計できる同じJavaプログラムをソフトウェアとしても FPGA上のハードウェアとしても実行可能
30.
32 効率的なアルゴリズムの採用が可能 ✔ 例:
バブルソートじゃなくてマージソートの採用,など ✔ バブルソート(512個の降順→昇順) ✔ マージソート(512個の降順→昇順) x15
31.
3つの開発パタン (1) Javaによるモジュールだけでシステムを構成
(2) HDLによるモジュールを部品として利用.全体はJavaで記述 = 既存IPコア,FPGAの性能を活用 (3) Javaによるモジュールを部品として利用.全体はHDLで記述 = 複雑なアルゴリズムをSWプログラマに書いてもらう.SW資産活用 33 (1)Javaでシステムを構成(2)Java + HDL記述の部品(3)HDL + Java記述の部品
32.
34 Java+HDL記述の部品 public
void run(){ while(port.ready == false) ; port.op_start = true; port.send_length = port.recv_length; int len = port.data[DATA_LENGTH]; if((len & 0x3) == 0) len = len >> 2; else len = (len >> 2) + 1; for(int i = 0; i < len; i++){ int v = port.data[i+DATA_OFFSET]; int r = 0; r += (toLow((v >> 0) & 0x000000FF)) << 0; r += (toLow((v >> 8) & 0x000000FF)) << 8; r += (toLow((v >> 16) & 0x000000FF)) << 16; r += (toLow((v >> 24) & 0x000000FF)) << 24; port.data[i+DATA_OFFSET] = r; } port.op_start = false; port.op_done = true; port.op_done = false; } } ✔ UPLモジュールにJavaでアクセス package synthesijer.lib.upl; public class UPLPortTest { private final UPLPort port = new UPLPort(); public static int DATA_OFFSET = 4; public static int DATA_LENGTH = 3; private int toLow(int ch){ int ret; if(ch >= 'A' && ch <= 'Z'){ ret = ch - 'A' + 'a'; }else{ ret = ch; } return ret; }
33.
35 HDL+Java記述の部品 FIFO
ドライバ req busy Java モジュール w [byte] f [Hz] スループット T [bps] ドライバ req busy Java モジュール FIFO ドライバ req busy Java モジュール パケットデータが d [byte] のとき全データ入力を受け取るのにかかる時間 = (d/w)*(1/f) [sec] 同様に、全データの出力にかかる時間 = (d/w)*(1/f) [sec] スループットT [bps]を実現するとき、パケットデータを(8*d)*(1/T) [sec]内で処理し続ける必要がある → 各モジュールで処理に使える時間 t は 8*d/T-2*d/(w*f) [sec] → (8*d/T-2*d/(w*f))/(1/f) [cycle] たとえば、d=1500, T=1G, w=4, f=100Mのとき 1パケットあたりの処理にかけられるサイクル数は450サイクル.f=200Mなら1650サイクル
34.
36 Synthesijer.scala ✔
もう普通のHDL(= VHDL/Verilog HDL)は書きたくない ✔ たくさんの似たような名前の変数の定義 ✔ リセット,パルス信号をもとに戻すの忘れる ✔ 制御構造とデータ処理が同じ,な設計モデルはいやだ ✔ 記述の再利用をしたい ✔ データ処理とデータ代入をわけたい もっと高級なHDLがあればいい
35.
37 Synthesijer.scala とは
✔ Synthesijerのバックエンドを使ったScala“で”HDLを書くDSL ✔ signal, port: 状態を変更可能なオブジェクト ✔ expr: 副作用なしの式 ✔ sequencer: 状態遷移機械 ✔ module: モジュール全体 ✔ 上記のオブジェクトをScalaでインスタンス化.つなぎ合わせる.
36.
38 Synthesijer.scala の例(1)
✔ Lチカ def generate_led() : Module = { val m = new Module("led") val q = m.outP("q") val counter = m.signal("counter", 32) q <= m.expr(Op.REF, counter, 5) val seq = m.sequencer("main") counter <= (seq.idle, VECTOR_ZERO) val s0 = seq.idle -> seq.add() counter <= (s0, m.expr(Op.+, counter, 1)) return m } def generate_sim(target:Module, name:String) : SimModule = { val sim = new SimModule(name) val inst = sim.instance(target, "U") val (clk, reset, counter) = sim.system(10) inst.sysClk <= clk inst.sysReset <= reset return sim }
37.
39 Synthesijer.scala の例(2)
val m = new Module("UPLTest") val uplin = new UPLIn(m, "pI0", 32) val uplout = new UPLOut(m, "pO0", 32) val ipaddr = m.inP("pMyIpAddr", 32) val port = m.inP("pMyPort", 16) val server_addr = m.inP("pServerIpAddr", 32) val server_port = m.inP("pServerPort", 16) def wait_trigger():State = ... val ack_ready = m.expr(Op.==, uplout.ack, Constant.HIGH) def wait_ack_and_send_data():State = ... def send_dest_addr():State = ... def send_port():State = ... def send_length():State = ... def send_data():State = ... (idle -> (m.expr(Op.==, trigger, Constant.HIGH), wait_trigger()) -> (ack_ready, wait_ack_and_send_data()) -> send_dest_addr() -> send_port() -> send_length() -> send_data() -> idle) Clock Request Ack Enable Data
38.
40 まとめ ✔
FPGAアプリケーション事例 ✔ 低消費電力かつ高性能 = freeocean,電波伝播エミュ ✔ クロックレベルの決定性 = ネットワーク検査 ✔ 容易・柔軟なI/Oアクセス = exStick ✔ I/O性能の指針 ✔ PCIe,SATAのだいたいの見積もり ✔ 開発コスト削減の努力 ✔ Univarsal Protocol Line ✔ Synthesijer と Synthesijer.scala
Download