0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PCI總線的存儲(chǔ)器讀寫總線事務(wù)

TLOc_gh_3394704 ? 來源:OpenFPGA ? 作者:碎碎思 ? 2021-07-18 10:06 ? 次閱讀

PCI總線的存儲(chǔ)器讀寫總線事務(wù)

總線的基本任務(wù)是實(shí)現(xiàn)數(shù)據(jù)傳送,將一組數(shù)據(jù)從一個(gè)設(shè)備傳送到另一個(gè)設(shè)備,當(dāng)然總線也可以將一個(gè)設(shè)備的數(shù)據(jù)廣播到多個(gè)設(shè)備。在處理器系統(tǒng)中,這些數(shù)據(jù)傳送都要依賴一定的規(guī)則,PCI總線并不例外。

PCI總線使用單端并行數(shù)據(jù)線,采用地址譯碼方式進(jìn)行數(shù)據(jù)傳遞,而采用ID譯碼方式進(jìn)行配置信息的傳遞。其中地址譯碼方式使用地址信號(hào),而ID譯碼方式使用PCI設(shè)備的ID號(hào),包括Bus Number、Device Number、Function Number和Register Number。下文將以圖1?1中的處理器系統(tǒng)為例,簡要介紹PCI總線支持的總線事務(wù)及其傳送方式。

如表1?2所示,PCI總線支持多種總線事務(wù)。而本節(jié)重點(diǎn)介紹存儲(chǔ)器讀寫總線事務(wù),I/O讀寫總線事務(wù),并在第2.4節(jié)詳細(xì)介紹配置讀寫總線事務(wù)。值得注意的是,PCI設(shè)備只有在系統(tǒng)軟件初始化配置空間之后,才能夠被其他主設(shè)備訪問。

當(dāng)PCI設(shè)備的配置空間被初始化之后,該設(shè)備在當(dāng)前的PCI總線樹上將擁有一個(gè)獨(dú)立的PCI總線地址空間,即BAR((Base Address Register)寄存器所描述的空間,有關(guān)BAR寄存器的詳細(xì)說明見第2.3.2節(jié)。

處理器與PCI設(shè)備進(jìn)行數(shù)據(jù)交換,或者PCI設(shè)備之間進(jìn)行存儲(chǔ)器數(shù)據(jù)交換時(shí),都將通過PCI總線地址完成。而PCI設(shè)備與主存儲(chǔ)器進(jìn)行DMA操作時(shí),使用的也是PCI總線域的地址,而不是存儲(chǔ)器域的地址,此時(shí)HOST主橋?qū)⑼瓿蒔CI總線地址到存儲(chǔ)器域地址的轉(zhuǎn)換,不同的HOST主橋進(jìn)行地址轉(zhuǎn)換時(shí)使用的方法并不相同。

PCI總線的配置讀寫總線事務(wù)與HOST主橋與PCI橋相關(guān),因此讀者需要了解HOST主橋和PCI橋的詳細(xì)實(shí)現(xiàn)機(jī)制之后,才能深入理解這部分內(nèi)容。本篇將在第2.4節(jié)詳細(xì)介紹這些內(nèi)容。在下文中,我們假定所使用的PCI設(shè)備的配置空間已經(jīng)被系統(tǒng)軟件初始化。

PCI總線支持以下幾類存儲(chǔ)器讀寫總線事務(wù)。

(1) HOST處理器對(duì)PCI設(shè)備的BAR空間進(jìn)行數(shù)據(jù)讀寫,BAR空間可以使用存儲(chǔ)器或者I/O譯碼方式。HOST處理器使用PCI總線的存儲(chǔ)器讀寫總線事務(wù)和I/O讀寫總線事務(wù)訪問PCI設(shè)備的BAR空間。

(2) PCI設(shè)備之間的數(shù)據(jù)傳遞。在PCI總線上的兩個(gè)設(shè)備可以直接通信,如一個(gè)PCI設(shè)備可以訪問另外一個(gè)設(shè)備的BAR空間。不過這種數(shù)據(jù)傳遞在PC處理器系統(tǒng)中,較少使用。

(3) PCI設(shè)備對(duì)主存儲(chǔ)器進(jìn)行讀寫,即DMA讀寫操作。DMA讀寫操作在所有處理器系統(tǒng)中都較為常用,也是PCI總線數(shù)據(jù)傳送的重點(diǎn)所在。在多數(shù)情況下,DMA讀寫操作結(jié)束后將伴隨著中斷的產(chǎn)生。PCI設(shè)備可以使用INTA#、INTB#、INTC#和INTD#信號(hào)提交中斷請(qǐng)求,也可以使用MSI機(jī)制提交中斷請(qǐng)求。

1.3.1 PCI總線事務(wù)的時(shí)序

PCI總線使用第1.2節(jié)所述的信號(hào)進(jìn)行數(shù)據(jù)和配置信息的傳遞,與PCI總線事務(wù)相關(guān)的控制信號(hào)有FRAME#、IRDY#、TRDY#、DEVSEL#等其他信號(hào)。

當(dāng)一個(gè)PCI主設(shè)備需要使用PCI總線時(shí),需要首先發(fā)送REQ#信號(hào),通過總線仲裁獲得總線使用權(quán),即GNT#信號(hào)有效后,使用以下步驟完成一個(gè)完整PCI總線事務(wù),對(duì)目標(biāo)設(shè)備進(jìn)行存儲(chǔ)器或者I/O地址空間的讀寫訪問。

(1) 當(dāng)PCI主設(shè)備獲得總線使用權(quán)之后,將在CLK1的上升沿置FRAME#信號(hào)有效,啟動(dòng)PCI總線事務(wù)。當(dāng)PCI總線事務(wù)結(jié)束后,F(xiàn)RAME#信號(hào)將被置為無效。

(2) PCI總線周期的第一個(gè)時(shí)鐘周期(CLK1的上升沿到CLK2的上升沿之間)為地址周期。在地址周期中,PCI主設(shè)備將訪問的目的地址和總線命令分別驅(qū)動(dòng)到AD[31:0]和C/BE#信號(hào)上。如果當(dāng)前總線命令是配置讀寫,那么IDSEL信號(hào)線也被置為有效,IDSEL信號(hào)與PCI總線的AD[31:11]相連,詳見第2.4.4節(jié)。

(3) 當(dāng)IRDY#、TRDY#和DEVSEL#信號(hào)都有效后,總線事務(wù)將使用數(shù)據(jù)周期,進(jìn)行數(shù)據(jù)傳遞。當(dāng)IRDY#和TRDY#信號(hào)沒有同時(shí)有效時(shí),PCI總線不能進(jìn)行數(shù)據(jù)傳遞,PCI總線使用這兩個(gè)信號(hào)進(jìn)行傳送控制。

(4) PCI總線支持突發(fā)周期,因此在地址周期之后可以有多個(gè)數(shù)據(jù)周期,可以傳送多組數(shù)據(jù)。而目標(biāo)設(shè)備并不知道突發(fā)周期的長度,如果目標(biāo)設(shè)備不能繼續(xù)接收數(shù)據(jù)時(shí),可以disconnect當(dāng)前總線事務(wù)。值得注意的是,只有存儲(chǔ)器讀寫總線事務(wù)可以使用突發(fā)周期。

一個(gè)完整的PCI總線事務(wù)遠(yuǎn)比上述過程復(fù)雜的多,因?yàn)镻CI總線還支持許多傳送方式,如雙地址周期、fast back-to-back(快速背靠背)、插入等待狀態(tài)、重試和斷連、總線上的錯(cuò)誤處理等一系列總線事務(wù)。本篇不一一介紹這些傳送方式。

1.3.2 Posted和Non-Posted傳送方式

PCI總線規(guī)定了兩類數(shù)據(jù)傳送方式,分別是Posted和Non-Posted數(shù)據(jù)傳送方式。其中使用Posted數(shù)據(jù)傳送方式的總線事務(wù)也被稱為Posted總線事務(wù);而使用Non-Posted數(shù)據(jù)傳送方式的總線事務(wù)也被稱為Non-Posted總線事務(wù)。

其中Posted總線事務(wù)指PCI主設(shè)備向PCI目標(biāo)設(shè)備進(jìn)行數(shù)據(jù)傳遞時(shí),當(dāng)數(shù)據(jù)到達(dá)PCI橋后,即由PCI橋接管來自上游總線的總線事務(wù),并將其轉(zhuǎn)發(fā)到下游總線。采用這種數(shù)據(jù)傳送方式,在數(shù)據(jù)還沒有到達(dá)最終的目的地之前,PCI總線就可以結(jié)束當(dāng)前總線事務(wù),從而在一定程度上解決了PCI總線的擁塞。

而Non-Posted總線事務(wù)是指PCI主設(shè)備向PCI目標(biāo)設(shè)備進(jìn)行數(shù)據(jù)傳遞時(shí),數(shù)據(jù)必須到達(dá)最終目的地之后,才能結(jié)束當(dāng)前總線事務(wù)的一種數(shù)據(jù)傳遞方式。

顯然采用Posted傳送方式,當(dāng)這個(gè)Posted總線事務(wù)通過某條PCI總線后,就可以釋放PCI總線的資源;而采用Non-Posted傳送方式,PCI總線在沒有結(jié)束當(dāng)前總線事務(wù)時(shí)必須等待。這種等待將嚴(yán)重阻塞當(dāng)前PCI總線上的其他數(shù)據(jù)傳送,因此PCI總線使用Delayed總線事務(wù)處理Non-Posted數(shù)據(jù)請(qǐng)求,使用Delayed總線事務(wù)可以相對(duì)緩解PCI總線的擁塞。Delayed總線事務(wù)的詳細(xì)介紹見第1.3.5節(jié)。

PCI總線規(guī)定只有存儲(chǔ)器寫請(qǐng)求(包括存儲(chǔ)器寫并無效請(qǐng)求)可以采用Posted總線事務(wù),下文將Posted存儲(chǔ)器寫請(qǐng)求簡稱為PMW(Posted Memory Write),而存儲(chǔ)器讀請(qǐng)求、I/O讀寫請(qǐng)求、配置讀寫請(qǐng)求只能采用Non-Posted總線事務(wù)。

Posted傳送方式的實(shí)現(xiàn)過程。PCI設(shè)備11進(jìn)行DMA寫操作時(shí)使用存儲(chǔ)器寫總線事務(wù),當(dāng)PCI設(shè)備11獲得PCI總線x1的使用權(quán)后,將發(fā)送存儲(chǔ)器寫總線事務(wù)到PCI總線x1。當(dāng)PCI橋1發(fā)現(xiàn)這個(gè)總線事務(wù)的地址不在該橋管理的地址范圍內(nèi)將首先接收這個(gè)總線事務(wù),并結(jié)束PCI總線x1的總線事務(wù)。

此時(shí)PCI總線x1使用的資源已被釋放,PCI設(shè)備11和PCI設(shè)備12可以使用PCI總線x1進(jìn)行通信。PCI橋1獲得PCI總線x0的使用權(quán)后,將轉(zhuǎn)發(fā)這個(gè)存儲(chǔ)器寫總線事務(wù)到PCI總線x0,之后HOST主橋x將接收這個(gè)存儲(chǔ)器寫總線事務(wù),并最終將數(shù)據(jù)寫入主存儲(chǔ)器。

由以上過程可以發(fā)現(xiàn),Posted數(shù)據(jù)請(qǐng)求在通過PCI總線之后,將逐級(jí)釋放總線資源,因此PCI總線的利用率較高。而使用Non-Posted方式進(jìn)行數(shù)據(jù)傳送的處理過程與此不同,Non-Posted數(shù)據(jù)請(qǐng)求在通過PCI總線時(shí),并不會(huì)及時(shí)釋放總線資源,從而在某種程度上影響PCI總線的使用效率和傳送帶寬。

1.3.3 HOST處理器訪問PCI設(shè)備

HOST處理器對(duì)PCI設(shè)備的數(shù)據(jù)訪問主要包含兩方面內(nèi)容,一方面是處理器向PCI設(shè)備發(fā)起存儲(chǔ)器和I/O讀寫請(qǐng)求;另一方面是處理器對(duì)PCI設(shè)備進(jìn)行配置讀寫。

在PCI設(shè)備的配置空間中,共有6個(gè)BAR寄存器。每一個(gè)BAR寄存器都與PCI設(shè)備使用的一組PCI總線地址空間對(duì)應(yīng),BAR寄存器記錄這組地址空間的基地址。本書將與BAR寄存器對(duì)應(yīng)的PCI總線地址空間稱為BAR空間,在BAR空間中可以存放I/O地址空間,也可以存放存儲(chǔ)器地址空間。

PCI設(shè)備可以根據(jù)需要,有選擇地使用這些BAR空間。值得注意的是,在BAR寄存器中存放的是PCI設(shè)備使用的“PCI總線域”的物理地址,而不是“存儲(chǔ)器域”的物理地址,有關(guān)BAR寄存器的詳細(xì)介紹見第2.3.2節(jié)。

HOST處理器訪問PCI設(shè)備I/O地址空間的過程,與訪問存儲(chǔ)器地址空間略有不同。有些處理器,如x86處理器,具有獨(dú)立的I/O地址空間。x86處理器可以將PCI設(shè)備使用的I/O地址映射到存儲(chǔ)器域的I/O地址空間中,之后處理器可以使用IN,OUT等指令對(duì)存儲(chǔ)器域的I/O地址進(jìn)行訪問,然后通過HOST主橋?qū)⒋鎯?chǔ)器域的I/O地址轉(zhuǎn)換為PCI總線域的I/O地址,最后使用PCI總線的I/O總線事務(wù)對(duì)PCI設(shè)備的I/O地址進(jìn)行讀寫訪問。在x86處理器中,存儲(chǔ)器域的I/O地址與PCI總線域的I/O地址相同。

對(duì)于有些沒有獨(dú)立I/O地址空間的處理器,如PowerPC處理器,需要在HOST主橋初始化時(shí),將PCI設(shè)備使用的I/O地址空間映射為處理器的存儲(chǔ)器地址空間。PowerPC處理器對(duì)這段“存儲(chǔ)器域”的存儲(chǔ)器空間進(jìn)行讀寫訪問時(shí),HOST主橋?qū)⒋鎯?chǔ)器域的這段存儲(chǔ)器地址轉(zhuǎn)換為PCI總線域的I/O地址,然后通過PCI總線的I/O總線事務(wù)對(duì)PCI設(shè)備的I/O地址進(jìn)行讀寫操作。

在PCI總線中,存儲(chǔ)器讀寫事務(wù)與I/O讀寫事務(wù)的實(shí)現(xiàn)較為類似。首先HOST處理器在初始化時(shí),需要將PCI設(shè)備使用的BAR空間映射到“存儲(chǔ)器域”的存儲(chǔ)器地址空間。之后處理器通過存儲(chǔ)器讀寫指令訪問“存儲(chǔ)器域”的存儲(chǔ)器地址空間,HOST主橋?qū)ⅰ按鎯?chǔ)器域”的讀寫請(qǐng)求翻譯為PCI總線的存儲(chǔ)器讀寫總線事務(wù)之后,再發(fā)送給目標(biāo)設(shè)備。

值得注意的是,存儲(chǔ)器域和PCI總線域的概念,PCI設(shè)備能夠直接使用的地址為PCI總線域的地址,在PCI總線事務(wù)中出現(xiàn)的地址也為PCI總線域的地址;而處理器能夠直接使用的地址為存儲(chǔ)器域的地址。理解存儲(chǔ)器域與PCI總線域的區(qū)別對(duì)于理解PCI總線至關(guān)重要,本篇將在第2.1節(jié)專門討論這兩個(gè)概念。

以上對(duì)PCI總線的存儲(chǔ)器與I/O總線事務(wù)的介紹并沒有考慮PCI橋的存在,如果將PCI橋考慮進(jìn)來,情況將略微復(fù)雜一些。下文將以圖1?1為例說明處理器如何通過HOST主橋和PCI橋1對(duì)PCI設(shè)備11進(jìn)行存儲(chǔ)器讀寫操作。當(dāng)處理器對(duì)PCI設(shè)備11進(jìn)行存儲(chǔ)器寫操作時(shí),這些數(shù)據(jù)需要通過HOST主橋x和PCI橋x1,最終到達(dá)PCI設(shè)備11,其訪問步驟如下。值得注意的是,以下步驟忽略PCI總線的仲裁過程。

(1) 首先處理器將要傳遞的數(shù)據(jù)放入通用寄存器中,之后向PCI設(shè)備11映射到的存儲(chǔ)器域的地址進(jìn)行寫操作。值得注意的是,處理器并不能直接訪問PCI設(shè)備11的PCI總線地址空間,因?yàn)檫@些地址空間是屬于PCI總線域的,處理器所能直接訪問的空間是存儲(chǔ)器域的地址空間。處理器必須通過HOST主橋?qū)⒋鎯?chǔ)器域的數(shù)據(jù)訪問轉(zhuǎn)換為PCI總線事務(wù)才能對(duì)PCI總線地址空間進(jìn)行訪問。

(2) HOST主橋x接收來自處理器的存儲(chǔ)器寫請(qǐng)求,之后處理器結(jié)束當(dāng)前存儲(chǔ)器寫操作,釋放系統(tǒng)總線。HOST主橋x將存儲(chǔ)器域的存儲(chǔ)器地址轉(zhuǎn)換為PCI總線域的PCI總線地址。并向PCI總線x0發(fā)起PCI寫請(qǐng)求總線事務(wù)。值得注意的是,雖然在許多處理器系統(tǒng)中,存儲(chǔ)器地址和PCI總線地址完全相等,但其含義完全不同。

(3) PCI總線x0上的PCI設(shè)備01、PCI設(shè)備02和PCI橋1將同時(shí)監(jiān)聽這個(gè)PCI寫總線事務(wù)。最后PCI橋x1接收這個(gè)寫總線事務(wù),并結(jié)束來自PCI總線x0的PCI總線事務(wù)。之后PCI橋x1向PCI總線x1發(fā)起新的PCI總線寫總線事務(wù)。

(4) PCI總線x1上的PCI設(shè)備11和PCI設(shè)備12同時(shí)監(jiān)聽這個(gè)PCI寫總線事務(wù)。最后PCI設(shè)備11通過地址譯碼方式接收這個(gè)寫總線事務(wù),并結(jié)束來自PCI總線x1上的PCI總線事務(wù)。

由以上過程可以發(fā)現(xiàn),由于存儲(chǔ)器寫總線事務(wù)使用Posted傳送方式,因此數(shù)據(jù)通過PCI橋后都將結(jié)束上一級(jí)總線的PCI總線事務(wù),從而上一級(jí)PCI總線可以被其他PCI設(shè)備使用。如果使用Non-Posted傳送方式,直到數(shù)據(jù)發(fā)送到PCI設(shè)備11之后,PCI總線x1和x0才能依次釋放,從而在某種程度上將造成PCI總線的擁塞。

處理器對(duì)PCI設(shè)備11進(jìn)行I/O寫操作時(shí)只能采用Non-Posted方式進(jìn)行,與Posted方式相比,使用Non-Posted方式,當(dāng)數(shù)據(jù)到達(dá)目標(biāo)設(shè)備后,目標(biāo)設(shè)備需要向主設(shè)備發(fā)出“回應(yīng)[1] ”,當(dāng)主設(shè)備收到這個(gè)“回應(yīng)”后才能結(jié)束整個(gè)總線事務(wù)。本節(jié)不再講述處理器如何對(duì)PCI設(shè)備進(jìn)行I/O寫操作,請(qǐng)讀者思考這個(gè)過程。

處理器對(duì)PCI設(shè)備11進(jìn)行存儲(chǔ)器讀時(shí),這個(gè)讀請(qǐng)求需要首先通過HOST主橋x和PCI橋x1到達(dá)PCI設(shè)備,之后PCI設(shè)備將讀取的數(shù)據(jù)再次通過PCI橋x1和HOST主橋x傳遞給HOST處理器,其步驟如下所示。我們首先假設(shè)PCI總線沒有使用Delayed傳送方式處理Non-Posted總線事務(wù),而是使用純粹的Non-Posted方式。

(1) 首先處理器準(zhǔn)備接收數(shù)據(jù)使用的通用寄存器,之后向PCI設(shè)備11映射到的存儲(chǔ)器域的地址進(jìn)行讀操作,

(2) HOST主橋x接收來自處理器的存儲(chǔ)器讀請(qǐng)求。HOST主橋x進(jìn)行存儲(chǔ)器地址到PCI總線地址的轉(zhuǎn)換,之后向PCI總線x0發(fā)起存儲(chǔ)器讀總線事務(wù)。

(3) PCI總線x0上的PCI設(shè)備01、PCI設(shè)備02和PCI橋x1將監(jiān)聽這個(gè)存儲(chǔ)器讀請(qǐng)求,之后PCI橋1接收這個(gè)存儲(chǔ)器讀請(qǐng)求。然后PCI橋x1向PCI總線x1發(fā)起新的PCI總線讀請(qǐng)求。

(4) PCI總線x1上的PCI設(shè)備11和PCI設(shè)備12監(jiān)聽這個(gè)PCI讀請(qǐng)求總線事務(wù)。最后PCI設(shè)備11接收這個(gè)存儲(chǔ)器讀請(qǐng)求總線事務(wù),并將這個(gè)讀請(qǐng)求總線事務(wù)轉(zhuǎn)換為存儲(chǔ)器讀完成總線事務(wù)之后,將數(shù)據(jù)傳送到PCI橋x1,并結(jié)束來自PCI總線x1上的PCI總線事務(wù)。

(5) PCI橋x1將接收到的數(shù)據(jù)通過PCI總線x0,繼續(xù)上傳到HOST主橋x,并結(jié)束PCI總線x0上的PCI總線事務(wù)。

(6) HOST主橋x將數(shù)據(jù)傳遞給處理器,最終結(jié)束處理器的存儲(chǔ)器讀操作。

顯然這種方式與Posted傳送方式相比,PCI總線的利用率較低。因?yàn)橹灰狧OST處理器沒有收到來自目標(biāo)設(shè)備的“回應(yīng)”,那么HOST處理器到目標(biāo)設(shè)備的傳送路徑上使用的所有PCI總線都將被阻塞。因而PCI總線x0和x1并沒有被充分利用。

以上例子,我們可以發(fā)現(xiàn)只有“讀完成”依次通過PCI總線x1和x0之后,存儲(chǔ)器讀總線事務(wù)才不繼續(xù)占用PCI總線x1和x0的資源,顯然這種數(shù)據(jù)傳送方式并不合理。因此PCI總線使用Delayed傳送方式解決這個(gè)總線擁塞問題,有關(guān)Delayed傳送方式的實(shí)現(xiàn)機(jī)制見第1.3.5節(jié)。

1.3.4 PCI設(shè)備讀寫主存儲(chǔ)器

PCI設(shè)備與存儲(chǔ)器直接進(jìn)行數(shù)據(jù)交換的過程也被稱為DMA。與其他總線的DMA過程類似,PCI設(shè)備進(jìn)行DMA操作時(shí),需要獲得數(shù)據(jù)傳送的目的地址和傳送大小。支持DMA傳遞的PCI設(shè)備可以在其BAR空間中設(shè)置兩個(gè)寄存器,分別保存這個(gè)目標(biāo)地址和傳送大小。這兩個(gè)寄存器也是PCI設(shè)備DMA控制器的組成部件。

值得注意的是,PCI設(shè)備進(jìn)行DMA操作時(shí),使用的目的地址是PCI總線域的物理地址,而不是存儲(chǔ)器域的物理地址,因?yàn)镻CI設(shè)備并不能識(shí)別存儲(chǔ)器域的物理地址,而僅能識(shí)別PCI總線域的物理地址。

HOST主橋負(fù)責(zé)完成PCI總線地址到存儲(chǔ)器域地址的轉(zhuǎn)換。HOST主橋需要進(jìn)行合理設(shè)置,將存儲(chǔ)器的地址空間映射到PCI總線之后,PCI設(shè)備才能對(duì)這段存儲(chǔ)器空間進(jìn)行DMA操作。PCI設(shè)備不能直接訪問沒有經(jīng)過主橋映射的存儲(chǔ)器空間。

許多處理器允許PCI設(shè)備訪問所有存儲(chǔ)器域地址空間,但是有些處理器可以設(shè)置PCI設(shè)備所能訪問的存儲(chǔ)器域地址空間,從而對(duì)存儲(chǔ)器域地址空間進(jìn)行保護(hù)。例如PowerPC處理器的HOST主橋可以使用Inbound寄存器組,設(shè)置PCI設(shè)備訪問的存儲(chǔ)器地址范圍和屬性,只有在Inbound寄存器組映射的存儲(chǔ)器空間才能被PCI設(shè)備訪問,本篇將在第2.2節(jié)詳細(xì)介紹PowerPC處理器的這組寄存器。

由上所述,在一個(gè)處理器系統(tǒng)中,并不是所有存儲(chǔ)器空間都可以被PCI設(shè)備訪問,只有在PCI總線域中有映像的存儲(chǔ)器空間才能被PCI設(shè)備訪問。經(jīng)過HOST主橋映射的存儲(chǔ)器,具有兩個(gè)“地址”,一個(gè)是在存儲(chǔ)器域的地址,一個(gè)是在PCI總線域的PCI總線地址。當(dāng)處理器訪問這段存儲(chǔ)器空間時(shí),使用存儲(chǔ)器地址;而PCI設(shè)備訪問這段內(nèi)存時(shí),使用PCI總線地址。在多數(shù)處理器系統(tǒng)中,存儲(chǔ)器地址與PCI總線地址相同,但是系統(tǒng)程序員需要正確理解這兩個(gè)地址的區(qū)別。

下文以PCI設(shè)備11向主存儲(chǔ)器寫數(shù)據(jù)為例,說明PCI設(shè)備如何進(jìn)行DMA寫操作。

(1) 首先PCI設(shè)備11將存儲(chǔ)器寫請(qǐng)求發(fā)向PCI總線x1,注意這個(gè)寫請(qǐng)求使用的地址是PCI總線域的地址。

(2) PCI總線x1上的所有設(shè)備監(jiān)聽這個(gè)請(qǐng)求,因?yàn)镻CI設(shè)備11是向處理器的存儲(chǔ)器寫數(shù)據(jù),所以PCI總線x1上的PCI Agent設(shè)備都不會(huì)接收這個(gè)數(shù)據(jù)請(qǐng)求。

(3) PCI橋x1發(fā)現(xiàn)當(dāng)前總線事務(wù)使用的PCI總線地址不是其下游設(shè)備使用的PCI總線地址,則接收這個(gè)數(shù)據(jù)請(qǐng)求,有關(guān)PCI橋的Secondary總線接收數(shù)據(jù)的過程見第3.2.1節(jié)。此時(shí)PCI橋x1將結(jié)束來自PCI設(shè)備11的Posted存儲(chǔ)器寫請(qǐng)求,并將這個(gè)數(shù)據(jù)請(qǐng)求推到上游PCI總線上,即PCI總線x0上。

(4) PCI總線x0上的所有PCI設(shè)備包括HOST主橋?qū)⒈O(jiān)聽這個(gè)請(qǐng)求。PCI總線x0上的PCI Agent設(shè)備也不會(huì)接收這個(gè)數(shù)據(jù)請(qǐng)求,此時(shí)這個(gè)數(shù)據(jù)請(qǐng)求將由HOST主橋x接收,并結(jié)束PCI橋x1的Posted存儲(chǔ)器寫請(qǐng)求。

(5) HOST主橋x發(fā)現(xiàn)這個(gè)數(shù)據(jù)請(qǐng)求發(fā)向存儲(chǔ)器,則將來自PCI總線x0的PCI總線地址轉(zhuǎn)換為存儲(chǔ)器地址,之后通過存儲(chǔ)器控制器將數(shù)據(jù)寫入存儲(chǔ)器,完成PCI設(shè)備的DMA寫操作。

PCI設(shè)備進(jìn)行DMA讀過程與DMA寫過程較為類似。不過PCI總線的存儲(chǔ)器讀總線事務(wù)只能使用Non-Posted總線事務(wù),其過程如下。

(1) 首先PCI設(shè)備11將存儲(chǔ)器讀請(qǐng)求發(fā)向PCI總線x1。

(2) PCI總線x1上的所有設(shè)備監(jiān)聽這個(gè)請(qǐng)求,因?yàn)镻CI設(shè)備11是從存儲(chǔ)器中讀取數(shù)據(jù),所以PCI總線x1上的設(shè)備,如PCI設(shè)備12,不會(huì)接收這個(gè)數(shù)據(jù)請(qǐng)求。PCI橋x1發(fā)現(xiàn)下游PCI總線沒有設(shè)備接收這個(gè)數(shù)據(jù)請(qǐng)求,則接收這個(gè)數(shù)據(jù)請(qǐng)求,并將這個(gè)數(shù)據(jù)請(qǐng)求推到上游PCI總線上,即PCI總線x0上。

(3) PCI總線x0上的設(shè)備將監(jiān)聽這個(gè)請(qǐng)求。PCI總線x0上的設(shè)備也不會(huì)接收這個(gè)數(shù)據(jù)請(qǐng)求,最后這個(gè)數(shù)據(jù)請(qǐng)求將由HOST主橋x接收。

(4) HOST主橋x發(fā)現(xiàn)這個(gè)數(shù)據(jù)請(qǐng)求是發(fā)向主存儲(chǔ)器,則將來自PCI總線x0的PCI總線地址轉(zhuǎn)換為存儲(chǔ)器地址,之后通過存儲(chǔ)器控制器將數(shù)據(jù)讀出,并轉(zhuǎn)發(fā)到HOST主橋x。

(5) HOST主橋x將數(shù)據(jù)經(jīng)由PCI橋x1傳遞到PCI設(shè)備11,PCI設(shè)備11接收到這個(gè)數(shù)據(jù)后結(jié)束DMA讀。

以上過程僅是PCI設(shè)備向存儲(chǔ)器讀寫數(shù)據(jù)的一個(gè)簡單流程。如果考慮處理器中的Cache,這些存儲(chǔ)器讀寫過程較為復(fù)雜。

PCI總線還允許PCI設(shè)備之間進(jìn)行數(shù)據(jù)傳遞,PCI設(shè)備間的數(shù)據(jù)交換較為簡單。在實(shí)際應(yīng)用中,PCI設(shè)備間的數(shù)據(jù)交換并不常見。下文以圖1?1為例,簡要介紹PCI設(shè)備11將數(shù)據(jù)寫入PCI設(shè)備01的過程;請(qǐng)讀者自行考慮PCI設(shè)備11從PCI設(shè)備01讀取數(shù)據(jù)的過程。

(1) 首先PCI設(shè)備11將PCI寫總線事務(wù)發(fā)向PCI總線x1上。PCI橋x1和PCI設(shè)備12同時(shí)監(jiān)聽這個(gè)寫總線事務(wù)。

(2) PCI橋x1將接收這個(gè)PCI寫請(qǐng)求總線事務(wù),并將這個(gè)PCI寫總線事務(wù)上推到PCI總線x0。

(3) PCI總線x0上的所有設(shè)備將監(jiān)聽這個(gè)PCI寫總線事務(wù),最后由PCI設(shè)備01接收這個(gè)數(shù)據(jù)請(qǐng)求,并完成PCI寫事務(wù)。

1.3.5 Delayed傳送方式

如上文所述,如果處理器使用Non-Posted總線周期對(duì)PCI設(shè)備進(jìn)行讀操作,或者PCI設(shè)備使用Non-Posted總線事務(wù)對(duì)存儲(chǔ)器進(jìn)行讀操作時(shí),如果數(shù)據(jù)沒有到達(dá)目的地,那么在這個(gè)讀操作路徑上的所有PCI總線都不能被釋放,這將嚴(yán)重影響PCI總線的使用效率。

為此PCI橋需要對(duì)Non-Posted總線事務(wù)進(jìn)行優(yōu)化處理,并使用Delayed總線事務(wù)處理這些Non-Posted總線事務(wù),PCI總線規(guī)定只有Non-Posted總線事務(wù)可以使用Delayed總線事務(wù)。PCI總線的Delay總線事務(wù)由Delay讀寫請(qǐng)求和Delay讀寫完成總線事務(wù)組成,當(dāng)Delay讀寫請(qǐng)求到達(dá)目的地后,將被轉(zhuǎn)換為Delay讀寫完成總線事務(wù)。

假設(shè)處理器通過存儲(chǔ)器讀、I/O讀寫或者配置讀寫訪問PCI設(shè)備22時(shí),首先經(jīng)過HOST主橋進(jìn)行存儲(chǔ)器域與PCI總線域的地址轉(zhuǎn)換,并由HOST主橋發(fā)起PCI總線事務(wù),然后通過PCI橋1、2,最終到達(dá)PCI設(shè)備22。其詳細(xì)步驟如下。

(1) HOST主橋完成存儲(chǔ)器域到PCI總線域的轉(zhuǎn)換,然后啟動(dòng)PCI讀總線事務(wù)。

(2) PCI橋1接收這個(gè)讀總線事務(wù),并首先使用Retry周期,使HOST主橋擇時(shí)重新發(fā)起相同的總線周期。此時(shí)PCI橋1的上游PCI總線將被釋放。值得注意的是PCI橋并不會(huì)每一次都使用Retry周期,使上游設(shè)備擇時(shí)進(jìn)行重試操作。在PCI總線中,有一個(gè)“16 Clock”原則,即FRAME#信號(hào)有效后,必須在16個(gè)時(shí)鐘周期內(nèi)置為無效,如果PCI橋發(fā)現(xiàn)來自上游設(shè)備的讀總線事務(wù)不能在16個(gè)時(shí)鐘周期內(nèi)結(jié)束時(shí),則使用Retry周期終止該總線事務(wù)。

(3) PCI橋1使用Delayed總線請(qǐng)求繼續(xù)訪問PCI設(shè)備22。

(4) PCI橋2接收這個(gè)總線請(qǐng)求,并將這個(gè)Delayed總線請(qǐng)求繼續(xù)傳遞。此時(shí)PCI橋2也將首先使用Retry周期,使PCI橋1擇時(shí)重新發(fā)起相同的總線周期。此時(shí)PCI橋2的上游PCI總線被釋放。

(5) 這個(gè)數(shù)據(jù)請(qǐng)求最終到達(dá)PCI設(shè)備22,如果PCI設(shè)備22沒有將數(shù)據(jù)準(zhǔn)備好時(shí),也可以使用Retry周期,使PCI橋2擇時(shí)重新發(fā)起相同的總線周期;如果數(shù)據(jù)已經(jīng)準(zhǔn)備好,PCI設(shè)備22將接收這個(gè)數(shù)據(jù)請(qǐng)求,并將這個(gè)Delayed總線請(qǐng)求轉(zhuǎn)換為Delayed總線完成事務(wù)。如果Delayed總線請(qǐng)求是讀請(qǐng)求,則Delayed總線完成事務(wù)中含有數(shù)據(jù),否則只有完成信息,而不包含數(shù)據(jù)。

(6) Delayed總線完成事務(wù)將“數(shù)據(jù)或者完成信息”傳遞給PCI橋2,當(dāng)PCI橋1重新發(fā)出Non-Posted總線請(qǐng)求時(shí),PCI橋2將這個(gè)“數(shù)據(jù)或者完成信息”傳遞給PCI橋1。

(7) HOST主橋重新發(fā)出存儲(chǔ)器讀總線事務(wù)時(shí),PCI橋1將“數(shù)據(jù)或者完成信息”傳遞給HOST主橋,最終完成整個(gè)PCI總線事務(wù)。

由以上分析可知,Delayed總線周期由Delayed總線請(qǐng)求和Delayed總線完成兩部分組成。下文將Delayed讀請(qǐng)求總線事務(wù)簡稱為DRR(Delayed Read Request),Delayed讀完成總線事務(wù)簡稱為DRC(Delayed Read Completion);而將Delayed寫請(qǐng)求總線事務(wù)簡稱為DWR(Delayed Write Request),Delayed寫完成總線事務(wù)簡稱為DWC(Delayed Write Completion)。

PCI總線使用Delayed總線事務(wù),在一定程度上可以提高PCI總線的利用率。因?yàn)樵谶M(jìn)行Non-Posted總線事務(wù)時(shí),Non-Posted請(qǐng)求在通過PCI橋之后,可以暫時(shí)釋放PCI總線,但是采用這種方式,HOST/PCI橋?qū)?huì)擇時(shí)進(jìn)行重試操作。在許多情況下,使用Delayed總線事務(wù),并不能取得理想的效果,因?yàn)檫^多的重試周期也將大量消耗PCI總線的帶寬。

為了進(jìn)一步提高Non-Posted總線事務(wù)的執(zhí)行效率,PCI-X總線將PCI總線使用的Delayed總線事務(wù),升級(jí)為Split總線事務(wù)。采用Split總線事務(wù)可以有效解決HOST/PCI橋的這些重試操作。Split總線事務(wù)的基本思想是發(fā)送端首先將Non-Posted總線請(qǐng)求發(fā)送給接收端,然后再由接收端主動(dòng)地將數(shù)據(jù)傳遞給發(fā)送端。

除了PCI-X總線可以使用Split總線事務(wù)進(jìn)行數(shù)據(jù)傳送之外,有些處理器,如x86和PowerPC處理器的FSB(Front Side Bus)總線也支持這種Split總線事務(wù),因此這些HOST主橋也可以發(fā)起這種Split總線事務(wù)。在PCIe總線中,Non-Posted數(shù)據(jù)傳送都使用Split總線事務(wù)完成,而不再使用Delayed總線事務(wù)。本章將在第1.5.1節(jié)簡要介紹Split總線事務(wù)和PCI-X總線對(duì)PCI總線的一些功能上的增強(qiáng)。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • PCI
    PCI
    +關(guān)注

    關(guān)注

    4

    文章

    643

    瀏覽量

    129981

原文標(biāo)題:淺談PCI Express體系結(jié)構(gòu)(三)

文章出處:【微信號(hào):gh_339470469b7d,微信公眾號(hào):FPGA與數(shù)據(jù)通信】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SPI總線的定義和特點(diǎn)

    領(lǐng)域得到了廣泛的應(yīng)用,尤其是在微控制(MCU)與外部設(shè)備(如傳感、存儲(chǔ)器等)之間的數(shù)據(jù)傳輸中扮演著重要角色。以下將詳細(xì)闡述SPI總線的定義、特點(diǎn)及其工作原理。
    的頭像 發(fā)表于 09-03 14:05 ?200次閱讀

    ram存儲(chǔ)器和rom存儲(chǔ)器的區(qū)別是什么

    定義: RAM(Random Access Memory):隨機(jī)存取存儲(chǔ)器,是一種易失性存儲(chǔ)器,主要用于計(jì)算機(jī)和其他設(shè)備的臨時(shí)存儲(chǔ)。 ROM(Read-Only Memory):只讀存儲(chǔ)器
    的頭像 發(fā)表于 08-06 09:17 ?383次閱讀

    XIO2001 PCI Express至PCI總線轉(zhuǎn)換橋接器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《XIO2001 PCI Express至PCI總線轉(zhuǎn)換橋接器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-19 14:17 ?0次下載
    XIO2001 <b class='flag-5'>PCI</b> Express至<b class='flag-5'>PCI</b><b class='flag-5'>總線</b>轉(zhuǎn)換橋接器數(shù)據(jù)表

    PCI總線PCB設(shè)計(jì)丨實(shí)現(xiàn)高效外圍部件互連的關(guān)鍵要素

    ? PCI(Peripheral Component Interconnect)是一種局部總線標(biāo)準(zhǔn),它是由英特爾公司開發(fā)并推廣的一種高速、同步的通信總線PCI
    的頭像 發(fā)表于 06-13 18:31 ?1703次閱讀
    <b class='flag-5'>PCI</b><b class='flag-5'>總線</b>PCB設(shè)計(jì)丨實(shí)現(xiàn)高效外圍部件互連的關(guān)鍵要素

    PCI總線PCB設(shè)計(jì)丨實(shí)現(xiàn)高效外圍部件互連的關(guān)鍵要素

    PCI(Peripheral Component Interconnect)是一種局部總線標(biāo)準(zhǔn),它是由英特爾公司開發(fā)并推廣的一種高速、同步的通信總線。PCI
    發(fā)表于 06-07 18:37

    具有3態(tài)輸出的10位總線/MOS存儲(chǔ)器驅(qū)動(dòng)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《具有3態(tài)輸出的10位總線/MOS存儲(chǔ)器驅(qū)動(dòng)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 05-23 11:00 ?0次下載
    具有3態(tài)輸出的10位<b class='flag-5'>總線</b>/MOS<b class='flag-5'>存儲(chǔ)器</b>驅(qū)動(dòng)<b class='flag-5'>器</b>數(shù)據(jù)表

    只讀存儲(chǔ)器(ROM)和隨機(jī)讀寫存儲(chǔ)器(RAM)的區(qū)別

    在計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)器是不可或缺的組成部分,它負(fù)責(zé)存儲(chǔ)程序和數(shù)據(jù)以供處理器使用。其中,只讀存儲(chǔ)器(ROM)和隨機(jī)讀寫存儲(chǔ)器(RAM)是兩種常
    的頭像 發(fā)表于 05-12 17:04 ?2107次閱讀

    調(diào)試STM32H750的FMC總線讀寫遇到的問題求解

    號(hào)NWE會(huì)發(fā)送四次,如果不是單個(gè)16位數(shù)據(jù),發(fā)送32位數(shù)據(jù)就不會(huì)出現(xiàn)這個(gè)情況。2.發(fā)現(xiàn)總線鎖存地址和 實(shí)際要送的不一樣,查找datasheet,地址映射寫到“1. 如果外部存儲(chǔ)器的寬度為 16 位,F(xiàn)MC
    發(fā)表于 04-10 08:12

    TC364微控制是否支持外部存儲(chǔ)器?

    TC364 微控制是否支持外部存儲(chǔ)器? 根據(jù)我的閱讀,外部總線接口用于外部存儲(chǔ)器。 在該微控制的數(shù)據(jù)手冊(cè)中,我看到外部
    發(fā)表于 03-04 06:13

    請(qǐng)問用CAN存儲(chǔ)器存儲(chǔ)的CAN總線數(shù)據(jù)幀格式有哪些呢?

    請(qǐng)問用CAN存儲(chǔ)器存儲(chǔ)的CAN總線數(shù)據(jù)幀格式有哪些呢? CAN總線是一種常用于汽車、工業(yè)控制和其他應(yīng)用領(lǐng)域的串行通信協(xié)議。在CAN總線中,數(shù)
    的頭像 發(fā)表于 01-31 13:46 ?1011次閱讀

    PCI-Express總線接口的布線規(guī)則

    PCI-Express總線接口的布線規(guī)則
    的頭像 發(fā)表于 11-29 15:49 ?944次閱讀
    <b class='flag-5'>PCI</b>-Express<b class='flag-5'>總線</b>接口的布線規(guī)則

    通過IIC總線讀寫AT24C512存儲(chǔ)器

    今天要講的是通過IIC總線讀寫AT24C512存儲(chǔ)。我們?cè)陂_發(fā)一些項(xiàng)目的時(shí)候,如果要求對(duì)有些參數(shù)進(jìn)行存儲(chǔ),且掉電不丟失的話,我們就需要一些外部存儲(chǔ)
    的頭像 發(fā)表于 11-09 10:00 ?1925次閱讀
    通過IIC<b class='flag-5'>總線</b><b class='flag-5'>讀寫</b>AT24C512<b class='flag-5'>存儲(chǔ)器</b>

    基于FPGA與PCI總線的實(shí)時(shí)控制計(jì)算機(jī)的設(shè)計(jì)與實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《基于FPGA與PCI總線的實(shí)時(shí)控制計(jì)算機(jī)的設(shè)計(jì)與實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 10-25 11:04 ?0次下載
    基于FPGA與<b class='flag-5'>PCI</b><b class='flag-5'>總線</b>的實(shí)時(shí)控制計(jì)算機(jī)的設(shè)計(jì)與實(shí)現(xiàn)

    基于PCI總線接口卡的ARINC429總線數(shù)據(jù)仿真與采集系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《基于PCI總線接口卡的ARINC429總線數(shù)據(jù)仿真與采集系統(tǒng).pdf》資料免費(fèi)下載
    發(fā)表于 10-24 11:26 ?0次下載
    基于<b class='flag-5'>PCI</b><b class='flag-5'>總線</b>接口卡的ARINC429<b class='flag-5'>總線</b>數(shù)據(jù)仿真與采集系統(tǒng)

    基于PCI總線的雷達(dá)視頻高速數(shù)據(jù)采集接口設(shè)計(jì)?

    點(diǎn)擊上方 藍(lán)字 關(guān)注我們 本文提出了一種新的包括PCI9054單周期讀、寫和存儲(chǔ)器映射傳輸?shù)脑O(shè)計(jì),并討論了通用PCI總線高速數(shù)據(jù)采集卡的實(shí)現(xiàn)方案。
    的頭像 發(fā)表于 10-07 14:55 ?561次閱讀