前面在介紹PCIe物理層邏輯子層的文章中,有提到過彈性緩存(Elastic Buffer,又稱為CTC Buffer或者Synchronization Buffer)。其本質(zhì)上是一種FIFO,主要用于解決跨時(shí)鐘域問題。當(dāng)然,PCIe的彈性緩存還用于補(bǔ)償時(shí)鐘誤差(Compensate for the clock differences)。實(shí)際上,除了PCIe,彈性緩存還廣泛應(yīng)用于其它的高速串行接口——USB、InfiniBand、Fibre Channel、Gigabit Ethernet等基于SerDes的應(yīng)用。
由于PCIe采用的基于8b/10b的嵌入式源同步時(shí)鐘,接收端存在兩個(gè)時(shí)鐘域:一個(gè)是通過CDR從數(shù)據(jù)流中解析出來的時(shí)鐘,用該時(shí)鐘對(duì)數(shù)據(jù)進(jìn)行采樣;另一個(gè)是本地時(shí)鐘域,用于其他的邏輯的。借助彈性緩存(FIFO),可以實(shí)現(xiàn)數(shù)據(jù)在這兩個(gè)時(shí)鐘域的轉(zhuǎn)換。
以PCIe Gen1為例,鏈路上的數(shù)據(jù)速率為2.5Gbps。但實(shí)際上,任何晶振(或者其他頻率發(fā)生器)都是有誤差的,PCIe Spec允許的誤差范圍為±300ppm(Parts Per Million)。即,鏈路上實(shí)際的頻率范圍為2.49925GHz~2.50075GHz。借助彈性緩存,通過刪除或者插入SKP Ordered Set可以消除鏈路頻率誤差的影響。如下圖所示:
需要注意的是PCIe Spec并沒有規(guī)定彈性緩存的具體位置,設(shè)計(jì)者可以將彈性緩存放在8b/10b解碼器之前,也可以把彈性緩存放在8b/10b解碼器之后。不過,Mindshare的建議是將彈性緩存放置于8b/10b解碼器之前的。
當(dāng)本地時(shí)鐘域的時(shí)鐘(Local Clock)的速度比數(shù)據(jù)流通過CDR解析出的時(shí)鐘(Recovered Clock)的時(shí)鐘要快時(shí),且彈性緩存即將被讀空之前,可以向SKP Ordered Set中插入1~2個(gè)SKP。如下圖所示:
當(dāng)本地時(shí)鐘域的時(shí)鐘(Local Clock)的速度比數(shù)據(jù)流通過CDR解析出的時(shí)鐘(Recovered Clock)的時(shí)鐘要慢時(shí),且彈性緩存即將溢出之前,可以從SKP Ordered Set中移除1~2個(gè)SKP。如下圖所示:
需要特別注意的是,Intel提出的PIPE規(guī)范(并非PCI-SIG強(qiáng)制的規(guī)范,具體參考前面關(guān)于PIPE的文章)中,只允許每次從一個(gè)SKP Ordered Set中插入或者移除一個(gè)SKP。如果需要插入或者移除兩個(gè)SKP,則需要對(duì)兩個(gè)SKP Ordered Set進(jìn)行操作。如下圖所示:
-
解碼器
+關(guān)注
關(guān)注
9文章
1143瀏覽量
40717 -
PCIe
+關(guān)注
關(guān)注
15文章
1234瀏覽量
82579
原文標(biāo)題:【博文連載】PCIe掃盲——彈性緩存(Elastic Buffer,or CTC Buffer)
文章出處:【微信號(hào):ChinaAET,微信公眾號(hào):電子技術(shù)應(yīng)用ChinaAET】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論