DXR165の備忘録

自分用の備忘録です。

PCI/PCI Express バスについて調べてわかったことなど  

最終更新日:2017/11/05

はじめに
PCI/PCI Express(以降PCIe) バスは現在のPCになくてはならない技術です。便利なUSB機器を陰で支えるUSBコントローラもCPUとはPCI Expressバスでつながっています。PCを人間にたとえるなら、CPUが頭脳、各デバイスが手足・目・声、そしてPCI/PCIeバスは神経伝達系と言えるかもしれません。そんなことで興味深々となり、PCI/PCIeバスについてちょっと調べてみました。随時わかったことをこの記事で更新していきます!(いつぅ?完成しますのん)

まずはPCIから
PCI Express を調べるその前に、まず、PCIを知っておかないといけないようです。なぜなら、PCI Express も互換性維持のためにPCIの仕様に準じている部分があるためです。PCI(Peripheral Component Interconnect)はIntelによって開発されたデバイスを接続するバス仕様です。バスとはCPUとデバイスとの間でデータをやり取りするための信号線などの物理的規格やそのソフトウエア仕様です。PCIはPCI Expressが登場する前に主流となっていたバス仕様です。


歴史
1992年

PCI Local Bus Specification Revision 1.0が策定される。


2002年
PCI Express Base Specification Revision 1.0がリリースされる。

2004年
PCI Local Bus Specification Revision 3.0(PCIの最終版)が登場。
PCI Express (Gen1)ネイティブグラフィックスカード登場

Intel 925X / 915P / 915Gチップセット登場 
 ■注目ポイント(PCIeを初めて実装)
(MCH  -> PCIe Gen1 x16 
(DMI PCIe Gen1 x4
(IOH -> PCIe Gen1 x1 が4port PCI が6port
(HD Audioをサポート



2005年

PCI Firmware Specification 3.0もリリース

PCI ExpressがGPU用インターフェースの主流となる


2006年

PCI Express Base Specification Revision 2.0リリース

Gigabit EthernetコントローラーやRAIDコントローラー、SATAコントローラーなど、対応する製品も増加


2008年

Intel P45 チップセット

(MCHが内蔵するPCI ExpressコントローラーがGen2対応になった

MCH  -> PCIe Gen2 x16 

DMI PCIe Gen1 x4   (2.5GT/s x4)

IOH -> PCIe Gen1 x1 が6port


2009年

Lynnfield / 1th Core

CPU--> PCIe Gen2 x16 (これ以降、PCIEコントローラ(Root Complex)をCPUに内蔵、従来はMCH)
DMI 1.0 (PCIe Gen1 x 4)
PCH(P55)--> PCIe Gen1*注1が6本
このRoot Complexは、サイズがほとんどCPUのダイひとつ分以上ある
※注1 PCH側はスペック表記上、PCIe Gen2となっているが実態はGen1の転送速度になります。


2010年

PCI Express Base Specification Revision 3.0リリース

Clarkdale / 1th Core
CPU--> PCIe Gen2 x16 ■注目ポイント(パッケージレベルでのGPUコアの統合
DMI 1.0 (PCIe Gen1 x 4)
PCH(H57/H55)--> PCIe Gen1*注1が6本
※注1 PCH側はスペック表記上、PCIe Gen2となっているが実態はGen1の転送速度になります。


2011年


Sandy Bridge / 2th Core
CPU--> PCIe Gen2 x16■注目ポイント(ダイレベルでのGPUコアの統合
DMI 2.0 (PCIe Gen2 x 4)  ■注目ポイント(DMI が2.0になる
PCH(Z67 P67)--> PCIe Gen2が8本  ■注目ポイント(PCHのPCIe がGEN2になる


2012年

Ivy Bridge / 3th Core
CPU--> PCIe Gen3 x16  ■注目ポイント(CPUのPCIe がGEN3になる
DMI 2.0 (PCIe Gen2 x 4)
PCH(Z77) --> PCIe Gen2が8本 (これ以降、USB 3.0コントローラをPCHに内蔵)


2013年

Haswell / 4th Core
CPU--> PCIe Gen3 x16
DMI 2.0 (PCIe Gen2 x 4)
PCH(Z87) --> PCIe Gen2が8本(これ以降、I/Oポート・フレキシビリティー機能をPCHに内蔵)


2014年

Haswell Refresh / 4th Core
CPU--> PCIe Gen3 x16
DMI 2.0 (PCIe Gen2 x 4)
PCH(Z97) --> PCIe Gen2が8本


2015年


Skylake / 6th Core
CPU--> PCIe Gen3 x16
DMI 3.0 (PCIe Gen3 x 4)  ■注目ポイント(DMI が3.0になる
PCH(Z170)  --> PCIe Gen3が20本  ■注目ポイント(PCHのPCIe がGEN3になりレーン数も増加


2017年


Kaby Lake / 7th Core
CPU--> PCIe Gen3 x16
DMI 3.0 (PCIe Gen3 x 4)  
PCH(Z270)  --> PCIe Gen3が24本  ■注目ポイント(PCHのレーン数が増加、しかし、DMI帯域は変わらず





PCI Expressとは

PCIでは複数のデバイスが同時に通信できない。
転送速度も理論値で133MB/秒程度。

そこで、PCI Expressの登場となる。


主な特徴
Point to Pointで全二重通信
大本のコントローラー(Root Complex)と各デバイスが、すべて独立した配線で接続
これでも不足する場合はスイッチ(ブリッジ)を介してデバイスを接続


レーン
受信と送信をまとめた1組をを1レーン(x1)と呼ぶ。
1レーン(x1)、4レーン(x4)、8レーン(x8)、16レーン(x16)などがある。


PCIeスロット(拡張カードがささる側コネクタ)


拡張カード(スロットにさす方)


グラフィックス用の16レーンスロットは、グラフィックスカード専用というわけではなく、汎用の広帯域スロットとして利用することが可能。スロットよりレーン数の少ない拡張カードを挿入することができる。



スピード

リビジョンで転送スピードが異なる。PCI Express Base Specification Revision 3.0を略してPCIe Gen3とする。

実効データ転送速度(1レーン・片方向)

Gen1 250MB/s
Gen2 500MB/s
Gen3 1GB/s (物理層帯域 8Gbps)

Gen3デバイスは、8GT/秒対応の物理層と2.5、5GT/秒対応の物理層の両方を内蔵し、実際の通信に応じて切り替えている。


セグメントとは
言うなればひとつのバスの管理単位である。

PCI-Xに限らず、PCIやAGPですらも、セグメントを使って大規模システムを構築できる。

出典

ロードマップでわかる!当世プロセッサー事情 ― 第109回

バスの歴史を振り返る PCIからAGP、PCI-X編

2011年07月11日 12時00分更新 大原雄介

http://ascii.jp/elem/000/000/618/618492/index-4.html#eid618499




PCI/PCI Express ソフトウェア
ソフトウエアとしては、PCIもPCIeも同じ。しかし、PCIeの拡張機能を使う場合は拡張コンフィグレーションレジスタを操作する。
Windows Vista 以降でネイティブにPCIeをサポートしている。

Transaction Layerより上→ソフトウェア(PCI互換のインタフェース)
Datalink Layerより下→ハードウェア(PCI互換なし)


PCI/PCIe コンフィギュレーション
デバイス側がコンフィギュレーションレジスタを実装する。ソフトウェアはこれにアクセスし、デバイスを操作する。そのレジスタ内のBAR(Base Address Register)にアドレスを設定することで、そのデバイス固有のメモリアドレスやI/Oアドレスが決まる。そのコンフィギュレーションレジスタを読み書きするためにコンフィグレーション・トランザクションを使う。

コンフィギュレーションレジスタには以下の要素を含む。デバイスがPCI-to PCI Bridge(TYPE 1)か通常デバイス(TYPE 0)で要素が異なる部分もある。PCI/PCIe共通のレジスタは000h - 0FEhまで、PCIe拡張は0FFf - FFFhまで。
Vender ID / Device ID
コマンド/ステータス
デバイスが使用するメモリマップドI/OやI/Oのアドレスを設定・保持する(BAR)
割り込み設定
デバイス固有
など

BAR(Base Address Register):必要バイト数はリードオンリーの0のビットを植える。最低値は16バイト 0x0000 


PC/AT互換機PCでPCI/PCIe コンフィギュレーションを担うのはBIOSです。その流れをIntel Haswellプラットフォームで簡単に説明します。
まず、BIOSがチップセット(ホストブリッジ)を初期化し、バス内を検索しバス番号等が決まる。バス番号はアルゴリスムで決まる。デバイス番号はブリッジへの配線で決まる。機能番号はデバイスの設計で決まる。CPU I/Oポートの0xCF8(固定)と0xCFC(固定)を使ってPCIデバイスのコンフィギュレーション空間にアクセスし、PCI互換レジスタを設定する(この方法はチップセット実装に依存する)。チップセット(ホストブリッジ)のPCIEXBARレジスタにコンフィグレーションレジスタをマッピングするメモリアドレス等を設定する。これにより、次のメモリ・マップト・コンフィグレーション・アクセスが可能になる。PCIeではコンフィギュレーションレジスタにアクセスするためにメモリ・マップト・コンフィグレーション・アクセス、英語表記ではMemory Mapped Configuration Access (MMCFG,MMCONFIG)を使う。チップセット、BIOS、OSが連携して実現。チップセットに該当機能の実装が必要。そのデバイスのバス番号、デバイス番号、機能番号でマッピングされたメモリアドレスにアクセスすると、コンフィグレーションレジスタを読み書きできる。
マッピングは以下の法則でなされる。
バス番号255-デバイス番号31ー機能番号7-レジスタ(0h~FFFh)
バス番号0-デバイス番号0ー機能番号0-レジスタ(0h~FFFh)
ベースアドレスーーー
このように256MBの領域を要しますが実際のIntel Z87チップセットでは64MBの実装でした。しかし、この分が実質メモリーホールになるようです。

PCIEXBARレジスタに設定されたメモリアドレス等をOS等に引き継ぐために、ACPIテーブル:MCFGにそれらを書き込む。

ACPI _OSCメソッド機能も使用。
システムやチップセットの機能に依存する可能性がある。
PCIEXBARレジスタもコンフィグレーションレジスタの1つであるが、PCI標準で定められていないデバイス独自実装レジスタである。また、そのオフセット・アドレスもチップセット毎で異なるようです。
詳細は
PCI-to-PCI Bridge Architecture Specification Revision 1.2 ,
PCI Firmware Specification 3.0



PCI Expasion ROM(Option ROM)
PCI/PCI ExpressデバイスはPCI Expasion ROM(Option ROM)をもつことができる。UEFI BIOSが主流になってきた2017年でもグラフィックボードにはこのPCI Expasion ROM(Option ROM)が必須となっています。その理由はこちらの記事~グラフィックボード・ビデオカードのビデオBIOSとGOPドライバについてを参照ください。また、PCI Expasion ROM(Option ROM)の記事についてはこちらhttp://dxr165.blog.fc2.com/blog-entry-369.htmlを参照ください。



バスマスタ(bus master)


下記サイトでDMAの基礎を予習しました。
マイナビ パソコン
コラム セカンド・オピニオン
54 バスのアーキテクチャ - 過去から未来へ(15) ○シェアードバスのアーキテクチャ(3)から(5)
大原雄介 [2003/11/27]
http://news.mynavi.jp/column/sopinion/054/






引用始まり
 バスの制御を行なうデバイス。広義では、CPUやマザーボード上のDMAC(Direct Memory Access Controller)も制御権を持つデバイスになるが、一般には、DMACに相当する機能を持ち、CPUを介さずに直接データ転送が行なえるタイプのI/Oデバイスを指す。

 もっともオーソドックスなデータの入出力方法は、CPUが直接デバイスのリード/ライトを行なうスタイルで、これをPIO(Programmed Input/Output)転送という。ISAバスには、CPUとは無関係に、デバイス~メモリ間で直接データ転送が行なえるDMAという仕組みが用意されており、これを使うスタイルをDMA転送と呼んでいる。DMA転送は、CPUを転送処理から開放し負荷を軽減する機構なのだが、システムの設計が古く転送速度が大幅に低下してしまうため、高速性を要求するISAデバイスの多くはPIOか、マザーボード上のDMACに代って、拡張カード上のコントローラが処理するスタイルのバスマスタ方式を採用している(※1)。

 PCIバスの場合には、共通のDMACを使うという概念は無く、アービタ(arbiter)がバスの使用権を調停し(arbitration)、各マスタデバイスに使用権を与えるスタイルになっており、入出力はPIOかバスマスタ転送になる。

(※1) ISA(Industry Standard Architecture)バスにはアービトレーション機能が無いため、DMA転送に見せかけた変則的なスタイルのバスマスタ転送だが、MCA(Micro Channel Architecture)、EISA(Extended Industry Standard Architecture)、VL-Bus(VESA Local-Bus)、PCI(Peripheral Component Interconnect)などはみな、アービトレーション機能が備わっている。
引用終わり
出典
PC Watch ■鈴木直美の「PC Watch先週のキーワード」 ■
第58回【'98/11/30~12/11】
http://pc.watch.impress.co.jp/docs/article/981217/key58.htm


引用始まり
 Windows XPでは、IDEデバイスのDMA転送を極力有効にするために、ハードウェア側の問題によりDMA転送に失敗する可能性がある場合、または実際に転送に失敗した場合の対策が追加されている。逆に問題がなければ、自動的にDMA転送が有効の状態でセットアップされる。
引用終わり
 ITmedia Windows XPの正体 大幅に改善されたWindows XPのIDEサポート 澤谷琢磨 2001/09/22
http://www.atmarkit.co.jp/fpc/xp_feature/idesupport/idesupport.html







備考
UEFI BIOSはPCI/PCIe デバイスに対しINTx ,MSI,MSI-X割り込みを使用せず、ポーリングで対応している。

SerDesはSERializer/DESerializerの略です。

ACPI SMBIOS Table Viewer
FirmwareTablesView v1.01 
http://www.nirsoft.net/utils/firmware_tables_view.html



Intel  PCI Express Enhanced Configuration Mechanism

Intel 945G/945GZ/945GC/945P/945PL Express Chipset Family Datasheet June 2008 (2005年発売のデスクトップ向けMCHです。DDR2 ,PCIe Support)

3 Register Description
3.3 Configuration Mechanisms 
3.3.1 Standard PCI Configuration Mechanism より抜粋

The PCI specification defines two bus cycles to access the PCI configuration space: 
Configuration Read and Configuration Write. Memory and I/O spaces are supported directly by the processor.
Configuration space is supported by a mapping mechanism implemented within the (G)MCH.
The configuration access mechanism uses the CONFIG_ADDRESS register (at I/O address 0CF8h though 0CFBh) and CONFIG_DATA register (at I/O address 0CFCh though 0CFFh)
To reference a configuration register, a DWord I/O write cycle is used to place a value into CONFIG_ADDRESS that specifies the PCI bus, the device on that bus, the function within the device, and a specific configuration register of the device function being accessed.
CONFIG_ADDRESS[31] must be 1 to enable a configuration cycle. 
CONFIG_DATA then becomes a window into the four bytes of configuration space specified by the contents of CONFIG_ADDRESS. 
Any read or write to CONFIG_DATA will result in the (G)MCH translating the CONFIG_ADDRESS into the appropriate configuration cycle.


3.3.2 PCI Express* Enhanced Configuration Mechanism (Intel®82945G/82945GC/82945P/82945PL (G)MCH Only) より抜粋

As with PCI devices, each PCI Express device is selected based on decoded address information that is provided as a part of the address portion of configuration request packets. A PCI Express device will decode all address information fields (bus, device, function, and extended address numbers) to provide access to the correct register.To access this space (steps 1, 2, and 3 are completed only once by BIOS):

1. use the PCI compatible configuration mechanism to enable the PCI Express enhanced configuration mechanism by writing 1 to bit 0 of the PCIEXBAR register.

2. use the PCI compatible configuration mechanism to write an appropriate PCI Express base address into the PCIEXBAR register .

3. calculate the host address of the register you wish to set using (PCI Express base + (bus number * 1 MB) + (device number * 32 KB) + (function number * 4 KB) + (1 B * offset within the function) = host address).

4. use a memory write or memory read cycle to the calculated host address to write or read that register. 




主な参考文献/URL

PCI Express 設計の基礎と応用
畑山 仁 / 編著 CQ出版 2010年5月15日発行


Interface 増刊  改訂新版 PCIバス&PCI-Xバスの徹底研究
Interface編集部 (編集) CQ出版 2004年7月1日発行


PCI Expressの概要 (Slide) Lattice Semiconductor 2007
http://teledynelecroy.com/japan/pdf/semi/pci-seminar2007-02.pdf


National Instruments / PCI Express - PCI Express 規格の概要 発行日: 1 07, 2008 
http://www.ni.com/white-paper/3767/ja/#toc1


Raphine Project / PCI Express
https://raphine.wordpress.com/kernel/code_reading/driver/pcie/


osdev-jp/osdev-jp.github.io/Wiki/PCI Memo
https://github.com/osdev-jp/osdev-jp.github.io/wiki/PCI-Memo


松谷健史のページ / PCI expressメモ
http://web.sfc.wide.ad.jp/~macchan/wiki/index.php?PCI%20express%E3%83%A1%E3%83%A2


InfoSec Institute / System Address Map Initialization in x86/x64 Architecture
Part 1: PCI-Based Systems by Darmawan Salihun on SEPTEMBER 16, 2013
http://resources.infosecinstitute.com/system-address-map-initialization-in-x86x64-architecture-part-1-pci-based-systems/
BIOSレベルでのPCIコンフィグレーションについて詳細に記述されています。


InfoSec Institute / System Address Map Initialization in x86/x64 Architecture
Part 2: PCI Express-Based Systems by Darmawan Salihun on JANUARY 9, 2014
http://resources.infosecinstitute.com/system-address-map-initialization-x86x64-architecture-part-2-pci-express-based-systems/
BIOSレベルでのPCI Expressコンフィグレーションについて詳細に記述されています。


White Paper A Tour beyond BIOS Memory Map
Design in UEFI BIOS
Jiewen Yao Intel Corporation
Vincent J. Zimmer Intel Corporation
February 2015
https://firmware.intel.com/content/tour-beyond-bios-memory-map-design-uefi-bios
UEFI BIOS環境下でのメモリーマップについて記述されています。


Wikipedia / IOMMU
IOMMU (Input/Output Memory Management Unit、IOMMU) とはDMA可能なI/Oバスと主記憶装置を接続するメモリ管理ユニット (MMU) である。
https://ja.wikipedia.org/wiki/IOMMU


Intel Developer Zone / Development/Tools/Resources
The-Compute-Architecture-of-Intel-Processor-Graphics-Gen9-v1d0.pdf
https://software.intel.com/en-us/file/the-compute-architecture-of-intel-processor-graphics-gen9-v1d0pdf


大原雄介公式サイト/バス・インターフェース関連記事
http://www.yusuke-ohara.com/

マイナビ / パソコン / セカンド・オピニオン
40 バスのアーキテクチャ - 過去から未来へ(1) 
大原雄介 [2003/08/07]
http://news.mynavi.jp/column/sopinion/040/

マイナビ / パソコン / セカンド・オピニオン
97 バスのアーキテクチャ - 過去から未来へ(58) プロトコル(その23):PCI Express(その1)
大原雄介 [2004/12/14]
http://news.mynavi.jp/column/sopinion/097/

PC Watch 短期集中連載】大原雄介の最新インターフェイス動向 ~PCI Express 3.0編その1
(2009年3月10日)  [Reported by 大原雄介]
http://pc.watch.impress.co.jp/docs/2009/0310/interface01.htm



元麻布春男の週刊PCホットライン/ギガビットEthernet専用チャネル「CSA」はPCI Expressの妨げとなるか? 2003年2月20日 元麻布春男
http://pc.watch.impress.co.jp/docs/2003/0220/hot246.htm


@IT > System Insider >[解説] 今後の10年を占う新Pentium 4プラットフォームを考察する
 1.PCI Expressをサポートした初のチップセット
 2.新チップセットで強化された機能
2004/07/29  元麻布春男
http://www.atmarkit.co.jp/fsys/kaisetsu/042pciexpress/pciexpress01.html
http://www.atmarkit.co.jp/fsys/kaisetsu/042pciexpress/pciexpress02.html


Microsoft Hardware Dev Center 
Docs / Windows Hardware / Windows Drivers / Device and Driver Technologies / PCI
PCI driver programming guide
https://docs.microsoft.com/ja-jp/windows-hardware/drivers/pci/


WinHEC 2006 Presentations / System Fundamentals - Core Platform Architecture and Security
PCI Express in Depth for Windows Vista and Beyond [PowerPoint ; 324 KB]
https://www.microsoft.com/whdc/winhec/pres06.mspx


OS Wiki/hardwares/PCI
http://oswiki.osask.jp/?PCI


パソコン初心者講座 / 自作パソコン入門 / チップセット
http://www.pc-master.jp/jisaku/chipset.html


X-Bus
Support
Logic
 82371AB PCI-TO-ISA / IDE
XCELERATOR (PIIX4) 
https://www.intel.com/Assets/PDF/datasheet/290562.pdf



In the PC/XT four different address buses can be distinguished:
X-address bus
Part 3
Personal Computer Architectures and
Bus Systems
http://www.fi.tartu.ee/loengumaterjalid/stud/arvutikomponendid/ISA.pdf


関連記事

category: PC-HW

tb: 0   cm: 0

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://dxr165.blog.fc2.com/tb.php/371-042a89b0
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

最新コメント

カウンター(2012/3/10以降)