史軼男, 趙宏亮, 尹飛飛
(遼寧大學 物理學院,遼寧 沈陽 110036)
隨著智能手機的應用,人們對充電效率的要求不斷提高,各種快充協(xié)議芯片應運而生[1]。為了統(tǒng)一規(guī)范,USB-IF協(xié)會定義了基于雙相標記編碼解碼電路的USB Power Delivery 3.0協(xié)議[2]。
雙相標記編解碼是PD協(xié)議的核心模塊,使單線傳輸?shù)牟ㄐ沃屑劝瑫r鐘信息也包含真實數(shù)據(jù)[3-4],由于信號在傳輸過程中可能受到干擾產(chǎn)生突變,近年來研究人員提出一些優(yōu)化方案[5-7]。文獻[5]采用計邊沿個數(shù)的方法確定64 bit前導碼,再利用前導碼總的計數(shù)值求平均獲得解碼閾值,該方法計算復雜,無法發(fā)現(xiàn)錯碼,沒有錯誤恢復機制;文獻[6]采用前34 bit的前導碼,即初始2 bit加上4組8 bit的計數(shù)值求平均的方法獲得解碼閾值,該方法易出現(xiàn)解碼錯誤。文獻[5-6]只能解碼(300±75) kHz頻率的數(shù)據(jù),解碼范圍比較小,并且計算復雜,使電路的面積大,功耗高;文獻[7]利用有限長單位沖激響應濾波器計算解碼閾值,但計算精度較低,解碼范圍小,準確性較差,且沒有錯誤檢測和前導碼分辨機制,功能不全面,功耗也比較大。
本文提出的設計能夠彌補上述不足,解碼模塊增加6階有限長單位沖激響應濾波器,設定全面的前導碼預測機制、錯誤恢復機制。電路采用狀態(tài)機實現(xiàn)功能,且整個電路復用一個計數(shù)器,節(jié)省了面積和功耗;并增加了門控,在空閑時關閉解碼電路,節(jié)約能耗。增大信號的解碼頻率范圍,支持相鄰13個數(shù)據(jù)的傳輸周期連續(xù)變化7.13%。與其他參考文獻比較,解碼能力更強,電路結(jié)構(gòu)更簡單,面積顯著減小,功耗大幅降低,能有效降低成本。
雙相標記編解碼的規(guī)則是首先設定每一個數(shù)據(jù)的持續(xù)時間為一個單位時間長度,簡稱1個UI。在每個UI的開始,先將電平翻轉(zhuǎn),在每一個UI的中間處,若電平翻轉(zhuǎn),則數(shù)據(jù)代表1;否則代表0[7]。規(guī)定前導碼始終為1、0交替發(fā)送。
表1 性能對比
文獻[5]的解碼閾值計算方式如下:利用前導碼是1、 0交替的規(guī)則,所有前導碼的數(shù)據(jù)邊沿數(shù)量是固定值,可以通過當前收到輸入信號的邊沿個數(shù)確定是否為前導碼。對64 bit的前導碼過采樣,得到的總計數(shù)值除以64,乘以3/4,即可得到 3/4 UI的計數(shù)值作為解碼閾值,然后解碼后面真實的數(shù)據(jù)。
文獻[5]通過數(shù)邊沿的方式確定前導碼的范圍,如果前導碼出現(xiàn)錯碼、漏碼,那么就會把真實的數(shù)據(jù)當作前導碼,從而會發(fā)生解碼錯誤。由于沒有錯誤檢測機制,解碼錯誤也無法及時發(fā)現(xiàn);再加上計算量較大,整個電路面積很大,功耗很高。
文獻[6]的解碼閾值計算方式如下:前導碼最初始2 bit為一組,判斷先發(fā)0還是先發(fā)1,后面以檢測到12個邊沿即8 bit數(shù)據(jù)為一組,每一組與前面的解碼閾值求平均值作為新的解碼閾值,共求5次。以第1次的解碼閾值為例,如果前2 bit的計數(shù)值為C2 bit,第1次的8 bit計數(shù)值為CFirst-8 bit,那么解碼閾值的計算公式為:
(1)
解碼只對3/4 UI過采樣,有翻轉(zhuǎn)則為1;無翻轉(zhuǎn)則為0,剩余1/4 UI不采樣。采用式(1)得到的解碼閾值解出第2個8 bit,并將第2個8 bit的計數(shù)值和前面的值求平均,更新解碼閾值。此后的每8 bit數(shù)據(jù)的解碼和解碼閾值的更新以此類推,直到接收到34 bit前導碼后,解碼閾值固定不變。
文獻[6]的解碼閾值來自每8 bit一組求得的平均值,解碼范圍為(300±75) kHz。但如果數(shù)據(jù)的周期在此范圍內(nèi)不是固定值,而是變化的,那么就可能會出現(xiàn)解碼錯誤。如在18 MHz的采樣頻率下,若某一時刻求得解碼閾值為49(頻率367 kHz),此時實際能解碼的數(shù)據(jù)對應的解碼閾值范圍為49.00±12.25(頻率290~458 kHz)。當新的數(shù)據(jù)頻率為225~290 kHz,將會錯誤地認為解碼失敗,放棄解碼,并將電路復位。
文獻[7]的解碼閾值計算方式如下:首先利用有限長單位沖激響應濾波器使解碼閾值隨每個UI的長度變化而變化。每收到1 UI數(shù)據(jù),根據(jù)計數(shù)值與解碼閾值的關系,得到解碼值為1或0,并更新解碼閾值;然后在解碼模塊內(nèi)設置狀態(tài)機,通過狀態(tài)機跳轉(zhuǎn)實現(xiàn)解碼。文獻[7]的解碼模塊狀態(tài)轉(zhuǎn)換圖如圖1所示。
圖1 文獻[7]的解碼模塊狀態(tài)轉(zhuǎn)換
若空閑狀態(tài)IDLF下檢測到邊沿,則會跳轉(zhuǎn)到Counter-First狀態(tài),此狀態(tài)下檢測到邊沿時,如果計數(shù)值cnt 的值處于解碼閾值的3/4~5/4 thre之間,那么解碼值為0;如果cnt的值處于1/4~ 3/4 thre之間,那么跳轉(zhuǎn)到Counter-Second,繼續(xù)計數(shù)。在Counter-Second下有邊沿時,如果cnt值處于3/4~5/4 thre之間,那么解碼值為1。
文獻[7] 解碼閾值計算方式缺點如下:① 解碼閾值的計算精度較低,只能對周期以6.25%增加的連續(xù)10位解碼;② 沒有錯誤檢測機制,若出現(xiàn)錯碼、漏碼,則把一連串錯誤的解碼結(jié)果輸出;③ 沒有PD協(xié)議必需的前導碼檢測機制,無法分辨真實數(shù)據(jù),將增加其他模塊的負擔,不利于各個模塊的協(xié)同工作,且前導碼錯誤依然繼續(xù)解碼,產(chǎn)生不必要的功耗。
新型的解碼電路模塊結(jié)構(gòu)如圖2所示,該結(jié)構(gòu)包含濾波模塊、解碼模塊、預期模塊、輸出模塊。
圖2 新型的雙相標記解碼電路模塊結(jié)構(gòu)
解碼電路設計流程如圖3所示。
圖3 新型的雙相標記解碼電路設計流程圖
1) 輸入數(shù)據(jù)BMC-data經(jīng)過濾波模塊去掉3 MHz頻率以上毛刺。
2) 解碼模塊需要對信號過采樣,利用采樣的計數(shù)值獲得解碼閾值。必須首先確定最初始的2 UI數(shù)據(jù)是在默認的(300±75) kHz解碼頻率范圍之內(nèi),否則不會接收后面的數(shù)據(jù)。解碼模塊在解碼過程中,每收到1 UI數(shù)據(jù),若計數(shù)值在1/4~3/4解碼閾值之間,則解碼為1;若計數(shù)值在3/4~5/4解碼閾值之間,則解碼為0。每一個UI解出新的解碼數(shù)值,同時將新的1 UI計數(shù)值加入解碼閾值的計算中,更新一次新的解碼閾值。
3) 因為在前導碼階段,數(shù)據(jù)的發(fā)送順序是固定的,所以預期模塊能夠根據(jù)當前數(shù)據(jù)預期到下一個數(shù)據(jù)是什么。利用解碼閾值在輸出模塊對數(shù)據(jù)解碼。以每2 UI為一組進行計數(shù),前32組數(shù)代表64個1、0交替的前導碼。在前導碼階段需要比較每個解碼值是否與預期值相等,如果相等,那么繼續(xù)解碼;否則電路復位,等到新的數(shù)據(jù)來臨,整個解碼過程再重新開始。
經(jīng)過上述步驟后,如果確定前導碼接收完畢且沒有錯誤,那么開始對真實數(shù)據(jù)解碼,只有真實數(shù)據(jù)解碼結(jié)果會從輸出模塊輸出。
新型設計利用狀態(tài)機來進行解碼和預測模塊的工作以及錯誤狀況的檢驗。增加3個狀態(tài)寄存器控制計數(shù)器的復用,減少更多計數(shù)器的寄存器數(shù)量。解碼模塊狀態(tài)轉(zhuǎn)換如圖4所示。每2 bit數(shù)據(jù)作為一組,狀態(tài)機分5個狀態(tài),其中:IDLE為空閑狀態(tài); First-1 bit-front、First-1 bit-behind狀態(tài)判斷前1個數(shù),Second-1 bit-front、Second-1 bit-behind判斷后1個數(shù),然后每2個數(shù)循環(huán)1次。
圖4 解碼模塊狀態(tài)轉(zhuǎn)換
具體的狀態(tài)跳轉(zhuǎn)如下:IDLE時檢驗到邊沿,進入First-1 bit-front;First-1 bit-front、Second-1 bit-front判斷收到新的1 UI及中間有無翻轉(zhuǎn),有翻轉(zhuǎn)則分別跳到First-1 bit-behind、Second-1 bit-behind,解碼為1;無翻轉(zhuǎn)則分別跳到Second-1 bit-front、First-1 bit-front,解碼為0。如果在任意時刻出現(xiàn)了解碼錯誤或線上空閑超時,那么狀態(tài)機將會重新回到空閑狀態(tài)。
新型設計的雙相標記解碼模塊電路如圖5所示,圖5中BMC-data-filtered為濾除毛刺后的輸入信號。
圖5 解碼模塊電路圖
在前導碼階段,訓練時鐘標志Train-start為高,在真實數(shù)據(jù)解碼階段,Decode-begin為高。將每1 UI的計數(shù)值Counter進行移位相加等操作得到1/4、3/4、5/4 thre。多路復用器用于判斷狀態(tài)跳轉(zhuǎn)和解碼結(jié)果。若IDLE時檢驗到邊沿,則進入First-1 bit-front。First-1 bit-front狀態(tài)下,當新1 UI的Counter小于1/4或大于5/4 thre,Nor 1輸出為1,解碼錯誤,狀態(tài)寄存器將回到IDLE狀態(tài),解碼結(jié)果寄存器D Register 1保持為0;處于1/4~3/4 thre之間,D Register 1為1;處于3/4~5/4 thre之間,D Register 1為0。
解碼過程中有如下3種錯誤檢測機制。
1) 前導碼丟碼、錯碼。D Register 2為預測值Predict-data的寄存器,根據(jù)狀態(tài)跳轉(zhuǎn),每當收到1個前導碼,產(chǎn)生1個預測值。當前導碼的解碼值Decode-data與Predict-data不相等,則Xor 1輸出1,Train-error為1;若相等,則Xor 1輸出0,Train-error為0。
2) 輸入信號頻率超出解碼范圍。如某1 UI計數(shù)值大于5/4 thre或小于1/4 thre,信號BMC-error拉高。
3) 當14 μs內(nèi)無電平翻轉(zhuǎn)即無數(shù)據(jù)輸入,拉高空閑超時標志Rx-IDLE信號。Train-error、BMC-error、Rx-IDLE任一為1,則Nor 2輸出為0,Error-rst為0,And 3輸出0,電路復位。最終輸出結(jié)果Decode-result為0;否則,Error-rst為1,And 3輸出1,電路正常工作,輸出結(jié)果Decode-result即為解碼值Decode-data。
在新型的解碼系統(tǒng)中,解碼閾值為1 UI的計數(shù)值,新型雙相標記編解碼規(guī)則如圖6所示。如果計數(shù)器的值在1/4~3/4解碼閾值之間檢測到邊沿,那么解出的碼為1;如果在3/4~5/4解碼閾值之間檢測到邊沿,那么解出的碼為0。其余情況表示解碼錯誤。
圖6 新型雙相標記編解碼規(guī)則
本文的設計為解碼模塊增加了六階有限長單位沖激響應濾波器,利用滑動平均計算獲得解碼閾值。有限長單位沖激響應濾波器的計算公式為:
(2)
其中:N為濾波器的級數(shù);a(k)為系數(shù);x(n-k)為每一級計算時該項的取值[8]。
有限長單位沖激響應濾波器結(jié)構(gòu)如圖7所示。圖7中:x(n)為輸入,對應電路中每一個UI的計數(shù)值;z-1為對數(shù)據(jù)做一階濾波;y(n)為濾波后的最終輸出,對應解碼閾值。本設計中的六階有限長單位沖激響應濾波器對應的抽頭系數(shù)a(k)分別為1/2、1/4、1/8、1/16、1/16。
圖7 有限長單位沖激響應濾波器結(jié)構(gòu)
新型設計的解碼閾值計算公式為:
(3)
其中,CCnt-1 UI為一個UI的計數(shù)值,連續(xù)5次的計數(shù)值與抽頭系數(shù)的乘積和等于實時解碼閾值。
新型的雙相標記解碼系統(tǒng)中,因為用狀態(tài)機來控制一個計數(shù)器的復用,所以計數(shù)器的最大計數(shù)值更小,解碼電路需要的寄存器數(shù)量也減少了很多,面積因而可以大幅減小。另外,因為采用更準確的解碼閾值計算方式,所以使用頻率更低的過采樣時鐘。同時還增加錯誤檢測機制,當電路出現(xiàn)錯誤時不再解碼。以上這些設計也使功耗大幅減小。
新型雙相標記解碼系統(tǒng)能夠成功對周期連續(xù)增大7.13%的13個輸入數(shù)據(jù)進行解碼,仿真結(jié)果如圖8所示。輸入信號BMC-data頻率由300 kHz逐漸減小,每1 UI的計數(shù)值Counter由30逐漸增大到68,解碼閾值thres-1 UI隨之由27最終到60不斷更新,到標識4處成功解碼了13個數(shù)據(jù)。
圖8 新型雙相標記解碼系統(tǒng)的仿真結(jié)果
具體解碼過程如下:用9 MHz的時鐘信號CLK-9M對輸入信號BMC-data過采樣[9]。State為解碼過程中的狀態(tài)機,在實際的電路設計代碼編寫中,分別使用數(shù)字0代表IDLE空閑狀態(tài),1代表First-1 bit-front狀態(tài),2代表First-1 bit-behind狀態(tài),3代表Second-1 bit-front狀態(tài),4代表Second-1 bit-behind狀態(tài)(與圖4對應)。圖8標識線1處,每當輸入信號傳輸完1 UI電平翻轉(zhuǎn),則One-edge產(chǎn)生一個脈沖信號,將1 UI的計數(shù)值存儲到X-Value中。將信號X-Value的連續(xù)5個值的1/2、1/4、1/8、1/16、1/16移位相加,得到新的thres-1 UI為30,再進行移位或相加得到thres-1/4 UI為7,thres-3/4 UI為22,thres-5/4 UI為37。Counter此時為34,處于thres-3/4 UI與thres-5/4 UI之間,則解碼結(jié)果Decode-Data為0。然后計數(shù)器清零,狀態(tài)機從1跳轉(zhuǎn)到3。圖8標識線2處,每當傳輸1 UI的中間有電平翻轉(zhuǎn),則Half-edge產(chǎn)生一個脈沖,Counter為18,處于thres-1/4 UI與thres-3/4 UI之間,計數(shù)器繼續(xù)計數(shù),狀態(tài)機由3跳轉(zhuǎn)到4。圖8標識線3處,傳輸1 UI有電平翻轉(zhuǎn),One-edge產(chǎn)生一個脈沖,Counter為36,處于thres-3/4 UI與thres-5/4 UI之間,解碼結(jié)果Decode-Data為1。然后計數(shù)器清零,狀態(tài)機由4跳轉(zhuǎn)到1。前導碼的初始2個UI接收后拉高Train-start信號,每成功接收2個UI,Pre2-Cnt計數(shù)值加1,直到接收全部32組。在此期間Decode-Data必須始終與預測值Predict-Data相等,即所有前導碼全部正確,才會繼續(xù)解碼后的真實數(shù)據(jù),并將解碼結(jié)果輸出到解碼模塊之外。
在Synopsys公司的DC平臺用華虹0.18 μm工藝對電路面積和功耗評估,相同工藝性能結(jié)果比較見表1所列。
由表1可知:本文設計比文獻[5]面積減小57.44%,功耗降低93.19%;也比文獻[6]面積減小56.51%,功耗降低93.06%;比文獻[7]面積大1.81%,功耗降低36.28%,且解碼的范圍更大,準確性更高。
本文通過對雙相標記解碼電路增加狀態(tài)機以及計數(shù)器的復用,減少寄存器的使用,從而降低面積和功耗;通過增加六階有限長單位沖激響應濾波器實時計算解碼閾值,可解碼的頻率范圍更大,提高解碼準確性;通過設置錯誤檢測機制提高電路的安全性。并增加了門控,在電路閑置時,關閉解碼電路,進一步節(jié)約能耗。采用Synopsys公司的數(shù)字前端仿真工具VCS進行電路的仿真驗證,成功對單個周期突變 25%的數(shù)據(jù)、相鄰周期增加或減少7.13%的連續(xù)13個數(shù)據(jù)解碼。電路仿真后得到更好的面積和功耗表現(xiàn)。在USBPD 3.0協(xié)議芯片中使用可以提高對信號的解碼能力,降低芯片的成本。