串行總線技術(shù)(一)-串行總線結(jié)構(gòu)(以PCIe為例)串行總線的出現(xiàn)在早期的計算機(jī)系統(tǒng)中,多數(shù)外圍設(shè)備使用并行總線結(jié)構(gòu)。這些總線包括PCI和PATA(并行ATA)。當(dāng)通信速率較低時,并行總線結(jié)構(gòu)可以設(shè)計得非常簡單和有效,可以連接大量外圍設(shè)備。通過使用中央仲裁機(jī)制,可以方便地實現(xiàn)總線設(shè)備間的通信:然而,當(dāng)速率和帶寬不斷增加時,并行結(jié)構(gòu)的潛力不斷被發(fā)掘并不再能夠滿足系統(tǒng)設(shè)計要求。
并行總線結(jié)構(gòu)的帶寬可以通過增加總線寬度或者提高總線的工作頻率來實現(xiàn),但這種增加帶寬的方式會逐漸變得困難。并行總線會占用很多引腳,而對現(xiàn)代數(shù)字芯片來說,單一芯片中集成了大量的功能,引腳本身就是一種非常緊張的資源,這為繼續(xù)增加總線寬度帶來了困難。
另外,總線頻率已經(jīng)進(jìn)行了多次增加(如PCI--》PCIX),繼續(xù)對大量信號線提高工作頻率也變得更加困難。除此之外,并行結(jié)構(gòu)還有一些固有不足,如沒有包的概念,沒有錯誤檢驗機(jī)制等。在并行總線中,傳輸?shù)氖菙?shù)據(jù)突發(fā)片段,不是完整的數(shù)據(jù)包,也沒有與所傳輸數(shù)裾相關(guān)的CRC校驗結(jié)果以進(jìn)行差錯控制。并行總線的不足促進(jìn)串行總線結(jié)構(gòu)的發(fā)展,這不僅克服了原有的缺陷,還帶來了其他好處。如圖所示為并行總線與串行總線示例。
現(xiàn)在的數(shù)字系統(tǒng)中有很多種串行總線。PCI Express(代替了并行PCI總線)、SATA(代替PATA)以及USB等就是一些常用的高速總線。這些總線的速率也從MHz達(dá)到了GHz。
串行總線的優(yōu)缺點優(yōu)點
占用引腳數(shù)量少
串行總線使用一對信號線發(fā)送數(shù)據(jù)(TX+ TX-),使用一對信號線接收數(shù)據(jù)(RX+ RX-)。而PCI和PCIX等并行總線會占用大量引腳。
差分信號
TX和RX信號線上采用的是差分信號傳輸方式,這種傳輸方式具有很高的抗噪聲能力。
強(qiáng)錯誤檢測能力
串行協(xié)議使用基干包的數(shù)據(jù)傳輸方式,對數(shù)據(jù)包采用了CRC校驗。相比于PCI中采用的奇偶校驗,CRC校驗具有很強(qiáng)的檢錯能力。
糾錯與恢復(fù)
因為采用基于包的傳輸方式并且?guī)в蠧RC校驗,接收設(shè)備能夠檢測出接收數(shù)據(jù)包中的錯誤并通知發(fā)送端出現(xiàn)了傳輸錯誤,發(fā)送端可以重新發(fā)送出現(xiàn)錯誤的數(shù)據(jù)包。
全雙工數(shù)據(jù)和控制流
數(shù)據(jù)包可以在TX信號線上傳輸,同時可以在RX信號線上接收控制信息。SATA使用類似HOLD的流控原語來實時阻止數(shù)據(jù)發(fā)送以避免數(shù)據(jù)溢出。
分割式數(shù)據(jù)傳輸
在分割式數(shù)據(jù)傳輸中,request和completion可以不出現(xiàn)在同一個數(shù)據(jù)傳輸操作中。這不是串行總線所特有的必要特征。所有的串行總線都使用包和分割式數(shù)據(jù)傳輸協(xié)議進(jìn)行數(shù)據(jù)傳輸。多數(shù)早期的并行總線(PCI、AHB)不支持分割式數(shù)據(jù)傳輸。最新的并行總線,如AXI開始支持這一協(xié)議。
缺點
串行總線也存在一些不利之處。
只支持點到點連接
通過串行總線只能連接兩個設(shè)備,而對于并行總線,可以在單一總線上連接多個設(shè)備,并目。很容易增減總線上的設(shè)備。對于串行總線,我們需要使用交換機(jī)和多個總線設(shè)備連接。
更大的延遲
由于串行及分層結(jié)構(gòu)特點,串行結(jié)構(gòu)的總線延遲更大一些。
串行總線結(jié)構(gòu)串行總線結(jié)構(gòu)只允許點到點連接,一條串行總線只能連接兩個設(shè)備,而并行總線可以同吋連接多個設(shè)備。在串行總線結(jié)構(gòu)中,總線設(shè)備中需要包括兩個基本電路部件:MAC控制器(通常簡稱為控制器)和PHY(主要實現(xiàn)模擬收發(fā)功能)。MAC具有分層結(jié)構(gòu),通常包括三個層次。PHY包括兩個部分:PCS和PMA。PCS(Physical Coding Sublayer,物理編碼子層)主要實現(xiàn)編解碼等數(shù)字邏輯功能。PMA主要實現(xiàn)時鐘恢復(fù)、均衡和信號電平檢測等模擬功能。
下面我們將以PCIe和SATA為例,對串行總線結(jié)構(gòu)加以分析。
MAC控制器包括三個層次:PHY邏輯層 、 數(shù)據(jù)鏈路層和事務(wù)層。每一層都有自己特定的功能。
PHY邏輯層
兩個相互聯(lián)接設(shè)備的PHY邏輯層之間使用PHY層包進(jìn)行通信,稱為有序訓(xùn)練集合,如圖所示。PHY層包被用于建立鏈路和確定交互的操作速度,在訓(xùn)練階段結(jié)束時,雙方進(jìn)入連接階段,此時它們已經(jīng)做好了傳輸數(shù)據(jù)鏈路層和事務(wù)層包的準(zhǔn)備。PHY層包產(chǎn)生于PHY層,終結(jié)于另一側(cè)的PHY邏輯層,不會上交給其他層次。
數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層使用短的、固定長度(2個dword/8字節(jié))的包在兩個設(shè)備間交互鏈路信息,如圖所示。這些包也被稱為DLLP(Data Link Layer Packet,數(shù)據(jù)鏈路層包)。DLLP被用于交換信用信息、ACK、NAK和功率管理協(xié)議。DLLP在本層產(chǎn)生,終止于對端的同一層,不會進(jìn)一步向上提交。
事務(wù)層
本層在兩個設(shè)備間進(jìn)行實際的數(shù)據(jù)交互,如下圖所示。這些包被稱為TLP(Transaction Layer Packet,事務(wù)層包),TLP為變長包。TLP包括頭域、數(shù)據(jù)凈荷和CRC校驗。一個TLP由start-of-packet符號開始,以END符號結(jié)束。
串行總線時鐘在PCIe中,平臺提供100MHz參考時鐘,通過PCIe插槽提供給總線設(shè)備。PCIe端點設(shè)備從PCIe連接器處獲取該參考時鐘并將其交給PHY PMA層。PMA內(nèi)部有一個PLL,它根據(jù)輸入的100MHz時鐘和輸入的RX數(shù)據(jù)流生成250MHz的時鐘PCLK。PHY將PCLK提供給MAC發(fā)送數(shù)據(jù)(從MAC到PHY)和接收數(shù)據(jù)(從PHY到MAC)都同步于PCLK。對于PCIe,MAC的接收和發(fā)送電路工作在同一個時鐘域。對于其他串行總線結(jié)構(gòu),如SATA收發(fā)電路時鐘可能不同。在SATA中,發(fā)送和接收時鐘是不同的,屬于異步時鐘。
發(fā)送路徑的微結(jié)構(gòu)MAC和PHY PCS之間的接口是標(biāo)準(zhǔn)的,雖然這不一定必要,但標(biāo)準(zhǔn)化有利于IP核的開發(fā),可提高不同芯片廠商IP核之間的互操作性。對于PCIe來說,該接口被稱為PIPE接口。
MAC提供的發(fā)送數(shù)據(jù)的位寬為8比特或16比特。PCLK的頻率與數(shù)據(jù)總線的位寬有直接關(guān)系,數(shù)據(jù)位寬為8比特時,PCLK為250MHz數(shù)據(jù)位寬為16比特時,PCLK為125MHz,如圖所示。
這兩個頻率是PCIe Genl所使用的,在Gen2中,二者都進(jìn)行了翻倍。位寬變換電路模塊可以將16比特的數(shù)據(jù)位寬轉(zhuǎn)換成8比特的位寬,接著將其送入8b/10b編碼器。編碼器將每個8比特的數(shù)據(jù)轉(zhuǎn)換成為10比特的編碼值并將其傳遞到PHY的PMA層。PMA層使用一個高速時鐘(Genl時為2.5GHz,Gen2時為5GHz)進(jìn)一步將10比特的編碼結(jié)果轉(zhuǎn)換為單比特串行數(shù)據(jù)并通過TX信號線發(fā)出。
接收路徑的微結(jié)構(gòu)PMA接收電路實現(xiàn)比特提取和串并變換功能,將單比特的串行接收數(shù)據(jù)變換成為10比特的并行數(shù)據(jù)。
10比特的數(shù)據(jù)流從PMA接收電路進(jìn)入PCS接收電路。此時的10比特數(shù)據(jù)流并非是字符對準(zhǔn)的。在PCS內(nèi)部,10比特數(shù)據(jù)流先后進(jìn)入字符對準(zhǔn)電路、彈性緩沖區(qū)、10b/8b解碼電路并最終進(jìn)入可選的8b/16b轉(zhuǎn)換電路。
字符對準(zhǔn)
PCIe接收的數(shù)據(jù)是以10比特的字符為組成單位的。PMA接收電路將接收數(shù)據(jù)組成10比特字符時沒有按照字符邊界進(jìn)行。字符對準(zhǔn)邏輯電路查找COMMA字符并以它為基礎(chǔ)進(jìn)行字符邊界對準(zhǔn)。對準(zhǔn)后的字符流被送入彈性緩沖區(qū),如圖所示。
彈性緩沖區(qū)
PCIe鏈路兩端所使用時鐘的標(biāo)稱值均為250MHz。它們可以使用平臺提供的同一個時鐘,或者選擇它們自帶的時鐘源來生成250MHz的工作時鐘。當(dāng)使用相互獨立的時鐘時,它們之間會有微小的偏差(偏差可能非常微小,但不會為0),此時,經(jīng)過一段時間之后,會造成數(shù)據(jù)的上溢或下溢??偩€一端的時鐘頻率可能比另一端略微高一些,頻率低的一端會出現(xiàn)數(shù)據(jù)緩沖區(qū)上溢,頻率高的一端會出現(xiàn)數(shù)據(jù)緩沖區(qū)下溢。串行總線中使用彈性緩沖區(qū)來處理時鐘頻率上的微小差別。我們將對PCIe和SATA中的彈性緩沖區(qū)加以介紹。
位寬為10比特的接收符號流被寫入一個FIFO。按照PCIe協(xié)議,在發(fā)送數(shù)據(jù)時,會按照一定的間隔定期發(fā)送填充包(稱為SKIP集合)。這些填充包可以在不影響數(shù)據(jù)凈荷、編碼/解碼、擾碼/解擾碼的情況下快速插入和去除。寫入邏輯持續(xù)將10比特的字符寫入FIFO,讀岀邏輯持續(xù)將FIFO中的字符讀出。如果寫入速度比讀出速度快,F(xiàn)IFO中的數(shù)據(jù)深度將逐漸增加。
當(dāng)FIFO中的數(shù)據(jù)深度達(dá)到了預(yù)先設(shè)定的上限時,寫入邏輯會丟棄1個或多個SKIP字符。類似地,當(dāng)寫入速度低于讀出速度時,F(xiàn)IFO中的數(shù)據(jù)深度會逐漸降低,當(dāng)深度降至預(yù)先設(shè)定的下限時,讀出邏輯不再從FIFO中讀出數(shù)據(jù),它會暫停讀出數(shù)據(jù),同時向數(shù)據(jù)通路中插入一個SKIP符號。這里的FIFO就是彈性緩沖區(qū),其內(nèi)部數(shù)據(jù)深度是變化的,可以用于調(diào)整讀寫時鐘頻率的微小偏差,如圖所示。
需要說明的是,這種工作機(jī)制可以用于處理微小的讀寫頻率偏差,不適合處理較大的頻率偏差(較大的時鐘偏差需要深度較大的彈性緩沖區(qū)并且會引入較大的延遲)。規(guī)范中對頻率偏差會提出限制,例如,PCIe中的頻率偏差應(yīng)小于300PPM。當(dāng)時鐘偏差被限定在一定PPM之內(nèi)時,SKIP出現(xiàn)的間隔就可以計算得到。
SATA使用了類似的機(jī)制,它會在每256個雙字之間插入兩個ALIGH原語。ALIGN原語根據(jù)兩邊的頻率差可以快速地被丟棄或插入。
10b/8b解碼和8b/16b轉(zhuǎn)換
彈性緩沖區(qū)的輸出進(jìn)入解碼器電路,它會將10比特的字符轉(zhuǎn)換成為8比特的數(shù)據(jù)。如果PCS-MAC接口數(shù)據(jù)通道寬度為16比特,那么需要將兩個連續(xù)的8比特數(shù)據(jù)拼接起來構(gòu)成16比特的數(shù)據(jù)并送給接收MAC如果數(shù)據(jù)通路寬度為8比特,那么不需要做任何處理,直接送給接收MAC。
責(zé)任編輯:haq
-
串行
+關(guān)注
關(guān)注
0文章
237瀏覽量
33769 -
總線
+關(guān)注
關(guān)注
10文章
2858瀏覽量
87912
原文標(biāo)題:串行總線技術(shù)(一)-串行總線結(jié)構(gòu)(以PCIe為例)
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論