1.引言
USB3.0是一個高速,串行,源同步數(shù)據(jù)傳輸協(xié)議。但是數(shù)據(jù)經(jīng)過傳輸線與原數(shù)據(jù)發(fā)生了很大的偏差。本文從USB3.0的角度分析了彈性緩沖機制,解釋了與其他設(shè)計的不同,并采用指針控制與握手的設(shè)計方法實現(xiàn)。
2.彈性緩沖作用
2.1 USB3.0彈性緩沖作用域
在USB3.0中數(shù)據(jù)傳輸采用雙單工,因此物理層設(shè)計為接收、發(fā)送2組差分對傳輸部分。傳輸線是承載數(shù)據(jù)傳輸?shù)妮d體。因此如何從傳輸線正確接收數(shù)據(jù),并把它同步到系統(tǒng)內(nèi)部時鐘域,變的十分關(guān)鍵。
USB3.0中規(guī)定的物理層接收部分結(jié)構(gòu)圖如下,它包括差分接收、時鐘數(shù)據(jù)恢復、串并轉(zhuǎn)換和8B10B譯碼。
圖 1USB3.0物理層接收部分結(jié)構(gòu)
整個數(shù)據(jù)流向自上而下,差分輸入經(jīng)過差分接收,從差分信號中提取出時鐘,并用恢復出來的時鐘來恢復出數(shù)據(jù)(CDR)?;謴统鰜淼臄?shù)據(jù)在接收時鐘域進行串并轉(zhuǎn)換為10bit位寬并行數(shù)據(jù)1,并檢測USB3.0包起始標志符(K28.5)。一旦檢測到起始標志符K28.5,使能符號有效(symbol lock),直至檢測到結(jié)束符號,才結(jié)束符號有效。
彈性緩沖從串并轉(zhuǎn)換接收數(shù)據(jù),所有的接收數(shù)據(jù)與控制都工作在接收時鐘域(receive clock)。因此彈性緩沖要把數(shù)據(jù)與控制同步到系統(tǒng)時鐘域(system clock)。把數(shù)據(jù)向下傳遞給8B10B譯碼模塊,而后傳遞給系統(tǒng)內(nèi)部。
2.2 彈性緩沖容量
USB3.0中,協(xié)議規(guī)定允許的時鐘精度為-5300ppm到300ppm。而符號時鐘頻率為2ns即2000ps,最壞情況下每178個symbol添加或者刪除一個SKP,也就是每356個symbol添加或者刪除一個SKP對(SKP Order Sets)。USB3.0中包最長為1052字節(jié),所以最差情況下,最多可以添加或刪除8個SKP或者4個SKP對,所以彈性緩沖至少要能緩沖8個SKP。USB3.0協(xié)議規(guī)定每個SKP order sets為2個連續(xù)的SKP symbol。因此在10B8B譯碼前,SKP order set的游程(running disparity)應該是互補的。
通過計算得知,彈性緩沖的緩沖容量為8。本文設(shè)計采用常半滿2(normal half full)模式來設(shè)計彈性緩沖,所以彈性緩沖容量為16,在正常情況下里面應該有8個數(shù)據(jù),剩下的8個為緩沖空間,因此叫常半滿。常半滿模式首先要向緩沖中寫滿8個symbol,達到半滿,然后讀使能才可以有效,因此大約有8個時鐘的延遲。常半滿模式只有在symbol隊列中出現(xiàn)SKP對才能添加或者刪除SKP對。下圖為常半滿輸入輸出時序圖。
圖 2 常半滿輸入輸出時序
從上圖可以看出,rx_valid_out有效要晚于rx_valid_in約8個時鐘沿;而無效卻晚于rx_valid_out約0至16個時鐘沿(取決于時鐘精度差)。因此常半滿需要8個時鐘延遲才能輸出數(shù)據(jù)。
2.3 彈性緩沖機制
彈性緩沖本質(zhì)上是讀寫同時受控的異步FIFO,常半滿(normal half full)FIFO,其深度為16,首先要寫滿8個有效數(shù)據(jù),并一直維持在半滿的狀態(tài)。因此在正常情況下,F(xiàn)IFO一直處于或接近半滿狀態(tài),當讀寫時鐘一樣快慢的時候,F(xiàn)IFO中有8個有效數(shù)據(jù)。
圖 3 常半滿讀寫同等速率
當讀時鐘快于寫時鐘,讀出的數(shù)據(jù)多于寫入的數(shù)據(jù),常半滿模式可能導致FIFO中的數(shù)據(jù)數(shù)量少于8,甚至有可能被讀空。如下圖所示,在出現(xiàn)SKP窗口的時候,F(xiàn)IFO中的有效數(shù)據(jù)為4,比常態(tài)少4。所以此時,彈性緩沖應該添加4個SKP,使得FIFO維持半滿,以此來調(diào)節(jié)時鐘。此時讀指針向前跳躍4個間隔,并且當讀指針讀到跳躍區(qū)間時,完成SKP添加。
圖 4 常半滿模式讀快于寫
當讀時鐘慢于寫時鐘,寫入的數(shù)據(jù)多于讀出的數(shù)據(jù),常半滿模式可能導致FIFO中的數(shù)據(jù)數(shù)量多于8,甚至有可能被寫滿。如下圖所示,在出現(xiàn)SKP窗口的時候, FIFO中有效數(shù)據(jù)為10,比常態(tài)多2. 所以此時,彈性緩沖應該刪除2個SKP,使得FIFO維持半滿,以此來調(diào)節(jié)時鐘。此時寫指針應該暫停2個時鐘周期,完成SKP刪除。
圖 5 常半滿寫快于讀