<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設(shè)計應(yīng)用 > PCI-Express2.0協(xié)議層的數(shù)字驗證及調(diào)試解決方案

          PCI-Express2.0協(xié)議層的數(shù)字驗證及調(diào)試解決方案

          作者: 時間:2011-02-23 來源:網(wǎng)絡(luò) 收藏

          L0s/L1級電源狀態(tài)管理通過將鏈路置于電氣空閑(E-IDLE)下來降低能耗,因此要求鏈路雙方設(shè)備都能夠?qū)崿F(xiàn)L0s,快速的進入或退出電氣空閑狀態(tài)。L1相對于L0會進一步降低功耗。從PCIe1.0開始,L0s級電源管理就是調(diào)試的一個難題。鏈路寬度降低(Downconfigure)和提升(Upconfigure)是根據(jù)鏈路數(shù)據(jù)傳輸流量控制而定,只要滿足系統(tǒng)的吞吐率,可以適當?shù)年P(guān)閉原本活動的鏈路,以達到減小能耗。同樣,當系統(tǒng)吞吐率要求增大時,能夠開啟被關(guān)閉的鏈路。鏈路的傳輸速率也可以在2.5Gbps和5Gbps之間切換,以最小的系統(tǒng)能耗完成數(shù)據(jù)傳輸任務(wù)。
            
            一.PCIe2.0技術(shù)簡介
            
            PCIe是串行的點對點的互連總線。最初PCIe是為取代AGP總線而設(shè)計,目前已經(jīng)成為主流的I/O互連總線。PCIe提供了一個可升級的構(gòu)架,傳輸帶寬隨著鏈路的寬度增加而增加。PCIe2.0較PCIe的主要變化是:速度增加,從2.5Gbps增加到5Gbps,并且速度可以協(xié)商;電氣空閑(Electrical Idle)的進入和退出,減少能耗并簡化了設(shè)計,增強系統(tǒng)可靠性;鏈路寬度降級,減少能耗。鏈路寬度提升,增加系統(tǒng)額外帶寬。
            
            PCIe2.0為系統(tǒng)帶來優(yōu)化的同時,也為設(shè)計和工程師帶來了挑戰(zhàn)。依據(jù)PCIe2.0的主要變化,要求設(shè)備有能力捕獲鏈路上所有層面的協(xié)議。Tektronix TLA7000系列邏輯分析儀和TLA7S16 /TLA7S08模塊是極好的針對PCIe2.0調(diào)試和驗證的工具。
            
            二.PCIe系統(tǒng)構(gòu)架

            PCIe是一個三層結(jié)構(gòu)的系統(tǒng),包括物理層(邏輯子層和電氣子層),數(shù)據(jù)鏈路層以及事務(wù)層。事務(wù)層主要負責(zé)事務(wù)的請求/完成、TLP流控制和消息通知。數(shù)據(jù)鏈路層主要負責(zé)確保數(shù)據(jù)在鏈路上正確、可靠的發(fā)送和接收。物理層分為兩個部分:邏輯子層和電氣子層。電氣子層主要負責(zé)發(fā)送和接收信號;邏輯子層主要負責(zé)數(shù)據(jù)加擾/解擾、8b/10b編碼、封包等。另外,鏈路的協(xié)商是在邏輯子層完成的。TLA7S16串行邏輯分析模塊定位于捕獲邏輯子層、數(shù)據(jù)鏈路層和事務(wù)層的數(shù)據(jù)進行協(xié)議分析,并且探測方式不會影響鏈路的信號完整性。

          三.數(shù)據(jù)率訓(xùn)練(Training)過程的捕獲與分析

            所有的PCIe2.0鏈路在初始階段必須工作在2.5bps速度下,這主要是考慮到向下兼容的能力。此外,當系統(tǒng)吞吐率要求不高的時候,也可以從5Gbps的速據(jù)降到2.5Gbps以減少能耗。因此,測試設(shè)備首先必須能夠探測到速度的變化,然后通過捕獲的數(shù)據(jù)分析速度切換是否按照規(guī)范要求進行。
            
            能否在速度切換開始時觸發(fā)并捕獲數(shù)據(jù)是揭示鏈路上所發(fā)起序列的異常問題的關(guān)鍵所在。通常,當發(fā)起速度切換后,需要對第一個訓(xùn)練序列(TS)進行捕獲。TLA7S16/08模塊的序列觸發(fā)功能可以對任意一條通道進行多達連續(xù)16個符號的觸發(fā)設(shè)定。序列觸發(fā)提供了對任意一個PCIe2.0的有序集中任意域的設(shè)定。

            很多情況下,期望的觸發(fā)條件由于鏈路中的協(xié)議出現(xiàn)了錯誤而無法被偵測到,這會減緩甚至被迫中斷調(diào)試。在此期間,工程師往往不得不隨機捕獲數(shù)據(jù),手動地去分析數(shù)據(jù)和協(xié)議的正確性。TLA7S16/08的序列觸發(fā)可以幫助工程師通過觸發(fā)鏈路中單獨的通道去發(fā)現(xiàn)問題的根源。出現(xiàn)問題的通道暫時被忽略,協(xié)議的驗證和分析將得以進行下去。
            
            只要串行邏輯分析儀被觸發(fā),采集到的數(shù)據(jù)將會顯示出完整的2.5Gbps到5Gbps速度切換的過程。工程師能非常直觀地發(fā)現(xiàn)有問題的通道。另外,所有采集到的數(shù)據(jù)都會按照協(xié)議規(guī)范進行解碼。

          當系統(tǒng)完成2.5Gbps速度的訓(xùn)練后,鏈路會進入L0狀態(tài)。在鏈路雙方的訓(xùn)練中會通知支持的速度,如果雙方都支持5Gbps,則鏈路會嘗試著將速度切換到5Gbps。當鏈路處在L0狀態(tài)時,會切換到Recovery狀態(tài),并且開始進行5Gbps速度切換的訓(xùn)練。當完成訓(xùn)練序列后,2.5Gbps的鏈路會進入電氣空閑狀態(tài),接著鏈路會退出電氣空閑,鏈路雙方將運行在5Gbps的速度上,同時發(fā)起電氣空閑退出有序集(EIEOS),緊接著通過其他的訓(xùn)練序列,速度切換將發(fā)生在Recovery.Speed狀態(tài)中,最后鏈路返回到L0狀態(tài)下。
            
            請注意,串行邏輯分析儀會將每一條鏈路上發(fā)生的每一個符號和相應(yīng)的解碼信息一并顯示。假如其中有一條通道發(fā)生誤碼的話,這些誤碼將會被顯示在單獨的通道上,用戶能通過鏈路詳細信息(Link Detail Column)中的內(nèi)容快速地判斷出在某一通道上是否存在問題。傳統(tǒng)的協(xié)議分析儀僅能得到有錯誤幀的提示。
           PCIe中的ASPM(Active State Power Management)是為了降低能耗而設(shè)計,然而PCIe系統(tǒng)出現(xiàn)的問題大部分是在電源管理期間。
            
            當TLP Configuration Write命令發(fā)起,向寄存器寫入了一個錯誤的數(shù)據(jù),就會引起系統(tǒng)的異常。這種問題通常發(fā)生在ASPM使能期間,硬件和軟件出現(xiàn)了配合問題。為了捕獲這些異常事件,串行邏輯分析儀必須要捕獲到鏈路在退出以及進入L0s狀態(tài)過程中的TLP數(shù)據(jù)包。分析儀為了能夠進行極限測試,在退出EIDLE狀態(tài)過程中,必須盡可能多的捕獲FTS包,即盡可能快地探測鏈路的變化,及早和被測系統(tǒng)實現(xiàn)同步和鎖定。TLA7S16/08串行邏輯分析儀通常僅需要12個FTS包,就可以完成退出EIDLE后鏈路的鎖定。及時、快速的鏈路數(shù)據(jù)鎖定避免了在L0開始時有效TLP包的丟失。傳統(tǒng)的協(xié)議分析儀可能需要上千個FTS包才能完成幀同步。圖3說明了分析儀如何捕獲到鏈路進入L0s的狀態(tài)。

          當鏈路退出EIDLE需要發(fā)送FTS包,發(fā)送FTS包的個數(shù)在鏈路訓(xùn)練的過程中已經(jīng)確定了。如果分析儀在退出EIDLE過程中不能鎖定數(shù)據(jù),就無法采集到TLP Configuration Read包,更無法分析和驗證包內(nèi)攜帶的數(shù)據(jù)信息。

            數(shù)據(jù)包級別的觸發(fā)功能再配合實時的數(shù)據(jù)過濾功能,可以進一步縮小需要尋找的感興趣的TLP和DLLP包的范圍。

            另一個可能發(fā)生的事件是當ASPM使能后,出現(xiàn)了TLP丟包的情況。在正常的運行環(huán)境中(非L0s狀態(tài)),所有的TLP包能夠被正確的捕獲。在電源管理階段,如果鏈路不能正常工作,很可能是TLP沒有正確的發(fā)起。分析儀會捕獲所有的TLP包,按照每一個TLP序列標識符進行排序,如果有TLP包丟失的情況,很容易被發(fā)現(xiàn)。

            五.鏈路寬度協(xié)商過程分析

            一些調(diào)試、驗證的挑戰(zhàn)是和鏈路動態(tài)切換有關(guān)的。PCIe規(guī)范允許鏈路雙方提升或者降低鏈路的寬度。例如如果鏈路的一方在新的鏈路寬度訓(xùn)練中出錯,鏈路將重新進入Recovery狀態(tài)。TLA7S16/08串行邏輯分析儀能夠驗證鏈路寬度訓(xùn)練的整個過程。同樣,當發(fā)起鏈路寬度訓(xùn)練序列后,鏈路會發(fā)起EIEOS,接著進入EIDLE狀態(tài)。當鏈路退出EIDLE,分析儀會捕獲完成鏈路寬度訓(xùn)練的數(shù)據(jù)包(圖4)。
          當鏈路退出EIDLE,同樣需要額外的TS包使得鏈路恢復(fù)到正常的狀態(tài)。串行邏輯分析儀同樣能夠捕獲完整的過程。

           六.多總線時間相關(guān)分析

            隨著電子系統(tǒng)變得越來越復(fù)雜,對系統(tǒng)并行總線和高速串行總線的整合設(shè)計變的非常的普遍。在許多應(yīng)用中,不可能僅對PCIe總線單獨進行分析,例如PCIe總線向控制器發(fā)起內(nèi)存讀數(shù)據(jù)請求,接著控制器向DDR內(nèi)存進行讀操作。如果DDR讀數(shù)據(jù)使用了錯誤的地址,將會導(dǎo)致PCIe請求到錯誤的數(shù)據(jù),并可能引起系統(tǒng)崩潰。邏輯分析儀是唯一能夠?qū)CIe、控制器總線和DDR內(nèi)存在單一儀器內(nèi)進行分析的設(shè)備,所有的數(shù)據(jù)樣點都是有時間相關(guān)的時間標記。
            
            TLA7S16/08配合通用的邏輯分析儀模塊(TLA7BBx)可以提供PCIe鏈路和其他并行總線時間相關(guān)的調(diào)試能力。TLA7BBx以最高50GS/s采樣率對136路信號進行高精度的定時采集,還可以通過外時鐘同步進行最高速度為1.4GHz的同步分析。邏輯分析儀能夠獲得這些并行信號,串行分析模塊可以采集到PCIe鏈路的數(shù)據(jù)。這樣的時間相關(guān)的信息能幫助我們解決很多調(diào)試、驗證問題。

            七.信號探測方式

            對PCIe系統(tǒng)的探測必須遵循不能影響到鏈路正常特性的原則。在物理層面上,要求探測不能破壞原來鏈路的信號完整性;在數(shù)據(jù)層面上,要求不能改變原有系統(tǒng)的時序特性。Tektronix提供的P6701S/P6704S/P6708S/P6716S系列內(nèi)插探頭,提供對被測信號的高阻探測,與傳統(tǒng)的協(xié)議分析儀先將信號緩存再輸出的結(jié)構(gòu)不同,而是直接將信號輸入到采集系統(tǒng)中。此外,P6708/P6716探頭還支持芯片級的PCIe信號探測。

            總結(jié)

            PCIE2.0的驗證充滿著各種挑戰(zhàn),對芯片和系統(tǒng)性能的驗證;5Gbps的數(shù)據(jù)傳輸率;最小化系統(tǒng)開銷以及高級電源管理(ASPM);復(fù)雜的協(xié)議和瞬變的故障都使得PCIE2.0的調(diào)試變得困難重重。Tektronix公司TLA7Sxx系列串行邏輯分析儀模塊提供強大的硬件調(diào)試性能,配合TLA7000邏輯分析儀主機以及其他測試方案,最大程度滿足被測系統(tǒng)的邏輯、協(xié)議測試。



          關(guān)鍵詞: 測試 測試測量 泰克

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();