一文講述,什么是pci總線原理?

PCI即Peripheral Component Interconnect,中文意思是“外圍器件互聯(lián)”,是由PCISIG (PCI Special Interest Group)推出的一種局部并行總線標(biāo)準(zhǔn)。在現(xiàn)在電子設(shè)備中應(yīng)用非常廣泛,下面我詳細介紹下PCI總線的工作原理,希望對大家有所幫助。

PCI總線的過去現(xiàn)在和未來

  PCI總線是由ISA(Industy Standard Architecture)總線發(fā)展而來的。

ISA并行總線有8位和16位兩種模式,時鐘頻率為8MHz,總線帶寬為:8bit*8MHz=64Mbps=8MB/s?或 16bit*8MHz= 128Mbps =16MB/s。在計算機出現(xiàn)初期的386/486時代,ISA總線的帶寬已經(jīng)算是很寬的了,滿足CPU的需求可以說是綽綽有余了。

1987年,IBM公司推出32位MAC(MicroChannel Architecture)總線,總線帶寬達到40MB/s,迫于IBM的壓力,Compaq、AST、Epson、HP、Olivetti和NEL等9家公司聯(lián)合于1988年9月推出EISA(Extended ISA)總線,EISA總線仍然保持ISA總線的8MHz時鐘頻率,但將總線位寬提高到32位,總線帶寬為:32bit*8MHz=256Mbps =?32MB/s,并且與ISA總線完全兼容。

  隨著計算機技術(shù)的繼續(xù)發(fā)展,CPU的處理速度越來越快,EISA總線的32MB/s帶寬已經(jīng)滿足不了CPU的需求,CPU外圍總線帶寬已經(jīng)成為制約計算機處理能力繼續(xù)提高的瓶頸。1991年下半年,Intel公司首選提出PCI總線的概念,并與IBM、Compaq、AST、HP、DEC等100多家公司成立PCISIG組織,聯(lián)合推出PCI總線。

PCI總線支持32位和64位兩種位寬,時鐘頻率為33MHz,總線帶寬:32bit*33MHz= 1056Mbps =132MB/s?或64bit*33MHz=2112Mbps=264MB/s。

隨著PCI總線的發(fā)展,PCI總線又發(fā)展到PCI-X時代,與PCI總線相比,PCI –X總線的位寬未改變,而是將時鐘頻率進行了提高。

PCI-X 1.0的時鐘頻率有66MHZ/100MHz/ 133MHz,總線帶寬分別為:264MB/s, 400MB/s和532MB/s(32位),528MB/s, 800MB/s和1064MB/s(64位);

PCI-X 2.0的時鐘頻率有266MHz/533MHz/1066MHz,總線帶寬分別為:1064MB/s, 2132MB/s和4264MB/s(32位),2128MB/s, 4264MB/s和8512MB/s(64位),PCI-X與PCI總線在硬件結(jié)構(gòu)上完全兼容。

與PCI總線相比,PCI-X除掉在時鐘頻率高外,還在傳輸協(xié)議上進行了改進,PCI-X采用了“寄存器到寄存器”的新協(xié)議,在新協(xié)議模式下,發(fā)送方發(fā)出的數(shù)據(jù)信號會被預(yù)先送入一個專門的寄存器內(nèi),并在寄存器中保存一個時鐘周期,接收端只要在這個周期內(nèi)做出響應(yīng),取走數(shù)據(jù)即可。而PCI協(xié)議中卻沒有這個緩沖,數(shù)據(jù)發(fā)出去后,如果對方因某種原因沒能及時接收,數(shù)據(jù)將會被丟棄。

  如今,PCI總線已經(jīng)發(fā)展到PCI-Express時代,這是一個串行高速總線,也是由PCISIG推出,分為X1,X2,X4,X8,X12,X16和X32七種模式,X1模式有2對差分線,1對收1對發(fā),X2模式有4對差分線,2對收2對發(fā),其它類推。PCI-E 1.0的速率為2.5Gbps,PCI-E 2.0的速率為5.0Gbps,PCIE 3.0的速率可達8.0Gbps。PCIE正在替代著PCI/PCI-X的角色,相信在不久的將來,PCI/PCI-X總線就如同ISA/EISA總線一樣,進入歷史的博物館。

PCI總線結(jié)構(gòu)

PCI總線是一種樹型結(jié)構(gòu),并且獨立于CPU總線,可以和CPU總線并行操作。PCI總線上可以掛接PCI設(shè)備和PCI橋片,PCI總線上只允許有一個PCI主設(shè)備,其他的均為PCI 從設(shè)備,而且讀寫操作只能在主從設(shè)備之間進行,從設(shè)備之間的數(shù)據(jù)交換需要通過主設(shè)備中轉(zhuǎn)。

PCI總線管腳功能

  PCI主設(shè)備最少需要49根線,從設(shè)備最少需要47根線,剩下的線可選。在介紹PCI管腳功能前,先來說明下PCI管腳信號的類型。

  in:輸入信號;

  out:輸出信號;

t/s:雙向三態(tài)信號(Tri-state),無效時為高組態(tài);

s/t/s:持續(xù)三態(tài)信號(Sustained Tri-state),每次由且只由一個單元擁有并驅(qū)動的低有效、雙向、三態(tài)信號。驅(qū)動一個s/t/s信號到低的單元在釋放該信號浮空之前必須要將它驅(qū)動到高電平至少一個周期。這個特點很重要,在后面我們分析PCI信號質(zhì)量案例的時候會用到;

o/d:漏極開路輸出(Open Drain);

  #:此符號代表該信號在低電平時有效。

實際使用中需要上拉的信號有:FRAME#, TRDY#, IRDY#, DEVSEL#, STOP#, PERR#, SERR#, LOCK#, REQ64#, ACK64#, REQ#, GNT#,?AD[63:32],?C/BE[7:4],?PAR64等,上拉電阻一般為10kohm,未使用的PCI管腳也要處理,避免懸空。不需要上拉的信號有AD[31:0], C/BE[3:0], PAR, IDSEL, CLK。

1).系統(tǒng)引腳

CLK:in,系統(tǒng)時鐘,為所有PCI上的傳輸及總線仲裁提供時序。除RST#外,所有PCI信號都在CLK信號的上升沿采樣。

RST#:in,異步復(fù)位信號。

2).地址及數(shù)據(jù)引腳

AD[31:0]:t/s,地址數(shù)據(jù)復(fù)用引腳。FRAME#開始變?yōu)橛行У哪莻€時鐘周期內(nèi)AD[31:0]上傳輸?shù)氖堑刂?。對于配置空間和存儲空間,這是一個雙字節(jié)地址,對于I/O空間,這個一個單字節(jié)地址。傳輸數(shù)據(jù)時,AD[7:0]為最低字節(jié)數(shù)據(jù)。

C/BE[3:0]#:t/s,總線命令和字節(jié)允許復(fù)用引腳。在AD[31:0]上傳輸?shù)刂返臅r候,C[3:0]上傳輸?shù)氖强偩€命令,AD[31:0]上傳輸數(shù)據(jù)的時候,BE[3:0]#用作字節(jié)允許,表示哪些通道上的數(shù)據(jù)是有效的。BE0#對應(yīng)最低字節(jié)。

PAR:t/s,AD[31:0]和C/BE[3:0]#上的數(shù)據(jù)偶效驗。PAR與AD[31:0]有相同的時序,但延遲一個時鐘,在地址段后一個時鐘,PAR穩(wěn)定并有效;對于數(shù)據(jù)段,在寫傳輸中,PAR在IRDT#有效一個時鐘穩(wěn)定并有效,而在讀傳輸中,PAR在TRDY#有效后一個時鐘周期穩(wěn)定并有效。一旦PAR有效,它必須保持有效直到當(dāng)前數(shù)據(jù)段完成后一個時鐘。在地址段和寫數(shù)據(jù)段,主PCI設(shè)備驅(qū)動PAR,在讀數(shù)據(jù)段,目標(biāo)從PCI 設(shè)備驅(qū)動PAR。

3).接口控制引腳

FRAME#:s/t/s,幀開始信號。由當(dāng)前總線主設(shè)備驅(qū)動,以說明一個操作的開始和延續(xù)。FRAME#有效,說明總線開始傳輸,當(dāng)FRAME#維持有效時,說明總線傳輸繼續(xù)進行,當(dāng)FRAME#無效時,說明傳送的最后一個字節(jié)正在進行。

IRDY#:s/t/s,啟動者準(zhǔn)備好信號(Initiator Ready)。說明傳輸?shù)膯诱咄瓿僧?dāng)前數(shù)據(jù)傳輸?shù)哪芰ΑT谧x操作中,IRDY#有效說明總線主設(shè)備已準(zhǔn)備好接收收據(jù)。在寫操作中,它說明AD[3:0]上已有有效數(shù)據(jù)。在IRDY#和TRDY#都有效的時鐘周期完成數(shù)據(jù)傳輸。在IRDY#和TRDY#都有效之前,需要插入等待狀態(tài)。

TRDY#:s/t/s,目標(biāo)設(shè)備準(zhǔn)備就緒(Target Ready)。說明傳輸?shù)哪繕?biāo)設(shè)備完成當(dāng)前的數(shù)據(jù)傳輸能力。在寫操作中,TRDY#有效說明目標(biāo)設(shè)備已經(jīng)準(zhǔn)備好接收數(shù)據(jù)。在讀操作中,它說明AD[31:0]上已有有效數(shù)據(jù)。

STOP#:s/t/s,停止信號。說明當(dāng)前的目標(biāo)設(shè)備要求總線主設(shè)備停止當(dāng)前傳輸。

LOCK#:s/t/s,鎖定信號。

IDSEL:in,初始化設(shè)備選擇(Initialization Device Select)。在配置空間讀寫操作中,用作片選。

DEVSEL#:s/t/s,設(shè)備選擇。當(dāng)驅(qū)動有效時,說明驅(qū)動它的設(shè)備已將其地址解碼為當(dāng)前操作的目標(biāo)設(shè)備。

4).仲裁引腳

REQ#:t/s,申請。向仲裁器說明該單元想使用總線。這是一個點對點的信號,每個總線主設(shè)備都有自己的REQ#。

GNT#:t/s,允許。仲裁器向申請單元說明其對總線的操作已被允許。這是一個點對點信號,每個總線主設(shè)備都有自己的GNT#。

5).錯誤反饋引腳

PERR#:s/t/s,奇偶校驗錯誤(Parity Error)。該引腳用于反饋在除特殊周期外的其他傳送過程中的數(shù)據(jù)奇偶校驗錯誤。PERR#維持三態(tài),在檢測到奇偶校驗錯誤后,在數(shù)據(jù)結(jié)束后兩個時鐘周期,由接收數(shù)據(jù)的單元驅(qū)動PERR#有效。并至少持續(xù)一個時鐘周期。只有發(fā)出DEVSEL#的單元才能發(fā)出PERR#。

SERR#:o/d,系統(tǒng)錯誤(System Error)。用于反饋地址奇偶校驗錯誤、特殊周期命令中的數(shù)據(jù)奇偶校驗錯誤和將引起重大事故的其他災(zāi)難性的系統(tǒng)錯誤。

6).中斷引腳

INTA#, INTB#, INTC#, INTD#:o/d,中斷輸出。

7).高速緩存支持引腳

一個能高速緩存的PCI存儲器必須利用這兩條高速緩存支持引腳作為輸入,以支持寫通(write-through)和回寫(write-back)。如果可高速緩存的存儲器是位于PCI上,則連接回寫高速緩存到PCI的橋路必須利用這兩條引腳,且作為輸出。連接寫通高速緩存的橋路可以只使用一條引腳SDONE。

SBO#:in/out,監(jiān)視補償。當(dāng)其有效時,說明對某條變化線的一次命中。當(dāng)SBO#無效而SDONE有效時,說明了一次“干凈”的監(jiān)視結(jié)果。

SDONE: in/out,監(jiān)視進行。表明對當(dāng)前操作的監(jiān)視狀態(tài)。當(dāng)其無效時,說明監(jiān)視結(jié)果仍未定。當(dāng)有效時,說明監(jiān)視已有結(jié)果。

8).64位總線擴充引腳

AD[63:32]:t/s,地址數(shù)據(jù)復(fù)用引腳提供32個附加位。在一個地址段,傳送64位地址的高32位。在數(shù)據(jù)段,傳送64位中的高32位。

C/BE[7:4]#:t/s,總線命令和字節(jié)允許復(fù)用引腳。

REQ64#:s/t/s,請求64位傳輸。當(dāng)其被當(dāng)前總線主設(shè)備有效驅(qū)動時,說明總線主設(shè)備想作64位傳輸。

ACK#:s/t/s,應(yīng)答64位傳送。在當(dāng)前操作所尋址的目標(biāo)設(shè)備有效驅(qū)動該信號時,說明目標(biāo)設(shè)備能夠進行64位傳輸,ACK#和DEVSEL#有相同的時序。

PAR64:t/s,高雙字偶校驗。

PCI總線上IDSEL管腳的處理方式

主PCI橋片的IDSEL管腳一般通過電阻下拉到地,從PCI設(shè)備的IDSEL 管腳和AD[11:31]相連,每個PCI從設(shè)備連接其中的一根,且不能重復(fù)。如下圖所示。

PCI信號的驅(qū)動方式

PCI信號為半波驅(qū)動方式,為了更好的說明什么是半波驅(qū)動方式,下面我用一個仿真實例來說明。下圖為仿真鏈路。

  PCI_OUT_3.3V輸出先是以大約2.3V的半幅度來驅(qū)動總線,經(jīng)過大約2ns延遲后,信號到達接收端,接收端阻抗不匹配,將信號反射回始端,反射信號經(jīng)過2ns的延遲后到達始端,驅(qū)動信號與反射信號在始端出現(xiàn)疊加,使PCI_OUT_3.3V在大約4ns的位置達到全幅度3.3V。之后經(jīng)過短暫振蕩后趨于平衡。由于大多數(shù)PCI器件片內(nèi)都內(nèi)置了限幅器件,所以PCI信號在不在始端添加串行匹配電阻都可以使PCI信號很快平穩(wěn)。只是加串阻后,信號幅度更低,使PCI器件的使用壽命更長。

PCI仲裁器工作原理

  假設(shè)PCI仲裁器上接三個PCI設(shè)備

  假定PCI1,PCI2,PCI3三個設(shè)備的優(yōu)先級相同,上電后,PCI總線仲裁器會將PCI1設(shè)備的GNT1信號驅(qū)動為低電平(有效)。即PCI1占用PCI總線。如果此時PCI1上沒有數(shù)據(jù)傳輸,但PCI2上有數(shù)據(jù)要傳輸,PCI2設(shè)備就會驅(qū)動REQ2為低電平來向仲裁器發(fā)出PCI總線使用請求。仲裁器在時鐘的上升沿采樣到REQ2信號,在下一個時鐘沿,PCI2將FRAME和IRDY驅(qū)動為低電平(FRAME和IRDY是所有PCI設(shè)備共用的),仲裁器在時鐘的上升沿采樣到這兩個信號后,就將GNT2驅(qū)動為低電平,應(yīng)答PCI2的請求,這樣,PCI2就擁有了PCI總線的使用權(quán)。

  這里有一個問題,為什么PCI總線仲裁器不在采樣到REQ2信號有效后立即將GNT2置低,將PCI總線的使用權(quán)交給PCI2設(shè)備,而是要等到PCI2設(shè)備的FRAME和IRDY信號有效后才執(zhí)行呢?

  這主要是仲裁器避免某些PCI設(shè)備申請總線使用權(quán)而實際上不使用,所以要等到FRAME和IRDY信號有效后(表示數(shù)據(jù)傳輸準(zhǔn)備就緒)才授權(quán)使用總線。如果仲裁器在采樣到REQ2有效后,一直沒有采樣到FRAME和IRDY信號有效,仲裁器會不會一直等待下去呢?答案是不會,仲裁器內(nèi)部有一個定時器,等到定時器超時后,仲裁器就不再等了。

  仲裁規(guī)則:優(yōu)先級高設(shè)備搶占優(yōu)先級低設(shè)備資源

  假設(shè)三個PCI設(shè)備的優(yōu)先級順序為:PCI3>PCI2>PCI1。

  某個時刻,PCI1正在使用PCI總線傳輸數(shù)據(jù),如果此時PCI2想要使用PCI總線,于是將REQ2驅(qū)動為低,向PCI總線仲裁器申請PCI總線的使用權(quán),此時REQ1和REQ2都處于有效狀態(tài),雖然PCI2的優(yōu)先級高于PCI1,但是總線仲裁器不會馬上響應(yīng)PCI2的請求。而是等待PCI1完成一次操作(注意:是一次操作,不是全部)后,PCI1將FRAME和IRDY總線驅(qū)動為高(每完成一次操作都需要進行此操作的)。

  PCI2探測到PCI總線空閑后,將FRAME和IRDY信號驅(qū)動為低??偩€仲裁器采樣到這兩個信號有效后,將GNT1驅(qū)動為高,同時將GNT2驅(qū)動為低,將總線的使用權(quán)轉(zhuǎn)交給PCI2。

  此時,如果PCI1完成了全部傳輸,會將REQ1驅(qū)動為高。

如果PCI1還有數(shù)據(jù)等待傳輸,那么它會將REQ1一直保持為低電平,一直進行總線申請。一直等待到PCI2完成所有操作后,還會將PCI總線的使用權(quán)釋放給PCI1。

PCI操作類型

  前面已經(jīng)說過了,在FRAME信號有效后的第一時鐘周期,AD[31:0]總線上傳輸?shù)氖悄繕?biāo)PCI器件的地址,C/BE[3:0]上傳輸?shù)牟僮髅铑愋汀?/p>

PCI總線的讀寫時序

如上圖所示,在FRAME#有效后的第一個時鐘周期內(nèi),AD上傳輸?shù)氖且獙懭肽繕?biāo)PCI設(shè)備的地址信息,C/BE#上傳輸?shù)氖敲铑愋?I/O寫命令為0011),DEVSEL#信號有效后,表明目標(biāo)PCI設(shè)備已經(jīng)被選擇到,IRDY#和TRDY#同時有效后,主PCI設(shè)備向目標(biāo)PCI設(shè)備中傳輸要寫入的數(shù)據(jù),在第5個時鐘周期時,IRDY#和TRDY#同時變?yōu)闊o效狀態(tài),AD總線上被插入一個等待周期,第6和第7個時鐘周期時,IRDY#有效,但是TRDY#無效,傳輸仍然不能有效進行,總線上被繼續(xù)插入兩個等待周期,第8個時鐘周期時,IRDY#和TRDY#都有效,數(shù)據(jù)傳輸繼續(xù)。

  讀操作同寫操作類似,只是在FRAME#有效后的第一個時鐘周期內(nèi),C/BE#上傳輸?shù)氖亲x操作命令而已(I/O讀操作命令為0010)。

PCI設(shè)備的配置空間

  所有除主橋之外的設(shè)備功能,必須實現(xiàn)配置地址空間,目前有三種類型的首部格式:首部類型0,用于全部除PCI橋之外的設(shè)備;首部類型1,用于PCI-PCI橋;首部類型2,用于Card Bus橋。

  每個PCI設(shè)備的配置空間大小為256字節(jié),用來存放PCI配置文件,其中文件頭標(biāo)識區(qū)占64字節(jié),下圖為Type0類型首部。

  1).廠家ID(Vender ID):用來區(qū)別每個PCI設(shè)備生產(chǎn)商,由PCI-SIG組織分配,0xFFFF表示無效。

  2).設(shè)備ID:用來標(biāo)識設(shè)備類型。

  3).命令寄存器:為發(fā)出PCI和響應(yīng)PCI總線命令提供粗略控制。

  4).狀態(tài)寄存器:用于記錄PCI總線的事件狀態(tài)信息。

  5).版本標(biāo)識:標(biāo)識PCI設(shè)備的版本。

  6).分類代碼:用來表示PCI設(shè)備的功能分類和特定的編程接口,為只讀存儲器。

  7).Cache行大?。褐付ㄏ到y(tǒng)中高速緩存cache一行的長度,以Dword為單位,可讀寫。

  8).持有定時器:指定PCI總線主設(shè)備的延時計時值,以PCI總線的時鐘為單位。

  9).配置類型:表示頭標(biāo)區(qū)類型,以及是否為多功能設(shè)備。

  10).自測能力BIST:Built-In self test,支持自測的PCI設(shè)備為1,不支持的為0。

  11).基地址0~5:實現(xiàn)PCI設(shè)備所有使用地址空間的再定位。

  12).擴展ROM基地址:表示ROM再內(nèi)存中的起始地址,執(zhí)行其中代碼完成PCI初始化。

  13).中斷線: 報告PCI設(shè)備與系統(tǒng)中斷連接情況。

  14).中斷引腳:表示PCI設(shè)備使用了哪些中斷引腳。

  15).最短獲準(zhǔn)時間:指定PCI設(shè)備對延時計數(shù)器的設(shè)定值。

  16).最大等待時間:指定PCI設(shè)備對延時計數(shù)器的設(shè)定值。

PCI總線小案例

問題描述:

  在測試PCI總線的TRDY信號時,發(fā)現(xiàn)該信號從低電平拉升到高電平時太緩慢,

問題分析:

  TRDY是s/t/s信號,在前面已經(jīng)講過了,s/t/s信號有如下特點:

  1).在某一個時刻只能由一個設(shè)備驅(qū)動;

  2).在釋放之前必須將該信號驅(qū)動到高電平,并且至少保持一個時鐘周期;

  3).其它設(shè)備必須等到該信號釋放至少一個時鐘周期后才能重新驅(qū)動它。

  4).該信號必須進行外部上拉處理。

  經(jīng)過分析該PCI總線的邏輯代碼得知,該邏輯在處理s/t/s 信號時沒有完全按照規(guī)范要去來做,在將TRDY信號置為低電平有效后直接釋放到高阻態(tài),沒有將它驅(qū)動到高電平后再釋放,因此,TRDY在低電平位置被釋放到高阻態(tài)后,完全依靠外部的上拉電阻將其拉到高電平位置,由于外部上拉比較弱,導(dǎo)致我們上面見到的TRDY電平上升緩慢現(xiàn)象。修改邏輯代碼后,問題消失。

【文章福利】小生推薦自己的Linux后臺/內(nèi)核技術(shù)交流群【 318652197】整理了一些個人覺得比較好的學(xué)習(xí)書籍,視頻資料共享在群文件里面,有需要的自行添加哦?。?!前100名進群領(lǐng)取,額外贈送一份價值699的內(nèi)核資料包(含視頻、電子書、實戰(zhàn)項目及代碼)

資料免費領(lǐng)

學(xué)習(xí)直通車

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PCI peripheralcomponent interconnect 外設(shè)部件互連標(biāo)準(zhǔn) 優(yōu)點 1. 即插即用...
    Alyna_C閱讀 1,183評論 0 2
  • 總線 計算機的各個功能部件通過總線連接在一起構(gòu)成完整的計算機系統(tǒng),總線是多個系統(tǒng)功能部件之間進行數(shù)據(jù)傳送的公共通路...
    羅蓁蓁閱讀 5,344評論 0 10
  • 1/2 考前復(fù)習(xí) 考試說明 1、單選題,10分 2、填空題,30分 3、簡答題,24分 4、綜合題,36分 復(fù)習(xí)P...
    25歲老頭_畢業(yè)版閱讀 5,852評論 8 34
  • 目錄 I2C串行總線的組成及工作原理知識學(xué)習(xí) 1 一、概述: 2 二、I2C總線的組成: 2 1、硬件連接 2 2...
    江南王小帥閱讀 1,946評論 0 0
  • 6.1 總線概述 6.1.1 總線的基本概念 總線是一組能為多個部件分時共享的公共信息傳送線路。 共享是指總線上可...
    AdRainty閱讀 2,723評論 0 2

友情鏈接更多精彩內(nèi)容