當(dāng)前位置:首頁(yè) > EDA > 電子設(shè)計(jì)自動(dòng)化
[導(dǎo)讀]介紹了一種用VHDL設(shè)計(jì)USB2.0功能控制器的方法,詳術(shù)了其原理和設(shè)計(jì)思想,并在FPGA上予以實(shí)現(xiàn)。

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

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

1 控制器結(jié)構(gòu)原理

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

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

2 控制器實(shí)現(xiàn)

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

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

USB_RF_SEL <= !addr[17];

USB_MEM_SEL <=addr[17];

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

2.1 UTMI接口

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

在物理層,該控制器需要一個(gè)外部的USB收發(fā)器(Transceiver),本文采用的是Philips公司的ISP1501芯片。該芯片用作USB2.0的模擬前端,從USB電纜來(lái)的差分信號(hào)進(jìn)行反轉(zhuǎn)不歸零碼(NRZI)解碼和位解填充轉(zhuǎn)換成16位并行數(shù)據(jù);反之,16位并行數(shù)據(jù)通過(guò)一個(gè)差分驅(qū)動(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之間轉(zhuǎn)變。

If mode_hs='1'then

MODE<='10'

Elsif mode_hs='0'then

MODE<='01'

End if;

2.2 協(xié)議層

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

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

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;

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

協(xié)議引擎(Protocol Engine)處理所有標(biāo)準(zhǔn)的USB握手信號(hào)和控制通信。分組組裝器組裝分組并送入輸出FIFO,先組裝分組頭,插入適當(dāng)?shù)腜ID(分組標(biāo)識(shí))和校驗(yàn)和,然后加入數(shù)據(jù)域。分組拆裝器先解碼出PID和序列號(hào)以及校驗(yàn)和,再?gòu)?位PID取低4位(或高4位取反)得到PID[3:0],通過(guò)USB2.0協(xié)議的PID類型定義譯碼出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所示),則將后續(xù)的16bit數(shù)據(jù)分別放入兩個(gè)8bit臨時(shí)Token寄存器token0和token1,然后取出分組中的7位地址、4位端點(diǎn)號(hào)及5位CRC校驗(yàn)碼。

Token_fadr<=token0[6:0];

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

Token_crc5<=token1[7:3];

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

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

Token_crc5<=token1[7:3];

檢驗(yàn)校驗(yàn)碼是否出錯(cuò),如果出錯(cuò)等待下一個(gè)Token,否則將地址、端點(diǎn)號(hào)和幀號(hào)等放入相應(yīng)寄存器。Token類型如果是IN,則執(zhí)行組裝分組并發(fā)送寄分組;如果是OUT則拆卸接收到的數(shù)據(jù)分組。對(duì)于其他不支持的Token則視為錯(cuò)誤處理: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;如果出錯(cuò)則不進(jìn)行Token的解碼,而等待下一個(gè)Token的到來(lái)。

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

2.3 端點(diǎn)操作

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

表1 類型編碼表

Ep_CSR[27:26]
端點(diǎn)類型
Ep_CSR[25:24]
傳輸類型
00
控制端點(diǎn)
00
中斷傳輸
01
IN端點(diǎn)
01
同步傳輸
10
OUT端點(diǎn)
10
塊傳輸
11
保留
11
保留

 

當(dāng)控制器收到中斷時(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的滿或空的狀態(tài)位。

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

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

 

2.4 DMA操作

DMA操作允許控制器與功能接口之間數(shù)據(jù)的透明傳輸。一旦設(shè)置了DMA操作,則不需要微控制器的干預(yù)。每個(gè)端點(diǎn)有一對(duì)DMA_REQ和DMA_ACK信號(hào)。當(dāng)CSR寄存器中DMA使能信號(hào)位(Ep_CSR[15])被置位時(shí),USB控制器使用DMA_REQ和DMA_ACK這兩個(gè)信號(hào)來(lái)進(jìn)行DMA的流控制。當(dāng)緩沖區(qū)有數(shù)據(jù)或?yàn)榭招枰畛鋾r(shí)發(fā)送DMA請(qǐng)求信號(hào)DMA_REQ,每傳輸4字節(jié),響應(yīng)一個(gè)DMA_ACK信號(hào)。

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

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

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

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

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉