一種適用于pcie3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?br>
【專利摘要】本發(fā)明涉及一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,其特征在于:所述方法主要針?duì)SKP的刪除工作,將SKP的刪除分為兩部分,第一部分在寫入彈性緩存存儲(chǔ)單元之前,完成大部分時(shí)鐘偏差的補(bǔ)償工作,屬于粗調(diào)部分;第二部分在寫入彈性緩存存儲(chǔ)單元之后,屬于微調(diào)部分。本發(fā)明對(duì)彈性緩存器進(jìn)行優(yōu)化,采用分級(jí)緩存調(diào)節(jié),包括粗調(diào)節(jié)和細(xì)調(diào)節(jié),以減小緩存總面積和時(shí)延,在出現(xiàn)大時(shí)鐘偏差時(shí),采用分級(jí)緩存,將時(shí)鐘偏差的去除分為粗調(diào)和細(xì)調(diào)兩部分,由寫時(shí)鐘域和存儲(chǔ)單元電路或者存儲(chǔ)單元電路和讀時(shí)鐘域來配合完成大時(shí)鐘偏差的補(bǔ)償,能夠有效的減小存儲(chǔ)空間的面積,并減少接收數(shù)據(jù)的延遲。
【專利說明】—種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?br>
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒ǎ唧w適用于PCIE3.0物理層抗時(shí)鐘偏差的方法。屬于IT【技術(shù)領(lǐng)域】。
【背景技術(shù)】
[0002]PCIE是最新的總線和接口標(biāo)準(zhǔn),是由英特爾提出的新一代標(biāo)準(zhǔn),是一種芯片之間互連技術(shù)以及一種板卡擴(kuò)展的接口技術(shù)。與傳統(tǒng)外圍器件互連以及更早期的計(jì)算機(jī)總線的共享并行架構(gòu)相比,PCIE采用設(shè)備間高速、高性能、雙單工、串行、差分信號(hào)鏈路來對(duì)設(shè)備進(jìn)行互連。PCIE將各類事務(wù)按照一定格式編制成包并在鏈路上進(jìn)行拆分傳輸。由于PCIE采用串行差分信號(hào)對(duì)連接,所以能夠輕松的將數(shù)據(jù)傳輸速度提高到一個(gè)很高的頻率,總線帶寬理論上可以無限擴(kuò)展。由于PCIE傳輸速度高,時(shí)鐘頻率大,如果將高頻率的時(shí)鐘信號(hào)傳遞到對(duì)端設(shè)備,會(huì)在鏈路上產(chǎn)生很大的電磁干擾噪聲,因此PCIE沒有將時(shí)鐘信號(hào)在鏈路上進(jìn)行傳輸,而是將時(shí)鐘信號(hào)嵌入到串行數(shù)據(jù)流中。當(dāng)串行數(shù)據(jù)流由差動(dòng)發(fā)送器通過差分信號(hào)對(duì)傳遞到對(duì)端的差分接收器時(shí),串行數(shù)據(jù)流經(jīng)過時(shí)鐘恢復(fù)電路(CDR)恢復(fù)出接收數(shù)據(jù)的時(shí)鐘,由數(shù)據(jù)恢復(fù)出的時(shí)鐘與本地時(shí)鐘具有相同的名義頻率,但是由于一些原因會(huì)使恢復(fù)時(shí)鐘域本地時(shí)鐘之間產(chǎn)生偏差,如發(fā)送端或者接收端頻率振蕩器的熱偏移,又如發(fā)送端與接收端基頻的不匹配等,所以恢復(fù)出的時(shí)鐘會(huì)有偏差,即恢復(fù)時(shí)鐘與本地時(shí)鐘會(huì)有相位的偏差。由于時(shí)鐘偏差在數(shù)據(jù)傳輸過程中會(huì)不斷的傳遞,即恢復(fù)時(shí)鐘和本地時(shí)鐘之間沒有固定的相位關(guān)系。異步時(shí)鐘電路之間如果不能夠在同步的條件下工作,可能會(huì)導(dǎo)致數(shù)據(jù)的丟失或者數(shù)據(jù)包傳輸錯(cuò)誤。
[0003]彈性緩存可以解決上述出現(xiàn)的異步時(shí)鐘之間的偏差問題。彈性緩最初是在電話網(wǎng)絡(luò)中傳輸脈沖編碼調(diào)制信號(hào)提出來的,實(shí)質(zhì)上是一個(gè)異步先進(jìn)先出存儲(chǔ)器,通過調(diào)整讀指針和讀指針位置,即完成插入或者刪除某一特殊的字符來實(shí)現(xiàn)時(shí)鐘偏差的補(bǔ)償工作,如此可以穩(wěn)定的在兩個(gè)時(shí)鐘域之間同步數(shù)據(jù)的傳輸。
[0004]PCIE采用分層體系結(jié)構(gòu),從上到下分別為事務(wù)層、數(shù)據(jù)鏈路層、物理層,每一層可以分為發(fā)送端和接收端兩部分,以實(shí)現(xiàn)雙單工工作模式。其中物理層又可以分為媒體介入控制層(MAC)、物理編碼子層(PCS)、物理媒體附屬層(PMA)。MAC層和PCS層通過業(yè)界標(biāo)準(zhǔn)的接口 -PIPE接口進(jìn)行互連,以將高速和低速的部分進(jìn)行分離設(shè)計(jì)生產(chǎn)。物理層作為PCIE的最低層,負(fù)責(zé)與對(duì)端設(shè)備之間進(jìn)行連接,彈性緩存位于PCS子層中,串行比特流經(jīng)過串并轉(zhuǎn)換之后輸入彈性緩存,完成時(shí)鐘偏差的補(bǔ)償工作。
[0005]彈性緩存實(shí)質(zhì)上是一個(gè)異步先入先出存儲(chǔ)單元,其寫時(shí)鐘為恢復(fù)時(shí)鐘,讀時(shí)鐘為本地時(shí)鐘。PCIE協(xié)議中規(guī)定按照一定的時(shí)間間隔定期的發(fā)送用于時(shí)鐘偏差去除的特殊字符SKP。當(dāng)寫時(shí)鐘快于讀時(shí)鐘時(shí),經(jīng)過一段時(shí)間的累積,可能出現(xiàn)寫滿的情況,如果不做處理,下一次寫操作將會(huì)覆蓋還未經(jīng)讀時(shí)鐘讀取的數(shù)據(jù)字符,造成數(shù)據(jù)丟失,彈性緩存可以將存儲(chǔ)空間中存在的SKP刪除,以防止出現(xiàn)寫滿的狀態(tài);當(dāng)讀時(shí)鐘快于寫時(shí)鐘時(shí),經(jīng)過一段時(shí)間的累積,可能出現(xiàn)讀空的情況,如果不做處理,可能會(huì)對(duì)同一數(shù)據(jù)進(jìn)行二次處理,彈性緩存可以向存儲(chǔ)空間中寫入SKP字符,以防止出現(xiàn)讀出的狀態(tài)。因此,彈性緩存可以通過此方式動(dòng)態(tài)的調(diào)整恢復(fù)時(shí)鐘與本地時(shí)鐘之間的偏差。[0006]PCIE目前最新的協(xié)議標(biāo)準(zhǔn)為PCIE3.0,傳輸速度達(dá)到8GT/s。PCIE3.0設(shè)備需要向下兼容PCIE1.0/2.0。PCIE3.0較PCIE1.0/2.0速度有較大提升,因此在時(shí)鐘偏差的補(bǔ)償方式上有所區(qū)別。SKP有序集被用來補(bǔ)償鏈路兩端比特速率的偏差,PCIE協(xié)議中規(guī)定,物理層發(fā)送端必須按照固定的時(shí)間間隔定期發(fā)送SKP有序集以完成時(shí)鐘偏差的補(bǔ)償。當(dāng)設(shè)備運(yùn)行在Genl/2時(shí),鏈路采用8b/10b編碼,SKP有序集的長度為4個(gè)字節(jié),首字符為C0M(PCIE中的控制字符)字符(K28.5),后面跟著3個(gè)SKP (K28.3)。而當(dāng)設(shè)備運(yùn)行在第三代(Gen3)時(shí),鏈路采用塊編碼_128b/130b編碼(分為數(shù)據(jù)塊和有序集塊,每個(gè)塊的載荷長度為128比特,每個(gè)塊在進(jìn)行發(fā)送時(shí)會(huì)添加一個(gè)2比特長度的同步頭標(biāo)識(shí)),SKP有序集長度為16個(gè)字節(jié),前面12個(gè)字符為Oxaa。對(duì)于采用8b/10b編碼的SKP有序集,發(fā)送間隔為1180~1538個(gè)字符窗口,而對(duì)于采用128b/130b編碼的SKP有序集,發(fā)送間隔為370-375個(gè)塊。協(xié)議中規(guī)定時(shí)鐘偏差的容許值為-300ppnT+300ppm,在最壞的情況下,鏈路兩端的時(shí)鐘偏差為600ppm。由于數(shù)據(jù)包的發(fā)送不能被SKP有序集打斷,所以時(shí)鐘偏差的最大值出現(xiàn)在發(fā)送長包時(shí)。PCIE數(shù)據(jù)包長度最大包為4KB,假設(shè)選取SKP的發(fā)送間隔為1538,則在最差情況下,運(yùn)行在GEN1/2速度的設(shè)備需要能夠容納3.4個(gè)字符的偏差,而運(yùn)行在GEN3速度的設(shè)備需要容納約7個(gè)字符的時(shí)鐘偏差。
[0007]彈性緩存在本質(zhì)上是一個(gè)異步FIFO,寫時(shí)鐘是恢復(fù)時(shí)鐘,讀時(shí)鐘是本地時(shí)鐘。類似一個(gè)FIFO的結(jié)構(gòu),彈性緩存應(yīng)該包含寫控制電路、讀控制電路、存儲(chǔ)單元電路、滿空產(chǎn)生電路。
[0008]彈性緩存的存儲(chǔ)單元目前有兩種不同的結(jié)構(gòu),一種是半滿模式(Half-Full),一種是流控模式(Flow-Control)。半滿模式是在正常工作情況下(鏈路兩端時(shí)鐘偏差近似為
0),彈性緩存當(dāng)中有效存儲(chǔ)的字符數(shù)量應(yīng)該為存儲(chǔ)單元總?cè)萘康囊话?,?dāng)有效字節(jié)數(shù)量超過一半時(shí),說明寫時(shí)鐘比讀時(shí)鐘操作快,如果存儲(chǔ)單元中有SKP有字符時(shí),彈性緩存需要?jiǎng)h除SKP字符來使存儲(chǔ)單元中的有效字符保持一半;當(dāng)有效字節(jié)數(shù)量低于一半時(shí),說明讀時(shí)鐘較寫時(shí)鐘快,如果存儲(chǔ)單元中有SKP有序集,則彈性緩存應(yīng)該向SKP有序集當(dāng)中添加SKP字符,使存儲(chǔ)單元中的有效字符數(shù)量保持一半。流控模式與半滿模式不同,當(dāng)本地時(shí)鐘頻率較恢復(fù)時(shí)鐘頻率快時(shí),流控模式采用與半滿模式不同的機(jī)制來完成時(shí)鐘偏差的去除。這種情況下,流控模式的彈性緩存不使用SKP有序集進(jìn)行時(shí)鐘偏差的補(bǔ)償,而是直接將傳遞給上游邏輯模塊使用的時(shí)鐘關(guān)閉,因此彈性緩存存儲(chǔ)單元的大小只需要能夠緩存最壞情況下出現(xiàn)的時(shí)鐘偏差的字符數(shù)并單獨(dú)使用一個(gè)存儲(chǔ)間隔來產(chǎn)生流控控制信號(hào)。但是當(dāng)恢復(fù)時(shí)鐘頻率較本地時(shí)鐘頻率快時(shí),流控模式彈性緩存要使用與半滿模式相同的算法,通過刪除或者添加SKP字符來補(bǔ)償時(shí)鐘偏差。流控模式在正常工作情況下,存儲(chǔ)單元只有一個(gè)有效的字節(jié)存在。
[0009]半滿模式的彈性緩存容量必須為最差情況下需要緩存的字符數(shù)量的兩倍,且在正常情況下當(dāng)存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)數(shù)量少于一半時(shí),讀指針不操作,因此會(huì)有彈性緩存容量大小一半的延遲。流控模式在存儲(chǔ)容量大小上有一點(diǎn)優(yōu)勢(shì),大小為最壞情況下需要緩存的字符的數(shù)量,外加一個(gè)產(chǎn)生流控控制信號(hào)的間隔,但是流控模式只有在讀時(shí)鐘頻率較寫時(shí)鐘頻率快時(shí)工作效果較好,并且流控模式的彈性緩存在使用時(shí),需要仔細(xì)的考慮系統(tǒng)中其他邏輯電路的實(shí)現(xiàn)方式,實(shí)現(xiàn)較半滿模式復(fù)雜。
[0010]現(xiàn)有技術(shù)方案在進(jìn)行PCIE GEN1/2時(shí)鐘偏差補(bǔ)償時(shí),能夠有效的去除鏈路兩端的時(shí)鐘偏差,并且電路面積、延遲不是很大,但是當(dāng)設(shè)備運(yùn)行在GEN3時(shí),如果彈性緩存仍然使用半滿模式,則彈性緩存存儲(chǔ)空間深度應(yīng)為16,延遲為8個(gè)時(shí)鐘周期,面積大,延遲大。且如果設(shè)備兼容GEN1/2/3,則彈性緩存深度必須為緩存最差情況下的字符數(shù)量的兩倍,即深度為16,這樣會(huì)使得當(dāng)設(shè)備運(yùn)行在GEN1/2的時(shí)候,面積和延遲比較大。
【發(fā)明內(nèi)容】
[0011]本發(fā)明的目的在于克服上述不足,提供一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,在兼容PCIE GEN1/2/3的同時(shí),能夠有效的減小存儲(chǔ)空間的面積,減少接收數(shù)據(jù)的延遲。
[0012]本發(fā)明的目的是這樣實(shí)現(xiàn)的:一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,所述方法主要針?duì)SKP的刪除工作,將SKP的刪除分為兩部分,第一部分在寫入彈性緩存存儲(chǔ)單元之前,完成大部分時(shí)鐘偏差的補(bǔ)償工作,屬于粗調(diào)部分;第二部分在寫入彈性緩存存儲(chǔ)單元之后,屬于微調(diào)部分,具體步驟如下:
步驟一:粗調(diào)部分
由寫時(shí)鐘域根據(jù)存儲(chǔ)單元的存儲(chǔ)信息獨(dú)立完成SKP的刪除工作,具體操作由寫入控制電路根據(jù)水線設(shè)置電路控制信號(hào)屏蔽寫指針的寫操作來完成;
步驟二:微調(diào)部分
每次只對(duì)一個(gè)SKP字符進(jìn)行處理,由讀時(shí)鐘域根據(jù)水線設(shè)置電路控制讀指針的跳躍來完成;
步驟三:SKP添加
由讀時(shí)鐘域根據(jù)水線設(shè)置電路控制讀指針保持來獨(dú)立完成;
步驟四:邊界預(yù)防
水線設(shè)置電路時(shí)刻監(jiān)測(cè)存儲(chǔ)單元電路中存儲(chǔ)的有效字節(jié)的數(shù)量,當(dāng)出現(xiàn)邊界情況,由讀時(shí)鐘域控制預(yù)取寄存器啟動(dòng)或者產(chǎn)生截流信號(hào)來預(yù)防出現(xiàn)無法補(bǔ)償?shù)钠睢?br>
[0013]上述方法包括以下步驟:
1)數(shù)據(jù)由對(duì)端設(shè)備發(fā)送端將適合發(fā)送的數(shù)據(jù)結(jié)構(gòu)由并串轉(zhuǎn)換器將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),通過差動(dòng)發(fā)送器將數(shù)據(jù)驅(qū)動(dòng)到鏈路上,以差分信號(hào)的方式傳遞到本端差動(dòng)接收器;
2)時(shí)鐘恢復(fù)電路通過串行比特流恢復(fù)出接收數(shù)據(jù)的時(shí)鐘信號(hào),并以此恢復(fù)時(shí)鐘將數(shù)據(jù)通過并串轉(zhuǎn)換電路轉(zhuǎn)換為并行數(shù)據(jù);
3)將數(shù)據(jù)發(fā)送到彈性緩存部分進(jìn)行時(shí)鐘偏差去除之前,確認(rèn)哪些比特信息為有效信息,即對(duì)數(shù)據(jù)的開頭和結(jié)尾進(jìn)行識(shí)別;
4)符號(hào)鎖定和塊對(duì)齊會(huì)產(chǎn)生數(shù)據(jù)鎖定信號(hào),表明已經(jīng)可以正確的識(shí)別數(shù)據(jù)信息;
5)輸入到本方案中的數(shù)據(jù),默認(rèn)為已經(jīng)經(jīng)過數(shù)據(jù)的識(shí)別與定位操作,為有效的并且能夠被正確識(shí)別的數(shù)據(jù)。
[0014]所述方法能夠向下兼容PCIE1.0/2.0。
[0015]兩級(jí)同步采用上升沿和下降沿,精確監(jiān)測(cè)存儲(chǔ)單元中有效的字節(jié)數(shù)。
[0016]水線設(shè)置電路精確監(jiān)測(cè)存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量,并根據(jù)數(shù)量產(chǎn)生刪除或者添加SKP的命令,并控制刪除和添加的SKP字符的數(shù)量。
[0017]適用于PCIE1.0/2.0/3.0的序列檢測(cè)電路,能夠正確的檢測(cè)SKP有序集。
[0018]讀指針采用讀時(shí)鐘域與寫時(shí)鐘域相互配合,寫指針屏蔽、讀指針跳躍、讀指針保持、讀時(shí)鐘域預(yù)取緩存、停止向上層邏輯提供時(shí)鐘的方法來整體控制偏差的范圍。
[0019]寫指針采用寫指針屏蔽,來完成SKP字符大數(shù)量刪除。
[0020]邊界情況下,通過預(yù)取或者停止提供給上層的時(shí)鐘來完成大時(shí)鐘偏差的控制。
[0021 ] 與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明對(duì)彈性緩存器進(jìn)行優(yōu)化,采用分級(jí)緩存調(diào)節(jié),包括粗調(diào)節(jié)和細(xì)調(diào)節(jié),以減小緩存總面積和時(shí)延。采用讀時(shí)鐘域與寫時(shí)鐘域分工合作,協(xié)調(diào)補(bǔ)償時(shí)鐘偏差。整體控制時(shí)鐘偏差的范圍,大大減小了存儲(chǔ)空間的容量,以及減少PCIE3.0時(shí)的延遲。在出現(xiàn)大時(shí)鐘偏差時(shí),采用分級(jí)緩存,將時(shí)鐘偏差的去除分為粗調(diào)和細(xì)調(diào)兩部分,由寫時(shí)鐘域和存儲(chǔ)單元電路或者存儲(chǔ)單元電路和讀時(shí)鐘域來配合完成大時(shí)鐘偏差的補(bǔ)償。寫時(shí)鐘域通過寫指針的屏蔽,來完成SKP字符的刪除。讀時(shí)鐘域采取讀指針跳躍、屏蔽、預(yù)取以及產(chǎn)生halt信號(hào)停止提供給上層的時(shí)鐘來完成大時(shí)鐘偏差的補(bǔ)償以及控制大時(shí)鐘偏差的范圍。
【專利附圖】
【附圖說明】
[0022]圖1是本發(fā)明的整體架構(gòu)圖。
[0023]圖2是本發(fā)明中的PCIE SKIP有序集檢測(cè)圖。
[0024]圖3是本發(fā)明中的GEN1/2 SKIP有序集結(jié)構(gòu)圖。
[0025]圖4是本發(fā)明中的GEN3 SKIP有序集結(jié)構(gòu)圖。
[0026]圖5是本發(fā)明中的寫指針產(chǎn)生電路圖。
[0027]圖6是本發(fā)明中的格雷碼兩級(jí)同步圖。
[0028]圖7是本發(fā)明中的二進(jìn)制轉(zhuǎn)格雷碼電路圖。
[0029]圖8是本發(fā)明中的水線設(shè)置電路圖。
[0030]圖9是本發(fā)明中的讀指針產(chǎn)生電路圖。
【具體實(shí)施方式】
[0031]如圖1所示,本發(fā)明涉及一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒ǎ⒛軌蛳蛳录嫒?PCIE1.0/2.0。
[0032]本發(fā)明將SKP的刪除分為兩個(gè)步驟:
步驟一、在寫入彈性緩存存儲(chǔ)單元之前進(jìn)行,這一部分完成大部分時(shí)鐘偏差的補(bǔ)償工作,屬于粗調(diào),由寫時(shí)鐘域根據(jù)存儲(chǔ)單元的存儲(chǔ)信息獨(dú)立完成SKP的刪除工作,這部分邏輯電路的設(shè)置主要是為了抗PCIE3.0會(huì)出現(xiàn)的大偏差現(xiàn)象;
步驟二、在寫入彈性緩存之后進(jìn)行,這一部分SKP字符的刪除每次只會(huì)對(duì)一個(gè)SKP字符進(jìn)行處理,屬于微調(diào),由讀時(shí)鐘域根據(jù)彈性緩存存儲(chǔ)單元獨(dú)立完成,對(duì)于SKP的添加由讀時(shí)鐘域獨(dú)立完成。
[0033]方案中包括序列探測(cè)電路、寫入控制電路、寫指針產(chǎn)生電路、格雷碼與二進(jìn)制碼轉(zhuǎn)換電路、同步電路、存儲(chǔ)單元電路、水線設(shè)置電路、讀指針產(chǎn)生電路,讀出控制電路和讀出緩沖寄存器電路。每個(gè)電路之間相互配合,完成兩端時(shí)鐘偏差的補(bǔ)償工作。[0034]序列探測(cè)電路主要負(fù)責(zé)檢測(cè)輸入數(shù)據(jù)內(nèi)包含的SKP有序集,序列探測(cè)電路主要由比較器完成。如果檢測(cè)到輸入數(shù)據(jù)中包含有效的SKP有序集,產(chǎn)生SKP有序集收到指示信號(hào),彈性緩存使用此信號(hào)來判斷需要?jiǎng)h除的SKP字符位置。序列探測(cè)電路包括兩部分,適用于PCIE1.0/2.0的SKP檢測(cè)電路以及適用于PCIE3.0的SKP檢測(cè)電路。
[0035]如圖2所示,適用于PCIE1.0/2.0的SKP檢測(cè)電路,內(nèi)部主要由比較器實(shí)現(xiàn)。PCIE1.0/2.0中,SKP有序集長度為4個(gè)字符,首字符為COM字符(K28.5),后面緊跟3個(gè)SKP字符(K28.3),如圖3所示。且接收到的數(shù)據(jù)為對(duì)端設(shè)備發(fā)送端經(jīng)過8b/10b編碼的數(shù)據(jù),所以此時(shí)一個(gè)字符的長度為10比特。如果當(dāng)前字符為SKP字符,且前一字符為COM字符,或者當(dāng)前字符為SKP字符,且前一字符同樣為SKP字符,則當(dāng)前正在接收的有序集為SKP有序集。特別的,當(dāng)前字符SKP如果在通道的低字節(jié)部分,則前一字符需要考慮前一周期所收到的字符,因此需要一個(gè)寄存器來保存前一狀態(tài)。PCIE1.0/2.0輸出的SKP接收指示信號(hào),在SKP有序集的全部SKP字符位置都會(huì)有效。另外,因?yàn)樵趶椥跃彺嬷行枰砑踊蛘邉h除SKP字符,為了防止經(jīng)過偏差補(bǔ)償?shù)臄?shù)據(jù)進(jìn)行8b/10b譯碼錯(cuò)誤,所以需要記錄當(dāng)前SKP有序集COM字符的運(yùn)行不一致屬性。
[0036]如圖3所示,根據(jù)協(xié)議中所描述的PCIE3.0中SKP有序集的結(jié)構(gòu),適用于PCIE3.0的SKP檢測(cè)電路,內(nèi)部主要由比較器實(shí)現(xiàn)。PCIE3.0的SKP有序集為一個(gè)有序集塊,有效數(shù)據(jù)載荷為128比特,即SKP長度為16個(gè)字節(jié)。由于接受到的SKP有序集會(huì)由對(duì)端設(shè)備經(jīng)過128b/130b編碼,所以每個(gè)塊的開頭會(huì)包含長度為2比特的同步頭,因?yàn)镾KP有序集為有序集塊,所以所包含的的有同步頭根據(jù)協(xié)議規(guī)定為2‘b01,此同步頭標(biāo)識(shí)在前述塊對(duì)齊電路中已經(jīng)從數(shù)據(jù)流當(dāng)中取出,伴隨數(shù)據(jù)流并行的發(fā)送到后續(xù)邏輯電路,并且此同步頭標(biāo)識(shí)每個(gè)塊有且只有一個(gè),因此在當(dāng)前塊的整個(gè)持續(xù)過程中,此同步頭標(biāo)識(shí)不發(fā)生改變。
[0037]本方案中PCIE3.0的SKP檢測(cè)電路,為了保證檢測(cè)電路工作的正確性,且根據(jù)協(xié)議中所描述的,在后續(xù)操作中對(duì)SKP有序集的識(shí)別中允許的SKP最短長度為8個(gè)字符,因此SKP有序集匹配的條件為:檢測(cè)到有序集塊的同步頭2 ‘01,且伴隨同步頭的連續(xù)4個(gè)字符為SKP字符(Oxaa),則可確認(rèn)當(dāng)前正在接收的數(shù)據(jù)位SKP有序集,相應(yīng)的SKP接收指示信號(hào)有效;當(dāng)檢測(cè)到SKP_END字符(Oxel)時(shí),相應(yīng)的指示信號(hào)取消有效,SKP_END (PCIE中的特殊字符)字符后面緊跟的3個(gè)字符雖然屬于SKP有序集,但是由于彈性緩存中不會(huì)對(duì)它們做任何處理,因此在SKP檢測(cè)電路中不做要求。
[0038]序列探測(cè)模塊根據(jù)當(dāng)前速度指示信號(hào)選擇采用PCIE1.0/2.0或者PCIE3.0的SKP檢測(cè)電路。
[0039]如圖4所示,寫入控制電路根據(jù)存儲(chǔ)單元內(nèi)存儲(chǔ)的有效字符的數(shù)量,驅(qū)動(dòng)內(nèi)部狀態(tài)機(jī)的跳轉(zhuǎn),來使能控制前述寫入寄存器之前的粗調(diào)電路。水線設(shè)置電路通過內(nèi)部減法器計(jì)算結(jié)果,時(shí)刻監(jiān)測(cè)存儲(chǔ)單元中存儲(chǔ)的有效的字符數(shù)量,并根據(jù)存儲(chǔ)的有效字符的數(shù)量,產(chǎn)生不同的控制信號(hào)來控制讀寫時(shí)鐘域讀寫指針的工作,控制SKP的添加或者刪除命令,以及控制添加或者刪除SKP字符的數(shù)量。當(dāng)水線設(shè)置電路監(jiān)測(cè)到彈性緩存中存儲(chǔ)的有效字符的數(shù)量超過讀水線,且讀時(shí)鐘域無法獨(dú)立完成SKP的刪除時(shí),產(chǎn)生一個(gè)請(qǐng)求信號(hào)向?qū)懭肟刂齐娐氛?qǐng)求輔助,并同時(shí)將需要粗調(diào)電路刪除的SKP的個(gè)數(shù)同時(shí)發(fā)送給粗調(diào)電路,由寫入控制電路控制粗調(diào)電路完成大部分時(shí)鐘偏差的補(bǔ)償工作。當(dāng)寫入控制電路收到請(qǐng)求信號(hào)以及需要?jiǎng)h除的SKP的個(gè)數(shù)時(shí),會(huì)使能粗調(diào)電路開始運(yùn)作。當(dāng)寫入控制電路收到序列探測(cè)電路傳遞來的SKP接收指示信號(hào)時(shí),產(chǎn)生控制信號(hào)屏蔽寫指針,屏蔽的周期數(shù)由水線控制電路決定。當(dāng)完成指定數(shù)量的SKP刪除工作之后,寫入控制信號(hào)釋放寫指針,寫指針開始正常工作。由于需要準(zhǔn)確的配合讀時(shí)鐘域進(jìn)行SKP字符的刪除,因此在寫入控制電路中應(yīng)當(dāng)設(shè)置一個(gè)已刪除字符的數(shù)量計(jì)數(shù)器,以滿足協(xié)議中對(duì)于SKP刪除的要求。根據(jù)PCIE對(duì)SKP有序集的敘述,當(dāng)設(shè)備運(yùn)行在GEN1/2時(shí),SKP有序集的長度為4個(gè)字符,彈性緩存對(duì)接收到的每個(gè)SKP有序集可以添加或者刪除最多2個(gè)SKP字符,而在彈性緩存存儲(chǔ)單元電路中會(huì)完成一個(gè)SKP字符的刪除,因此當(dāng)設(shè)備運(yùn)行在GEN1/2時(shí),粗調(diào)電路最多刪除的字符數(shù)量為I個(gè)字符;當(dāng)設(shè)備運(yùn)行在GEN3時(shí),SKP有序集的長度為16個(gè)字符,其中SKP字符的數(shù)量為12個(gè),可供刪除的SKP字符數(shù)量為8個(gè),但是協(xié)議中規(guī)定,設(shè)備運(yùn)行在GEN3時(shí),每次刪除或者添加SKP字符的數(shù)量必須以4個(gè)為基礎(chǔ),所以在粗調(diào)電路部分,可以刪除的SKP的數(shù)量為3個(gè)或者7個(gè),但是在后文中會(huì)提到,本方案會(huì)避免需要一次對(duì)SKIP有序集刪除8個(gè)SKP字符這種情況,因此粗調(diào)電路部分最多完成的SKP字符刪除個(gè)數(shù)為3,這個(gè)數(shù)量與水線控制電路傳遞來的偏差的大小可能有所區(qū)別,即彈性緩存在一次偏差補(bǔ)償操作中可能無法完美的將偏差去除。寫入控制電路中設(shè)置的計(jì)數(shù)器達(dá)到預(yù)期的數(shù)量時(shí),即已完成合適數(shù)量的SKP字符刪除時(shí),會(huì)無視水線設(shè)置電路傳遞來的請(qǐng)求信號(hào),以保證不會(huì)將SKP有序集中其他字符誤刪除或者少刪除。
[0040]如圖5所示,寫指針產(chǎn)生電路負(fù)責(zé)產(chǎn)生二進(jìn)制地址指針以及格雷碼地址指針,二進(jìn)制指針正常情況下處于遞增模式,內(nèi)部只要包括加法器和選擇器,其中加法器為指針遞增功能,而選擇器則根據(jù)控制信號(hào)選擇不同的值作為加法器的輸入;而格雷碼指針由二進(jìn)制指針通過格雷碼-二進(jìn)制轉(zhuǎn)換電路直接轉(zhuǎn)化而來。其中二進(jìn)制地址作為存儲(chǔ)單元的入口地址,向存儲(chǔ)單元中寫入數(shù)據(jù);而格雷碼地址由于相鄰地址之間每次只有一位地址會(huì)發(fā)生變化,產(chǎn)生亞穩(wěn)態(tài)的概率相對(duì)較小,因此作為同步電路的輸入,將寫時(shí)鐘域的寫地址傳遞到讀時(shí)鐘域,與讀地址指針做比較,反應(yīng)存儲(chǔ)單元度寫指針之間的距離,即存儲(chǔ)單元中存儲(chǔ)的有效字符的數(shù)量。在正常工作模式下,寫時(shí)鐘域處于長寫模式,即寫指針每個(gè)周期加1,向彈性緩存存儲(chǔ)單元中寫入數(shù)據(jù),當(dāng)讀時(shí)鐘與寫時(shí)鐘之間出現(xiàn)偏差,并且當(dāng)前正在接收SKP有序集時(shí),寫指針產(chǎn)生電路才會(huì)受寫入控制電路的控制,出現(xiàn)停滯增加的現(xiàn)象,當(dāng)寫指針產(chǎn)生電路收到寫入控制電路的控制信號(hào)時(shí),寫指針根據(jù)控制信號(hào)決定繼續(xù)增加還是停滯。當(dāng)寫入控制電路控制寫指針停滯時(shí),相應(yīng)的要產(chǎn)生屏蔽信號(hào)來屏蔽向存儲(chǔ)單元寫入數(shù)據(jù),以防將當(dāng)前寫指針停滯位置的數(shù)據(jù)沖掉??刂菩盘?hào)釋放掉之后,寫指針產(chǎn)生電路恢復(fù)正常工作狀態(tài),開始長寫模式。
[0041]如圖6所示,同步電路負(fù)責(zé)將讀地址指針和寫地址指針傳遞到相對(duì)時(shí)鐘域,由于格雷碼每次只有一位發(fā)生變化,因此本方法中同步電路直接采用兩級(jí)緩存的方式進(jìn)行同步。由于需要時(shí)刻對(duì)存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量進(jìn)行監(jiān)測(cè),因此需要將當(dāng)前讀地址指針和寫地址指針進(jìn)行比較,但是讀地址指針和寫地址指針分別工作在讀時(shí)鐘域和寫時(shí)鐘域,直接對(duì)讀寫地址進(jìn)行比較很容易產(chǎn)生錯(cuò)誤比較結(jié)果,因此需要進(jìn)行讀寫地址指針向相對(duì)時(shí)鐘域進(jìn)行同步。但是讀寫地址指針一般都有多位,如果直接使用二進(jìn)制地址指針進(jìn)行傳遞,由于地址指針可能出現(xiàn)一次變化多位的情況,直接使用異步時(shí)鐘進(jìn)行采樣會(huì)使出現(xiàn)亞穩(wěn)態(tài)的概率大大增加。格雷碼地址指針相鄰地址之間只有一位發(fā)生變化,因此大大減小了出現(xiàn)亞穩(wěn)態(tài)的概率。目前大多采用格雷碼經(jīng)過兩級(jí)緩存同步的方式進(jìn)行同步,且兩級(jí)同步一般都使用相同的時(shí)鐘邊沿(上升沿或者下降沿),但是在PCIE中,由于寫時(shí)鐘和讀時(shí)鐘具有相同的名義頻率,即頻率相同,有所偏差的只是相位偏差,偏差最大為一個(gè)周期,因此本方案中使用兩級(jí)同步的方式,且第一級(jí)采用讀時(shí)鐘上升沿,第二級(jí)采用讀時(shí)鐘下降沿。不會(huì)出現(xiàn)亞穩(wěn)態(tài),并且采用這種方式的同步方法可以更快速的在相對(duì)時(shí)鐘域中監(jiān)測(cè)地址指針的變化,因此可以更加精確的監(jiān)測(cè)存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量,以更加快速準(zhǔn)確的進(jìn)行時(shí)鐘偏差的補(bǔ)償工作。
[0042]如圖7所示,格雷碼-二進(jìn)制碼轉(zhuǎn)換電路負(fù)責(zé)將地址指針在二進(jìn)制與格雷碼之間相互轉(zhuǎn)換。之所以需要相互轉(zhuǎn)換,是因?yàn)樵谶M(jìn)行異步地址指針同步的時(shí)候,需要采用格雷碼的特性減小出現(xiàn)亞穩(wěn)態(tài)的概率。但是在將讀寫地址進(jìn)行比較的時(shí)候,由于格雷碼其特性,每位之間沒有權(quán)重,因此無法將格雷碼運(yùn)用減法準(zhǔn)確的判斷存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量,因此在將讀寫格雷碼地址指針傳遞到相對(duì)時(shí)鐘域之后,需要將格雷碼地址轉(zhuǎn)換為二進(jìn)制地址進(jìn)行判斷。
[0043]存儲(chǔ)單元電路是彈性緩存中的存儲(chǔ)空間,本方法中采用雙口 RAM做存儲(chǔ)器件,由寫時(shí)鐘域?qū)?shù)據(jù)寫入,由讀時(shí)鐘域?qū)?shù)據(jù)讀出。存儲(chǔ)單元的位寬以及深度是由數(shù)據(jù)傳輸?shù)膮f(xié)議以及始終偏差補(bǔ)償方案來確定的,根據(jù)PCIE協(xié)議,當(dāng)設(shè)備運(yùn)行在GEN1/2時(shí),最差情況下會(huì)產(chǎn)生3.4個(gè)字符的時(shí)鐘偏差,取整之后為4個(gè)字符的時(shí)鐘偏差,因此彈性緩存中的存儲(chǔ)空間電路需要能夠存儲(chǔ)最差情況下的需要移除的字符數(shù)量的字符,又本方案中決定采用半滿模式,所以當(dāng)設(shè)備運(yùn)行在GEN1/2時(shí),存儲(chǔ)空間的深度為8。同樣的原理去計(jì)算當(dāng)設(shè)備運(yùn)行在GEN3時(shí)的存儲(chǔ)單元深度時(shí),需要16個(gè)存儲(chǔ)間隔,這樣一來想要兼容PCIE1.0/2.0/3.0,就要將存儲(chǔ)空間的大小設(shè)定為能夠緩存的字符的最大數(shù)量,因此需要將存儲(chǔ)空間的深度定位16,面積大,延遲大。本方案中為了降低彈性緩存的面積和延遲,將SKP的刪除分為兩部分-粗調(diào)電路和細(xì)調(diào)電路,SKP有序集在刪除之前就已經(jīng)被刪除了大部分,因此彈性緩存需要緩存的數(shù)量已經(jīng)大大的減少,深度定為8已經(jīng)可以基本滿足偏差補(bǔ)償?shù)囊?,只是需要在邊界條件下采取一些特殊措施,如后文所述。存儲(chǔ)單元的寬度可以根據(jù)不同的應(yīng)用來配置,為了防止在跨時(shí)鐘域傳輸數(shù)據(jù)的時(shí)候由于偏差等原因出現(xiàn)數(shù)據(jù)信息與其他控制信息的不匹配,將數(shù)據(jù)信息與控制信息進(jìn)行捆綁存儲(chǔ)。特別的,本方案中,將SKP接收指示信號(hào)與數(shù)據(jù)信息等一起捆綁寫入存儲(chǔ)單元電路中。
[0044]如圖8所示,水線設(shè)置電路負(fù)責(zé)實(shí)時(shí)監(jiān)測(cè)存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量,內(nèi)部主要運(yùn)作機(jī)理為減法器和比較器,其中減法器作為計(jì)算存儲(chǔ)空間有效字節(jié)的數(shù)目,而比較器則根據(jù)計(jì)算結(jié)果與水線做比較,進(jìn)而產(chǎn)生不同的控制信號(hào)。水線設(shè)置電路根據(jù)此數(shù)量值產(chǎn)生不同的控制信號(hào),完成時(shí)鐘偏差的補(bǔ)償工作。由于本方案中彈性緩存存儲(chǔ)單元的深度為8,因此將水線設(shè)置為4,即正常工作情況下,在存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量應(yīng)該為4。水線設(shè)置電路將同步后的讀寫指針進(jìn)行比較,判斷存儲(chǔ)單元中有效的字節(jié)數(shù)量為多少。將存儲(chǔ)單元中有效字節(jié)數(shù)量記為sym_in_buf。
[0045]對(duì)于運(yùn)行在GEN1/2的設(shè)備,當(dāng)sym_in_buf〈4時(shí),表明讀時(shí)鐘較寫時(shí)鐘快,彈性緩存需要向存儲(chǔ)單元中添加SKP字符來補(bǔ)償時(shí)鐘偏差。添加SKP字符的操作完全由讀時(shí)鐘域根據(jù)水線設(shè)置電路的控制信號(hào),使讀指針保持來獨(dú)立完成。當(dāng)2〈=Sym_in_buf〈4時(shí),水線設(shè)置電路需要向存儲(chǔ)單元中添加2個(gè)SKP字符,又根據(jù)PCIE協(xié)議敘述,對(duì)于每個(gè)SKP有序集,彈性緩存最多會(huì)向其添加或者刪除兩個(gè)SKP有序集,所以在讀時(shí)鐘域需要記錄已經(jīng)添加的SKP字符的數(shù)量,當(dāng)添加的SKP字符數(shù)量已經(jīng)達(dá)到預(yù)設(shè)時(shí),不再根據(jù)水線設(shè)置電路繼續(xù)添加SKP字符。當(dāng)sym_in_buf〈2時(shí),由讀時(shí)鐘域產(chǎn)生信號(hào)表明當(dāng)前運(yùn)行已經(jīng)出現(xiàn)將要讀空的狀態(tài),但是由于兩端時(shí)鐘存在的偏差有限,所以在出現(xiàn)將要讀空的狀態(tài)時(shí),在有限周期數(shù)內(nèi)數(shù)據(jù)的讀寫仍是安全的。當(dāng)sym_in_buf>4時(shí),表明寫時(shí)鐘較讀時(shí)鐘快,彈性緩存需要?jiǎng)h除SKP字符來進(jìn)行時(shí)鐘偏差的補(bǔ)償,如果4〈sym_in_buf〈=6,則只需要?jiǎng)h除一個(gè)SKP有序集,由讀時(shí)鐘域獨(dú)立可以完成,當(dāng)sym_in_buf=6時(shí),需要由粗調(diào)電路完成一個(gè)SKP有序集的刪除,同樣的需要對(duì)已刪除的SKP字符數(shù)量進(jìn)行計(jì)數(shù)。當(dāng)sym_in_buf>6時(shí),由讀時(shí)鐘域產(chǎn)生將要寫滿的狀態(tài)。同樣的,由于兩端時(shí)鐘偏差有限,在出現(xiàn)即將寫滿的狀態(tài)時(shí),在有限的周期內(nèi),數(shù)據(jù)的讀寫操作仍是安全的。另外值得注意的是,由于存在在即將寫滿或者讀空的狀態(tài)時(shí),仍然有有限周期數(shù)的安全讀寫操作時(shí)間,且在出現(xiàn)最壞情況下的時(shí)鐘偏差時(shí),緊跟著必定是SKP有序集,可以補(bǔ)償已經(jīng)出現(xiàn)的時(shí)鐘偏差,所以對(duì)于使用本方案且運(yùn)行在GEN1/2的設(shè)備,不會(huì)由產(chǎn)生的時(shí)鐘偏差造成讀寫錯(cuò)誤。水線設(shè)置電路需要準(zhǔn)確的監(jiān)測(cè)當(dāng)前存儲(chǔ)單元電路中存儲(chǔ)的有效字節(jié)的數(shù)量,并且需要產(chǎn)生精確的控制信號(hào)來引導(dǎo)時(shí)鐘偏差的補(bǔ)償工作。
[0046]當(dāng)設(shè)備運(yùn)行在PCIE3.0時(shí),產(chǎn)生控制信號(hào)的方式不變。但是彈性緩存需要對(duì)SKP進(jìn)行添加或者刪除的數(shù)量必須是4個(gè)或者是8個(gè),但是本方案中為了節(jié)省面積和減小延遲,將彈性緩存的深度定位8,且在存儲(chǔ)空間中每次對(duì)SKP字符的刪除單位都是I個(gè),因此當(dāng)設(shè)備運(yùn)行在PCIE3.0時(shí),水線設(shè)置模塊除了需要準(zhǔn)確的通知粗調(diào)電路,完成多少個(gè)字符數(shù)量的SKP字符的刪除,且粗調(diào)電路需要記錄已經(jīng)刪除的SKP字符的個(gè)數(shù)。SKP字符的添加工作由讀時(shí)鐘域根據(jù)水線設(shè)置的控制信號(hào),使讀指針保持來獨(dú)立完成,為了滿足協(xié)議中對(duì)GEN3SKP添加或者刪除的數(shù)量規(guī)定,因此在讀時(shí)鐘域需要對(duì)已刪除或者添加的SKP字符數(shù)量進(jìn)行計(jì)數(shù)。
[0047]如圖9所示,讀指針產(chǎn)生電路負(fù)責(zé)根據(jù)讀時(shí)鐘讀出存儲(chǔ)單元中存儲(chǔ)的有效數(shù)據(jù)字節(jié),并負(fù)責(zé)完成時(shí)鐘偏差補(bǔ)償工作中對(duì)SKP字符的添加和部分刪除工作,根據(jù)水線設(shè)置電路產(chǎn)生的不同控制信號(hào)來完成SKP字符的添加或者刪除。主要由加法器和選擇器組成,其中加法器為讀指針增加功能,而選擇器則根據(jù)控制信號(hào)選擇不同的數(shù)值作為加法器輸入信號(hào)。
[0048]當(dāng)水線設(shè)置電路監(jiān)測(cè)到存儲(chǔ)單元內(nèi)存儲(chǔ)的有效字節(jié)的數(shù)據(jù)字節(jié)數(shù)量低于水線時(shí),且讀時(shí)鐘域監(jiān)測(cè)到存儲(chǔ)單元中存儲(chǔ)的字節(jié)數(shù)據(jù)有SKP字符時(shí),讀指針通過保持的方式來添加一個(gè)SKP字符,因?yàn)槊看螌?duì)SKP字符的刪除或者添加的個(gè)數(shù)最多為2個(gè),因此需要記錄已經(jīng)添加的SKP字符的數(shù)量,達(dá)到數(shù)量之后,即使水線設(shè)置電路產(chǎn)生的低于水線的信號(hào)仍然有效也不再向存儲(chǔ)單元中添加SKP字符。當(dāng)水線設(shè)置電路監(jiān)測(cè)到存儲(chǔ)單元內(nèi)存儲(chǔ)的有效字節(jié)的數(shù)量超過水線時(shí),且讀時(shí)鐘域監(jiān)測(cè)到存儲(chǔ)單元中存在SKP有序集時(shí),讀指針通過跳躍來完成SKP字符的刪除,刪除的數(shù)量最多為2個(gè),因此同樣需要記錄添加的SKP字符的數(shù)量。
[0049]對(duì)于運(yùn)行在GEN3的設(shè)備,由于在最壞情況下產(chǎn)生的時(shí)鐘偏差為7,又由于本方案中可以緩存的字符數(shù)最多為4個(gè),所以需要添加相應(yīng)的裝置,解決在出現(xiàn)的偏差值大于彈性緩存能夠緩存的字符數(shù)的問題。在最壞的工作情況下,假設(shè)讀時(shí)鐘的頻率小于寫時(shí)鐘的頻率,由于時(shí)鐘偏差的累積,彈性緩存存儲(chǔ)空間中存儲(chǔ)的有效字節(jié)的數(shù)量將有可能出現(xiàn)sym_in_buf>6的情況,即即將出現(xiàn)寫滿的情況。如果此時(shí)仍然正在發(fā)送最大長度的數(shù)據(jù)包,則發(fā)送端根據(jù)規(guī)則不能夠插入SKP有序集來補(bǔ)償時(shí)鐘偏差,因此讀時(shí)鐘域必須對(duì)此情況作出合理的處理。本方案在此邊界情況采取了措施,當(dāng)出現(xiàn)sym_in_buf>6時(shí),讀時(shí)鐘域在產(chǎn)生信號(hào)表明即將寫滿時(shí),同時(shí)產(chǎn)生一個(gè)控制信號(hào),來啟動(dòng)位于讀時(shí)鐘的寄存器,使讀時(shí)鐘域一次性讀出兩個(gè)字符,并行的放入位寬為FIFO兩倍的寄存器中,按照數(shù)據(jù)寫入存儲(chǔ)單元的順序?qū)⑾葘懭氪鎯?chǔ)單元的字符放入寄存器的高位,剩余的一個(gè)字符放入低位,通過移位的方式將兩個(gè)字符輸出,如此將存儲(chǔ)單元中的有效的字節(jié)數(shù)量控制在sym_in_buf〈=6。當(dāng)存儲(chǔ)單元中有效字節(jié)滿足這個(gè)規(guī)則時(shí),將讀時(shí)鐘域的寄存器使能無效,數(shù)據(jù)開始正常傳輸。在接收到SKP有序集期間,循環(huán)采用此操作來保證不會(huì)出現(xiàn)寫時(shí)鐘覆蓋已寫入的數(shù)據(jù),直到接收到SKP有序集通過刪除SKP字符來完成時(shí)鐘偏差的補(bǔ)償。在最壞的工作情況下,假設(shè)讀時(shí)鐘頻率大于寫時(shí)鐘的頻率,由于時(shí)鐘偏差的累積,彈性緩存存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量可能會(huì)出現(xiàn)sym_in_buf〈2的情況,即即將出現(xiàn)讀空的狀態(tài)。如果此時(shí)正在進(jìn)行最大長度的數(shù)據(jù)包的讀寫,則發(fā)送端根據(jù)規(guī)定不能插入SKP有序集補(bǔ)償時(shí)鐘偏差,因此在讀時(shí)鐘域應(yīng)作出合理的操作。本方案在此邊界情況采取了措施,當(dāng)出現(xiàn)sym_in_buf〈2時(shí),讀時(shí)鐘域在產(chǎn)生信號(hào)表明即將出現(xiàn)讀空的狀態(tài)的同時(shí),產(chǎn)生一個(gè)短周期數(shù)的Halt信號(hào),將供給彈性緩存上游的邏輯電路的時(shí)鐘暫時(shí)關(guān)閉,停滯上游邏輯的操作過程,同時(shí)讀時(shí)鐘域在此過程中停止讀出數(shù)據(jù),寫時(shí)鐘域照常寫入數(shù)據(jù),讀寫指針的距離拉開。之后數(shù)據(jù)的讀寫操作恢復(fù)正常,在將最大長度的數(shù)據(jù)包傳遞完成之前,循環(huán)使用此操作,直到接收到SKP有序集,通過添加SKP字符來完成時(shí)鐘偏差的補(bǔ)償。值得注意的是,此種邊界情況只有在發(fā)送PCIE最大長度的數(shù)據(jù)包時(shí)才會(huì)出現(xiàn),因此需要將這兩種措施進(jìn)行選通使能,只有在邊界情況下才會(huì)工作。
[0050]以上所述的僅是本發(fā)明的優(yōu)選實(shí)施方式,本發(fā)明不限于以上實(shí)施例??梢岳斫?,本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和構(gòu)思的前提下直接導(dǎo)出或聯(lián)想到的其他改進(jìn)和變化,均應(yīng)認(rèn)為包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒ǎ涮卣髟谟?所述方法主要針對(duì)SKP的刪除工作,將SKP的刪除分為兩部分,第一部分在寫入彈性緩存存儲(chǔ)單元之前,完成大部分時(shí)鐘偏差的補(bǔ)償工作,屬于粗調(diào)部分;第二部分在寫入彈性緩存存儲(chǔ)單元之后,屬于微調(diào)部分,具體步驟如下: 步驟一:粗調(diào)部分 由寫時(shí)鐘域根據(jù)存儲(chǔ)單元的存儲(chǔ)信息獨(dú)立完成SKP的刪除工作,具體操作由寫入控制電路根據(jù)水線設(shè)置電路控制信號(hào)屏蔽寫指針的寫操作來完成; 步驟二:微調(diào)部分 每次只對(duì)一個(gè)SKP字符進(jìn)行處理,由讀時(shí)鐘域根據(jù)水線設(shè)置電路控制讀指針的跳躍來完成; 步驟三:SKP添加 由讀時(shí)鐘域根據(jù)水線設(shè)置電路控制讀指針保持來獨(dú)立完成; 步驟四:邊界預(yù)防 水線設(shè)置電路時(shí)刻監(jiān)測(cè)存儲(chǔ)單元電路中存儲(chǔ)的有效字節(jié)的數(shù)量,當(dāng)出現(xiàn)邊界情況,由讀時(shí)鐘域控制預(yù)取寄存器啟動(dòng)或者產(chǎn)生截流信號(hào)來預(yù)防出現(xiàn)無法補(bǔ)償?shù)钠睢?br>
2.根據(jù)權(quán)利要求1所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒ǎ涮卣髟谟谒龇椒òㄒ韵虏襟E: 1)數(shù)據(jù)由對(duì)端設(shè)備發(fā)送端·將適合發(fā)送的數(shù)據(jù)結(jié)構(gòu)由并串轉(zhuǎn)換器將并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),通過差動(dòng)發(fā)送器將數(shù)據(jù)驅(qū)動(dòng)到鏈路上,以差分信號(hào)的方式傳遞到本端差動(dòng)接收器; 2)時(shí)鐘恢復(fù)電路通過串行比特流恢復(fù)出接收數(shù)據(jù)的時(shí)鐘信號(hào),并以此恢復(fù)時(shí)鐘將數(shù)據(jù)通過并串轉(zhuǎn)換電路轉(zhuǎn)換為并行數(shù)據(jù); 3)將數(shù)據(jù)發(fā)送到彈性緩存部分進(jìn)行時(shí)鐘偏差去除之前,確認(rèn)哪些比特信息為有效信息,即對(duì)數(shù)據(jù)的開頭和結(jié)尾進(jìn)行識(shí)別; 4)符號(hào)鎖定和塊對(duì)齊會(huì)產(chǎn)生數(shù)據(jù)鎖定信號(hào),表明已經(jīng)可以正確的識(shí)別數(shù)據(jù)信息; 5)輸入到本方案中的數(shù)據(jù),默認(rèn)為已經(jīng)經(jīng)過數(shù)據(jù)的識(shí)別與定位操作,為有效的并且能夠被正確識(shí)別的數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,其特征在?所述方法能夠向下兼容PCIE1.0/2.0。
4.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,其特征在?兩級(jí)同步采用上升沿和下降沿,精確監(jiān)測(cè)存儲(chǔ)單元中有效的字節(jié)數(shù)。
5.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,其特征在?水線設(shè)置電路精確監(jiān)測(cè)存儲(chǔ)單元中存儲(chǔ)的有效字節(jié)的數(shù)量,并根據(jù)數(shù)量產(chǎn)生刪除或者添加SKP的命令,并控制刪除和添加的SKP字符的數(shù)量。
6.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒ǎ涮卣髟谟?適用于PCIE1.0/2.0/3.0的序列檢測(cè)電路,能夠正確的檢測(cè)SKP有序集。
7.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,其特征在?讀指針采用讀時(shí)鐘域與寫時(shí)鐘域相互配合,寫指針屏蔽、讀指針跳躍、讀指針保持、讀時(shí)鐘域預(yù)取緩存、停止向上層邏輯提供時(shí)鐘的方法來整體控制偏差的范圍。
8.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒ǎ涮卣髟谟?寫指針采用寫指針屏蔽,來完成SKP字符大數(shù)量刪除。
9.根據(jù)權(quán)利要求2所述一種適用于PCIE3.0的時(shí)鐘偏差補(bǔ)償?shù)姆椒?,其特征在?邊界情況下,通過預(yù)取或者停止 提供給上層的時(shí)鐘來完成大時(shí)鐘偏差的控制。
【文檔編號(hào)】G06F1/04GK103713689SQ201310718851
【公開日】2014年4月9日 申請(qǐng)日期:2013年12月24日 優(yōu)先權(quán)日:2013年12月24日
【發(fā)明者】林谷, 王龍, 李冰, 丁賢根 申請(qǐng)人:江蘇華麗網(wǎng)絡(luò)工程有限公司