USB2.0主機控制器IP核的設(shè)計
摘要 :為了擺脫對USB2.0 主機控制器ASIC 芯片的依賴,提高產(chǎn)品集成度,本文設(shè)計了針對全速和高速USB 海量存儲設(shè)備的USB2.0 主機控制器IP 核。首先介紹USB2.0 主機控制器IP核中主要涉及的USB2.0 通信協(xié)議以及與物理層芯片接口的ULPI 接口規(guī)范協(xié)議,并依據(jù)協(xié)議規(guī)范,利用VHDL 硬件描述語言完成USB2.0 主機控制器IP 核的ULPI 接口模塊以及USB2.0通信協(xié)議模塊的設(shè)計。使用Xilinx 公司的ISE Simulator 工具進行波形仿真,并在XilinxXUPV2 開發(fā)板上進行驗證,仿真結(jié)果及FPGA片上實驗表明本文設(shè)計的USB2.0 主機控制器能夠完成對USB 海量存儲設(shè)備的有效管理。
本文引用地址:http://2s4d.com/article/149851.htm0 引言
在USB 協(xié)議標準發(fā)展的過程中,USB2.0 接口憑借其連接簡單、穩(wěn)定、速度快以及即插即用等優(yōu)點,廣泛應用于計算機、通信和消費類電子產(chǎn)品中。然而目前大部分USB 主機端控制器都是使用國外公司研制的專用ASIC 芯片,USB2.0 主機控制器IP 核的設(shè)計可以擺脫對這些芯片的依賴,使得應用靈活方便。本文完成了針對全速和高速海量存儲設(shè)備USB2.0主機控制器IP 核中與物理層芯片接口的ULPI[2]模塊以及USB2.0 協(xié)議模塊的設(shè)計和實現(xiàn)。
ULPI 模塊介于USB2.0 主機控制器的協(xié)議模塊和物理層芯片之間,完成對插入USB 設(shè)備的狀態(tài)檢測,判別是何種設(shè)備(全速還是高速),然后將設(shè)備置于相應的狀態(tài)再進行USB 的各種傳輸事務。每一個USB 的傳輸都是由事務組成的。而每一個事務都是由USB 傳輸?shù)淖罨締挝话╬acket)來組成的,USB 的包主要是由令牌包、數(shù)據(jù)包、握手包和特殊包這四種類型組成的。令牌包和數(shù)據(jù)包又包含不同的類型[4],握手包僅由一個PID 域組成用以傳輸聯(lián)絡(luò)信號來反映目前數(shù)據(jù)處理的狀態(tài)。USB 協(xié)議包含了四種數(shù)據(jù)傳輸類型,分別為控制傳輸,批量傳輸,中斷傳輸和同步傳輸,其中控制傳輸是所有設(shè)備必須要支持的傳輸方式,對時間沒有嚴格限制的大量的數(shù)據(jù)傳輸要用到批量傳輸;同步傳輸也被稱為實時傳輸。
1 系統(tǒng)設(shè)計
圖1 整體系統(tǒng)圖
圖 1 中FPGA型號為Xilinx Virtex-II proxc2vp30,標識為ISP1504 的子板通過FPGA擴展口接入到FPGA 開發(fā)板,子板以物理層芯片ISP1504 為核心并配以簡單外圍電路構(gòu)成,上面帶有USB 接口用來插入USB 設(shè)備。ISP1504 用來完成數(shù)據(jù)的串行化和解串,以及NRZI編碼和比特位填充等功能。FPGA 中內(nèi)嵌microblaze 軟核處理器,USB 主機控制器IP 核作為用戶IP 核掛接到處理器的PLB 總線上,再加入USB 驅(qū)動,便可以實現(xiàn)microblaze 處理器對全速和高速USB 海量存儲設(shè)備的管理。本文主要介紹USB 主機控制器IP 核設(shè)計中的兩個重要模塊--與物理層接口的ULPI 模塊以及USB2.0 協(xié)議層模塊的設(shè)計實現(xiàn)。
2 ULPI 接口模塊的設(shè)計及實現(xiàn)
ULPI(UTMI+低引腳數(shù))接口規(guī)范是應用于高速通用串行總線(USB)和便攜式USB(USBOTG)收發(fā)器芯片的行業(yè)規(guī)范。ULPI 模塊提供USB 主機控制器與UTM 正常通信的物理層通道,是主機控制器實現(xiàn)正常通信的重要接口之一。該模塊依據(jù)ULPI規(guī)范實現(xiàn)了總線事件檢測的功能,完成了上電,正常操作,掛起和復位狀態(tài)之間的轉(zhuǎn)換等。
此模塊采用狀態(tài)機來實現(xiàn),主要通過對 ISP1504 的功能控制寄存器寫入一定的數(shù)據(jù),使得物理層芯片的收發(fā)器進入相應的狀態(tài)(全速、高速以及高速掛起),對狀態(tài)機中時間控制采用計數(shù)器實現(xiàn),主機端發(fā)送kj 序列對首先通過寫ISP1504 的功能控制寄存器使之進入高速chirp 檢測狀態(tài),然后在數(shù)據(jù)線上發(fā)送全0 和全1 來完成的。本設(shè)計USB2.0 主機控制主要針對全速和高速海量存儲設(shè)備設(shè)備,全速和高速的狀態(tài)轉(zhuǎn)移圖如圖2 所示:
圖 2 ULPI 模塊狀態(tài)轉(zhuǎn)移圖 芯片上電之后,通過寫ISP1504 的功能控制寄存器的reset 位來復位芯片,之后通過差分數(shù)據(jù)線的狀態(tài)來檢測是否有設(shè)備插入,并根據(jù)狀態(tài)判斷是低速設(shè)備還是全速設(shè)備(D-為高電平,即連接的設(shè)備為低速設(shè)備。若D+為高電平,即連接的設(shè)備為全速設(shè)備。)需特別說明的是,主機端對高速設(shè)備的檢測并不是一下完成的,是首先置為全速設(shè)備,然后主機端通過設(shè)置控制功能寄存器驅(qū)動出SE0 信號,如果收到設(shè)備發(fā)回的chirp k信號,主機端就會發(fā)送線性調(diào)頻的kj 序列對,每個k 或者j 持續(xù)時間在40-60us,如果設(shè)備是高速設(shè)備,在檢測到主機發(fā)過來的3 個kj 序列對之后設(shè)備的控制器會使其自身進入高速模式,即高速收發(fā)正常的操作狀態(tài)。如果沒有收到設(shè)備返回的chirp k 信號則認為是全速設(shè)備回到全速狀態(tài)下進行傳輸。當總線上沒有數(shù)據(jù)傳輸(空閑狀態(tài))超過3ms,則會進入FS 掛起狀態(tài),當收到主機端發(fā)送的resume信號時恢復到FS狀態(tài),同理如果在高速狀態(tài)下空閑超過3ms,會先進入FS掛起狀態(tài)。 用 VHDL 硬件描述語言完全按照上述狀態(tài)機轉(zhuǎn)移完成此模塊,在Xilinx ISE 開發(fā)環(huán)境下使用ISE simulator 仿真工具進行仿真,仿真波形如圖3 所示: 圖3 ULPI模塊的仿真波形 由于狀態(tài)轉(zhuǎn)移對時間的限制,故只截取了部分狀態(tài)作分析。由圖所示,currentST[4:0]反映的是狀態(tài)機的狀態(tài),linestate[1:0]表示線上狀態(tài)(直接反映D+ D-狀態(tài)),在狀態(tài)1 通過向ISP1504 的84H 地址(控制功能寄存器的地址)寫入61H(置位rst 位)復位物理層芯片。 在狀態(tài)1 寫完寄存器后置位stp,轉(zhuǎn)到狀態(tài)2 檢測設(shè)備連接狀態(tài)。在狀態(tài)2,當檢測到linestate變?yōu)?0(D+為高),所以先識別為全速設(shè)備,轉(zhuǎn)到全速狀態(tài)4。在下一個時鐘周期進入狀態(tài)6 驅(qū)動se0 對設(shè)備進行復位,然后按照狀態(tài)轉(zhuǎn)移圖最后進入高速操作階段。 3 USB2.0 協(xié)議模塊的設(shè)計和實現(xiàn) 在 ULPI模塊完成了設(shè)備的狀態(tài)監(jiān)測和轉(zhuǎn)移之后,等進入正常的全速或者是高速模式,就可以按照USB2.0 協(xié)議完成數(shù)據(jù)的傳輸,USB2.0 協(xié)議實現(xiàn)模塊是主機控制器實現(xiàn)的核心模塊,完成USB 數(shù)據(jù)的讀寫和傳輸方式的控制。根據(jù)協(xié)議層的功能主要把協(xié)議層分成三個子模塊來實現(xiàn),分別是封包模塊(PA)、拆包模塊(PD)以及控制傳輸?shù)膮f(xié)議引擎模塊( PE )。 3.1 PA PD 模塊的設(shè)計實現(xiàn) 封包模塊(PA)需要對令牌包、數(shù)據(jù)包和握手包三種包按照其對應格式分別進行封裝并發(fā)送到ULPI 模塊。開始空閑狀態(tài),接到發(fā)包指令后,判斷發(fā)包類型然后進入相應的狀態(tài)。例如令牌包需將其PID 域、ADDR 域、ENDP 域以及CRC5 校驗域按照順序封裝完成后發(fā)送。 狀態(tài)轉(zhuǎn)移圖如下所示: 圖4 PA模塊狀態(tài)轉(zhuǎn)移圖 拆包模塊(PD)剛好是封包模塊的逆過程,該模塊是把從ULPI 模塊接收到的數(shù)據(jù)包和握手包進行拆包。對數(shù)據(jù)包拆包首先就是要判斷PID 域以確定數(shù)據(jù)包的類型,并且還需對數(shù)據(jù)進行CRC 校驗然后根據(jù)該數(shù)據(jù)包的功能將數(shù)據(jù)域內(nèi)容送給要保存數(shù)據(jù)的模塊,圖5 是拆包模塊的狀態(tài)轉(zhuǎn)移圖: 圖 5 PD 模塊狀態(tài)轉(zhuǎn)移圖 仿真結(jié)果如圖6 所示: 圖 6 拆包的仿真波形 在圖6 中,完成一個包含三個數(shù)據(jù)域的拆包過程。信號rx_valid 和rx_active 同時有效時rx_data[7:0]代表從ULPI 模塊接收到的數(shù)據(jù),首先根據(jù)接收PID 域值為C3,判斷出該數(shù)據(jù)包的類型為DATA0,pid_data0 信號為高。Rx_data_st 保存拆包完成后的數(shù)據(jù)域,數(shù)據(jù)是在rx_data_valid 信號為高電平期間存入rx_data_st 寄存器的,所以接收數(shù)據(jù)為0x00、0x01、0x02、0x03。最后對接收的CRC 部分進行了驗證,由于0xef、0x7a 是此包數(shù)據(jù)域正確的CRC 生成碼,所以傳輸無誤情況下crc16_err 一直為0。 3.2 PE 模塊的設(shè)計實現(xiàn) 協(xié)議引擎(PE)模塊主要負責協(xié)調(diào)PA 和PD 模塊實現(xiàn)USB 傳輸方式,本設(shè)計主要實現(xiàn)兩種傳輸方式即控制傳輸方式和批量傳輸方式。該模塊設(shè)計的主狀態(tài)轉(zhuǎn)移圖如圖7 所示,狀態(tài)機在空閑狀態(tài)收到請求傳輸有效信號transreq后,就會對請求類型transtype進行判斷。不同的transtype 值代表著不同的傳輸事務要求。按照不同的要求,主狀態(tài)機就會轉(zhuǎn)到相應的傳輸事務狀態(tài)中進行處理。 圖 7 PE 模塊主狀態(tài)轉(zhuǎn)移圖 每個傳輸事務由不同的狀態(tài)轉(zhuǎn)移過程來實現(xiàn),以其中的setup 傳輸事務為例。首先,狀態(tài)機向PA 模塊發(fā)送發(fā)包使能標志,同時將表示setup 令牌包的值1101送給PA 模塊。PA模塊接到發(fā)setup 包指令,就會按照要求完成封包發(fā)送的工作,最后反饋給PE 模塊一個發(fā)包結(jié)束的信號sendpacketen。setup狀態(tài)機接收到發(fā)包結(jié)束信號sendpacketen為'1'后,就會轉(zhuǎn)到下一個狀態(tài)發(fā)data0 數(shù)據(jù)包。在此狀態(tài)下如果收到發(fā)包結(jié)束有效信號,也會轉(zhuǎn)到下一狀態(tài)接收握手包。在這個狀態(tài)中,主要是和PD 模塊進行通信。PD 模塊通過對接收的握手包進行拆包,來分析包的PID 域是否出錯。如果沒有錯就會反饋給PE 模塊包的類型,出錯就通過信號來通知PE 模塊。狀態(tài)機本狀態(tài)除了要判斷接收包是否出錯,還要判斷接收包是否超時。各個事務分別完成之后,至此協(xié)議層完成。 圖 8 Setup 事務狀態(tài)轉(zhuǎn)移圖 4 結(jié)論 本文完成了 USB2.0 主機控制器中ULPI 模塊與USB2.0 協(xié)議層模塊設(shè)計,此USB2.0 主機控制器 IP 核主要針對全速和高速海量存儲設(shè)備。設(shè)計采用VHDL 語言進行RTL 級描述,使用Xilinx 公司的ISE simulator 工具進行波形仿真,仿真結(jié)果驗證了設(shè)計的正確性,并且在Xilinx XUPV2 FPGA 開發(fā)板[8]和帶有USB接口并以物理層芯片ISP1504為核心的子板上進行了驗證。本文設(shè)計的USB2.0 主機控制器可作為獨立的IP 核移植到其他數(shù)字系統(tǒng)中,擺脫對USB2.0 主機控制器ASIC 的依賴,提高產(chǎn)品集成度。
pid控制器相關(guān)文章:pid控制器原理
評論