鄧佳偉,王 琪,張梅娟,張明月,楊楚瑋
(中國電子科技集團(tuán)公司第五十八研究所,江蘇 無錫 214060)
PCIE 是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),由Intel在2001 年提出,旨在替換老舊的PCI、PCI-X 的總線標(biāo)準(zhǔn)。
PCIE 屬于高速串行點(diǎn)對點(diǎn)雙通道高帶寬傳輸,所連接的設(shè)備分配獨(dú)享通道帶寬,不貢獻(xiàn)總線帶寬,主要支持主動電源管理、錯誤報(bào)告、端對端的可靠性傳輸、熱插拔等功能。PCIE 有多種規(guī)格,從PCIE x1 到x32。
芯片流片完成后,硅后系統(tǒng)測試開始,驗(yàn)證人員依照系統(tǒng)集成的順序從底層單元開始測試。驗(yàn)證前,需將芯片測試開發(fā)板結(jié)合起來,或?qū)⑿酒?qū)動程序編程到開發(fā)系統(tǒng)。隨后和設(shè)計(jì)人員和驗(yàn)證人員溝通。一旦驗(yàn)證出現(xiàn)問題,需要驗(yàn)證人員評判缺陷情況,從軟件層面給出是否有可行補(bǔ)救方案。如果芯片存在最終無法避免的缺陷,該缺陷嚴(yán)重影響芯片功能,就需要在下個芯片周期中去修復(fù)該問題[1]。
多態(tài)性指的是多種表現(xiàn)形態(tài),指同一事物通過不同的執(zhí)行方式實(shí)現(xiàn)了不同內(nèi)容的行為。換言之,同一個芯片通過不同的執(zhí)行流程,最后形成了不同的芯片功能。
PCIE 總線系統(tǒng)存在著多種種類的設(shè)備,有根聚合體RC(Root Complex),PCIE 轉(zhuǎn)換橋SWITCH,端節(jié)點(diǎn)EP(Endpoint)。這幾種設(shè)備組成了完整的PCIE 拓?fù)浣Y(jié)構(gòu)[2]。
RC 的作用:處理器連接到RC,RC 負(fù)責(zé)完成CPU 的內(nèi)部地址域到PCIE 內(nèi)部的總線域之間的轉(zhuǎn)換,同時實(shí)現(xiàn)了各種總線的數(shù)據(jù)匯合。實(shí)現(xiàn)了從CPU 地址總線域到PCIE 域地址、PCIE 域到CPU 地址總線域的雙向映射。RC 同時具備以下屬性:
(1) RC 是I/O 層次結(jié)構(gòu)的根節(jié)點(diǎn),連接CPU 的Memory 內(nèi)存子系統(tǒng)到I/O 子系統(tǒng),實(shí)際為PCIE 總線結(jié)構(gòu)中的主橋;
(2) 一個RC 可以支持多個PCIE 端口,每個端口有獨(dú)立的I/O(In/Out)層次結(jié)構(gòu)域,獨(dú)立的I/O 層次結(jié)構(gòu)域下連接一個單獨(dú)的EP,或者連接一個SWITCH 組件,SWITCH 下連接一個以上的EP;
(3) I/O 層次結(jié)構(gòu)域通過RC 進(jìn)行點(diǎn)對點(diǎn)(Peer to Peer)的對等網(wǎng)絡(luò)傳輸功能是可選的;
(4) RC 作為事務(wù)請求者時,支持的包類型有配置請求(configuration request)、IO 請求(I/O request)和鎖定請求(locked request)。
SWITCH 的作用:SWITCH 的內(nèi)部由多個PCIE-to-PCIE 虛擬橋設(shè)備組成,用于擴(kuò)展PCIE 的總線端口,實(shí)現(xiàn)多設(shè)備互連,內(nèi)部邏輯實(shí)現(xiàn)了數(shù)據(jù)路由尋址轉(zhuǎn)發(fā)、仲裁等功能。SWITCH 具備以下屬性:
(1) SWITCH 轉(zhuǎn)接橋由兩個以上的PCI-to-PCI 虛擬橋組成;
(2) SWITCH 橋使用PCI 橋的數(shù)據(jù)傳輸機(jī)制實(shí)現(xiàn)了數(shù)據(jù)傳遞,其中最常用的基于地址的路由機(jī)制實(shí)現(xiàn);
(3) SWITCH 橋必須支持在任何的端口之間傳輸任意類型的TLP(Transaction Layer Packet)數(shù)據(jù)包;
(4) SWITCH 橋上游端口作為發(fā)起方需要支持Locked Request 請求,下游端口作為發(fā)起方時發(fā)起的Locked Request 不需要支持;
(5) 使能的SWITCH 橋端口需要遵循流控協(xié)議;
(6) SWITCH 橋不可將TLP 類型的數(shù)據(jù)包分割成多個小數(shù)據(jù)包進(jìn)行數(shù)據(jù)傳輸。
EP 的作用:EP 是PCIE 體系中總線拓?fù)浣Y(jié)構(gòu)的根節(jié)點(diǎn),擔(dān)任的角色為傳輸?shù)恼埱蠓交蛘呓Y(jié)束方。EP 是指該P(yáng)CIE 設(shè)備只具有上游端口的一種PCIE 設(shè)備。
PCIE 規(guī)范對設(shè)備的協(xié)議為分層結(jié)構(gòu),如圖1 所示,具體由事務(wù)層、數(shù)據(jù)鏈路層和物理層組成。每層都有發(fā)送和接收功能[3-4]。
圖1 PCIE 協(xié)議層次結(jié)構(gòu)
發(fā)送端:發(fā)送端的應(yīng)用程序在事務(wù)層組成事務(wù)層數(shù)據(jù)包TLP(Transaction Layer Package),在發(fā)送緩存中向下層發(fā)送。在數(shù)據(jù)鏈路層,在TLP 數(shù)據(jù)包中加附加信息,信息是對方接收到TLP 數(shù)據(jù)包時錯誤檢查時需要的,其數(shù)據(jù)鏈路層數(shù)據(jù)包DLLP(Data Link Layer Package);在物理層,對DLLP 數(shù)據(jù)包數(shù)據(jù)編碼,通過鏈路中的可用通道,從發(fā)送器發(fā)送出去[5]。
接收端:實(shí)際為發(fā)送端的反過程。接收端實(shí)際就是把發(fā)送端組合的數(shù)據(jù)包反向拆包,最后提取有用的數(shù)據(jù)信息給接收端設(shè)備的應(yīng)用程序使用[6]。
本芯片的主要邏輯包括橋芯片核心邏輯單元、上下游端口、配置邏輯單元、時鐘單元、復(fù)位單元、電源管理單元等,如圖2 所示。
圖2 整體方案設(shè)計(jì)圖
(1)核心邏輯單元
核心邏輯單元包括數(shù)據(jù)處理、路由仲裁和緩存區(qū)子單元。其中數(shù)據(jù)處理子單元負(fù)責(zé)橋芯片核心數(shù)據(jù)處理邏輯,包括數(shù)據(jù)報(bào)文處理功能;路由仲裁子單元負(fù)責(zé)對每個傳輸數(shù)據(jù)包進(jìn)行仲裁處理;數(shù)據(jù)處理完成后,按照數(shù)據(jù)包的目標(biāo)地址,將數(shù)據(jù)包傳送到指定的地址,進(jìn)行路由;緩存區(qū)子單元負(fù)責(zé)將數(shù)據(jù)緩存[7-9]。
(2)上下游端口單元
芯片上游端口有1 個,下游端口支持4 個,每個端口有PHY(Port Physical Layer)物理層、數(shù)據(jù)鏈路層、事務(wù)層,通過端口將數(shù)據(jù)接收和發(fā)送給上下游[10]。
(3)配置邏輯單元
芯片通過SPI 配置接口,連接外部EEPROM。配置邏輯單元負(fù)責(zé)通過讀取外部EEPROM,再解析EEPROM中的配置數(shù)據(jù),最后通過配置數(shù)據(jù)重配置芯片,芯片根據(jù)不同的配置屬性具備了更多的形態(tài)。芯片具備了多態(tài)性配置接口[11-13]。
(4)時鐘單元
芯片上的時鐘單元主要負(fù)責(zé)提供時鐘信號給芯片上的各邏輯單元,橋芯片外部時鐘輸入有兩個,一個是從金手指上獲取的100~125 MHz 時鐘信號,還有一個是外部晶振提供的25 MHz 時鐘信號,芯片的時鐘單元接收到外部信號后,通過時鐘單元將時鐘分頻倍頻,最后提供給每個邏輯單元[14]。
(5)復(fù)位單元
復(fù)位單元提供給芯片復(fù)位信號,芯片接收到復(fù)位信號后,重新啟動芯片的邏輯,和各芯片子單元。
(6)電源單元
電源單元提供給芯片內(nèi)部各邏輯子單元電源信號。
2.2.1 核心邏輯模塊設(shè)計(jì)
橋芯片核心結(jié)構(gòu)主要完成了輸入報(bào)文的頭部解析和路由,輸出報(bào)文的數(shù)據(jù)端口仲裁。
核心邏輯模塊設(shè)計(jì)如圖3 所示。當(dāng)數(shù)據(jù)從一個端口發(fā)送來數(shù)據(jù)后,端口接收單元接收數(shù)據(jù),放到對應(yīng)端口的數(shù)據(jù)緩存中,緩存數(shù)據(jù)調(diào)用數(shù)據(jù)解析和組合單元,同時將數(shù)據(jù)的相關(guān)信息提取起來,對數(shù)據(jù)進(jìn)行仲裁,核心邏輯按照路由信息,將數(shù)據(jù)路由到對端端口上,通過數(shù)據(jù)解析和組合單元,將數(shù)據(jù)重新組合成數(shù)據(jù)包,發(fā)送到對端的端口收發(fā)單元,將數(shù)據(jù)發(fā)送出去[15]。
圖3 核心邏輯模塊設(shè)計(jì)
2.2.2 多態(tài)性配置單元設(shè)計(jì)
PCIE 橋芯片通過配置接收單元的SPI 接口連接外部EEPROM 存儲。在EEPROM 可以按照約定的格式保存每個端口的配置信息。橋芯片上電過程中,讀取EEPROM 是否為空,不為空時開始配置。配置處理單元將數(shù)據(jù)解析后,分發(fā)給芯片核心邏輯單元和上下游端口。圖4 為配置單元設(shè)計(jì)圖[16-17]。
圖4 配置單元設(shè)計(jì)
電路上電后,芯片初始化加載其步驟可總結(jié)如下:
(1)芯片上的配置單元為在芯片加載過程中通過指令逐個命令訪問EEPROM 中的配置信息;
(2)讀取 EEPROM 返回的配置信息后,將數(shù)據(jù)進(jìn)行解析;
(3)將相應(yīng)的配置信息反饋給芯片中寄存器;
(4)寄存器操作相關(guān)邏輯單元,邏輯單元進(jìn)行處理;
(5)處理完畢后,整個配置過程結(jié)束。
驗(yàn)證平臺由通用Intel 處理器平臺(GIGABYTE 測試主板)、PCIE 橋芯片測試開發(fā)板、Intel 公司的82571 千兆網(wǎng)卡組成。通過Linux 操作系統(tǒng)(CentOS7.0)和Linux 網(wǎng)絡(luò)測試工具iPerf 驗(yàn)證芯片功能。圖5 為驗(yàn)證平臺的整體方案設(shè)計(jì)。
圖5 驗(yàn)證平臺的整體方案
3.2.1 PCIE 橋芯片測試開發(fā)板整體電路設(shè)計(jì)
測試板卡主要包括以下幾個部分:芯片時鐘激勵、外部EEPROM、復(fù)位按鍵、電源芯片、PCIE 卡槽和橋芯片,圖6 為測試開發(fā)板整體設(shè)計(jì)圖。
圖6 驗(yàn)證板卡電路整體設(shè)計(jì)
3.2.2 PCIE 橋芯片時鐘電路設(shè)計(jì)
開發(fā)板時鐘電路分為兩個激勵源,可以通過0 Ω 電阻選焊方式確定輸入方式,當(dāng)通過晶振輸入時,頻率選擇為25 MHz,板卡可以通過金手指上從驗(yàn)證平臺上直接輸入100 MHz 時鐘信號。輸入到時鐘配置單元后,其主要提供給橋芯片的邏輯。圖7 為具體電路設(shè)計(jì)。
圖7 時鐘電路設(shè)計(jì)
3.2.3 PCIE 橋芯片電源電路設(shè)計(jì)
電源電路設(shè)計(jì)中通過電源芯片提供不同的電壓給芯片內(nèi)部不同的電壓。電源模塊電路設(shè)計(jì)如圖8 所示。
圖8 電源模塊電路設(shè)計(jì)
3.3.1 PCIE 設(shè)備枚舉
Linux 系統(tǒng)會在系統(tǒng)上電過程中枚舉PCIE 所有總線下設(shè)備。通過主橋依次向下枚舉,同時配置PCIE 設(shè)備的配置空間。Linux 內(nèi)核中枚舉的關(guān)鍵步驟可總結(jié)如下[18-19]:
(1)內(nèi)核創(chuàng)建主橋(host bridge)的數(shù)據(jù)結(jié)構(gòu),將其注冊到系統(tǒng),注冊的過程中創(chuàng)建一個根總線bus0,將其掛載到主橋下,然后解析設(shè)備樹,為總線分配資源和地址空間。
(2)函數(shù)pci_scan_child_bus 開始,掃描總線下所有的設(shè)備和橋。
(3)函數(shù) pci_scan_child_bus_extend 分為兩部分:掃描PCIE 設(shè)備,每條總線下可分配32 個設(shè)備,每個設(shè)備可最多8 個功能,若配置空間版本號和設(shè)備號不為0xff,創(chuàng)建PCI_DEV 設(shè)備,填充PCIE 設(shè)備信息到數(shù)據(jù)結(jié)構(gòu)中,再設(shè)置PCIE 設(shè)備的BAR(Base Address)地址寄存器,將設(shè)備樹讀到的IO 空間分配給PCIE 設(shè)備,再將設(shè)備注冊到總線。掃描PCIE 橋設(shè)備,當(dāng)發(fā)現(xiàn)下一級橋設(shè)備時,繼續(xù)創(chuàng)建總線,掃描該下一級總線下的設(shè)備,進(jìn)行枚舉,通過DFS 枚舉(Depth First Search)深度遍歷算法,最終枚舉出所有設(shè)備。
3.3.2 關(guān)鍵結(jié)構(gòu)體
PCIE 設(shè)備在Linux 枚舉過程中涉及的主要結(jié)構(gòu)體如表1 所示。
表1 關(guān)鍵結(jié)構(gòu)體
圖9 顯示了測試現(xiàn)場圖,圖中左側(cè)的是驗(yàn)證平臺,其通用Intel 處理器平臺(GIGABYTE 測試主板)。右側(cè)的為PCIE 橋芯片測試開發(fā)板。圖中矩形框處,以太網(wǎng)線連接一臺主機(jī)PC。
圖9 測試現(xiàn)場圖
圖10 為PCIE 橋芯片測試開發(fā)板和Intel 公司的千兆網(wǎng)卡組成測試子卡。圖中有多種不同PCIE 板卡,矩形框內(nèi)為千兆網(wǎng)卡。
圖10 板卡實(shí)物圖
圖11 為驗(yàn)證平臺上正常枚舉所有橋端口的測試圖。從圖中可以看出4 個下游端口。
圖11 下游4 端口圖
圖12 為通過EEPROM 重新配置芯片,當(dāng)上電后,Linux 系統(tǒng)枚舉得到的下游端口,在EEPROM 中關(guān)閉了兩路PCIE 通道。
圖12 下游2 端口圖
圖13 為通過EERPOM 重新配置芯片,當(dāng)上電后,Linux 系統(tǒng)枚舉后,查看下游PCIE 速率能力,其已下降到PCIE1.0,速率為2.5 Gb/s。
圖13 EEROM 重新配置鏈路狀態(tài)圖
圖14 為通過iPerf 測試,可以看到通過INTEL 82571,網(wǎng)絡(luò)數(shù)據(jù)通過PCIE 橋后,數(shù)據(jù)可以通信,且速率可以到達(dá)千兆網(wǎng)卡的峰值。
圖14 網(wǎng)絡(luò)壓力測試PCIE 性能圖
隨著PCIE 類型的外圍設(shè)備種類越來越多,傳統(tǒng)的處理器在擴(kuò)展高速接口的能力上已經(jīng)捉襟見肘。具備多態(tài)性的PCIE 擴(kuò)展橋應(yīng)運(yùn)而生。
本芯片設(shè)計(jì)出一款多通路、高通量的四通道PCIE 擴(kuò)展橋,同時芯片內(nèi)部的配置邏輯單元實(shí)現(xiàn)了芯片的多態(tài)性,使芯片具備了不同的屬性適應(yīng)不同的應(yīng)用。芯片有效彌補(bǔ)了傳統(tǒng)處理器能力不足的缺點(diǎn),同時也為下一步設(shè)計(jì)更多通道的PCIE 擴(kuò)展芯片提供了技術(shù)支撐。