fpgax 20130604
TRANSCRIPT
(JavaRock)の話とFPGAでSSDSATAの話
三好 健文株式会社イーツリーズ・ジャパン
1
SATAもGTPもよく知らない俺が
OpenCoresのSATAコアを
すんなりうごかせるはずがない
...といえないこともなくはない
SSD/HDDで魅力的ですね!!大容量で低価格
ピン数少ない(TX{P,N}/RX{P,N})
3
バイト単価 Read/Write速度 転送速度
HDD 安 数十~数百MBps ~6Gbps
SSD 中 数百MBps ~6Gbps
SD 高 数十MBps ~104MBps(UHS-II: ~312MBps)
SATAをFPGAで使いたい外付けのチップを利用
SATAホストチップ
PCのSATAコントローラを乗っ取る
SATA IPコアを利用
デザインゲートウェイ SATA-IPコア
特電SATA互換IPコア
OpenCores
0から自作4
OpenCoresにあるじゃないか
5
やってみようなんかMicroBlazeとか書いてある制御部分はJavaでいいか
SATAについて
6
10B
Dwords
FIS
データ/コマンド
10B
Dwords
FIS
データ/コマンドホスト ディスク
トランスポート/コマンド層
リンク層(上位)
リンク層(下位)
物理層
トランスポート/コマンド層
リンク層(上位)
リンク層(下位)
物理層
↓これで勉強しました
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
SATAホストコアの実装
8
10B
Dwords
FIS
データ/コマンド
トランスポート/コマンド層
リンク層(上位)
リンク層(下位)
物理層
FIFO
command_layer.vhd
sata_link_layer.vhd
sata_phy.v
GTX
oob_control.v
FIFO
FIFO
I/O
用意するもの
Gbトランシーバが(ほぼ)必須
Xilinx Tシリーズ/Altera GXシリーズ
SATAポートのついているボード
PCIeエッジ搭載ボード + SATAポート変換ジグ
電源
気持ちの余裕
9
FPGA
FPGAボード
その他
または
PCIeエッジから信号引き出す(1)
10
PCIeエッジから信号引き出す(1)...今思えば
11
こういうのの方が工作しやすかったかも....
PCIeエッジから信号引き出す(2)
12
例えば,デザインゲートウェイ社製AB06-PCIeSATA x8とか
...安くはない(と思う)
SATAポートを持ったFPGAボードXilinx ML555
特殊電子回路(株) EXPARTAN-6T
(株)アークス Axpcie6031
13
などなど
動かすついでにSpartan-6に移植してみた
物理層をGTX→GTPに変換
SATA 1.5Gbps/3Gbpsネゴシエーション
OOBはGTPに任せられる
16bit <-> 32bit バス変換
アプリI/F層をJavaで実装
14
...Spartan-6の方が安いから
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
この程度ですむと...
コードの移植をしてみて環境の違いでIPコアをごにょごにょ
ミーリーマシンですか....
てか混在ですか??
そこでintegerとか使う??
割と読みやすいコードでした
16
作ってみたシステムの構成
17
BufferedSataIface
18
内部でキャッシュ
単純なWriteBack機構
リソース使用量/速度など
PHY単体では3Gbpsでリンク全体では1.5Gbpsでネゴ完了
19
動いている様子(1)
20
リンク確立の開始
OOB
D10.2
動いている様子(2)
21
リンク確立
B5B5957C(SYNC)
7B4A4ABC(ALIGN)
動いている様子(3)
22
ホストからコマンド発行
3737B57C(SOF) <データ> D5D5B57C(EOF)
動いている様子(4)
23
転送開始
37375B57C(SOF)...
動いている様子(5)
24
転送完了
..D5D5B57C(EOF)
で,気になる性能は??
25
えーっと...動くのは分かった...
4KB(=8セクタアクセス)じゃ性能でないよね
ロジック回路が37.5(75)MHzは寂しいよね
ってか,エラー処理は?
26
→上位レイヤも作り直そう...
上位層の作り直し
Spartan-6での3Gbpsでのネゴ実現
NCQなどの上位コマンドの実装
RAID,みたいな?
もっとインテリジェントな何か?
今後
27
FPGA用(?)SATA接続キット
28
SATAデバイスにアクセスするため“だけ”の最小構成
欲しい人いませんか?
SATA?フィルムケーブルFMC?
たとえば,こんな風に使えるといいな
29
俺のFPGAがこんなかんたんに
SATAディスクにアクセスできる
はずがない
次回(時期未定)