天天看點

八、PCI總線的其它操作

8.1、裝置選擇

一個裝置是否被選中,是由DEVSEL#信号來訓示的。DEVSEL#由目前傳輸中的目标裝置所驅動,如下圖所示。

八、PCI總線的其它操作

DEVSEL#信号可在位址期之後的1個、2個或3個時鐘處被驅動,具體時刻可在配置空間的狀态寄存器中指定。DEVSEL#的發出必須早于或者同時于目标裝置TRDY#、STOP#或讀的時鐘邊沿,也就是說,一個目标裝置要先置DEVSEL#有效後才能發出其它目标響應信号。一旦目标裝置确定了DEVSEL#信号,就不能在FRAME#被撤銷而IRDY#有效時和最後資料期完成之前撤銷它。在正常的主裝置終止情況下,DEVSEL#的撤銷必須與TRDY#的撤銷同時發生。

如果在FRAME#有效後的3個時鐘周期内,沒有裝置發出DEVSEL#信号,則按負向譯碼的裝置便可以置DEVSEL#有效并擁有傳輸的權力。倘若整個系統中沒有一個負向譯碼的裝置,則主裝置就收不到有效的DEVSEL#信号,它便以自己的方式終止傳輸。

一個目标裝置必須在進行了完全的位址譯碼之後才能發出DEVSEL#或任何其它的目标響應信号,否則設定DEVSEL#有效是非法的,因為這樣可能造成沖突。在非配置指令中,目标裝置必須先用FRAME#信号來認可AD線上的資訊,然後才能設定DEVSEL#信号;而在配置指令中,目标裝置要先用FRAME#和AD[1..0]來認可IDSEL信号後再設定DEVSEL#信号。一般來說,大部分目标裝置都能再FRAME#有效之後的1~2個時鐘周期内完成位址譯碼并發出DEVSEL#信号,如上圖中的快速檔和中速檔。

如果一個通路中的位址落入目标節點的位址範圍,這個目标就會發出DEVSEL#信号,表示承擔這個傳輸通路。但是,如果主備企圖跨越資源邊界以繼續它的突發傳輸時,目标節點就應該發出斷開信号。

當一個目标裝置許諾了一個I/O通路,同時位元組使能信号又表示1個或更多的位元組不再該裝置的位址範圍之内時,它就必須發出目标廢止信号。對于一個負向譯碼的裝置,如擴充總線橋,為了适應這類I/O問題,可采用如下之一的做法:

1)凡是發現有不同的裝置公用一個雙字位址時,就以該位址作正向譯碼,然後再用位元組使能信号進行檢測,發現問題就實作目标廢止。

2)将整個通路都放到擴充總線上,沒法服務的部分就丢掉。

8.2、特殊周期指令

該指令提供了PCI總線上簡單的資訊釋出機制(消息廣播),用以傳達處理機狀态,或者發送各個從裝置之間的信号。如果不要求精确的時間關系或實體信号同步的情況下,此指令也可用來再PCI裝置之間做邏輯的側面連接配接信号。

由于特殊周期指令的目的是提供一種消息廣播機制,是以該指令的發送中沒有明顯的目标位址,而是廣播給所有的裝置,每個接受裝置必須自我确定廣播的消息是否适合它。PCI總線上的裝置不能設定DEVSEL#信号作為對特殊周期指令的響應,也就是說在此類傳輸中,不需要任何目标握手信号;同時,采用負向譯碼的橋也不能把特殊周期指令傳到它的次級總線上去,即特殊周期指令不能跨橋傳播。

一個特殊周期指令可以含有可選的、由消息決定的資料,而且這些資料不需要由PCI序列器本身來解釋,它是根據需要傳送給與PCI序列器相連的硬體。通常情況下,顯式尋址的消息一般不采用特殊周期指令來處理,而是利用PCI總線上的三種實體位址空間的其中之一來處理。

就像其它總線指令一樣,特殊周期指令中也包含一個位址期和一個資料期。位址期也是在FRAME#信号有效之時開始,當FRAME#和IRDY#同時撤銷時,也表示該指令已經完成,要說它與其它總線指令的唯一差別,那就是沒有目标裝置給出DEVSEL#響應信号,它時廣播給所有裝置,然後由感興趣的裝置予以接受并加以處理。

該指令在位址期中,除了發送指令之外不包含其它有效資訊。但是,有一點要注意,盡管該指令不含有明顯的位址資訊,可AD[31..0]要被驅動到一個穩定的電平,同時也要産生奇偶位。在資料期内,AD[31..0]上含有資訊類型和一個選型的資料字段,其中低16位AD[15..0]表示i資訊類型;高16位AD[31..16]表示選項資料,但并不是所有的資訊類型都要求高16位。主裝置可以像對待其它總線指令一樣,在特殊周期指令中插入等待周期,但是,由于沒有固定目标,是以目标裝置不能插入等待周期。消息和資料隻在IRDY#有效的第一個時鐘處有效,而其後資料期中所含資訊及時序關系則由消息類型确定。

在位址期中,若C/BE[3..0]# = 0001,則表示特殊周期指令,此時,AD[31..0]别驅動為随機值且必須忽略;在特殊周期指令的資料期中,C/BE[3..0]#要處于有效狀态,而AD[31..0]的各位如下表所示。

八、PCI總線的其它操作

PCI序列器啟動特殊周期指令的方式與其它的總線指令相同,但該指令的終止則要依靠主裝置廢止方式。響應的目标裝置隻要發現主裝置廢止時就直到通路已經完成,在此情況下,不能将配置空間的狀态寄存器的“接收主裝置廢止位”置為“1”。一般來說,一個特殊周期指令最快可以在5個時鐘周期内完成,同時要附加1個時鐘周期作為下個通路開始之前的過渡周期(交換周期),換而言之,從一個特殊周期指令的開始到下一個通路之間,需要6個時鐘周期。

8.3、資料/位址的漸進

PCI總線上的“事務代理”将一個裝置發出的信号拓展到幾個時鐘周期之内逐漸驅動,而不是在一個時鐘内完成,這種能力成為漸進(Steping)。此概念的應用,可以使一個裝置以“弱的”輸出緩沖将一組信号在幾個時鐘周期内逐漸驅動到有效狀态,進而減少了由每個輸出驅動所産生的地電流負載。還有以各種漸進的方法是:允許裝置以”強的“輸出驅動在幾個時鐘内分批驅動,每個時鐘周期驅動一部分信号,直到全部被驅動到有效狀态為止,成為分批漸進,此方法可以減少同時開關的信号數量。

上述兩種漸進方法,無論哪一種都能使一個晶片的電源線與地線輸減少,進而使得裝置的性能與價格之間具有取舍自由。但應注意,在采用全部漸進時,必須避免哪些要求嚴格的控制信号之間的互相耦合,這是因為,本應在各個時鐘邊沿上取樣的信号此時可能在一個時鐘邊沿上出現跳變,是以,對性能要求較高的裝置應慎用這種方法。

并非所有的信号都可以漸進,隻要AD[31..0]、AD[64..32]、PAR、PAR64及IDSEL這些信号才行,因為它們總是要由控制信号來認可,或者說,這些信号隻有在它們被認可的時鐘邊沿上才被認為是有效的。我們知道,AD線的确認,在位址期是依靠FRAME#信号,在資料期則是根據資料的傳輸方向分别依靠IRDY#或TRDY#信号;PAR是在每個認可AD的時鐘之後一個周期内隐含确認的;IDSEL信号的确認則是通過FRAME#和譯碼得到的配置指令相結合來完成的。

下圖表示了全部AD線的漸進情況。可以看出,一個主裝置将FRAME#的建立一直推遲到該裝置成功地驅動了全部AD線時為止。對于主裝置來講,一旦它的總線使用請求得到準許并且總線又處于空閑狀态時,那麼該裝置對AD線和C/BE#線的驅動時允許的,也是必要的,但是它可以利用多個時鐘周期來驅動使其達到有效值,然後再發FRAME#信号。

八、PCI總線的其它操作

不過,這種延遲建立FRAME#信号的做法,使得主裝置有可能失去總線的控制權,是以,對于任何裝置,GNT#信号在FRAME#信号建立之前的一個時鐘沿處必須有效,如果此時(上圖中标A的時鐘邊沿)GNT#已被置為無效,仲裁器就會将總線準許給另外一個主裝置使用,進而使目前主裝置失掉中線控制權,從圖中可明顯看到,隻要GNT#信号在B或C多對應時鐘邊沿處撤銷,那麼FRAME#信号就能夠建立,并且傳輸将繼續進行。需要說明的是,如果目前主裝置失去總線控制時,它應立即将AD線置為第三狀态。

8.4、配置周期

PCI的驅動軟體提供了一個初始化的配置通道和一塊獨立的位址空間。為此,PCI裝置應具有256位元組的配置寄存器,有關這些寄存器的說明見後面章節。本節隻讨論位通路PCI配置空間而設立的配置指令,即配置讀指令和配置寫指令。

一、配置通路

在前面的章節中我們已讨論過,正常的通路中,每個裝置都對它自己的位址進行譯碼。然而,對于配置位址空間的通路,則要求采用另外的方法進行裝置選擇譯碼,即通過IDSEL引腳來選擇PCI裝置,也就時将IDSEL引腳作為”晶片選擇“信号。對于某一PCI裝置,隻有當它的IDSEL引腳上有信号并且AD[1..0]在位址期内為00時,該裝置才會被作為配置(讀或寫)指令的目标裝置。64個雙字寄存器的内部尋址是通過AD[7..2]和位元組使能信号來完成的。

配置指令跟其它總線指令一樣,允許以位元組、字、雙字或者突發操作的方式進行通路;通路過程中的其它操作及終止方式也和一般的指令沒有什麼差異。如果沒有裝置響應配置指令,則應由主裝置廢止。擴充總線橋絕對不能将配置指令傳到擴充總線上去。

關于如何準确驅動IDSEL引腳的問題,一般由主橋或系統的設計者去決定。但是,才過去的設計中,該選擇信号可以與高21位位址線中的其中一位相連,這是因為在配置通路中,高21位位址線沒有别的用途。至于如何用高21位位址來決定IDSEL,還沒有現成的或标準的方法可遵循,是以,裝置必須留有IDSEL引腳。換而言之,PCI裝置不能為了節省一個引腳而在内部将IDSEL信号連到一個條AD線上。唯獨總線主橋可以例外,因為它可以決定如何映射IDSEL。

AD[31..0]在位址期中必須全部被驅動為有效狀态,其中的每一條可連接配接一個裝置,每次确定AD[31..11]當中的一條為IDSEL信号,進而可以從21一個裝置中選擇一個裝置進行配置讀寫。

上述利用高21位位址線來決定IDSEL的方法會使AD線上增加一個負載,為此,可以将IDSEL利用電阻耦合到适當的AD上來解決負載加重這一問題。然而這樣做,又帶來了一個新的問題,那就是使得IDSEL的變化率大為減慢,并且在大部分時間内處于無效的邏輯狀态。如下圖中的”XXXX“所示的資料區段。

八、PCI總線的其它操作

萬幸的是,IDSEL信号隻有在一個配置指令的位址期内才會用到,是以可以在FRAME#建立之前的幾個時鐘周期内,将與IDSEL相連的位址線進行預先驅動,以保證IDSEL信号在需要被采樣時是穩定有效的。位址總線的預先驅動方法與前述的位址/漸進相類似。

為了支援分層的PCI總線,采用了兩種類型的配置通路,分别成為0類配置通路和1類配置通路,其格式如下:

八、PCI總線的其它操作

從上面的格式表示中可以看出,它們的實質是表示了AD線在配置指令的位址其中的用法。兩類通路的差別在于AD[1..0]線上的取值不同。對于0類配置通路,AD[1..0] = 00,用來在運作的PCI總線上選擇一個裝置;對于1類配置通路,AD[1..0] = 01,用來将一個配置請求傳遞到另一條PCI總線上。可見,在此處AD[1..0]相當于标志位。

兩類配置通路中的寄存器編号和功能編号字段具有相同的含義;裝置編号和總線編号字段隻用于1類配置通路中;目标裝置對保留字段應予以忽略,不能做出任何響應。

下面對上述各字段的具體含義做一說明:

寄存器号:選擇目标裝置配置空間中的一個雙字(DWORD)。

功能号:用來選擇多功能裝置的某一個功能,有八種功能供選擇。

裝置号:用以在一條給定的總線上選擇32個裝置的其中之一。但是如果采用IDSEL與一條AD線相連,隻能選擇到21個裝置。

總線号:用以在一個系統中從256條總線中選擇一條。

無論是主橋還是PCI到PCI的橋,如果需要殘生一個0類配置通路時,要用裝置号決定建立哪一條IDSEL信号;在AD[10..8]上提供功能号;在AD[7..2]上給出寄存器号;AD[1..0]此時必須為00以表示為0類配置空間。0類配置通路不會傳播到本地PCI總線以外的總線上去,是以,必須要有一個本地裝置對其做出響應,否則,主裝置就會将該次通路廢止。

倘若配置通路的目标不再本地總線上,而是在另一條PCI總線上,那就必須用1類配置通路。也就是說,1類通路隻适用于PCI到PCI的橋,其它所有目标裝置都将其忽略,不作任何響應。這些橋對總線号字段進行譯碼,以判斷配置通路的目标是否駐留在自己的橋路之後。如果總線号不是隻想自己橋路後面的一條總線,就将它忽略,如果通路的目标時本橋路後面的一條總線,此橋就要接收這次配置通路,其具體的響應又分為兩種情況:①如果總線編号與該橋路所帶總線相符,此橋就要把這個1類通路變換成0類配置通路,也就是将AD[1..0]由01轉變為00,而AD[10..2]保持原值不變,同時對裝置号進行譯碼進而選擇一個IDSEL在相應的線上發出,開始一次配置通路;②如果總線編号與該橋路所帶的總線不相符,此橋就會将配置通路直接向下一級傳遞。

有兩種類型的裝置可以響應0類配置通路:其一為單功能裝置,是為了做到向後相容而設定的,響應于否隻需要利用它的IDSEL引腳和AD[1..0] = 00來決定;其二為多功能裝置,能夠接收功能編号字段,需要利用它的IDSEL引腳、AD[1..0] = 00及AD[10..8]的編碼值這三個條件來決定是否響應相應的配置通路。這兩類裝置的卻别在于它們的配置空間的頭标區的編碼值不同。

對于多功能裝置,必須能對AD[10..8]進行完全譯碼。 以選擇相應的功能,而且,隻有那些在配置空間寄存器組中實作的功能才能得到響應。在它們所實作的功能中,必須具有0号功能,其它的功能都是可選的,并且功能編号可任意選擇。例如,有一個2功能裝置,那它必須有0号功能,而第二個功能的編号可以是1~7中當中的任何一個号碼。

配置編碼(程式)将會按照裝置号的順序在總線上進行探測。如果得知某一裝置是單功能裝置,就不會對該裝置再作進一步探測;如果發現是一多功能裝置,将會對其所有的功能進行檢查。

二、配置周期的産生

在系統中必須提供一個可以由軟體産生PCI配置周期的機制,通常将這種機制置于主橋路中。PCI總線規範支隊PC-AT相容的系統規定了産生配置周期的機制,而對其它系統未作規定。

對于PC-AT相容機,PCI總線規範中定義了兩種截然不同的機制,以允許軟體産生配置周期,這兩種機制成為配置機制#1和配置機制#2。下面分别予以叙述。

對于配置機制#1要求優先考慮并實作之。将來所有的主橋都必須實作配置機制#1,現有的橋如果有可能的話,也應該設法轉變以實作它;配置機制#2的設立是為了做到向後相容,是以,新的設計中絕對不能采用它。凡是在PC-AT相容系統中使用的主橋,至少應實作這兩種機制的其中之一。

1、配置機制#1

在配置機制#1中,使用兩個DWORD(雙字)的I/O單元。第一單元(CF8H)表示一個可讀寫的寄存器,叫做CONFIG-ADDRES;第二個單元(CFCH)成為CONFIG-DATA寄存器。

通路配置空間的一般機制是:在CONFIG-ADDRES中寫入一個值,用以指定總線編号、裝置編号、配置寄存器編号,這樣一來,凡是對CONFIG-DATA寄存器的讀寫操作,都會使橋路把CONFIG-ADDRES的值轉變為PCI總線上所要求的配置通路周期。

CONFIG-ADDRES寄存器為32位,其格式如下:

八、PCI總線的其它操作

其中,位1和位0兩位是隻讀位,讀出值必須為00;位7到位2用以在裝置的配置空間中選擇一個DWORD;位10到位8用來選擇一多功能裝置中一個指定的功能;位15到位11用來在指定的總線上選擇一個指定的裝置;位23到位16用以在系統中選擇一個指定的總線;位30到位24位保留位,隻能讀且讀出值必須全為0;最高位是使能位,用來決定何時把對CONFIG-DATA寄存器的通路轉變成PCI總線上的配置通路。當該位為”1“的時,表示允許,反之表示不允許。

任何時候,隻要主橋發現一個對CONFIG-ADDRESS全部DWORD的I/O寫指令,該橋就必須把資料存入它的CONFIG-ADDRES寄存器。如果主橋發現一個對CONFIG-ADDRES寄存器整個DWORD的I/O讀指令時,它就必須送回CONFIG-ADDRES寄存器中的資料。對于此位址的其它任何類型的通路(即非DWORD),主橋必須将其按一次正常的I/O通路來處理,而不能産生特殊的響應。

CONFIG-ADDRES寄存器在I/O空間耗費的僅僅是給定位址上的一個DWORD(雙字),使用位元組或字寄存器的裝置不會收到影響,因為這些内容将會原封不動的被傳遞。

當一個橋發現一個I/O通路落入CONFIG-DATA位址開始的DWORD中,它就要檢查CONFIG-ADDRES寄存器中的使能标志位和總線編号字段,如果使能标志位為1,同時總線編号與該橋路或任何在該橋路之後的總線編号相符時,則該橋路就必須進行一次配置周期的轉換。

配置周期的轉換有兩種類型可采用:第一種為0類,此類轉換用在被尋址的裝置位于橋路所連接配接的PCI總線上的情況下;第二種為1類,當裝置位于橋路後面的另一條總線上時采用該類轉換。

下圖表示了0類配置周期在橋路上的轉換情況。橋路對裝置編号字段進行譯碼并在适當的IDSEL線上建立信号,進而在PCI總線上完成一次配置通路。從圖中可以看出發送到PCI總線的AD線上各部分資訊的轉換關系,其中AD[10..2]直接取自CONFIG-ADDRES寄存器的相應位,AD[1..0] = 00。

八、PCI總線的其它操作

對于1類配置周期的轉換,其具體過程時橋路在一個配置指令的位址期中,直接将CONFIG-ADDRES寄存器的内容複制到PCI總線的AD線上,并且保證使AD[1..0] = 01。

在上述兩種轉換情況下,配合資料傳輸的位元組使能信号必須從處理機總線上直接複制得到。

對于在處理機總線上具有與主橋同等功能的橋路系統,其中的同等橋路對CONFIG-ADDRESS的通路,一般被設計成以應答方式進行的,而處理機總線上的其它橋路将監聽對CONFIG-ADDRESS寄存器的寫操作。至于對CONFIG-DATA寄存器的通路,一般由主橋在進行配置轉換中以應答的方式進行。

主橋和PCI到PCI的橋一般都要求兩個配置空間寄存器,其内容用以決定神那麼時候該橋路應進行配置周期的轉換。一個寄存器成為總線編号寄存器,用來制定本橋路後面直接相連的PCI總線的編号;另一個寄存器叫做從屬總線編号寄存器,用它來制定橋路後面最後一次總線的編号。這些寄存器均由POST曆程負責将它們置以适當的初始值。

2、配置機制#2

配置機制#2實際上是為了PCI配置空間的通路提供了一種模式,在該模式中,把PCI的配置空間映射到4K位元組的CPU I/O空間。如果該模式處于允許狀态,則對C000H~CFFFH範圍内I/O空間的任何CPU通路,都會變換成一個PCI配置周期。反之,當該模式設定為禁止狀态時,對上述範圍内的I/O空間的所有CPU通路,都成為對系統中響應I/O端口的通路。該機制不支援處理機總線上的同等橋路。

在這種機制下,要用到兩個寄存器,現分述如下:

1)配置空間使能寄存器(CSE)

該寄存器位于I/O端口位址CF8H上,其作用是通過對該寄存器的寫入來完成配置空間到I/O空間的映射。CSE寄存器各位的含義如下:

八、PCI總線的其它操作

可見,CSE寄存器隻有8位,是以,所有對該寄存器的通路必須是單一位元組的操作。另外該寄存器是一個可讀可寫的I/O端口,在邏輯上它駐留于主橋路。各位的功能是:

a)、0位為使能位,當該位為0時,表示要産生配置周期,若将該位置1,則表示要用配置機制産生特殊周期(詳細說明見後);

b)、位1~位3是為配置周期提供功能号,它們在産生配置周期時被傳送到AD[10..8]線上;

c)、位3~位7叫開關字段,用來決定映射功能,可以把I/O空間的讀寫變成PCI配置空間的讀寫。

主橋對于讀CSE寄存器的響應是把最後一次寫入該寄存器的資料傳回。系統複位之後,CSE寄存器被清零,主橋進入預設狀态,此時它對所有的I/O通路都按正常方式處理。

2)路徑寄存器

該寄存器位于I/O位址CFAH處,用來指明通路哪一條PCI總線。它是一個可讀可寫的寄存器,且複位後的初始值為0,也是一個8位的寄存器。讀這個寄存器時,它傳回的是上次寫入的值。如果該寄存器為“00”時,則表明要通路的總線是與橋路直接相連的PCI總線,而且是0類配置通路;如果該路徑寄存器的值為非零時,則形成了1類配置通路,而且其值被映射到AD[23..16]線上,并在配置通路的位址期内送出。

3、配置空間的映射及配置周期的形成

下面介紹如何利用I/O位址、CSE寄存器及路徑寄存器進行配置空間的映射和兩類配置周期的産生。

如果CSE寄存器的開關字段不為0時,說明允許橋路進行配置空間的映射,這時,橋路必須把C000H~CFFFH範圍内的所有I/O通路轉變為PCI配置周期。這種變換首先要利用I/O通路的I/O位址,很明顯,由于是對C000H~CFFFH範圍内I/O通路的變換,是以,I/O位址的位15~位12必然為“1100”。至于I/O位址的其餘位,其用途是位11~位8用來對每個總線上的16個PCI裝置進行尋址,也就是從16個裝置中選擇其中之一;位7~位2用以選擇裝置配置空間中某一個特定的DWORD。

具體的變換又分為兩種情況:其一是當路徑寄存器位0時的情況,此時表明被通路的裝置位于PCI總線編号為0的總線上,也就是說,該總線直接連在橋後,此時的變換結果是形成一個0類配置通路。如下圖所示。

八、PCI總線的其它操作

其二為路徑寄存器不為0的情況,這時說明所要通路的裝置不在橋路直接相連的PCI總線上,此時,該橋路應産生1類配置周期,并将路徑寄存器的值映射到PCI總線的AD[23..16]線上,如下圖所示。

八、PCI總線的其它操作

4、利用配置機制形成特殊周期

這部分内容主要說明對于具有配置機制#1和配置機制#2的主橋如何實作軟體産生特殊周期,而且不需要為次目的提供一個機構給主橋。

在具有配置機制#1的主橋上,當CONFIG-ADDRESS寄存器中的總線編号等于橋路的總線号,裝置編号字段和功能編号字段均為全1且寄存器編号字段為全0時,則在下一次對CONFIG-DATA寄存器進行寫操作時便會形成一個特殊周期。此時,當寫CONFIG-DATA寄存器時,橋路就不會發出配置寫指令,而是在C/BE[3..0]#上發出一個特殊周期指令,并在第一個資料期将I/O寫資料放到AD[31..0]線上。在這種情況下,對CONFIG-DATA的讀操作結果時不确定的。

假如CONFIG-ADDRESS的總線編号和橋路的總線編号不相符時,該橋路便把對CONFIG-DATA寄存器的寫指令當作1類配置周期通過PCI總線向下傳遞。

對于具有配置機制#2的主橋,當CSE寄存器的位0置為“1”,并且該寄存器的功能編号字段為全“1”、開關字段為非零時,則允許該橋路在下次遇到CPU的I/O寫通路位址CF00H的情況,形成一個特殊周期或者一個1類配置周期。

此時,不禁要問,如何判斷時特殊周期還是1類配置周期呢?方法是:在上述條件滿足的情況下,橋路還要檢查路徑寄存器的内容。如果該寄存器為全0,則主橋路在PCI總線上發出的是特殊周期指令,并在位址期内将特殊周期指令代碼放到C/BE[3..0]#線上,在第一資料期把對位址CF00H的I/O寫資料放到AD[31..0]線上;如果路徑寄存器不是全0,則主橋路在PCI總線發出的是1類配置周期,其中的裝置編号字段和功能編号字段(AD[15..0])全為“1”,寄存器編号(AD[7..2])為00.

在上述情況下,對位址CXXXH的讀通路将會産生不确定的讀出結果。

8.5、快速的背對背傳輸

對于一個主裝置,可以采用兩種方式進行快速的背對背傳輸,一種是通路同一裝置,另一種是通路不同裝置。但是不論是哪一種快速的背對背傳輸,隻有在TRDY#、DEVSEL#或者STOP#不發生競争的前提下才可以進行。

第一種快速的背對背傳輸允許将避免競争負擔加在主裝置上,而第二種則是将這種負擔加于所有潛在的目标裝置上。如果主裝置能夠保證競争不會發生,就可以将兩次傳輸之間的空閑周期取消,具體地講就是,如果主裝置的第二次傳輸與第一次傳輸的目标是同一個,并且第一次傳輸又是一個寫操作的情況下,便可取消兩次傳輸之間的空閑周期。

在第二種快速背對背傳輸當中,要求主裝置應知道潛在目标的位址邊界,否則可能發生競争。對于主裝置可以将這種快速背對背作為選項,但目标裝置必須對這種快速背對背進行譯碼。

由于第二種快速背對背允許将避免競争的任務放在所有潛在的目标裝置上完成,是以狀态寄存器當中的快速背對背允許位可以接在高電平上,但是一個總線目标裝置要這樣作必須滿足下列要求:

1)目标裝置保證既不會獨釣一個總線傳輸的開始部分,也不會丢掉位址,哪怕是傳輸開始之前沒有一個空閑周期時也應如此。也就是說,在連續的時鐘周期内,目标裝置要能夠跟上總線狀态從一個最終資料傳輸(FRAME#為高,IRDY#為低)直接變到一個位址期(FRAME#為低,IRDY#為高)這樣一種快速的跳變。

2)目标裝置必須能避免DEVSEL#、TRDY#和STOP#信号的沖突。如果目标裝置不實作最快的DEVSEL#響應時間,就可以保證這一點。而對于那些實作0等待譯碼的目标裝置,除了下列兩種情況之外,必須将上述三個信号延遲一個時鐘周期再發送。

①目前的傳輸緊跟在一個總線空閑周期之後,這時就不是一個背對背傳輸。

②目前的目标裝置已經在前次傳輸中設定了DEVSEL#信号,此時,盡管屬于背對背傳輸,但所涉及的目标裝置與前次相同。

對于背對背傳輸需要目标機構支援才能完成的主裝置,就要使用指令寄存器中的快速背對背使能位(該位僅對作為總線主裝置的裝置有意義,且是一個可選項)。該位可讀可寫,如果這個使能位為“1”時,隻要前一次傳輸時由目前總線主裝置發動的寫操作,那麼該主裝置就可以利用快速背對背的時續關系啟動一次PCI傳輸,而不必考慮哪個目标裝置被尋址。反之,如果這個使能位為“0”或者沒有實作,那麼隻有在主節點能夠確定新的傳輸所對應的目标裝置與前一次相同的情況下,才可以進行快速背對背傳輸。該位的設定也許要由系統的POST例程來完成。但在設定時應確定同一條總線上的所有目标裝置的快速背對背使能位均被設定。

PCI總線之是以提供快速背對背傳輸功能,是由于這種配置中将PCI總線作為處理機到主存的通路,進而使得在“低檔”系統配置中可實作性能方面的改進。尤其使這種功能的實作代價幾乎可忽略不計,是以建議所有新出的目标裝置或者準備用于這種配置的裝置都應實作這個功能。但是,對于現有的裝置,沒有必要僅為此功能而進行重新設計,這時因為如此做法對現有應用可能不會帶來多少好處。

在其它所有條件下,主裝置必須至少插入一個總線空閑周期,即就是在不同的主裝置傳輸之間也要保證至少有一個總線空閑周期。值得注意的是,對于多端口目标裝置,當它在快速背對背傳輸中被鎖住時,隻能鎖定它本身。

有一點是重要的,在快速背對背傳輸過程當中其裝置未被涉及的節點,不能也不需要利用FRAME#和IRDY#信号來區分中間傳輸邊界。隻要在快速背對背傳輸期間涉及到的主裝置和目标裝置才需要區分這些邊界。

在一次背對背傳輸過程中,主裝置可以直接啟動下一次傳輸而不用插入一個總線空閑周期,當FRAME#信号撤銷而IRDY#和TRDY#信号都有效時,表明最後資料期已經完成。目前主裝置可以在前一次傳輸的最後資料傳輸期開始之時,啟動下一次傳輸。如下圖所示。

八、PCI總線的其它操作

在上圖中,主裝置CLK3處完成了一個寫操作,并且在下一次傳輸的位址期緊接着在CLK4上出現。目标裝置必須在目前傳輸完成之後的下一個時鐘上采樣FRAME#信号。盡管背對背操作對主裝置來講可以是選項,但目标裝置對此操作必須能夠全部譯碼,即使支援第二種背對背機制的目标裝置也必須能夠區分全部PCI傳輸的完成,并能檢測到所有的位址期。如果一個目标裝置通過設定DEVSEL#信号而确立了從屬關系後,它可以對傳輸請求發出再試響應。