...

ドライバのMSIマザーボード

by user

on
Category: Documents
2

views

Report

Comments

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
Fly UP