Comments
Description
Transcript
ドライバのMSIマザーボード
Chapter 1 PCI Express の基礎知識 Chapter 1 Chapter 1 PCI Express の基礎知識 バス接続からポイント-ポイント接続へ PCI バスとの比較から見る PCI Express の基礎知識 1.似て非なる PCI と PCI Express PCI と PCI Express は名前は似ていますが,実は全く異 なる規格のバスです.双方の主な特徴を表 1 に示します. (b)PCI アドイン・カードの端子部分 PCI Express ×16 PCI Express ×1 PCI (a)PCI と PCI Express を備えたマザーボードのコネクタ 表1 PCI と PCI Express の特徴 (c)PCI Express アドイン・カードの端子部分(× 1) PCI/PCI-X PCI Express トポロジ バス型 ポイント・ツー・ポイント型 プロトコル 多数の制御信号を用いる パケット処理 伝送方式 パラレル(32/64 ビット) ,シングルエンド信号 シリアル,差動信号 伝送速度 33MHz ∼ 1066MHz 2.5Gbps(1 レーン当たり) 高速化の方法 バス幅を広げる, クロック速度を上げる, DDR や QDR を採用する,など エラー・ チェック方法 ¡パリティ・エラーの検出(PCI) ¡ECC チェックの検出(PCI-X) ¡検出したエラーの処理方法については規格では 定めていない 写真 1 PCI と PCI Express のコネクタ レーンを増やす (× 1,× 2,× 4,× 8,× 12,× 16,× 32) 伝送速度を上げる〔Gen2(5Gbps) ,Gen3(8Gbps) 〕 ¡2 段階の CRC チェック ¡無効なシンボルのチェック ¡パケットの形式チェック ¡自動的な再送 ¡エラー・レポート 通信の品質 システムの設計者による ¡フロー・コントロールによって自動的に速度を制限 ¡QoS(Quality of Service)によって重要な通信の品質を確保 耐故障性 1 本でも信号が切れたら全く通信できない 一部のレーンが故障しても残ったレーンを用いて動作できる 11 11 Chapter 2 PIPE インターフェースと PHY チップの使い方 Chapter 2 NXP 社製 PX1011A & TI 社製 XIO1100 と FPGA の接続 PIPE インターフェースと PHY チップの使い方 ば,スペクトラム拡散に対応した PHY を持った FPGA で 1.PIPE とは なければなりません.また,PCI Express の高速差動信号 は,電気的アイドルの送信や検出,レシーバの検出など, ● 物理層と論理層を接続する重要なインターフェース PCI Express は,2.5Gbps という伝送速度をもつ高速シ データ転送以外にもいろいろなことをやらなければなりま せん. リアル・インターフェースです.一般に,この速度の信号 FPGA に内蔵されている PHY 機能は汎用的なものなの を直接扱うことができる FPGA はピン数も多く高価で,複 で,こういう特殊なステートを実現できるかどうかはケー 数の大電流と高精度な電源が必要になるなど,手軽に扱え ス・バイ・ケースですが,PHY チップを使うと確実に実 ない場合も多いでしょう. 現できます. × 1 の速度でもよいから,とにかく PCI Express に対応 させたいという場合には,物理層(PHY)チップを使うと 便利です.PHY チップは,シリアル-パラレル変換や弾性 バッファなど,PCI Express の物理層の高速で難しい処理 また,FPGA に実装する IP コアの入出力を PIPE に適 合させると,以下のようなメリットもあります. ¡複数のメーカの PHY チップの中から最も用途に適合 するものを選択できる を行ってくれる(図 1)ので,FPGA は PCI Express のリン ¡125MHz 程度で動作する安価な FPGA でよい ク状態を管理する LTSSM(リンク・トレーニング・ステー ¡電気的アイドルやスペクトル拡散,レシーバの検出な トマシン)やレーン間デスキューといった,論理層(MAC) より上の層の処理に専念することができます. どの特殊な状態に対応できる ¡弾性バッファのように,複数のクロック・ドメインを PHY チップと MAC 層の間のインターフェースの方法 は,Intel 社がパイプ(PIPE : PHY Interface for the PCI Express Architecture)という規格を策定しています. 本章では,PHY チップと PIPE の使い方について解説し Spartan3など FPGA ¡物理層の上流部分や TLP,DLPの処 理をする ¡100%ディジタル回路で作られている ¡125MHzで動けば十分 (設計者の個性が現れる) ます. ● PHY チップを使うメリット PCI Express のアドイン・カードを実現するには,高速 シリアル・インターフェースを内蔵した FPGA を用いる方 法のほか,専用の外付けチップ(PHY チップ)を使う方法 XIO1100, PX1011Aなど PHY チップ ¡高速シリアル-パラレル変換などGHz 級の動作をする ¡弾性バッファのように複数のクロック を扱う ¡PLLや送信バッファなどのアナログ回 路(汎用的な部品で作るのは難しい) があります.PHY チップを使うと,低価格な FPGA を利 用できること以外にもいくつかのメリットがあります. 例えば,PCI Express のクロックはスペクトラム拡散が 施されているので,FPGA でダイレクトに実現するなら PCI Express コネクタ 図 1 PHY チップを使うと PCI Express が簡単に作れる 27 27 Chapter 3 200MHz を超える I/O を扱うロジックを FPGA に実装する方法 信号遅延の要因とタイミング調整,Double Data Rate 動作 の活用 Chapter 3 200MHz を超える I/O を扱う ロジックを FPGA に実装する方法 最近の FPGA は,当たり前のように 100MHz 以上の速 ク周期(すなわち最大のクロック周波数)を指定することが 度で動作するようになってきました.しかし,プリント基 できます.配置配線ツールは,この指定を守るように最大 板上の配線で 100MHz を超える信号を扱うことは,それほ 限の努力を払います. ど簡単ではありません. NET "clk" TNM_NET = "clk"; FPGA が出力する信号は,何も工夫しないと図 1(a)の ように,バラバラのタイミングで出力されます.このよう な波形では 100MHz を超えたあたりからその動作がだんだ TIMESPEC "TS_clk" = PERIOD "clk" 5 ns HIGH 50 %; ● FPGA の最大動作周波数は何で決まるか ん怪しくなってきます.できれば,出力は図 1(b)のよう Xilinx 社の無償開発ツール ISE WebPACK 9.1i を用い に,すべての信号が同じタイミングで遷移するのが理想で て,リスト 1 のような 32 ビット・カウンタを作ってみま す.このような波形ならば,I/O の周波数はどこまでも上 した.デバイスは,Spartan-3E/1200 を指定しました.論 げることができるでしょう. 理合成後,レポート中のタイミング・サマリを見ると 192 本章では,FPGA の入出力パッドのタイミングを自由自 MHz という結果が表示されていました.これは論理合成 在に操り,200MHz を超える I/O でも安定して動作する回 時点での予測値なので,実際のデバイスに配置配線した後 路の作り方について考えます. の結果とは若干異なります.UCF ファイルで制約をかけ て配置配線すると,4.823ns(207MHz)まで上がりました. では,なぜ 192MHz や 207MHz という結果が出たので 1.FPGA の実力 しょうか.FPGA の動作タイミングは,図 2 のように考え ることができます.最大動作周波数は,FPGA 内のフリッ ● PERIOD 制約とクロック周波数 Xilinx 社の FPGA を使って回路設計をする場合,UCF プフロップのセットアップ・タイムと,組み合わせ回路の ファイルに PERIOD という制約を書くと,最小のクロッ 遅延時間,配線の遅延,フリップフロップの出力遅延時間 の和の逆数となります. リスト 1 32 ビット・カウンタの HDL ソース Port ( clk FPGA PHY チップ (a)普通に設計した場合,出力 される信号のタイミングが ばらついてしまい高速動作 ができないため,100MHz 程度が上限になる FPGA PHY チップ (b)FPGAのI/Oを工夫した場合, タイミングがそろうように なり,数百MHzの速度でも 扱えるようになる 図 1 パラレル信号はタイミングをそろえるのが難しい : in STD_LOGIC; ∼中略∼ signal count : std_logic_vector(31 downto 0); ∼中略∼ process(clk) begin if(clk’event and clk = ‘1’) then count <= count + 1; end if; end process; count_op <= count; 39 39 Chapter 4 PCI Express の物理層 Chapter 4 Chapter 4 PCI Express の物理層 PIPE のアクセス方法と物理層リンクアップの流れ PCI Express の物理層 FPGA と PHY チップを PIPE でつなぐと,どのような ¡受信した DLLP(データリンク層パケット)と TLP(ト データが送られてくるのでしょうか.図 1 は,実際に送ら ランザクション層パケット)を DLL 層へ渡す れてきたデータをキャプチャしたものです.こういった ¡TLP,DLLP,オーダード・セットを送信する データを解析して処理するのが物理層の仕事です.そこで 本章では,物理層の作り方について考えます. ¡× 2 以上の構成では Byte Striping とその復元を行う ● K コード PIPE のデータ・バスには,8 ビットのデータのほか,通 常のデータとコマンドの区別を表す 1 ビットの符号があり 1.物理層は何をやっているか ます.この符号が立てられると,K コードという特殊なコ PCI Express の物理層は,電気サブブロックと論理サブ マンドとして扱われます.PCI Express で使われる K コー ブロックに分けられます(図 2).PHY と FPGA 間を接続 ドの一覧を表 1 に示します.通常のデータは,D コードと するインターフェースは PIPE(パイプ)と呼ばれます.PHY 呼ばれます. は第 2 章で解説したとおり,電気サブブロックを担当しま ● スクランブル す.本書で設計する IP コアは,論理サブブロックより上 スクランブルというのは,伝送路上を同じデータ(例え ば,通信がない場合の D0.0)が連続した場合に,特定の周 の層を実現します. 論理サブブロックの役割は,次のとおりです. 波数の EMI ノイズが強くなるのを避けるためにデータに ¡オーダード・セット(物理層パケット)を処理する 乱数を足す処理です. ¡リンクの確立とネゴシエーションを行う スクランブル回路は,図 3 のようにして作ります.これ ¡電気的アイドル状態への遷移を管理する は擬似乱数を用いて,入力データの XOR を取るというも ¡必要に応じてスクランブルを行う のです.受信側にも同じ乱数発生回路(LFSR)を用意して K28.5はCOMシンボル(オーダード・セットの先頭の目印) 受信したデータ (8b/10bのシンボルで表示) 受信したデータが有効で あることを示す信号 図 1 PIPE から受信した最初のパケット RX_VALID が有効になって初めて現れたパケットは, 「K28.5 K23.7 K23.7 D10.1 D2.0 D0.0 D10.2 …」という並びであった.この図は筆者の開発した MITOUJTAG というソフトウェアでキャプチャしたもの.FPGA 内部のブロック RAM に波形を溜め込んで,JTAG を通じてパソコンに取り込んで表示している. 49 49 Chapter 5 データリンク層の概要 データリンク層の役割から Ack/Nak プロトコル,CRC 生成回路の設計まで Chapter 5 データリンク層の概要 送信側のデータリンク層は,TLP を送信した後に相手 が Nak を返してきたり,規定時間内に Ack が返ってこな 1.データリンク層の概要 い場合はどこかでエラーが生じたものと判断して,前に送 信した TLP を再び送ります.この再送のメカニズムにト ● データリンク層とは データリンク層は,トランザクション層と物理層の間に ランザクション層は関与しないため,データリンク層が自 あり(図 1),PCI Express の 3 階層の中間部分を構成して 発的に行わなければなりません.そのため,データリンク います.この層の目的は,リンクの両端の二つのデバイス 層はトランザクション層から受け取った TLP を一時的な 間で TLP(トランザクション層パケット)を確実に交換す バッファに保存しておき,必要になったらいつでも再送で るしくみを提供することにあります. きるように備えています. データリンク層が提供するサービスには,データ交換, フロー・コントロールは,受信側の処理速度に合わせて エラー検出と再送,フロー・コントロール,初期化とパ 送信速度を制限するためのしくみです.このしくみを実現 ワー・マネージメントがあります(表 1). するため,リンクの両端のデバイスは,フロー・コント データ交換は,トランザクション層から受け取ったデー ロール・パケットという DLLP(データリンク層パケット) タを物理層に渡し,物理層から受け取ったデータをトラン を頻繁に交換して,相手の受信バッファの残量を常に監視 ザクション層に渡す機能です. し合っています. エラー検出は,TLP の中に含まれるシーケンス番号と これらのほかに,データリンク層には物理層のリンク状 LCRC(Link CRC ; TLP の中にある 32 ビットの CRC)を 態をトランザクション層に知らせたり,パワー・マネージ チェックして,データが壊れていないか,あるいは途中で メントの処理もあります. パケットが失われていないかどうかを調べる機能です.そ して,リンクの向こう側の通信相手に Ack(肯定応答)ま たは Nak(否定応答)を送り,正しく受け取れたかどうか 表 1 データリンク層の提供するサービス データ交換 を知らせます. ¡トランザクション層から受け取ったデータを物理層に渡す ¡物理層から受け取ったデータをトランザクション層に渡す エラー検出と再送 ソフトウェア層 ¡TLP シーケンス番号と LCRC の生成 ¡再送に備えて TLP を保存しておくこと ¡TLP と DLLP におけるデータ整合性チェック トランザクション層 ¡Ack/Nak プロトコル ¡エラー検出時の報告 データリンク層 PCI Expressの3階層 ¡タイムアウトと再送 フロー・コントロール・パケット通信 図1 データリンク層 の位置 物理層 初期化とパワー・マネージメント ¡リンク状態の追跡 ¡Active/Reset/Disconnected をトランザクション層に通知 71 71 Chapter 6 トランザクション層の概要 Chapter 6 Chapter 6 トランザクション層の概要 トランザクション層の概要から TLP 送受信ブロックの設計 トランザクション層の概要 本章では,トランザクション層の設計を行います.トラ ④(オプションで)エンド・ツー・エンドでのデータ整 ンザクション層の目的は,TLP(トランザクション層パケッ 合性をチェックする ト)と呼ばれるパケットをやりとりして,メモリのリード という動作を行います.いわば,従来の PCI でサポートさ やライト,イベント通知などのトランザクションを処理す れていたような,メモリやコンフィグレーション空間への ることです. アクセスと互換性のある動作を提供します. これらはユーザから見えるデータのやりとりですが,こ ● トランザクションとは のほかにもトランザクション層にはフロー・コントロール PCI Express では,トランザクションという単位でデー や電源管理,QoS(Quality of Service)など,ユーザからは タの転送します.これは,リクエスタ(要求を出す側)とコ 見えない地味な機能もあります. ンプリータ(完了させる側)との間で転送される一連のパ ケットのやりとりのことです. PCI Express では,3 種類のアドレス空間(メモリ空間, 1.トランザクション層の概要 I/O 空間,コンフィグレーション空間)とメッセージ空間 図 1 に示すように,トランザクション層は PCI Express が定義されています.そして,それぞれの空間に対してト のアーキテクチャの最上位に位置づけられています.トラ ランザクション(メモリ,I/O,コンフィグレーション,お ンザクション層は,ソフトウェア層(あるいはデバイス・ よびメッセージ)が定義されています(表 1) .メモリや I/O, コアと呼ばれる)から指令を受けて TLP を生成し,データ コンフィグレーション空間へのアクセスには,リードとラ リンク層を介して相手に送ります.つまり, イトが,メッセージにはベース・ライン注 1 というトランザ ①デバイス・コアからの要求に従って TLP を生成する クションが定義されています. 表 1 では,メモリ・ライトとメッセージ・トランザク ②何らかのリクエスト TLP を受信したら,解読して,デ バイス・コアに要求を伝える ③コンプリーション TLP を受信したら,ペイロードや ステータスを取り出して,デバイス・コアに伝える 注 1 :ベース・ラインという用語には適切な訳が見つからないので,このま ま用いた. 表 1 PCI Express のトランザクションの種類 ソフトウェア層 対象となるアドレス空間 トランザクション層 データリンク層 メモリ PCI Expressの 3階層 I/O 物理層 コンフィグレーション 図 1 トランザクション層の位置 メッセージ (ベンダ定義を含む) トランザクションのタイプ リード NonPosted ライト Posted リード NonPosted ライト NonPosted リード NonPosted ライト NonPosted ベース・ライン Posted (ベンダ定義を含む) 基本的な用途 メモリ空間へのデータ転送 I/O 空間へのデータ転送 デバイスのコンフィグレーションと セットアップ イベント発生の通知と 汎用的なメッセージ伝達 99 99 Chapter 7 PCI Express のコンフィグレーション空間の概要 Chapter 7 Chapter 7 PCI Express のコンフィグレーション空間の概要 PCI バスから大きく拡張された プラグ&プレイを支えるレジスタ群 PCI Express の コンフィグレーション空間の概要 と互換性のあるレジスタが並んでいます. 1.PCI Express の コンフィグレーション空間 PCI コンフィグレーション空間の後ろの 192 バイトは PCI Express 機能構造体などを格納するために,デバイス (や IP コア)の設計者が自由に使ってよい領域です.PCI PCI Express におけるコンフィグレーション空間の全体 Express 機能構造体には,PCI Express 機能レジスタが含 像を図 1 に示します.コンフィグレーション空間は全部で まれます.この領域は PCI Express だけの特別なものでは 4,096 バイトあり,下位 256 バイトは従来の PCI と互換性の なく,PCI 2.2 で定義されたものです. ある領域で PCI(互換)コンフィグレーション空間と呼ばれ 機能構造体や新機能レジスタの役割は,本章の最後で説 ます.上位 3,840 バイトは,PCI Express 拡張コンフィグ 明します. レーション空間と呼ばれる PCI Express 独自の領域です. ● PCI Express 拡張コンフィグレーション空間 ● PCI コンフィグレーション空間 コンフィグレーション空間のアドレス 100h ∼ FFFh の 先頭 256 バイトの領域へのアクセス方法ですが,PC/AT 3,840 バイトは,PCI Express 拡張コンフィグレーション 互換機の場合は I/O ポートの CF8h/CFCh を経由してアク 空間 注 1 と呼ばれ,PCI Express 機能拡張レジスタを格納 セスします. 特に,PCI コンフィグレーション空間の先頭 64 バイト は,コンフィグレーション・ヘッダと呼ばれ,従来の PCI PCI(互換)コンフィグレー ション空間 PC/AT互換機の場合はI/O ポート0xCF8/CFCを通じ てアクセスできる 注 1 :機能レジスタや機能構造体,拡張機能などと似たような名前が多く非 常にややこしいが,「拡張」と付いたものは 100h 番以降のアクセスし にくい領域にあると覚えておけばよい. オフセット 00h 40h PCIコンフィグレーション・ヘッダ DID VID Sta Com Rev Class PCIデバイス依存領域 (新機能レジスタが配置される) 100h HT BAR0 BAR1 BAR2 BAR3 ( PCI Express拡張機能レジスタが 配置される ) BAR4 BAR5 CardBus SID PCI Express拡張コンフィ グレーション空間 従来の方法ではアクセスで きない SVI 拡張エラー・レポーティングやバ ーチャル・チャネル,デバイス・ シリアル番号,電力管理など 図1 コンフィグレーション空間の全体像 従来の PCI コンフィグレーション空間 のほかに広大な領域が用意された. SVID ROM PCIでおなじみの ヘッダ FFFh 119 119 Chapter 8 最も基本的な PCI Express デバイスの設計 Chapter 8 Chapter 8 最も基本的な PCI Express デバイスの設計 コンフィグレーション空間とメモリ空間を実装して メモリ・アクセスをテストする 最も基本的な PCI Express デバイスの設計 基礎知識編で説明してきた,トランザクション層とユー ザ回路との間をつなぐ部分を,コア接続層と呼ぶことにし 1.コンフィグレーション空間の実装 ます. コア接続層は,図 1 のような構造をしています.この中 ● コンフィグレーション・リードの実装 には,コンフィグレーション・レジスタやメモリ・アクセ 第 7 章で説明したように,PCI Express のエンドポイン スのヒット条件を判定する回路が入ります.しかし,コア トには,さまざまなコンフィグレーション・レジスタがあ 接続層の具体的な動作は,PCI Express の規格では定義さ ります.最初に,VHDL でこれらのレジスタを宣言すると れていないので,ここから先はオリジナルの方法で実装を ころから始めましょう(リスト 1). トランザクション層は,ルート・コンプレックスからコ 考えることになります.本章では,このコア接続層の設計 ンフィグレーション・リード・リクエストを受信すると, 方法について解説します. 受け取ったアドレスを rcvd_addr_op バスに出力し, ユーザ回路側 PCI Express コンフィグレーション・ レジスタ user_addr_o[31:0] user_length_o[31:0] user_wdata_o[31:0] user_be_o[3:0] user_dvalid_o user_dreq_o bar2 bar2_wr_o bar2_rdreq_o bar2_rdack_i bar2_rdata_i[31:0] bar1 BAR1用 bar1_wr_o bar1_rdreq_o bar1_rdack_i bar1_rdata_i[31:0] bar0 BAR0用 bar0_wr_o bar0_rdreq_o bar0_rdack_i bar0_rdata_i[31:0] BAR2用 ユーザ回路接続用ポート トランザクション層 access_target BAR 一致判定 R/W イネーブル・ フラグ生成 ‘1’ send_data_ip[31:0] send_data_req_op memrd_req_op memrd_ack_ip rcvd_addr_op[63:0] rcvd_data_op[31:0] rcvd_dvalid_op rcvd_length_op[9:0] rcvd_be_op[3:0] rcvd_avalid_op rcvd_mrd_op rcvd_mwr_op rcvd_cfgrd_op rcvd_cfgwr_op rcvd_cpl_op rcvd_cpld_op 図 1 今回作成するコア接続層の概略構成図 トランザクション層とユーザ回路をつなぐのが主な役割.複雑なロジックはなく,セレクタやアドレスの一致判定回路などがある. 141 141 Chapter 9 汎用 PCI Express デバイス・ドライバの作成 Chapter 9 Chapter 9 汎用 PCI Express デバイス・ドライバの作成 Windows 上からコンフィグレーション空間やメモリ空間に アクセスする 汎用 PCI Express デバイス・ドライバの作成 ● PCI デバッグ・ライブラリの問題点 第 8 章の実験では,開発中のハードウェアにアクセスす ることはできないので,ある程度の開発経験がある読者を 対象に話を進めます.ドライバの開発を行ったことがない るために,参考文献(4)に記載された汎用 PCI デバッグ・ という方は,参考文献(4)や(12)をご一読ください.後者 ライブラリを使用してきました.このライブラリは,ユー は薄めの書籍ですが,DDK を用いたビルド方法からハー ザ・モードのアプリケーションから, ドウェアを直叩きする方法まで,短くまとめて解説されて _MemReadLong( 0x12345678); や, います.これほどまでにエッセンスが凝縮された本は,ほ かに見たことがありません. _IoWriteChar( 0x378, 0x0f); それに対して,USB を使ったデバイス・ドライバの解説 のようなユーザ向け関数を呼ぶだけで,ハードウェアへの 本や解説記事はたくさんありますが,初めて学ぶのには不向 直接アクセスができてしまうという大変素晴らしいもので きです.なぜなら,USB ドライバはハードウェアに直接ア した.しかも,自分で作ったハードウェアだけではなく, クセスしないため,PCI Express とはだいぶ違うからです. 任意のアドレスに対してもアクセスできてしまうという危 険な魅力も持ち合わせていました. 1.WDM 形式の汎用ドライバを作る 汎用 PCI デバッグ・ライブラリは,デバイス・ドライバ (pcidbgnt.sys)ならびに,それを利用するための DLL ● WDM 形式と NT 形式の違い (pcidebug.dll)から構成されています.SYS ファイル Windows のデバイス・ドライバには,古い NT 形式 は DLL の起動時に自動的に組み込まれるため,ユーザ・ (SYS 形式とも呼ぶ)と,Windows 2000 以降で使われるよ アプリケーションから DLL をリンクするだけでよいとい うになった WDM や WDF といった形式があります.これ う使い勝手のよさがありました. らの違いを一言でいえば,ドライバがカーネル・モードの しかし,このライブラリを使って PCI Express にアクセ 特権を利用して勝手にハードウェアにアクセスできていた スしようとすると,以下の問題点があることがわかってき 時代から,ドライバが OS の管理下におかれる階層の一部 ました. 分となったということです(図 1). ¡PCI Express に対するバースト転送を発行できない ¡NT 形式のデバイス・ドライバなので,今後も使える かどうかわからない なぜ,自分が作ったハードウェアを自由に触らせてくれ ないのでしょうか.組み込み CPU を触っているエンジニ アなら,きっとハードウェアを直接アクセスしたくて仕方 ¡コンフィグレーション・リード/ライトを発行したと がないでしょう.しかし,考えてみてください.ハード きに,関係のないレジスタまでアクセスされてしまう ウェアを直接アクセスしたところで,せいぜい I/O ポート そこで,バースト転送の発行を最大の目的として, とメモリ・アクセスしかできませんから,USB やネット WDM(Windows Driver Model)形式の汎用デバイス・ド ワークの先にあるファイル・システムを扱うようなドライ ライバを開発することにします. バまで全部自分で作るのは,とても現実的ではありません. なお,デバイス・ドライバの開発について詳しく説明す そのため,いろいろなシステムで共通して使われる低レ 149 149 Chapter 10 DMA の実装と Windows におけるメモリ管理 Chapter 10 Chapter 10 DMA の実装と Windows におけるメモリ管理 リード/ライトともにバースト転送で転送レートを 上げるには DMA の実装と Windows に おけるメモリ管理 ものです.DMA コントローラはアドイン・カードの設計 1.DMA についての基礎知識 者が設計するもので,その仕様はカードごとに異なります. 本書では,こちらの DMA を扱います. ● DMA とは何か ● DMA のやり方 DMA(Direct Memory Access)とは,周辺装置がメモ PCI Express における DMA は,ハードウェア的には難 リ・バスを操作してメイン・メモリに直接アクセスするこ しいものではありません.エンドポイントの側からメモ とをいいます(図 1).DMA には,大量のデータを転送す リ・リード・リクエストやメモリ・ライト・リクエストを る高速なものと,非同期の低速データを扱うものがありま 発行して,パソコンのメイン・メモリ上のデータを読み出 す.ここでの目的は,アドイン・カード上のデータを高速 したり,データを書き込んだりするだけのことです.した に読み出すことなので,高速な方の DMA を扱います. がって,メイン・メモリ上の物理アドレスと長さを正しく また,PCI Express のルート・コンプレックス(チップ・ セットに内蔵されている)は,メイン・メモリへのアクセ 指定した TLP を発行すれば,自由にパソコンの中のメモ リを読み書きできてしまうはずです. スも担うので,厳密に言えば DMA を行うのはアドイン・ それでは,ここで使う物理アドレスと長さはどうやって カードではなくルート・コンプレックスになります.PCI 調べればよいのでしょうか? ここが,DMA を行うためのデ Express のエンドポイントは TLP(トランザクション層パ バイス・ドライバのややこしいところであり,Windows の ケット)を発行しているだけであって,CPU に対して DMA 提供するしくみの素晴らしいところでもあります. を実行しているわけではありません. 本章では,このしくみについて詳しく見ていきます. しかし,一般的には,アドイン・カード上に置かれた DMA コントローラから要求を発行してメイン・メモリと 2.ハードウェアの実装 アドイン・カードとの間で直接データ転送を行うことを DMA と呼んでいます.PCI のカードでは,バス・マスタ がバースト転送を発生させてメイン・メモリにアクセスす ● TLP 送信ステート・マシンの改良 DMA のハードウェアは驚くほど簡単です.第 6 章で説 ることを DMA と呼んでいましたが,それの PCI Express 版と考えればよいでしょう. CPU ● バス・マスタ DMA とシステム DMA Windows には,バス・マスタ DMA とシステム DMA と メイン・メモリ バス いう概念があります.システム DMA というのは,マザー ボード上に搭載されている共有の DMA コントローラを 使って行うものです.これは本書では扱いません. バス・マスタ DMA というのは,アドイン・カード上に 置かれた DMA コントローラがメイン・メモリと通信する 周辺装置1 周辺装置2 周辺装置3 図 1 DMA とは DMA は周辺装置がバスを操作してメイン・メモリに直接アクセスするこ とをいう.DMA の実行中は,CPU がバスを開放する.この図は簡略化し ているが,実際のパソコンのバスはもっと複雑である. 161 161 Chapter 11 PCI Express の割り込み処理の実装 Chapter 11 Chapter 11 PCI Express の割り込み処理の実装 非同期で発生するイベントをシステムに通知する方法 PCI Express の 割り込み処理の実装 ● PCI Express の割り込み発生方法 PCI Express の割り込みには,従来のレガシ PCI で使わ 1.割り込みのハードウェア れていた INTA# ∼ INTD# をエミュレートする方法と, MSI 注 1 または MSI-X を用いる方法があります.レガシな ● PCI の割り込み処理 レガシな PCI には,INTA# ∼ INTD# という 4 本の割り INTx をエミュレートする方法は,下位互換性のために残 込み信号線(以下,INTx と略)があり,アドイン・カード されています.INTx を用いる方法は簡単であり,システ はこの信号線のどれか一つを“L”レベルにすることによっ ムのブート時からすぐに使えるというメリットがあります. て, システムに割り込みをかけられるようになっていました. しかし,複数の割り込み要因が共有されるというデメリッ この信号は,マザーボード上に並んだ PCI のスロットで トもあります. 共有されていて,順番にひねったようにつながっています PCI Express では,INTx 割り込みを発生させるデバイ (図 1).そして,各信号がワイヤード OR でつながってい スは,MSI または MSI-X か,もしくはその両方をサポー て,複数のカードで同一の割り込みラインを共有すること トすることが必須となりました.デバイスが両方の割り込 も可能でした.例えば,図 1 の例では,スロット1の み方法をサポートしていても,同時に使われるのはどちら INTA# とスロット2の INTB# は,同一の線を使ってい か一方です. ます.それぞれのアドイン・カードが INTA# と INTB# ● INTx エミュレーションによる割り込み発生 を使うなら,これらの割り込みは共有になります. また,INTx はエッジではなく,レベル・トリガです. PCI Express には INTx の物理的な制御線はないので, 仮想ワイヤというしくみでそれをエミュレートします.こ つまり,INTx が“L”レベルの状態にある限り,システム れは,エンドポイントとルート・コンプレックスは INTx に割り込みがかかり続けます. の状態を覚えておいて,メッセージ・パケットを使って変 レガシ PCI は,レベル・トリガとワイヤード OR によっ 化するタイミングを知らせるというものです(図 2). INTx を“L”レベルに下げたい場合には Assert_INTx メッ て,複数の割り込みが共有できていました. セージを送信し, “H”レベルに戻したい場合は Deassert_ 注 1 :Message Signaled Interrupt.PCI 3.0 でオプションとして規定され た方式. 割り込み コントローラへ 図1 レガシ PCI における割り込みのルーティング 割り込みルータは,PCI デバイスの割り込み線をシ ステムの割り込み線に割り当てて接続する. INTx メッセージを送信します.このメッセージ・パケット は,図 3 に示す構造をしています. 割り込み ルータ INTA# INTA# INTA# INTB# INTB# INTB# INTC# INTC# INTC# INTD# INTD# INTD# アドイン・ カード用 スロット1 アドイン・ カード用 スロット2 アドイン・ カード用 スロット3 175 175 Chapter 12 ArriaGX 内蔵トランシーバの使い方と PCI Express コアの移植 Chapter 12 Chapter 12 ArriaGX 内蔵トランシーバの使い方と PCI Express コアの移植 1 チップで PCI Express デバイスを実現できる ArriaGX デバイスの使い方 ArriaGX 内蔵トランシーバの使い方と PCI Express コアの移植 以前は,トランシーバ内蔵の FPGA はとても高価(10 万 円前後)で,小さいパッケージのものがなかったため 10 層 8,632 個の ALM は,ロジック・エレメント数に換算すると 21,580 個相当になります注 1. くらいの基板を作らなければならず,敷居が高いものでし ArriaGX のトランシーバは,Stratix II GX のものをベー た.しかし,現在ではギガビット・トランシーバが内蔵さ スに構築されており,600Mbps ∼ 3.125Gbps の速度で通 れたミドル・クラスの FPGA が安価に発売されて,入手 信ができます.このトランシーバは,PCI Express,ギガ も容易です.また,消費電流も減って基板の設計も楽に ビットEthernet,XAUI,SDI,Serial RapidIO など各種プ なったように思います. ロトコルの物理層へ適合するようにコンフィグレーション そこで本章では,これまでに作ってきたコアを米国 できます. Altera 社のミドル・レンジ FPGA である ArriaGX に移植 EP1AGX20C には,このようなトランシーバが 4 チャネ し,内蔵トランシーバを使って動作させることにします. ル入っています.この評価ボードでは,トランシーバの四 つのチャネルが PCI Express のカード・エッジに出てい 1.ArriaGX と評価ボード ArriaGX は,Altera 社のミドル・レンジ FPGA のファ て,最大で 4 レーンの構成ができるようになっています. 2.内蔵ギガビット・トランシーバ ミリの一つで,ギガビット・トランシーバを内蔵しています. CQ 出版社から発売されている ArriaGX 評価キット(写 EP1AGX20C に内蔵されているトランシーバの特徴を, 真 1)は,ArriaGX の EP1AGX20CF484C6N を搭載した FPGA 評価ボードで,PCI と PCI Express の両方のカー PCIのカード・エッジ ド・エッジを持っています.FPGA の型番の EP1AGX20C はデバイスの規模を,F484 はパッケージの形状(484 ピン BGA)を表しています. EP1AGX20C には,ALM(アダプティブ・ロジック・モ ジュール)が 8,632 個,内蔵メモリが 1,229,184 ビット, 18 × 18 の乗算器が 40 個入っています.ALM というのは この FPGA のロジック・リソースで,8 入力の組み合わせ 回路と加算器,2 個のレジスタから構成されています. 注 1 :ロジック・エレメントで言われても直感的にわかりにくいと思うので 怒られそうだが,米国 Xilinx 社の Spartan シリーズと比べるなら, XC3S1400A のちょっと上くらいか,XC3S4000 の下くらい.Spartan6 と比べるなら LX25 よりも若干大きく LX45 よりも小さいくらいだ ろうか.あえて言うなら 240 万ゲートくらいだと筆者は勝手に思って いる. PCI Expressの カード・エッジ ArriaGX EP1AGX20CF484C6N 写真 1 ArriaGX 評価キット(CQ 出版社) 185 185 Chapter 13 Spartan-6LXT 内蔵トランシーバの使い方と PCI Express コアの移植 Chapter 13 デバイス内蔵高速トランシーバ機能を使って 1 チップで PCI Express デバイスを実現する Spartan-6LXT 内蔵トランシーバの 使い方と PCI Express コアの移植 最近は,低価格帯の FPGA にも,ギガビット・トラン シーバが内蔵されるようになりました.米国 Xilinx 社製の DisplayPort,XAUI などのプロトコルに対応しています. ギガビット・トランシーバはさまざまなプロトコルをサ Spartan-6 にも,Spartan-6LXT からはトランシーバと PCI ポートしていますが,PCI Express 用に設定した場合は, Express ハードウェア・コアが内蔵されています. FPGA 側のインターフェースへは PIPE に準拠した信号が そこで本章では,Spartan-6LXT に内蔵されたギガビッ ト・トランシーバの使い方について説明します. 出てきます. 内蔵ギガビット・トランシーバは GTP と呼ばれ,二つ のチャネルがセットになった GTP_DUAL という単位で構 1.Spartan-6 と内蔵ギガビット・ トランシーバ Spartan-6 は Xilinx 社の低価格 FPGA で,Spartan-6LX と Spartan-6LXT の二つのシリーズがあります.LX は ロジックのみで構成されていますが,LXT はギガビット・ト ランシーバと Integrated EndPoint Block を内蔵していま す.EndPoint Block というのは,いわゆるハードウェア・ マクロで,ユーザのロジック・リソースを使わずに PCI 成され,プリミティブの名前は GTPA1_DUAL です 注 1 . 表 1 Spartan-6 のラインナップ ¡FPGA の規模が大きくてもパッケージが小さいと GTP トランシーバのす べてが使えるわけではない ¡エ ン ド ポ イ ン ト は Gen1 で , × 1 レ ー ン 構 成 . PCI Express Base Specification 1.1 に準拠 デバイス ロジック・ DSP48A1 セル スライス ブロック RAM ブロック 最大 GTP 数 PCIe エンド ポイント・ ブロック数 0 XC6SLX4 003840 008 012 0 Express Base Specification 1.1 に準拠したエンドポイント XC6SLX9 009152 016 032 0 0 を作れます.Spartan-6 のラインナップを表 1 に示します. XC6SLX16 014579 032 032 0 0 XC6SLX25 024051 038 052 0 0 XC6SLX45 043661 058 116 0 0 XC6SLX75 074637 132 172 0 0 XC6SLX100 101261 180 268 0 0 XC6SLX150 147443 180 268 0 0 XC6SLX25T 024051 038 052 2 1 XC6SLX45T 043661 058 116 4 1 XC6SLX75T 074637 132 172 8 1 XC6SLX100T 101261 180 268 8 1 XC6SLX150T 147443 180 268 8 1 ● ギガビット・トランシーバの概要 Spartan-6 のトランシーバの概要を表 2 に示します.最 大 3.125Gbps の速度で,SATA,Aurora,ギガビット Ethernet,PCI Express,OBASI,CPRI,EPON,GPON, 注 1 :「GTP」が何の略語かは不明.Virtex-II Pro のころは Rocket IO と呼 ばれていたが,Virtex-5 では Rocket IO GTP になり,Spartan-6 では ただの GTP と呼ぶようになった. 表 2 Spartan-6 GTP の特徴 速度 614Mbps ∼ 810Mbps,1.22Gbps ∼ 1.62Gbps,2.45Gbps ∼ 3.125Gbps の三つの範囲 対応プロトコル SATA,Aurora,ギガビット Ethernet,PCI Express,OBASI,CPRI,EPON,GPON,DisplayPort,XAUI など 主要 PCS コンポーネント 8B/10B エンコーダ,カンマ・アラインメント,チャネル・ボンディング,クロック・コレクションなど OOB(規格外)信号のサポート PCI Express 用のビーコン,SATA 用の COM 信号など そのほかの特徴 レシーバ・アイ・スキャン,ダイナミック・リコンフィギャラブル,ループバック 疑似乱数パターンによるシグナル・インテグリティの検査,受信/送信バッファのバイパスなど 197 197 Chapter 14 Spartan-6LXT 内蔵エンドポイント・ブロックを使った PCI Express の設計 Chapter 14 デバイス内蔵 PCI Express 対応ハード・マクロを 使いこなして PCI Express デバイスを実現する Spartan-6LXT 内蔵エンドポイント・ ブロックを使った PCI Express の設計 バを持つことで,貴重なユーザ・ロジックを使用せず,追 加のライセンスや費用なしに,FPGA 単体で PCI Express 1.内蔵エンドポイント・ブロックの概要 に対応したデバイスを作れるようになるというわけです. Spartan-6 LXT に内蔵されているエンドポイント・ブ 内蔵エンドポイント・ブロックは,以下のことをハード ロックは,以下のような特徴を持ちます. ウェア的に処理してくれます. ハードウェア・マクロで実装されていて,無償で使える 物理層およびデータ・リンク層レベルの処理 PCI Express Base Specification v1.1 に準拠 コンフィグレーション空間の管理とコンフィグレー × 1 レーン リンク速度は 2.5G ビット / 秒 ユーザ・インターフェースは 62.5MHz/32 ビット幅 ション・レジスタの実装 BAR0 ∼ BAR5(ベース・アドレス・レジスタ)のア ドレス空間にヒットしたかどうかの判断 すなわち,FPGA 内にハードウェア・マクロとして構成 割り込みの発生 されたエンドポイント・ブロックとギガビット・トランシー 電源管理(ASPM)の処理 eptest 内蔵PCI Express エンドポイント・ ブロックのためのLogiCORE IP pcie_bram_top_s6 PCIE_A1 ユーザ・ロジック系 インターフェース (トランザクション・ インタフェース) コ ア の 本 体 で あ る PCIE_A1 の ほ か に, GTPA_DUAL と RAMB16BWER(ブロッ ク RAM)から構成されている.プリミ ティブを何重にもラッパしているが,各 階層は複雑なロジックを実装しているわ けではない.基本的に,VHDL の条件コ ンパイルを行ったり,不要なポートを削 PCI Express系 除したり,固定値を与えているにすぎな インターフェース い.つまり,すべての機能はユーザ・ロ (高速差動信号) ジックを使わずに実現されている. Jan. 2011 pcie_bram_s6 送受信用に二つのpcie_brams _s6をインスタンシエートする ためのラッパ pcie_bram_s6を必要な数だけ インスタンシエートするため のラッパ RAMB16BWER pcie_brams_s6 (受信用) pcie_bram_s6 ブロックRAMを使用するため のラッパ RAMB16BWER … コンフィグレーション系 図 1 内蔵エンドポイント・ブロックと周辺 インターフェース (クロックとリセット) 回路の構成 RAMB16BWER … システム系 インターフェース (クロックとリセット) pcie_brams_s6 (送信用) pcie_bram_s6 pcie_bram_s6 RAMB16BWER GTPA1_DUAL_WRAPPER gtpa1_dual_wrapper_tile GTPA1_DUAL PLLのシミュレーションのた めのラッパ GTPA1_DUALの イ ン ス タ ン シエートとGTPのパラメータ 設定 215 215 Chapter 15 PCI Express アドイン・カードの設計 物理的寸法から信号線の引き回し, 基板のインピーダンス評価まで Chapter 15 PCI Expressアドイン・カードの 設計 例えば,× 1 のアドイン・カードを作る場合,長さにつ いてはハーフまたはフルにするかで最大 167mm か 312mm 1.アドイン・カードの物理的寸法 という選択肢があります.しかし,実際には 312mm の長 ● アドイン・カードの最大サイズ さのアドイン・カードを納められる筐体は少ないので,規 アドイン・カードの物理的寸法は,規格書『PCI Express 格書では 241.30mm よりも短くすることが推奨されていま Card Electromechanical Specification Revision 2.0』 す.また,× 1 のアドイン・カードであっても,消費電流 (以後,CEM と略す)に記載されています. この規格では,アドイン・カードの高さについて「標準 表 1 アドイン・カードの最大サイズ(単位は mm) (Standard)」と「ロー・プロファイル(Low Profile)」とい う二つの基準があり,それぞれの最大の高さが示されてい ×1 ×4 ×8 ます.また,アドイン・カードの長さにも「フル・レング ス(Full Length)」と「ハーフ・レングス(Half Length)」と いう二つの基準があり,それぞれの最大長が示されていま ×1 ×4 ×8 × 16 高さ(最大) 長さ(最大) 標準高さ ハーフ・レングス 111.15 167.65 標準高さ フル・レングス 111.15 312.00 ロー・プロファイル 68.90 167.65 す(表 1,図 1). 312 42.25 56.15 ロ・ープロファイル・ 1.5 カードの最大高さ 3.65 15 12.75 7.2 11.2 12.75 111.15 68.9 フル・レングス・カードの最大長さ ハーフ・レングス・カードの最大長さ 標準カードの 最大高さ 167.65 8 18.35 1.9 図 1 PCI Express アドイン・カードの最大サイズ(単位は mm) Jan. 2011 233 233 Chapter 16 PCI Express アドイン・カードの信号波形を観測 Chapter 16 送出レベルやディエンファシスを変えると 信号波形の何が変わるのか PCI Express アドイン・カード の信号波形を観測 最後の本章では,設計した PCI Express アドイン・カー ドを実際に動かし,その送受信波形を測定してみます. 1.測定環境と差動信号について ● 測定環境 北八王子にあるアジレント・テクノロジー(株)本社に 伺って,Infiniium DSA91304A という高速オシロスコープ 使わせていただきました.そのときの測定機材のようすを 写真 1 に示します. 設計したターゲット基板を PCI Express コンプライアン ス・ベースボードに挿して,ベースボード上のTx+とTx− と書かれたコネクタから送信信号を取り出し,2 本の同軸 写真 1 Infiniium DSA91304A デジタル・シグナル・アナライザを用 いた測定の様子 ケーブルでオシロスコープに接続します[写真 2(a)]. コンプライアンス・ベースボード上にターゲット・ボードが装着されている. 正しい測定を行うためには,このように 2 本のシングル 1169A InfiniiMax Ⅱシリーズ プローブ・アンプ E2695A InfiniiMax プローブ用差動 SMAプローブ・ヘッド (a)2 本の同軸ケーブルで Tx +と Tx −を測定 (b)差動プローブも装着可能 写真 2 測定の様子 243 243 このPDFは,CQ出版社発売の「FPGAでゼロから作るPCI Express」の 内容・購 内容 購 法 部 本です. 法などにつきましては以下のホームページをご覧下さい. http://shop.cqpub.co.jp/hanbai/books/49/49821.htm http://www.cqpub.co.jp/order.htm