《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > SPI-4.2總線(xiàn)應(yīng)用和調(diào)試經(jīng)驗(yàn)談
SPI-4.2總線(xiàn)應(yīng)用和調(diào)試經(jīng)驗(yàn)談
單片機(jī)與嵌入式系統(tǒng)
王 江 上海貝爾股份有限公司
摘要: SPI-4.2總線(xiàn)(System Packet Interface,,系統(tǒng)間數(shù)據(jù)包接口)是一種速度高達(dá)10 Gb/s的芯片間互連總線(xiàn),主要應(yīng)用于ATM信元傳輸,、POS(Packet Over SONET/SDH,,基于SONET/SDH的包傳輸)和10 Gb/s以太網(wǎng)等高端場(chǎng)合。
Abstract:
Key words :

引言
    SPI-4.2總線(xiàn)(System Packet Interface,,系統(tǒng)間數(shù)據(jù)包接口)是一種速度高達(dá)10 Gb/s的芯片間互連總線(xiàn),,主要應(yīng)用于ATM信元傳輸、POS(Packet Over SONET/SDH,,基于SONET/SDH的包傳輸)和10 Gb/s以太網(wǎng)等高端場(chǎng)合,。特別在通信領(lǐng)域,很多高端處理器和網(wǎng)絡(luò)處理器,,如Intel公司的IXP2800,、Cavium公司的多內(nèi)核處理器CN58xx系列、NetLogic公司的XLR732,、Broadcom的BCM1480,,幾乎都集成了SPI-4.2接口,以提高芯片的吞吐能力,,適應(yīng)通信產(chǎn)業(yè)朝著LTE(長(zhǎng)期演進(jìn))發(fā)展的需求,。還有眾多的物理層芯片,,例如Cortina公司的CS1331,可以將SPI-4.2總線(xiàn)轉(zhuǎn)換成8個(gè)千兆以太網(wǎng)接口,。SPI-4.2總線(xiàn)之所以被眾多的高端芯片所采用,,與其高速、靈活,、可靠的特性是密不可分的,。

1 SPI-4.2總線(xiàn)基本原理
    SPI-4.2總線(xiàn)是一種芯片間的互連總線(xiàn),連接芯片的鏈路層和物理層模塊,。其工作時(shí)鐘是源同步雙邊沿觸發(fā)時(shí)鐘,,至少為311 MHz。圖1是使用SPI-4.2總線(xiàn)連接兩個(gè)芯片的示意圖,??梢?jiàn),SPI-4.2總線(xiàn)的信號(hào)在發(fā)送和接收方向完全對(duì)稱(chēng)而又互相獨(dú)立,,數(shù)據(jù)鏈路和狀態(tài)鏈路分開(kāi),,并且其時(shí)鐘也是完全分開(kāi)的。因此,,該總線(xiàn)不僅適合于雙向通道,,而且適合于只收不發(fā)或者只發(fā)不收的單向通道。

a.jpg


    SPI-4.2總線(xiàn)具有以下特點(diǎn):
    ①點(diǎn)對(duì)點(diǎn)互連,,收發(fā)數(shù)據(jù)鏈路寬度為16位,。
    ②發(fā)送和接收模塊的信號(hào)各分為兩組,即數(shù)據(jù)信號(hào)和狀態(tài)信號(hào),,分別對(duì)應(yīng)數(shù)據(jù)鏈路和狀態(tài)鏈路,,每個(gè)鏈路具有自己的時(shí)鐘。數(shù)據(jù)鏈路發(fā)送和接收數(shù)據(jù),,狀態(tài)鏈路傳輸相應(yīng)鏈路的狀態(tài)信息,。
    ③數(shù)據(jù)鏈路包含DCLK、DAT[15:0]和CTL三種LVDS(低壓差分傳輸)信號(hào),。前面加“T”表示信號(hào)屬于發(fā)送模塊,,加“R”表示信號(hào)屬于接收模塊。以發(fā)送模塊為例,,TDCLK是雙邊沿觸發(fā)時(shí)鐘,,TCTL是控制信號(hào),TDAT[15:0]承載了數(shù)據(jù)和控制信息,。當(dāng)TCTL為高電平時(shí),,TDAT[15:0]傳送的是數(shù)據(jù)包;當(dāng)TCTL為低電平時(shí),,TDAT[15:0]傳送的是控制包,。數(shù)據(jù)采用DIP~4校驗(yàn)交織碼。
    ④狀態(tài)鏈路包括SCLK時(shí)鐘信號(hào)和STAT[1:0]狀態(tài)信號(hào),,信號(hào)類(lèi)型是LVTTL或LVDS,。SPI~4.2發(fā)送時(shí)序如圖2所示。如果選擇LVTTL,,則SC-LK時(shí)鐘頻率是數(shù)據(jù)鏈路時(shí)鐘速率的1/4,。如果選擇LVDS,則SCLK時(shí)鐘頻率和數(shù)據(jù)鏈路時(shí)鐘頻率相同,。下文中均以L(fǎng)VDS為例進(jìn)行闡述,。狀態(tài)鏈路主要用于流控。

b.jpg


    ⑤接收和發(fā)送模塊都含有一個(gè)FIFO隊(duì)列,,用于緩存數(shù)據(jù),,隊(duì)列長(zhǎng)度由芯片設(shè)計(jì)而定。隊(duì)列的狀態(tài)信息通過(guò)狀態(tài)鏈路周期性地發(fā)送,,接收模塊和發(fā)送模塊的狀態(tài)信息是獨(dú)立的,。狀態(tài)信息附加了DIP-2交織校驗(yàn)碼,以提高傳輸可靠性,。


    除了數(shù)據(jù)包中最后一段不滿(mǎn)16字節(jié)的數(shù)據(jù)(EOP)之外,,SPI-4.2總線(xiàn)的數(shù)據(jù)實(shí)行突發(fā)傳輸,以16字節(jié)為單位(稱(chēng)為一個(gè)數(shù)據(jù)塊),,每次傳輸多個(gè)數(shù)據(jù)塊,。因?yàn)閿?shù)據(jù)寬度是16位,所以一次突發(fā)傳輸至少需要4個(gè)時(shí)鐘周期,。數(shù)據(jù)的高地址位字節(jié)先發(fā)送(MSB),,低地址位字節(jié)后發(fā)送,數(shù)據(jù)塊傳輸過(guò)程中不會(huì)被中斷,。每次突發(fā)傳輸?shù)拈g隔期間傳送控制包或者訓(xùn)練序列,。圖2中,TDAT表示數(shù)據(jù)塊,,TCTRL表示控制塊,。控制包長(zhǎng)度為16位,,包含了前次傳輸和下次傳輸?shù)臓顟B(tài)信息:包開(kāi)始標(biāo)志,、包結(jié)束標(biāo)志、邏輯端口地址和DIP-4交織校驗(yàn)碼等,。數(shù)據(jù)鏈路遵循有限狀態(tài)機(jī)進(jìn)行工作,,狀態(tài)包括5種:控制包傳輸、數(shù)據(jù)包傳輸,、空閑包傳輸,、訓(xùn)練序列傳輸以及訓(xùn)練序列控制,。
    因?yàn)闋顟B(tài)鏈路的寬度是2位,所以每次突發(fā)傳輸至少傳輸16位數(shù)據(jù)(4個(gè)時(shí)鐘周期),。反映FIFO隊(duì)列的狀態(tài)信息有3種:飽(Satisfied),、餓(Hungry)、極餓(Starving),,分別對(duì)應(yīng)二進(jìn)制數(shù)字10,、01和00。11表示鏈路處于失步狀態(tài),,正在同步過(guò)程中,。當(dāng)狀態(tài)是“飽”時(shí),說(shuō)明隊(duì)列幾乎滿(mǎn)了,,只接收當(dāng)前正在傳送的數(shù)據(jù)包,,其他數(shù)據(jù)包只有等狀態(tài)更新后才能接收。當(dāng)狀態(tài)是“餓”時(shí),,可以接收最大MaxBurst2個(gè)數(shù)據(jù)塊,。當(dāng)狀態(tài)是“極餓”時(shí),說(shuō)明隊(duì)列幾乎空了,,可以接收最大MaxBurst1個(gè)數(shù)據(jù)塊,。MaxBurst1和MaxBurst2是SPI-4.2總線(xiàn)初始化時(shí)設(shè)定的參數(shù),MaxBurst1不得小于MaxBurst2,。

2 SPI-4.2總線(xiàn)的初始化和同步
    SPI-4.2總線(xiàn)初始化時(shí)必須設(shè)定一些基本參數(shù),,如表1所列。

c.jpg


    SPI-4.2總線(xiàn)協(xié)議定義了一個(gè)叫“日歷”的數(shù)據(jù)結(jié)構(gòu)CALENDAR[i](i=1,,…,,CALENDAR_LEN)。CALENDAR_LEN(日歷長(zhǎng)度)參數(shù)規(guī)定了邏輯端口(或稱(chēng)為虛擬通道)的數(shù)目,,該數(shù)值不能小于實(shí)際的邏輯端口數(shù)目,。例如,如果SPI-4.2總線(xiàn)用于10 Gb/s以太網(wǎng)口,,那么日歷長(zhǎng)度是1(即CALENDAR_LEN=1),;如果SPI-4.2總線(xiàn)用于10個(gè)1 Gb/s以太網(wǎng)口,那么日歷長(zhǎng)度是10(CALENDAR_LEN=10),,CALENDAR[i]=1,,2,…,,10,,代表了10個(gè)以太網(wǎng)端口。CALENDAR[i]中承載的數(shù)據(jù)被周而復(fù)始地依次傳輸,,重復(fù)次數(shù)是CALENDAR_M次,。圖3為日歷長(zhǎng)度和重復(fù)次數(shù)都是4的數(shù)據(jù)傳輸示意圖,。SPI-4.2總線(xiàn)被初始化時(shí),必須確保接口兩端的CALENDAR_LEN和CALENDAR_M分別相等,。從這個(gè)角度看,,SPI-4.2是一種時(shí)分復(fù)用的總線(xiàn):總帶寬是固定的,“日歷”數(shù)據(jù)結(jié)構(gòu)決定了帶寬和邏輯端口的分配,。
    當(dāng)SPI-4.2正常工作時(shí),數(shù)據(jù)和狀態(tài)鏈路會(huì)不定期地發(fā)送訓(xùn)練序列,。在數(shù)據(jù)鏈路,,訓(xùn)練序列至少應(yīng)該在DATA_MAX_T個(gè)時(shí)鐘周期內(nèi)發(fā)送一次。在狀態(tài)鏈路,,訓(xùn)練序列至少應(yīng)該在FIFO_MAX_T個(gè)時(shí)鐘周期內(nèi)發(fā)送一次,。設(shè)置DATA_MAX_T或FIFO_MAX_T為0將取消各自鏈路的訓(xùn)練序列,一般情況下不推薦這種設(shè)置,。
    圖4以XLR732為參照描述了SPI-4.2總線(xiàn)的收發(fā)同步過(guò)程,。啟動(dòng)之后,在發(fā)送方向,,發(fā)送模塊(TX)通過(guò)數(shù)據(jù)鏈路發(fā)送連續(xù)的訓(xùn)練序列,,對(duì)端的接收模塊成功收到訓(xùn)練序列后,會(huì)設(shè)置本端的接收同步標(biāo)志,;然后通過(guò)狀態(tài)鏈路發(fā)送訓(xùn)練序列給對(duì)端,,一旦發(fā)送模塊成功接收到訓(xùn)練序列后,就設(shè)置本端的發(fā)送同步標(biāo)志,。

d.jpg

 


    在接收方,,接收模塊(RX)在數(shù)據(jù)鏈路成功接收到對(duì)端發(fā)送的訓(xùn)練序列后,會(huì)設(shè)置本端的接收同步標(biāo)志,;然后通過(guò)狀態(tài)鏈路發(fā)送訓(xùn)練序列,,一旦發(fā)送模塊成功接收到訓(xùn)練序列后,就設(shè)置本端的發(fā)送同步標(biāo)志,。
    在同步過(guò)程中,,訓(xùn)練序列由指定的連續(xù)的DIP-4碼字組成。發(fā)送模塊必須連續(xù)發(fā)送訓(xùn)練序列,,直到本端的狀態(tài)鏈路收到有效信息,。同時(shí),接收模塊忽視所有接收到的數(shù)據(jù),,直到觀察到訓(xùn)練序列,,獲得數(shù)據(jù)同步。一旦數(shù)據(jù)鏈路同步之后,,F(xiàn)IFO隊(duì)列狀態(tài)信息就開(kāi)始傳送,。如果發(fā)送
方接收到有效的狀態(tài)信息,,它就可以開(kāi)始進(jìn)行數(shù)據(jù)突發(fā)傳輸。
    如果在工作過(guò)程中,,由于某些原因(例如一端器件掉電或重啟)導(dǎo)致總線(xiàn)失步,,那么為了再次獲得同步,雙方需要按照上述過(guò)程發(fā)送連續(xù)的訓(xùn)練序列,,直到建立同步為止,。

3 SPI-4.2總線(xiàn)接口的調(diào)試
    SPI-4.2總線(xiàn)接口的調(diào)試包括兩個(gè)重要步驟:鏈路的同步和數(shù)據(jù)的正常收發(fā)。
    在調(diào)試鏈路同步時(shí),,首先必須查看總線(xiàn)兩端的初始化參數(shù)配置,。因?yàn)镾PI-4.2總線(xiàn)協(xié)議是一個(gè)對(duì)等端數(shù)據(jù)傳輸協(xié)議,所以大部分參數(shù)需要雙方的匹配和協(xié)商,,特別是接收方和發(fā)送方的CALENDAR_LEN和CALENDAR_M參數(shù),。
    如何查看同步呢?芯片通常會(huì)提供一個(gè)狀態(tài)寄存器來(lái)反映總線(xiàn)的同步。“接收同步標(biāo)志”只能說(shuō)明在數(shù)據(jù)鏈路上成功接收到對(duì)端的訓(xùn)練序列,,但不能保證接收的狀態(tài)鏈路是正常的,,如果需要確認(rèn)可查看對(duì)端的“發(fā)送同步標(biāo)志”。在收發(fā)雙向通道應(yīng)用中,,只有兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”都置位了,,總線(xiàn)才算同步。此時(shí),,可以確認(rèn)總線(xiàn)兩端的物理連接是正確的,,握手成功。
    如果不能同步,,就必須檢查兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”,,判斷是哪一端出了問(wèn)題。檢查是否有DIP4和DIP2錯(cuò)誤,,如果有此類(lèi)錯(cuò)誤,,說(shuō)明鏈路上信號(hào)質(zhì)量可能不佳,可以用示波器測(cè)量信號(hào)波形,。如果信號(hào)質(zhì)量確實(shí)不好,,可以通過(guò)提高信號(hào)驅(qū)動(dòng)能力或者調(diào)整硬件匹配阻抗來(lái)優(yōu)化。如果兩端的接收和發(fā)送都沒(méi)有同步,,就必須測(cè)量芯片的電壓,、工作頻率、重啟等信號(hào),。
    如果兩端的“接收同步標(biāo)志”和“發(fā)送同步標(biāo)志”都已經(jīng)置位,,說(shuō)明雙方的接收和發(fā)送都同步,可以正常收發(fā)數(shù)據(jù)了。在大流量數(shù)據(jù)傳輸過(guò)程中,,最相關(guān)的是FIFO隊(duì)列的參數(shù)配置,,配置不當(dāng)會(huì)導(dǎo)致錯(cuò)包或丟包。以NetLogic公司的XLR732網(wǎng)絡(luò)處理器為例,,SPI-4.2總線(xiàn)的發(fā)送模塊的所有邏輯端口共享一個(gè)FIFO隊(duì)列,,寬度為16字節(jié),長(zhǎng)度為128,;接收模塊的所有邏輯端口共享一個(gè)FIFO隊(duì)列,,寬度為16字節(jié),長(zhǎng)度為512,。每個(gè)邏輯端口所占用的隊(duì)列地址和大小都可以通過(guò)寄存器配置,。
    假如某個(gè)端口接收端隊(duì)列的長(zhǎng)度是48,MaxBurst1是12,,MaxBurst2是8。那么當(dāng)該模塊接收數(shù)據(jù)時(shí),,如果由于某些原因(例如軟件來(lái)不及處理),,接收隊(duì)列只剩下12個(gè)空位,也就是接收隊(duì)列已經(jīng)有48-12=36個(gè)空位被占用時(shí),,它將通過(guò)狀態(tài)鏈路向?qū)Χ税l(fā)送“餓”的狀態(tài)信號(hào)(反壓信號(hào)),。對(duì)端收到該信號(hào)后實(shí)施流控策略,根據(jù)本端發(fā)送端的MaxBurst1設(shè)置值發(fā)送數(shù)據(jù),,該值表示接收到“餓”狀態(tài)信號(hào)后最多還可以發(fā)送的數(shù)據(jù)塊數(shù)目,。所以接收端的MaxBurst1的值一定要大于對(duì)端發(fā)送端的MaxBurst1,并且要留出一定的余量,,因?yàn)閿?shù)據(jù)在鏈路上的傳輸也是需要時(shí)間的,。同理,接收端的MaxBurst2要大于對(duì)端發(fā)送端的MaxBurst2,。值得注意的是,,流控是基于邏輯端口的,而不是整條鏈路,。
    為保證不發(fā)生接收端FIFO隊(duì)列溢出等問(wèn)題,,盡量將接收端的MaxBurst1和MaxBurst2設(shè)置大一些,只要小于FIFO入口總數(shù)就可以,,而發(fā)送端MaxBurst1和MaxBurst2的設(shè)置不要超過(guò)本端接收能力,。
    如果出現(xiàn)EOP(結(jié)束包)和SOP(起始包)錯(cuò)誤或缺失,或者其他錯(cuò)包(例如包長(zhǎng)變短,、幀校驗(yàn)錯(cuò)誤等),,但沒(méi)有DIP4錯(cuò)誤,該怎么辦?這類(lèi)問(wèn)題一般出現(xiàn)在FIFO隊(duì)列設(shè)置上,尤其是接收端的FIFO隊(duì)列可能溢出,,從而丟失了某些數(shù)據(jù)塊,,可以通過(guò)以下3種方法來(lái)檢測(cè)和解決:
    ①通過(guò)查看接收端FIFO溢出標(biāo)志來(lái)判斷FIFO隊(duì)列是否溢出;
    ②通過(guò)調(diào)整接收端的MaxBurst1和MaxBurst2來(lái)防止FIFO隊(duì)列溢出,;
    ③如果方法②的調(diào)整足夠大,,還有此問(wèn)題,可以查看對(duì)端是否收到反壓信號(hào),,以及對(duì)端的狀態(tài)等,。
    為了方便,通常將發(fā)送端的MaxBurst1和MaxBurst2設(shè)置為相同數(shù)值,,將接收端的MaxBurst1和MaxBurst2也設(shè)置成相同數(shù)值,。

結(jié)語(yǔ)
    隨著處理器的速度越來(lái)越快,處理器集成的內(nèi)核越來(lái)越多,,處理器與外圍器件之間,,處理器之間,以及外圍器件之間的連接速度逐漸成為制約平臺(tái)性能的瓶頸,。許多芯片同時(shí)集成了多個(gè)總線(xiàn)接口,,例如XLR732同時(shí)擁有SPI-4.2、HT,、以太網(wǎng)3種總線(xiàn)接口,。SPI-4.2總線(xiàn)在與其
他總線(xiàn)的競(jìng)爭(zhēng)中體現(xiàn)出了強(qiáng)大的生命力,希望本文所介紹的經(jīng)驗(yàn)對(duì)正在應(yīng)用或計(jì)劃應(yīng)用SPI-4.2總線(xiàn)的同行有所幫助,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。