...

FPGAでシリアルATA コントローラを設計する FPGAでシリアルATA

by user

on
Category: Documents
9

views

Report

Comments

Transcript

FPGAでシリアルATA コントローラを設計する FPGAでシリアルATA
FPGAでシリアルATA
コントローラを設計する
第 3 回 シリアルATAコアの設計とシミュレーション
菅原 博英
いよいよシリアルATAコントローラのコア(SATA_CORE)部分を設計する.コア内部の構造やコアの入出力信
号,スクランブルの内容などについて解説し,最後にコアのシミュレーション波形も示す. (編集部)
前回(2008 年 8 月号,pp.172-179)は,シリアル ATA を
の部分は自作というわけにはいきません.しかし図 2 のよ
搭載可能な FPGA の,トランシーバ部分の使い方と確認
うに,仮にもう 1 台のパソコンと評価用ボードを用意し,
方法について記述しました.今回は,FPGA 内部ゲートに
そのパソコンにデバイスのような応答を行う(エミュレー
実装するシリアル ATA のディジタル・コア部分を新規設
トする)ソフトウェアを搭載できれば,簡単なデバイス機
計し,その概要を解説します.このディジタル・コア部分
能をつかさどることができます.
を SATA_CORE と呼ぶことにします.ただし,SATA_
このシステム構成例における,SATA_CORE を含んだ
CORE 全体を詳細に解説するには誌面が足りないので,本
FPGA 全体の概要を図 3 に示します.SATA_CORE は
連載の説明は SATA_CORE を使用する場合に理解が必要
PCI バスを制御する PCI_CORE と FPGA 内でその(クロッ
と思われる部分にとどめます.
ク同期化などを行う)接続回路を経由して接続されます.
この部分のインターフェース信号を内部コア・インター
フェース信号と呼びます.また,SATA_CORE は入出力
1.SATA_CORE の構成
● SATA_CORE 全体の構成
CPU
SATA-HBA(Host Bus Adaptor)は,ここで PCI バスの 1
機能ブロックを構成します.この場合,SATA_CORE は
HBAとして
動作させる
マザーボード
図 1 にシリアル ATA 全体のシステム構成例を示します.
MCH
ICH
ホスト側
FPGA
HBA としてホスト機能をつかさどることになります.ま
た,SATA_CORE そのものにデバイス機能も持たせます.
PCIバス
デバイスであれば,通常ハード・ディスク・ドライブ
(HDD)のような記憶デバイスを含む必要がありますが,こ
デバイス・エミュレーション・
プログラムを実行
CPU
マザーボード
CPU
ノース・ブリッジ
(MCH)
デバイスとして
動作させる
MCH
ICH
メイン・
メモリ
FPGA
デバイス側
サウス・ブリッジ
(ICH)
PCIバス
FPGA
PCIバス
図 1 シリアル ATA システム構成例
SATA
ケーブル
SATA
HDD
デバイス側は,コネクタをデバイス用とするか,接続ケーブルの送信と
受信信号を入れ替えたクロス・ケーブルを用意する必要がある
図 2 デバイス(HDD)エミュレート構成
164 KEYWORD ―― シリアル ATA コア,リンク層,FIS 転送,8B/10B 変換,スクランブラ
Sept. 2008
FPGAでシリアルATA
コントローラを設計する
の差動信号と接続するため,FPGA のトランシーバとも接
FPGA SerDes回路
(アナログ・マクロ)
続します.この部分のインターフェース信号をアナログ・
アナログ・コア・インターフェース
コア・インターフェース信号と呼びます.両信号の一覧と
説明を表 1 に示します.
SATA_CORE
SATA_CORE はこの二つの(FPGA の)内部インター
FPGAセル
フェースを持った IP コアとなります.この IP コアはその
内部コア・インターフェース
信号同期化回路
まま,あるいは必要に応じて改造して,FPGA 内に実装し
PCI_CORE
て使用されることを想定しています.
…
● SATA_CORE 内部ブロック間
この SATA_CORE 内部のブ
ロック構成を図 4 に示します.各
ブロックはできるだけシリアル
図 3 SATA_CORE を含む FPGA 全体の概要
表 1 SATA_CORE の入出力信号
の初期化シーケンスを制御するとと
名 前
レジスタ・バス
I_CMD_CS
I_CMD_ADR
I_CMD_HOST
I_CMD_WE
I_CMD_RE
I_CMD_WD
O_CMD_RD
O_CMD_NRDY
DMA バス
I_DMAC_STT
もに,受信側は 10B データ× 4 個
I_DMAC_XMT_DEV
1
入力
I_DMAC_CNT
I_DMAC_WDV
I_DMAC_WD
I_DMAC_RDW
O_DMAC_RD
32
1
32
1
32
入力
入力
入力
入力
出力
.v モジュールで,リンク上位層の
O_DMAC_DATA_INC
1
出力
機能をサポートします.このモ
設定,クロック
I_HOST_MODE
CLK
RST_N
1
1
1
入力
入力
入力
ATA 規格の各階層に応じて分割
しましょう.
アナログ・コア・インターフェー
ス側に配置されるのは PHY_LINK
_IF.v モジュールで,PHY 層の
ディジタル部分とリンク下位層の機
能をサポートします.つまり,PHY
(= 40 ビット)を 32 ビット(+ K
キャラクタ)の Dword へ組み立て
ます.送信側はその逆を行います.
次に配置されるのは LINK_TOP
ジュールは内部クロックに同期し
て い ま す . PHY_LINK_IF.v と
れます.
LINK_TOP.v モジュール内部に
は,データ操作パスと,それらを
制御する機能があります.データ
操作パスは,受信した Dword から
Frame Information Structure(FIS)
相当部分だけ抜き出しデスクラン
ブルしてトランスポート層へ渡す,
あるいはトランスポート層からの
Sept. 2008
ビット数 入出力
2
4
1
1
1
16
16
1
入力
入力
入力
入力
入力
入力
出力
出力
1
入力
説 明
チップ・セレクト
アドレス
アドレス・モード(文中参照)
ライト・イネーブル
リード・イネーブル
ライト・データ
リード・データ
アクセス・ノット・レディ
DMAC スタート
DMAC 方向
〔1 : SATA 送信(ライト),0 :受信(リード)〕
データ数(ダブルワード単位)
DMAC ライト・データ・バリッド(有効)
DMAC ライト・データ
DMAC リード・データ・ウェイト
DMAC リード・データ
DMACデータ・カウント(ライト時は受け取り応答.
リード時は送り出し応答)
SATA 動作モード(1 :ホスト,0 :デバイス)
内部クロック
SATA_CORE 全体リセット
(a)内部コア・インターフェース信号
LINK_TOP.v 間のデータ受け渡し
は,同期用の小容量 FIFO で行わ
PCI用I/O
名 前
データ系
PHY_TD
PHY_TDV
PHY_RD
SQUELCH
再同期
PLL_TRAIN
PLL_LOCKED
クロック
CLK_T
CLK_R
ビット数 入出力
説 明
10
1
10
1
出力
出力
入力
入力
送信データ(10B)
送信データ・バリッド(1 :出力,0 : Squelch〔Hi-z〕
)
受信データ(10B)
受信信号が Squlech 状態
1
1
出力
入力
受信クロックの受信データへの同期化指示
受信クロックの受信データへの同期化完了
1
1
入力
入力
送信クロック(150MHz ; 1.5Gbps 転送の場合)
受信クロック
(b)アナログ・コア・インターフェース信号
165
Fly UP