




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
作者:RamaSaiKrishna軟件版本:EZ-USBFX3相關(guān)應(yīng)用筆記:AN75705、AN65974AN65974EZ-USB?FX3?的同步從FIFO接口。它詳盡說明了硬件接口和標(biāo)志的配置設(shè)置,并提供了相關(guān)的示例。它還提供了有GPIF?IIDesigner的參考信息,以便能輕松地使用FIFO接口進(jìn)行設(shè)計。另外,本筆記還提供了兩個完整的設(shè)計示例,說明如何使用同步從設(shè)備FIFO將FPGA連接至FX3。簡 GPIF 標(biāo)志配 GPIFII 使用局部標(biāo)志情況下的通用..................... 由標(biāo)志引起的錯誤條
匯 附錄B:用FX3開發(fā)套件(CYUSB3KIT- 附錄 簡賽斯的EZ-USBFX3是新一代USB3.0外設(shè)控制器,可讓開發(fā)者將USB3.0功能添加到任何系統(tǒng)內(nèi)。該控制器非常適合圖像和設(shè)備、、掃描儀等應(yīng)用。EZ-USBFX3設(shè)有一個完全可配置的并行、通用可編程GPIFII接口,可將其連接至外部處理器、ASIC或FPGA。GPIFII是賽斯旗艦USB2.0產(chǎn)品FX2LP中的GPIF的加強(qiáng)版本。GPIFII通過各接口(如同步地址數(shù)據(jù)復(fù)用接口)為常用設(shè)備(FPGA,圖像傳感器和處理器)提供無縫連接。同步從設(shè)備FIFO接口是GPIFII的普遍應(yīng)用。該接口適用于連接至EZ-USBFX3的外部器件通過FX3FIFO對其進(jìn)行數(shù)據(jù)/寫入操作的應(yīng)用。不可通過從設(shè)備FIFO接口執(zhí)行直接寄存器。本應(yīng)用筆記先簡單介紹GPIFII,然后詳細(xì)討論同步從設(shè)備FIFO接口。此外,還提供了兩個完整的設(shè)計示例,用來說明如何在FPGA上執(zhí)行一個與同步從設(shè)備FIFO相兼容的主控接口。同時也提供了XilinxSpartan6FPGA和AlCycloneIIIFPGA的Verilog和VHDL文件。示例中包含了同步從設(shè)備FIFO的相應(yīng)FX3固件項目。這些示例使用XilinxSP601評估套件(用于Spartan6FPGA)、Al CycloneIIIStarter電路板(用于CycloneIIIFPGA)、FX3開發(fā)套件(DVK)和FX3軟件開發(fā)套件(SDK)來開發(fā)。GPIFII是一個可編程狀態(tài)機(jī),可以靈活地實(shí)現(xiàn)一個工業(yè)標(biāo)準(zhǔn)或接口。它能夠作為主設(shè)備,也可以作為從設(shè)備運(yùn)提供256種固件可編程狀16816個可配置的控制引腳;所有的控制引腳可作為輸入/輸出或雙向引腳使用GPIFIIGPIFII狀態(tài)轉(zhuǎn)換所驅(qū)動。狀態(tài)機(jī)的運(yùn)行方式由一個描述符定義。該描述符為滿足所需接口規(guī)格而設(shè)計。本質(zhì)上,GPIFII描述符是一組可編程寄存器配置。EZ-USBFX3寄存器空間中的8KB專門作為GPIFII波形空間,用于GPIFII描述符。USB同步從設(shè)備FIFO接口同步從設(shè)備FIFO接口非常合適外部處理器或器件需要對EZ-USBFX3的內(nèi)部FIFO緩沖區(qū)進(jìn)行數(shù)據(jù)讀/寫的應(yīng)用。寄存器不可通過從設(shè)備FIFO接口執(zhí)行。同步從設(shè)備FIFO接口通常是USB應(yīng)用的首選接口,可以滿足高吞ExternalFPGA/EZ-USBExternalFPGA/EZ-USBDQ[15:0]/DQ[31:0]信號名信號說這是從設(shè)備FIFO接口的選擇信號。必須激活它,才可以從設(shè)備FIFO這是從設(shè)備FIFO接口的寫入選通信號。必須激活它,才可以對從設(shè)備FIFO執(zhí)行寫入操作這是從設(shè)備FIFO接口的選通信號。必須激活它,才可以對從設(shè)備FIFO執(zhí)行操作這是輸出使能信號。該信號激活后,F(xiàn)X3就可驅(qū)動從設(shè)備FIFO接口的數(shù)據(jù)總線。必須激活它,才可以對從設(shè)FLAGC/這些信號均是X3的標(biāo)志輸出。它們表示X3套接字是否可用。1在隨附的示例項目中,F(xiàn)AGA、LAGB使用于從設(shè)備O寫入操作,而LAGC、FAGD使用于從設(shè)備O操作。這是從FIFO2這是從FIFO1632激活該信號后,可將短數(shù)據(jù)包或零長度數(shù)據(jù)包寫入從設(shè)備FIFO內(nèi)這是從設(shè)備FIFO 線程和套接字一節(jié)介紹了用于數(shù)據(jù)傳輸?shù)奶捉幼值母拍?。?biāo)志配置一節(jié)詳細(xì)描述了各標(biāo)志帶兩個地址線和帶五個地址線的從設(shè)備FIFO之間的差別帶兩個地址線的同步從設(shè)備FIFO接口支持多達(dá)四個套接字。如要四個套接字以上,請使用帶五個地址線的同步從的引腳數(shù)量降低,因此,需要將標(biāo)志配置為一個current_thread標(biāo)志。 由于額外的延遲和其他接口協(xié)議要求,建議您只在應(yīng)用需要四個GPIFII套接字以上時才使用帶五個地址線的同步從設(shè)備FIFO接口。有關(guān)該接口的信息,請參考應(yīng)用筆記AN68829—用于EZ-USBFX3的從設(shè)備FIFO接口:5位地址模式。備從設(shè)備FIFO接口的引腳映射情況2顯示了FIFO接口的默認(rèn)引腳映射情況。該表還介紹了GPIFII被配置為從設(shè)FIFO接口情況下各個可用的GPIO引腳和其他串行接口(UART/SPI/I2S)。可按需修改引腳映射情況,并且可通過GPIFIIDesigner工具添加或重新配置各個標(biāo)志。信息,請查看標(biāo)志配置一EZ-USBFX3引使用16位數(shù)據(jù)總線的同步從設(shè)備FIFO接使用32位數(shù)據(jù)總線的同步從設(shè)備FIFO接GPIO/SPI_SCK從設(shè)備FIFO序列和接口時同步從設(shè)備FIFO接口時序
tt3cycefromaddrtoda
2cyclelatency
tFFO t(dedicatedthreadFlagforAn)(1=NotEmpty0=Empty)(dedicatedthreadFlagforAm)(1=NotEmpty0=Empty)
2cyclelatencyfromSLRDtoFLAGtttDQ(Data High-
D D(Am)D(Am)SLWR同步從設(shè)備FIFO讀序列FIFO地址穩(wěn)定且SLCS#激 激活SLRD#FIFO指針在PCLK的上升沿上更新,同時,SLRD#被激活。這樣會啟動從新尋FIFO至數(shù)據(jù)總線的數(shù)據(jù)傳輸。經(jīng)過tCO的傳輸延遲時間(從PCLK的上升沿算起)后即可提供新的數(shù)值。N是從FIFO的第一個數(shù)值。要想驅(qū)動數(shù)據(jù)總線,還必須激活SLOE#。突發(fā)時將發(fā)生相同的序列注意:對于突發(fā)模式,SLRD#和SLOE#在整個過程中保持激活狀態(tài)。當(dāng)SLOE#被激活時,將(使用之前已尋址的FIFO的數(shù)據(jù))驅(qū)動數(shù)據(jù)總線。SLRD#被激活時,在每一PCLK的連續(xù)升沿上,F(xiàn)IFO指針會遞增,且下一個數(shù)據(jù)值
tCH
tASFIFO dedicatedthreadFLAGforAn(1=NotFull0=Full)
3cyclelatencyfromSLWR#toFLAG
3cyclelatencyfromSLWR#toFLAGdedicatedthreadFLAGfor(1=NotFull0= tDS
DQ(DataN) D(Am)D(Am)tPES
tCH
tASFIFO
tPES(1=NotFull0=Full)(1=NotFull0=Full)DQ(Data High-同步從設(shè)備FIFO寫序列FIFO地址穩(wěn)定且SLCS#tC的延遲后,F(xiàn)IFO標(biāo)志將被更新。注意:在突發(fā)模式下,SLWR#和SLCS#在整個突發(fā)寫入過程中保持激活狀態(tài)。在突發(fā)寫入模式下,SLWR#被激活PCLK的上升沿到來時,都會將數(shù)據(jù)總線上的值寫入FIFO內(nèi)。此外,F(xiàn)IFOPCLK的每個上升沿短數(shù)據(jù)包:PKTEND#信號可將某個短數(shù)據(jù)包發(fā)送USB主機(jī)。需要設(shè)計外部器件/處理器,使之在傳輸最后數(shù)據(jù)字時同時激活與該字相應(yīng)的SLWR#脈沖和PKTEND#。PKTEND#激活期間,F(xiàn)IFOADDR需要保持不變。同時激活PKTEND#SLWR#時,GPIFII狀態(tài)機(jī)會將數(shù)據(jù)包視為短數(shù)據(jù)包,并將其發(fā)送到USB接口。如果協(xié)議不要求傳輸任數(shù)據(jù)包,則PKTEND#信號可被置高。請注意,執(zhí)行讀操作時,沒有任何具體信號表示已從USB獲取了短數(shù)據(jù)包。空標(biāo)志必須由外部主設(shè)備,以確定讀零長度數(shù)據(jù)包:外部器件/處理器可僅通過激活PKTEND#,而沒有激活SLWR#來傳輸一個零長度數(shù)據(jù)包(ZLP)。必須驅(qū)動SLCS#和地址,如圖5所示。標(biāo)志使用情況:外部處理器標(biāo)志信號來控制流量。標(biāo)志信號由EZ-USBFX3器件輸出。通過配置各標(biāo)志,可顯示參說最小最大單接口時鐘頻–時鐘周–時鐘為高電平的4–時鐘為低電平的4–SLRD#CLK的建立時2–SLRD#CLK的數(shù)據(jù)保持時–SLWR#CLK的建立時2–SLWR#CLK的數(shù)–時鐘至數(shù)據(jù)有效的時–7數(shù)據(jù)輸入的建立2–時鐘上升沿后數(shù)據(jù)輸入保持的時0–地址到時鐘的建立時2–CLK至地址的地址保持時–SLOE#到數(shù)據(jù)為低阻態(tài)的0–時鐘到標(biāo)志輸出的傳輸–8SLOE#取消激活到數(shù)據(jù)為高阻態(tài)的–8PKTEND#CLK的建立時2–CLK上升沿后PKTEND#保持的時–CLK上升沿后數(shù)據(jù)輸出保持的2–注意:ADDRDATA的三需要理解線程、套接字以及DMA通道的概念。線程和套接字套接字是外設(shè)硬件模塊FX3RAM之間的連接點(diǎn)。FX3上的每個外設(shè)硬件模塊(如USB、GPIF、UARTSPI)具這些寄存器指向有效的DMA描述符,并使能或標(biāo)記與套接字相關(guān)的中斷。DMA描述符是一組位于FX3RAM中的寄存器。它了DMA緩沖區(qū)的地址和大小數(shù)據(jù),以及指向下一個DMA描述符的指針。這些指針構(gòu)建成DMA描述符鏈。DMA緩沖區(qū)是RAM的一部,用于暫時通過FX3器件傳輸?shù)臄?shù)據(jù)。通過FX3固件,可將部分RAM空間作為緩沖區(qū)使用。這些緩沖區(qū)的地址被為DMA描述符的一部分GPIF線程是GPIFII模塊內(nèi)的數(shù)據(jù)路徑,用來將外部數(shù)據(jù)引腳連接至套接字。套接字可通過某些直接互相發(fā)出信號,或者通過中FX3CPU發(fā)出信號。該操作由固件配置的。例如,將數(shù)據(jù)流GPIFII模塊傳輸U(kuò)SB模DMA緩沖區(qū)目前為空。該操作被稱為自動DMA通道。當(dāng)FX3CPU不用修改數(shù)據(jù)流中的任何數(shù)據(jù)時,將實(shí)現(xiàn)自動DMA通道。另外,GPIF套接字FX3CPU發(fā)送一個中斷GPIF套接字已經(jīng)寫滿DMA緩沖區(qū)。FX3CPU可將該信USB套接字。USB套接字FX3CPU發(fā)送一個中斷,來通USB套接字已經(jīng)讀空DMA緩沖區(qū)。此時,F(xiàn)X3CPU可將該信息GPIF套接字。該操作被稱為手DMA通道實(shí)現(xiàn)。如FX3CPU需要添加、刪除或發(fā)送套接字是指用于將數(shù)據(jù)寫入DMA緩沖區(qū)內(nèi)的套接字。接收套接字是指從DMA緩沖區(qū)內(nèi)數(shù)據(jù)的套接字。套接字使用于DMA描述符上的DMA緩沖區(qū)地址、DMA緩沖區(qū)大小和DMA描述符鏈的值來管理數(shù)據(jù)。套接字寫滿或DMA緩沖區(qū)后,需要經(jīng)過一段時間(幾微秒)DMA描述符轉(zhuǎn)移到另一個描述符。轉(zhuǎn)換過程中,套接字不EZ-USBFX3可提供多達(dá)四個物理硬件線程,以用于通GPIFII傳輸數(shù)據(jù)。每次可將任何一個套接字映射到一個物理線程上。默認(rèn)情況下,PIB0被映射到線0,PIB套接1被映1,PIB2被映射到線2以及PIB套接字3被映射到線程3。請注意,接口上的地址信號A1:A0表示需要的線程。FX3的DMA運(yùn)行機(jī)制將數(shù)據(jù)傳輸?shù)接成涞皆摼€程上的套接字。因此,當(dāng)A1:A0=0時,將線程0,并且,通過線程0傳輸?shù)乃袛?shù)據(jù)將被傳輸?shù)教捉幼?。同樣地,當(dāng)A1:注意:從設(shè)備FIFO接口僅包含兩個地址線,所以最多只能四個套接字。如要四個套接字以上,必須使用帶五個地址線的從設(shè)備FIFO接口。信息,請參閱應(yīng)用筆記AN68829—用于EZ-USBFX3的從設(shè)備FIFO接口:5位必須通過配置DMA通道指定需要的套接字DMA通道配置備因此,若要通過從設(shè)備FIFO接口實(shí)現(xiàn)雙向數(shù)據(jù)傳輸,則需配置兩個DMA通道,其中一個帶有作為發(fā)送套接字的作為發(fā)送套接字的“P”端口是外部器件通過從設(shè)備FIFO接口對其進(jìn)行寫入的套接字;作為接收套接字的“P”端口是外部器件通過從設(shè)備FIFO接口對其進(jìn)行的套接字。DMA通道上的“P”端口套接字編號要與A1:A0DMADMA通道。請注意,標(biāo)志將分別表示每個緩沖區(qū)的滿/為例如,如果已將兩個大小均1024字節(jié)的緩沖區(qū)分配DMA通道,則1024字節(jié)寫入到第一個緩沖區(qū)后,滿標(biāo)志將表示“滿”狀態(tài)。它持續(xù)顯示滿狀態(tài),直DMA通道轉(zhuǎn)到第二個緩沖區(qū)為止。雖DMA通道轉(zhuǎn)到下一個緩沖區(qū)所需的時長通常為幾微秒,但未能確定該時長。外部主設(shè)備必須標(biāo)志來確定完成切換操作以及可用下一個緩沖區(qū)來標(biāo)志配置線程標(biāo)志例如,如果FLAGA于線程0,F(xiàn)LAGB于線程1,當(dāng)外部處理器對線程0進(jìn)行時,必須FLAGA。當(dāng)外部處理器線程1時,則必須FLAGB。置低的時間。在第四個時鐘沿上,外部主設(shè)備可以對處于低電平的標(biāo)志進(jìn)行采樣,如圖4所示。讀傳輸過程結(jié)束時,標(biāo)志始終經(jīng)過兩個周期的延遲。兩個周期的延遲是從使緩沖區(qū)變?yōu)榭盏淖x周期(最后一次激活 當(dāng)前線程標(biāo)志可對標(biāo)志進(jìn)行配置,來指示當(dāng)前尋址的線程狀態(tài)。在這種情況下,GPIFII狀態(tài)機(jī)對地址總線上的地址進(jìn)行采樣,然后更新相應(yīng)標(biāo)志,用于指示該線程的狀態(tài)。這種配置要求的引腳數(shù)量更少,因?yàn)閱蝹€“current_thread志可用來表示四個線程的狀態(tài)。但當(dāng)同步從設(shè)FIFOcurrent_thread標(biāo)志時,將發(fā)生兩個周期的延遲GPIFII先要沿上,可以尋址線程的標(biāo)志的有效狀態(tài)進(jìn)行采樣(請注意,SDK中的從設(shè)備FIFO描述符使用“current_thread”FIFOcurrentthreadFLA(1=NotFull0=Full)注意:寫傳輸過程結(jié)束時,標(biāo)志始終經(jīng)過三個周期的延遲。這三個周期的延遲是從使緩沖區(qū)變?yōu)闈M的寫周期到標(biāo)志被置低的時間。在第四個時鐘沿上,外部主設(shè)備可以對處于低電平的標(biāo)志進(jìn)行采4所示。 局部可對標(biāo)志進(jìn)行配置,以指示套接字的一部分空/一部分滿狀態(tài)。必須選擇滿足下面條件的水印值:當(dāng)將要讀/寫的32位注 表4匯總了各種標(biāo)志配置的相應(yīng)延遲。該表還顯示了GPIFIIDesigner中必須為特定標(biāo)志選擇的設(shè)置。有關(guān).標(biāo)志配GPIFII標(biāo)志設(shè)置選傳輸結(jié)束時的標(biāo)志延所需的附API調(diào)志的延對從設(shè)進(jìn)行的寫操對從設(shè)進(jìn)行的讀操(從最后一(從最后一激活空標(biāo)志延遲延遲0周(外部器件可(外部器件可4個時3個時對有對有采樣采樣2個周(外部器件可(外部器件可(外部器件可3個時4個時3個時對有對有對有采樣采樣采樣0周取決取決通過調(diào)一部分空標(biāo)來設(shè)置水印等級注意:水印的單位為32位數(shù)據(jù)字示例設(shè)置了04設(shè)置了34一部分空標(biāo)2個周3個時取決取決CyU3PGpifSocketConfigureAPI對有注意:水印的單位為32位數(shù)據(jù)字采樣示例設(shè)置了04設(shè)置了34GPIFII實(shí)現(xiàn)同步從設(shè)備FIFO接口通過安裝GPIFIIDesigner工具,您可以看到從設(shè)備FIFO接口的GPIFII實(shí)現(xiàn)指導(dǎo)。請從賽斯上安裝GPIFIIDesigner工具。當(dāng)啟動GPIFIIDesigner時,您可以在起始頁上尋找CypressdInterfaces(賽斯提供的接口)項圖7.GPIFIIDesigner工具內(nèi)的從設(shè)備FIFO項目—Cypressdsync_slave_fifo_2bit項目是2位地址進(jìn)行同步從設(shè)FIFO接口GPIFII實(shí)現(xiàn)。下一節(jié)將說明如何GPIFIIDesigner配置局部標(biāo)志。配置局部標(biāo)志在GPIFIIDesigner工具中,打開CypressdInterfaces下方的sync_slave_fifo_2bit項目,然后選中 圖8.GPIFIIDesigner中的標(biāo)志設(shè)置—CypressdInterfaces項下的除了sync_slave_fifo_2bit.cyfx項目中所提供的設(shè)置之外,若想要添加標(biāo)志或進(jìn)行修改,請依次選擇File>SaveProjectasEditable。這樣,可以將該項目保存為新一個名稱,從而對新保存的項目進(jìn)行更改。9通過默認(rèn)sync_slave_fifo_2bit中的“SaveProjectasEditable”功能,設(shè)置新項目中的標(biāo)配置局部標(biāo)志的第二步是指定固件項目中的標(biāo)志水印值。在cyfxslfifo.c文件中,添加一個CyU3PGpifSocketConfigure()API調(diào)用,以指定水印值。在調(diào)用CyU3PGPIFLoad()API后可立即調(diào)用該API。有關(guān)CyU3PGpifSocketConfigure()API的完整說EZ-USBFX3SDKAPIAPI的參數(shù)使用局部標(biāo)志情況下的通用激活局部標(biāo)志后,應(yīng)使用下面來計算將要讀/寫的數(shù)據(jù)字?jǐn)?shù)量。()時鐘沿到來(這時,對處于低電平的局部標(biāo)志進(jìn)行采樣)后將要寫入的數(shù)據(jù)字的數(shù)量x(32/總線寬度)–4時)=水印值x(32/總線寬度)–1局部標(biāo)志進(jìn)行采樣)后維持激活SLRD#的周期數(shù)=水印值x(32/總線寬度)–3。()本節(jié)介紹了使CyU3PGpifSocketConfigure()API指定的水印值的影響示例。還提供了截圖,以明確顯示使用不同水示例 0的邏輯分析器截圖。可見,F(xiàn)LAGB(局部標(biāo)志)在寫入最后數(shù)據(jù)字的同一個周期示例 下面顯示了標(biāo)志在傳輸結(jié)束時變?yōu)?的邏輯分析器截圖??梢?,在最后數(shù)據(jù)前四個周期,F(xiàn)LAGB(局部標(biāo)志)轉(zhuǎn)為低電平。這樣,在FLAGB轉(zhuǎn)為低電平的周期后,可以三個數(shù)據(jù)字。水印值=4,總線寬度=32因此,時鐘沿到來(這時,對處于激活狀態(tài)的局部標(biāo)志進(jìn)行采樣)后可用于的32位數(shù)據(jù)字的數(shù)量=4x(32/32)–1=3示例下面顯示了標(biāo)志在傳輸結(jié)束時變?yōu)?的邏輯分析器截圖??梢?,在寫入最后數(shù)據(jù)前的三個周期內(nèi),F(xiàn)LAGB(局部標(biāo)志)處于低電平。這樣,在FLAGB轉(zhuǎn)為低電平的周期后,可以兩個數(shù)據(jù)字。水印值=3,總線寬度=16示例 下面顯示了標(biāo)志在傳輸結(jié)束時變?yōu)?的邏輯分析器截圖??梢?,在 志)處于低電平。這樣,在FLAGB轉(zhuǎn)為低電平的周期后,可以 使用局部標(biāo)志時的其他注意事項:局部標(biāo)志僅用于決定傳輸結(jié)束的時間。必須在開始傳輸時滿/空標(biāo)志,以確保套接字的可用性。這意味著,不避免使用局部標(biāo)志。外部主設(shè)備應(yīng)計算將要寫入或的數(shù)據(jù)量,該計數(shù)值不超過創(chuàng)建DMA通道時所設(shè)置CyU3PGpifSocketConfigure()APIAPI中的最后參數(shù)。突發(fā)值被設(shè)置后,DMA硬件將在每個突發(fā)傳輸后(而不是每個字傳輸后)檢測水印值。例如,如果外部主設(shè)備始終進(jìn)行8個字的突發(fā)寫EZ-USBFX3DMA8字突發(fā)的空間,標(biāo)志將轉(zhuǎn)為低電平。在局部標(biāo)志轉(zhuǎn)為低電平后,外部主設(shè)備可寫入一個完整的8字突發(fā)。對于在16位模式下(對從設(shè)備FIFO進(jìn)行)的寫操作,請根據(jù)使用局部標(biāo)志情況下的通用一節(jié)所介紹的公式,將CyU3PGpifSocketConfigure()API中的水印值設(shè)為‘6’。 由標(biāo)志引起的錯誤條如果空白的緩沖區(qū),將發(fā)生緩沖區(qū)欠載錯誤。如果寫入到已滿的緩沖區(qū),則發(fā)生緩沖區(qū)過載錯誤。這些錯誤可導(dǎo)致緩沖區(qū)邊界的數(shù)據(jù)被損壞。由于從設(shè)FIFOFX3PIB模塊域,因此,與接口相關(guān)的所有錯誤將被表示為PIB錯誤。如果發(fā)生某PIB錯誤,將觸PIB中斷。FX3SDK允許寄存一個用PIB中斷的回調(diào)函數(shù)。該回調(diào)函數(shù)用于檢查PIB錯誤代碼。下面代碼示例介紹了如何寄存一個回調(diào)函數(shù)以及用于檢查欠載/過載錯誤并彈出一個調(diào)試信息的實(shí)際回錯誤代碼指示發(fā)生錯誤的線程,如表5所示。如果發(fā)生這些錯誤中的任意一個,賽斯建議您使用一個邏輯分析器謹(jǐn)慎地分析接口時序,并特別注意局部標(biāo)志變?yōu)榱愫笏鶊?zhí)行的讀/寫周期數(shù)量。有關(guān)的示例,請參考圖11到圖14。/*RegisteracallbackfornotificationofPIBinterrupts*//*CallbackfunctiontocheckforPIBvoidgpif_error_cb(CyU3PpibIntrTypecbType,uint16_t{{{caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,caseCyU3PdebugPrint(4,CyU3PdebugPrint(4,“NoUnderrun/Overrun}}}PIB錯誤代說線程0緩沖區(qū)中的寫入過線程1緩沖區(qū)中的寫入過線程2緩沖區(qū)中的寫入過線程3緩沖區(qū)中的寫入過線程0緩沖區(qū)中的欠線程1緩沖區(qū)中的欠線程2緩沖區(qū)中的欠線程3緩沖區(qū)中的欠SDK內(nèi)的從設(shè)備FIFO固件示例本應(yīng)用筆記介紹了同步從設(shè)FIFO接口以及配置標(biāo)志的方法。實(shí)GPIFIIDesigner工具中的所需配置后,需要將已更新的配置集成到固件內(nèi)。完成編GPIFIIDesigner中的項目后,將生成一個頭文cyfxgpifconfig.h。該頭文件必須包含在固件項目中。EZ-USBFX3SDK包含一個集成了從設(shè)備FIFO接口的固件示例。EZ-USBFX3SDK后,可在下面中找到集成了FIFO接口的固件示例[FX3SDKInstallPath]\EZ-USBFX3該固件示例支持16位和32位數(shù)據(jù)總線寬度。頭文件cyfxslfifosync.h定義了常量位數(shù)據(jù)總線寬度,則將該常量設(shè)為0。設(shè)計示例1:將XilinxFPGA連接至FX3同步從設(shè)備FIFO接口本節(jié)提供一個完整的設(shè)計示例,其中通過同步從設(shè)FIFOXilinxSpartan6FPGAFX3。本節(jié)還描述了硬件設(shè)置可使用具有一個與XilinxSpartan6SP601評估套件互聯(lián)的賽斯FX3開發(fā)套件(CYUSB3KIT-001)或SuperSpeedExplorer套件(CYUSB3KIT-003)的硬件設(shè)置來運(yùn)行示例中的項目。FX3電路板和Xilinx電路板通過Samtec至FMC互聯(lián)電路板相連。CYUSB3ACC-002互聯(lián)電路板通過Samtec連接器與賽斯FX3開發(fā)套件(CYUSB3KIT-001)相連,并通過FMC連接器與Xilinx電路板相連。接器與Xilinx電路板相連。圖15顯示了使用SuperSpeedExplorer套件的硬件設(shè)置。信息,請參閱附錄B:用FX3開發(fā)套件(CYUSB3KIT-001)的硬件設(shè)置。除了硬件設(shè)置,以下各步驟在使用任FX3電路的情況下均相同。固件和軟件組件下圖顯示了FPGA和FX3之間的互連圖。EZ-USBXilinxEZ-USBXilinxSpartan6回送傳輸:對于該組件,F(xiàn)PGA先從FX3 整個緩沖區(qū)的內(nèi)容,然后將其回寫到FX3內(nèi)。USB主機(jī)應(yīng)發(fā)送短數(shù)據(jù)包:在該組件中,F(xiàn)PGA先將一個完整的數(shù)據(jù)包傳輸?shù)紽X3,然后再發(fā)送一個短數(shù)據(jù)包。USB包。USB主機(jī)應(yīng)發(fā)送IN令牌數(shù)據(jù)包,從而接收該數(shù)據(jù)。USBIN令牌數(shù)據(jù)包,從而接收該數(shù)據(jù)。您可以使用EZ-USBFX3SDK中提供ControlCenter或Streamer工具實(shí)現(xiàn)該操作。串流輸出(OUT)數(shù)據(jù)傳輸:在該組件中,F(xiàn)PGAFIFOFX3連續(xù)數(shù)Streamer工具實(shí)現(xiàn)該操作。FX3固件的詳細(xì)信息USB3.0USB2.0 斯的ControlCenter和工具啟動USB備支 ()在工作頻率100MHz32FIFO的運(yùn)行起著關(guān)鍵作用。設(shè)置DMA對于回送傳輸、短數(shù)據(jù)包和ZLP傳輸,需要創(chuàng)建兩個DMA一個是P2UPIB_SOCKET_0作為發(fā)送套接字,UIB_SOCKET_1作為接收套接字。DMA緩沖區(qū)大5121024USBUSB2.0USB3.0。DMA緩沖區(qū)的數(shù)量為2。另一個是U2PPIB_SOCKET_3作為接收套接字,UIB_SOCKET_1作為發(fā)送套接字。DMA緩沖區(qū)大小5121024USBUSB2.0USB3.0。DMA2。(each(each(each(eachEP1bufferbufferbufferbufferXilinxSpartanInternalUSB注意:(eachEP1bufferbuffer(eachEP1bufferbufferXilinxSpartanUSB/*setupDMAchannelforloopback/shortpacket/ZLPtransfers#define一個是P2U通道,其PIB_SOCKET_0作為發(fā)送套接字,UIB_SOCKET_1作為接收套接字。根據(jù)所使用的USB連接類型,DMA16×1024(USB3.0連接方式)或16×512(USB2.0連接方式)。DMA緩沖區(qū)的數(shù)量為8。選用該緩沖區(qū)大小和數(shù)量,以得到高吞吐量性能。bufferbufferbufferbuffer(eachEP1EZ-USBbufferbufferbufferbuffer(eachEP1EZ-USBbufferbufferbufferbufferXilinxSpartanUSB另一個是U2PPIB_SOCKET_3作為接收套接字,UIB_SOCKET_1作為發(fā)送套接字。DMA緩沖區(qū)大緩沖區(qū)數(shù)量來增強(qiáng)性能,但需要降低P2U通道的緩沖區(qū)數(shù)量。其原因是FX3SDK所提供的緩沖區(qū)空間不足以支持兩個通道同時具有8個大小為16×1024的緩沖區(qū)。bufferbufferbufferbuffer(eachEZ-USBbufferbufferbufferbufferbufferbuffer(eachEZ-USBbufferbufferbufferbufferXilinxSpartanUSB/*setupDMAchannelforstreamIN/OUTtransfers#define/*SlaveFIFOP_2_Uchannelbuffer#define/*SlaveFIFOU_2_Pchannelbuffer#defineFPGA實(shí)現(xiàn)的詳細(xì)信息100為了得到FX3的最大性能,GPIF接口100MHz的頻率工作。SP601配有一個27MHz的板上單端振蕩器FPGA主設(shè)備模式狀態(tài)機(jī)串流IN和串流OUT傳輸。22.用于選擇模式的FPGA(Mode(Mode(Mode(Mode(Mode(Mode(Mode(Mode!=(Mode==(Mode(Modefpga_master_mode_idlefpga_master_mode_partialfpga_master_mode_idle狀態(tài)。fpga_master_mode_zlp如果mode=ZLP,狀態(tài)機(jī)將進(jìn)入該狀態(tài)。mode!=ZLP,狀態(tài)機(jī)將從該模式切fpga_master_mode_stream_infpga_master_mode_idle狀態(tài)。fpga_master_mode_stream_out狀態(tài)fpga_master_mode_idle狀態(tài)。fpga_master_mode_loop_backmodeLOOPBACK,狀態(tài)機(jī)將進(jìn)入該狀態(tài)。如果modeLOOPBACK,狀態(tài)機(jī)將從該狀態(tài)切換到fpga_master_mode_idle狀態(tài)。串流IN示例FPGA對從設(shè)備FIFO進(jìn)行寫操作23串流INFPGA (flaga_d==1)==
(flagb_d== (flagb_d==PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=stream_in_wait_flagb狀態(tài)stream_in_write狀態(tài)PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=stream_in_write_wr_delay狀態(tài):備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),在局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)的SLWR#FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA在對被置為0短數(shù)據(jù)包FPGAFIFO]該示例說明了如何使用PKTEND#傳輸短數(shù)據(jù)包的程序。下圖顯示了在VerilogRTL中針對短數(shù)據(jù)包示例執(zhí)行的狀態(tài).t==
(flaga_d==1)&== flagb_d== (flagb_d==|((strob==1)&
partial_idle狀態(tài)PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=partial_wait_flagb狀態(tài)partial_write狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=partial_write_wr_delay狀態(tài)每當(dāng)flagb_d=0或(strob=1和 t=“1110”)時,狀態(tài)機(jī)將進(jìn)入該狀態(tài)。如果strob=1,F(xiàn)PGA主設(shè)備將PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),在局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)partial_wait狀態(tài) 鐘周期,以確保flaga上的有效狀態(tài)。FPGAZLPFIFO]25.ZLP t==
(flaga_d==1)&==
(flagb_d==1)&(strob==
(flagb_d==
(flagb_d==
zlp_idlePKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=zlp_wait_flagbzlp_write狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=zlp_write_wr_delay狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),在局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)zlp_wait狀態(tài)flagb_d1strob1時,狀態(tài)機(jī)將zlp_wait_flagb狀態(tài)切換到該狀態(tài),并將一zlp數(shù)據(jù)包傳輸?shù)絪由于水6,因此,只有經(jīng)過局部標(biāo)志(flagb)6個周期,flaga0。該狀態(tài)會暫停執(zhí)行多4個時鐘周期,以確保flaga上的有效狀態(tài)。 VerilogRTL中針對串流OUT示例執(zhí)行的狀態(tài)機(jī) t==
(flagc_d==1)==
t==
(flagd_d==
(flagd_d==stream_out_idlePKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=stream_out_flagc_rcvdstream_out_wait_flagdstream_out_read狀態(tài)PKTEND#=1;SLOE#=0;SLRD#=0;SLCS#=0;SLWR#=1;A[1:0]=stream_out_read_rd_oe_delay備PKTEND#=1;SLOE#=0;SLRD#=0;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(2b),在局部標(biāo)志(flagd)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)SLRD#進(jìn)行采樣三個周期。由于考慮FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA0flagd_d(flagd的觸發(fā)輸出)進(jìn)行采樣后,激活SLRD#一個周期。stream_out_read_oe_delay PKTEND#=1;SLOE#=0;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]= 回送示例FPGA從從設(shè)備FIFO數(shù)據(jù)回寫到從設(shè)備FIFO](flagc_d==1)==flagd_d==flagb_d==flagb_d==flagd_d==t==flaga_d==t==loop_back_idle狀態(tài)PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_flagc_rcvdloop_back_wait_flagdloop_back_read如果flagd_d=1,狀態(tài)機(jī)將進(jìn)入該狀態(tài)。狀態(tài)機(jī)將激活讀控制信號如下:PKTEND1;SLOE0;SLRD0;SLCS0;SLWR1;A[1:03loop_back_read_rd_oe_delay狀態(tài)備PKTEND#=1;SLOE#=0;SLRD#=0;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(2b),在局部標(biāo)志(flagd)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)的SLRD#進(jìn)行采樣三個周期。由于FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA對被置0flagd_d(flagd的觸發(fā)輸出)進(jìn)行采樣后,激活SLRD#一個周期。loop_back_read_oe_delay PKTEND#=1;SLOE#=0;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_wait_flaga PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_wait_flagb備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_write狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=loop_back_write_wr_delay狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),在局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)的SLWR#進(jìn)行采樣兩個周期于FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA在對被置0的局部flagb_d(flagb的觸發(fā)輸出)進(jìn)行采樣后激活SLWR#一個周期。loop_back_flush_fifoPKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=項目操作SuperSpeedExplorer套件時,要確保已將跳線J5FX3開發(fā)套件(CYUSB3KIT-001)時,請按照表7FMCFX3DVKXilinxSP601DVK電路板,并在給XilinxSP601DVK供電之前,先給FX3DVK電路板供電。FPGA開始任何數(shù)據(jù)操作前,必須先FPGAFX3進(jìn)行配置。FPGAGPIO輸入確定需要啟動使用固件鏡像文件(SF_loopback.img)對FX3FX3SDKControlCenter工具通過USB主機(jī)編程FX3。slavefifo2b_fpga_top.bitXilinxSpartan6FPGA??墒褂萌魏螛?biāo)準(zhǔn)的編程器(如XilinxISE設(shè)計如果先編程好了FPGA,F(xiàn)X3DVK將不會在主機(jī)PC上進(jìn)行枚舉,因?yàn)樵撎准?fù)責(zé)驅(qū)動PMODE線。30.使用ControlCenterFX3固件,用于進(jìn)行固件后,在啟動數(shù)據(jù)傳輸前,F(xiàn)X3SuperSpeed器件進(jìn)行枚舉(如果已連接至一USB3.0端6.slavefifo2b_fpga_top.bitFPGAFPGA傳輸模關(guān)關(guān)關(guān)打FPGA連續(xù)寫入一完整的數(shù)據(jù)包,后跟一個短數(shù)據(jù)關(guān)關(guān)打關(guān)FPGA連續(xù)寫入完整的數(shù)據(jù)包,后跟關(guān)關(guān)打打FPGA連續(xù)寫入完整的數(shù)據(jù)包(來自主機(jī)的串流BULKIN數(shù)據(jù)包關(guān)打關(guān)關(guān)FPGA連續(xù)完整的數(shù)據(jù)包(來自主機(jī)的串流BULKOUT數(shù)據(jù)包關(guān)打關(guān)打回送傳輸模關(guān)XXX無現(xiàn)在,可使用ControlCenter工具啟動傳輸過程。首先,從USB主機(jī)啟動一個BULKOUT傳輸。在ControlCenter中選擇BULKOUTendpoint項,然后點(diǎn)擊TransferFile-OUT按鍵。這樣,您可瀏覽并選擇包含需要傳輸?shù)臄?shù)據(jù)的文件。在本應(yīng)用筆記的附件中,您可在Loopback文件夾中找到TEST.txt文件。該文件包含一個以交替方式發(fā)送“0xA5A5A5A50x5A5A5A5A”的數(shù)據(jù)圖案。雙擊選擇該文件,F(xiàn)PGA正在等待FLAGA變?yōu)?。只要PIB_SOCKET_0的緩沖區(qū)中的數(shù)據(jù)可用,F(xiàn)PGA會立即該數(shù)據(jù)。然后,F(xiàn)PGA會回送同樣的數(shù)據(jù),并將其寫入到FX3的PIB_SOCKET_3。您可USB主機(jī)發(fā)送一BULKIN傳輸。ControlCenter中選BULKINendpointTransferData-IN按鍵。先前寫入的數(shù)據(jù)將被。對于串流INOUTSF_streamIN.img編程FX3器件。也可以使用FX3SDK中固件后,F(xiàn)X3SuperSpeed器件進(jìn)行枚舉(USB3.0端口)。這樣,可以通過ControlCenter工具或FX3SDK中的串流工具啟動數(shù)據(jù)傳輸。在串IN情況下,F(xiàn)PGA正在等FLAGA1。當(dāng)緩沖區(qū)可用時,F(xiàn)PGAFX3的PIB_SOCKET_0USBBULKIN傳輸。在賽斯StreamerBULKINStart34InZ77ExpressChipset的Win764在串流OUT情況下,F(xiàn)PGA正在等待FLAGC變?yōu)?。當(dāng)數(shù)據(jù)可用時,F(xiàn)PGA立即連續(xù)FX3的PIB_SOCKET_3中的數(shù)據(jù)。您可從USB主機(jī)發(fā)送連續(xù)的BULKOUT傳輸。在賽斯Streamer工具中選擇BULKOUT端點(diǎn),然后點(diǎn)擊Start。這時,將顯示性能數(shù)值。圖35中顯示了在配有InZ77ExpressChipset的Win764位電腦上觀察到的性能。SF_streamIN.imgINOUTSF_streamIN.img8個緩4個緩沖區(qū)分別分配給P2UDMAU2P通道。SF_streamOUT.img文件中,則8個緩沖4個緩沖區(qū)分別U2PDMA通的U2P性能。短數(shù)據(jù)包和ZLP數(shù)據(jù)FX3。的狀態(tài)。一旦FLAGA等于1,F(xiàn)PGA會開始寫入FX3。如果將開關(guān)配置為短數(shù)據(jù)包傳輸,F(xiàn)PGA將寫入完整的數(shù)據(jù)包(1024個字節(jié)),然后再寫入一個短數(shù)據(jù)包。如果將開關(guān)配置為ZLP傳輸,F(xiàn)PGA將寫入一個完整的數(shù)據(jù)包(1024個字節(jié)),然后再寫入一個ZLP*?,F(xiàn)在,USBBULKINControlCenterBULKINTransferData-IN按鍵。首先,將收到完整的數(shù)據(jù)包。再次點(diǎn)擊TransferData-IN。現(xiàn)在,將收到短數(shù)據(jù)包或ZLP。后立即傳輸短數(shù)據(jù)包的情況與此相同。這是因?yàn)镕X3緩沖區(qū)不被刪除,直到主機(jī)要求ControlCenter上的數(shù)據(jù)。設(shè)計示例2:將AlFPGA連接至FX3的同步從設(shè)備FIFO接本節(jié)將提供一個完整的設(shè)計示例,其中的Al 硬件設(shè)置可按照硬件設(shè)置執(zhí)行本示例中的項目。該硬件設(shè)置包括一個與CycloneIIIFPGA電路板相連的賽斯FX3開發(fā)FX3電路板和Al電路板連接起來。CYUSB3ACC-003互聯(lián)電路板通過Samtec連接器與賽斯FX3開發(fā)套件CYUSB3ACC-006互聯(lián)電路板通過多個SuperSpeedExplorer套件(CYUSB3KIT-003)相連,并通圖38顯示了使用SuperSpeedExplorer套件的硬件設(shè)置。信息,請參見附錄B:用FX3開發(fā)套件(CYUSB3KIT-001)的硬件設(shè)置。除了硬件設(shè)置,以下各步驟在使用任何FX3電路的情況下均相同。 固件和軟件組件下圖顯示了FPGA和FX3之間的互連圖。 CycloneIIIEZ-USB回送傳輸:FPGA先從FX3 包,用于發(fā)送和接收該數(shù)據(jù)。您可使用EZ-USBFX3SDK中提供的ControlCenter工具實(shí)現(xiàn)該操作。短數(shù)據(jù)包:FPGAFX3,然后再發(fā)送一個短數(shù)據(jù)包。USBIN令牌數(shù)據(jù)零長度數(shù)據(jù)包(ZLP)傳輸:FPGA先將一個完整的數(shù)據(jù)包傳輸?shù)紽X3,然后再發(fā)送一個零長度數(shù)據(jù)包。USB主機(jī)應(yīng)發(fā)送IN令牌數(shù)據(jù)包,用于接收該數(shù)據(jù)。串流(OUT)數(shù)據(jù)傳輸:FPGA實(shí)現(xiàn)單向傳輸,即是通過同步從設(shè)FIFOFX3連續(xù)數(shù)據(jù)。USB主機(jī)應(yīng)發(fā)OUT令牌數(shù)據(jù)包,用于發(fā)送該數(shù)據(jù)。可使EZ-USBFX3SDKControlCenterStreamer工具實(shí)現(xiàn)該操FX3固件的詳細(xì)信息USB3.0USB2.0 斯的ControlCenter和工具啟動USB備支 ()設(shè)置DMA對于回送傳輸、短數(shù)據(jù)包和ZLP傳輸,需要創(chuàng)建兩個DMA一個是P2UPIB_SOCKET_0作為發(fā)送套接字,UIB_SOCKET_1作為接收套接字。DMA緩沖區(qū)大5121024USBUSB2.0USB3.0。DMA緩沖區(qū)的數(shù)量為2。另一個是U2PPIB_SOCKET_3作為接收套接字,UIB_SOCKET_1作為發(fā)送套接字。DMA緩沖區(qū)大小5121024USBUSB2.0USB3.0。DMA2。(eachbuffer(eachbuffer(eachbufferEP1bufferbufferbufferbuffer CycloneInternalUSB注意:只有P2U通道用于傳輸短數(shù)據(jù)包和ZLP數(shù)據(jù)包(eachbufferEP1(eachbufferEP1bufferbuffer CycloneUSB/*setupDMAchannelforloopback/shortpacket/ZLPtransfers#define一個是P2UPIB_SOCKET_0作為發(fā)送套接字,UIB_SOCKET_1作為接收套接字。根據(jù)所使用的USB連接類型,DMA16×1024(USB3.0連接方式)16×512(USB2.0連接方式)。DMA緩沖區(qū)的數(shù)量為8。選擇該緩沖區(qū)大小和數(shù)量,以得到高吞吐量性能。bufferEP1bufferbufferbufferbufferEP1bufferbufferbufferbufferbufferbufferbuffer CycloneUSB另一個是U2PPIB_SOCKET_3作為接收套接字,UIB_SOCKET_1作為發(fā)送套接字。DMA緩沖區(qū)P2U通道的緩沖區(qū)數(shù)量。其原因FX3SDK所提供的緩沖區(qū)空間不足以支持兩個通道同8個大小16×1024bufferEZ-USB CyclonebufferEZ-USB CyclonebufferbufferbufferbufferbufferbufferbufferbufferUSB/*setupDMAchannelforstreamIN/OUTtransfers#define/*SlaveFIFOP_2_Uchannelbuffer#define/*SlaveFIFOU_2_Pchannelbuffer#defineFPGA實(shí)現(xiàn)的詳細(xì)信息 CycloneIII100為了得到FX3的最大性能,GPIF接口將以100MHz的頻率工作。CycloneIII電路板配有一個50MHz的板上單端振蕩器。FPGA使用一個PLL,以從50MHz的時鐘生成一個100MHz的時鐘。串流IN示例FPGA對從設(shè)備FIFO進(jìn)行寫操作45串流INFPGA(flaga_d==(flagb_d==(flagb_d==stream_in_idlePKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=stream_in_wait_flagb狀態(tài)stream_in_write狀態(tài)PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=stream_in_write_wr_delay狀態(tài):備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=入根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)的的觸發(fā)輸出)進(jìn)行采樣后激活SLWR#一個周期。短數(shù)據(jù)包示例[FPGA分別將整個數(shù)據(jù)包和短數(shù)據(jù)包寫入到從設(shè)備FIFO].t==
(flaga_d== flagb_d== (flagb_d==|((strob==1)& t
partial_idle狀態(tài)PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=partial_wait_flagb狀態(tài)partial_write狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=partial_write_wr_delay狀態(tài)每當(dāng)flagb_d=0或(strob=1和 t=“1111”)時,狀態(tài)機(jī)將進(jìn)入該狀態(tài)。如果strob=1,F(xiàn)PGA主設(shè)備將傳輸一個短數(shù)據(jù)包。從設(shè)備FIFO控制線的狀態(tài)為:PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)SLWR#進(jìn)行采樣兩個周期于FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA0的局partial_wait狀態(tài) 鐘周期,以確保flaga上的有效狀態(tài)。FPGAZLPFIFO]圖47.ZLP傳輸?shù)臓顟B(tài)機(jī)(flaga_d(flaga_d==t==(flagb_d==1)&(strob==(flagb_d==(flagb_d==zlp_idlePKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=zlp_wait_flagbzlp_write狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=zlp_write_wr_delay狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)SLWR#進(jìn)行采樣兩個周期于FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA0的局zlp_wait狀態(tài)flagb_d1strob1時,狀態(tài)機(jī)將zlp_wait_flagb狀態(tài)切換到該狀態(tài),并將一zlp數(shù)據(jù)包傳輸?shù)絪由于水6,因此,只有經(jīng)過局部標(biāo)志(flagb)6個周期,flaga0。該狀態(tài)會暫停執(zhí)行多4個時鐘周期,以確保flaga上的有效狀態(tài)。 VerilogRTL中針對串流OUT示例執(zhí)行的狀態(tài)機(jī) t==
(flagc_d==
t==
(flagd_d==
(flagd_d==stream_out_idlePKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=stream_out_flagc_rcvdstream_out_wait_flagdstream_out_read狀態(tài)PKTEND#=1;SLOE#=0;SLRD#=0;SLCS#=0;SLWR#=1;A[1:0]=stream_out_read_rd_oe_delay備PKTEND#=1;SLOE#=0;SLRD#=0;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(2b),局部標(biāo)志(flagd)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)的SLRD#進(jìn)行采樣三個周期。由于考慮FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA0flagd_d(flagd的觸發(fā)輸出)進(jìn)行采樣后,激活SLRD#一個周期。stream_out_read_oe_delay PKTEND#=1;SLOE#=0;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]= 回送示例FPGA從從設(shè)備FIFO數(shù)據(jù)回寫到從設(shè)備FIFO]:
(flagc_d==
flagd_d==flagb_d==
flagb_d== flagd_d==
flaga_d==
t==
t==
loop_back_idle狀態(tài)PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_flagc_rcvd狀態(tài)loop_back_wait_flagd狀態(tài)loop_back_read如果flagd_d=1,狀態(tài)機(jī)將進(jìn)入該狀態(tài)。狀態(tài)機(jī)將激活讀控制信號如下:PKTEND1;SLOE0;SLRD0;SLCS0;SLWR1;A[1:03loop_back_read_rd_oe_delay備PKTEND#=1;SLOE#=0;SLRD#=0SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(2b),局部標(biāo)志(flagd)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)的SLRD#進(jìn)行采樣三個周期。由于考慮FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA0flagd_d(flagd的觸發(fā)輸出)進(jìn)行采樣后,激活SLRD#一個周期。loop_back_read_oe_delay PKTEND#=1;SLOE#=0;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_wait_flaga狀態(tài) PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_wait_flagb狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=loop_back_write狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=0;A[1:0]=loop_back_write_wr_delay狀態(tài)備PKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=根據(jù)使用局部標(biāo)志情況下的通用一節(jié)中的(1),局部標(biāo)志(flagb)變?yōu)?后,F(xiàn)X3需要對處于激活狀態(tài)SLWR#進(jìn)行采樣兩個周期于FPGA至接口的一個周期的傳輸延遲,F(xiàn)PGA0的局loop_back_flush_fifoPKTEND#=1;SLOE#=1;SLRD#=1;SLCS#=0;SLWR#=1;A[1:0]=項目操作SuperSpeedExplorer套件時,要確保已將跳線J5FX3開發(fā)套件(CYUSB3KIT-001)時,請按照表7對各跳線器和開關(guān)進(jìn)行設(shè)置。使用HSMC連接器將FX3DVK電路板連接至AlCycloneIIIFPGA入門電路板,并在給AlCycloneIIIFPGA電路板供電之前,先給FX3DVK電路板供電。使用固件鏡像文SF_loopback.imgFX3FX3SDKControlCenterUSB主機(jī)編程FX3。編程AlCycloneIIIFPGA前,應(yīng)先對FX3進(jìn)行編程。固件后,F(xiàn)X3器件會作為一個SuperSpeed器件進(jìn)行枚舉(如果已連接到USB3.0端口)。50ControlCenter對FX3固件進(jìn)行編slaveFIFO2b_loopback.sofAlCycloneIIIFPGA。可使用任意標(biāo)準(zhǔn)的編程器(如QuartusII軟件中的USB-Blaster應(yīng)用)編程FPGA?,F(xiàn)在,可使用ControlCenter工具啟動傳輸過程。首先,從USB主機(jī)啟動一個BULKOUT傳輸。在ControlCenter中選擇BULKOUTendpoint項,然后點(diǎn)擊TransferFile-OUT按鍵。這樣,您可瀏覽并選擇包含需要傳輸?shù)臄?shù)據(jù)的文件。在本應(yīng)用筆記的附件中,您可在回送文件夾中找到TEST.txt文件。該文件包含一個以交替方式發(fā)送“0xA5A5A5A50x5A5A5A5A”的數(shù)據(jù)圖案。雙擊選擇該文件,然后發(fā)送FPGA正在等待FLAGA變?yōu)?。只要PIB_SOCKET_0的緩沖區(qū)中的數(shù)據(jù)可用,F(xiàn)PGA會立即該數(shù)據(jù)。然后,F(xiàn)PGA會回送同樣的數(shù)據(jù),并將其寫入到FX3的PIB_SOCKET_3。您可USBBULKINControlCenter中選BULKINendpoint項,并點(diǎn)TransferData-IN按鍵。這樣,先前寫入的數(shù)據(jù)將被。 對于串流IN或串流OUT,使用固件鏡像文件SF_streamIN.img編程FX3器件。也可以使用FX3SDK中的ControlCenter工具通過USB主機(jī)編程FX3。編程AlCycloneIIIFPGA前,應(yīng)先對FX3進(jìn)行編程。固件后,F(xiàn)X3器件會作為一個超速器件進(jìn)行枚舉(如果已連接到USB3.0端口)。對于串流IN傳輸和串流OUT傳輸,分別使用slaveFIFO2b_streamIN.sof文件和slaveFIFO2b_streamOUT.sof文件編程AlCycloneIIIFPGA??墒褂萌我鈽?biāo)準(zhǔn)的編程器(如QuartusII軟件中的USB-Blaster應(yīng)用)編程在串流IN情況下,F(xiàn)PGA正在等待FLAGA變?yōu)?。當(dāng)緩沖區(qū)可用時,F(xiàn)PGA立即將數(shù)據(jù)連續(xù)寫入到FX3的PIB_SOCKET_0。您可USBBULKIN傳輸。在賽斯Streamer工具中選BULKIN端Start55InZ77ExpressChipsetWin764位電在串流OUT情況下,F(xiàn)PGA正在等待FLAGC變?yōu)?。當(dāng)數(shù)據(jù)可用時,F(xiàn)PGA立即連續(xù)FX3的PIB_SOCKET_3中的數(shù)據(jù)。您可從USB主機(jī)發(fā)送連續(xù)的BULKOUT傳輸。在賽斯Streamer工具中選擇BULKOUTStart56中顯示了在配有InZ77ExpressChipset的Win764位電腦上觀察到的性能。SF_streamIN.img文件可使用于INOUTSF_streamIN.img8個緩沖4個緩沖區(qū)分別分配U2P性能。 對于串流IN或串流OUT,使用固件鏡像文件SF_shrt_ZLP.img編程FX3器件。也可以使用FX3SDK中的ControlCenter工具通過USB主機(jī)編程FX3。編程AlCycloneIIIFPGA前,應(yīng)先對FX3進(jìn)行編程。固件后,F(xiàn)X3器件會作為一個SuperSpeed器件進(jìn)行枚舉(如果已連接到USB3.0端口)。通過使用slaveFIFO2b_partial.sof文件對AlCycloneIIIFPGA進(jìn)行編程。可使用任意標(biāo)準(zhǔn)的編程器(完成編程FX3固件后,分配給PIB_SOCKET_0的緩沖區(qū)立即可用。通過FLAGA,F(xiàn)PGA正在處于等待該條件發(fā)生的狀態(tài)。一旦標(biāo)志等于1,F(xiàn)PGA會開始對FX3進(jìn)行寫操作?,F(xiàn)在,USB主機(jī)可發(fā)送BULKIN令牌數(shù)據(jù)包。在ControlCenter工具中,選擇BULKIN端點(diǎn),然后點(diǎn)擊TransferData-IN按鍵。首先,將收到完整的數(shù)據(jù)包。再次點(diǎn)擊TransferData-IN按鍵。現(xiàn)在,將收到短數(shù)據(jù)ZLP傳輸?shù)臏y試步驟 對于串流IN或串流OUT,使用固件鏡像文件SF_shrt_ZLP.img編程FX3器件。也可以使用FX3SDK中的ControlCenter工具通過USB主機(jī)編程FX3。編程AlCycloneIIIFPGA前,應(yīng)先對FX3進(jìn)行編程。固件后,F(xiàn)X3器件會作為一個SuperSpeed器件進(jìn)行枚舉(如果已連接到USB3.0端口)。slaveFIFO2b_ZLP.sofAlCycloneIIIFPGA??墒褂萌我鈽?biāo)準(zhǔn)的編程器(如QuartusII軟件中的USB-Blaster應(yīng)用)編程FPGA。完成編程FX3固件后,分配給PIB_SOCKET_0的緩沖區(qū)立即可用。通過FLAGA,F(xiàn)PGA正在處于等待該條件發(fā)生的狀態(tài)。一旦標(biāo)志等于1,F(xiàn)PGA會開始對FX3進(jìn)行寫操作。現(xiàn)在,USB主機(jī)可發(fā)送BULKIN令牌數(shù)據(jù)包。在ControlCenter工具中,選擇BULKIN相關(guān)的項目文件文件/文件夾名說FX3固FX3該文件夾包括下面的子文件夾XilinxFPGA源代碼(Verilog),可支持所有傳輸類型(串流IN、串流OUT、XilinxFPGA源代碼(VHDL),可支持所有的傳輸類型(串流IN、串流OUT、Verilog和VHDL中的AlFPGA源代碼該文件夾包含針對每一種傳輸?shù)淖游募A。下面的每個文件夾中均包含VHDL項目fpga_loopback,用于回送數(shù)據(jù)傳輸fpga_partial,用于短數(shù)據(jù)包數(shù)據(jù)傳輸fpga_streamIN,用于串流IN數(shù)據(jù)傳輸fpga_streamOUT,用于串流OUT數(shù)據(jù)傳輸fpga_zlp,用于ZLP傳輸該文件是一個X3IO實(shí)現(xiàn),并用來設(shè)置回送傳輸所DMA通道。注意:各個FX3固件鏡像之間的唯一區(qū)別在于DMA通道的設(shè)置方式,以便能輕該文件是一個FX3固件鏡像,包含了從設(shè)備FIFO實(shí)現(xiàn)。當(dāng)執(zhí)行串流IN傳輸時,它可設(shè)置性能優(yōu)化所要求的DMA通道。該文件是一個FX3固件鏡像,包含了從設(shè)備FIFO實(shí)現(xiàn)。當(dāng)執(zhí)行串流OUT傳輸時,它可設(shè)置性能優(yōu)化所要求的DMA通道。該文件是一個X3IO實(shí)現(xiàn)。當(dāng)執(zhí)行短數(shù)據(jù)包或零長度數(shù)據(jù)包(ZP)傳輸時,它可設(shè)置性能優(yōu)化所要求的DMA通道。該文件包含了通過使用ControlCenter工具中TransferFile-OUT按鍵發(fā)送的數(shù)匯本應(yīng)用筆記詳細(xì)說明了同步從設(shè)FIFO接口。此外,還介紹了不同的標(biāo)志配置以及使GPIFIIDesigner工具配置標(biāo)故障排除可能USB在低功耗模式下停滯。使用CyU3PUsbLPMDisable函數(shù)停止進(jìn)入低功耗模式,如(evtype, ){switch{case/*Stoptheapplicationbeforere-starting.*/if(glIsApplnActive){}/*Starttheloopbackfunction.*/CyFxSlFifoApplnStart();注意:該解決方案可能不與USB兼容。您可以采取SDK提供的USBBULKSourceSink示例中(瀏覽至實(shí)現(xiàn)該解決方案后FX3DVKBULKIN傳輸操作還失敗,此時,請確保短接J10012引腳。短接這些引腳后,F(xiàn)LAGA可用于連接至從設(shè)備FIFO接口的FPGA。FPGA將數(shù)據(jù)寫入從設(shè)FIFO時FIFO接口GPIFII狀態(tài)機(jī)將處于“Write”狀態(tài)。寫入數(shù)據(jù)后(該數(shù)據(jù)為數(shù)據(jù)包大小的倍數(shù)),如要立即發(fā)送ZLP,F(xiàn)PGA在取消激活SLWR#信號后需要在至少兩個時鐘周期激活PKTEND#信號。這是因?yàn)镚PIFII狀態(tài)機(jī)需要兩個時鐘周期
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度離職員工保密協(xié)議及競業(yè)限制合同簽訂流程規(guī)范
- 二零二五年度知識產(chǎn)權(quán)保護(hù)合伙人合作協(xié)議范本
- 法律實(shí)務(wù)案例分析題及法律理論應(yīng)用題卷
- 共享平臺合作協(xié)議知識產(chǎn)權(quán)合作開發(fā)協(xié)議
- 高峰會議交流與合作備忘錄
- 油漆勞務(wù)合同油漆工用工合同
- 基于大數(shù)據(jù)的農(nóng)業(yè)現(xiàn)代化種植管理系統(tǒng)開發(fā)實(shí)踐
- 企業(yè)形象策劃及活動推廣合作協(xié)議
- 精紡織品采購合同
- 高一英語動詞時態(tài)對照分析教案
- 美甲基礎(chǔ)理論精品專業(yè)課件
- 監(jiān)護(hù)人考試試題含答案
- 冀教版四年級下冊英語全冊教學(xué)設(shè)計(經(jīng)典,可直接打印使用)
- 高壓變頻器技術(shù)協(xié)議最終2.3日
- 保潔整改方案計劃
- 新編地圖學(xué)教程(第三版)毛贊猷_期末復(fù)習(xí)知識點(diǎn)總結(jié)
- 碘-淀粉比色法測定淀粉酶課件
- 經(jīng)銷商授權(quán)協(xié)議合同書(中英文對照)
- 初三化學(xué)公式大全
- 安裝超載限制器方案
- 外科學(xué)總論--創(chuàng)傷ppt
評論
0/150
提交評論