<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于FPGA的USB2.0控制器設計

基于FPGA的USB2.0控制器設計

作者:羅玉平 陳海濤 施業(yè)斌 尹社廣 代鐳 時(shí)間:2008-05-05 來(lái)源:電子技術(shù)應用 收藏

  在視頻存儲和圖像寬帶領(lǐng)域中,經(jīng)常遇到實(shí)時(shí)高速數據傳輸的要求。2000年4月,由Intel、Microsoft、NEC、Compaq、Lucent、Phillips等公司共同制訂的2.0(Universal Serial Bus)傳輸協(xié)議,其速度遠遠超過(guò)了目前使用IEEE1394接口進(jìn)行視頻傳輸的400Mbps,達到了480Mbps;而且具有即插即用的PnP(Plug And Play)、可進(jìn)行菊花鏈式的級聯(lián)(通過(guò) HUB進(jìn)行外圍擴展)、可串連多達127個(gè)設備等優(yōu)點(diǎn)。應用該協(xié)議可支持實(shí)時(shí)語(yǔ)音、音頻和視頻數據的傳輸。

本文引用地址:http://dyxdggzs.com/article/82116.htm

  本文針對高速數據傳輸需求,根據USB2.0的協(xié)議規范,利用VHDL語(yǔ)言實(shí)現符合該協(xié)議的功能,在視頻壓解系統中使數據在PC與外設之間高速傳輸。如圖1所示由視頻A/D采集的原始視頻數據,在Philips公司生產(chǎn)的TM1300專(zhuān)用視頻處理器中壓縮后,通過(guò)USB送至PC機。PC機的整個(gè)通過(guò)USB傳輸到TM1300,解壓后發(fā)送至視頻D/A。

        

  1 控制器結構原理

  USB2.0控制器結構框圖如圖2所示??刂破髦饕蓛蓚€(gè)部分組成,其一為與外設的接口,另一個(gè)是內部協(xié)議層邏輯PL(Protocol Layer)。內部存儲器仲裁器實(shí)現對內部DMA和外部總線(xiàn)對存儲器訪(fǎng)問(wèn)之間的仲裁。PL則實(shí)現USB的數據I/O和控制。

       

  接口有三種:一種是與微控制器之間的功能接口;一種是與單口同步靜態(tài)存儲器(SSRAM)之間的接口;另外一種是與物理層之間的接口。這里符合UTMI(USB Transceiver Macrocell Interface)規范定義。

  2 控制器實(shí)現

  控制器接口的信號框圖如圖3所示。存儲器采用標準的單口SRAM,其信號接口由32位數據線(xiàn)SRAM_DATA、15位地址線(xiàn)SRAM_ADDR及讀寫(xiě)信號(SRAM_WE和SRAM_RD)組成,系統所需SRAM的容量為2 15×32bit=128KB。

       

  而與微控制器之間的接口信號包括32位數據線(xiàn)DATA、18位地址線(xiàn)ADDR以及DMA請求和響應信號(DMA_REQ和DMA_ACK)。由于要支持到128KB,需要17位地址線(xiàn),另外還需要一根地址線(xiàn)來(lái)選通SSRAM和USB控制器內部的寄存器,總共需要18根地址線(xiàn)addr[17:0]。定義如下:

  USB_RF_SEL <= !addr[17];

  USB_MEM_SEL <=addr[17];

  第18位地址addr[17]為高時(shí)選擇緩沖存儲器,否則選擇內部寄存器。地址addr[16:2]直接用于存儲器SSRAM的地址。

  2.1 UTMI接口

  UTMI接口信號包括:與發(fā)送數據相關(guān)的信號(TxValid、TxReady等),與接收數據相關(guān)的信號(RxActive、RxValid、RxError等)以及16位雙向數據線(xiàn)。

  在物理層,該控制器需要一個(gè)外部的USB收發(fā)器(Transceiver),本文采用的是Philips公司的ISP1501芯片。該芯片用作USB2.0的模擬前端,從USB電纜來(lái)的差分信號進(jìn)行反轉不歸零碼(NRZI)解碼和位解填充轉換成16位并行數據;反之,16位并行數據通過(guò)一個(gè)差分驅動(dòng)電路經(jīng)過(guò)串行化、位填充和NRZI編碼輸出到USB電纜上。ISP1501通過(guò)管腳MODE0和MODE1決定收發(fā)器的工作模式,共有4種工作模式:MODE[1:0]為“00”時(shí),收發(fā)器處于斷開(kāi)狀態(tài);為“01”時(shí)處于全速(Full Speed)模式(此時(shí)USB帶寬為12Mb/s);為“10”時(shí)是高速(High Speed)模式(此時(shí)USB最大帶寬是480Mb/s);為“11”時(shí)是HS chirp模式。

  UTMI接口通過(guò)譯碼MODE[1:0]來(lái)控制ISP1501在HS和FS之間轉變。

  If mode_hs='1'then

  MODE<='10'

  Elsif mode_hs='0'then

  MODE<='01'

  End if;

  2.2 協(xié)議層

  控制器的核心邏輯位于PL(Protocl Layer)模塊,負責管理所有USB數據I/O和控制通信,其結構如圖4所示。

       

  DMA和存儲器接口提供隨機存儲器訪(fǎng)問(wèn)和DMA操作。該模塊使PL和外部微控制器采用DMA方式訪(fǎng)問(wèn)SSRAM。當外部總線(xiàn)有訪(fǎng)問(wèn)SRAM的請求時(shí),且PL沒(méi)有請求訪(fǎng)問(wèn)存儲器,控制邏輯如下:req、ack分別對應外部總線(xiàn)和存儲器之間的請求和響應信號,din、addr和we分別是外部總線(xiàn)給出的數據、地址和寫(xiě)信號,mreq是內部DMA向存儲器發(fā)送的請求信號,mdin、maddr和mwe分別是內部DMA給出的數據、地址和寫(xiě)信號。

  sel <=(req OR ack_r) AND(NOT mreq);

  if sel='1' then

  sram_out<=din;

  sram_adr<=addr;

  sram_we<=req AND we;

  else

  sram_out<=mdin;

  sram_adr<=maddr;

  sram_we <=mwe;

  end if;

  由控制邏輯可看出,內部DMA操作的優(yōu)先級比外部總線(xiàn)高。

  協(xié)議引擎(Protocol Engine)處理所有標準的USB握手信號和控制通信。分組組裝器組裝分組并送入輸出FIFO,先組裝分組頭,插入適當的PID(分組標識)和校驗和,然后加入數據域。分組拆裝器先解碼出PID和序列號以及校驗和,再從8位PID取低4位(或高4位取反)得到PID[3:0],通過(guò)USB2.0協(xié)議的PID類(lèi)型定義譯碼出PID名,判斷是Token分組(OUT、IN、SOF和SETUP)還是DATA分組(DATA0、DATA1、DATA2和MDATA)。

  Pid_Token<=pid_OUT OR pid_IN OR pid_SOF OR pid_SETUP;

  Pid_DATA <=pid_DATA OR pid_DATA1 OR pid_DATA2 OR pid_MDATA;

  如果是Token分組(格式定義如圖5所示),則將后續的16bit數據分別放入兩個(gè)8bit臨時(shí)Token寄存器token0和token1,然后取出分組中的7位地址、4位端點(diǎn)號及5位CRC校驗碼。

        

  Token_fadr<=token0[6:0];

  Token_endp<=token1[2:0] & token0[7];

  Token_crc5<=token1[7:3];

  對于特殊的Token須進(jìn)行特殊的處理,本文實(shí)現的控制器只對SOF這一特殊Token進(jìn)行操作,解出PID后的11位幀號及5位CRC5校驗碼。

  Frame_no<=token1[2:0] & token0;

  Token_crc5<=token1[7:3];

  檢驗校驗碼是否出錯,如果出錯等待下一個(gè)Token,否則將地址、端點(diǎn)號和幀號等放入相應寄存器。Token類(lèi)型如果是IN,則執行組裝分組并發(fā)送寄分組;如果是OUT則拆卸接收到的數據分組。對于其他不支持的Token則視為錯誤處理:Pid_ERROR<=pid_ACK OR pid_NACK OR pid_STALL OR pid_NYET OR pid_PRE OR pid_ERR OR pid_SPLIT OR pid_PING;如果出錯則不進(jìn)行Token的解碼,而等待下一個(gè)Token的到來(lái)。

  如果是DATA分組,則緊接著(zhù)PID的是最大載荷為1024字節的數據和16位CRC16校驗碼。對數據的處理先寫(xiě)入端點(diǎn)寄存器,然后通過(guò)DMA操作寫(xiě)入SSRAM。下面詳細介紹端點(diǎn)寄存器和DMA操作

  2.3 端點(diǎn)操作

  數據的傳輸實(shí)際上通過(guò)端點(diǎn)(Endpoint)進(jìn)行,控制器通過(guò)寫(xiě)端點(diǎn)的寄存器來(lái)配置端點(diǎn),該控制器最多可有16個(gè)端點(diǎn),每個(gè)端點(diǎn)有相應的4個(gè)寄存器:Epn_CSR、Epn_INT、Epn_BUF0和Epn_BUF1(這里n=0、1、2或3),其格式如圖6所示。本文使用addr[8:2]7根據地址線(xiàn)來(lái)訪(fǎng)問(wèn)這些寄存器,addr[8:4]用來(lái)選擇端點(diǎn)號,其值(16進(jìn)制)從4到19分別表Epn(n=0...15)。addr[3:2]指定寄存器類(lèi)型:“00”代表CSR(Control Status Register);“01”代表中斷寄存器;“10”指向Buffer0;“11”代表Buffer1。這兩個(gè)Buffer用來(lái)作臨時(shí)數據存儲,Buffer0和Buffer1分別作為專(zhuān)用的輸入/輸出緩沖器來(lái)提高USB的數據吞吐能力。雙Buffer能夠減少微控制器和驅動(dòng)軟件之間的延遲。其中端點(diǎn)的CSR寄存器指定端點(diǎn)的工作模式并且向控制器報告指定端點(diǎn)的狀態(tài)。Ep_CSR[31:30]必須初始化為“00”(最初使用Buffer0),通過(guò)讀這2位可以知道下次所要處理的緩沖器;為“01”時(shí),指定Buffer1。Ep_CSR[27:26]和Ep_CSR[25:24]分別指定端點(diǎn)類(lèi)型和傳輸類(lèi)型,其類(lèi)型編碼參見(jiàn)表1。Ep_CSR[21:18]指定端點(diǎn)號,總共可以有16個(gè)端點(diǎn)。Ep_CSR[15]時(shí)DMA使能位,為“1”時(shí)允許外部DMA操作,否則不允許DMA操作。

                                                         表1 類(lèi)型編碼表

       

  當控制器收到中斷時(shí),讀中斷源寄存器(Ep_INT[6:0])來(lái)判斷中斷源和產(chǎn)生的原因??勺远x中斷源,如Ep_INT[2]定義為該控制器接收到不支持的PID而產(chǎn)生的中斷:Ep_INT[2]<=Pid_ERROR。Ep_INT[4]和Ep_INT[3]分別表示Buffer1和Buffer0的滿(mǎn)或空的狀態(tài)位。

  Ep_BUF[31](標記緩沖器是否被使用過(guò))在使用后被控制器置“1”,在清空或重填充該緩沖器后,控制器清除該位。該閏初始化時(shí)為“0”。Ep_BUF[30:17]指定緩沖器能容納的字節數。Ep_BUF[16:0]緩沖器的指針,裝載存儲器SRAM中數據的地址。

  控制端點(diǎn)(Endpoint0)比較特殊,由于它既要接收也要發(fā)送數據,因此對于控制端點(diǎn),Buffer0用于OUT緩沖器,Buffer1則是IN緩沖器。從SETUP和OUT分組來(lái)的數據,寫(xiě)入Buffer0,IN分組的數據則是從Buffer1中獲取。

  2.4 DMA操作

  DMA操作允許控制器與功能接口之間數據的透明傳輸。一旦設置了DMA操作,則不需要微控制器的干預。每個(gè)端點(diǎn)有一對DMA_REQ和DMA_ACK信號。當CSR寄存器中DMA使能信號位(Ep_CSR[15])被置位時(shí),USB控制器使用DMA_REQ和DMA_ACK這兩個(gè)信號來(lái)進(jìn)行DMA的流控制。當緩沖區有數據或為空需要填充時(shí)發(fā)送DMA請求信號DMA_REQ,每傳輸4字節,響應一個(gè)DMA_ACK信號。

  由于USB2.0協(xié)議定義的事務(wù)操作以8bit為單位,因此完成一次32bit的DMA操作需要進(jìn)行4次寫(xiě)8bit。內部DMA采用高效的One-hot狀態(tài)機設計方法,狀態(tài)轉換如圖7所示。當需要將接收到的數據存儲到SRAM(rx_dma_en=1)時(shí)進(jìn)入WAIT_MRD狀態(tài),在該狀態(tài)選中一個(gè)臨時(shí)數據寄存器,并向存儲器發(fā)送請求信號mreq,從存儲器中預取4字節(當接收到的數據少于4字節時(shí),保證有4字節的數據寫(xiě)入存儲器)到該寄存器中,然后進(jìn)入MEM_WR狀態(tài)。當PL的分組拆裝器接收到1字節數據時(shí),將該字節寫(xiě)入臨時(shí)存儲器,轉入下一狀態(tài)MEM_WR1;當分組拆裝器沒(méi)數據給DMA仲裁器時(shí)則進(jìn)入MEM_WR2狀態(tài),在此狀態(tài)將臨時(shí)存儲器中的數據寫(xiě)入SRAM,然后回到IDLE狀態(tài)。在操作過(guò)程中,使用計數器adr_cb對傳輸字節數進(jìn)行計數,通過(guò)addr_cb[1:0]的值標識當前傳輸的是32bit中的哪個(gè)字節。計數器sizu_c每接收1字節數值加1。

         

  在需要讀取SRAM中的數據(tx_dma_en=1)時(shí),DMA仲裁器由IDIE狀態(tài)進(jìn)入MEM_RD1狀態(tài),讀取4字節數據到發(fā)送緩沖區中,然后進(jìn)入狀態(tài)MEM_RD2,再讀4字節進(jìn)入狀態(tài)MEM_RD3,這8字節輪流使用Buffer0和Buffer1緩沖區:

  在需要讀取SRAM中的數據(tx_dma_en=1)時(shí),DMA仲裁器由IDLE狀態(tài)進(jìn)入MEM_RD1狀態(tài),讀取4字節數據到發(fā)送緩沖區中,然后進(jìn)入狀態(tài)MEM_RD2,再讀4字節進(jìn)入狀態(tài)MEM_RD3,這8字節輪流使用Buffer0和Buffer1緩沖區:

  if((NOT adr_cb[2]) AND mack

  then Buffer0<=SRAM_DATA_I;

  elsif (adr_cb[2] AND mack)

  then Buffer1<=SRAM_DATA_I;

  end if;

  在MEM_RD3狀態(tài)判斷是否還需要讀下一個(gè)數據,如果需要再進(jìn)入狀態(tài)MEM_RD2,否則在傳輸完所有字節后,返回到IDLE狀態(tài)。在發(fā)送數據過(guò)程中,使用14bit計數器sizd_c決定傳輸字節數,取自Ep_BUF[30:17],每發(fā)送1字節數據,它的值減1。在圖7中的各個(gè)狀態(tài)中,由于超時(shí)、CRC校驗錯誤或得到的數據發(fā)生錯誤時(shí),PE產(chǎn)生的Abort信號會(huì )使當前狀態(tài)都回到IDLE。

  文中闡述了USB2.0功能控制器的一種實(shí)現方案。 其VHDL語(yǔ)言實(shí)現代碼,已在XILINX公司的 Virtex XVV3006fg456中通過(guò)了Xilinx ISE的仿真、綜合及布局布線(xiàn)。的規模是32萬(wàn)門(mén),1536個(gè)CLB(可配置邏輯單元)。該控制模塊占用2050個(gè)Slice(66%),使用了1697個(gè)Slice觸發(fā)器(27%)和3047個(gè)4輸入LUT表(49%)。整個(gè)的速度可達到56.870MHz,完全滿(mǎn)足視頻數據的高速傳輸(對32bit數據操作,達到480Mb/s的速度時(shí)鐘只需15MHz)。該方案實(shí)現的控制器便于修改且易于實(shí)現,可作為一個(gè)功能模塊嵌入到SOC中,可使不同情況最大限度地靈活設計片上系統。

pid控制相關(guān)文章:pid控制原理


fpga相關(guān)文章:fpga是什么


pid控制器相關(guān)文章:pid控制器原理


存儲器相關(guān)文章:存儲器原理




關(guān)鍵詞: FPGA USB 控制器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>