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

評論