利用EZ-USB®FX3从器件FIFO接口进行设计December20,2011文档编号:001-75215修订版**1AN65974作者:SoniaGandhi相关项目:无软件版本:无相关应用笔记:无应用笔记摘要AN65974对EZ-USB®FX3SuperSpeedUSB控制器的异步和同步从器件FIFO接口加以探讨。EZ-USBFX3的通用可编程接口(GPIFII)可通过配置用作异步或同步从器件FIFO接口。该应用笔记对接口细节、访问序列及执行数据访问的其他考虑因素进行了探讨。简介CypressEZ-USBFX3是新一代USB3.0外设控制器,可提供高度集成的灵活特性以帮助开发人员在任何系统中添加USB3.0功能。EZ-USBFX3设有一个称为GPIFII的全配置并行通用可编程接口,可连接至外部处理器、ASIC或FPGA。GPIFII是赛普拉斯旗舰USB2.0产品FX2LP中所使用GPIF的加强版本。它可轻松连接至异步SRAM、异步和同步地址数据复用式接口以及其他多种常用接口。从器件FIFO接口是GPIFII的常用领域。从器件FIFO是连至FX3的外部设备访问FX3FIFO的应用的首选接口,可实现与FX3FIFO之间的数据读写。直接寄存器访问并非通过从器件FIFO接口执行。该应用笔记将先对GPIFII进行简单介绍,然后对从器件FIFO接口加以详细讨论。GPIFIIEZ-USBFX3可提供高性能的通用可编程接口(GPIFII)。GPIFII是一种可编程状态机,其所启用的灵活接口可用作工业标准或专用接口中的主控或从器件。并行和串行接口均可通过GPIFII实现。GPIFII具有以下特性:可用作主控或从器件提供256种固件可编程状态支持8位、16位和32位并行数据总线接口频率可高达100MHz。使用32位数据总线时支持14根可配置控制引脚。所有控制引脚可作为输入/输出或双向引脚。使用16/8位数据总线时支持16根可配置控制引脚。所有控制引脚可作为输入/输出或双向引脚。GPIFII状态转换以控制输入信号为依据。而控制输出信号则是GPIFII状态转换所得结果。GPIFII状态机的行为取决于GPIFII描述符。GPIFII描述符的设计应符合必需的接口规范,而且实际上是可编程寄存器配置的集合。(EZ-USBFX3寄存器空间中有)8kB的内存空间专门用作GPIFII波形存储器,用于存放特定格式的GPIFII描述符。异步和同步从器件FIFO接口是GPIFII的常用领域。软件开发工具包异步从器件FIFO和同步从器件FIFO接口的GPIFII描述符可在EZ-USBFX3软件开发工具包中找到。安装SDK时,可在以下目录中找到描述符:异步从器件FIFO:C:\ProgramFiles\Cypress\FX3SDK\firmware\slavefifo\slfifoasync\cyfxslfifogpifdscr.c同步从器件FIFO:C:\ProgramFiles\Cypress\FX3SDK\firmware\slavefifo\slfifosync\cyfxslfifogpifdscr.c这些文件中包含了支持16位数据总线宽度和32数据总线宽度的描述符。常量CY_FX_SLFIFO_GPIF_16_32BIT_CONF_SELECT在头文件cyfxslfifoasync.h和cyfxslfifosync.h中加以定义(这些头文件是位于相同目录中的描述符文件)。该常量必须设置为1或0,前者为选择32位数据描述符,后者则为选择16位数据描述符。AN65974December20,2011文档编号:001-75215修订版**2从器件FIFO接口的详细内容将在以下章节中进行讨论。从器件FIFO描述符的引脚映射SDK中从器件FIFO描述符的引脚映射显示在表1中。该表同时还提供了通用I/O引脚以及针对从器件FIFO接口配置GPIFII时的其他可用串行接口(UART/SPI/I2S)。表1:从器件FIFO接口的引脚映射EZ-USBFX3引脚带16位数据总线的异步从器件FIFO接口带16位数据总线的同步从器件FIFO接口带32位数据总线的异步从器件FIFO接口带32位数据总线的同步从器件FIFO接口GPIO[17]SLCS#SLCS#SLCS#SLCS#GPIO[18]SLWR#SLWR#SLWR#SLWR#GPIO[19]SLOE#SLOE#SLOE#SLOE#GPIO[20]SLRD#SLRD#SLRD#SLRD#GPIO[21]FLAGAFLAGAFLAGAFLAGAGPIO[22]FLAGBFLAGBFLAGBFLAGBGPIO[24]PKTEND#PKTEND#PKTEND#PKTEND#GPIO[28]A1A1A1A1GPIO[29]A0A0A0A0GPIO[0:15]DQ[0:15]DQ[0:15]DQ[0:15]DQ[0:15]GPIO[16]请勿使用PCLK请勿使用PCLKGPIO[33:44]用作通用I/O用作通用I/ODQ[16:27]DQ[16:27]GPIO[45]通用I/O通用I/O通用I/O通用I/OGPIO[46]通用I/O/UART_RTS通用I/O/UART_RTSDQ28DQ28GPIO[47]通用I/O/UART_CTS通用I/O/UART_CTSDQ29DQ29GPIO[48]通用I/O/UART_TX通用I/O/UART_TXDQ30DQ30GPIO[49]通用I/O/UART_RX通用I/O/UART_RXDQ31DQ31GPIO[50]通用I/O/I2S_CLK通用I/O/I2S_CLK通用I/O/I2S_CLK通用I/O/I2S_CLKGPIO[51]通用I/O/I2S_SD通用I/O/I2S_SD通用I/O/I2S_SD通用I/O/I2S_SDGPIO[52]通用I/O/I2S_WS通用I/O/I2S_WS通用I/O/I2S_WS通用I/O/I2S_WSGPIO[53]通用I/O/SPI_SCK/UART_RTS通用I/O/SPI_SCK/UART_RTS通用I/O/UART_RTS通用I/O/UART_RTSGPIO[54]通用I/O/SPI_SSN/UART_CTS通用I/O/SPI_SSN/UART_CTS通用I/O/UART_CTS通用I/O/UART_CTSGPIO[55]通用I/O/SPI_MISO/UART_TX通用I/O/SPI_MISO/UART_TX通用I/O/UART_TX通用I/O/UART_TXGPIO[56]通用I/O/SPI_MOSI/UART_RX通用I/O/SPI_MOSI/UART_RX通用I/O/UART_RX通用I/O/UART_RXGPIO[57]通用I/O/I2S_MCLK通用I/O/I2S_MCLK通用I/O/I2S_MCLK通用I/O/I2S_MCLK注:如需EZ-USBFX3的完整引脚映射,请参见数据表“EZ-USBFX3SuperSpeedUSB控制器”AN65974December20,2011文档编号:001-75215修订版**3异步和同步从器件FIFO接口这些接口与FX2LP的从器件FIFO接口相类似,是外部处理器或设备需要对FX3的内部FIFO缓冲区执行数据读/写访问的应用的理想选择。图1显示了异步从器件FIFO接口的接口图。图1.异步从器件FIFO接口图ExternalProcessorEZ-USBFX3SLCS#A[0:1]D[0:15]/D[0:31]SLRD#SLOE#SLWR#PKTEND#FLAGAFLAGB注:可能配置多个标志。图2同步从器件FIFO接口图ExternalProcessorEZ-USBFX3SLCS#A[0:1]D[0:15]/D[0:31]SLRD#SLOE#SLWR#PKTEND#FLAGAFLAGBPCLK注:可能配置多个标志。异步从器件FIFO时序和访问序列外部处理器和设备(用作接口主控)可能会对FX3的内部FIFO缓冲区执行单次循环或突发数据访问。外部设备提供FIFOADDR线上的2位地址,然后设置读探针或写探针。标志信号被FX3激活以指示缓冲区的空/满状态。图3图3显示了异步从器件FIFO读访问的时序和序列。图4显示了异步从器件FIFO写访问的时序和序列。图6显示了同步从器件FIFO读访问的时序和序列。图7显示了同步从器件FIFO写访问的时序和序列。请注意,寄存器访问无法通过从器件FIFO接口执行。线程和套接字EZ-USBFX3FIFO与套接字相关联。GPIFII一侧的套接字类似于USB接口上的端点。EZ-USBFX3可提供多达四个物理线程以用于GPIFII上的数据传输。同时,任何套接字均可映射至某个线程上。需要使用的套接字必须映射至线程上。这种映射将由EZ-USBFX3固件来完成。例如,假设套接字2映射至线程0,而套接字3映射至线程1。请注意,接口上的地址信号A0:A1表示要访问的线程。然后,FX3的DMA结构将数据路由至映射至该线程上的套接字。因此,在本例中,当A0:A1=0时,线程0被访问,而任何通过线程0传输的数据将路由至套接字2。同样,当A0:A1=1时,数据将通过套接字3输入/输出。标志配置标志可被EZ-USBFX3固件配置为空、满、局部空或局部满信号。这些并非由GPIFII状态控制,而是由FX3内部的DMA硬件引擎直接控制。标志与特定线程相关联,因此可指示当前映射至该线程的套接字状态。标志将根据套接字方向(套接字安全期间已配置)指示空或满。因此,标志会在数据从套接字中读出时指示空/满状态,并在数据写入套接字时指示满/不满状态。AN65974December20,2011文档编号:001-75215修订版**4专用线程标志标志可配置为指示特定线程的状态。这种情况下,该标志被指定仅用于指示该线程,并始终仅指示映射到该线程上的套接字状态,与正在寻址的线程无关。这种情况下,外部处理器/设备必须跟踪专用于各线程的具体标志,并在每次寻址到不同线程时监控正确标志。例如,如果FLAGA专用于线程0,而FLAGB专用于线程1,则当外部处理器对线程0执行访问时,必须监控FLAGA。当外部处理器访问线程1时,则必须监控FLAGB。每个将要访问的线程均应对应一个专用标志。因此,如果应用需要访问四个线程,就应有四个对应的标志。当前线程标志标志可配置为指示当前已寻址线程的状态。这种情况下,GPIFII状态机将在地址总线上进行地址采样,然后更新标志以指示该线程状态。这种配置需要的引脚数更少,因为只需单一“当前线程”标志即可指示所有四个线程的状态。但是,由于GPIFII必须在更新标志前先进行地址采样,因此当前线程标志用于同步从器件FIFO接口时,就会发生两次循环延迟。两次循环延迟是指从接口显示有效地址的时间到“当前线程”标志指示新寻址线程状态的时间。根据图6,如果FLAGA是“当前线程”标志,就需要比图中所示循环再增加一次额外循环才能显示有效状态。(注:SDK中所包含的从器件FIFO描述符使用的是“当前线程”标志配置。)局部标志标志可配置为指示套接字的局部空/满状态。水印值可进行选择,这样的话,标志将在被读取或写入的字的数量(32位词汇)少于等于水印值时得到激活。例如,假设FLAGA配置为线程0的局部标志,水印值为2。如果外部处理器/设备对线程0执行写访问,则FLAGA会在EZ-USBFX3的FIFO缓冲区还剩下再写入两个32位字的空间时得到激活。请注意,局部标志的水印值与系统相关,取决于外部处理器实际进行标志采样的要求和延迟。注:SDK中的描述符将如下配置标志:异步从器件FIFO接口描述符:FLAGA配置为“当前线程”的空/满标志。FLAGB配置为“当前线程”的局部标志。同步从器件FIFO接口描述符:FLAGA配置为“当前线程”的空/满标志。FLAGB同样配置为“当前线程”的空/满标志。在这种情况下,FLAGB就只是FLAGA的重复。这种配置可根据系统要求进行更改。PKTEND#信号PKT