閱讀55 返回首頁    go 阿裏雲 go 技術社區[雲棲]


2.2 HOST主橋

本節以MPC8548處理器為例說明HOST主橋在PowerPC處理器中的實現機製,並簡要介紹x86處理器係統使用的HOST主橋。

MPC8548處理器是Freescale基於E500 V2內核的一個PowerPC處理器,該處理器中集成了DDR控製器、多個eTSEC(Enhanced Three-Speed Ethernet Controller)PCI/PCI-XPCIe總線控製器等一係列接口。MPC8548處理器的拓撲結構如2?2所示。

 

2.2 HOST主橋 - maoxingbing - 毛毛蟲的爹

 

 如上圖所示,MPC8548處理器的L1 CacheE500 V2內核中,而L2 CacheFSB直接相連,不屬於E500內核。值得注意的是有些高端PowerPC處理器的L2 Cache也在CPU中,而L3 CacheCCB總線直接相連。

MPC8548處理器中,所有外部設備,如以太網控製器、DDR控製器和OCeaN連接的總線控製器都與SoC平台總線直接連接。而SoC平台總線通過Cache共享一致性模塊與FSB連接。

MPC8548處理器中,具有一個32位的PCI總線控製器、一個64位的PCI/PCI-X總線控製器,還有多個PCIe總線控製器。MPC8548處理器使用OCeaN連接這些PCIPCI-XPCIe總線控製器。在MPC8548處理器係統中,PCI設備進行DMA操作時,首先通過OCeaN,之後經過SoC平台總線到達DDR控製器。

OCeaNMPC8548處理器中連接快速外設使用的交叉互連總線,OCeaN不僅可以連接PCIPCI-XPCIe總線控製器,而且可以連接RapidIO總線控製器。使用OCeaN進行互連的總線控製器可以直接通信,而不需要通過SoC平台總線。

如來自HOST主橋1的數據報文可以通過OCeaN直接發向HOST主橋2,而不需要將數據通過SoC平台總線,再進行轉發,從而減輕了SoC平台總線的負擔。OCeaN部件的拓撲結構如2?3所示。

2.2 HOST主橋 - maoxingbing - 毛毛蟲的爹

MPC8548處理器中,有兩個HOST主橋,分別是HOST主橋1HOST主橋2,其中HOST主橋1可以支持PCI-X總線,而HOST主橋2隻能支持PCI總線。此外該處理器還含有多個PCIe總線控製器。

本節僅介紹HOST主橋,即MPC8548處理器中的PCI總線控製器,而不介紹該處理器的PCIe總線控製器。因為從軟件層麵上看,MPC8548處理器的PCIe總線控製器與PCI/PCI-X總線控製器功能類似。

MPC8548處理器即可以作為PCI總線的HOST處理器,也可以作為PCI總線的從設備,本節僅講述MPC8548處理器如何作為PCI總線的HOST處理器管理PCI總線樹,而並不關心MPC8548處理器作為從設備的情況。

MPC8548處理器的HOST主橋中,定義了一係列與係統軟件相關的寄存器。本節將通過介紹這些寄存器,說明這個HOST主橋的功能。為節約篇幅,本節僅介紹與HOST主橋1相關的寄存器,HOST主橋2使用的寄存器與HOST主橋1使用的寄存器類似。

2.2.1 PCI設備配置空間的訪問機製

PCI總線規定訪問配置空間的總線事務,即配置讀寫總線事務,使用ID號進行尋址。PCI設備的ID號由總線號(Bus Number)、設備號(Device Number)和功能號(Function Number)組成。

其中總線號在HOST主橋遍曆PCI總線樹時確定。PCI總線可以使用PCI橋擴展PCI總線,並形成一顆PCI總線樹。在一顆PCI總線樹上,有幾個PCI(包括HOST主橋),就有幾條PCI總線。在一顆PCI總線樹中,總線號由係統軟件決定,通常與HOST主橋直接相連的PCI總線編號為0,係統軟件使用DFS(Depth-First Search)算法掃描PCI總線樹上的所有PCI總線,並依次進行編號。

一條PCI總線的設備號由PCI設備的IDSEL信號與PCI總線地址線的連接關係確定,而功能號與PCI設備的具體設計相關。在一個PCI設備中最多有8個功能設備,而且每一個功能設備都有各自的PCI配置空間,而在絕大多數PCI設備中隻有一個功能設備。HOST主橋使用寄存器號,訪問PCI設備配置空間的某個寄存器。

MPC8548處理器的HOST主橋中,與PCI設備配置空間相關的寄存器由CFG_ADDRCFG_DATAINT_ACK寄存器組成。係統軟件使用CFG_ADDRCFG_DATA寄存器訪問PCI設備的配置空間,而使用INT_ACK寄存器訪問掛接在PCI總線上的中斷控製器的中斷向量,HOSTHOST3個寄存器的地址偏移和屬性如2?1所示。

 

2?1 PCI總線配置寄存器

Offset

寄存器

屬性

複位值

0x0_8000

CFG_ADDR

可讀寫

0x0000-0000

0x0_8004

CFG_DATA

可讀寫

0x0000-0000

0x0_8008

INT_ACK

隻讀

0x0000-0000

 

MPC8548處理器中,所有內部寄存器都使用存儲器映射方式進行尋址,並存放在以BASE_ADDR變量為起始地址的“1MB連續的物理地址空間”中。PowerPC處理器可以通過BASE_ADDR+Offset的方式訪問2?1中的寄存器。

MPC8548處理器使用CFG_ADDR寄存器和CFG_DATA寄存器訪問PCI設備的配置空間,其中用CFG_ADDR寄存器保存PCI設備的ID號和寄存器號,該寄存器的各個字段的詳細說明如下所示。

  •  Enable位。當該位為1時,HOST主橋使能對PCI設備配置空間的訪問,當HOST處理器對CFG_DATA寄存器進行訪問時,HOST主橋將對這個寄存器的訪問轉換為PCI配置讀寫總線事務並發送到PCI總線上。
  •  Bus Number字段記錄PCI設備所在的總線號。
  •  Device Number字段記錄PCI設備的設備號。
  •  Function Number字段記錄PCI設備的功能號。
  • Register Number字段記錄PCI設備的配置寄存器號。

MPC8548處理器訪問PCI設備的配置空間時,首先需要在CFG_ADDR寄存器中設置這個PCI設備對應的總線號、設備號、功能號和寄存器號,然後使能Enable位。之後當MPC8548處理器對CFG_DATA寄存器進行讀寫訪問時, HOST主橋將這個存儲器讀寫訪問轉換為PCI配置讀寫請求,並發送到PCI總線上。如果Enable位沒有使能,處理器對CFG_DATA的訪問不過是一個普通的I/O訪問,HOST主橋並不能將其轉換為PCI配置讀寫請求。

HOST主橋根據CFG_ADDR寄存器中的ID號,生成PCI配置讀寫總線事務,並將這個讀寫總線事務,通過ID譯碼方式發送到指定的PCI設備。PCI設備將接收來自配置寫總線事務的數據,或者為配置讀總線事務提供數據。

值得注意的是,在PowerPC處理器中,在CFG_DATA寄存器中保存的數據采用大端方式進行編址,而PCI設備的配置寄存器采用小端編址,因此HOST主橋需要進行端模式轉換。我們以源代碼2?1為例說明PowerPC處理器如何訪問PCI配置空間。

 2?1 PowerPC處理器訪問PCI配置空間

stw r0, 0(r1)

ld  r3, 0(r2)

 

我們首先假設寄存器r1的初始值為BASE_ADDR+0x0_8000(CFG_ADDR寄存器的地址) ,寄存器r0的初始值為0x8000-0008,寄存器r2的初始值為BASE_ADDR+0x0_8004 (CFG_DATA寄存器的地址),而指定PCI設備(總線號、設備號、功能號都為0)的配置寄存器的0x0B~0x08中的值為0x9988-7766

這段源代碼的執行步驟如下。

(1)      r0寄存器賦值到r1寄存器所指向的地址空間中,即初始化CFG_ADDR寄存器為0x8000-0008

(2)      r2寄存器所指向的地址空間中讀取數據到r3寄存器中,即從CFG_DATA寄存器中讀取數據到r3寄存器。

MPC8548處理器中,源代碼2?1執行完畢後,寄存器r3保存的值為0x6677-8899,而不是0x9988-6677。係統程序員在使用這個返回值時,一定要注意大小端模式的轉換。值得注意的是,源代碼2?1可以使用lwbrx指令進行優化,該指令可以在讀取數據的同時,進行大小端模式的轉換。

處理器讀取INT_ACK寄存器時,HOST主橋將這個讀操作轉換為PCI總線中斷響應事務。PCI總線中斷響應事務的作用是通過PCI總線讀取中斷控製器的中斷向量號,這樣做的前提是中斷控製器需要連接在PCI總線上。

PowerPC處理器使用的MPIC中斷控製器不是掛接在PCI總線上,而是掛接在SoC平台總線上的,因此PCI總線提供的中斷應答事務在這個處理器係統中並沒有太大用途。但是並不排除某些PowerPC處理器係統使用了掛接在PCI總線上的中斷控製器,比如PCI南橋芯片,此時PowerPC處理器係統需要使用中斷應答事務讀取PCI南橋中的中斷控製器,以獲取中斷向量號。

2.2.2 存儲器域地址空間到PCI總線域地址空間的轉換

MPC8548處理器使用ATMU (Address Translation and Mapping Unit)寄存器組進行存儲器域到PCI總線域,以及PCI總線域到存儲器域的地址映射。ATMU寄存器組由兩大組寄存器組成,分別為OutboundInbound寄存器組。其中Outbound寄存器組將存儲器域的地址轉換為PCI總線域的地址,而Inbound寄存器組將PCI總線域的地址轉換為存儲器域的地址。

MPC8548處理器中,隻有當CPU讀寫訪問的地址範圍在Outbound寄存器組管理的地址空間之內時,HOST主橋才能接收CPU的讀寫訪問,並將CPU在存儲器域上的讀寫訪問轉換為PCI總線域上的讀寫訪問,然後才能對PCI設備進行讀寫操作。

2?2所示,CPU對存儲器域的地址訪問,首先使用CCB總線事務,如果所訪問的地址在Cache中命中時,則從Cache中直接獲得數據,否則將從存儲器域中獲取數據。而在絕大多數情況下,外部設備使用的地址空間是不可Cache的,所以在絕大多數情況之下,發向PCI設備的CCB總線事務並不會與Cache進行數據交換。

如果CCB總線事務使用的地址在HOST主橋的Outbound寄存器窗口中命中時,HOST主橋將接收這個CCB總線事務,並將其轉換為PCI總線事務之後,再發送到PCI總線上。MPC8548處理器的每一個HOST主橋都提供了5Outbound寄存器窗口來實現存儲器域地址到PCI總線域地址的映射,其映射過程如2?4所示。

 2.2 HOST主橋 - maoxingbing - 毛毛蟲的爹
    在介紹MPC8548處理器如何使用Outbound寄存器組進行存儲器域地址空間到PCI總線域地址空間的轉換之前,本節將首先介紹Outbound寄存器組中的相應寄存器。Outbound寄存器組的地址偏移、屬性和複位值如2?2所示。

 2?2 PCI/X ATMU Outbound寄存器組

地址偏移

寄存器名

屬性

複位值

0x0_8C00/20/40/60/80

POTARn

可讀寫

0x0000-0000

0x0_8C04/24/44/64/84

POTEARn

可讀寫

0x0000-0000

0x0_8C28/48/68/88

POWBARn

可讀寫

0x0000-0000

0x0_8C30/50/70/90

POWARn

可讀寫

0x0000-0000

 

1 POTARnPOTEARn寄存器

POTARnPOTEARn寄存器中保存當前Outbound窗口在PCI總線域中的64位地址空間的基地址。這兩個寄存器的主要字段如下。

  •  POTARn寄存器的TEA字段,第0~11位,保存PCI總線地址空間的43~32位。
  • POTARn寄存器的TA字段,第12~31位,保存PCI總線地址空間的31~12
  •  POTEARn寄存器的TEA字段,第12~31位,保存PCI總線地址空間的63~44位。

2 POWBARn寄存器和POWARn寄存器

POWBARn寄存器保存當前Outbound窗口在存儲器域中的36位地址空間的基地址,其主要字段如下。

  •  WBEA字段保存存儲器域地址的第0~3位。
  •  WBA字段保存存儲器域地址的第4~23位。
  • POWARn寄存器描述Outbound窗口的屬性,其主要字段如下。
  •  EN位,第0位。該位是Outbound窗口的使能位,為1表示當前Outbound寄存器組描述的存儲器地址空間到PCI總線地址空間的映射關係有效;為0表示無效。
  • RTT字段,第12~15位,該字段描述當前窗口的讀傳送類型,為0b0100表示存儲器讀,為0b1000表示I/O讀。
  •  WTT字段,第16~19位,該字段描述當前窗口的寫傳送類型,為0b0100表示存儲器寫,為0b1000表示I/O寫。在PCIe總線控製器中,RTT字段和WTT字段還可以支持對配置空間的讀寫操作。
  • OWS字段,第26~31位,該字段描述當前窗口的大小,Outbound窗口的大小在4KB~64GB之間,其值為2OWS+1

3 使用Outbound寄存器訪問PCI總線地址空間

MPC8548處理器使用Outbound寄存器組訪問PCI總線地址空間的步驟如下。

(1)      首先MPC8548處理器需要將程序使用的32位有效地址EA (Effective Address)轉換為41位的虛擬地址VA (Virtual Address)E500 V2內核不能關閉MMU(Memory Management Unit),因此不能直接訪問物理地址。

(2)      MPC8548處理器通過MMU41位的虛擬地址轉換為36位的物理地址。在E500 V2內核中,物理地址是36(缺省是32位,需要使能)

(3)      檢查LAWBARLAWAR寄存器,判斷當前36位的物理地址是否屬於PCI總線空間。在MPC8548中定義了一組LAWBARLAWAR寄存器對,每一對寄存器描述當前物理空間是與PCI總線、PCIe總線、DDR還是RapidIO空間對應。該組寄存器的詳細說明見MPC8548 PowerQUICC III? Integrated Host Processor Family Reference Manual。如果CPU訪問的空間為PCI總線空間,則執行第(4)步,否則處理器將不會訪問PCI地址空間。

(4)      判斷當前36位物理地址是否在POWBARn寄存器1~4描述的窗口中,如果在則將36位的處理器物理地址通過寄存器POTARnPOTEARn轉換為64位的PCI總線地址,然後HOST主橋將來自處理器的讀寫請求發送到PCI總線上;如果不在POWBARn寄存器1~4描述的窗口中,POWBAR0寄存器作為缺省窗口,接管這個存儲器訪問,並使用寄存器POTAR0POTEAR0,將處理器物理地址轉換為PCI總線地址,當然在正常設計中很少出現這種情況。

許多係統軟件,將Outbound窗口兩邊的寄存器使用“直接相等”的方法進行映射,將存儲器域的地址與PCI總線地址設為相同的值。但是係統軟件程序員務必注意這個存儲器地址與PCI總線地址是分屬於存儲器域與PCI總線域的,這兩個值雖然相等,但是所代表的地址並不相同,一個屬於存儲器域,而另一個屬於PCI總線域。

2.2.3 PCI總線域地址空間到存儲器域地址空間的轉換

MPC8548處理器使用Inbound寄存器組將PCI總線域地址轉換為存儲器域的地址。PCI設備進行DMA讀寫時,隻有訪問的地址在Inbound窗口中時,HOST主橋才能接收這些讀寫請求,並將其轉發到存儲器控製器。MPC8548處理器提供了3Inbound寄存器,即提供3Inbound寄存器窗口,實現PCI總線地址到存儲器地址的反向映射。

PCI設備的角度上看,PCI設備訪問存儲器域的地址空間時,首先需要通過Inbound窗口將PCI總線地址轉換為存儲器域的地址;而從處理器的角度上看,處理器必須要將存儲器地址通過Inbound寄存器組反向映射為PCI總線地址空間,才能被PCI設備訪問。

PCI設備隻能使用PCI總線地址訪問PCI總線域的地址空間。HOST主橋將這段地址空間通過Inbound窗口轉換為存儲器域的地址之後,PCI設備才能訪問存儲器域地址空間。這個地址轉換過程如2?5所示。

 2.2 HOST主橋 - maoxingbing - 毛毛蟲的爹

 

    在介紹MPC8548處理器如何使用Inbound寄存器組進行PCI總線域地址空間到存儲器域地址空間的轉換之前,我們首先簡要介紹Inbound寄存器組中的相應寄存器。該組寄存器的地址偏移、屬性和複位值如2?3所示。

2?3 PCI/X ATMU Inbound寄存器組

Offset

寄存器名

屬性

複位值

0x0_8DA0/C0/E0

PITARn

可讀寫

0x0000-0000

0x0_8DA8/C8/E8

PIWBARn

可讀寫

0x0000-0000

0x0_8DAC/CC

PIWBEARn

可讀寫

0x0000-0000

0x0_8DB0/D0/F0

PIWARn

可讀寫

0x0000-0000

 

值得注意的是,Inbound寄存器組除了可以進行PCI總線地址空間到存儲器域地址空間的轉換之外,還可以轉換分屬不同PCI總線域的地址空間,以支持PCI總線的Peer-to-Peer數據傳送方式。

1 PITARn寄存器

PITARn寄存器保存當前Inbound窗口在存儲器域中的36位地址空間的基地址,其地址窗口的大小至少為4KB,因此在該寄存器中僅存放存儲器域地址的第0~23位,該寄存器的其主要字段如下所示。

  • TEA字段存放存儲器地址空間的第0~3位。
  •  TA字段存放存儲器地址空間的第4~23位。

2 PIWBARnPIWBEARn寄存器

  • PIWBARnPIWBEARn寄存器保存當前Inbound窗口在PCI總線域中的64位地址空間的基地址的第63~12位,Inbound窗口使用的最小地址空間為4KB,因此在這兩個寄存器中不含有PCI總線地址空間的第11~0位。這兩個寄存器的主要字段如下所示。
  • PIWBARn寄存器的BEA字段存放PCI總線地址空間的第43~32位。
  •  PIWBARn寄存器的BA字段存放PCI總線地址空間的第31~12位。
  • PIWBEARn寄存器的BEA字段存放PCI總線地址空間的第63~44位。

3 PIWARn寄存器

PIWARn寄存器描述當前Inbound窗口的屬性,該寄存器由以下位和字段組成。

  •  EN位,第0位。該位是Inbound窗口的使能位,為1表示當前Inbound寄存器組描述的存儲器地址空間到PCI總線地址空間的映射關係有效;為0表示無效。
  • PF位,第2位。該位為1表示當前Inbound窗口描述的存儲區域支持預讀;為0表示不支持預讀。
  • TGI字段,第8~11位。該字段為0b0010表示當前Inbound窗口描述的存儲區域屬於PCIe總線域地址空間;為0b1100表示當前Inbound窗口描述的存儲區域屬於RapidIO總線域地址空間。該字段對於OCeaN實現不同域間的報文轉發非常重要,如果當前Inbound窗口的TGI字段為0b0010,此時PCI總線上的設備可以使用該Inbound窗口,通過OCeaN直接讀取PCIe總線的地址空間,而不需要經過SoC平台總線。如果TGI字段為0b1111表示Inbound窗口描述的存儲器區域屬於主存儲器地址空間,這也是最常用的方式。使用該字段可以實現HOST主橋的Peer-to-Peer數據傳送方式。
  •  RTT字段和WTT字段,分別為該寄存器的第12~15位和第16~19位。Inbound窗口的RTT/WTT字段的含義與Outbound窗口的RTT/WTT字段基本類似。隻是在Inbound窗口中可以規定PCI設備訪問主存儲器時,是否需要進行Cache一致性操作(Cache Lock and Allocate),在進行DMA寫操作時,數據是否可以直接進入到Cache中。該字段是PowerPC處理器對PCI總線規範的有效補充,由於該字段的存在,PowerPC處理器的PCI設備可以將數據直接寫入Cache,也可以視情況決定DMA操作是否需要進行Cache共享一致性操作。
  •  IWS字段,第26~31位。該字段描述當前窗口的大小,Inbound窗口的大小在4KB~16GB之間,其值為2IWS+1

4 使用Inbound寄存器組進行DMA操作

PCI設備使用DMA操作訪問主存儲器空間,或者訪問其他PCI總線域地址空間時,需要通過Inbound窗口,其步驟如下。

(1)      PCI設備在訪問主存儲器空間時,將首先檢查當前PCI總線地址是否在PIWBARnPIWBEARn寄存器描述的窗口中。如果在這個窗口中,則將這個PCI總線地址通過PITARn寄存器轉換為存儲器域的地址或者其他PCI總線域的地址;如果不在將禁止本次訪問。

(2)      如果PCI設備訪問的是存儲器地址空間,HOST主橋將來自PCI總線的讀寫請求發送到存儲器空間,進行存儲器讀寫操作,並根據Inbound寄存器組的RTT/WTT位決定是否需要進行Cache一致性操作,或者將數據直接寫入到Cache中。

結合Outbound寄存器組,可以發現PCI總線地址空間與存儲器地址空間是有一定聯係的。如果存儲器域地址空間被Inbound寄存器組反向映射到PCI空間,這個存儲器地址具有兩個地址,一個是在存儲器域的地址,一個是在PCI總線域的地址;同理PCI總線空間的地址如果使用Outbound寄存器映射到寄存器地址空間,這個PCI總線地址也具有兩個地址,一個是在PCI總線域的地址,一個是在存儲器域的地址。

能夠被處理器和PCI總線同時訪問的地址空間,一定在PCI總線域和存儲器域中都存在地址映射。再次強調,絕大多數操作係統將同一個空間的PCI總線域地址和存儲器地址設為相同的值,但是這兩個相同的值所代表的含義不同。

由此可以看出,如果MPC8548處理器的某段存儲器區域沒有在Inbound窗口中定義時,PCI設備將不能使用DMA機製訪問這段存儲器空間;同理如果PCI設備的空間不在Outbound窗口,HOST處理器也不能訪問這段PCI地址空間。

在絕大多數PowerPC處理器係統中,PCI設備地址空間都在HOST主橋的Outbound窗口中建立了映射;而MPC8548處理器可以選擇將哪些主存儲器空間共享給PCI設備,從而對主存儲器空間進行保護。

2.2.4 x86處理器的HOST主橋

x86處理器使用南北橋結構連接CPUPCI設備。其中北橋(North Bridge)連接快速設備,如顯卡、和內存條,並推出PCI總線,HOST主橋包含在北橋中。而南橋(South Bridge)連接慢速設備。x86處理器使用的南北橋結構如2?6所示。

Intel使用南北橋概念統一PC架構。但是從體係結構的角度上看,南北橋架構並不重要,北橋中存放的主要部件不過是存儲器控製器、顯卡控製器和HOST主橋而已,而南橋存放的是一些慢速設備,如ISA總線和中斷控製器等。

不同的處理器係統集成這些組成部件的方式並不相同,如PowerPCMIPSARM處理器係統通常將CPU和主要外部設備都集成到一顆芯片中,組成一顆基於SoC架構的處理器係統。這些集成方式並不重要,每一個處理器係統都有其針對的應用領域,不同應用領域的需求對處理器係統的集成方式有較大的影響。Intel采用的南北橋架構針對x86處理器的應用領域而設計,並不能說采用這種結構一定比MPC8548處理器中即含有HOST-to-PCI主橋也含有HOST-to-PCIe主橋更為合理。

在許多嵌入式處理器係統中,即含有PCI設備也含有PCIe設備,為此MPC8548處理器同時提供了PCI總線和PCIe總線接口,在這個處理器係統中,PCI設備可以與PCI總線直接相連,而PCIe設備可以與PCIe總線直接相連,因此並不需要使用PCIe橋擴展PCI總線,從而在一定程度上簡化了嵌入式係統的設計。

 2.2 HOST主橋 - maoxingbing - 毛毛蟲的爹

 

嵌入式係統所麵對的應用千姿百態,進行芯片設計時所要考慮的因素相對較多,因而在某種程度上為設計帶來了一些難度。而x86處理器係統所麵對的應用領域針對個人PC和服務器,向前兼容和通用性顯得更加重要。在多數情況下,一個通用處理器係統的設計難過專用處理器係統的設計,Intel為此付出了極大的代價。

在一些相對較老的北橋中,如Intel 440係列芯片組中包含了HOST主橋,從係統軟件的角度上看HOST-to-PCI主橋實現的功能與HOST-to-PCIe主橋實現的功能相近。本節僅簡單介紹IntelHOST-to-PCI主橋如何產生PCI的配置周期,有關Intel HOST-to-PCIe主橋的詳細信息參見5

x86處理器定義了兩個I/O端口寄存器,分別為CONFIG_ADDRESSCONFIG_DATA寄存器,其地址為0xCF80xCFCx86處理器使用這兩個I/O端口訪問PCI設備的配置空間。PCI總線規範也以這個兩個寄存器為例,說明處理器如何訪問PCI設備的配置空間。其中CONFIG_ADDRESS寄存器存放PCI設備的ID號,而CONFIG_DATA寄存器存放進行配置讀寫的數據。

CONFIG_ADDRESS寄存器與PowerPC處理器中的CFG_ADDR寄存器的使用方法類似,而CONFIG_DATA寄存器與PowerPC處理器中的CFG_DATA寄存器的使用方法類似。CONFIG_ADDRESS寄存器的結構如2?7所示。

2.2 HOST主橋 - maoxingbing - 毛毛蟲的爹

CONFIG_ADDRESS寄存器的各個字段和位的說明如下所示,

 

  •  Enable位,第31位。該位為1時,對CONFIG_DATA寄存器進行讀寫時將引發PCI總線的配置周期。
  •  Bus Number字段,第23~16位,記錄PCI設備的總線號。
  •  Device Number字段,第15~11位,記錄PCI設備的設備號。
  •  Function Number字段,第10~8位,記錄PCI設備的功能號。
  • Register Number字段,第7~2位,記錄PCI設備的寄存器號。

x86處理器對CONFIG_DATA寄存器進行I/O讀寫訪問,且CONFIG_ADDR寄存器的Enable位為1時,HOST主橋將這個I/O讀寫訪問轉換為PCI配置讀寫總線事務,然後發送到PCI總線上,PCI總線根據保存在CONFIG_ADDR寄存器中的ID號,將PCI配置讀寫請求發送到指定PCI設備的指定配置寄存器中。

x86處理器使用小端地址模式,因此從CONFIG_DATA寄存器中讀出的數據不需要進行模式轉換,這點和PowerPC處理器不同,此外x86處理器的HOST主橋也實現了存儲器域到PCI總線域的地址轉換,但是這個概念在x86處理器中並不明晰。

本書將在5HOST-to-PCIe主橋為例,詳細介紹Intel處理器的存儲器地址與PCI總線地址的轉換關係,而在本節不對x86處理器的HOST主橋做進一步說明。x86處理器係統的升級速度較快,目前在x86的處理器體係結構中,已很難發現HOST主橋的身影。

目前Intel對南北橋架構進行了升級,其中北橋被升級為MCH(Memory Controller Hub),而南橋被升級為ICH(I/O Controller Hub)x86處理器係統在MCH中集成了存儲器控製器、顯卡芯片和HOST-to-PCIe主橋,並通過Hub LinkICH相連;而在ICH中集成了一些相對低速總線接口,如AC’97LPC(Low Pin Count)IDEUSB總線,當然也包括一些低帶寬的PCIe總線接口。

Intel最新的Nehelem處理器係統中,MCH被一份為二,存儲器控製器和圖形控製器已經與CPU內核集成在一個Die中,而MCH剩餘的部分與ICH合並成為PCH(Peripheral Controller Hub)。但是從體係結構的角度上看,這些升級與整合並不重要。

目前IntelMenlow平台基礎上,計劃推出基於SoC架構的x86處理器,以進軍手持設備市場。在基於SoC構架的x86處理器中將逐漸淡化Chipset的概念,其拓撲結構與典型的SoC處理器,如ARMPowerPC處理器,較為類似。


MPC8548也將FSB稱為CCB(Core Complex Bus)

PowerPC處理器並沒有公開其SoC平台總線的設計規範。ARM提出的AMBA總線是一條典型的SoC平台總線。

RapidIO總線由Mercury Computer SystemMotorola Semiconductor(目前的Freescale)共同提出,用於解決背板互連的一條外部總線。

MPC8548處理器中,BASE_ADDR存放在CCSRBAR寄存器中。

PCI設備使用的ROM空間可以是“可Cache”的地址空間。

POTARn寄存器沒有保存PCI總線的11~0位,因為Outbound窗口大小至少為4KB

MPC8548處理器的物理地址為36位。注意在PowerPC處理器中,第0位是地址的最高位。

WBA字段並沒有保存存儲器域的第24~35位地址,因為Outbound窗口大小至少為4KB

這個HOST-to-PCIe主橋也是RC(Root Complex)的一部分。

Nehelem處理器也被稱為Core i7處理器。

Menlow平台於20083月發布,其目標應用為MID(Mobile Internet Device)設備。Menlow平台基於低功耗處理器內核Atom

最後更新:2017-04-03 16:48:39

  上一篇:go Shell編程基礎
  下一篇:go 6.1 MSI/MSI-X Capability結構