Comments
Description
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