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