fpgax 20130604

30
(JavaRock)の話と FPGAでSSD SATAの話 三好 健文 株式会社イーツリーズ・ジャパン 1

Upload: takefumi-miyoshi

Post on 30-Jun-2015

1.044 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Fpgax 20130604

(JavaRock)の話とFPGAでSSDSATAの話

三好 健文株式会社イーツリーズ・ジャパン

1

Page 2: Fpgax 20130604

SATAもGTPもよく知らない俺が

OpenCoresのSATAコアを

すんなりうごかせるはずがない

...といえないこともなくはない

Page 3: Fpgax 20130604

SSD/HDDで魅力的ですね!!大容量で低価格

ピン数少ない(TX{P,N}/RX{P,N})

3

バイト単価 Read/Write速度 転送速度

 HDD 安 数十~数百MBps ~6Gbps

 SSD 中 数百MBps ~6Gbps

 SD 高 数十MBps ~104MBps(UHS-II: ~312MBps)

Page 4: Fpgax 20130604

SATAをFPGAで使いたい外付けのチップを利用

SATAホストチップ

PCのSATAコントローラを乗っ取る

SATA IPコアを利用

デザインゲートウェイ SATA-IPコア

特電SATA互換IPコア

OpenCores

0から自作4

Page 5: Fpgax 20130604

OpenCoresにあるじゃないか

5

やってみようなんかMicroBlazeとか書いてある制御部分はJavaでいいか

Page 6: Fpgax 20130604

SATAについて

6

10B

Dwords

FIS

データ/コマンド

10B

Dwords

FIS

データ/コマンドホスト ディスク

トランスポート/コマンド層

リンク層(上位)

リンク層(下位)

物理層

トランスポート/コマンド層

リンク層(上位)

リンク層(下位)

物理層

↓これで勉強しました

Page 7: Fpgax 20130604

SATAについて...もう少し詳しく

7

10B

Dwords

FIS

データ/コマンド

トランスポート/コマンド層

リンク層(上位)

リンク層(下位)

物理層

FIS(Frame Information Structure)の組み立て/送受信制御

FIS<->フレームデータ変換CRC計算,スクランブル/デスクランブル

Dwords単位の操作(Primitive/PureData)8B10B変換

シリアル<->10B変換+/-の信号 + Hi-Z(OOB)信号

FIS

FIS

SOF

CRCEOF

8bit

10bit 10bit 10bit…

10bit

1bit

10bit

Page 8: Fpgax 20130604

SATAホストコアの実装

8

10B

Dwords

FIS

データ/コマンド

トランスポート/コマンド層

リンク層(上位)

リンク層(下位)

物理層

FIFO

command_layer.vhd

sata_link_layer.vhd

sata_phy.v

GTX

oob_control.v

FIFO

FIFO

I/O

Page 9: Fpgax 20130604

用意するもの

Gbトランシーバが(ほぼ)必須

Xilinx Tシリーズ/Altera GXシリーズ

SATAポートのついているボード

PCIeエッジ搭載ボード + SATAポート変換ジグ

電源

気持ちの余裕

9

FPGA

FPGAボード

その他

または

Page 10: Fpgax 20130604

PCIeエッジから信号引き出す(1)

10

Page 11: Fpgax 20130604

PCIeエッジから信号引き出す(1)...今思えば

11

こういうのの方が工作しやすかったかも....

Page 12: Fpgax 20130604

PCIeエッジから信号引き出す(2)

12

例えば,デザインゲートウェイ社製AB06-PCIeSATA x8とか

...安くはない(と思う)

Page 13: Fpgax 20130604

SATAポートを持ったFPGAボードXilinx ML555

特殊電子回路(株) EXPARTAN-6T

(株)アークス Axpcie6031

13

などなど

Page 14: Fpgax 20130604

動かすついでにSpartan-6に移植してみた

物理層をGTX→GTPに変換

SATA 1.5Gbps/3Gbpsネゴシエーション

OOBはGTPに任せられる

16bit <-> 32bit バス変換

アプリI/F層をJavaで実装

14

...Spartan-6の方が安いから

Page 15: Fpgax 20130604

SATAホストコアの実装

15

10B

Dwords

FIS

データ/コマンド

トランスポート/コマンド層

リンク層(上位)

リンク層(下位)

物理層

FIFO

command_layer.vhd

sata_link_layer.vhd

sata_phy.v

GTX

oob_control.v

FIFO

FIFO

I/O

Java

VHDL

この程度ですむと...

Page 16: Fpgax 20130604

コードの移植をしてみて環境の違いでIPコアをごにょごにょ

ミーリーマシンですか....

てか混在ですか??

そこでintegerとか使う??

割と読みやすいコードでした

16

Page 17: Fpgax 20130604

作ってみたシステムの構成

17

Page 18: Fpgax 20130604

BufferedSataIface

18

内部でキャッシュ

単純なWriteBack機構

Page 19: Fpgax 20130604

リソース使用量/速度など

PHY単体では3Gbpsでリンク全体では1.5Gbpsでネゴ完了

19

Page 20: Fpgax 20130604

動いている様子(1)

20

リンク確立の開始

OOB

D10.2

Page 21: Fpgax 20130604

動いている様子(2)

21

リンク確立

B5B5957C(SYNC)

7B4A4ABC(ALIGN)

Page 22: Fpgax 20130604

動いている様子(3)

22

ホストからコマンド発行

3737B57C(SOF) <データ> D5D5B57C(EOF)

Page 23: Fpgax 20130604

動いている様子(4)

23

転送開始

37375B57C(SOF)...

Page 24: Fpgax 20130604

動いている様子(5)

24

転送完了

..D5D5B57C(EOF)

Page 25: Fpgax 20130604

で,気になる性能は??

25

Page 26: Fpgax 20130604

えーっと...動くのは分かった...

4KB(=8セクタアクセス)じゃ性能でないよね

ロジック回路が37.5(75)MHzは寂しいよね

ってか,エラー処理は?

26

→上位レイヤも作り直そう...

Page 27: Fpgax 20130604

上位層の作り直し

Spartan-6での3Gbpsでのネゴ実現

NCQなどの上位コマンドの実装

RAID,みたいな?

もっとインテリジェントな何か?

今後

27

Page 28: Fpgax 20130604

FPGA用(?)SATA接続キット

28

SATAデバイスにアクセスするため“だけ”の最小構成

欲しい人いませんか?

SATA?フィルムケーブルFMC?

Page 29: Fpgax 20130604

たとえば,こんな風に使えるといいな

29

Page 30: Fpgax 20130604

俺のFPGAがこんなかんたんに

SATAディスクにアクセスできる

はずがない

次回(時期未定)