オンラインショップ
問い合わせ
即日発送 送料無料 佐川急便かクロネコでお届け。カード、銀行振り込み、代引き決済。
製品情報>販売終了製品>EXPARTAN-6T>SATAサンプルデザイン

SATAサンプルデザイン

サンプルデザインの概要

特電SATA IPコアを用いたFPGAのリファレンス・デザインとして、特電SATAサンプル・デザインを用意しています。

特電SATA IPコアに、本デザインで提供するホストラッパを被せることで、Parallel ATA(以下、PATAと略す)と同様の方式でSATAにインタフェースすることができるようになります。

 

当サンプル・デザインにはUSBとPATAを接続するインタフェースも含まれており、Windows PCからUSBを介してSATAデバイスに対してアクセスすることができるようになります。

 

つまり、USBからPATAを経由してSATAにアクセスすることができます。

 

図1 特電SATA IPコアとホストラッパ

 

ターゲットボードとの接続

? EXPARTAN-6Tの側面にあるSATAコネクタに、SATAデバイス(HDD,SSD等)を接続します。

? EXPARTAN-6TのUSBポートに、コントロール用のWindows PCに接続します。

? EXPARTAN-6Tの電源はDC5Vのアダプタを接続します。(基板上のジャンパJ3はオープンにする)

 

写真1 EXPARTAN-6TとHDD/SSDとの接続

 

サンプルデザインを動作させるための準備

最初に、下記のURLから無償評価版をダウンロードしてください。

 

 SATA IPコア評価版とサンプルアプリ ダウンロード

 

EXPARTAN-6T上のSPIフラッシュROMに、上記のアーカイブの中にある"sata-expartan6t-050.bit"を書き込んでください。また、上記の「ターゲットボードとの接続」に従って、EXPARTAN-6Tとターゲットボードを接続し、電源を投入してください。

 

基板上のLED D1とD2が共に点灯すれば、準備は完了です。

 

サンプルデザインの使用方法

MS-DOSプロンプトを起動したら、添付されているsatatest.exeを起動してください。

HDD/SSDが接続されていてリンクアップが行われると、HDD/SSDのデバイス IDを取得して表示します。

 

図2 サンプルプログラムの起動画面

 

その後、

Enter a command (piord piowr dmard dmawr id reset help ...)

>

と表示されるので、以下のコマンドが使用可能になります。

piord,piowr,dmard,dmawr,power,reset,seek,test,id,init,stat,flush,diag

 

各コマンドの使用方法は以下のとおりです。

PIOモード・セクタ・リード

表1 PIOセクタリードコマンドの書式

書式

piord SECNUM COUNT

機能

PIOモードでのセクタリードを行います。
1セクタ単位で読み出すので比較的低速です。

引数

SECNUMにはセクタ番号を指定します。
COUNTは読み出したいセクタ数です。
COUNTが省略された場合は1セクタが読み出されます。

例

piord 0 100

図3 PIOセクタリードコマンドの実行結果

 

PIOモード・セクタ・ライトコマンド

表2 PIOセクタライトコマンドの書式

書式

piowr SECNUM COUNT TYPE

機能

PIOモードでのセクタライトを行います。
1セクタ単位で書き込むので比較的低速です。

引数

SECNUMにはセクタ番号を指定します。
COUNTは書き込みたいセクタ数です。
COUNTが省略された場合は1セクタに書き込みます。

TYPEは書き込まれるデータの種類を表し、
 [seq | seq2 | seq4 | rand | zero | file filename]の中から選択します。

seqは1バイト単位でカウントアップする数列です。
seq2は2バイト単位でカウントアップする数列です。
seq4は4バイト単位でカウントアップする数列です。
randは乱数列です。
zeroはすべてをゼロで埋め尽くします。
fileを指定した場合は、ファイルから読み出したデータを書き込みます。

例

piowr 0 rand
piowr 100 file test.txt

図4 PIOセクタライトコマンドの実行結果

 

DMAモード・セクタ・リード

表3 DMAセクタリードコマンドの書式

書式

dmard SECNUM COUNT

機能

DMAモードでのセクタリードを行います。

引数

SECNUMにはセクタ番号を指定します。
COUNTは読み出したいセクタ数です。
COUNTが省略された場合は1セクタが読み出されます。

例

dmard 0 100

図5 DMAセクタリードコマンドの実行結果

 

DMAモード・セクタ・ライトコマンド

表4 DMAセクタライトコマンドの書式

書式

dmawr SECNUM COUNT TYPE

機能

DMAモードでのセクタライトを行います。

引数

SECNUMにはセクタ番号を指定します。
COUNTは書き込みたいセクタ数です。
COUNTが省略された場合は1セクタに書き込みます。

TYPEは書き込まれるデータの種類を表し、
 [seq | seq2 | seq4 | rand | zero | file filename]の中から選択します。

seqは1バイト単位でカウントアップする数列です。
seq2は2バイト単位でカウントアップする数列です。
seq4は4バイト単位でカウントアップする数列です。
randは乱数列です。
zeroはすべてをゼロで埋め尽くします。
fileを指定した場合は、ファイルから読み出したデータを書き込みます。

例

dmawr 0 16 seq4
dmawr 100 file test.txt

図6 DMAセクタライトコマンドの実行結果

 

電源管理コマンド

表5 電源管理コマンドの書式

書式

power STATE

機能

HDD/SSDの電源状態を調べます。

引数

STATEには、{idle | standby | sleep | check}の何れかを指定します。
idleが指定された場合には、アイドル状態(すぐに動作できる状態)に遷移します。
standbyが指定された場合には、スタンバイ状態(低消費電力状態)に遷移します。
sleepが指定された場合には、スリープ状態(最も低い電力状態)に遷移します。スリープ状態から復帰するにはハードウェアリセットを行う必要があります。
checkが指定された場合は、現在の電源状態を調べます

例

power sleep
power check

図7 電源管理コマンドの実行結果

リセットコマンド

表6 リセットコマンドの書式

書式

reset [hard | srst | command]

機能

HDD/SSDのリセットを行います。

引数

hardが指定された場合はハードウェアリセットシーケンスを実行します。
srstが指定された場合はSRSTビットをONにしたパケットを送信し、リセットを行います。
commandが指定された場合は、リセットコマンドを送信します。
リセットコマンドを実装していないHDD/SSDの場合は失敗してエラーを返します。

例

reset srst

図8 リセットコマンドの実行結果

シークコマンド

表7 シークコマンドの書式

書式

seek SECNUM

機能

HDDのヘッドを目的のセクタに移動します。

引数

SECNUMにはセクタ番号を指定します。

例

seek 1234

図9 シークコマンドの実行結果

ランダムテストコマンド

表8 ランダムテストコマンドの書式

書式

test [dma]

機能

ランダムなセクタを読み書きし、内容を照合します。

引数

dmaが指定された場合は、DMAモードで読み書きします。

例

test
test dma

図10 ランダムテストコマンドの実行結果

デバイスIDコマンド

表9 デバイスIDコマンドの書式

書式

id

機能

DEVICE IDコマンドを発行し、セクタ数などのパラメータなどを取得します。

引数

なし

例

id

図11 デバイスIDコマンドの実行結果

初期化コマンド

表10 初期化コマンドの書式

書式

init

機能

デバイスの初期化パラメータを設定します

引数

なし

例

init

図12 初期化コマンドの実行結果

ステータスレジスタチェック

表11 ステータスレジスタチェックコマンドの書式

書式

stat

機能

シャドウレジスタを読み出します。割り込みフラグもクリアされます。

引数

なし

例

stat

図13 ステータスレジスタチェックコマンドの実行結果

フラッシュコマンド

表12 フラッシュコマンドの書式

書式

flush

機能

未書き込みのデータがあればディスクに書き込みます。

引数

なし

例

flush

図14 フラッシュコマンドの実行結果

自己診断コマンド

表13 自己診断コマンドの書式

書式

diag

機能

HDD/SSDに内蔵された自己診断機能を実行します。

引数

なし

例

diag

図15 自己診断コマンドの実行結果

 

サンプルデザインの全体構造

このサンプル・デザインの全体構造を図16に示します。

サンプル・デザインは、SATAコア本体と、それをPATA互換にして使いやすくするためのPATA接続ロジック、そしてPHYから構成されます。これらをまとめたものをホストラッパと呼びます。

 

図16 当サンプルデザインの全体構成図

 

サンプル・デザインのトップ階層はmain.vhdで提供されます。サンプル・デザインにはホストラッパとUSB接続ロジックの2つのモジュールが含まれます。ホストラッパはVHDLで記述されたソースコードとして提供され、SATAトランシーバとSATA IPコアのインスタンシエーション、およびPATA接続ロジックから構成されます。

 

このSATAトランシーバは、XILINXの提供するCoreGeneratorを利用して作られたもので、Spartan-6のGTPを活用するモジュールです。このモジュールはソースコードとして提供されています。ユーザはソースコードを編集して、GTPトランシーバのパラメータを調整することができます。また、PATA接続ロジックはホストラッパ中にVHDLのソースコードで記述されています。SATA IPコアはネットリスト(satacore.ngc)で提供されます。

 

ユーザ・アプリケーションを作成する場合は、ホストラッパをインスタンシエートする形で作ります。ホストラッパのインタフェースはPATAと互換性のある信号を用意しているので、ユーザはホストラッパに対してPATA互換の信号を与えることにり、SATAデバイスにアクセスすることができるようになります。

 

論理合成ツールはXILINX ISE13.2(以降)を使用します。ISEは無償のWebPACKを使用することができます。

 

ホストラッパの入出力ポート

ホストラッパの入出力ポートの定義を次の表1に示します。

 

信号名 バス幅 方向 説明

GTPの接続

refclkp_ip   入力 150MHzの差動クロック入力
refclkn_ip   入力 150MHzの差動クロック入力
rxp0_ip   入力 SATA0(ホスト)の受信信号
rxn0_ip   入力 SATA0(ホスト)の受信信号
rxp1_ip   入力 SATA1(デバイス)の受信信号
rxn1_ip   入力 SATA1(デバイス)の受信信号
txp0_op   出力 SATA0(ホスト)の送信信号
txn0_op   出力 SATA0(ホスト)の送信信号
txp1_op   出力 SATA1(デバイス)の受信信号
txn1_op   出力 SATA1(デバイス)の受信信号

クロック、リセット等

clk75m_o   出力

リカバリクロックを元にした75MHzの出力
コア内部で使用

clk150m_o   出力

リカバリクロックを元にした150MHzの出力
clk150m_oの2倍速

Userclk_i   入力 ユーザ回路のクロック。PATAインタフェースはこのクロックに同期して動作する
reset_I   入力 リセット入力(正論理)
linkup_o   出力 物理層のリンクアップを示す

Parallel ATA インタフェース

pata_csn_I [1:0] 入力 PATAのCS[1:0]#に相当
pata_da_I [2:0] 入力 PATAのDA[2:0]に相当
pata_ddi_I [15:0] 入力 ライトデータ。PATAのDD[7:0]に相当
pata_ddo_o [15:0] 出力 リードデータ。PATAのDD[7:0]に相当
pata_ddir_o    出力 DDOからデータが出力される間は'1'になる
pata_intrq_o    出力 PATAのINTRQに相当
pata_dmarq_o    出力 PATAのDMARQに相当
pata_dmackn_I    入力 PATAのDMAACK#に相当
pata_diorn_I    入力 PATAのDIOR#に相当
pata_diown_I    入力 PATAのDIOW#に相当
pata_iordy_o    出力 PATAのIORDYに相当
pata_resetn_I    入力 PATAのRESET#に相当するリセット入力(負論理)

SATAレジスタ (未実装)

sata_scr0_o    出力 Statusレジスタの値
sata_scr1_o    出力 Errorレジスタの値
sata_scr1_clr_I    入力 エラーレジスタをクリアする
sata_scr2_I    入力 Controlレジスタにセットしたい値
sata_scr2_wr_I    入力 コントロールレジスタを更新する

以下、デバッグ用の信号 (ATAレジスタへの直接アクセスを含む)

sata_status_o [7:0] 出力 各種のステータス(詳細はソースコードを参照)
rtfr_int_o    出力 受信した割り込みトリガ信号
piord_active_o    出力 PIO Data Inモードが動作中
piowr_active_o    出力 PIO Data Outモードが動作中
dmard_active_o    出力 DMA Data Inモードが動作中
dmawr_active_o    出力 DMA Data Outモードが動作中
rtfr_error_o [7:0] 出力 受信したERRORレジスタの内容
rtfr_seccnt_o [15:0] 出力 受信したSectorCountレジスタの内容
rtfr_secnum_o [15:0] 出力 受信したSectorNumberレジスタの内容
rtfr_cyllow_o [15:0] 出力 受信したCylinderLowレジスタの内容
rtfr_cylhigh_o [15:0] 出力 受信したCylonderHighレジスタの内容
rtfr_devhead_o [7:0] 出力 受信したDevice/Headレジスタの内容
rtfr_status_o [7:0] 出力 受信したStatusレジスタの内容
rtfr_trnscnt_o [15:0] 出力 受信した転送カウント数(バイト単位)
debug_o [15:0] 出力 デバッグ出力

 


© 2017 TokushuDenshiKairo Inc. All rights reserved