PCI總線的信號(hào)定義
PCI總線是一條共享總線,,在一條PCI總線上可以掛接多個(gè)PCI設(shè)備,。這些PCI設(shè)備通過(guò)一系列信號(hào)與PCI總線相連,這些信號(hào)由地址/數(shù)據(jù)信號(hào),、控制信號(hào),、仲裁信號(hào),、中斷信號(hào)等多種信號(hào)組成。
PCI總線是一個(gè)同步總線,,每一個(gè)設(shè)備都具有一個(gè)CLK信號(hào),,其發(fā)送設(shè)備與接收設(shè)備使用這個(gè)CLK信號(hào)進(jìn)行同步數(shù)據(jù)傳遞。PCI總線可以使用33MHz或者66MHz的時(shí)鐘頻率,,而PCI-X總線可以使用133MHz、266MHz或者533MHz的時(shí)鐘頻率。
除了RST#,、INTA~D#,、PME#和CLKRUN#等信號(hào)之外,PCI設(shè)備使用的絕大多數(shù)信號(hào)需要與CLK信號(hào)同步,。其中RST#是復(fù)位信號(hào),,PCI設(shè)備使用INTA~D#信號(hào)進(jìn)行中斷請(qǐng)求。本篇并不關(guān)心PME#和CLKRUN#信號(hào),。
1.2.1 地址和數(shù)據(jù)信號(hào)
在PCI總線中,,與地址和數(shù)據(jù)相關(guān)的信號(hào)如下所示。
?。?) AD[31:0]信號(hào)
PCI總線復(fù)用地址與數(shù)據(jù)信號(hào),。PCI總線事務(wù)在啟動(dòng)后的第一個(gè)時(shí)鐘周期傳送地址,這個(gè)地址是PCI總線域的存儲(chǔ)器地址或者I/O地址,;而在下一個(gè)時(shí)鐘周期傳送數(shù)據(jù)[1],。傳送地址的時(shí)鐘周期也被稱為地址周期,而傳送數(shù)據(jù)的時(shí)鐘周期也被稱為數(shù)據(jù)周期,。PCI總線支持突發(fā)傳送,,即在一個(gè)地址周期之后,可以緊跟多個(gè)數(shù)據(jù)周期,。
?。?) PAR信號(hào)
PCI總線使用奇偶校驗(yàn)機(jī)制,保證地址和數(shù)據(jù)信號(hào)在進(jìn)行數(shù)據(jù)傳遞時(shí)的正確性,。PAR信號(hào)是AD[31:0]和C/BE[3:0]的奇偶校驗(yàn)信號(hào),。PCI主設(shè)備在地址周期和數(shù)據(jù)周期中,使用該信號(hào)為地址和數(shù)據(jù)信號(hào)線提供奇偶校驗(yàn)位,。
?。?) C/BE[3:0]#信號(hào)
PCI總線復(fù)用命令與字節(jié)選通引腳。在地址周期中,,C/BE[3:0]信號(hào)表示PCI總線的命令,。而在數(shù)據(jù)周期,C/BE[3:0]引腳輸出字節(jié)選通信號(hào),,其中C/BE3,、C/BE2、C/BE1和C/BE0與數(shù)據(jù)的字節(jié)3,、2,、1和0對(duì)應(yīng)。使用這組信號(hào)可以對(duì)PCI設(shè)備進(jìn)行單個(gè)字節(jié),、字和雙字訪問,。
1.2.2 接口控制信號(hào)
在PCI總線中,,接口控制信號(hào)的主要作用是保證數(shù)據(jù)的正常傳遞,并根據(jù)PCI主從設(shè)備的狀態(tài),,暫停,、終止或者正常完成當(dāng)前總線事務(wù),其主要信號(hào)如下,。
?。?) FRAME#信號(hào)
該信號(hào)指示一個(gè)PCI總線事務(wù)的開始與結(jié)束。當(dāng)PCI設(shè)備獲得總線的使用權(quán)后,,將置該信號(hào)有效,,即置為低,啟動(dòng)PCI總線事務(wù),,當(dāng)結(jié)束總線事務(wù)時(shí),,將置該信號(hào)無(wú)效,即置為高,。PCI設(shè)備(HOST主橋)只有通過(guò)仲裁獲得當(dāng)前PCI總線的使用權(quán)后,,才能驅(qū)動(dòng)該信號(hào)。
?。?) IRDY#信號(hào)
該信號(hào)由PCI主設(shè)備(包括HOST主橋)驅(qū)動(dòng),,該信號(hào)有效時(shí)表示PCI主設(shè)備的數(shù)據(jù)已經(jīng)準(zhǔn)備完畢。如果當(dāng)前PCI總線事務(wù)為寫事務(wù),,表示數(shù)據(jù)已經(jīng)在AD[31:0]上有效,;如果為讀事務(wù),表示PCI目標(biāo)設(shè)備已經(jīng)準(zhǔn)備好接收緩沖,,目標(biāo)設(shè)備可以將數(shù)據(jù)發(fā)送到AD[31:0]上,。
(3) TRDY#信號(hào)
該信號(hào)由目標(biāo)設(shè)備驅(qū)動(dòng),,該信號(hào)有效時(shí)表示目標(biāo)設(shè)備已經(jīng)將數(shù)據(jù)準(zhǔn)備完畢,。如果當(dāng)前PCI總線事務(wù)為寫事務(wù),表示目標(biāo)設(shè)備已經(jīng)準(zhǔn)備好接收緩沖,,可以將AD[31:0]上的數(shù)據(jù)寫入目標(biāo)設(shè)備,;如果為讀事務(wù),表示PCI設(shè)備需要的數(shù)據(jù)已經(jīng)在AD[31:0]上有效,。
該信號(hào)可以和IRDY#信號(hào)聯(lián)合使用,,在PCI總線事務(wù)上插入等待周期,對(duì)PCI總線的數(shù)據(jù)傳送進(jìn)行控制,。
?。?) STOP#信號(hào)
該信號(hào)有效時(shí)表示目標(biāo)設(shè)備請(qǐng)求主設(shè)備停止當(dāng)前PCI總線事務(wù)。一個(gè)PCI總線事務(wù)除了可以正常結(jié)束外,,目標(biāo)設(shè)備還可以使用該信號(hào)終止當(dāng)前PCI總線事務(wù),。目標(biāo)設(shè)備可以根據(jù)不同的情況,,要求主設(shè)備對(duì)當(dāng)前PCI總線事務(wù)進(jìn)行重試(Retry)、斷連(Disconnect),,也可以向主設(shè)備報(bào)告目標(biāo)設(shè)備夭折(Target Abort),。
目標(biāo)設(shè)備要求主設(shè)備Retry和Disconnect并不意味著當(dāng)前PCI總線事務(wù)出現(xiàn)錯(cuò)誤。當(dāng)目標(biāo)設(shè)備沒有將數(shù)據(jù)準(zhǔn)備好時(shí),,可以使用Retry周期使主設(shè)備重試當(dāng)前PCI總線事務(wù)。有時(shí)目標(biāo)設(shè)備不能接收來(lái)自主設(shè)備較長(zhǎng)的Burst操作時(shí),,可以使用Disconnect周期,,將一個(gè)較長(zhǎng)的Burst操作,分解為多個(gè)Burst操作,。當(dāng)主設(shè)備訪問的地址越界時(shí),,目標(biāo)設(shè)備可以使用Disconnect周期,終止主設(shè)備的越界訪問,。
而Target Abort表示在數(shù)據(jù)傳送中出現(xiàn)錯(cuò)誤,。處理器系統(tǒng)必須要對(duì)這種情況進(jìn)行處理。在PCI總線中,,出現(xiàn)Abort一般意味著當(dāng)前PCI總線域出現(xiàn)了較為嚴(yán)重的錯(cuò)誤,。
(5) IDSEL信號(hào)
PCI總線在進(jìn)行配置讀寫總線事務(wù)時(shí),,使用該信號(hào)選擇PCI目標(biāo)設(shè)備,。配置讀寫總線事務(wù)與存儲(chǔ)器讀寫總線事務(wù)在實(shí)現(xiàn)上略有不同。在PCI總線中,,存儲(chǔ)器讀寫總線事務(wù)使用地址譯碼方式訪問外部設(shè)備,。而配置讀寫總線事務(wù)使用“ID譯碼方式”訪問PCI設(shè)備,即通過(guò)PCI設(shè)備的總線號(hào),、設(shè)備號(hào)和寄存器號(hào)訪問PCI設(shè)備的配置空間,。
IDSEL信號(hào)與PCI設(shè)備的設(shè)備號(hào)相關(guān),相當(dāng)于PCI設(shè)備配置空間的片選信號(hào),,這部分內(nèi)容將在第2.4.4節(jié)中詳細(xì)介紹,。
(6) DEVSEL#信號(hào)
該信號(hào)有效時(shí)表示PCI總線的目標(biāo)設(shè)備準(zhǔn)備好,,該信號(hào)與TRDY#信號(hào)不同之處在于該信號(hào)有效僅表示目標(biāo)設(shè)備已經(jīng)完成了地址譯碼,。目標(biāo)設(shè)備使用該信號(hào)通知PCI主設(shè)備,其訪問對(duì)象在當(dāng)前PCI總線上,,但是并不表示目標(biāo)設(shè)備可以與主設(shè)備進(jìn)行數(shù)據(jù)交換,。而TRDY#信號(hào)表示數(shù)據(jù)有效,PCI主設(shè)備可以向目標(biāo)設(shè)備寫入或者從目標(biāo)設(shè)備讀取數(shù)據(jù),。
PCI總線規(guī)范根據(jù)設(shè)備進(jìn)行譯碼速度的快慢,,將PCI設(shè)備分為快速,、中速和慢速三種設(shè)備。在PCI總線上還有一種特殊的設(shè)備,,即負(fù)向譯碼設(shè)備,,在一條PCI總線上當(dāng)快速、中速和慢速三種設(shè)備都不能響應(yīng)PCI總線事務(wù)的地址時(shí),,負(fù)向譯碼設(shè)備將被動(dòng)地接收這個(gè)PCI總線事務(wù),。如果在PCI主設(shè)備訪問的PCI總線上,沒有任何設(shè)備可以置DEVSEL#信號(hào)為有效,,主設(shè)備將使用Master Abort周期結(jié)束當(dāng)前總線事務(wù),。
(7) LOCK#信號(hào)
PCI主設(shè)備可以使用該信號(hào),,將目標(biāo)設(shè)備的某個(gè)存儲(chǔ)器或者I/O資源鎖定,,以禁止其他PCI主設(shè)備訪問此資源,直到鎖定這個(gè)資源的主設(shè)備將其釋放,。PCI總線使用LOCK#信號(hào)實(shí)現(xiàn)LOCK總線事務(wù),,只有HOST主橋、PCI橋或者其他橋片可以使用LOCK#信號(hào),。在PCI總線的早期版本中,,PCI Agent設(shè)備也可以使用LOCK#信號(hào),而目前PCI總線使用LOCK#信號(hào)僅是為防止死鎖和向前兼容,。LOCK總線事務(wù)將嚴(yán)重影響PCI總線的傳送效率,,在實(shí)際應(yīng)用中,設(shè)計(jì)者應(yīng)當(dāng)盡量避免使用該總線事務(wù),。
1.2.3 仲裁信號(hào)
PCI設(shè)備使用該組信號(hào)進(jìn)行總線仲裁,,并獲得PCI總線的使用權(quán)。只有PCI主設(shè)備需要使用該組信號(hào),,而PCI從設(shè)備可以不使用總線仲裁信號(hào),。這組信號(hào)由REQ#和GNT#組成。其中PCI主設(shè)備的REQ#和GNT#信號(hào)與PCI總線的仲裁器直接相連,。
PCI主設(shè)備的總線仲裁信號(hào)與PCI總線仲裁器的連接關(guān)系如圖1?2所示,。值得注意的是,每一個(gè)PCI主設(shè)備都具有獨(dú)立的總線仲裁信號(hào),,并與PCI總線仲裁器一一相連,。而總線仲裁器需要保證在同一個(gè)時(shí)間段內(nèi),只有一個(gè)PCI設(shè)備可以使用當(dāng)前總線,。
在一個(gè)處理器系統(tǒng)中,,一條PCI總線可以掛接PCI主設(shè)備的數(shù)目,除了與負(fù)載能力相關(guān)之外,,還與PCI總線仲裁器能夠提供的仲裁信號(hào)數(shù)目直接相關(guān),。
在一顆PCI總線樹中,,每一條PCI總線上都有一個(gè)總線仲裁器。一個(gè)處理器系統(tǒng)可以使用PCI橋擴(kuò)展出一條新的PCI總線,,這條新的PCI總線也需要一個(gè)總線仲裁器,,通常在PCI橋中集成了這個(gè)總線仲裁器。多數(shù)HOST主橋也集成了一個(gè)PCI總線仲裁器,,但是PCI總線也可以使用獨(dú)立的PCI總線仲裁器,。
PCI主設(shè)備使用PCI總線進(jìn)行數(shù)據(jù)傳遞時(shí),需要首先置REQ#信號(hào)有效,,向PCI總線仲裁器發(fā)出總線申請(qǐng),,當(dāng)PCI總線仲裁器允許PCI主設(shè)備獲得PCI總線的使用權(quán)后,將置GNT#信號(hào)為有效,,并將其發(fā)送給指定的PCI主設(shè)備。而PCI主設(shè)備在獲得總線使用權(quán)之后,,將可以置FRAME#信號(hào)有效,,與PCI從設(shè)備進(jìn)行數(shù)據(jù)通信。
1.2.4 中斷請(qǐng)求等其他信號(hào)
PCI總線提供了INTA#,、INTB#,、INTC#和INTD#四個(gè)中斷請(qǐng)求信號(hào),PCI設(shè)備借助這些中斷請(qǐng)求信號(hào),,使用電平觸發(fā)方式向處理器提交中斷請(qǐng)求,。當(dāng)這些中斷請(qǐng)求信號(hào)為低時(shí),PCI設(shè)備將向處理器提交中斷請(qǐng)求,;當(dāng)處理器執(zhí)行中斷服務(wù)程序清除PCI設(shè)備的中斷請(qǐng)求后,,PCI設(shè)備將該信號(hào)置高[2],結(jié)束當(dāng)前中斷請(qǐng)求,。
PCI總線規(guī)定單功能設(shè)備只能使用INTA#信號(hào),,而多功能設(shè)備才能使用INTB#/C#/D#信號(hào)。PCI設(shè)備的這些中斷請(qǐng)求信號(hào)可以通過(guò)某種規(guī)則進(jìn)行線與,,之后與中斷控制器的中斷請(qǐng)求信號(hào)線相連,。而處理器系統(tǒng)需要預(yù)先知道這個(gè)規(guī)則,以便正確處理來(lái)自不同PCI設(shè)備的中斷請(qǐng)求,,這個(gè)規(guī)則也被稱為中斷路由表,,有關(guān)中斷路由表的詳細(xì)描述見第1.4.2節(jié)。
PCI總線在進(jìn)行數(shù)據(jù)傳遞過(guò)程時(shí),,難免會(huì)出現(xiàn)各種各樣的錯(cuò)誤,,因此PCI總線提供了一些錯(cuò)誤信號(hào),如PERR#和SERR#信號(hào),。其中當(dāng)PERR#信號(hào)有效時(shí),,表示數(shù)據(jù)傳送過(guò)程中出現(xiàn)奇偶校驗(yàn)錯(cuò)(Special Cycle周期除外),;而當(dāng)SERR#信號(hào)有效時(shí),表示當(dāng)前處理器系統(tǒng)出現(xiàn)了三種錯(cuò)誤可能,,分別為地址奇偶校驗(yàn)錯(cuò),,在Special Cycle周期中出現(xiàn)數(shù)據(jù)奇偶校驗(yàn)錯(cuò),或者系統(tǒng)出現(xiàn)其他嚴(yán)重錯(cuò)誤,。
如果PCI總線支持64位模式,,還需要提供AD[63:32]、C/BE[7:4],、REQ64,、ACK64和PAR64這些信號(hào)。此外PCI總線還有一些與JTAG,、SMBCLK以及66MHz使能等信號(hào),,本章并不關(guān)心這些信號(hào)。