本發(fā)明涉及一種用于PCIE電源可靠復(fù)位的方法。
背景技術(shù):
現(xiàn)有的復(fù)位方式包括冷復(fù)位,暖復(fù)位和熱復(fù)位三種。
冷復(fù)位:PCIE上電后便自行開始的初始化復(fù)位暖復(fù)位(鏈路關(guān)斷復(fù)位):在正常的操作中,鏈路關(guān)斷或者工作在低功耗的狀態(tài),PCIE核要求鏈路復(fù)位請求。一根從高到低的link_req_rst_not信號傳輸表示PCIE請求外部的邏輯復(fù)位PCIE,由PHY鏈路關(guān)斷引起的。
熱復(fù)位:上游設(shè)備(RC,SW上游端口,或者DM在RC模式)能夠熱復(fù)位下游設(shè)備(EP,SW上游端口,DM在EP模式),在熱復(fù)位bit被采樣到之后通過發(fā)送兩個連續(xù)的鏈路TS1有序集實現(xiàn)。熱復(fù)位也稱為‘訓(xùn)練復(fù)位’。相似于暖復(fù)位,下游設(shè)備要求外部邏輯復(fù)位PCIE。冷復(fù)位和暖復(fù)位都屬于基本復(fù)位,在之前的PCIE技術(shù)當(dāng)中,提到過基本復(fù)位可以通過兩種方式實現(xiàn):一種是通過PERST#
信號引發(fā);另一種是通過自主生成基本復(fù)位。PERST#信號引發(fā)的基本復(fù)位都是指PCIE系統(tǒng)中的一個邊帶信號,用來傳遞復(fù)位信號,然后觸發(fā)整個PCIE系統(tǒng)進行復(fù)位。
通過自主生成的基本復(fù)位指設(shè)備可以在不適用PERST#信號來復(fù)位自己的電路,而是在檢測到主電源加電的情況下自己產(chǎn)生基本復(fù)位信號復(fù)位自身電路。比如,在一個插卡上,設(shè)計有這種復(fù)位產(chǎn)生機構(gòu),對加電進行檢測并產(chǎn)生該設(shè)備的本地復(fù)位信號。如果設(shè)備檢測到它的電源超過規(guī)定的限度,它也必須產(chǎn)生一個自主的復(fù)位信號。
熱復(fù)位是指通過軟件的方式進行復(fù)位的方法,軟件在根復(fù)合體生成熱復(fù)位。通過發(fā)送PCIE中固有的TS1有序集來進行帶內(nèi)傳播,由上級向下游傳播,即只有根復(fù)合體和交換開關(guān)能夠產(chǎn)生熱復(fù)位,端點不能產(chǎn)生熱復(fù)位。
現(xiàn)有PCIE電源管理簡單,不適合超低功耗器件的應(yīng)用,電源管理的不同狀態(tài)切換容易造成包的丟失?,F(xiàn)有的復(fù)位方式,是當(dāng)設(shè)備采樣到復(fù)位信號之后,不關(guān)注鏈路上是否有包傳送,并且也不能夠確定鏈路上的包是否傳送成功,更不能確定鏈路上的包已經(jīng)傳送成功的位數(shù),而會直接復(fù)位,將準備復(fù)位的設(shè)備進行初始化,清空其內(nèi)存,復(fù)位它的寄存器,并沒有考慮到目前的數(shù)據(jù)傳輸情況和PCIE對端的情況,只是簡單的將要復(fù)位的設(shè)備進行復(fù)位,例如將設(shè)備寄存器重置,將緩沖區(qū)的數(shù)據(jù)清空,將鏈路上的包丟棄。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于克服上述不足,提供一種用于PCIE電源可靠復(fù)位的方法,能夠進一步降低功耗,提高對電源管理狀態(tài)切換的保護。
本發(fā)明的目的是這樣實現(xiàn)的:一種用于PCIE電源可靠復(fù)位的方法,所述方法在接收端收到將要進行復(fù)位的信號后,與發(fā)送端進行握手,通過握手信號來確定發(fā)送端正在發(fā)送的數(shù)據(jù)包是否傳輸完成,若傳輸完成則進行復(fù)位,若傳輸未完成,發(fā)送端停止繼續(xù)發(fā)包,并將記錄剩余數(shù)據(jù)包的發(fā)送狀態(tài),而接收端則對接收到的數(shù)據(jù)包進行接收并且對已經(jīng)接收到的數(shù)據(jù)包進行存儲,然后將握手的響應(yīng)信號返回給發(fā)送端,告知發(fā)送端可以對本設(shè)備進行復(fù)位操作。
其進一步的技術(shù)方案為:接收端(即鏈路下游的PCIE設(shè)備)進行如下操作:
1)保持接收任何的讀/寫請求但是不轉(zhuǎn)發(fā)到PCIE鏈路;
2)對于已經(jīng)接收到的任何寫請求和任何新的寫請求,操作如下:
2a)允許鏈路發(fā)送端完成所有的寫數(shù)據(jù)傳輸,停止發(fā)送發(fā)送端中的數(shù)據(jù);
2b)當(dāng)完成寫數(shù)據(jù)傳輸,生成接收端反饋給發(fā)送端的寫響應(yīng)錯誤位;
3)對于已經(jīng)接收到的讀請求或者任何新的寫請求,生成接收端錯誤響應(yīng)并反饋給發(fā)送端,數(shù)據(jù)阻塞到鏈路恢復(fù)后再次反送;
AXI橋主機接口依次執(zhí)行以下步驟:
4)停止生成任何新的讀和寫請求;
5)當(dāng)完成所有的這些操作之后,并且平滑復(fù)位信號(down_flush_not)被采樣到,同時在外部復(fù)位控制器生成復(fù)位(pcie_reset_n)信號,使接收端得以復(fù)位。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本發(fā)明通過在得知將要進行復(fù)位的信號后,對兩端交互的設(shè)備進行握手,通過握手信號來確定正在發(fā)送的包傳輸完成,發(fā)送端則停止繼續(xù)發(fā)包,并將記錄剩余包的發(fā)送狀態(tài),而接收端則對接收到的包進行接收并且對已經(jīng)接收到的包進行存儲,然后將握手的響應(yīng)信號返回給發(fā)送端,告知發(fā)送端可以本設(shè)備可以進行復(fù)位操作。這樣的握手復(fù)位可以保證包的不丟失,而且在復(fù)位之后可以正常的繼續(xù)傳輸還未傳完的數(shù)據(jù)報文,進一步節(jié)省了功耗和保證了數(shù)據(jù)報文傳輸?shù)恼_性和完整性。
具體實施方式
link_req_rst_not是指鏈路復(fù)位信號,down_flush_not信號是指鏈路上游設(shè)備要求下游設(shè)備復(fù)位信號,即平滑復(fù)位信號,要想觸發(fā)復(fù)位必須要在link_req_rst_not和down_flush_not信號上升沿和下降沿到來后開始復(fù)位。為了保護在下游設(shè)備復(fù)位時間段上有設(shè)備發(fā)送到鏈路上的數(shù)據(jù)不丟失,在復(fù)位的情況下必須要握手。在復(fù)位的時候,必須要終止所有的數(shù)據(jù)包傳輸。當(dāng)link_req_rst_not信號被采樣到的時候,操作如下:
1)保持接收任何的讀/寫請求但是不轉(zhuǎn)發(fā)他們到PCIE鏈路;
2)對于已經(jīng)接收到的任何寫請求和任何新的寫請求,操作如下:
2a)允許發(fā)送端完成所有的寫數(shù)據(jù)傳輸,停止發(fā)送端內(nèi)部的數(shù)據(jù)發(fā)送,并進行存儲;
2b)當(dāng)完成寫數(shù)據(jù)傳輸,生成接收端寫響應(yīng)錯誤位;
3)對于已經(jīng)接收到的讀請求或者任何新的寫請求,生成下游錯誤響應(yīng),并傳輸給發(fā)送端;
鏈路的發(fā)送端依次執(zhí)行以下步驟:
4)停止生成任何新的讀和寫請求;
5)當(dāng)完成所有的這些操作之后,并且接收端的響應(yīng)信號down_flush_not被采樣到并且在外部復(fù)位控制器生成pcie_reset_n信號,進行復(fù)位操作。
當(dāng)所有的這些操作已經(jīng)完成,才將down_flush_not信號置位(讓其有效)并且你能用它生成外部復(fù)位信號生成pcie_reset_n信號。
以上所述的僅是本發(fā)明的優(yōu)選實施方式,本發(fā)明不限于以上實施例。本領(lǐng)域技術(shù)人員在不脫離本發(fā)明的精神和構(gòu)思的前提下直接導(dǎo)出或聯(lián)想到的其他改進和變化,均認為包含在本發(fā)明的保護范圍之內(nèi)。