PCI與PCI_E介紹

         PCI與PCI_E的學習參照於Intel給出的EDS,以及博客上大神的博文,再次對學習進行總結,由於水平有限,存在不足,望指正,同時也感謝CSDN提供的平臺。(學習互助,共同進步)。

         一:PCI的物理結構

              定義:PCI即Peripheral Component Interconnect,中文意思是“外圍器件互聯”,是由PCISIG (PCI Special Interest Group)推出的一種局部並行總線標準.他是一種同步的獨立於處理器的32位或64位局部總線。從結構上看,PCI是在CPU的供應商和原來的系統總線之間插入的一級總線,具體由一個橋接電路實現對這一層的管理,並實現上下之間的接口以協調數據的傳送。從1992年創立規範到如今,PCI總線已成爲了計算機的一種標準總線。已成爲局部總線的新標準,廣泛用於當前高檔微機、工作站,以及便攜式微機。主要用於連接顯示卡、網卡、聲卡。

            PCI總線是一種樹型結構,並且獨立於CPU總線,可以和CPU總線並行操作。PCI總線上可以掛接PCI設備和PCI橋片,PCI總線上只允許有一個PCI主設備,其他的均爲PCI 從設備,而且讀寫操作只能在主從設備之間進行,從設備之間的數據交換需要通過主設備中轉。

 

             前面的結構圖提到bus,那麼計算機是如何匹配bus呢?在EDS中,提到了bus number register,通過匹配與讀取這個寄存器的數據來匹配bus,該寄存器如下所示:


             PCI總線的引腳結構:

                    PCI主設備最少需要49pin腳,而從設備則最少需要47個pin腳,如下圖所示:


對部分重要的引腳進行簡單的介紹,摘自Datasheet裏的內容,如下:(H/W設計需要對這些進行詳細的瞭解,軟件上要求不高,會使用即可)

CLK:PCI時鐘,上升沿有效 

RST:Reset信號 

FRAME#:標誌傳輸開始與結束

IRDY#:Master可以傳輸數據的標誌

DEVSEL#:當Slave發現自己被尋址時置低應答

TRDY#:Slave可以轉輸數據的標誌

STOP#:Slave主動結束傳輸數據的信號

IDSEL:在即插即用系統啓動時用於選中板卡的信號 
AD[31::0]:地址/數據分時複用總線 

C/BE#[3::0]:命今/字節使能信號 

PAR:奇偶校驗信號

REQ#:Master用來請求總線使用權的信號 

GNT#:Arbiter允許Master得到總線使用權的信號

PERR#,數據奇偶校驗錯 

SERR#,系統奇偶校驗錯

           二:PCI的總線特點參數

                 (1)傳輸速率高最大數據傳輸率爲132MB/s,當數據寬度升級到64位,數據傳輸率可達264MB/s。
                 (2)多總線共存採用PCI總線可在一個系統中讓多種總線共存,容納不同速度的設備一起工作。
                 (3)獨立於CPU PCI總線不依附於某一具體處理器,即PCI總線支持多種處理器及將來發展的新處理器,在更改處理器品種時,更換相應的橋接組件即可。
                 (4)自動識別與配置外設 用戶使用方便。
                 (5)並行操作能力。

                 (6)總線時鐘頻率33.3MHz/66.6MHz。
                 (7)總線寬度32位/64位。
                 (8)最大數據傳輸率132MB/s(264MB/s)。
                 (9)支持64位尋址。
                 (10)適應5V和3.3V電源環境。
                 總而言之,PCI總線具有高速性,即插即用性,可靠性,複雜性,自動配置,共享中斷,擴展性好,多路複用等特點。

        三:PCI的訪問方式(對於軟件開發來說,這一塊最重要)

                 兩個重要的type:0/1

Type 0模式是訪問bus 0,而Type 1是訪問pci_pci_bridge
Type 1的工作方式
一:掃描當前pci總線上所有的pci橋
二:若bus number等於某一個pci橋上的secondary bus number,說明配置請求的device在該secondary bus上,轉type 0模式;
三:若secondary bus number<bus number<Subordinate Bus number,則說明type 1請求的設備由該pci總線下從屬的某一個橋管理,pci橋認領type1,然後進行一操作,直到找到相應的設備,找到後轉type 0,進行處理;若找不到該設備,返回值全爲1,即FF。

type 0和type 1 的header 決定其結構的不同,EDS給出的header如下:



不管是type 0還是type 1模式,configration space header的前16個字節都是相同的
其中Vendor ID,Device ID,Revision ID,Header type,Class code對於所有的pci設備都是必須實現的。
Vendor ID:由pci sig分配,0FFFH爲無效值
Device ID:由vendor來分配
Revision ID:Device ID的擴展,值由vendor選定
Header type:可用來表示10H到3FH的佈局類型,也可指出設備是否包含多功能。第7位來指出其是否爲多功能設備,[6::0]表示是佈局類型。
Class Code:標識設備的總體功能和特定的寄存器級編程接口。

接下來說一下,相關寄存器的設置,計算機是如何選擇type的呢?


由該寄存器決定採用哪一種表頭格式,分別爲:
type 1,pci to pci的橋接器(01h)
Type 2,pci to cardbus的橋接器(02h)
Type 0,除以上裝置外的裝置(00h)
Bit 7 用來表示是否爲多功能設備,0表示單一功能設備


使用pci訪問涉及到兩個重要的寄存器,分別是0xcf8,0xcfc,在EDS中給出的說明如下:

0xcf8:config_address


由該寄存器決定採用哪一種表頭格式,分別爲:
type 1,pci to pci的橋接器(01h)
Type 2,pci to cardbus的橋接器(02h)
Type 0,除以上裝置外的裝置(00h)
Bit 7 用來表示是否爲多功能設備,0表示單一功能設備
0xcfc  config_data
數據寄存器,確定了地址之後在該寄存器內進行數據讀取。



由該寄存器決定採用哪一種表頭格式,分別爲:
type 1,pci to pci的橋接器(01h)
Type 2,pci to cardbus的橋接器(02h)
Type 0,除以上裝置外的裝置(00h)
Bit 7 用來表示是否爲多功能設備,0表示單一功能設備

前面提到地址寄存器0XCF8,那麼地址是如何計算的呢?

0xcf8爲32位的寄存器,所以往該寄存器寫入數據的時候需要進行移位或者乘法運算
首先確定好需要讀寫的bus,device,function,register,最高位是enable,使能位,需要置1,固地址的計算爲:
Address=(0x80000000|(bus<<16)|(device<<11)|(function<<8)|register


Address=(0x80000000+bus*(pow(2,16))+device*(pow(2,11))+function*(pow(2,8))+register)


接下來會有一段程序示例,本段程序採用的編譯器是watcom C,(不同的編譯器所包含或者定義的函數名字存在差異,因根據實際情況區分,比如VC是沒有定義IO訪問函數的,需要採用內聯彙編的方式訪問)

讀寫byte的函數如下;


由該寄存器決定採用哪一種表頭格式,分別爲:
type 1,pci to pci的橋接器(01h)
Type 2,pci to cardbus的橋接器(02h)
Type 0,除以上裝置外的裝置(00h)
Bit 7 用來表示是否爲多功能設備,0表示單一功能設備

PCI_E的介紹:

定義:PCI Express是新一代的總線接口。早在2001年的春季,英特爾公司就提出了要用新一代的技術取代PCI總線和多種芯片的內部連接,並稱之爲第三代I/O總線技術。隨後在2001年底,包括Intel、AMD、DELL、IBM在內的20多家業界主導公司開始起草新技術的規範,並在2002年完成,對其正式命名爲PCI Express。

特點:

PCI Express的接口根據總線位寬不同而有所差異,包括X1、X4、X8以及X16(X2模式將用於內部接口而非插槽模式)。較短的PCI Express卡可以插入較長的PCI Express插槽中使用。PCI Express接口能夠支持熱拔插,這也是個不小的飛躍。PCI Express卡支持的三種電壓分別爲+3.3V、3.3Vaux以及+12V。用於取代AGP接口的PCI Express接口位寬爲X16,將能夠提供5GB/s的寬帶,即便有編碼上的損耗但仍能夠提供4GB/s左右的實際帶寬,遠遠超過AGP 8X的2.1GB/s的帶寬。
儘管PCI Express技術規格允許實現X1(250MB/秒),X2,X4,X8,X12,X16和X32通道規格,但是依形式來看,PCI Express X1和PCI Express X16將成爲PCI Express主流規格,同時chipset廠商將在南橋芯片當中添加對PCI Express X1的支持,在北橋芯片當中添加對PCI Express X16的支持。除去提供極高數據傳輸帶帶寬之外,PCI Express因爲採用串行數據包方式傳遞數據,所以PCI Express接口每個針針腳可以獲得比傳統I/O標準更多的帶寬,這樣就可以降低PCI Express設備生產成本和體積。


兼容性方面,PCI Express在軟件層面上兼容的PCI技術和設備,支持PCI設備和內存模組的初始化,也就是說驅動程序、操作系統無需推倒重來,就可以支持PCI Express設備。PCI Express是新一代能夠提供大量帶帶寬和豐富功能以實現令人激動的新式圖形應用的全新架構。PCI Express可以爲帶寬渴求型應用分配相應的帶寬,大幅提高中央處理器(CPU)和圖形處理器(GPU)之間的帶寬。對最終用戶而言,他們可以感受影院級圖象效果,並獲得無縫多媒體體驗。


PCI_E最大的優勢在於他的傳輸速率:
16X 2.0版本的可達到10GB/S
PCI_E3.0的帶寬爲8GT/S


PCI_E採用的是內存訪問的方式,這裏暫不做說明,會在後面的博文當中給出介紹。

簡單說一下PCI與PCI_E的區別:

傳輸速率的對比:


由該寄存器決定採用哪一種表頭格式,分別爲:
type 1,pci to pci的橋接器(01h)
Type 2,pci to cardbus的橋接器(02h)
Type 0,除以上裝置外的裝置(00h)
Bit 7 用來表示是否爲多功能設備,0表示單一功能設備

1 傳輸速率不同:從最高傳輸速率對比,PCI_E遠高於PCI
2 傳輸方式不同:PCI採用的是並行傳輸方式,即用多條信號線同時並行傳輸多位數據,而PCI_E採用的是串行傳輸方式,最大傳輸速度爲8Gbit/S.
3 訪問方式不同:PCI採用I/O訪問,而PCI_E採用的爲MMIO內存映射IO的方式
4 空間大小不同:PCI爲256個字節,即00h—ffh;而PCI_E爲00h—ffffh。

總之,雙方各有優勢:

PCI由於採用的是並行傳輸,就無法連接太多的設備,總線的擴展性相對於PCI_E也較差,同時在傳輸時的線間干擾也比較嚴重。同時多個設備工作時,總線有效帶寬也會被拉低,傳輸速率也會因此變慢。
PCI_E採用串行傳輸方式,支持雙向傳輸模式和數據分通道傳輸。因爲PCI_E採用點對點的傳輸方式,每一個設備都有自己的傳輸通道,避免了干擾的問題,同樣也可以保證傳輸速率不被拉低。
但PCI的優勢也很明確,就是結構簡單,設計上難度小,成本低,利於推廣。



Thanks for your reading.



由該寄存器決定採用哪一種表頭格式,分別爲:
type 1,pci to pci的橋接器(01h)
Type 2,pci to cardbus的橋接器(02h)
Type 0,除以上裝置外的裝置(00h)
Bit 7 用來表示是否爲多功能設備,0表示單一功能設備
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章