新聞中心

EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > 干貨|一文幫你講透復(fù)位電路,復(fù)位電路工作原理詳解,圖文+案例

干貨|一文幫你講透復(fù)位電路,復(fù)位電路工作原理詳解,圖文+案例

作者: 時間:2024-07-16 來源:李工談元器件 收藏

今天來給大家簡單介紹一下,主要內(nèi)容有:

本文引用地址:http://2s4d.com/article/202407/461041.htm

一、復(fù)位電路概述

復(fù)位信號在數(shù)字電路里面的重要性僅次于時鐘信號。對電路的復(fù)位往往是指對觸發(fā)器的復(fù)位,也就是說電路的復(fù)位中的這個“電路”,往往是指觸發(fā)器,這是需要注意的。

有的電路需要復(fù)位信號,就像是有的電路需要時鐘信號那樣,而有的電路是不需要復(fù)位信號的。復(fù)位又分為,這兩種各有優(yōu)缺點。

下面我們主要來說說復(fù)位信號的用途和不需要復(fù)位信號的情況。

1、復(fù)位的目的

復(fù)位最基本的目的就是使電路(主要是觸發(fā)器)進(jìn)入一個能穩(wěn)定操作的確定狀態(tài)(主要是觸發(fā)器在在某個確定的狀態(tài)),主要表現(xiàn)為下面兩點:

1)使電路在復(fù)位后從確定的初始狀態(tài)運行:

  • 上電的時候,為了避免上電后進(jìn)入隨機(jī)狀態(tài)而使電路紊亂,這個時候你就需要上電復(fù)位

  • 有時候,電路在某個狀態(tài)下,你想或者別人要求你從電路的初始狀態(tài)開始進(jìn)行延時你的電路功能,這個時候你就要對你的電路進(jìn)行復(fù)位,讓它從最初的狀態(tài)開始運行。

2)使電路從錯誤狀態(tài)回到可以控制的確定狀態(tài):

  • 有的時候,你的電路發(fā)生了異常,比如說狀態(tài)機(jī)跑飛了、系統(tǒng)供電炸了之類的,總之就是電路運行得不正常了,這個時候你就要對電路進(jìn)行復(fù)位,讓它從錯誤的狀態(tài)回到一個正常的狀態(tài)。

上面說的都是和實際電路有關(guān)的,下面我們就從電路仿真的角度看一下復(fù)位信號的重要性。

2、復(fù)位電路仿真的要求

復(fù)位信號在仿真里面主要是使電路仿真時具有可知的初始值:

在仿真的時候,信號在初始狀態(tài)是未知狀態(tài)(也就是所謂的x,不過對信號初始化之后的這種情況除外,因為仿真的時候?qū)π盘柍跏蓟褪切盘栍辛顺跏贾担@就不是x了)。

對于數(shù)據(jù)通路(數(shù)字系統(tǒng)一般分為數(shù)據(jù)通路和控制通路,數(shù)據(jù)通路一般是對輸入的數(shù)據(jù)進(jìn)行處理,控制通路則是對運行的情況進(jìn)行操作),在實際電路中,只要輸入是有效數(shù)據(jù)(開始的時候可能不是有效的),輸出后的狀態(tài)也是確定的;在仿真的時候,也是輸入數(shù)據(jù)有效了,輸出也就確定了。也就是說,初始不定態(tài)對數(shù)據(jù)通路的影響不明顯。

對于控制通路,在實際電路中,只要控制通路完備(比如說控制通路的狀態(tài)機(jī)是完備的),即使初始狀態(tài)即使是不定態(tài),在經(jīng)過一定的循環(huán)后,還是能回到正確的狀態(tài)上;然而在仿真的時候就不行了,仿真的時候由于初始狀態(tài)為未知態(tài),控制電路一開始就陷入了未知態(tài);仿真跟實際電路不同,仿真是“串行”的,仿真時控制信號的初始不定態(tài)會導(dǎo)致后續(xù)的控制信號結(jié)果都是不定態(tài),也就是說,初始的不定態(tài)對控制通道是致命的。

3、不需要復(fù)位信號的一些情況

復(fù)位信號很重要,但是并不是每一部分的電路都需要復(fù)位電路,一方面是復(fù)位電路也消耗邏輯資源、占用芯片面積,另一方面是復(fù)位信號會增加的復(fù)雜性(比如要考慮復(fù)位的策略、復(fù)位的布局布線等等)。

  • 當(dāng)某個電路的輸出在任何時刻都可以不受到復(fù)位信號的控制就有正確的值時,比如說數(shù)據(jù)通路中的對數(shù)據(jù)進(jìn)行處理的部分。

  • 在某些情況下,當(dāng)流水線的寄存器(移位寄存觸發(fā)器)在高速應(yīng)用中時,應(yīng)該去掉某些寄存器的復(fù)位信號以使設(shè)計達(dá)到更高的性能,因為帶復(fù)位的觸發(fā)器比不帶復(fù)位的觸發(fā)器更復(fù)雜,反應(yīng)也更慢。

對復(fù)位信號/電路有一定的概念后,下面我們就來說說復(fù)位的方式,也就是同步電路和異步電路以及它們的優(yōu)缺點。

二、

1、電路

同步復(fù)位是指復(fù)位信號在時鐘有效沿到來時才復(fù)位電路(主要是復(fù)位觸發(fā)器)。因此同步復(fù)位的復(fù)位信號受到時鐘信號的控制。同步復(fù)位的觸發(fā)器RTL代碼和電路如下所示:

同步復(fù)位的觸發(fā)器RTL代碼

同步復(fù)位的觸發(fā)器RTL電路

上面的電路在FPGA中容易綜合得到;也有可能綜合得到下面這樣的電路:                      

同步復(fù)位的觸發(fā)器RTL電路

2、同步復(fù)位的優(yōu)點

1)首先同步復(fù)位一般能確保電路是100%同步的,因為電路都是由同步時鐘觸發(fā)。

2)同步復(fù)位會綜合為更小的觸發(fā)器(更?。??感覺有點不太對,可能FPGA跟ASIC不一樣吧?)。從前面電路中我們也可以看到,復(fù)位電路僅僅是由一個普通的觸發(fā)器和一個與門構(gòu)成。

3)由于同步復(fù)位僅僅發(fā)生在時鐘的有效沿,當(dāng)外部的復(fù)位信號有毛刺時,時鐘可以當(dāng)做過濾毛刺的手段,也就是說同步復(fù)位受到復(fù)位信號的毛刺影響小。

4)當(dāng)復(fù)位信號是由內(nèi)部電路產(chǎn)生時,此時復(fù)位信號就有可能有毛刺,時鐘就可以過濾毛刺。也就是說,可以在那些使用內(nèi)部信號當(dāng)做復(fù)位信號的設(shè)計中,使用同步復(fù)位。

3、同步復(fù)位的缺點

1)使用同步復(fù)位可能使綜合工具無法分辨分辨復(fù)位信號和其他控制信號,導(dǎo)致進(jìn)行復(fù)位的控制邏輯遠(yuǎn)離觸發(fā)器(也就是說,并不是所有的ASIC庫都有內(nèi)置的同步復(fù)位邏輯,綜合工具可能把符合邏輯綜合到觸發(fā)器自身之外)。

例如對于帶同步復(fù)位和加載使能的觸發(fā)器,代碼如下所示:

同步復(fù)位和加載使能的觸發(fā)器代碼

綜合得到的電路圖如下所示,左邊是理想的電路,右邊是可能綜合出的電路:

理想的電路

綜合出的電路

這兩個電路的功能完全一樣,只不過下邊電路的復(fù)位控制邏輯(即復(fù)位與門)在多路復(fù)用器之外,也就是遠(yuǎn)離了觸發(fā)器。

解決方法:

  • 一方面這個只是綜合工具的問題,一般綜合工具會自動識別在敏感列表里面又在條件表達(dá)式信號中的第一個信號為復(fù)位信號。

  • 另一方面,可以在RTL代碼編寫的時候,加入相關(guān)的綜合指令,讓綜合的時候把復(fù)位邏輯靠近觸發(fā)器。

2)由于同步復(fù)位需要在時鐘沿的觸發(fā)下才能起作用,復(fù)位信號是以短脈沖的方式出現(xiàn)時,時鐘沿就有可能錯失這個復(fù)位信號,導(dǎo)致復(fù)位脈沖丟失,同步復(fù)位電路沒有起到作用,時序圖如下所示:

時序圖

解決辦法:

  • 一方面,可以采用脈沖捕捉電路。

  • 另一方面,可以將復(fù)位信號進(jìn)行脈沖擴(kuò)展,維持足夠長的時間,這個可以通過一個小的計數(shù)器實現(xiàn),如下圖所示。

添加應(yīng)該1個計數(shù)器

3)同步復(fù)位可能有組合邏輯延時,當(dāng)復(fù)位邏輯距離觸發(fā)器比較遠(yuǎn)時,這個時候就不能把觸發(fā)器當(dāng)做即時響應(yīng)復(fù)位信號的觸發(fā)器,而是有一定延時的觸發(fā)器,這個時候就有了復(fù)位信號偏移的問題,關(guān)于復(fù)位信號偏移的描述,我們將在中進(jìn)行描述。

解決方法:

  • 使用內(nèi)置的同步復(fù)位觸發(fā)器

  • 綜合的時候加入相關(guān)的綜合指令,和第一個類似。

4)我們前面說過,在由內(nèi)部組合邏輯的產(chǎn)生復(fù)位信號的設(shè)計中,推薦使用同步復(fù)位。其實這也是有缺點的,這是因為這樣產(chǎn)生復(fù)位信號的組合邏輯一方面在仿真的時候容易出現(xiàn)x態(tài),另一方面在實際電路中,這樣的復(fù)位信號容易被外部(多個)信號影響。

解決方法:不建議使用內(nèi)部產(chǎn)生的復(fù)位信號,使用異步復(fù)位。

5)門控時鐘的同步復(fù)位可能無效:使用門控時鐘的時候,由于復(fù)位信號依賴于時鐘,在復(fù)位信號發(fā)出的時候,時鐘可能關(guān)閉了。

這個時候就會導(dǎo)致實際的電路沒有被復(fù)位,如下圖所示:

實際的電路沒有被復(fù)位

實際的電路沒有被復(fù)位

解決方法:只能使用異步復(fù)位,并在時鐘恢復(fù)前移除異步復(fù)位。

6)總線設(shè)計中的同步復(fù)位問題:在總線控制中,系統(tǒng)上電復(fù)位的時候,我們要求不同芯片之間的總線工作在合理的狀態(tài)上(比如處于高阻態(tài)或者輸出)。

然而上電之后,由于系統(tǒng)時鐘可能仍未正常工作,上電(同步)復(fù)位就可能無效,這個時候各個模塊(芯片)就可能不會把總線接口設(shè)置為特定的狀態(tài),(當(dāng)多個模塊同時輸出數(shù)據(jù)到總線上時)就可能導(dǎo)致電平?jīng)_突,嚴(yán)重的話會燒壞接口。

解決辦法:為了防止芯片上電時內(nèi)部總線出現(xiàn)競爭,有兩種解決辦法。

(1)一種是采用異步上電復(fù)位,如下圖所示:

采用異步上電復(fù)位

這個時候使用了異步復(fù)位,使能信號oe輸出0,也就是有了初始的狀態(tài)。

(2)另一種方法是使用復(fù)位信號能直接撤銷三態(tài)使能的電路,如下所示:

使用復(fù)位信號能直接撤銷三態(tài)使能的電路

從電路圖中可以看到復(fù)位信號一方面控制了復(fù)位邏輯,另一方面控制了三態(tài)的使能端;這種技術(shù)簡化了復(fù)位-高阻這個條路徑的時序分析。

三、異步復(fù)位

1、異步復(fù)位電路

異步復(fù)位觸發(fā)器則是在設(shè)計觸發(fā)器的時候加入了一個復(fù)位引腳,也就是說復(fù)位邏輯集成在觸發(fā)器里面。

(一般情況下)低電平的復(fù)位信號到達(dá)觸發(fā)器的復(fù)位端時,觸發(fā)器進(jìn)入復(fù)位狀態(tài),直到復(fù)位信號撤離。帶異步復(fù)位的觸發(fā)器電路圖和RTL代碼如下所示:

帶異步復(fù)位的觸發(fā)器電路圖

帶異步復(fù)位的觸發(fā)器RTL代碼

2、異步復(fù)位的優(yōu)點

1)使用異步復(fù)位的最大好處就是復(fù)位路徑上沒有延時,如上面的圖所示,復(fù)位信號一直連接到觸發(fā)器的復(fù)位端口,而不是像同步復(fù)位那樣需要經(jīng)過一個復(fù)位控制邏輯(如與門)。這樣子就減少了外界信號的影響。

2)與時鐘沒有關(guān)系,不管時鐘上升沿有沒有到來,只要復(fù)位信號一有效,觸發(fā)器就會復(fù)位,也就是基本上做到實時性;由于與時鐘沒有關(guān)系,因此也可以用在門控時鐘里面。

3)綜合工具能自動推斷出異步復(fù)位而不必加入任何綜合指令。

3、異步復(fù)位的缺點

1)復(fù)位撤離問題

在介紹復(fù)位撤離問題之前,先說一下復(fù)位恢復(fù)時間和去除時間。

復(fù)位恢復(fù)時間:指撤離一個復(fù)位信號時,復(fù)位信號從有效跳變?yōu)闊o效的時刻與下一個有效時鐘沿之間的這段時間。

去除時間:撤離一個復(fù)位信號時,復(fù)位信號從有效跳變?yōu)闊o效的時刻 與上一個有效時鐘沿之間的這段時間(可以類比于觸發(fā)器的建立時間和保持時間)。如下圖所示:

復(fù)位恢復(fù)時間

上圖中,rst_n1是要求的復(fù)位恢復(fù)時間,rst_n2滿足復(fù)位恢復(fù)時間,rst_n3復(fù)位恢復(fù)時間不足。

去除時間

上圖中,rst_nA是要求的復(fù)位去除時間,rst_n2滿足復(fù)位去除時間,rst_n3復(fù)位去除時間不足。

從上面的兩個圖中可以知道,如果你想讓某個時鐘沿起作用(也就是采數(shù)據(jù)),那么你就應(yīng)該在“恢復(fù)時間”之前讓異步控制信號變無效;如果你想讓某個時鐘沿不起作用(也就是在這個時鐘沿依舊復(fù)位),那么你就應(yīng)該在“去除時間”過后使控制信號變無效。

異步復(fù)位信號的恢復(fù)和去除時間需要大于一定的時間,如果你的異步復(fù)位信號在這兩種情況之間(撤離),那么就沒法確定時鐘沿是否起作用了,即判斷不出是復(fù)位還是不復(fù)位(不復(fù)位即是D觸發(fā)器才輸入端的數(shù)據(jù))。

介紹了復(fù)位恢復(fù)時間和去除時間之后,我們就可以看看異步復(fù)位信號的問題了。由于異步復(fù)位信號與系統(tǒng)時鐘毫無關(guān)系,復(fù)位可以在隨時施加,也可以隨時撤離。在施加的時候復(fù)位信號的時候,不存在任何問題,因為這跟復(fù)位恢復(fù)時間扯不上關(guān)系。

但是,在撤離復(fù)位信號的情況下就有問題了,主要有兩個問題:

當(dāng)異步復(fù)位信號的撤離時刻在時鐘有有效沿附近時,就可能導(dǎo)致恢復(fù)時間或去除時間不足,即這個時候違背了復(fù)位恢復(fù)時間或去除時間,這時就可能導(dǎo)致觸發(fā)器的輸出端為亞穩(wěn)態(tài)(注意是可能),如下所示:

觸發(fā)器的輸出端為亞穩(wěn)態(tài)

但是并不是所有情況都會產(chǎn)生亞穩(wěn)態(tài),當(dāng)復(fù)位值和此時的的輸出相同時,就不會產(chǎn)生亞穩(wěn)態(tài),如下圖所示:

這是因為:復(fù)位信號翻轉(zhuǎn)的時候,如果復(fù)位信號判斷是低電平,輸出就復(fù)位即一定是低電平;

如果判斷復(fù)位信號是高電平,輸出信號就等于對輸入信號的采樣值。圖里面輸入信號就是低電平,不管你是復(fù)位還是不復(fù)位,輸出一直是低電平,沒有亞穩(wěn)態(tài)。

2)復(fù)位狀態(tài)不一致的問題:

復(fù)位信號很時鐘信號一樣,復(fù)位通過復(fù)位網(wǎng)絡(luò)到達(dá)各個觸發(fā)器。一方面,復(fù)位網(wǎng)絡(luò)具有非常大的扇出和負(fù)載,到達(dá)不同的觸發(fā)器存在不同的延時,也就是存在復(fù)位偏移,因此撤離異步復(fù)位的時刻也是不一樣的。

另一方面,由于時鐘網(wǎng)絡(luò)也存在時鐘偏移。這個時候異步復(fù)位信號就有可能在不同的觸發(fā)器的不同時鐘周期內(nèi)進(jìn)行撤離,也就是說異步復(fù)位的信號不一致,如下圖所示:

異步復(fù)位的信號不一致

異步復(fù)位信號a是異步復(fù)位信號源,異步復(fù)位信號b、c、d是到達(dá)觸發(fā)器的異步信號。

我們可以看到,b信號是在本周期就撤離了復(fù)位;c信號則由于復(fù)位恢復(fù)時間不滿足,則可能導(dǎo)致觸發(fā)器輸出亞穩(wěn)態(tài):而d信號則由于延時太長(但是滿足了復(fù)位去除時間),在下一個周期才撤離復(fù)位。

撤離問題的解決方法:異步復(fù)位的同步釋放

異步復(fù)位的同步釋放電路也稱為復(fù)位同步器,這個方法是將外部輸入的異步復(fù)位信號進(jìn)行處理,產(chǎn)生另外一個適合用于后面電路的復(fù)位信號,這個處理后的復(fù)位信號能夠異步復(fù)位電路中的觸發(fā)器,又不會存在撤離問題(因為經(jīng)過了同步);這個異步復(fù)位同步釋放的處理電路和RTL代碼如下所示:                

異步復(fù)位同步釋放的處理電路

異步復(fù)位同步釋放的RTL代碼

從圖中可以看到,這是用外部異步復(fù)位信號來復(fù)位一對觸發(fā)器,這對觸發(fā)器異步地驅(qū)動主復(fù)位信號,也就是這對觸發(fā)器產(chǎn)生電路需要的復(fù)位信號,這些復(fù)位信號再到達(dá)各個觸發(fā)器,然后進(jìn)行復(fù)位。

理想的異步復(fù)位同步釋放的時序如下所示:

理想的異步復(fù)位同步釋放的時序

上圖中,在理想的情況下,復(fù)位信號在兩級D觸發(fā)器上面的撤離時間可能不一樣,這個和復(fù)位信號傳輸?shù)降挠|發(fā)器位置和觸發(fā)器的時鐘沿有關(guān)。理想情況下的復(fù)位信號傳輸?shù)侥繕?biāo)觸發(fā)器都能夠同時撤離,并且不在時鐘有效沿附近。

實際情況一般不是那么理想的,當(dāng)不是理想的情況下,也就是說復(fù)位信號到達(dá)目標(biāo)寄存器存在時鐘偏移,并且復(fù)位信號有可能在時鐘有效沿附近撤離,這個時候復(fù)位器出現(xiàn)的問題就有三種:第一級OK,第二級出現(xiàn)問題;第一級出現(xiàn)問題,第二級OK;兩級都出現(xiàn)問題。

下面我們就來看看這三種情況下產(chǎn)生的復(fù)位信號是什么情況:

(1)第一級的撤離沒有問題,第二級的撤離出現(xiàn)在時鐘的有效沿附近,也就是說第二級的D觸發(fā)器的撤離時間不滿足復(fù)位恢復(fù)時間或者去除時間,這時候的時序圖如下所示:

時序圖

我們可以看到無論是觸發(fā)器判斷此刻是復(fù)位還是不復(fù)位,輸出都是一樣的,也就是說,輸出rst_n不是亞穩(wěn)態(tài),而是確定的值。

(2)第一級的撤離出現(xiàn)問題,第二級的撤離沒有問題,這時候的時序圖如下所示:

時序圖

我們可以看到,第一級觸發(fā)器雖然產(chǎn)生了亞穩(wěn)態(tài),但是由于第二級觸發(fā)器的存在,亞穩(wěn)態(tài)并沒有傳播下去,得到的復(fù)位信號依然是干凈的,只不過這個復(fù)位信號可能延長多一個周期而已(這是因為亞穩(wěn)態(tài)穩(wěn)定后的可能態(tài)引起的)。

(3)最極端的一種情況是,兩級的撤離都不滿足復(fù)位恢復(fù)時間或者去除時間,這時候的時序圖如下所示:

時序圖

我們可以看到第一級觸發(fā)器產(chǎn)生了亞穩(wěn)態(tài),但是由于第二級觸發(fā)器的存在,亞穩(wěn)態(tài)沒有傳播下去;雖然第二級觸發(fā)器的復(fù)位信號撤離也在時鐘有效沿附近,但是跟第一種情況一樣,第二級觸發(fā)器是不會產(chǎn)生亞穩(wěn)態(tài)的。因此即使是極端狀態(tài),輸出的復(fù)位信號也是干凈的。

由此我們可以看到,異步復(fù)位的同步撤離能夠有效地解決撤離導(dǎo)致的復(fù)位恢復(fù)時間或者去除時間不足的問題,同時把復(fù)位信號同步化,解決了復(fù)位撤離偏移的問題。

3)異步復(fù)位的抖動問題

當(dāng)外部輸入的異步復(fù)位信號產(chǎn)生毛刺時,任何滿足觸發(fā)器最小復(fù)位脈沖寬度的輸入都有可能引起觸發(fā)器復(fù)位,這問題是源頭上的問題,即使是使用上面的同步器,也還是有同樣的敏感問題,時序圖如下所示:

時序圖

解決方法:一個是使用同步復(fù)位,另一個就是過濾毛刺了,過濾毛刺和消抖的思路有點像,主要就是經(jīng)過一段延時之后,在經(jīng)過邏輯門判斷產(chǎn)生外部來的是不是真正復(fù)位信號,加上過濾毛刺信號部分的同步撤離電路和時序如下所示:        

加上過濾毛刺信號部分的同步撤離電路和時序

加上過濾毛刺信號部分的同步撤離電路和時序

在上圖中,我們可以看到,抖動問題得到了解決。然而這種方法還是有缺點的,主要就是這個延時電路的延時控制可能隨著環(huán)境而變化,而且延時的時間要合適長才行,絕對不能太短。

4)DFT的問題

在DFT的時候,如果異步復(fù)位信號不能直接被I/O引腳驅(qū)動,就必須將異步復(fù)位線和后面的的被驅(qū)動電路斷開,用來保證DFT掃描和測試能夠正確進(jìn)行。總之異步復(fù)位增加了DFT的復(fù)雜性。

四、復(fù)位策略——復(fù)位網(wǎng)絡(luò)

在數(shù)字電路里面,復(fù)位信號驅(qū)動了很多觸發(fā)器,僅次于時鐘,因此復(fù)位也往往形成或者使用復(fù)位網(wǎng)絡(luò)。

復(fù)位網(wǎng)絡(luò)的設(shè)計也是有值得斟酌的地方,例如,由于復(fù)位的扇出太大,全部的復(fù)位不能僅僅由一個端口驅(qū)動,也就是不能像下面一樣:

復(fù)位的扇出太大

既然上面的不行,那就改成下面的唄,也就是使用多各“并聯(lián)”的同步釋放,分擔(dān)一下負(fù)載壓力:

改進(jìn)的方案

然而這種方案還是有問題的,這是第一級的撤離出現(xiàn)問題,第二級的撤離沒有問題的時候,亞穩(wěn)態(tài)穩(wěn)定后的狀態(tài)可能不一樣,導(dǎo)致rst_n的復(fù)位不一致,有的復(fù)位可能會快/慢一個周期。

最后的方案是,先進(jìn)行同步釋放之后,同步后的復(fù)位信號又當(dāng)做各個部分的異步信號,然后進(jìn)行同步釋放,如下所示:

最終的方案

這樣先經(jīng)過前級的同步釋放之后,就不存在亞穩(wěn)態(tài)穩(wěn)定好導(dǎo)致的輸出rst_n不一致的問題了。

最后說一下多時鐘域的復(fù)位:在多時鐘域復(fù)位中,外部的異步復(fù)位信號的同步釋放應(yīng)該各自的時鐘進(jìn)行同步,比如異步FIFO中,寫時鐘域就用寫時鐘進(jìn)行同步釋放;讀時鐘域就用讀時鐘進(jìn)行同步釋放。

以上就關(guān)于復(fù)位電路的一些知識,希望能夠?qū)Υ蠹矣杏谩?/span>

原文鏈接:
https://mp.weixin.qq.com/s/doOtn0sEj0FC3E6Sp9wpzA



評論


相關(guān)推薦

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

關(guān)閉