0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

USB OTG IP核的設(shè)計與功能仿真驗證

電子設(shè)計 ? 來源:郭婷 ? 作者:電子設(shè)計 ? 2019-06-03 08:02 ? 次閱讀

1 引 言

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

2 USB OTG的工作原理

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

3 IP設(shè)計原理和IP模塊設(shè)計

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

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

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

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

USB OTG IP核的設(shè)計與功能仿真驗證

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

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

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

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

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

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

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

4 USB OTG IP核的特性討論

4.1 連接狀態(tài)的檢測

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

4.2 SRP協(xié)議的實現(xiàn)

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

4.3 HNP協(xié)議的實現(xiàn)

不妨假設(shè)A設(shè)備當(dāng)前處于主機(jī)狀態(tài),而B設(shè)備處于從設(shè)備狀態(tài)。此時,B設(shè)備需要通過HNP取得USB主機(jī)地位,過程如下:A設(shè)備通過發(fā)出掛起命令使得USB總線準(zhǔn)備進(jìn)入掛起狀態(tài)。B設(shè)備首先由數(shù)據(jù)傳輸狀態(tài)準(zhǔn)備進(jìn)入掛起狀態(tài)。這時,B設(shè)備需要檢查是否有HNP請求,如果有則開始等待A設(shè)備連接,否則正常地進(jìn)入掛起狀態(tài)。B設(shè)備在等待A設(shè)備配置時,A設(shè)備尚未完全進(jìn)入掛起狀態(tài),當(dāng)它進(jìn)入掛起狀態(tài)的同時會檢查是否有B設(shè)備的斷開中斷。如果有,則說明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è)備檢測到A設(shè)備的連接后,對USB總線進(jìn)行復(fù)位,同時開始對A設(shè)備進(jìn)行復(fù)位操作。B設(shè)備進(jìn)入主機(jī)模式工作,而A設(shè)備則進(jìn)入從設(shè)備模式工作。在B設(shè)備作為主機(jī)完成了對USB總線的使用后,再一次通過HNP將USB主機(jī)地位還給A設(shè)備,操作過程類似。

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

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

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

USB OTG IP核的設(shè)計與功能仿真驗證

6 FPGA驗證

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

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

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

7 結(jié) 語

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


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21777

    瀏覽量

    604724
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5359

    瀏覽量

    120813
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7966

    瀏覽量

    265296
收藏 人收藏

    評論

    相關(guān)推薦

    USB IP的設(shè)計及FPGA驗證

          介紹了一款可配置的USB IP設(shè)計,重點描述USB IP
    發(fā)表于 07-17 10:39 ?2732次閱讀
    <b class='flag-5'>USB</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的設(shè)計及FPGA<b class='flag-5'>驗證</b>

    USB_OTG_IP中AMBA接口的設(shè)計與FPGA實現(xiàn)

    USB_OTG_IP中AMBA接口的設(shè)計與FPGA實現(xiàn)
    發(fā)表于 08-06 11:40

    fft ip仿真驗證

    我用quartus II調(diào)用modelsim仿真fft ip仿真結(jié)束后我想驗證下數(shù)據(jù)是否正確,結(jié)果是:我用matlab生成同樣的整形數(shù)據(jù)
    發(fā)表于 09-20 12:48

    調(diào)用ALTERA的FFT IP功能仿真與門級仿真結(jié)果相差很遠(yuǎn),求大神解答?

    如題,調(diào)用altera公司的FFT IP,用的是13.1版本,將modulsim仿真的結(jié)果輸入到matlab畫出頻譜圖,功能仿真結(jié)果沒有問
    發(fā)表于 08-28 20:43

    IP設(shè)計原理是什么?如何進(jìn)行IP模塊設(shè)計?

    USB OTG的工作原理是什么?IP設(shè)計原理是什么?如何進(jìn)行IP模塊設(shè)計?USB OTG
    發(fā)表于 04-27 06:44

    一款USB OTG IP的設(shè)計與實現(xiàn),不看肯定后悔

    本文介紹一款USB OTG IP的設(shè)計與實現(xiàn),該設(shè)備控制器可作為IP用于SoC系統(tǒng)中,完成與
    發(fā)表于 04-29 06:47

    USB設(shè)備接口IP的設(shè)計

    USB設(shè)備接口IP的設(shè)計:討論了用Verilog硬件描述語言來實現(xiàn)USB設(shè)備接口IP的方法,
    發(fā)表于 01-08 18:15 ?22次下載

    FreeARM7 IP的微處理器邏輯擴(kuò)展與驗證

    介紹了FreeARM7 IP的基本概況及其接口特點,以LPC2101為原型對該IP進(jìn)行了擴(kuò)展。結(jié)合USB 1.1設(shè)備控制器
    發(fā)表于 04-06 11:41 ?2017次閱讀
    FreeARM7 <b class='flag-5'>IP</b><b class='flag-5'>核</b>的微處理器邏輯擴(kuò)展與<b class='flag-5'>驗證</b>

    USB_OTG_IP中AMBA接口的設(shè)計與FPGA實現(xiàn)

    作為一種簡單易用和高速的串行總線,USB(通用串行總線)從出現(xiàn)至今,越來越受到人們的歡迎。而隨著OTG(On The Go)技術(shù)的推出,更加拓展了USB的應(yīng)用領(lǐng)域。USB
    發(fā)表于 05-22 11:15 ?81次下載
    <b class='flag-5'>USB_OTG_IP</b><b class='flag-5'>核</b>中AMBA接口的設(shè)計與FPGA實現(xiàn)

    USB IP

    Xilinx FPGA工程例子源碼:USB IP
    發(fā)表于 06-07 14:41 ?13次下載

    USB培訓(xùn)_Part3_USB_OTG_IP及其庫的使用

    USB培訓(xùn)_Part3_USB_OTG_IP及其庫的使用
    發(fā)表于 03-31 10:11 ?23次下載

    USB OTG IP的適用范圍及庫的使用

    USB IP 可作為全速或低速的USB設(shè)備 存在于STM32F102、STM32F103 FS OTG IP 可作為全速和低速
    發(fā)表于 09-15 10:35 ?3次下載
    <b class='flag-5'>USB</b> <b class='flag-5'>OTG</b> <b class='flag-5'>IP</b>的適用范圍及庫的使用

    USB培訓(xùn)_Part3 USB OTG IP及其庫的使用

    USB培訓(xùn)_Part3 USB OTG IP及其庫的使用
    發(fā)表于 09-21 09:48 ?9次下載
    <b class='flag-5'>USB</b>培訓(xùn)_Part3 <b class='flag-5'>USB</b> <b class='flag-5'>OTG</b> <b class='flag-5'>IP</b>及其庫的使用

    VCS獨立仿真Vivado IP的問題補(bǔ)充

    仿真Vivado IP時分兩種情況,分為未使用SECURE IP和使用了SECURE IP
    的頭像 發(fā)表于 06-06 14:45 ?1770次閱讀
    VCS獨立<b class='flag-5'>仿真</b>Vivado <b class='flag-5'>IP</b><b class='flag-5'>核</b>的問題補(bǔ)充

    測試與驗證復(fù)雜的FPGA設(shè)計(2)——如何在虹科的IP中執(zhí)行面向全局的仿真

    仿真驗證是開發(fā)任何高質(zhì)量的基于FPGA的RTL編碼過程的基礎(chǔ)。在上一篇文章中,我們介紹了面向?qū)嶓w/塊的仿真,即通過在每個輸入信號上生成激勵并驗證RTL代碼行為是否符合預(yù)期,對構(gòu)成每個
    的頭像 發(fā)表于 06-15 17:31 ?732次閱讀
    測試與<b class='flag-5'>驗證</b>復(fù)雜的FPGA設(shè)計(2)——如何在虹科的<b class='flag-5'>IP</b><b class='flag-5'>核</b>中執(zhí)行面向全局的<b class='flag-5'>仿真</b>