2000年發(fā)布的USB 2.0規(guī)范,將USB接口的傳輸速度" title="傳輸速度">傳輸速度提高了40倍,。傳輸速度的提升使得USB設(shè)備" title="USB設(shè)備">USB設(shè)備控制器的設(shè)計(jì)指標(biāo)也隨之提高,,雖然協(xié)議中對于緩沖區(qū)的設(shè)計(jì)要求并沒有本質(zhì)上的改變,但是由于總線帶寬與傳輸速度的提高,,各個芯片供應(yīng)商均推出了自己的緩沖區(qū)設(shè)計(jì)方案,。為了提高USB接口的數(shù)據(jù)存取速度,通常使用異步FIFO來設(shè)計(jì)端點(diǎn)緩沖區(qū)" title="端點(diǎn)緩沖區(qū)">端點(diǎn)緩沖區(qū),。這里首先簡要介紹USB中端點(diǎn)的概念,,并給出一款異步FIFO的設(shè)計(jì)方案。然后根據(jù)USB四種傳輸類型的特點(diǎn),,提出基于該FIFO結(jié)構(gòu)的不同類型的端點(diǎn)緩沖區(qū)的設(shè)計(jì)方案,。特別是對于控制端點(diǎn)提出了一種新型的雙向異步FIFO結(jié)構(gòu),在保證控制傳輸?shù)那疤嵯?,減小了將近1/2的電路面積,。最后給出在Synopsys平臺下電路的VLSL實(shí)現(xiàn)結(jié)果。
1 USB協(xié)議中的端點(diǎn)及實(shí)施方案
1.1 USB設(shè)備的端點(diǎn)
USB主機(jī)和設(shè)備之間傳輸?shù)臄?shù)據(jù)是以信息包的格式來傳輸?shù)?,可分為令牌包,、?shù)據(jù)包、握手包和特殊包,。在數(shù)據(jù)包中包括了主機(jī)和設(shè)備通信的數(shù)據(jù)分組,。圖1是一個典型的USB數(shù)據(jù)包的格式。
PID域是為了增加USB通信的健壯性而設(shè)定的數(shù)據(jù)分組的辨識符,;CRC16域是對數(shù)據(jù)分組進(jìn)行CRC校驗(yàn)的結(jié)果,。DATA域是實(shí)際傳送的數(shù)據(jù)內(nèi)容。USB設(shè)備控制器" title="設(shè)備控制器">設(shè)備控制器會將接收到的主機(jī)數(shù)據(jù)包放入指定的端點(diǎn)緩沖區(qū),;或者從指定的端點(diǎn)取出待發(fā)送的數(shù)據(jù)組裝成USB信息包發(fā)送到主機(jī),。
由此可見,所謂端點(diǎn)實(shí)際上是主機(jī)與設(shè)備之間通信的來源或目的,所有的傳輸都要傳送到設(shè)備的端點(diǎn),,或是由設(shè)備的端點(diǎn)發(fā)出,。一系列相互獨(dú)立的端點(diǎn)在一起就構(gòu)成了USB邏輯設(shè)備。從物理層的角度來看,,端點(diǎn)是一塊存儲器區(qū)域,,用以緩沖實(shí)際接收到或待發(fā)送的數(shù)據(jù)包。
USB協(xié)議中定義了四種傳輸類型,,分別是控制傳輸,、批量傳輸、中斷傳輸和同步傳輸,。所有USB設(shè)備控制器都應(yīng)該支持控制傳輸,,其他三種傳輸方式根據(jù)不同的應(yīng)用背影而用于不同類型的設(shè)備。按照傳輸類型可將端點(diǎn)分為控制端點(diǎn),、批量端點(diǎn),、中斷端點(diǎn)和同步端點(diǎn)。其中控制端點(diǎn)較為特殊,,只有它可以雙向的傳輸數(shù)據(jù),,而其他端點(diǎn)只能傳輸單方向的數(shù)據(jù)。
1.2 使用異步FIFO設(shè)計(jì)USB端點(diǎn)
由于USB設(shè)備控制器的緩沖區(qū)空間是對應(yīng)各個不同的端點(diǎn),。每個端點(diǎn)所對應(yīng)的傳輸方式,、傳輸方向也不同。通??刂贫它c(diǎn)會連接控制器的MCU單元,,而其他類型的端點(diǎn)一般連接設(shè)備端的接口??梢奤SB的端點(diǎn)緩沖區(qū)實(shí)際上是在串行接口引擎時鐘和設(shè)備時鐘或MCU時鐘的兩個時鐘域之間傳輸數(shù)據(jù)。而使用異步FIFO來實(shí)現(xiàn)該結(jié)構(gòu)顯然是一個不錯的選擇,。
圖2是本文所采用的異步FIFO的結(jié)構(gòu)框圖,。該異步FIFO由一塊雙端口SRAM、寫地址/滿邏輯和讀地址/空邏輯,、以及為了消除亞穩(wěn)態(tài)的兩級同步電路組成,。左端口在寫時鐘下進(jìn)行數(shù)據(jù)的寫入操作;右端口在讀時鐘下實(shí)現(xiàn)數(shù)據(jù)的讀出操作,。
對于異步FIFO的設(shè)計(jì),,產(chǎn)生準(zhǔn)確的空滿標(biāo)準(zhǔn)是設(shè)計(jì)中的核心任務(wù),它與FIFO是否能穩(wěn)定工作息息相關(guān),。寫滿不溢出,,讀空不多讀是異步FIFO空滿標(biāo)志判斷的基本原則。傳統(tǒng)的判斷方法是另外設(shè)置一個狀態(tài)位,作為最高位,,其余位作為地址位,,當(dāng)讀寫指針的地址位和狀態(tài)位全部吻合時,F(xiàn)IFO處于空狀態(tài),;當(dāng)讀寫指針的地址位相同而狀態(tài)位相反,,F(xiàn)IFO處于滿狀態(tài)。這種異步FIFO由于是通過直接比較二進(jìn)制讀寫指針來判斷滿和空的,,在跨時鐘傳遞時會有毛刺產(chǎn)生,。下面將介紹一種通過直接比較格雷碼指針的方法生成FIFO的空滿信號,從而消除了毛刺,,提高了電路的穩(wěn)定性,。
比如要設(shè)計(jì)一個深度為8的異步FIFO,需要使用3 b的格雷碼計(jì)數(shù)器對讀寫指針計(jì)數(shù),,與二進(jìn)制類似,,還是需要使用一個狀態(tài)位來判斷滿和空狀態(tài)。此時FIFO的格雷碼指針跳變情況如表1所示,。
觀察表1可知,,當(dāng)讀指針為4’b0011時(二進(jìn)制為4’b0010),此時比他多一個周期所對應(yīng)的格雷碼為4’b1111(二進(jìn)制為4’b1010),。兩者的高二位恰好相反,,但低位完全相同。對比表1左右兩列可知當(dāng)讀寫指針相差一個周期即FIFO滿時對應(yīng)的格雷碼指針的最高兩位相反,,而低位則完全相同,;當(dāng)兩者完全相等時對應(yīng)為FIFO的空狀態(tài)。圖3給出的是在設(shè)計(jì)的FIFO的深度為8時,,在Modelsim中的仿真波形,。由圖3可知,當(dāng)FIFO從空到滿時,,對應(yīng)的格雷碼寫指針為4’b1100,,而同步后的讀指針為4’b0000;當(dāng)從滿被讀空時,,讀指針為4’b1100,;由此可見仿真的FIFO的空滿信號與設(shè)計(jì)一致。
2 基于FIFO結(jié)構(gòu)的優(yōu)化端點(diǎn)設(shè)計(jì)方案
2.1 基于新型FIFO結(jié)構(gòu)設(shè)計(jì)控制端點(diǎn)
上文已經(jīng)論述過控制端點(diǎn)是一個雙向傳輸?shù)亩它c(diǎn),,但是在同一時刻只能是單向的數(shù)據(jù)傳輸,。該端點(diǎn)主要是用于USB設(shè)備的枚舉過程,主機(jī)發(fā)送一個信息包,,設(shè)備負(fù)責(zé)回應(yīng)一個信息包,。對于該端點(diǎn)的設(shè)計(jì)現(xiàn)有的方案都是采用雙FIFO來實(shí)現(xiàn)雙向傳輸?shù)?。一個FIFO用以接收主機(jī)發(fā)送過來的數(shù)據(jù)包;另外一個FIFO用以向主機(jī)發(fā)送數(shù)據(jù)包,。在傳輸數(shù)據(jù)包時總有一個FIFO處于空閑狀態(tài),,這樣會造成存儲器資源的浪費(fèi)。為此,,本文提出一種新型的異步FIFO結(jié)構(gòu),,該結(jié)構(gòu)使用一塊雙端口sram來實(shí)現(xiàn)控制端點(diǎn)的單工雙向傳輸,而傳統(tǒng)的雙FIFO結(jié)構(gòu)需要兩塊SRAM用來實(shí)現(xiàn)雙向傳輸,。由于SRAM占據(jù)了FIFO的大部分面積,,在實(shí)現(xiàn)控制傳輸?shù)墓δ芟律儆昧艘粔KSRAM,可以預(yù)見最終的電路實(shí)現(xiàn)面積會減小將近1/2,。
圖4是本文所設(shè)計(jì)的新型異步FIFO結(jié)構(gòu),,該FIFO的實(shí)現(xiàn)是基于一塊雙端SRAM。在上文所提到的異步FIFO結(jié)構(gòu)的基礎(chǔ)上增加一套讀寫指針邏輯和滿空判斷標(biāo)志,。這個電路可以看作是原來電路模塊的復(fù)制,,即兩者設(shè)計(jì)完全一致。這兩個新增的指針模塊用以產(chǎn)生訪問SRAM的地址和用以產(chǎn)生滿和空的格雷碼指針,。這樣在同一方向?qū)τ赟RAM的訪問就會有兩個地址,,其中一個是讀地址,另一個是寫地址,。這樣需要設(shè)計(jì)一個選擇器,,用以選擇當(dāng)前訪問SRAM的是讀地址或?qū)懙刂贰_@個選擇器的選擇端可以根據(jù)不同方向的讀寫使能信號來切換,。這是由于在同一時刻不可能出現(xiàn)一個方向的讀/寫使能均有效的現(xiàn)象,。
對于圖4的數(shù)據(jù)路徑可簡介如下,方向0在其寫使能信號的控制下,,往FIFO內(nèi)寫入數(shù)據(jù),,寫滿之后方向1控制其讀使能將方向0寫入的數(shù)據(jù)讀出來。然后方向1控制其寫使能將數(shù)據(jù)寫入雙端口SRAM,,方向0負(fù)責(zé)把SRAM內(nèi)的數(shù)據(jù)讀出,。
對于USB的控制端點(diǎn),其接收的最大數(shù)據(jù)包為64 b,。故本文設(shè)計(jì)的雙向FIFO使用的sram亦為64 b,。使用memory complier生成,。圖5是設(shè)計(jì)的雙向FIFO在Modelsim下的仿真波形圖,。該波形顯示了方向0寫數(shù)據(jù),方向1讀數(shù)據(jù)和方向1寫數(shù)據(jù),,方向0讀數(shù)據(jù)的過程,。
2.2 其他端點(diǎn)的優(yōu)化設(shè)計(jì)
對于USB設(shè)備控制器的其他端點(diǎn),由于其與控制端點(diǎn)有所不同??刂贫它c(diǎn)是一個雙向端點(diǎn),,而非控制端點(diǎn)單向的傳輸。故對于非控制端點(diǎn)對應(yīng)的緩沖區(qū)的容量設(shè)定,,應(yīng)使USB的帶寬利用率盡量達(dá)到最高,。由于USB規(guī)范中規(guī)定緩沖區(qū)必須有足夠的空間,可以為全(高)速設(shè)備容納一個時間片所能傳輸?shù)臄?shù)據(jù)量的兩倍的容量,。這樣USB在處理一個數(shù)據(jù)分組的同時,,可以接收下一個數(shù)據(jù)分組。以此種重疊技術(shù)可以提高總線利用率,。如果批量端點(diǎn)的緩沖區(qū)的深度設(shè)計(jì)為1 024 B,。就可以得到最大的帶寬利用率。
圖6是其他端點(diǎn)所采用的雙緩沖FIFO方案示意圖,。在狀態(tài)1,,req0控制訪問FIFO0,reql控制訪問FIFO1,;在狀態(tài)2,,req0切換到訪問FIFO1,req1切換到訪問FIFO0,?;陔p緩沖FIFO的設(shè)計(jì)方案可使其他端點(diǎn)的帶寬利用率達(dá)到最高,滿足高速傳輸?shù)男枨蟆?/p>
3 電路的ASIC實(shí)現(xiàn)結(jié)果
對上述設(shè)計(jì)方案采用Verilog硬件描述語言進(jìn)行設(shè)計(jì),。仿真工具為Modelsim SE 6.2b,,前仿真通過后,對設(shè)計(jì)好的電路使用Design Complier進(jìn)行綜合,。綜合所使用的工藝庫是SMIC 0.18 μm工藝庫,。
對于控制端點(diǎn),考慮到其主要處在SIE時鐘和MCU時鐘之間,,對其所加的時鐘約束分別為60 MHz和30 MHz,;此外還對傳統(tǒng)的雙緩沖FIFO結(jié)構(gòu)進(jìn)行了綜合,兩者所加約束完全一致,。將兩者的電路的綜合結(jié)果對比如表2所示,。
對比表2可知在保證控制端點(diǎn)功能的前提下,本文所采用的新型FIFO結(jié)構(gòu)比傳統(tǒng)雙FIFO結(jié)構(gòu)在電路的實(shí)現(xiàn)面積方面減小了45.3%,。
對于其他端點(diǎn)所采用的雙緩沖FIFO方案保證了傳輸速度,,但卻是以犧牲面積為代價換來的。表3給出了批量(Bulk)傳輸端點(diǎn)(兩個深度為512 B的FIFO)的實(shí)現(xiàn)面積報告,。
4 結(jié) 語
USB設(shè)備控制器端點(diǎn)緩沖區(qū)的性能,,直接關(guān)系到總線的帶寬利用率,。這里分析了USB的四種傳輸類型并根據(jù)其特點(diǎn)靈活的設(shè)計(jì)了不同的方案,并給出了最終電路的ASIC實(shí)現(xiàn)結(jié)果,。特別是針對控制端點(diǎn)所提出的一種新方案具有一定的通用性,,該方案可以應(yīng)用在其他類似場合的設(shè)計(jì)中。