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