《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > EDA與制造 > 設(shè)計(jì)應(yīng)用 > USB OTG的IP Core設(shè)計(jì)與FPGA驗(yàn)證
USB OTG的IP Core設(shè)計(jì)與FPGA驗(yàn)證
摘要: 由于USB總線(xiàn)是主從式結(jié)構(gòu),且設(shè)備的主從特性在設(shè)備設(shè)計(jì)時(shí)就已經(jīng)固定,這樣就很不利于設(shè)備間點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳輸。這種以計(jì)算機(jī)為核心的數(shù)據(jù)傳輸結(jié)構(gòu),非常不利于USB總線(xiàn)在嵌入式行業(yè)的應(yīng)用,因?yàn)檫@些設(shè)備一般都要求具有與計(jì)算機(jī)通信的USB設(shè)備功能,同時(shí)也要求具有連接其他USB設(shè)備的主機(jī)功能。為了解決這一問(wèn)題,USB OTG規(guī)范作為USB2.O規(guī)范的補(bǔ)充出臺(tái)了。本文介紹一款USB OTG IP核的設(shè)計(jì)與實(shí)現(xiàn),該設(shè)備控制器可作為IP核用于SoC系統(tǒng)中,完成與主機(jī)控制器的通信,并能與普通的USB從設(shè)備進(jìn)行通信。
Abstract:
Key words :

  引 言

  繼USB協(xié)議公布后,USB憑借其占用系統(tǒng)資源少、廉價(jià)、通用、可熱插拔等優(yōu)點(diǎn),成為通用的串行接口總線(xiàn)。當(dāng)前,絕大部分計(jì)算機(jī)外圍設(shè)備(如打印機(jī)、MP3、移動(dòng)硬盤(pán)等)均采用USB接口。但隨著USB接口應(yīng)用的普及,基于USBl.x和USB2.O規(guī)范的USB接口逐漸暴露其缺點(diǎn)。由于USB總線(xiàn)是主從式結(jié)構(gòu),且設(shè)備的主從特性在設(shè)備設(shè)計(jì)時(shí)就已經(jīng)固定,這樣就很不利于設(shè)備間點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)傳輸。這種以計(jì)算機(jī)為核心的數(shù)據(jù)傳輸結(jié)構(gòu),非常不利于USB總線(xiàn)在嵌入式行業(yè)的應(yīng)用,因?yàn)檫@些設(shè)備一般都要求具有與計(jì)算機(jī)通信的USB設(shè)備功能,同時(shí)也要求具有連接其他USB設(shè)備的主機(jī)功能。為了解決這一問(wèn)題,USB OTG規(guī)范作為USB2.0規(guī)范的補(bǔ)充出臺(tái)了。本文介紹一款USB OTG IP核的設(shè)計(jì)與實(shí)現(xiàn),該設(shè)備控制器可作為IP核用于SoC系統(tǒng)中,完成與主機(jī)控制器的通信,并能與普通的USB從設(shè)備進(jìn)行通信。

  1 USB OTG的工作原理

  OTGl.Oa補(bǔ)充規(guī)范對(duì)USB2.0進(jìn)行的最重要擴(kuò)展是其更具節(jié)能性、電源管理,并允許設(shè)備以主機(jī)和外設(shè)2種形式工作。OTG有兩種設(shè)備類(lèi)型:兩用OTG設(shè)備(dual—role 0TG device)和外設(shè)式OTG設(shè)備(peripher一al_only 0TG device)。兩用0TG設(shè)備完全符合USB2.O規(guī)范,同時(shí)提供有限的主機(jī)能力和一個(gè)Mini—AB插座,支持主機(jī)流通協(xié)議(IIost Negotiation Protocol,HNP)”。,且同外設(shè)式OTG設(shè)備一樣支持事務(wù)請(qǐng)求協(xié)議(SessionRequest Protocol,SRP)。當(dāng)作為主機(jī)工作時(shí),兩用0TG設(shè)備可在總線(xiàn)上提供8 mA的電流,而以往標(biāo)準(zhǔn)主機(jī)則需要提供100~500 mA的電流。2個(gè)兩用OTG設(shè)備連接在一起時(shí)可交替以主機(jī)和從機(jī)的方式工作,這個(gè)特點(diǎn)兼容了現(xiàn)有USB規(guī)范主機(jī)/外設(shè)的結(jié)構(gòu)模型。OTG主機(jī)負(fù)責(zé)初始化數(shù)據(jù)通信,比如總線(xiàn)復(fù)位、獲取各種USB描述符和配置設(shè)備。這些配置完成后,2個(gè)OTG設(shè)備便可分別以主機(jī)和從機(jī)方式傳輸信息,2個(gè)設(shè)備主從角色交換的過(guò)程由主機(jī)流通協(xié)議定義。

  2 IP設(shè)計(jì)原理和IP模塊設(shè)計(jì)

  USB 0TG控制器芯片按結(jié)構(gòu)分類(lèi),通常分為以下2種:

  ①專(zhuān)為USB OTG設(shè)計(jì)的芯片。這類(lèi)芯片集成了微控制器,是完全按照協(xié)議設(shè)計(jì)的,而不是在舊的結(jié)構(gòu)上增加功能。其結(jié)構(gòu)不同于其他常用控制芯片,開(kāi)發(fā)者需要較長(zhǎng)的學(xué)習(xí)時(shí)間,但是它能夠達(dá)到最優(yōu)化。

  ②需要外部微處理器的接口芯片。有些USB控制器只處理USB通信,而且必須由外部微處理器來(lái)控制。這種實(shí)現(xiàn)接口的標(biāo)準(zhǔn)組件使得使用者可以在各種不同類(lèi)型的微控制器中選擇一種最適合的微控制器,通過(guò)使用已有的結(jié)構(gòu)和減少固件上的投資來(lái)縮短開(kāi)發(fā)時(shí)間,減少開(kāi)發(fā)風(fēng)險(xiǎn)和費(fèi)用。但由于外接一個(gè)處理器,增加了電路的復(fù)雜性。

  本文設(shè)計(jì)的USB OTG IP核采用第2種方式,所采用的處理器是Nios。根據(jù)對(duì)USB OTG規(guī)范的理解,USB0TG控制器應(yīng)該具有以下的功能:HNP和SRP協(xié)議的實(shí)現(xiàn),主機(jī)工作模式和設(shè)備工作模式。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

系統(tǒng)結(jié)構(gòu)框圖

  UTMI+接口需要外接一個(gè)符合USB 2.0 UTMI+協(xié)議的收發(fā)器。該芯片用作USB2.0接口的模擬前端,處理由USB2.O接口發(fā)出的高速和模擬信號(hào),對(duì)其發(fā)出的用NRZI方式編碼的數(shù)據(jù)進(jìn)行解碼、位填充等,并將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù);反之,該芯片對(duì)由本控制器發(fā)出的并行數(shù)據(jù)通過(guò)其內(nèi)部的差分驅(qū)動(dòng)電路進(jìn)行串行化、位填充和NRZI編碼,并輸出到USB電纜上。該接口模塊主要用于緩存發(fā)送和接收的數(shù)據(jù),確保與外圍收發(fā)芯片的無(wú)縫結(jié)合,以及掛起、恢復(fù)和復(fù)位的檢測(cè)。

  OTG控制器實(shí)現(xiàn)USB OTG補(bǔ)充協(xié)議的功能。該模塊主要負(fù)責(zé)HNP、SRP的硬件實(shí)現(xiàn),以及連接狀態(tài)的檢測(cè)。

  主機(jī)控制器實(shí)現(xiàn)IP核工作在主機(jī)模式的功能。該模塊主要產(chǎn)生掛起、恢復(fù)、復(fù)位信號(hào),主動(dòng)發(fā)送get_descip—tor、set_address、set_configuration等標(biāo)準(zhǔn)請(qǐng)求,并把請(qǐng)求變成對(duì)應(yīng)的USB數(shù)據(jù)包格式(比如TOKEN包加入PID、地址、端點(diǎn)和5位的CRC校驗(yàn)碼等);隔固定的時(shí)間向從設(shè)備發(fā)送SOF標(biāo)志,并根據(jù)配置的結(jié)果產(chǎn)生對(duì)應(yīng)的主機(jī)中斷。

  設(shè)備控制器實(shí)現(xiàn)IP核工作在設(shè)備模式的功能。該模塊主要負(fù)責(zé)接收標(biāo)準(zhǔn)的USB請(qǐng)求,比如接收SOF標(biāo)志、IN標(biāo)志、OUT標(biāo)志等,并根據(jù)這些請(qǐng)求作出正確的響應(yīng)以及檢測(cè)復(fù)位、掛起信號(hào)。

  控制狀態(tài)寄存器完成對(duì)IP核控制器內(nèi)部狀態(tài)的設(shè)置。它分成2種類(lèi)型:一種是基本的控制狀態(tài)寄存器,比如控制狀態(tài)寄存器(指定USB的速率模式、掛起模式、連接狀態(tài)、主從模式),設(shè)備地址寄存器(存放主機(jī)分配給USB設(shè)備的地址),中斷屏蔽寄存器(使能對(duì)應(yīng)中斷)和中斷源寄存器(Nios控制器通過(guò)讀此寄存器來(lái)判斷中斷類(lèi)型);另一種是端點(diǎn)寄存器控制狀態(tài)寄存器,如中斷源寄存器、中斷屏蔽寄存器、緩沖區(qū)的指針寄存器和大小寄存器,模塊中實(shí)現(xiàn)時(shí)根據(jù)輸入的地址和讀寫(xiě)信號(hào)來(lái)對(duì)某一個(gè)寄存器進(jìn)行相應(yīng)的讀寫(xiě)操作。

  存儲(chǔ)器接口實(shí)現(xiàn)IP核內(nèi)部數(shù)據(jù)與Nios控制器數(shù)據(jù)的之間的仲裁。當(dāng)Nios控制器和IP核內(nèi)部同時(shí)對(duì)外部存儲(chǔ)器SRAM進(jìn)行讀寫(xiě)訪問(wèn)時(shí),必須對(duì)它們進(jìn)行數(shù)據(jù)的仲裁。默認(rèn)的優(yōu)先級(jí)為IP核內(nèi)部數(shù)據(jù)優(yōu)先級(jí)高于Nios控制器的數(shù)據(jù)優(yōu)先級(jí)。

  Nios控制器接口實(shí)現(xiàn)USB IP核與外部微控制器(Nios)的數(shù)據(jù)通信。該接口符合Avalon總線(xiàn)規(guī)范,通過(guò)輸入地址的最高位來(lái)判斷Nios是對(duì)內(nèi)部寄存器進(jìn)行訪問(wèn)還是對(duì)SRAM存儲(chǔ)器進(jìn)行訪問(wèn),并完成地址、數(shù)據(jù)和相關(guān)信號(hào)的處理。

  3 USB OTG IP核的特性討論

  3.1 連接狀態(tài)的檢測(cè)

  當(dāng)上電復(fù)位后進(jìn)入空閑狀態(tài),開(kāi)始USB會(huì)話(huà)。首先需要等待一段時(shí)間(最多50 ms),OTG控制器會(huì)檢測(cè)輸入ID線(xiàn)的電平,以確定自己是A設(shè)備還是B設(shè)備,高電平表示B設(shè)備,低電平表示A設(shè)備。對(duì)于A設(shè)備,IP核會(huì)等待電源線(xiàn)Vbus上的電平上升到符合USB會(huì)話(huà)的4.4 V最低電平要求,具體的操作就是通過(guò)UTMI+接口的DrvVbus信號(hào)控制PHY對(duì)Vbus電源線(xiàn)充電,以提供USB總線(xiàn)工作用的電源;對(duì)于B設(shè)備,則根據(jù)是否正在作SRP請(qǐng)求而實(shí)現(xiàn)SRP協(xié)議或者進(jìn)入數(shù)據(jù)傳輸。當(dāng)Vbus電源線(xiàn)上的電平滿(mǎn)足要求時(shí),A設(shè)備等待B設(shè)備連入U(xiǎn)SB總線(xiàn)。作為主機(jī)的A設(shè)備的DpPulldown和Dm—Pulldown在開(kāi)始會(huì)話(huà)后始終保持高電平狀態(tài),如果B設(shè)備沒(méi)有連上,則2條USB數(shù)據(jù)線(xiàn)DP和DM呈現(xiàn)SE0狀態(tài);而當(dāng)B設(shè)備連上USB總線(xiàn)時(shí),DP和DM會(huì)呈現(xiàn)J態(tài)或者K態(tài)。根據(jù)這一特點(diǎn),A設(shè)備就可以判斷出是否有B設(shè)備連入U(xiǎn)SB總線(xiàn)。

  3.2 SRP協(xié)議的實(shí)現(xiàn)

  當(dāng)設(shè)備進(jìn)入SRP協(xié)議實(shí)現(xiàn)時(shí),B設(shè)備等待SRP操作的初始條件,即通過(guò)UTMI+接口的DischrgVbus信號(hào)加速SRP條件的滿(mǎn)足。當(dāng)初始條件都滿(mǎn)足后,B設(shè)備通過(guò)UTMI+接口的信號(hào)XcvrSelect、TermSelect、DpPulldown和DmPulldown實(shí)現(xiàn)對(duì)PHY的控制,使之向DP線(xiàn)上發(fā)出驅(qū)動(dòng)脈沖。持續(xù)5~10 ms后,B設(shè)備又通過(guò)UTMI+接口的信號(hào)ChrgVbus控制PHY向Vbus上發(fā)出驅(qū)動(dòng)脈沖,該驅(qū)動(dòng)脈沖需要持續(xù)足夠長(zhǎng)的時(shí)間以使Vbus電源線(xiàn)被充電到2.1 V。驅(qū)動(dòng)完成后,回到空閑狀態(tài),進(jìn)而等待A設(shè)備對(duì)SRP作出響應(yīng)。如果A設(shè)備識(shí)別到了B設(shè)備的SRP,則會(huì)開(kāi)始USB會(huì)話(huà),否則本次SRP失敗。

  3.3 HNP協(xié)議的實(shí)現(xiàn)

  不妨假設(shè)A設(shè)備當(dāng)前處于主機(jī)狀態(tài),而B(niǎo)設(shè)備處于從設(shè)備狀態(tài)。此時(shí),B設(shè)備需要通過(guò)HNP取得USB主機(jī)地位,過(guò)程如下:A設(shè)備通過(guò)發(fā)出掛起命令使得USB總線(xiàn)準(zhǔn)備進(jìn)入掛起狀態(tài)。B設(shè)備首先由數(shù)據(jù)傳輸狀態(tài)準(zhǔn)備進(jìn)入掛起狀態(tài)。這時(shí),B設(shè)備需要檢查是否有HNP請(qǐng)求,如果有則開(kāi)始等待A設(shè)備連接,否則正常地進(jìn)入掛起狀態(tài)。B設(shè)備在等待A設(shè)備配置時(shí),A設(shè)備尚未完全進(jìn)入掛起狀態(tài),當(dāng)它進(jìn)入掛起狀態(tài)的同時(shí)會(huì)檢查是否有B設(shè)備的斷開(kāi)中斷。如果有,則說(shuō)明B設(shè)備正在進(jìn)行HNP操作,并且已經(jīng)進(jìn)入了等待A設(shè)備配置狀態(tài),接著A設(shè)備進(jìn)入設(shè)備工作狀態(tài),從而使自己變?yōu)閺脑O(shè)備。B設(shè)備檢測(cè)到A設(shè)備的連接后,對(duì)USB總線(xiàn)進(jìn)行復(fù)位,同時(shí)開(kāi)始對(duì)A設(shè)備進(jìn)行復(fù)位操作。B設(shè)備進(jìn)入主機(jī)模式工作,而A設(shè)備則進(jìn)入從設(shè)備模式工作。在B設(shè)備作為主機(jī)完成了對(duì)USB總線(xiàn)的使用后,再一次通過(guò)HNP將USB主機(jī)地位還給A設(shè)備,操作過(guò)程類(lèi)似。

  4 系統(tǒng)功能仿真

  本設(shè)計(jì)采用硬件描述語(yǔ)言Verilog HDL完成RTL(寄存器傳輸級(jí))的描述。寄存器傳輸級(jí)是指在數(shù)字系統(tǒng)設(shè)計(jì)時(shí),可以將數(shù)字系統(tǒng)簡(jiǎn)單地看作是寄存器和寄存器之間的組合邏輯(cornbinational logic)。本設(shè)計(jì)使用Mentor公司的設(shè)計(jì)仿真軟件ModelSimSE進(jìn)行功能仿真。應(yīng)用Verilog HDL語(yǔ)言搭建測(cè)試平臺(tái),通過(guò)仿真工具,設(shè)計(jì)者對(duì)各設(shè)計(jì)層次的設(shè)計(jì)模塊進(jìn)行仿真,以確定這些設(shè)計(jì)模塊的功能和邏輯關(guān)系是否滿(mǎn)足設(shè)計(jì)要求。

  在設(shè)計(jì)的驗(yàn)證階段,將包含該設(shè)計(jì)的2個(gè)USB OTG IP核直連,并讓這2個(gè)IP核工作在不同的工作狀態(tài),即一個(gè)工作在A設(shè)備模式,另一個(gè)工作在B設(shè)備模式。這樣,A設(shè)備就可以作為B設(shè)備的激勵(lì)源,通過(guò)A設(shè)備發(fā)出一系列測(cè)試信號(hào),比如向B設(shè)備發(fā)出復(fù)位信號(hào)以及SRP和HNP協(xié)議請(qǐng)求,發(fā)送SOF標(biāo)志信號(hào)和配置信息等。然后觀察B設(shè)備是否對(duì)這些命令或者信號(hào)做出正確的響應(yīng)。通過(guò)這樣的程序來(lái)驗(yàn)證該IP核是否具有雙功能和對(duì)USB協(xié)議的支持情況。仿真的部分結(jié)果如圖2所示。

仿真的部分結(jié)果

  5 FPGA驗(yàn)證

  FPGA是一種可編程邏輯器件,可進(jìn)行多次編程操作,使器件根據(jù)不同的需求實(shí)現(xiàn)不同的功能。隨著微電子技術(shù)的發(fā)展,F(xiàn)PGA的性能不斷提高,很多設(shè)計(jì)已經(jīng)完全可以由FPGA來(lái)完成。目前,在ASIC設(shè)計(jì)中一個(gè)重要的驗(yàn)證手段就是通過(guò)FPGA進(jìn)行硬件仿真,以保證設(shè)計(jì)的可靠性。FPGA芯片是整個(gè)驗(yàn)證系統(tǒng)的核心,它包含了USB OTG IP核和相關(guān)的控制模塊。因?yàn)橛肰erilog語(yǔ)言來(lái)實(shí)現(xiàn)控制模塊的功能,所以將它和USB OTG IP核一起綜合然后下載到FPGA中進(jìn)行測(cè)試。

  FPGA選用AItera公司的Cyclone系列芯片,具體型號(hào)是EPlCl2Q240C8;物理層模擬部分選用Philips公司的產(chǎn)品ISPl301;存儲(chǔ)器SRAM選用ISSI公司的IS63LVl024—12J。復(fù)位電路用來(lái)產(chǎn)生上電復(fù)位信號(hào),也可以在系統(tǒng)正常工作時(shí),通過(guò)按鍵開(kāi)關(guān)產(chǎn)生復(fù)位信號(hào)。此復(fù)位信號(hào)提供給USB IP核作為系統(tǒng)復(fù)位。系統(tǒng)的布局布線(xiàn)采用的是Altera公司的QartusII 6.0。

  驗(yàn)證過(guò)程分成2個(gè)部分來(lái)分別驗(yàn)證主機(jī)模式和設(shè)備模式。當(dāng)USB 0TG IP核工作在主機(jī)模式時(shí),直接用U盤(pán)與IP核進(jìn)行連接,通過(guò)編寫(xiě)的底層驅(qū)動(dòng)可以識(shí)別出U盤(pán)。在完成對(duì)U盤(pán)的驅(qū)動(dòng)后,成功地進(jìn)行了數(shù)據(jù)傳輸,最后正確地?cái)嚅_(kāi)連接。當(dāng)IP核工作在設(shè)備模式時(shí),IP核作為USB從設(shè)備接入電腦主機(jī)的USB接口。通過(guò)安裝新的驅(qū)動(dòng),電腦主機(jī)可以識(shí)別出該USB設(shè)備,完成對(duì)該設(shè)備的驅(qū)動(dòng)后,同樣可以正確地進(jìn)行數(shù)據(jù)傳輸,并安全地移除該設(shè)備。驗(yàn)證的結(jié)果表明,該USB 0TG IP核的主機(jī)和從設(shè)備功能均能正常工作,達(dá)到了預(yù)期的設(shè)計(jì)要求。

  結(jié) 語(yǔ)

  FPGA驗(yàn)證的結(jié)果表明,USB OTG IP核在功能和時(shí)序上符合USB2.0標(biāo)準(zhǔn)和OTGl.Oa補(bǔ)充規(guī)范的協(xié)議要求,具備了主機(jī)功能和設(shè)備功能,達(dá)到了設(shè)計(jì)的預(yù)期目標(biāo)。另外,完成的USB OTG IP核支持UTMI+接口,可以廣泛應(yīng)用于包含USB功能的SoC開(kāi)發(fā)。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。