利用FPGA來實(shí)現(xiàn)USB2.0接口的方式一般有兩種:
借助外圍的USB接口芯片。FPGA不需要實(shí)現(xiàn)USB通信協(xié)議,開發(fā)的風(fēng)險(xiǎn)小,而且性能穩(wěn)定,因此被大部分設(shè)計(jì)者所采用。
FPGA內(nèi)部實(shí)現(xiàn)USB協(xié)議控制器,外部通過USB的PHY芯片來實(shí)現(xiàn)接口。需要購買USB的IP核,門檻較高。如果自己開發(fā)基于FPGA的USB協(xié)議棧,風(fēng)險(xiǎn)高,而且兼容性和穩(wěn)定性很難保證。
目前市場(chǎng)上的USB2.0接口芯片廠家和型號(hào)比較多,其中CypressSemiconductor公司的EZ-USBFX2(CY7C68013)是世界上第一款集成USB2.0的微處理器,它集成了USB2.0收發(fā)器、SIE(串行接口引擎)、增強(qiáng)的8051微控制器和可編程的外圍接口。
FX2這種獨(dú)創(chuàng)性結(jié)構(gòu)可使數(shù)據(jù)傳輸率達(dá)到56MByte/s,即USB2.0允許的最大帶寬。在FX2中,智能SIE可以硬件處理許多USB1.1和USB2.0協(xié)議,從而減少了開發(fā)時(shí)間、確保了USB的兼容性。
GPIF(GeneralProgrammableInterface)和主/從端點(diǎn)FIFO(8位或16位數(shù)據(jù)總線)為ATA、UTOPIA、EPP、PCMCIA和DSP等提供了簡(jiǎn)單和無縫連接接口。
CY7C68013結(jié)構(gòu)圖如下:
FX2接口芯片的SlaveFIFO傳輸模式
當(dāng)FPGA與FX2芯片相連時(shí),只需要利用FX2作為一個(gè)USB2.0數(shù)據(jù)通道來實(shí)現(xiàn)與主機(jī)的高速通信。FPGA能夠提供滿足SlaveFIFO要求的傳輸時(shí)序,可以作為SlaveFIFO主控制器。
SlaveFIFO傳輸?shù)氖疽鈭D如圖所示。
在這種方式下,F(xiàn)X2內(nèi)嵌的8051固件的功能只是配置SlaveFIFO相關(guān)的寄存器以及控制FX2何時(shí)工作在SlaveFIFO模式下。一旦8051固件將相關(guān)的寄存器配置完畢,且使自身工作在SlaveFIFO模式下后,F(xiàn)PGA就可按照SlaveFIFO的傳輸時(shí)序,高速與主機(jī)進(jìn)行通信,而在通信過程中不需要8051固件的參與。
在SlaveFIFO方式下,F(xiàn)PGA與FX2的連接信號(hào)圖如圖所示。
下面是信號(hào)線的說明。
IFCLK:FX2輸出的時(shí)鐘,可作為通信的同步時(shí)鐘。
FLAGA、FLAGB、FLAGC、FLAGD:FX2輸出的FIFO狀態(tài)信息,如滿、空等。
SLCS:FIFO的片選信號(hào),外部邏輯控制,當(dāng)SLCS輸出高時(shí),不可進(jìn)行數(shù)據(jù)傳輸。
SLOE:FIFO輸出使能,外部邏輯控制,當(dāng)SLOE無效時(shí),數(shù)據(jù)線不輸出有效數(shù)據(jù)。
SLRD:FIFO讀信號(hào),外部邏輯控制,同步讀時(shí),F(xiàn)IFO指針在SLRD有效時(shí)的每個(gè)IFCLK的上升沿遞增,異步讀時(shí),F(xiàn)IFO讀指針在SLRD的每個(gè)有效至無效的跳變沿時(shí)遞增。
SLWR:FIFO寫信號(hào),外部邏輯控制,同步寫時(shí),在SLWR有效時(shí)的每個(gè)IFCLK的上升沿時(shí)數(shù)據(jù)被寫入,F(xiàn)IFO指針遞增,異步寫時(shí),在SLWR的每個(gè)有效至無效的跳變沿時(shí)數(shù)據(jù)被寫入,F(xiàn)IFO寫指針遞增。
PKTEND:包結(jié)束信號(hào),外部邏輯控制,在正常情況下,外部邏輯向FX2的FIFO中寫數(shù),當(dāng)寫入FIFO端點(diǎn)的字節(jié)數(shù)等于FX2固件設(shè)定的包大小時(shí),數(shù)據(jù)將自動(dòng)被打成一包進(jìn)行傳輸,但有時(shí)外部邏輯可能需要傳輸一個(gè)字節(jié)數(shù)小于FX2固件設(shè)定的包大小的包,這時(shí),它只需在寫入一定數(shù)目的字節(jié)后,聲明此信號(hào),此時(shí)FX2硬件不管外部邏輯寫入了多少字節(jié),都自動(dòng)將之打成一包進(jìn)行傳輸。
FD[15:0]:數(shù)據(jù)線。
FIFOADR[1:0]:選擇4個(gè)FIFO端點(diǎn)的地址線,外部邏輯控制。
SlaveFIFO模式的典型操作時(shí)序
同步SlaveFIFO寫的標(biāo)準(zhǔn)連接圖如圖所示。
同步SlaveFIFO寫的標(biāo)準(zhǔn)時(shí)序如下。
·IDLE:當(dāng)寫事件發(fā)生時(shí),進(jìn)狀態(tài)1。
·狀態(tài)1:使FIFOADR[1:0]指向INFIFO,進(jìn)狀態(tài)2。
·狀態(tài)2:如FIFO滿,在當(dāng)前狀態(tài)等待,否則進(jìn)狀態(tài)3。
·狀態(tài)3:驅(qū)動(dòng)數(shù)據(jù)到數(shù)據(jù)線上,使SLWR有效,持續(xù)一個(gè)IFCLK周期,進(jìn)狀態(tài)4。
·狀態(tài)4:如需傳輸更多的數(shù),進(jìn)狀態(tài)2,否則進(jìn)狀態(tài)IDLE。
狀態(tài)跳轉(zhuǎn)示意圖如圖所示
假定FX2設(shè)定包大小為512字節(jié),當(dāng)FPGA向FIFO端點(diǎn)中寫入的數(shù)據(jù)達(dá)512字節(jié)時(shí),F(xiàn)X2硬件自動(dòng)將已寫入的512字節(jié)打成一包準(zhǔn)備進(jìn)行傳輸。這個(gè)動(dòng)作就和在普通傳輸中,F(xiàn)X2固件向FIFO端點(diǎn)中寫入512字節(jié)后,把512這個(gè)數(shù)寫入EPxBC中一樣,只不過這個(gè)過程是由硬件自動(dòng)完成的。在這里可以看出“FX2固件不參與數(shù)據(jù)傳輸過程”的含義了。外部邏輯只需按上面的時(shí)序圖所示的時(shí)序向FIFO端點(diǎn)中一個(gè)一個(gè)字節(jié)(或字)地寫數(shù),寫到一定數(shù)量,F(xiàn)X2硬件自動(dòng)將數(shù)據(jù)打包傳輸,這一切均不需固件的參與,由此實(shí)現(xiàn)高速數(shù)據(jù)傳輸。
同步SlaveFIFO讀的標(biāo)準(zhǔn)連接圖如圖10.9所示
同步SlaveFIFO讀的標(biāo)準(zhǔn)時(shí)序如下。
IDLE:當(dāng)讀事件發(fā)生時(shí),進(jìn)狀態(tài)1。
狀態(tài)1:使FIFOADR[1:0]指向OUTFIFO,進(jìn)狀態(tài)2。
狀態(tài)2:使SLOE有效,如FIFO空,在當(dāng)前狀態(tài)等待,否則進(jìn)狀態(tài)3,
狀態(tài)3:從數(shù)據(jù)線上讀數(shù),使SLRD有效,持續(xù)一個(gè)IFCLK周期,以遞增FIFO讀指針,進(jìn)狀態(tài)4。
狀態(tài)4:如需傳輸更多的數(shù),進(jìn)狀態(tài)2,否則進(jìn)狀態(tài)IDLE。
狀態(tài)跳轉(zhuǎn)示意圖如圖所示。
異步SlaveFIFO寫的標(biāo)準(zhǔn)連接圖如圖所示
異步SlaveFIFO寫的標(biāo)準(zhǔn)時(shí)序如下。
IDLE:當(dāng)寫事件發(fā)生時(shí),進(jìn)狀態(tài)1。
狀態(tài)1:使FIFOADR[1:0]指向INFIFO,進(jìn)狀態(tài)2。
狀態(tài)2:如FIFO滿,在當(dāng)前狀態(tài)等待,否則進(jìn)狀態(tài)3。
狀態(tài)3:驅(qū)動(dòng)數(shù)據(jù)到數(shù)據(jù)線上,使SLWR有效,再無效,以使FIFO寫指針遞增,進(jìn)狀態(tài)4。
狀態(tài)4:如需傳輸更多的數(shù),進(jìn)狀態(tài)2,否則進(jìn)狀態(tài)IDLE。
狀態(tài)跳轉(zhuǎn)示意圖如圖所示。
異步SlaveFIFO讀的標(biāo)準(zhǔn)連接如圖所示。
異步SlaveFIFO讀的標(biāo)準(zhǔn)時(shí)序如下。
IDLE:當(dāng)讀事件發(fā)生時(shí),進(jìn)狀態(tài)1。
狀態(tài)1:使FIFOADR[1:0]指向OUTFIFO,進(jìn)狀態(tài)2。
狀態(tài)2:如FIFO空,在當(dāng)前狀態(tài)等待,否則進(jìn)狀態(tài)3
狀態(tài)3:使SLOE有效,使SLRD有效,從數(shù)據(jù)線上讀數(shù),再使SLRD無效,以遞增FIFO讀指針,再使SLOE無效,進(jìn)狀態(tài)4。
狀態(tài)4:如需傳輸更多的數(shù),進(jìn)狀態(tài)2,否則進(jìn)狀態(tài)IDLE。
狀態(tài)跳轉(zhuǎn)示意圖如圖10.14所示。
FX2的固件程序設(shè)計(jì)
在FX2芯片的固件程序設(shè)計(jì)中,最關(guān)鍵的就是系統(tǒng)初始化函數(shù)TD_Init(void),下面是這個(gè)函數(shù)的部分代碼。
//時(shí)鐘設(shè)置
CPUCS=0x12;//48MHzCLKOUT輸出使能
IFCONFIG=0x43;//使用外部時(shí)鐘,IFCLK輸入不反向
SYNCDELAY;//同步延遲
EP2CFG=0xA0;//需要設(shè)定為4緩沖,每個(gè)緩沖區(qū)大小為512字節(jié)
SYNCDELAY;
EP4CFG=0x00;
SYNCDELAY;
EP6CFG=0xE0;
SYNCDELAY;
EP8CFG=0x00;
SYNCDELAY;
FIFORESET=0x80;//激活NAK-ALL避免競(jìng)爭(zhēng)
SYNCDELAY;
FIFORESET=0x02;//復(fù)位FIFO2
SYNCDELAY;
FIFORESET=0x06;//復(fù)位FIFO6
SYNCDELAY;
FIFORESET=0x00;//取消激活NAK-ALL
SYNCDELAY;
PINFLAGSAB=0xE6;//FLAGA設(shè)定為EP6PF,FLAGB設(shè)定為EP6FF
SYNCDELAY;
PINFLAGSCD=0xf8;//FLAGC設(shè)定為EP2EF,FLAGD保留
SYNCDELAY;
PORTACFG|=0x00;//SLCS有效
SYNCDELAY;
FIFOPINPOLAR=0x00;//所有信號(hào)低電平有效
SYNCDELAY;
USB2.0接口的典型應(yīng)用
由于USB2.0接口的數(shù)據(jù)傳輸速度快,而且使用方便,因此被廣泛應(yīng)用于各種便攜設(shè)備中。例如,基于USB2.0接口的數(shù)據(jù)采集終端,可以將各種類型的數(shù)據(jù)采集到電腦主機(jī)中進(jìn)行處理和結(jié)果顯示,其典型的結(jié)構(gòu)如圖所示。
以上回答來自網(wǎng)絡(luò),僅供參考