一、PCI匯流排的儲存器讀寫匯流排事務

匯流排的基本任務是實現資料傳送,將一組資料從一個裝置傳送到另一個裝置,當然匯流排也可以將一個裝置的資料廣播到多個裝置。在處理器系統中,這些資料傳送都要依賴一定的規則,PCI匯流排並不例外。

PCI匯流排使用單端並行資料線,採用地址譯碼方式進行資料傳遞,而採用ID譯碼方式進行配置資訊的傳遞。其中地址譯碼方式使用地址訊號,而ID譯碼方式使用PCI裝置的ID號,包括Bus Number、Device Number、Function Number和Register Number。下文將以圖1‑1中的處理器系統為例,簡要介紹PCI匯流排支援的匯流排事務及其傳送方式。

如表1‑2所示,PCI匯流排支援多種匯流排事務。而本節重點介紹儲存器讀寫匯流排事務,I/O讀寫匯流排事務,並在第2.4節詳細介紹配置讀寫匯流排事務。值得注意的是,PCI裝置只有在系統軟體初始化配置空間之後,才能夠被其他主裝置訪問。

當PCI裝置的配置空間被初始化之後,該裝置在當前的PCI匯流排樹上將擁有一個獨立的PCI匯流排地址空間,即BAR((Base Address Register)暫存器所描述的空間,有關BAR暫存器的詳細說明見第2.3.2節。

處理器與PCI裝置進行資料交換,或者PCI裝置之間進行儲存器資料交換時,都將通過PCI匯流排地址完成。而PCI裝置與主儲存器進行DMA操作時,使用的也是PCI匯流排域的地址,而不是儲存器域的地址,此時HOST主橋將完成PCI匯流排地址到儲存器域地址的轉換,不同的HOST主橋進行地址轉換時使用的方法並不相同。

PCI匯流排的配置讀寫匯流排事務與HOST主橋與PCI橋相關,因此讀者需要了解HOST主橋和PCI橋的詳細實現機制之後,才能深入理解這部分內容。本篇將在第2.4節詳細介紹這些內容。在下文中,我們假定所使用的PCI裝置的配置空間已經被系統軟體初始化。

PCI匯流排支援以下幾類儲存器讀寫匯流排事務。

(1) HOST處理器對PCI裝置的BAR空間進行資料讀寫,BAR空間可以使用儲存器或者I/O譯碼方式。HOST處理器使用PCI匯流排的儲存器讀寫匯流排事務和I/O讀寫匯流排事務訪問PCI裝置的BAR空間。

(2) PCI裝置之間的資料傳遞。在PCI總線上的兩個裝置可以直接通訊,如一個PCI裝置可以訪問另外一個裝置的BAR空間。不過這種資料傳遞在PC處理器系統中,較少使用。

(3) PCI裝置對主儲存器進行讀寫,即DMA讀寫操作。DMA讀寫操作在所有處理器系統中都較為常用,也是PCI匯流排資料傳送的重點所在。在多數情況下,DMA讀寫操作結束後將伴隨著中斷的產生。PCI裝置可以使用INTA#、INTB#、INTC#和INTD#訊號提交中斷請求,也可以使用MSI機制提交中斷請求。

1、PCI匯流排事務的時序

PCI匯流排使用第1.2節所述的訊號進行資料和配置資訊的傳遞,一個PCI匯流排事務的基本訪問時序如圖1‑3所示,與PCI匯流排事務相關的控制訊號有FRAME#、IRDY#、TRDY#、DEVSEL#等其他訊號。

當一個PCI主裝置需要使用PCI匯流排時,需要首先發送REQ#訊號,通過匯流排仲裁獲得匯流排使用權,即GNT#訊號有效後,使用以下步驟完成一個完整PCI匯流排事務,對目標裝置進行儲存器或者I/O地址空間的讀寫訪問。

(1) 當PCI主裝置獲得匯流排使用權之後,將在CLK1的上升沿置FRAME#訊號有效,啟動PCI匯流排事務。當PCI匯流排事務結束後,FRAME#訊號將被置為無效。

(2) PCI匯流排週期的第一個時鐘週期(CLK1的上升沿到CLK2的上升沿之間)為地址週期。在地址週期中,PCI主裝置將訪問的目的地址和匯流排命令分別驅動到AD[31:0]和C/BE#訊號上。如果當前匯流排命令是配置讀寫,那麼IDSEL訊號線也被置為有效,IDSEL訊號與PCI匯流排的AD[31:11]相連,詳見第2.4.4節。

(3) 當IRDY#、TRDY#和DEVSEL#訊號都有效後,匯流排事務將使用資料週期,進行資料傳遞。當IRDY#和TRDY#訊號沒有同時有效時,PCI匯流排不能進行資料傳遞,PCI匯流排使用這兩個訊號進行傳送控制。

(4) PCI匯流排支援突發週期,因此在地址週期之後可以有多個數據週期,可以傳送多組資料。而目標裝置並不知道突發週期的長度,如果目標裝置不能繼續接收資料時,可以disconnect當前匯流排事務。值得注意的是,只有儲存器讀寫匯流排事務可以使用突發週期。

一個完整的PCI匯流排事務遠比上述過程複雜的多,因為PCI匯流排還支援許多傳送方式,如雙地址週期、fast back-to-back(快速背靠背)、插入等待狀態、重試和斷連、總線上的錯誤處理等一系列匯流排事務。本篇不一一介紹這些傳送方式。

2、Posted和Non-Posted傳送方式

PCI匯流排規定了兩類資料傳送方式,分別是Posted和Non-Posted資料傳送方式。其中使用Posted資料傳送方式的匯流排事務也被稱為Posted匯流排事務;而使用Non-Posted資料傳送方式的匯流排事務也被稱為Non-Posted匯流排事務。

其中Posted匯流排事務指PCI主裝置向PCI目標裝置進行資料傳遞時,當資料到達PCI橋後,即由PCI橋接管來自上游匯流排的匯流排事務,並將其轉發到下游匯流排。採用這種資料傳送方式,在資料還沒有到達最終的目的地之前,PCI匯流排就可以結束當前匯流排事務,從而在一定程度上解決了PCI匯流排的擁塞。

而Non-Posted匯流排事務是指PCI主裝置向PCI目標裝置進行資料傳遞時,資料必須到達最終目的地之後,才能結束當前匯流排事務的一種資料傳遞方式。

顯然採用Posted傳送方式,當這個Posted匯流排事務通過某條PCI匯流排後,就可以釋放PCI匯流排的資源;而採用Non-Posted傳送方式,PCI匯流排在沒有結束當前匯流排事務時必須等待。這種等待將嚴重阻塞當前PCI總線上的其他資料傳送,因此PCI匯流排使用Delayed匯流排事務處理Non-Posted資料請求,使用Delayed匯流排事務可以相對緩解PCI匯流排的擁塞。Delayed匯流排事務的詳細介紹見第1.3.5節。

PCI匯流排規定只有儲存器寫請求(包括儲存器寫並無效請求)可以採用Posted匯流排事務,下文將Posted儲存器寫請求簡稱為PMW(Posted Memory Write),而儲存器讀請求、I/O讀寫請求、配置讀寫請求只能採用Non-Posted匯流排事務。

下文以圖1‑1的處理器系統中的PCI裝置11向儲存器進行DMA寫操作為例,說明Posted傳送方式的實現過程。PCI裝置11進行DMA寫操作時使用儲存器寫匯流排事務,當PCI裝置11獲得PCI匯流排x1的使用權後,將傳送儲存器寫匯流排事務到PCI匯流排x1。當PCI橋1發現這個匯流排事務的地址不在該橋管理的地址範圍內將首先接收這個匯流排事務,並結束PCI匯流排x1的匯流排事務。

此時PCI匯流排x1使用的資源已被釋放,PCI裝置11和PCI裝置12可以使用PCI匯流排x1進行通訊。PCI橋1獲得PCI匯流排x0的使用權後,將轉發這個儲存器寫匯流排事務到PCI匯流排x0,之後HOST主橋x將接收這個儲存器寫匯流排事務,並最終將資料寫入主儲存器。

由以上過程可以發現,Posted資料請求在通過PCI匯流排之後,將逐級釋放匯流排資源,因此PCI匯流排的利用率較高。而使用Non-Posted方式進行資料傳送的處理過程與此不同,Non-Posted資料請求在通過PCI匯流排時,並不會及時釋放匯流排資源,從而在某種程度上影響PCI匯流排的使用效率和傳送頻寬。

3、 HOST處理器訪問PCI裝置

HOST處理器對PCI裝置的資料訪問主要包含兩方面內容,一方面是處理器向PCI裝置發起儲存器和I/O讀寫請求;另一方面是處理器對PCI裝置進行配置讀寫。

在PCI裝置的配置空間中,共有6個BAR暫存器。每一個BAR暫存器都與PCI裝置使用的一組PCI匯流排地址空間對應,BAR暫存器記錄這組地址空間的基地址。本書將與BAR暫存器對應的PCI匯流排地址空間稱為BAR空間,在BAR空間中可以存放I/O地址空間,也可以存放儲存器地址空間。

PCI裝置可以根據需要,有選擇地使用這些BAR空間。值得注意的是,在BAR暫存器中存放的是PCI裝置使用的“PCI匯流排域”的實體地址,而不是“儲存器域”的實體地址,有關BAR暫存器的詳細介紹見第2.3.2節。

HOST處理器訪問PCI裝置I/O地址空間的過程,與訪問儲存器地址空間略有不同。有些處理器,如x86處理器,具有獨立的I/O地址空間。x86處理器可以將PCI裝置使用的I/O地址對映到儲存器域的I/O地址空間中,之後處理器可以使用IN,OUT等指令對儲存器域的I/O地址進行訪問,然後通過HOST主橋將儲存器域的I/O地址轉換為PCI匯流排域的I/O地址,最後使用PCI匯流排的I/O匯流排事務對PCI裝置的I/O地址進行讀寫訪問。在x86處理器中,儲存器域的I/O地址與PCI匯流排域的I/O地址相同。

對於有些沒有獨立I/O地址空間的處理器,如PowerPC處理器,需要在HOST主橋初始化時,將PCI裝置使用的I/O地址空間對映為處理器的儲存器地址空間。PowerPC處理器對這段“儲存器域”的儲存器空間進行讀寫訪問時,HOST主橋將儲存器域的這段儲存器地址轉換為PCI匯流排域的I/O地址,然後通過PCI匯流排的I/O匯流排事務對PCI裝置的I/O地址進行讀寫操作。

在PCI匯流排中,儲存器讀寫事務與I/O讀寫事務的實現較為類似。首先HOST處理器在初始化時,需要將PCI裝置使用的BAR空間對映到“儲存器域”的儲存器地址空間。之後處理器通過儲存器讀寫指令訪問“儲存器域”的儲存器地址空間,HOST主橋將“儲存器域”的讀寫請求翻譯為PCI匯流排的儲存器讀寫匯流排事務之後,再發送給目標裝置。

值得注意的是,儲存器域和PCI匯流排域的概念,PCI裝置能夠直接使用的地址為PCI匯流排域的地址,在PCI匯流排事務中出現的地址也為PCI匯流排域的地址;而處理器能夠直接使用的地址為儲存器域的地址。理解儲存器域與PCI匯流排域的區別對於理解PCI匯流排至關重要,本篇將在第2.1節專門討論這兩個概念。

以上對PCI匯流排的儲存器與I/O匯流排事務的介紹並沒有考慮PCI橋的存在,如果將PCI橋考慮進來,情況將略微複雜一些。下文將以圖1‑1為例說明處理器如何通過HOST主橋和PCI橋1對PCI裝置11進行儲存器讀寫操作。當處理器對PCI裝置11進行儲存器寫操作時,這些資料需要通過HOST主橋x和PCI橋x1,最終到達PCI裝置11,其訪問步驟如下。值得注意的是,以下步驟忽略PCI匯流排的仲裁過程。

(1) 首先處理器將要傳遞的資料放入通用暫存器中,之後向PCI裝置11對映到的儲存器域的地址進行寫操作。值得注意的是,處理器並不能直接訪問PCI裝置11的PCI匯流排地址空間,因為這些地址空間是屬於PCI匯流排域的,處理器所能直接訪問的空間是儲存器域的地址空間。處理器必須通過HOST主橋將儲存器域的資料訪問轉換為PCI匯流排事務才能對PCI匯流排地址空間進行訪問。

(2) HOST主橋x接收來自處理器的儲存器寫請求,之後處理器結束當前儲存器寫操作,釋放系統匯流排。HOST主橋x將儲存器域的儲存器地址轉換為PCI匯流排域的PCI匯流排地址。並向PCI匯流排x0發起PCI寫請求匯流排事務。值得注意的是,雖然在許多處理器系統中,儲存器地址和PCI匯流排地址完全相等,但其含義完全不同。

(3) PCI匯流排x0上的PCI裝置01、PCI裝置02和PCI橋1將同時監聽這個PCI寫匯流排事務。最後PCI橋x1接收這個寫匯流排事務,並結束來自PCI匯流排x0的PCI匯流排事務。之後PCI橋x1向PCI匯流排x1發起新的PCI匯流排寫匯流排事務。

(4) PCI匯流排x1上的PCI裝置11和PCI裝置12同時監聽這個PCI寫匯流排事務。最後PCI裝置11通過地址譯碼方式接收這個寫匯流排事務,並結束來自PCI匯流排x1上的PCI匯流排事務。

由以上過程可以發現,由於儲存器寫匯流排事務使用Posted傳送方式,因此資料通過PCI橋後都將結束上一級匯流排的PCI匯流排事務,從而上一級PCI匯流排可以被其他PCI裝置使用。如果使用Non-Posted傳送方式,直到資料傳送到PCI裝置11之後,PCI匯流排x1和x0才能依次釋放,從而在某種程度上將造成PCI匯流排的擁塞。

處理器對PCI裝置11進行I/O寫操作時只能採用Non-Posted方式進行,與Posted方式相比,使用Non-Posted方式,當資料到達目標裝置後,目標裝置需要向主裝置發出“迴應[1] ”,當主裝置收到這個“迴應”後才能結束整個匯流排事務。本節不再講述處理器如何對PCI裝置進行I/O寫操作,請讀者思考這個過程。

處理器對PCI裝置11進行儲存器讀時,這個讀請求需要首先通過HOST主橋x和PCI橋x1到達PCI裝置,之後PCI裝置將讀取的資料再次通過PCI橋x1和HOST主橋x傳遞給HOST處理器,其步驟如下所示。我們首先假設PCI匯流排沒有使用Delayed傳送方式處理Non-Posted匯流排事務,而是使用純粹的Non-Posted方式。

(1) 首先處理器準備接收資料使用的通用暫存器,之後向PCI裝置11對映到的儲存器域的地址進行讀操作,

(2) HOST主橋x接收來自處理器的儲存器讀請求。HOST主橋x進行儲存器地址到PCI匯流排地址的轉換,之後向PCI匯流排x0發起儲存器讀匯流排事務。

(3) PCI匯流排x0上的PCI裝置01、PCI裝置02和PCI橋x1將監聽這個儲存器讀請求,之後PCI橋1接收這個儲存器讀請求。然後PCI橋x1向PCI匯流排x1發起新的PCI匯流排讀請求。

(4) PCI匯流排x1上的PCI裝置11和PCI裝置12監聽這個PCI讀請求匯流排事務。最後PCI裝置11接收這個儲存器讀請求匯流排事務,並將這個讀請求匯流排事務轉換為儲存器讀完成匯流排事務之後,將資料傳送到PCI橋x1,並結束來自PCI匯流排x1上的PCI匯流排事務。

(5) PCI橋x1將接收到的資料通過PCI匯流排x0,繼續上傳到HOST主橋x,並結束PCI匯流排x0上的PCI匯流排事務。

(6) HOST主橋x將資料傳遞給處理器,最終結束處理器的儲存器讀操作。

顯然這種方式與Posted傳送方式相比,PCI匯流排的利用率較低。因為只要HOST處理器沒有收到來自目標裝置的“迴應”,那麼HOST處理器到目標裝置的傳送路徑上使用的所有PCI匯流排都將被阻塞。因而PCI匯流排x0和x1並沒有被充分利用。

由以上例子,我們可以發現只有“讀完成”依次通過PCI匯流排x1和x0之後,儲存器讀匯流排事務才不繼續佔用PCI匯流排x1和x0的資源,顯然這種資料傳送方式並不合理。因此PCI匯流排使用Delayed傳送方式解決這個匯流排擁塞問題,有關Delayed傳送方式的實現機制見第1.3.5節。

4、PCI裝置讀寫主儲存器

PCI裝置與儲存器直接進行資料交換的過程也被稱為DMA。與其他匯流排的DMA過程類似,PCI裝置進行DMA操作時,需要獲得資料傳送的目的地址和傳送大小。支援DMA傳遞的PCI裝置可以在其BAR空間中設定兩個暫存器,分別儲存這個目標地址和傳送大小。這兩個暫存器也是PCI裝置DMA控制器的組成部件。

值得注意的是,PCI裝置進行DMA操作時,使用的目的地址是PCI匯流排域的實體地址,而不是儲存器域的實體地址,因為PCI裝置並不能識別儲存器域的實體地址,而僅能識別PCI匯流排域的實體地址。

HOST主橋負責完成PCI匯流排地址到儲存器域地址的轉換。HOST主橋需要進行合理設定,將儲存器的地址空間對映到PCI匯流排之後,PCI裝置才能對這段儲存器空間進行DMA操作。PCI裝置不能直接訪問沒有經過主橋對映的儲存器空間。

許多處理器允許PCI裝置訪問所有儲存器域地址空間,但是有些處理器可以設定PCI裝置所能訪問的儲存器域地址空間,從而對儲存器域地址空間進行保護。例如PowerPC處理器的HOST主橋可以使用Inbound暫存器組,設定PCI裝置訪問的儲存器地址範圍和屬性,只有在Inbound暫存器組對映的儲存器空間才能被PCI裝置訪問,本篇將在第2.2節詳細介紹PowerPC處理器的這組暫存器。

由上所述,在一個處理器系統中,並不是所有儲存器空間都可以被PCI裝置訪問,只有在PCI匯流排域中有映像的儲存器空間才能被PCI裝置訪問。經過HOST主橋對映的儲存器,具有兩個“地址”,一個是在儲存器域的地址,一個是在PCI匯流排域的PCI匯流排地址。當處理器訪問這段儲存器空間時,使用儲存器地址;而PCI裝置訪問這段記憶體時,使用PCI匯流排地址。在多數處理器系統中,儲存器地址與PCI匯流排地址相同,但是系統程式設計師需要正確理解這兩個地址的區別。

下文以PCI裝置11向主儲存器寫資料為例,說明PCI裝置如何進行DMA寫操作。

(1) 首先PCI裝置11將儲存器寫請求發向PCI匯流排x1,注意這個寫請求使用的地址是PCI匯流排域的地址。

(2) PCI匯流排x1上的所有裝置監聽這個請求,因為PCI裝置11是向處理器的儲存器寫資料,所以PCI匯流排x1上的PCI Agent裝置都不會接收這個資料請求。

(3) PCI橋x1發現當前匯流排事務使用的PCI匯流排地址不是其下游裝置使用的PCI匯流排地址,則接收這個資料請求,有關PCI橋的Secondary匯流排接收資料的過程見第3.2.1節。此時PCI橋x1將結束來自PCI裝置11的Posted儲存器寫請求,並將這個資料請求推到上游PCI總線上,即PCI匯流排x0上。

(4) PCI匯流排x0上的所有PCI裝置包括HOST主橋將監聽這個請求。PCI匯流排x0上的PCI Agent裝置也不會接收這個資料請求,此時這個資料請求將由HOST主橋x接收,並結束PCI橋x1的Posted儲存器寫請求。

(5) HOST主橋x發現這個資料請求發向儲存器,則將來自PCI匯流排x0的PCI匯流排地址轉換為儲存器地址,之後通過儲存器控制器將資料寫入儲存器,完成PCI裝置的DMA寫操作。

PCI裝置進行DMA讀過程與DMA寫過程較為類似。不過PCI匯流排的儲存器讀匯流排事務只能使用Non-Posted匯流排事務,其過程如下。

(1) 首先PCI裝置11將儲存器讀請求發向PCI匯流排x1。

(2) PCI匯流排x1上的所有裝置監聽這個請求,因為PCI裝置11是從儲存器中讀取資料,所以PCI匯流排x1上的裝置,如PCI裝置12,不會接收這個資料請求。PCI橋x1發現下游PCI匯流排沒有裝置接收這個資料請求,則接收這個資料請求,並將這個資料請求推到上游PCI總線上,即PCI匯流排x0上。

(3) PCI匯流排x0上的裝置將監聽這個請求。PCI匯流排x0上的裝置也不會接收這個資料請求,最後這個資料請求將由HOST主橋x接收。

(4) HOST主橋x發現這個資料請求是發向主儲存器,則將來自PCI匯流排x0的PCI匯流排地址轉換為儲存器地址,之後通過儲存器控制器將資料讀出,並轉發到HOST主橋x。

(5) HOST主橋x將資料經由PCI橋x1傳遞到PCI裝置11,PCI裝置11接收到這個資料後結束DMA讀。

以上過程僅是PCI裝置向儲存器讀寫資料的一個簡單流程。如果考慮處理器中的Cache,這些儲存器讀寫過程較為複雜。

PCI匯流排還允許PCI裝置之間進行資料傳遞,PCI裝置間的資料交換較為簡單。在實際應用中,PCI裝置間的資料交換並不常見。下文以圖1‑1為例,簡要介紹PCI裝置11將資料寫入PCI裝置01的過程;請讀者自行考慮PCI裝置11從PCI裝置01讀取資料的過程。

(1) 首先PCI裝置11將PCI寫匯流排事務發向PCI匯流排x1上。PCI橋x1和PCI裝置12同時監聽這個寫匯流排事務。

(2) PCI橋x1將接收這個PCI寫請求匯流排事務,並將這個PCI寫匯流排事務上推到PCI匯流排x0。

(3) PCI匯流排x0上的所有裝置將監聽這個PCI寫匯流排事務,最後由PCI裝置01接收這個資料請求,並完成PCI寫事務。

5、Delayed傳送方式

如上文所述,如果處理器使用Non-Posted匯流排週期對PCI裝置進行讀操作,或者PCI裝置使用Non-Posted匯流排事務對儲存器進行讀操作時,如果資料沒有到達目的地,那麼在這個讀操作路徑上的所有PCI匯流排都不能被釋放,這將嚴重影響PCI匯流排的使用效率。

為此PCI橋需要對Non-Posted匯流排事務進行優化處理,並使用Delayed匯流排事務處理這些Non-Posted匯流排事務,PCI匯流排規定只有Non-Posted匯流排事務可以使用Delayed匯流排事務。PCI匯流排的Delay匯流排事務由Delay讀寫請求和Delay讀寫完成匯流排事務組成,當Delay讀寫請求到達目的地後,將被轉換為Delay讀寫完成匯流排事務。基於Delay匯流排請求的資料交換如圖1‑4所示。

假設處理器通過儲存器讀、I/O讀寫或者配置讀寫訪問PCI裝置22時,首先經過HOST主橋進行儲存器域與PCI匯流排域的地址轉換,並由HOST主橋發起PCI匯流排事務,然後通過PCI橋1、2,最終到達PCI裝置22。其詳細步驟如下。

(1) HOST主橋完成儲存器域到PCI匯流排域的轉換,然後啟動PCI讀匯流排事務。

(2) PCI橋1接收這個讀匯流排事務,並首先使用Retry週期,使HOST主橋擇時重新發起相同的匯流排週期。此時PCI橋1的上游PCI匯流排將被釋放。值得注意的是PCI橋並不會每一次都使用Retry週期,使上游裝置擇時進行重試操作。在PCI匯流排中,有一個“16 Clock”原則,即FRAME#訊號有效後,必須在16個時鐘週期內建為無效,如果PCI橋發現來自上游裝置的讀匯流排事務不能在16個時鐘週期內結束時,則使用Retry週期終止該匯流排事務。

(3) PCI橋1使用Delayed匯流排請求繼續訪問PCI裝置22。

(4) PCI橋2接收這個匯流排請求,並將這個Delayed匯流排請求繼續傳遞。此時PCI橋2也將首先使用Retry週期,使PCI橋1擇時重新發起相同的匯流排週期。此時PCI橋2的上游PCI匯流排被釋放。

(5) 這個資料請求最終到達PCI裝置22,如果PCI裝置22沒有將資料準備好時,也可以使用Retry週期,使PCI橋2擇時重新發起相同的匯流排週期;如果資料已經準備好,PCI裝置22將接收這個資料請求,並將這個Delayed匯流排請求轉換為Delayed匯流排完成事務。如果Delayed匯流排請求是讀請求,則Delayed匯流排完成事務中含有資料,否則只有完成資訊,而不包含資料。

(6) Delayed匯流排完成事務將“資料或者完成資訊”傳遞給PCI橋2,當PCI橋1重新發出Non-Posted匯流排請求時,PCI橋2將這個“資料或者完成資訊”傳遞給PCI橋1。

(7) HOST主橋重新發出儲存器讀匯流排事務時,PCI橋1將“資料或者完成資訊”傳遞給HOST主橋,最終完成整個PCI匯流排事務。

由以上分析可知,Delayed匯流排週期由Delayed匯流排請求和Delayed匯流排完成兩部分組成。下文將Delayed讀請求匯流排事務簡稱為DRR(Delayed Read Request),Delayed讀完成匯流排事務簡稱為DRC(Delayed Read Completion);而將Delayed寫請求匯流排事務簡稱為DWR(Delayed Write Request),Delayed寫完成匯流排事務簡稱為DWC(Delayed Write Completion)。

PCI匯流排使用Delayed匯流排事務,在一定程度上可以提高PCI匯流排的利用率。因為在進行Non-Posted匯流排事務時,Non-Posted請求在通過PCI橋之後,可以暫時釋放PCI匯流排,但是採用這種方式,HOST/PCI橋將會擇時進行重試操作。在許多情況下,使用Delayed匯流排事務,並不能取得理想的效果,因為過多的重試周期也將大量消耗PCI匯流排的頻寬。

為了進一步提高Non-Posted匯流排事務的執行效率,PCI-X匯流排將PCI匯流排使用的Delayed匯流排事務,升級為Split匯流排事務。採用Split匯流排事務可以有效解決HOST/PCI橋的這些重試操作。Split匯流排事務的基本思想是傳送端首先將Non-Posted匯流排請求傳送給接收端,然後再由接收端主動地將資料傳遞給傳送端。

除了PCI-X匯流排可以使用Split匯流排事務進行資料傳送之外,有些處理器,如x86和PowerPC處理器的FSB(Front Side Bus)匯流排也支援這種Split匯流排事務,因此這些HOST主橋也可以發起這種Split匯流排事務。在PCIe匯流排中,Non-Posted資料傳送都使用Split匯流排事務完成,而不再使用Delayed匯流排事務。本章將在第1.5.1節簡要介紹Split匯流排事務和PCI-X匯流排對PCI匯流排的一些功能上的增強。