e7SATAFMC - FPGA開発キット

FPGA SATA開発キットは,SATAとFGPAを搭載したコンパクトなボードAxfmc6040とHDLで実装されたe7SATA IPコアで構成される,FPGAからSATAデバイスにアクセスする製品開発および研究のためのキットです.

FMC LPCコネクタを介して,他のFPGAボードなどとの通信も可能です.

主要部品のスペック

  • FPGA XC6SLX45T-3C
  • DDR3SDRAM MT41K128M16JT-125 (2Gb)
  • IO
    • CSI-2 x2
    • FMC LPC
    • SATAポートx2
  • その他
    • LEDx8 + LEDx1
    • プッシュボタンx1

ページ下部の写真もあわせて,ご参照ください.

クイックスタートガイド(動作確認)

1. Zedboardを使って動作確認

ZebdoardのFMCにAxfmc6040を接続して動作確認をすることができます.Zedboard側には,下記Zedboad用のファームウェアを合成しておく必要があります.

0. 準備

  1. e7SATAボードのROMにファームウェア(MCS)を書き込む
  2. Zedboardをe7SATAアクセス用のモジュールを組み込んだファームウェアで起動,その上でXillinuxを起動させる
  3. Xillinux上でテスト用のソフトウェア一式を展開

1. Identifyコマンドの実行

  1. ./lvds_reset でLVDSの経路を初期化
  2. ./identify を実行
  3. SATAディスクからIdentify情報が返されることが確認できます.

2. SATAからデータを読み出す

  1. ./lvds_reset でLVDSの経路を初期化
  2. ./sata_read を実行
  3. SATAディスクの0セクタ目から8KBのデータの読み出しが確認できます

3. SATAのデータ読み出しスループットを計測する

  1. ./lvds_reset でLVDSの経路を初期化
  2. ./sata_recv を実行
    1. このプログラムを実行すると(引数で指定した値 + 1)*16セクタ= (引数で指定した値 +1) * 8KBのデータを連続して受信するまで待機します
    2. はじめの16セクタを受信した直後から,最後のデータを読み出すまでの時間を計測します.
  3. 別のターミナルで,./sata_read_cmdを実行
    1. 引数は,開始セクタ番号 セクタ数です
    2. sata_recvを使って速度を測定する場合は,sata_recvの引数に指定した値nに対して,16*(n+1)の値を指定してください
  4. ./sata_recvが指定したセクタを受信した後,スループットが表示されます.

4. 任意のFISパケットを投げる

identfiy.cを参考に5DWORD(20Byte)のデータにFISコマンドを設定することで,任意のFISコマンドを発行できます.

リソース(サポートページからダウンロードしてください)

  • 回路図
  • e7SATAプロジェクト一式(Xilinx ISE 14.7用)
  • 20140904版ROM書き込み用MCS
  • e7LVDS IPコア ドキュメント
  • 動作テスト用Zynqプロジェクト一式(別途Xillybusが必要)
  • 動作テスト用ソフトウェア(別途Xillinuxが必要)

ファームウエアのご利用には,以下の使用許諾契約への同意がひつようです.

 e7SATA IPコア使用許諾契約書e7lvds IPコア使用許諾契約書

IPコア内部構造とインターフェースについて

ReqのUPLにはディスクに送信したいFISパケットをそのまま入力します.

StatusのUPLには,ReqへのFIS送信結果が返されます.32bitの固定長データで,正常終了=0x00000001,再送タイムアウト=0x00000002です.

ReplyのUPLからは,ディスクから送られてくるFISパケットが出力されます.ただし,ディスクから返されるFISパケットの先頭にバイト数を示す32bitのヘッダが付与されます.

IPコア内部構造とインターフェースについて

ReqのUPLにはディスクに送信したいFISパケットをそのまま入力します.

StatusのUPLには,ReqへのFIS送信結果が返されます.32bitの固定長データで,正常終了=0x00000001,再送タイムアウト=0x00000002です.

ReplyのUPLからは,ディスクから送られてくるFISパケットが出力されます.ただし,ディスクから返されるFISパケットの先頭にバイト数を示す32bitのヘッダが付与されます.

#

クイックスタート用の回路とLVDSインターフェースについて

FMCで他ボードのFPGAと通信するために,e7LVDSIfaceを使っています.e7LVDSIfaceはe7SATAコアへのUPLポートとの単純なブリッジを提供しています.下図はクイックスタートとして提供しているサンプルシステムのオーバービューです.

#


ボード外形・概要

#

#

Zynq用Xillybusファームウェアの合成

次の手順で合成してください

  1. XillybusよりZedboard用のデモプロジェクトをダウンロード
  2. Xillybusの手順にそってデモファームウェアを合成
  3. 本ページよりXillybus用のe7SATAテストリソース一式をダウンロード
  4. ダウンロードしたe7SATAリソースをXillybusデモプロジェクトの下に展開
  5. 展開したディレクトリ下のsourceに移動し,setup.shを実行
  6. 展開した中のISEプロジェクトファイルで合成

e7SATAテストリソースからみて../systemや../oncerunにXillybusのリソースがみえている必要があります.

よく使うFISパケットの例

よく使うFISコマンドを紹介します.

IDENTIF

デバイス識別情報を取得します.リクエストパケットのフォーマットは次の通りです.

0x00ec8027
0xe0000000
0x00000000
0x00000000
0x00000000

デバイスからは,次のようなパケットがかえってきます.

#

DMA READ EXT

ディスクから指定したセクタのデータを読みだすためのコマンドです.

0x00258027
0xe0000000 + (lba[23:0] & 0x00FFFFFF)
lba[47:24]
sector & 0x0000FFFF
0x00000000

ここで,lbaは読み出しを開始するセクタアドレス,sectorは読み出すセクタ数です.

デバイスからは,次のように,パケット長(4Byte)とデータを示すフィールド(4Byte)のヘッダに続いてデータが出力され,最後にRegD2Hパケットが送られてきます.

#

FISパケットの制約から8KB以上のデータは複数のパケットに分割されます.その場合,

HEADER DATA HEADER DATA ... HEADER DATA RegD2H

となります.

DMA WRITE EXT

ディスクにデータを書き出すためのコマンドです.

0x00358027
0xe0000000 + (lba[23:0] & 0x00FFFFFF)
lba[47:24]
sector & 0x0000FFFF
0x00000000

ここで,lbaは読み出しを開始するセクタアドレス,sectorは読み出すセクタ数です.

このコマンドを送った後に,データを示す4Byteのヘッダ 0x00000046に引き続いてデータを送るとディスクに書き込まれます.

データが受理されるとRegD2Hが返送されます.

リードデータ同様,FISパケットの制約から8KBを超えるデータは8KBずつに分割して転送する必要があります.各FISパケットが受理される毎にRegD2Hパケットがディスクから送り返されてきます.