李沛南, , ,,
(1.哈爾濱理工大學(xué) 自動(dòng)化學(xué)院,哈爾濱 150080; 2.中國(guó)科學(xué)院自動(dòng)化研究所,北京 100190)
依據(jù)最新視覺(jué)網(wǎng)絡(luò)指數(shù)和全球云指數(shù),2014年至2019年,數(shù)據(jù)中心每年平均數(shù)據(jù)流量將從3.4 ZB增至10.4 ZB[1]。大數(shù)據(jù)時(shí)代的到來(lái)使得傳統(tǒng)的摩爾定律,即每隔18個(gè)月~24個(gè)月處理器時(shí)鐘頻率翻一番,逐漸轉(zhuǎn)為處理器個(gè)數(shù)、線程數(shù)以及并行算法性能的翻番[2]。
NVIDIA與IBM在文獻(xiàn)[3]中設(shè)計(jì)的超級(jí)計(jì)算機(jī),重新定義CPU、GPU間的互聯(lián)方式與架構(gòu)。AMD、ARM等公司,創(chuàng)立異構(gòu)系統(tǒng)架構(gòu)基金會(huì),旨在統(tǒng)一CPU、GPU及高性能單元的互聯(lián)架構(gòu),減小系統(tǒng)的復(fù)雜度,提升處理器性能[4]。國(guó)內(nèi)許多機(jī)構(gòu)也致力于多核研究[5-7]。單核向多核、多片發(fā)展已成為趨勢(shì)。作為多片通信的媒介,片間互聯(lián)在新的體系架構(gòu)中將發(fā)揮舉足輕重的作用。
傳統(tǒng)片間互聯(lián)結(jié)構(gòu)主要有2種:支持路由功能的樹(shù)結(jié)構(gòu);不支持路由功能的全互聯(lián)結(jié)構(gòu)。在SIMT架構(gòu)中,數(shù)據(jù)搬運(yùn)多在同一時(shí)刻進(jìn)行,采用樹(shù)結(jié)構(gòu)互聯(lián)時(shí),根結(jié)點(diǎn)兩側(cè)大量數(shù)據(jù)交換極易導(dǎo)致傳輸瓶頸[3]。雖然樹(shù)結(jié)構(gòu)協(xié)議多兼容全互聯(lián)結(jié)構(gòu),但路由功能模塊會(huì)使得在全互聯(lián)結(jié)構(gòu)中占用面積較大、傳輸效率不高。
片間互聯(lián)技術(shù)的實(shí)現(xiàn)主要有2種:并行技術(shù),如HyperTransport、Parallel RapidIO;串行技術(shù),如PCIe(PCI-Express)、SRIO(Serial RapidIO)。隨著處理器頻率迅速提升,并行傳輸時(shí)鐘漂移日益嚴(yán)重,且所需引腳數(shù)多,使后期的實(shí)現(xiàn)愈加復(fù)雜。在充分吸收SerDes(Serializer/Deserializer)的優(yōu)勢(shì)后,串行技術(shù),憑其傳輸速度快、引腳少、可擴(kuò)展性強(qiáng)等優(yōu)勢(shì),已在諸多領(lǐng)域取代并行技術(shù)[8]。
PCIe由Intel開(kāi)發(fā),支持多種功能,保持向前兼容,實(shí)際傳輸速度僅能達(dá)到理論速度的64%[9]左右,適用于實(shí)時(shí)性要求低的系統(tǒng)中[10]。RapidIO由Motorola和Mercury開(kāi)發(fā),對(duì)于小數(shù)據(jù)量的傳輸效率高[10],但對(duì)于大數(shù)據(jù)量,其開(kāi)銷較大;文獻(xiàn)[11]采用SRIO進(jìn)行高分辨率圖片傳輸,單物理通道僅為理論值的74%。HyperLink由TI研發(fā),僅應(yīng)用于該公司的DSP產(chǎn)品,且不開(kāi)源。HyperTransport由AMD開(kāi)發(fā),雖然極大地減少了引腳數(shù),但本質(zhì)上仍為并行技術(shù),在工作頻率增加時(shí),將存在較大的實(shí)現(xiàn)困難。
以上述研究為基礎(chǔ),本文提出一種基于包且具備低延遲、高效率的全互聯(lián)串行接口協(xié)議——SLink。該協(xié)議由事務(wù)層、數(shù)據(jù)鏈路層和物理層組成,選擇SerDes模塊作為物理層實(shí)現(xiàn)的基礎(chǔ),支持可配置的CRC校驗(yàn)和硬件檢測(cè)重傳機(jī)制。
SLink是針對(duì)芯片間互聯(lián)應(yīng)用領(lǐng)域,基于“包”的高帶寬、低延遲、少引腳、高可靠性點(diǎn)對(duì)點(diǎn)串行傳輸協(xié)議。協(xié)議使用端到端的數(shù)據(jù)傳輸方式,兩端均包含有發(fā)送邏輯(TX)和接收邏輯(RX)。如圖1所示,SLink物理鏈路基于低電壓差分信號(hào) (Low-Voltage Differential Signaling,LVDS)技術(shù),可由多個(gè)數(shù)據(jù)通道(Lane)組成,每個(gè)數(shù)據(jù)通道包括發(fā)送和接收2組差分信號(hào),每組差分信號(hào)使用兩根信號(hào)線傳輸。較單信號(hào)傳輸方法,此方法可有效地抑制電磁干擾,達(dá)到較高的傳輸頻率,從而降低延遲,提高傳輸帶寬[12]。
圖1 SLink物理鏈路示意圖
為提高協(xié)議的靈活性和可擴(kuò)展性,SLink采用3層架構(gòu),包括事務(wù)層(Transaction Layer)、數(shù)據(jù)鏈路層(Data Link Layer)和物理層(Physical Layer)。
SLink協(xié)議的分層架構(gòu)如圖2所示,其中,總線接口包括直接內(nèi)存訪問(wèn)(Direct Memory Access,DMA)接口、對(duì)SLink功能寄存器的訪問(wèn)接口。該接口可以依據(jù)片上系統(tǒng)(System on Chip,SoC)架構(gòu)需求,采用不同總線協(xié)議進(jìn)行設(shè)計(jì)。
圖2 SLink分層架構(gòu)示意圖
1.1.1 事務(wù)層
事務(wù)層位于SLink架構(gòu)中的最上層,負(fù)責(zé)通過(guò)DMA接口讀寫(xiě)外部存儲(chǔ)器,生成操作請(qǐng)求包,解析由數(shù)據(jù)鏈路層傳遞給上層的數(shù)據(jù)。
寫(xiě)操作請(qǐng)求和數(shù)據(jù)包由3個(gè)部分組成,即包頭控制字、數(shù)據(jù)有效負(fù)載、可選的CRC校驗(yàn)字段。如圖3所示,作為發(fā)送端時(shí),事務(wù)層依據(jù)功能寄存器的配置生成包頭控制字,通過(guò)DMA接口讀取操作數(shù)據(jù),選擇是否添加CRC字段,寫(xiě)入發(fā)送數(shù)據(jù)緩沖區(qū)。作為接收端時(shí),事務(wù)層將解析寫(xiě)操作請(qǐng)求和數(shù)據(jù)包,通過(guò)DMA接口將接收數(shù)據(jù)緩沖區(qū)收到的數(shù)據(jù)有效負(fù)載寫(xiě)往目的地址。
圖3 寫(xiě)操作請(qǐng)求和數(shù)據(jù)包
讀操作請(qǐng)求包只有包頭控制字。作為發(fā)送端時(shí),事務(wù)層依據(jù)寄存器配置生成讀操作請(qǐng)求包,寫(xiě)入發(fā)送數(shù)據(jù)緩沖區(qū)。作為接收端時(shí),事務(wù)層將解析收到的包頭控制字,判斷是否需要CRC校驗(yàn),并生成對(duì)應(yīng)的寫(xiě)操作請(qǐng)求和數(shù)據(jù)包,完成發(fā)送端對(duì)接收端的讀操作。
1.1.2 數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層位于事務(wù)層和物理層之間,其主要功能是保證事務(wù)層發(fā)送和接收數(shù)據(jù)的完整性,負(fù)責(zé)各包在事務(wù)層和物理層之間的拆分、組合,控制碼(K-code)的裝配、解析等。
數(shù)據(jù)鏈路層的控制碼(K-code)兼容部分PCIe的控制碼??刂拼a的具體定義如表1所示。IDL碼標(biāo)志鏈路當(dāng)前無(wú)操作請(qǐng)求;物理鏈路復(fù)位時(shí),由COM碼進(jìn)行鏈路兩端的數(shù)據(jù)對(duì)齊,保證鏈路可以正確接收數(shù)據(jù);PAD碼是在傳輸過(guò)程中,鏈路層發(fā)送速度慢于物理通道傳輸速度時(shí),為保證信息的正確性和完整性,鏈路層添加的無(wú)效數(shù)據(jù);由STP碼與END碼進(jìn)行信息同步,分別標(biāo)志數(shù)據(jù)包的起始與結(jié)束。
表1 控制字符的說(shuō)明
當(dāng)作為發(fā)送端時(shí),不論SLink執(zhí)行寫(xiě)操作或讀操作,數(shù)據(jù)鏈路層都將從事務(wù)層的發(fā)送數(shù)據(jù)緩沖區(qū)中讀取數(shù)據(jù),添加控制碼符號(hào),依據(jù)通道數(shù)配置拆分?jǐn)?shù)據(jù)包至物理層不同的通道。
當(dāng)作為接收端時(shí),數(shù)據(jù)鏈路層接收物理層的數(shù)據(jù),將多通道數(shù)據(jù)同步組合為數(shù)據(jù)包,根據(jù)包頭控制字的內(nèi)容,判斷是否對(duì)接收的數(shù)據(jù)包進(jìn)行CRC校驗(yàn),并根據(jù)校驗(yàn)結(jié)果產(chǎn)生對(duì)應(yīng)的CRC校驗(yàn)正確或錯(cuò)誤響應(yīng)包,反饋給發(fā)送端。
從發(fā)送端來(lái)看,若接收到CRC正確校驗(yàn)響應(yīng)包,數(shù)據(jù)鏈路層返回到空閑狀態(tài),等待下次傳輸;若接收到CRC錯(cuò)誤校驗(yàn)響應(yīng)包,數(shù)據(jù)鏈路層將從發(fā)送數(shù)據(jù)緩沖區(qū)再次讀取數(shù)據(jù),發(fā)送到物理層。
CRC校驗(yàn)響應(yīng)包也僅包含包頭控制字,相比于讀操作請(qǐng)求包,只需對(duì)應(yīng)字段不同。
1.1.3 物理層
物理層基于SerDes模塊設(shè)計(jì),處于數(shù)據(jù)鏈路層和實(shí)際物理鏈路之間,負(fù)責(zé)數(shù)據(jù)鏈路層與實(shí)際物理鏈路之間的數(shù)據(jù)傳輸。
作為發(fā)送端,物理層接收使能通道的并行數(shù)據(jù),進(jìn)行8b10b編碼,傳遞給SerDes模塊,進(jìn)行串化輸出。作為接收端,SerDes模塊完成物理鏈路接收數(shù)據(jù)的解串操作,物理層將解串后的并行數(shù)據(jù)進(jìn)行8b10b解碼,傳遞給數(shù)據(jù)鏈路層。
規(guī)定發(fā)起讀寫(xiě)操作命令的SLink為本地SLink,簡(jiǎn)稱S0;規(guī)定接收物理鏈路傳遞的讀寫(xiě)請(qǐng)求,被動(dòng)進(jìn)行相應(yīng)操作的SLink為遠(yuǎn)端SLink,簡(jiǎn)稱S1;規(guī)定S0所處系統(tǒng)為SoC0,S1所處系統(tǒng)為SoC1。
SLink寫(xiě)操作是指S0讀取SoC0某地址段中的數(shù)據(jù)寫(xiě)入SoC1某地址段。讀操作是指S0讀取SoC1某地址段的數(shù)據(jù)至SoC0某地址段。
SLink傳輸數(shù)據(jù)的流程為:先配置S0和S1的功能寄存器,針對(duì)不同操作請(qǐng)求,再分3部分進(jìn)行描述:
1)不使能CRC寫(xiě)操作
(1)S0事務(wù)層依據(jù)寄存器生成包頭信息,通過(guò)DMA接口從指定源地址讀取數(shù)據(jù),存入發(fā)送數(shù)據(jù)緩沖區(qū)。
(2)S0數(shù)據(jù)鏈路層從發(fā)送數(shù)據(jù)緩沖區(qū)中讀取數(shù)據(jù),將包頭信息和數(shù)據(jù)負(fù)載分配到各物理通道,并依據(jù)數(shù)據(jù)包格式插入控制碼。
(3)S1物理層接收包頭控制字和數(shù)據(jù),交付給數(shù)據(jù)鏈路層,數(shù)據(jù)鏈路層依據(jù)包頭分析,判斷本次傳輸沒(méi)有CRC寫(xiě)操作,將數(shù)據(jù)直接寫(xiě)入接收數(shù)據(jù)緩沖區(qū)。
(4)S1事務(wù)層從接收數(shù)據(jù)緩沖區(qū)中讀取數(shù)據(jù),通過(guò)DMA接口寫(xiě)入目的地址。
(5)不使能CRC寫(xiě)操作完成。
2)使能CRC寫(xiě)操作
(1)S0事務(wù)層依據(jù)寄存器生成包頭信息,通過(guò)DMA接口從指定源地址讀取數(shù)據(jù),存入發(fā)送數(shù)據(jù)緩沖區(qū)。
(2)S0數(shù)據(jù)鏈路層將包頭信息、數(shù)據(jù)負(fù)載以及CRC冗余碼一并分配到物理通道中,插入控制碼。
(3)S1物理層接收到包頭和數(shù)據(jù),數(shù)據(jù)鏈路層判斷出本次傳輸為使能CRC校驗(yàn)的寫(xiě)操作。
(4)S1數(shù)據(jù)鏈路層校驗(yàn)冗余碼,生成CRC校驗(yàn)響應(yīng)包,并返回給S0。若校驗(yàn)正確,則通過(guò)DMA接口寫(xiě)入目的地址,否則,等待S0重傳。
(5)S0數(shù)據(jù)鏈路層判斷響應(yīng)包控制位,若校驗(yàn)正確,S0此次寫(xiě)操作成功;若校驗(yàn)失敗,則跳至步驟(2),循環(huán)步驟(2)~步驟(5),直至成功。
(6)使能CRC寫(xiě)操作完成。
3)讀操作
(1)S0事務(wù)層依據(jù)寄存器生成讀操作的包頭信息,存入發(fā)送數(shù)據(jù)緩沖區(qū)。
(2)S0數(shù)據(jù)鏈路層將包頭信息分配到各個(gè)物理數(shù)據(jù)通道,插入控制碼。
(3)S1數(shù)據(jù)鏈路層解析包頭控制信息,交給事務(wù)層。
(4)S1事務(wù)層依據(jù)包頭控制信息進(jìn)行使能或不使能CRC寫(xiě)操作,將數(shù)據(jù)發(fā)送給S0。
(5)S0正確收到數(shù)據(jù)后,操作完成。
SLink檢錯(cuò)重傳機(jī)制建立在CRC冗余校驗(yàn)的基礎(chǔ)上,由控制寄存器使能,錯(cuò)誤檢測(cè)與重傳功能由硬件自動(dòng)完成。這種方法有別于軟件處理,不僅速度快[13],也為程序設(shè)計(jì)人員隱藏了錯(cuò)誤處理過(guò)程,使編程開(kāi)發(fā)更加方便。
為了驗(yàn)證SLink協(xié)議的可行性,參考圖2,總線接口采用AXI 3.0,該協(xié)議支持簇發(fā)(Burst)操作,有利于提高DMA模塊的傳輸效率。DMA接口與發(fā)送和接收緩沖區(qū)的數(shù)據(jù)位寬為64 Byte,滿足4通道下各通道16 Byte并行數(shù)據(jù)的輸入。物理層實(shí)現(xiàn)采用PCIe 2.0的PIPE層[14]和SerDes模塊,支持單物理通道傳輸速度為5 Gb/s或2.5 Gb/s,支持4通道傳輸模式。
本節(jié)對(duì)實(shí)現(xiàn)方案中的功能寄存器、緩沖區(qū)、CRC生成多項(xiàng)式的選擇,以及針對(duì)本設(shè)計(jì)的編程接口模型進(jìn)行詳細(xì)描述。
在本設(shè)計(jì)方案中,SLink采用4個(gè)配置寄存器和1個(gè)只讀寄存器,均為32 Byte。只讀狀態(tài)寄存器負(fù)責(zé)指示操作起止?fàn)顟B(tài)和物理鏈路發(fā)送狀態(tài)等信息。
配置寄存器包括:1)控制寄存器,負(fù)責(zé)配置物理鏈路的軟復(fù)位、傳輸速度和發(fā)送使能;2)本地地址寄存器,為寫(xiě)操作源地址,或讀操作讀回地址;3)控制字高32 Byte寄存器,為寫(xiě)操作的目的地址,或讀操作源地址;4)控制字低32 Byte寄存器,負(fù)責(zé)配置其他傳輸模式參數(shù)和數(shù)據(jù)包的信息。
SLink的包頭控制字僅為64 Byte,為控制字高32 Byte與低32 Byte的拼接,相關(guān)配置參如圖4所示。
圖4 包頭控制字格式
各字段的含義為:遠(yuǎn)端地址,若為寫(xiě)操作請(qǐng)求,則該字段為寫(xiě)目的地址,若為讀操作請(qǐng)求,則該字段為讀取源地址;有效數(shù)據(jù)長(zhǎng)度,此次讀寫(xiě)操作傳輸數(shù)據(jù)個(gè)數(shù),以64 bit為單位,有效數(shù)據(jù)范圍為1~216,支持單次最大數(shù)據(jù)傳輸量為512 KB;通道數(shù)目,本次傳輸使能的物理傳輸通道個(gè)數(shù),支持1通道,2通道和4通道3種模式。該字段只需要配置S0,接收端S1的數(shù)據(jù)鏈路層根據(jù)鏈路狀態(tài)進(jìn)行解析,完成與發(fā)送端匹配;數(shù)據(jù)包類型,表明本數(shù)據(jù)包為操作請(qǐng)求包,CRC校驗(yàn)正確響應(yīng)包,或者CRC校驗(yàn)錯(cuò)誤響應(yīng)包;傳輸命令類型,表明此次傳輸為寫(xiě)操作請(qǐng)求或讀操作請(qǐng)求;保留,目前設(shè)計(jì)中未使用的字段,以備后續(xù)的功能擴(kuò)展。
SLink支持可配置的CRC冗余校驗(yàn),參考文獻(xiàn)[15]選用CRC校驗(yàn)碼生成多項(xiàng)式的方法,采取CRC-16。該生成多項(xiàng)式有以下特性:
1)被檢測(cè)序列中出現(xiàn)1個(gè)~3個(gè)或奇數(shù)個(gè)數(shù)據(jù)位錯(cuò)誤時(shí),檢錯(cuò)率達(dá)100%。
2)突發(fā)錯(cuò)誤長(zhǎng)度小于或者等于16時(shí),檢測(cè)率達(dá)100%。
3)突發(fā)錯(cuò)誤長(zhǎng)度等于17時(shí),檢測(cè)率達(dá)99.996 9%。
4)突發(fā)錯(cuò)誤長(zhǎng)度大于或者等于18時(shí),檢測(cè)率達(dá)99.998 5%。
突發(fā)錯(cuò)誤長(zhǎng)度為N,是指在一段長(zhǎng)度為N的子序列中,最低位和最高位數(shù)據(jù)出錯(cuò),中間位數(shù)據(jù)可能出錯(cuò),也可能未出錯(cuò)。
在本文實(shí)現(xiàn)中,發(fā)送與接收數(shù)據(jù)緩沖區(qū)的大小均等于單次傳輸可支持的最大數(shù)據(jù)大小,即512 KB。添加該緩沖區(qū)帶來(lái)的優(yōu)勢(shì)有:
1)操作數(shù)據(jù)從傳輸層到數(shù)據(jù)鏈路層時(shí)鐘域的處理。
2)若CRC校驗(yàn)失敗,數(shù)據(jù)發(fā)送方可從緩沖區(qū)中重新發(fā)送所有的操作數(shù)據(jù),應(yīng)用程序不需處理。
3)操作數(shù)據(jù)接收方在總線發(fā)生擁堵時(shí),保留原值。
4)祛除當(dāng)緩沖區(qū)小于傳輸長(zhǎng)度時(shí)所需的狀態(tài)標(biāo)志,如發(fā)送緩沖區(qū)滿或溢出和接收緩沖區(qū)空等。
如算法1所示,SLink軟件編程依據(jù)控制寄存器的格式進(jìn)行配置。支持2種傳輸通道發(fā)送速度,3種傳輸通道數(shù)模式,以及可配置的CRC校驗(yàn)功能。
在算法1中,1行~10行介紹接口輸入和輸出參數(shù)含義;11行~13行判斷本次操作是否為更改物理通道傳輸速度和傳輸通道數(shù),決定是否軟復(fù)位;14行~19行配置功能寄存器,在19行進(jìn)行使能操作,開(kāi)始數(shù)據(jù)信息的傳輸;20行~22行判斷狀態(tài)寄存器操作起止標(biāo)志位,操作結(jié)束后,置接口返回值為1。
算法1SLink配置
輸入pointer,is_new_configuration,option,N,xmode,crc_en,gtps,local_addr,remote_addr
輸出op_finished
1. %pointer 指SLink在系統(tǒng)中的基地址
2. %is_new_configuration指是否會(huì)進(jìn)行速度和通道數(shù)的新配置,決定是否進(jìn)行軟復(fù)位
3. %option 指本次操作類型,0為寫(xiě),1為讀
4. %N 指數(shù)據(jù)個(gè)數(shù)
5. %xmode 指通道數(shù),0為X1,1為X2,2為X4
6. %crc_en 指是否進(jìn)行CRC校驗(yàn),1為使能
7. %gtps 指?jìng)鬏斔俣?0為2.5 Gb/s,1為5 Gb/s
8. %local_addr指寫(xiě)操作源地址或讀操作寫(xiě)回地址
9. %remote_addr指寫(xiě)操作目的地址或讀操作源地址 %
10. %op_finished 指本次操作是否正常結(jié)束
11. if(is_new_configuration) then
12. pointer[0/4]= 0
13. end if
14. SOFT_RESET = 1
15. START = 1<<4
16. pointer[4/4]=(option<<0) + (xmode<<5) + (crc_en<<4) + (N<<8)
17. pointer[8/4]= remote_addr
18. pointer[12/4]= local_addr
19. pointer[0/4]= gtps + SOFT_RESETN + START
20. while pointer[16/4]& 1 do
21. op_finished = 0
22. end while
23. op_finished = 1
為驗(yàn)證設(shè)計(jì)實(shí)現(xiàn)的正確性,評(píng)估傳輸性能,搭建基于實(shí)際片間互聯(lián)應(yīng)用場(chǎng)景的測(cè)試環(huán)境。如圖5所示,對(duì)SLink實(shí)現(xiàn)進(jìn)行軟件仿真與現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,FPGA)原型驗(yàn)證。SoC0與SoC1有獨(dú)立的尋址空間,SLink內(nèi)部DMA模塊可通過(guò)總線訪問(wèn)存儲(chǔ)器,圖中略去了總線。在測(cè)試過(guò)程中,由SoC0發(fā)起操作請(qǐng)求,SoC1端接收控制命令。
圖5 驗(yàn)證評(píng)估環(huán)境
軟件仿真具備易觀察、迭代速度快的優(yōu)點(diǎn),適合驗(yàn)證設(shè)計(jì)實(shí)現(xiàn)的正確性,并評(píng)估性能。本文采用VCS(Verilog Compiled Simulator)作為仿真工具,其版本號(hào)為2014.03。
在軟件仿真實(shí)驗(yàn)中,可以同時(shí)配置SoC0的控制器與SoC1的可配接口,給予功能寄存器輸入信號(hào)。采用此種方法,可以對(duì)實(shí)現(xiàn)的不同傳輸模式、不同數(shù)據(jù)量大小進(jìn)行完備的測(cè)試,并記錄各層信號(hào)數(shù)值變化,進(jìn)行性能評(píng)估。
3.2.1 功能驗(yàn)證
目前,SLink可支持多種傳輸模式下讀寫(xiě)操作,通道數(shù)目可選為X1/X2/X4,單通道傳輸速率可為2 Gb/s和5 Gb/s,可選的CRC校驗(yàn),組合情況共24種。
本文以SLink一次寫(xiě)操作為例說(shuō)明仿真過(guò)程,仿真波形如圖6所示。此操作傳輸模式為:單物理通道傳輸速度為5 Gb/s,采用4通道傳輸模式,并使能CRC校驗(yàn),有效數(shù)據(jù)為64 Byte。
圖6 SLink寫(xiě)操作(X4,使能CRC校驗(yàn))
SLink_S0為本地SLink的信號(hào),“d_araddr”為存儲(chǔ)器AXI總線接口的“讀地址”信號(hào),可以看到,此操作數(shù)據(jù)源起始地址為0x6000_0000;“sl_busy”為本次寫(xiě)操作“起止標(biāo)志位”,該位為0時(shí),表明SLink處于空閑狀態(tài),為1時(shí),說(shuō)明SLink正處于操作進(jìn)行狀態(tài);4個(gè)“pipe0_tx_data”的變化表明本次操作使用的傳輸通道數(shù)為4。
類似地,SLink_S1為遠(yuǎn)端SLink的信號(hào),“d_awaddr”為存儲(chǔ)器AXI總線接口的“寫(xiě)地址”信號(hào),可以看到,本次寫(xiě)操作目的起始地址為0x6000_3000;“rx_crc_ck”為“CRC校驗(yàn)判斷結(jié)果”,SLink_S1的事務(wù)層將會(huì)在CRC校驗(yàn)判定正確后,通過(guò)DMA接口寫(xiě)往存儲(chǔ)器;“pipe0_rate”為1,表明本次操作的物理通道傳輸速度為5 Gb/s。
從圖6中可以看出,此次寫(xiě)操作的配置模式:單通道傳輸速度為5 Gb/s,采用4通道傳輸,使能CRC校驗(yàn)。SLink_S0在發(fā)送數(shù)據(jù)后進(jìn)行等待;SLink_S1成功校驗(yàn)已接收數(shù)據(jù),并將數(shù)據(jù)寫(xiě)往目的地址;SLink_S0在SLink_S1端接收操作成功后,結(jié)束等待,恢復(fù)初始狀態(tài)。
3.2.2 傳輸延遲
定義“傳輸延遲”即從本地SLink的DMA接口讀取第一個(gè)數(shù)開(kāi)始,到遠(yuǎn)端SLink通過(guò)DMA接口寫(xiě)第一個(gè)數(shù)的時(shí)間。傳輸延遲越小,SLink傳輸實(shí)效越好。
仿真評(píng)估時(shí),對(duì)傳輸延遲的測(cè)量是通過(guò)實(shí)際的存儲(chǔ)器接口讀寫(xiě)時(shí)間進(jìn)行計(jì)算所得。圖6的波形中部最上方顯示此寫(xiě)操作傳輸延遲為196.67 ns。
經(jīng)測(cè)試,采用1通道和4通道,不使能與使能CRC功能時(shí)SLink的傳輸延遲分別如圖7與圖8所示,橫軸傳輸數(shù)據(jù)量的倍數(shù)以64 bit為單位。
圖7 未使能CRC傳輸延遲
圖8 使能CRC傳輸延遲
圖7為未使能CRC的傳輸延遲結(jié)果示意圖??梢钥闯?在同一種模式下,傳輸不同數(shù)據(jù)量時(shí),傳輸數(shù)據(jù)延遲基本穩(wěn)定;在不同模式下,物理鏈路傳輸速度(物理通道傳輸速度與傳輸通道數(shù)的乘積)配置越高,傳輸延遲越小。
圖8為使能CRC后的傳輸延遲結(jié)果示意圖??梢钥闯?在同一種模式下,數(shù)據(jù)量越大,傳輸延遲越大;在不同模式下,物理鏈路傳輸速度配置越高,傳輸延遲越小。
結(jié)合實(shí)驗(yàn)結(jié)果,對(duì)于傳輸延遲,有如下分析:
1)當(dāng)傳輸速度配置不同時(shí),物理鏈路傳輸速度是影響傳輸延遲的主要原因;當(dāng)物理通道發(fā)送速度相同,傳輸通道數(shù)不同時(shí),傳輸延遲差體現(xiàn)在從64比特?cái)?shù)據(jù)至物理通道的拆包和合包操作上。
2)不使能CRC時(shí),SLink對(duì)數(shù)據(jù)的處理方式是盡快發(fā)送,故其傳輸延遲與傳輸數(shù)據(jù)量大小基本無(wú)關(guān)。
3)使能CRC功能時(shí),接收端使能錯(cuò)誤重傳機(jī)制,只有接收到數(shù)據(jù),并經(jīng)過(guò)校驗(yàn)確認(rèn)無(wú)誤后,數(shù)據(jù)才會(huì)被寫(xiě)入到目的地址中,因此,在使能CRC功能后,傳輸數(shù)據(jù)量越大,SLink傳輸延遲越大。
為了對(duì)比SLink、與PCIe和SRIO的傳輸性能,實(shí)驗(yàn)中搭建了類似SLink測(cè)試環(huán)境的仿真平臺(tái)進(jìn)行PCIe、SRIO的性能評(píng)估。SRIO支持單通道物理傳輸速度為3.125 Gb/s和6.5 Gb/s,為增強(qiáng)實(shí)驗(yàn)數(shù)據(jù)的可對(duì)比性,在實(shí)驗(yàn)過(guò)程中,將物理層的參考時(shí)鐘125 MHz轉(zhuǎn)為100 MHz,有效的單通道傳輸速度3.125 Gb/s和6.5 Gb/s分別轉(zhuǎn)為2.5 Gb/s和5 Gb/s。
當(dāng)3種協(xié)議均傳輸數(shù)據(jù)量為512 Byte時(shí),傳輸延遲的比較如圖9所示。柱狀條分別為3種協(xié)議傳輸延遲測(cè)試結(jié)果;虛線為對(duì)應(yīng)坐標(biāo)軸模式下SLink傳輸延遲相對(duì)SRIO減少的百分比;實(shí)線為相對(duì)PCIe減少的百分比;點(diǎn)線為各模式下相對(duì)PCIe傳輸延遲平均減少的百分比。
圖9 未使能CRC傳輸延遲對(duì)比
從實(shí)驗(yàn)結(jié)果可知,SLink的傳輸延遲較小于另外2種協(xié)議。相對(duì)于PCIe,在物理通道傳輸速度為2.5 Gb/s,傳輸通道數(shù)為1時(shí),傳輸延遲最多可減少72%;各種工作模式下的平均傳輸延遲減少61%。
假設(shè)傳輸時(shí)間(T)為從本地SLink的DMA讀第一個(gè)數(shù)據(jù)開(kāi)始,到該數(shù)據(jù)傳輸?shù)竭h(yuǎn)端SLink的DMA寫(xiě)完N個(gè)數(shù)的時(shí)間。假定傳輸數(shù)據(jù)位寬為data_width,那么,有效帶寬的計(jì)算方法見(jiàn)式(1):
(1)
3.2.3 有效帶寬
在本文實(shí)驗(yàn)中,評(píng)估1通道和4通道,不使能與使能CRC功能時(shí)SLin k的有效傳輸帶寬。測(cè)試結(jié)果如圖10所示,“+CRC”和“-CRC”分別代表使能和不使能CRC校驗(yàn)重傳機(jī)制。
圖10 不同模式下有效帶寬
在圖10中,每種模式分別測(cè)試4種數(shù)據(jù)量,可以看出,不論是否使能CRC校驗(yàn),傳輸數(shù)據(jù)量越大,有效帶寬越大,物理鏈路發(fā)送速度配置越高,有效帶寬越大。
結(jié)合實(shí)驗(yàn)結(jié)果,對(duì)于有效帶寬,有如下分析:當(dāng)傳輸速度配置不同時(shí),物理鏈路傳輸速度是影響傳輸時(shí)間和有效帶寬的主要原因;若使能CRC,校驗(yàn)時(shí)間與傳輸數(shù)據(jù)量成正比關(guān)系,不論是否使能CRC校驗(yàn),當(dāng)鏈路速度配置相同,傳輸?shù)臄?shù)據(jù)量越大,有效帶寬越大。
當(dāng)3種協(xié)議傳輸數(shù)據(jù)量均為512 Byte時(shí),有效帶寬的比較如圖11所示。
圖11 未使能CRC傳輸帶寬對(duì)比
從實(shí)驗(yàn)結(jié)果可知,SLink的有效帶寬較大于另外2種協(xié)議,相對(duì)于PCIe,在物理通道傳輸速度為5 Gb/s,當(dāng)傳輸通道數(shù)為4時(shí),有效帶寬最多可增加78.5%;平均有效帶寬增加55.6%。
為評(píng)估在實(shí)際片間互聯(lián)應(yīng)用場(chǎng)景下,SLink設(shè)計(jì)的性能,采用兩片F(xiàn)PGA,分別下載SoC0與SoC1,模擬片間通信。
FPGA驗(yàn)證環(huán)境的搭建基于Synopsys公司的HAPS-70原型驗(yàn)證系統(tǒng)平臺(tái),采用Synopsys公司的Synplify Premier綜合器,版本號(hào)為2014.03,和Xilinx公司的Vivado實(shí)現(xiàn)工具,版本號(hào)為2014.4。
參考圖5,FPGA系統(tǒng)結(jié)構(gòu)中,SoC0選擇Microblaze作主控核。SoC1可配接口處設(shè)計(jì)狀態(tài)機(jī),接收SoC0控制器通過(guò)通用輸入輸出接口(General Purpose Input Output,GPIO)發(fā)送的控制信號(hào),進(jìn)行相關(guān)配置,具體如下:
1)SoC0控制器發(fā)送傳輸模式配置信息,SoC1在接收信號(hào)后,配置相關(guān)寄存器,同時(shí)向SoC0反饋成功接收信號(hào),表明鏈路模式配置成功。
2)初始化SoC1片上存儲(chǔ)器,此功能為保證SoC1存儲(chǔ)器初始值與將寫(xiě)值不同,確定寫(xiě)操作執(zhí)行。
3)在寫(xiě)操作完成后,SoC0控制器可讀取SoC1中目的地址接收到的首字節(jié)數(shù)據(jù),以確認(rèn)寫(xiě)操作正確。
FPGA測(cè)試環(huán)境如圖12所示。字母A與B為2個(gè)FPGA,分別下載SoC0與SoC1;數(shù)字1為PCIe高速線纜,選擇距gpio連接線接口比較近的MGB(Multi-gigabit)插槽,利于布局布線,減小時(shí)序違規(guī);數(shù)字2為HapsTrak 3 I/O連接線,傳輸GPIO信號(hào);數(shù)字3為L(zhǎng)ED燈,控制開(kāi)關(guān)為操作起止標(biāo)志位,方便驗(yàn)證過(guò)程中觀察記錄。
圖12 FPGA原型驗(yàn)證環(huán)境
發(fā)送數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)位寬為64 bit,所以,事務(wù)層發(fā)送數(shù)據(jù)的有效帶寬為:
BWTransaction_Layer=64×fTransaction_Layer
(2)
物理層理論傳輸帶寬為:
BWPhysical_Layer=Nlane×Vper_lane
(3)
如果事務(wù)層傳輸帶寬需要滿足物理層的傳輸帶寬,使得數(shù)據(jù)鏈路層不會(huì)因?yàn)槭聞?wù)層DMA接口搬運(yùn)速度慢而暫停,并考慮到物理層會(huì)對(duì)數(shù)據(jù)進(jìn)行8b10b編碼,事務(wù)層傳輸頻率應(yīng)滿足下式:
(4)
在不同物理鏈路傳輸速度配置下,事務(wù)層DMA接口工作所需最小頻率見(jiàn)表2。
表2 不同模式需要的事務(wù)層工作頻率 MHz
目前,受工具限制,在FPGA綜合實(shí)現(xiàn)后,SLink事務(wù)層工作頻率為100 MHz。滿足物理通道傳輸速度為2.5 Gb/s,傳輸通道數(shù)為2,或傳輸速度為5 Gb/s,傳輸通道數(shù)目為1。當(dāng)物理鏈路傳輸速度配置更高時(shí),物理通道傳輸速度快于事務(wù)層,將導(dǎo)致傳輸瓶頸。事務(wù)層工作頻率的優(yōu)化將在后期工作中進(jìn)行。
驗(yàn)證中,將兩端SLink狀態(tài)寄存器中起止?fàn)顟B(tài)標(biāo)志位“sl_busy”插入內(nèi)部邏輯單元(Integrated Logic Analyzer,ILA)。采用時(shí)鐘頻率為200 MHz的計(jì)數(shù)器記錄標(biāo)志位的跳變,即2個(gè)SoC端傳輸操作的開(kāi)始和結(jié)束時(shí)間,統(tǒng)計(jì)“傳輸延遲”與“傳輸時(shí)間”。
假設(shè)傳輸延遲為S0與S1兩端開(kāi)始操作的時(shí)間差,假設(shè)傳輸時(shí)間為S0端開(kāi)始操作至S1端操作結(jié)束的時(shí)間差。
在控制器頻率為100 MHz,統(tǒng)計(jì)不同模式下,傳輸1 024個(gè)數(shù)據(jù)時(shí)的延遲和傳輸時(shí)間,根據(jù)式(1),得有效帶寬計(jì)算方法為:
(5)
FPGA驗(yàn)證實(shí)際傳輸速度的測(cè)試結(jié)果如圖13所示。柱狀條為SLink的有效帶寬測(cè)試結(jié)果,線為傳輸延遲的測(cè)試結(jié)果。
圖13 未使能CRC的FPGA測(cè)試結(jié)果
由于FPGA與軟件仿真計(jì)算傳輸延遲和帶寬的時(shí)間參考不同,實(shí)驗(yàn)數(shù)據(jù)略有誤差,但FPGA實(shí)驗(yàn)數(shù)據(jù)同樣證明:
1)在未使能CRC校驗(yàn)功能時(shí),同一模式下,傳輸不同數(shù)據(jù)量時(shí),傳輸數(shù)據(jù)延遲基本穩(wěn)定;不同模式下,物理通道發(fā)送速度越快,傳輸延遲越小。
2)在未使能CRC校驗(yàn)功能時(shí),物理鏈路傳輸速度配置越高,傳輸帶寬越大。
在物理通道傳輸速度為5 Gb/s,傳輸通道數(shù)為1時(shí),SLink傳輸速度約為3.9 Gb/s,達(dá)到理論傳輸速度的78%,若不考慮8b10b編解碼的影響,傳輸效率高達(dá)97.5%。
本文實(shí)驗(yàn)中采用2套環(huán)境進(jìn)行綜合評(píng)估:1)使用Synopsys公司的DC 2013.12,評(píng)估SLink、PCIe和SRIO 3種控制器的時(shí)序和面積;2)進(jìn)行FPGA綜合,使用Syplify Premier 2014.03與Vivado 2014.4,比較SLink和PCIe實(shí)際所占資源。
DC綜合選用TSMC 40nm LP-CMOS工藝技術(shù)庫(kù)作為目標(biāo)單元庫(kù),綜合結(jié)果對(duì)比如表3所示。SLink控制器的工作頻率可達(dá)600 MHz,約為PCIe和SRIO控制器頻率的2.4倍;所占邏輯單元面積約為PCIe的1/50,SRIO的1/10。
表3 SLink和PCIe控制器DC綜合結(jié)果
使用Synplify Premier進(jìn)行SoC中有關(guān)總線協(xié)議子系統(tǒng)的綜合實(shí)現(xiàn),Vivado實(shí)現(xiàn)Microblaze相關(guān)模塊,綜合采用默認(rèn)策略(Vivado Synthesis Defaults),實(shí)現(xiàn)采用性能探索策略(Performance Explore)。結(jié)果如表4所示,數(shù)據(jù)表明:SLink控制器在FPGA中所需要LUT只有PCIe控制器的1/52,與DC綜合結(jié)果相近。
表4 SLink與PCIe控制器FPGA資源占用對(duì)比
本文研究對(duì)比業(yè)界成熟的串行接口協(xié)議,提出一種點(diǎn)對(duì)點(diǎn)串行接口協(xié)議SLink,并對(duì)其進(jìn)行設(shè)計(jì)實(shí)現(xiàn),通過(guò)軟件仿真和FPGA模擬實(shí)際片間應(yīng)用場(chǎng)景,與PCIe 2.0和SRIO進(jìn)行性能對(duì)比分析。實(shí)驗(yàn)結(jié)果表明,SLink具有良好的傳輸性能,相比PCIe 2.0,SLink的傳輸延遲平均減少61.0%,有效帶寬平均增加55.6%,控制器最高工作頻率提升1.4倍,所占面積減小約97.5%。
SLink在未來(lái)將用于中國(guó)科學(xué)院自動(dòng)化研究所的高性能計(jì)算芯片研發(fā)項(xiàng)目中,實(shí)際的性能評(píng)估和改進(jìn)優(yōu)化是后續(xù)研究重點(diǎn)。
[1] CISCO.Cisco global cloud index:forecast and methodology 2014-2019[EB/OL].[2016-04-21].http://www.cisco.com/c/en/us/solutions/collateral/service-provider/global-cloud-index-gci/Cloud_Index_White_Paper.html.
[2] SHALF J,DOSANJH S,MORRISON J.Exascale computing technology challenges[C]//Proceedings of International Conference on High Performance Computing for Computa-tional Science.Berlin,Germany:Springer-Verlag,2010:1-25.
[3] NVDIA.NVIDIA NVLink High-speed interconnect applica-tion performance brief[EB/OL].[2016-11-01].http://www.nvidia.com/object/nvlink.html.
[4] ROGERS P,FELLOW A C.Heterogeneous system architecture overview[C]//Proceedings of Hot Chips 25 Symposium.Washington D.C.,USA:IEEE Press,2013,25:1-41.
[5] 朱 英,陳 誠(chéng),許曉紅,等.一款多核處理器FPGA驗(yàn)證平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2014,51(6):1295-1303.
[6] 鄧軍勇,李 濤,蔣 林,等.MIGPU-9多核交互式圖形處理器的設(shè)計(jì)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2014,26(9):1468-1478.
[7] 郭 陽(yáng),李思昆,屈婉霞.片上多核處理器驗(yàn)證:挑戰(zhàn)、現(xiàn)狀與展望[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2012,24(12):1521-1532.
[8] 馬春江,牛文生,孫靖國(guó).幾種串行總線互連技術(shù)分析[J].航空計(jì)算技術(shù),2007,37(5):127-130.
[9] MARCUS G,GAO W,KUGEL A,et al.The MPRACE framework:an open source stack for communication with custom FPGA-based accelerators[C]//Proceedings of the 4th Southern Conference on Programmable Logic.Washington D.C.,USA:IEEE Press,2011:155-160.
[10] 梁小虎,王 樂(lè),張亞棣.高速串行總線RapidIO與PCI Express協(xié)議分析比較[J].航空計(jì)算技術(shù),2010,40(3):127-130.
[11] ZHANG F,WU Q,REN G.A High-speed serial transport platform based on SRIO for high-resolution image[C]//Proceedings of the 3rd International Congress on Image and Signal Processing.Washington D.C.,USA:IEEE Press,2010:2441-2444.
[12] MASSOUD Y,KAWA J,MACMILLEN D,et al.Modeling and analysis of differential signaling for minimizing inductive cross-talk[C]//Proceedings of the 38th annual Design Automation Conference.New York,USA:ACM Press,2001:804-809.
[13] MING-DER SHIEH M H W A S,CHEN C,LO H F.A systematic approach for parallel CRC computations[J].Journal of information science and Engineering,2001,17(3):445-461.
[14] DAVE D.PCI express PIPE overview[EB/OL].[2016-11-21].http://www.applistar.com/wp-content/uploads/apps/pip e2_00.pdf.
[15] KOOPMAN P,CHAKRAVARTY T.Cyclic redundancy code (CRC) polynomial selection for embedded networks[C]//Proceedings of 2004 International Conference on Dependable Systems and Networks.Washington D.C.,USA:IEEE Press,2004:145-154.