Submit Search
Upload
Reconf 201506
•
8 likes
•
3,230 views
Takefumi MIYOSHI
Follow
An Implementation and Evaluation of A Generic Interface between PC and FPGA with AHCI
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 44
Download now
Download to read offline
Recommended
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
Takefumi MIYOSHI
Das 2015
Das 2015
Takefumi MIYOSHI
Fpgax 20130604
Fpgax 20130604
Takefumi MIYOSHI
Reconf_201409
Reconf_201409
Takefumi MIYOSHI
Hls friends 20161122.key
Hls friends 20161122.key
Takefumi MIYOSHI
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
ICD/CPSY 201412
ICD/CPSY 201412
Takefumi MIYOSHI
Ptt391
Ptt391
Takefumi MIYOSHI
Recommended
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
Takefumi MIYOSHI
Das 2015
Das 2015
Takefumi MIYOSHI
Fpgax 20130604
Fpgax 20130604
Takefumi MIYOSHI
Reconf_201409
Reconf_201409
Takefumi MIYOSHI
Hls friends 20161122.key
Hls friends 20161122.key
Takefumi MIYOSHI
Abstracts of FPGA2017 papers (Temporary Version)
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
ICD/CPSY 201412
ICD/CPSY 201412
Takefumi MIYOSHI
Ptt391
Ptt391
Takefumi MIYOSHI
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
tomoaki0705
20130819 jjugnslt
20130819 jjugnslt
Shinya Takebayashi
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
Yasuhiro Yoshimura
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
Kohei KaiGai
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
Mr. Vengineer
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
magoroku Yamamoto
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
Kohei KaiGai
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
Kuninobu SaSaki
Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介
Kuninobu SaSaki
FPGAX6_hayashi
FPGAX6_hayashi
愛美 林
OpenCLに触れてみよう
OpenCLに触れてみよう
You&I
Reconf 201901
Reconf 201901
Takefumi MIYOSHI
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
More Related Content
What's hot
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
tomoaki0705
20130819 jjugnslt
20130819 jjugnslt
Shinya Takebayashi
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
Takefumi MIYOSHI
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
Yasuhiro Yoshimura
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
Kohei KaiGai
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
一路 川染
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
Takefumi MIYOSHI
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
marsee101
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
Mr. Vengineer
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
magoroku Yamamoto
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
Shinya Takamaeda-Y
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Ken'ichi Sakiyama
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
Kohei KaiGai
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
Kuninobu SaSaki
Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介
Kuninobu SaSaki
FPGAX6_hayashi
FPGAX6_hayashi
愛美 林
OpenCLに触れてみよう
OpenCLに触れてみよう
You&I
What's hot
(20)
Gpgpu tomoaki-fp16
Gpgpu tomoaki-fp16
20130819 jjugnslt
20130819 jjugnslt
Synthesijer.Scala (PROSYM 2015)
Synthesijer.Scala (PROSYM 2015)
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
FPGAのトレンドをまとめてみた
FPGAのトレンドをまとめてみた
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
ラプラシアンフィルタをZedBoardで実装(ソフトウェアからハードウェアにオフロード)
FPGAアクセラレータの作り方
FPGAアクセラレータの作り方
V6 unix vol.2 in okinawa
V6 unix vol.2 in okinawa
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
FPGA・リコンフィギャラブルシステム研究の最新動向
FPGA・リコンフィギャラブルシステム研究の最新動向
Pythonによる並列プログラミング -GPGPUも-
Pythonによる並列プログラミング -GPGPUも-
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
Synthesijer zynq qs_20150316
Synthesijer zynq qs_20150316
(JP) GPGPUがPostgreSQLを加速する
(JP) GPGPUがPostgreSQLを加速する
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
A100 GPU 搭載! P4d インスタンス使いこなしのコツ
Automatic Mixed Precision の紹介
Automatic Mixed Precision の紹介
FPGAX6_hayashi
FPGAX6_hayashi
OpenCLに触れてみよう
OpenCLに触れてみよう
Similar to Reconf 201506
Reconf 201901
Reconf 201901
Takefumi MIYOSHI
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
Tremaで試すFirewall
Tremaで試すFirewall
M Hagiwara
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)
Fixstars Corporation
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
Ryuuta Tsunashima
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
Kazuyuki Sato
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
Naoto MATSUMOTO
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
Kohei KaiGai
20180217 FPGA Extreme Computing #10
20180217 FPGA Extreme Computing #10
Kohei KaiGai
kagamicomput201714
kagamicomput201714
swkagami
IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.
Takuma Usui
seccamp2012 チューター発表
seccamp2012 チューター発表
Hirotaka Kawata
SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)
Kohei KaiGai
kagami_comput2016_14
kagami_comput2016_14
swkagami
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
MITSUNARI Shigeo
Linux kernelのbspとupstream
Linux kernelのbspとupstream
wata2ki
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
Hitoshi Sato
20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom
Kohei KaiGai
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
Takuro Iizuka
Similar to Reconf 201506
(20)
Reconf 201901
Reconf 201901
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Tremaで試すFirewall
Tremaで試すFirewall
Fpga online seminar by fixstars (1st)
Fpga online seminar by fixstars (1st)
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
「前回の COMSTAR ネタに刺激されてしまったので、オレも COMSTAR を使ってみた。」(仮)
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
高速ネットワーク最新動向と具体例 (ENOG58 Meeting)
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
20180217 FPGA Extreme Computing #10
20180217 FPGA Extreme Computing #10
kagamicomput201714
kagamicomput201714
IEICE technical report (RECONF), January 2015.
IEICE technical report (RECONF), January 2015.
seccamp2012 チューター発表
seccamp2012 チューター発表
SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)
kagami_comput2016_14
kagami_comput2016_14
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
Linux kernelのbspとupstream
Linux kernelのbspとupstream
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
20171220_hbstudy80_pgstrom
20171220_hbstudy80_pgstrom
NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
More from Takefumi MIYOSHI
ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyo
Takefumi MIYOSHI
DAS_202109
DAS_202109
Takefumi MIYOSHI
ACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組み
Takefumi MIYOSHI
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
Takefumi MIYOSHI
Misc for edge_devices_with_fpga
Misc for edge_devices_with_fpga
Takefumi MIYOSHI
Cq off 20190718
Cq off 20190718
Takefumi MIYOSHI
Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511
Takefumi MIYOSHI
Hls friends 201803.key
Hls friends 201803.key
Takefumi MIYOSHI
Slide
Slide
Takefumi MIYOSHI
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Takefumi MIYOSHI
Microblaze loader
Microblaze loader
Takefumi MIYOSHI
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Takefumi MIYOSHI
Synthesijer hls 20150116
Synthesijer hls 20150116
Takefumi MIYOSHI
Vyatta 201310
Vyatta 201310
Takefumi MIYOSHI
Fpgax 20130830
Fpgax 20130830
Takefumi MIYOSHI
Fpga local 20130322
Fpga local 20130322
Takefumi MIYOSHI
Google 20130218
Google 20130218
Takefumi MIYOSHI
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
Takefumi MIYOSHI
More from Takefumi MIYOSHI
(18)
ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyo
DAS_202109
DAS_202109
ACRiルーム1年間の活動と 新たな取り組み
ACRiルーム1年間の活動と 新たな取り組み
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
Misc for edge_devices_with_fpga
Misc for edge_devices_with_fpga
Cq off 20190718
Cq off 20190718
Synthesijer - HLS frineds 20190511
Synthesijer - HLS frineds 20190511
Hls friends 201803.key
Hls friends 201803.key
Slide
Slide
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Microblaze loader
Microblaze loader
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
Synthesijer hls 20150116
Synthesijer hls 20150116
Vyatta 201310
Vyatta 201310
Fpgax 20130830
Fpgax 20130830
Fpga local 20130322
Fpga local 20130322
Google 20130218
Google 20130218
Bluespec @waseda(PDF)
Bluespec @waseda(PDF)
Reconf 201506
1.
AHCIを用いたPCとFPGA間の 汎用インターフェースの実装と評価 三好健文 船田悟史 (株)イーツリーズ・ジャパン 2015.06.20 RECONF研@京都 このスライドは,現在開発中のシステムに基づいてデータ計測/リソース使用量を評価しています. 今後の開発/デバッグの進捗で良くも悪くもなり得ます.データの利用には,ご注意ください.
2.
2 モチベーション ✔ FPGAを使ったシステム(PC+FPGA)の実装の需要が増えている ✔ PCとFPGAに求める負荷はプロジェクトそれぞれ ✔
既存のPCなシステムにFPGAを埋めこみたいというのは多い ✔ 手軽にFPGAとPCを接続したい ✔ PC(OS)のドライバは書きたくない ✔ LinuxやWindowsなどいろんなOSでFPGA (で作ったアクセラレータ)を扱いたい
3.
3 PC-FPGAインターフェースの候補 UART USB PCIe
TCP/IP, UDP/IP 速度 ~数Mbps ~480Mbps(2.0) ~5Gbps(3.0) ~4GBps(Gen2x4) ~8GBps(Gen3x4) ~Gbps@GbE ~10Gbps@xGbE プログラミング termios Libusb 専用デバドラ Mmap 専用デバドラ socket 接続の容易さ 簡単 簡単 ちょっと面倒 簡単 (世界の裏側でも) 接続数 対向/ マルチドロップ ~127 ~数10個? たくさん アクセスタイプ ストリーム ストリーム/ メモリマップ ストリーム/ メモリマップ ストリーム
4.
4 PC-FPGAインターフェースの候補 UART USB PCIe
TCP/IP, UDP/IP 速度 ~数Mbps ~480Mbps(2.0) ~5Gbps(3.0) ~4GBps(Gen2x4) ~8GBps(Gen3x4) ~Gbps@GbE ~10Gbps@xGbE プログラミング termios Libusb 専用デバドラ Mmap 専用デバドラ socket 接続の容易さ 簡単 簡単 ちょっと面倒 簡単 (世界の裏側でも) 接続数 対向/ マルチドロップ ~127 ~数10個? たくさん アクセスタイプ ストリーム ストリーム/ メモリマップ ストリーム/ メモリマップ ストリーム 遅い デバドラ書くの大変 FPGAで使うのは面倒 ランダムアクセスは...
5.
5 PC-FPGAインターフェースの候補 UART USB PCIe
TCP/IP, UDP/IP 速度 ~数Mbps ~480Mbps(2.0) ~5Gbps(3.0) ~4GBps(Gen2x4) ~8GBps(Gen3x4) ~Gbps@GbE ~10Gbps@xGbE プログラミング termios Libusb 専用デバドラ Mmap 専用デバドラ socket 接続の容易さ 簡単 簡単 ちょっと面倒 簡単 (世界の裏側でも) 接続数 対向/ マルチドロップ ~127 ~数10個? たくさん アクセスタイプ ストリーム ストリーム/ メモリマップ ストリーム/ メモリマップ ストリーム デバドラ書くの大変 速い.FPGAで使いやすい ...デバドラさえ書ければ
6.
6 PC-FPGAインターフェースの候補 UART USB PCIe
TCP/IP, UDP/IP 速度 ~数Mbps ~480Mbps(2.0) ~5Gbps(3.0) ~4GBps(Gen2x4) ~8GBps(Gen3x4) ~Gbps@GbE ~10Gbps@xGbE プログラミング termios Libusb 専用デバドラ Mmap 専用デバドラ socket 接続の容易さ 簡単 簡単 ちょっと面倒 簡単 (世界の裏側でも) 接続数 対向/ マルチドロップ ~127 ~数10個? たくさん アクセスタイプ ストリーム ストリーム/ メモリマップ ストリーム/ メモリマップ ストリーム デバドラ書くの大変 速い.FPGAで使いやすい AHCIを実装して, ディスクに見せてしまおう!!
7.
7 AHCI ✔ Advanced Host
Controller Interface ✔ SATAなHDDやSSDを接続するためのインターフェース ✔ 最近のOSのほとんどでサポートされている = 標準のデバドラでブロックデバイスにみえる ✔ SATAなHDDやSSD以外に接続してはいけない,ことはない
8.
8 一般的なAHCIによるディスク接続 ディスクに送るコマンドを預かる ディスクからのリプライを返す 作業用メモリのポインタの確認 複数コマンドをOoOで発行(NCQ) ディスクへのFISの発行 ディスクからのFISの受信 ステータス管理
9.
9 AHCIのメモリチェイン どのコマンドが 有効かはPxCI レジスタをみる ディスクに 送るべきコマンド PCIeのBAR5に レジスタ空間への ポインタがある ディスクとの やり取りに使う メモリ領域への ポインタ 近代的なOSでは大量の仮想メモリを複数の細かい実メモリに分割して扱う ディスクとの やり取りに使う メモリ領域 P0CLB HBAからは P0CLBの 値でたどる
10.
10 AHCI越しのデータ授受のフロー PCIe越しの通信
11.
11 AHCI ✔ Advanced Host
Controller Interface ✔ SATAなHDDやSSDを接続するためのインターフェース ✔ 最近のOSのほとんどでサポートされている = 標準のデバドラでブロックデバイスにみえる ✔ スキャッタギャザーDMAとしてよくできてる ✔ PCIe越しの煩雑な通信オーバヘッドが心配 ✔ どこまでディスクなしでOSをだませるものだろうか?
12.
12 今回の取り組みの趣旨 ✔ AHCIをPC-FPGA間汎用インターフェースとして使ってみる → HBA(ホストバスアダプタ)をFPGAに実装してみる ✔
FPGA内ロジックへのアクセスとAHCIの親和性 ✔ 回路規模は? ✔ 転送性能は? ✔ 実装の複雑さは?
13.
設計と実装
14.
14 実装するシステムの概要 OSからのリクエストに ディスクにアクセスしたフリをしつつ AXI空間のデバイスにアクセスする Gen2 x4 レジスタマップは PCIe経由で ホストから叩かれる ディスクアクセスのためのLBAは 素直に(LBA*512)AXIアドレスに対応づける
15.
15 実装するシステムの足回り 今回はXilinxのIPコアで組立て.
16.
16 HBAでディスクの状態を補完 = ないディスクのふりをする ✔ HBAレジスタのディスク状態の”適当”な設定例 レジスタ
値 概要 CAP 40240000 NCQ有効.転送レートはGen2相当.AHCIのみサポート GHC 80000000 AHCIを有効 PI 00000001 ポート0のみ有効 VS 00010000 サポートするAHCIバージョン(1.0) CCC_CTL 00010100 タイムアウトとコマンドコンプリージョンリセット値 P0CMD 00110006 ディスクがコマンド待機状態に見えるように設定 P0TFD 00000058 RegD2Hが成功したように設定しておく P2SSTS 00000123 ディスクが電源ONの状態に設定 P0SCTL 00000320 ディスクが正常動作中にみえるように設定
17.
17 HBAの動作フロー ここはディスクの代わりにHBA内で処理してしまう 少なくとも IDENTIFY FPDMA_READ/FPDMA_WRITE は必須 メモリチェインをたどる(本来のHBAの処理)
18.
18 HBAの動作フロー/FIS取得まで private int wait_for_command(){ while(reg.values[P0CI]
== 0) ; reg.values[P0CMD] = 0x10110007; // 処理開始 int id = get_port_id(reg.values[P0CI]); // '1'のbitを選ぶ axi.fetch(reg.values[P0CLB] + (id << 5), 4); // command headerを取得 dw0 = axi.read(0); // PRDTL, PMP, RCBRPWA, CFL dw1 = axi.read(1); // PRD Byte Count dw2 = axi.read(2); // CTBA0 dw3 = axi.read(3); prdtl = (dw0 >> 16) & 0x0000FFFF; ctba = dw2; axi.fetch(ctba, 5);// CFIS取得 cfis_dw0 = axi.read(0); // Features, // Command,… cfis_dw1 = axi.read(1); cfis_dw2 = axi.read(2); cfis_dw3 = axi.read(3); return (dw0 >> 16) & 0x000000FF; } P0CLB
19.
19 FISに対する処理: FISとは ✔ SATAとコマンド/リプライをやりとりするパケット ✔
いくつかのフォーマットがある ✔ RegH2D: ホスト(PC)からデバイス(ディスク)へ ✔ RegD2H: デバイス(ディスク)からホストPCへ ✔ DMAリード/ライト ✔ FPDMAリード/ライト ✔ ...
20.
20 FISの例 RegH2D FPDMA_READ/WRITE
21.
21 FISへの対応例: IDENTIFY private void
return_identify(){ // get PRDT entry axi.fetch(ctba + 0x80, 4); int dba = axi.read(0); // DBA for(int i = 0; i < 128; i++){ axi.write(i, identify.data[i]); } axi.flush(dba, 128); // reply fis axi.write(0, 0x0058605f); axi.write(1, 0xe0000000); axi.write(2, 0x00000000); axi.write(3, 0x500000ff); axi.write(4, 0x00000200); axi.flush(reg.values[P0FB] + 0x20, 5); } P0CLB
22.
22 FISへの対応例: FPDMA_READ private void
do_fpdma_read(){ int ncq_tag = (cfis_dw3 >> 3) & 0x0000001F; int lba = (cfis_dw1 & 0x00FFFFFF); int lba_exp = (cfis_dw2 & 0x00FFFFFF); int sectors = ((cfis_dw0>>24)&0x000000FF) + (((cfic_dw2>>24)&0x000000FF)<<8); int offset = lba * 512; // アクセスするAIX空間上のアドレス for(int i = 0; i < prdtl; i++){ axi.fetch(ctba + 0x80 + (i<<4), 4); // ホストメモリ上のアドレス int prdtl_addr = axi.read(0); int prdtl_len = (axi.read(3)&0x003FFFFF)+1; copy_storage2pcie_all(offset, prdtl_addr, prdtl_len); offset = offset + prdtl_len; } } P0CLB
23.
動作例
24.
24 動作例 PCIデバイス→AHCIデバイス→ディスクに見えている XilinxのPCIe<->AXIブリッジは BAR5が使えないのでBAR0で代用. この対応パッチだけデバドラに適用 標準AHCIデバドラが アタッチされていることがわかる FPGA
25.
25 動作例 PCIデバイス→AHCIデバイス→ディスクに見えている うまくOSを だませている /dev/sdbらしい ddとかできる
26.
26 動作例 ディスクなのでfdiskでパーティションを作ることも可能 これはFPGA fdisk!! FPGA上(AXI越しのメモリの上)に パーティションができた
27.
27 動作例 フォーマットしてファイル作成も可能 フォーマットして ファイルを書くこともできる
28.
評価
29.
29 評価環境 ✔ ホストPC ✔ Intel
Core i3-4130 3.40GHz ✔ メモリDDR3 16GB ✔ OS Ubuntu 14.04.2 (Kernel 3.13.11-ctk17) ✔ FPGAボード/開発環境 ✔ Xilinx K705 ✔ Vivado 2014.4 ✔ AXI内部バス32bit,512bit
30.
30 実装するシステムの概要 Gen2 x4 内部バス32bitのシステム
31.
31 リソース使用量 項目 使用数 使用率 システム全体
スライスLUT 37386 18% スライスレジスタ 32733 8.0% 占有スライス 15045 30% ブロックRAM 25 5.6% HBA スライスLUT 4241 2.0% スライスレジスタ 8467 2.0% 占有スライス 2620 5.1% ブロックRAM 2 0.5% 内部バス32bitのシステム
32.
32 転送性能 内部バス32bitのシステム
33.
33 実装するシステムの概要 このバス幅として, 512bitのバージョンを試す Gen2 x4 内部バス512bitのシステム 制御用に32bit AXIバスを残す
34.
34 リソース使用量 項目 使用数 使用率 システム全体
スライスLUT 46525 23% スライスレジスタ 45109 11% 占有スライス 17825 35% ブロックRAM 53 12% HBA スライスLUT 11499 5.6% スライスレジスタ 8982 2.2% 占有スライス 5002 9.8% ブロックRAM 30 6.7% 内部バス512bitのシステム
35.
35 転送性能 内部バス512bitのシステム
36.
36 比較 ✔ Xilinx EDKのIPコアで作ったシステム
on KC705 ✔ ホストメモリは連続領域を確保 Host PC Host PC Main Memory Software FPGA Board FPGA Board DDR3 Memory Main controller PCIe Memory Controller DMA engine Kick Done User Application Logic Host Memory → DDR3 Memory/FPGA Board DDR3 Memory/FPGA Board → Host Memory 128bit 256bit @100MHz @800MHz
37.
37 比較 Throughput (MBps) Transfer unit
(Bytes) FPGA→Host: 1GBps Host→FPGA: 850MBps
38.
38 AHCI越しのデータ転送の様子 データ転送開始直後(4KB単位のブロック転送)
39.
39 (1) (2) AHCI越しのデータ転送の様子 (2') (1) 4KB CTRL
ARVALID: 0 CTRL RVALID : 104(104) SRC ARVALID : 180( 76) DATA RVALID : 234( 54) DATA RLAST : 314( 80) COPY START : 338( 24) COPY DONE : 405( 67) DEST AWVALID: 426( 21) DEST WVALID : 430( 4) DEST WLAT : 688(258) (2) 4KB CTRL ARVALID: 476( 0) CTRL RVALID : 1238(762) SRC ARVALID : 1315( 76) DATA RVALID : 1369( 54) DATA RLAST : 1449( 80) COPY SART : 1472( 24) COPY DONE : 1539( 67) DEST AWVALID: 1560( 21) DEST WVALID : 1564( 4) DEST WLAT : 1822(258)
40.
40 AHCI越しのデータ転送 しばらくデータ転送が継続したあと(60KB単位の転送)
41.
41 まとめ ✔ AHCIをPC-FPGA間汎用インターフェースとして使ってみる → HBA(ホストバスアダプタ)をFPGAに実装してみる ✔
FPGA内ロジックへのアクセスとAHCIの親和性 →AXI-MMと親和性は高い ✔ 回路規模は?→内部バスを512bitと奢ってもXC7K325Tの約35% →比較相手よりやや大きい ✔ 転送性能は?→約900MBps→比較相手よりやや遅い ✔ 実装の複雑さは?→HBA自体は軽量.移植性も高い.
42.
42 今後の展開 ✔ FPGA側でOSのファイルシステムを扱いたい ✔ Zynqでも利用したい ✔
NVMeではどうだろうか?
43.
43 今後の展開 PC FPGA ディスク? 何かの 処理 ディスク インターネット ✔ なんでもディスクに見せてしまうのは楽しそう ✔ たとえば BRAM
44.
44 まとめ ✔ AHCIをPC-FPGA間汎用インターフェースとして使ってみる → HBA(ホストバスアダプタ)をFPGAに実装してみる ✔
FPGA内ロジックへのアクセスとAHCIの親和性 →AXI-MMと親和性は高い ✔ 回路規模は?→内部バスを512bitと奢ってもXC7K325Tの約35% →比較相手よりやや大きい ✔ 転送性能は?→約900MBps→比較相手よりやや遅い ✔ 実装の複雑さは?→HBA自体は軽量.移植性も高い.
Download now