1.引言
FPGA器件结合了 ASIC的高性能和微处理器的灵活,不仅拥有丰富的逻辑资源,而且可以进行方便灵活的配置。主动配置方式尽管配置速度快、实现简单,但并未发挥 FPGA配置灵活的特点,适合于 FPGA用作单一应用的场合,并且大容量的配置芯片及其占用的电路板面积也带来了较高的成本;被动配置方式需要使用外部控制单元产生配置时序,实现一般较为复杂,而且在目前常见的方案中,常由于接口速率限制 [1]或者采用微处理器介入数据传输等原因,而造成配置速度不高。
USB2.0协议在目前 PC外设的接口方案中非常流行,它支持高速率、多管道、多类型的数据传输,可以方便的构建出高性能的数据传输通道和灵活的控制通道。
本文提出了一种基于 USB接口的 FPGA SelectMap(并行被动)配置方式的实现方案,不但具有被动配置灵活、设计成本低的特点,而且实现简单、配置快速。方案以 Xilinx Spartan3系列目前最大容量的 500万门 FPGA(XC3S5000)作为配置目标,选用 Cypress EZ-USB FX2LP作为 USB设备芯片,并使用其内部的大容量端点 FIFO,在 GPIF状态机的控制下,实现了一个高性能的配置数据传输通道。配置的进程则由设计的 USB请求来控制。此配置方案具有开发简单、配置成本低、速度快、使用灵活的特点,具有很强的实用性。
2.系统的总体设计
如图 1所示,系统使用 USB通道连接上位机和 EZ-USB。EZ-USB是一块高速 USB外设芯片,它支持 USB协议所描述全部四种传输模式,并拥有 1个 64Byte 的控制传输专用端点、2个缓存为 64Byte的普通端点和 4个缓存最大可达 1KB、并可以进行四倍缓冲的大数据从端点转移到外设(FPGA)的过程中,如果使用 USB设备芯片内嵌的 8051 MCU进行转移的话,最快 8个时钟周期才能传输一个字节的数据[2],在 8051的时钟周期为 48MHz情况下,传输速度为 6MB/s,远小于 USB通道的传输速率,会成为瓶颈而无法发挥出 USB传输通道高传输速率的优势;而如果通过位宽为 8bit的 FIFO来传输的话,最快情况下,每时钟周期都可以传输一个字节数据[2]。在 EZ-USB中,大端点的缓存可以作为端点 FIFO直接连接 FPGA的配置数据输入口形成高速传输通道,端点 FIFO的读写时序可由 EZ-USB内嵌的 GPIF[4](General Programmable Interface)产生,MCU可以不参与端点到 FPGA的数据转移,只起到配置和控制的作用,在 FIFO位宽为 8bit,GPIF时钟频率为 48MHz的情况下,传输速率为 48MB/s,这样数据从端点到 FPGA的传输速度超过了上位机到端点的 USB中断传输管道的最大速度,不对 USB传输通道构成瓶颈。
3.配置时序的发生
配置数据需要在配置时序的配合下写入 FPGA[5]。GPIF是一个可编程的状态机,它可以采集 5个输入引脚(RDY)的状态,并通过 5个输出引脚(CTL)对外产生任意时序,因此可用来产生 FPGA的配置时序。表 1说明了 FPGA在 SelectMap模式下各配置引脚的作用[5],如图 1所示,CCLK连接 EZ-USB提供的界面时钟 IFCLK,D[7:0]连接端点 FIFO,其它配置引脚连接着 GPIF状态机的 RDY及 CTL引脚。为了确保各引脚的输入有充足的建立时间供 FPGA采样,FPGA的时钟输入应与 GPIF的内部时钟倒相。
本设计方案使用了一个控制端点(端点 0)和一个大端点(端点 2)传输数据。其中控制端点是所有 USB设备所必备的,它用于在设备枚举时传输 USB请求和相关数据,在本设计中,控制端点还用来传输专门设计的 USB厂商请求来控制配置进程、获取配置状态。大端点用来传输配置数据,由于配置数据需要及时、无误的传输,因此使用可以同时保证传输准确性和最大延时的中断传输方式,并设置端点缓存为 1KB、做 4倍缓冲,最大传输间隔为一个微帧(125us),且每个传输间隔内传输 3个有效载荷为 1KB的包(最后一个包的载荷可能小于 1KB),这样配置数据在 USB通道中的传输速率可达到 3*1KB*(1/125us) =24000KB/s。
根据配置时序所设计的 GPIF状态机的状态转移图如图 2所示。配置时钟为 48MHz,所以 PROG低脉冲要维持 25个时钟周期,状态机会根据端点 FIFO的空满状态控制 FPGA的 CS引脚,确保 FPGA在 FIFO有配置数据输出的情况下进行数据采样,数据输出在字节计数达到 FPGA配置比特流文件的字节数值时停止,500万门的 XC3S5000为 13271936 bit[5]。
4.系统软件的设计
4.1 EZ-USB固件程序设计
EZ-USB的固件框架[3]如图 3所示,Cypress为大部分模块提供了完整的代码,本设计需要编写的模块有 TD_Init,TD_Poll和 USB请求解析模块。 TD_Init模块仅执行一次,作用是设置端点和 GPIF传输界面,以及将端点 2缓存的控制权交给逻辑单元使得逻辑单元可以将总线上收到的数据包装入缓存。TD_Poll模块会反复执行,作用是在端点 2的缓存填入数据包后,开启 GPIF状态机,将 FIFO内的配置数据写入 FPGA。USB请求解析模块需要解析本方案设计的 2条 USB厂商请求,0xB1和 0xB2,它们用于配置初始化和查询配置状态。
4.2上位机程序设计
由于 Cypress已提供 USB设备驱动,因此上位机程序只需要获得了一个至 USB 设备驱动程序的句柄,打开包含配置代码的文件并对其进行语法分析,在 USB 中断传输的每次调用过程中传送取自配置文件的 1024字节发送出去,这一过程将继续下去,直到配置文件中没有剩余字节为止。
5.配置性能的实际测试
配置数据传输的瓶颈在 USB传输通道,而采用中断端点时, USB传输通道的速度极限值应为 24000KB/s,对于 500万门的 XC3S5000而言,传输 13271936bit配置数据的理论时间约为 527.4ms。
对配置时间进行的实际测试中,使用 500万门的 XC3S5000作为配置对象,使用测量精度为 10ms的码表测量从送出配置文件到 FPGA的 Done引脚所连接的 LED点亮的时间差,经测量,配置实际使用时间为 540ms。考虑到 MCU判断端点缓存和开启标志,以及开启状态机所用时间,实测值比理论值多出的时间是合理的。
6.结论
采用 Cypress EZ-USB及其内置的 GPIF状态机对大容量 FPGA进行 SelectMap方式配置的方案,不仅具有被动配置方式灵活性高的优点,而且因为不需要大容量配置存储器、同时可以节约电路板空间,所以实现成本较低。另外 Cypress完善的开发工具也使得方案的实现非常简单。经过实际测试,本方案的配置速度非常快,对于大规模 FPGA配置时间也能在一秒之内完成,因此本方案具有很好的实用价值。
本文作者创新点:设计了一种针对大规模 FPGA的实用配置方案,配置方式灵活、配置速度快、配置成本低、系统开发简单。