<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PCI總線(xiàn)的配置

PCI總線(xiàn)的配置

作者: 時(shí)間:2016-12-14 來(lái)源:網(wǎng)絡(luò ) 收藏

2 PCI設備31

HOST處理器對PCI設備31進(jìn)行配置讀寫(xiě)時(shí),需要通過(guò)HOST主橋、PCI橋1、2和3,最終到達PCI設備31。
當處理器訪(fǎng)問(wèn)PCI設備31時(shí),首先將CONFIG_ADDRESS寄存器的Enable位置1,Bus Number字段置為3,并對Device、Function和Register Number字段賦值。之后當處理器對CONFIG_DATA寄存器進(jìn)行讀寫(xiě)訪(fǎng)問(wèn)時(shí),HOST主橋、PCI橋1、2和3將按照以下步驟進(jìn)行處理,最后PCI設備31將接收這個(gè)配置請求。
(1) HOST主橋發(fā)現Bus Number字段的值為3,該總線(xiàn)號并不是與HOST主橋直接相連的PCI總線(xiàn)的Bus Number,所以HOST主橋將處理器對CONFIG_DATA寄存器的讀寫(xiě)訪(fǎng)問(wèn)直接轉換為T(mén)ype 01h配置請求,并將這個(gè)配置請求發(fā)送到PCI總線(xiàn)0上。PCI總線(xiàn)規定Type 01h配置請求只能由PCI橋負責處理。
(2) 在PCI總線(xiàn)0上,PCI橋1的Secondary Bus Number為1而Subordinate Bus Number為3。而1< Bus Number <= 3,所以PCI橋1將接收來(lái)自PCI總線(xiàn)0的Type 01h配置請求,并將這個(gè)配置請求直接下推到PCI總線(xiàn)1。
(3) 在PCI總線(xiàn)1上,PCI橋2的Secondary Bus Number為2而Subordinate Bus Number為3。而1< Bus Number <= 3,所以PCI橋2將接收來(lái)自PCI總線(xiàn)0的Type 01h配置請求,并將這個(gè)配置請求直接下推到PCI總線(xiàn)2。
(4) 在PCI總線(xiàn)2上,PCI橋3的Secondary Bus Number為3,因此PCI橋3將“來(lái)自PCI總線(xiàn)2的Type 01h配置請求”轉換為T(mén)ype 00h配置請求,并將其下推到PCI總線(xiàn)3。PCI總線(xiàn)規定,如果PCI橋的Secondary Bus Number與Type 01h配置請求中包含的Bus Number相同時(shí),該PCI橋將接收的Type 01h配置請求轉換為T(mén)ype 00h配置請求,然后再發(fā)向其Secondary Bus。
(5) 在PCI總線(xiàn)3上,有兩個(gè)設備PCI設備31和PCI設備32。在這兩個(gè)設備中,必然有一個(gè)設備將要響應這個(gè)Type 00h配置請求,從而完成整個(gè)配置請求周期。本篇在第2.4.1節中,討論了究竟是PCI設備31還是PCI設備32接收這個(gè)配置請求,這個(gè)問(wèn)題涉及PCI總線(xiàn)如何分配PCI設備使用的設備號。

2.4.3 PCI總線(xiàn)樹(shù)Bus號的初始化

在一個(gè)處理器系統中,每一個(gè)HOST主橋都推出一顆PCI總線(xiàn)樹(shù)。在一顆PCI總線(xiàn)樹(shù)中有多少個(gè)PCI橋(包括HOST主橋),就含有多少條PCI總線(xiàn)。系統軟件在遍歷當前PCI總線(xiàn)樹(shù)時(shí),需要首先對這些PCI總線(xiàn)進(jìn)行編號,即初始化PCI橋的Primary、Secondary和Subordinate Bus Number寄存器。
在一個(gè)處理器系統中,一般將與HOST主橋直接相連的PCI總線(xiàn)被命名為PCI總線(xiàn)0。然后系統軟件使用DFS(Depth First Search)算法,依次對其他PCI總線(xiàn)進(jìn)行編號。值得注意的是,與HOST主橋直接相連的PCI總線(xiàn),其編號都為0,因此當處理器系統中存在多個(gè)HOST主橋時(shí),將有多個(gè)編號為0的PCI總線(xiàn),但是這些編號為0的PCI總線(xiàn)分屬不同的PCI總線(xiàn)域,其含義并不相同。
在一個(gè)處理器系統中,PCI總線(xiàn)樹(shù)的結構如圖2?13所示。當然在一個(gè)實(shí)際的處理器系統中,很少會(huì )出現這樣復雜的PCI總線(xiàn)樹(shù)結構,本節采用這個(gè)結構的目的是便于說(shuō)明PCI總線(xiàn)號的分配過(guò)程。
在PCI總線(xiàn)中,系統軟件使用深度優(yōu)先DFS算法對PCI總線(xiàn)樹(shù)進(jìn)行遍歷,DFS算法和廣度優(yōu)先BFS(Breadth First Search)算法是遍歷樹(shù)型結構的常用算法。與BFS算法相比,DFS算法的空間復雜度較低,因此絕大多數系統系統在遍歷PCI總線(xiàn)樹(shù)時(shí),都使用DFS算法而不是BFS算法。
DFS是搜索算法的一種,其實(shí)現機制是沿著(zhù)一顆樹(shù)的深度遍歷各個(gè)節點(diǎn),并盡可能深地搜索樹(shù)的分支,DFS的算法為線(xiàn)性時(shí)間復雜度,適合對拓撲結構未知的樹(shù)進(jìn)行遍歷。在一個(gè)處理器系統的初始化階段,PCI總線(xiàn)樹(shù)的拓撲結構是未知的,適合使用DFS算法進(jìn)行遍歷。下文以圖2?13為例,說(shuō)明系統軟件如何使用DFS算法,分配PCI總線(xiàn)號,并初始化PCI橋中的Primary Bus Number、Secondary Bus Number和Subordinate Bus number寄存器。所謂DFS算法是指按照深度優(yōu)先的原則遍歷PCI胖樹(shù),其步驟如下。
(1) HOST主橋掃描PCI總線(xiàn)0上的設備。系統軟件首先忽略所有這條總線(xiàn)上的PCI Agent設備,因為在這些設備之下不會(huì )掛接新的PCI總線(xiàn)。例如PCI設備01下不可能掛接新的PCI總線(xiàn)。
(2) HOST主橋首先發(fā)現PCI橋1,并將PCI橋1的Secondary Bus命名為PCI總線(xiàn)1。系統軟件將初始化PCI橋1的配置空間,將PCI橋1的Primary Bus Number寄存器賦值為0,而將Secondary Bus Number寄存器賦值為1,即PCI橋1的上游PCI總線(xiàn)號為0,而下游PCI總線(xiàn)號為1。
(3) 掃描PCI總線(xiàn)1,發(fā)現PCI橋2,并將PCI橋2的Secondary Bus命名為PCI總線(xiàn)2。系統軟件將初始化PCI橋2的配置空間,將PCI橋2的Primary Bus Number寄存器賦值為1,而將Secondary Bus Number寄存器賦值為2。
(4) 掃描PCI總線(xiàn)2,發(fā)現PCI橋3,并將PCI橋3的Secondary Bus命名為PCI總線(xiàn)3。系統軟件將初始化PCI橋3的配置空間,將PCI橋3的Primary Bus Number寄存器賦值為2,而將Secondary Bus Number寄存器賦值為3。
(5) 掃描PCI總線(xiàn)3,沒(méi)有發(fā)現任何PCI橋,這表示PCI總線(xiàn)3下不可能有新的總線(xiàn),此時(shí)系統軟件將PCI橋3的Subordinate Bus number寄存器賦值為3。系統軟件在完成PCI總線(xiàn)3的掃描后,將回退到PCI總線(xiàn)3的上一級總線(xiàn),即PCI總線(xiàn)2,繼續進(jìn)行掃描。
(6) 在重新掃描PCI總線(xiàn)2時(shí),系統軟件發(fā)現PCI總線(xiàn)2上除了PCI橋3之外沒(méi)有發(fā)現新的PCI橋,而PCI橋3之下的所有設備已經(jīng)完成了掃描過(guò)程,此時(shí)系統軟件將PCI橋2的Subordinate Bus number寄存器賦值為3。繼續回退到PCI總線(xiàn)1。
(7) PCI總線(xiàn)1上除了PCI橋2外,沒(méi)有其他橋片,于是繼續回退到PCI總線(xiàn)0,并將PCI橋1的Subordinate Bus number寄存器賦值為3。
(8) 在PCI總線(xiàn)0上,系統軟件掃描到PCI橋4,則首先將PCI橋4的Primary Bus Number寄存器賦值為0,而將Secondary Bus Number寄存器賦值為4,即PCI橋1的上游PCI總線(xiàn)號為0,而下游PCI總線(xiàn)號為4。
(9) 系統軟件發(fā)現PCI總線(xiàn)4上沒(méi)有任何PCI橋,將結束對PCI總線(xiàn)4的掃描,并將PCI橋4的Subordinate Bus number寄存器賦值為4,之后回退到PCI總線(xiàn)4的上游總線(xiàn),即PCI總線(xiàn)0繼續進(jìn)行掃描。
(10) 系統軟件發(fā)現在PCI總線(xiàn)0上的兩個(gè)橋片PCI總線(xiàn)0和PCI總線(xiàn)4都已完成掃描后,將結束對PCI總線(xiàn)的DFS遍歷全過(guò)程。
從以上算法可以看出,PCI橋的Primary Bus和Secondary Bus號的分配在遍歷PCI總線(xiàn)樹(shù)的過(guò)程中從上向下分配,而Subordinate Bus號是從下向上分配的,因為只有確定了一個(gè)PCI橋之下究竟有多少條PCI總線(xiàn)后,才能初始化該PCI橋的Subordinate Bus號。

2.4.4 PCI總線(xiàn)Device號的分配

一條PCI總線(xiàn)會(huì )掛接各種各樣的PCI設備,而每一個(gè)PCI設備在PCI總線(xiàn)下具有唯一的設備號。系統軟件通過(guò)總線(xiàn)號和設備號定位一個(gè)PCI設備之后,才能訪(fǎng)問(wèn)這個(gè)PCI設備的配置寄存器。值得注意的是,系統軟件使用“地址尋址方式”訪(fǎng)問(wèn)PCI設備的存儲器和I/O地址空間,這與訪(fǎng)問(wèn)配置空間使用的“ID尋址方式”不同。
PCI設備的IDSEL信號與PCI總線(xiàn)的AD[31:0]信號的連接關(guān)系決定了該設備在這條PCI總線(xiàn)的設備號。如上文所述,每一個(gè)PCI設備都使用獨立的IDSEL信號,該信號將與PCI總線(xiàn)的AD[31:0]信號連接,IDSEL信號的含義見(jiàn)第1.2.2節。
在此我們簡(jiǎn)要回顧PCI的配置讀寫(xiě)事務(wù)使用的時(shí)序。如圖1?3所示,PCI總線(xiàn)事務(wù)由一個(gè)地址周期加若干個(gè)數據周期組成。在進(jìn)行配置讀寫(xiě)請求總線(xiàn)事務(wù)時(shí),C/BE#信號線(xiàn)的值在地址周期中為0x1010或者為0x1011,表示當前總線(xiàn)事務(wù)為配置讀或者配置寫(xiě)請求。此時(shí)出現在A(yíng)D[31:0]總線(xiàn)上的值并不是目標設備的PCI總線(xiàn)地址,而是目標設備的ID號,這與PCI總線(xiàn)進(jìn)行I/O或者存儲器請求時(shí)不同,因為PCI總線(xiàn)使用ID號而不是PCI總線(xiàn)地址對配置空間進(jìn)行訪(fǎng)問(wèn)。
如圖2?12所示,在配置讀寫(xiě)總線(xiàn)事務(wù)的地址周期中,AD[10:0]信號已經(jīng)被Function Number和Register Number使用,因此PCI設備的IDSEL只能與AD[31:11]信號連接。
認真的讀者一定可以發(fā)現在CONFIG_ADDRESS寄存器中Device Number字段一共有5位可以表示32個(gè)設備,而AD[31:11]只有21位,顯然在這兩者之間無(wú)法建立一一對應的映射關(guān)系。因此在一條PCI總線(xiàn)上如果有21個(gè)以上的PCI設備,那么總是有幾個(gè)設備無(wú)法與AD[31:11]信號線(xiàn)連接,從而PCI總線(xiàn)無(wú)法訪(fǎng)問(wèn)這些設備。因為PCI總線(xiàn)在配置請求的地址周期中,只能使用第31~11這些AD信號,所以在一條總線(xiàn)上最多也只能掛接21個(gè)PCI設備。這21個(gè)設備可能是從0到20,也可能是從11到31排列。從而系統軟件在遍歷PCI總線(xiàn)時(shí),還是需要從0到31遍歷整條PCI總線(xiàn)。
在實(shí)際的應用中,一條PCI總線(xiàn)能夠掛接21個(gè)設備已經(jīng)足夠了,實(shí)際上由于PCI總線(xiàn)的負載能力有限,即便總線(xiàn)頻率為33MHz的情況下,在一條PCI總線(xiàn)中最多也只能掛接10個(gè)負載,一條PCI總線(xiàn)所能掛接的負載詳見(jiàn)表1?1。AD信號線(xiàn)與PCI設備IDSEL線(xiàn)的連接關(guān)系如圖2?14所示。

PCI總線(xiàn)推薦了一種Device Number字段與AD[31:16]之間的映射關(guān)系。其中PCI設備0與Device Number字段的0b00000對應;PCI設備1與Device Number字段的0b00001對應,并以此類(lèi)推,PCI設備15與Device Number字段的0b01111對應。
在這種映射關(guān)系之下,一條PCI總線(xiàn)中,與信號線(xiàn)AD16相連的PCI設備其設備號為0;與信號線(xiàn)AD17相連的PCI設備其設備號為1;以此類(lèi)推,與信號線(xiàn)AD31相連的PCI設備其設備號為15。在Type 00h配置請求中,設備號并沒(méi)有像Function Number和Register Number那樣以編碼的形式出現在A(yíng)D總線(xiàn)上,而是與AD信號一一對應,如圖2?12所示。
這里有一個(gè)原則需要讀者注意,就是對PCI設備的配置寄存器進(jìn)行訪(fǎng)問(wèn)時(shí),一定要有確定的Bus Number、Device Number、Function Number和Register Number,這“四元組”缺一不可。在Type 00h配置請求中,Device Number由AD[31:11]信號線(xiàn)與PCI設備IDSEL信號的連接關(guān)系確定;Function Number保存在A(yíng)D[10:8]字段中;而Register Number保存在A(yíng)D[7:0]字段中;在Type 01h配置請求中,也有完整的四元組信息。


[1] 此時(shí)PCI橋作為一個(gè)PCI設備,接收訪(fǎng)問(wèn)其配置空間的讀寫(xiě)請求。
[2] 最終Type 01h配置請求將會(huì )被轉換為T(mén)ype 00h配置請求,然后訪(fǎng)問(wèn)PCI Agent設備。
[3] Type 01h配置頭信息存在于PCI總線(xiàn)事務(wù)的地址周期中。
[4] PCI橋根據Subordinate Bus Number和Secondary Bus Number寄存器,決定是否接收當前配置請求


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: PCI總線(xiàn)配

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>