摘要:本文提出了一种基于USB接口的FPGA SelectMap配置方式的实现方案。方案以大容量Spartan3 FPGA作为配置目标,选用Cypress EZ-USB FX2LP作为USB设备芯片,采用其内置的端点FIFO和GPIF状态机实现了一个高性能的配置数据传输通道,并设计了USB厂商请求来控制配置进程。方案具有配置灵活、成本低、速度快、实现简单的特点,目前已在很多软件无线电项目中得到应用,具有很强的实用性。
1. 引言
FPGA 器件结合了ASIC 的高性能和微处理器的灵活,不仅拥有丰富的逻辑资源,而且可以进行方便灵活的配置。主动配置方式尽管配置速度快、实现简单,但并未发挥FPGA 配置灵活的特点,适合于FPGA 用作单一应用的场合,并且大容量的配置芯片及其占用的电路板面积也带来了较高的成本;被动配置方式需要使用外部控制单元产生配置时序,实现一般较为复杂,而且在目前常见的方案中,常由于接口速率限制[1]或者采用微处理器介入数据传输等原因,而造成配置速度不高。USB2.0 协议在目前PC 外设的接口方案中非常流行,它支持高速率、多管道、多类型的数据传输,可以方便的构建出高性能的数据传输通道和灵活的控制通道。
本文提出了一种基于 USB 接口的FPGA SelectMap(并行被动)配置方式的实现方案,不但具有被动配置灵活、设计成本低的特点,而且实现简单、配置快速。方案以Xilinx Spartan3系列目前容量的500 万门FPGA(XC3S5000)作为配置目标,选用Cypress EZ-USBFX2LP 作为USB 设备芯片,并使用其内部的大容量端点FIFO,在GPIF 状态机的控制下,实现了一个高性能的配置数据传输通道。配置的进程则由设计的USB 请求来控制。此配置方案具有开发简单、配置成本低、速度快、使用灵活的特点,具有很强的实用性。
2. 系统的总体设计
如图 1 所示,系统使用USB 通道连接上位机和EZ-USB。EZ-USB 是一块高速USB 外设芯片,它支持USB 协议所描述全部四种传输模式,并拥有1 个64Byte 的控制传输专用端点、2 个缓存为64Byte 的普通端点和4 个缓存可达1KB、并可以进行四倍缓冲的大端点。本设计方案使用了一个控制端点(端点0)和一个大端点(端点2)传输数据。其中控制端点是所有USB 设备所必备的,它用于在设备枚举时传输USB 请求和相关数据,在本设计中,控制端点还用来传输专门设计的USB 厂商请求来控制配置进程、获取配置状态。大端点用来传输配置数据,由于配置数据需要及时、无误的传输,因此使用可以同时保证传输准确性和延时的中断传输方式,并设置端点缓存为1KB、做4 倍缓冲,传输间隔为一个微帧(125us),且每个传输间隔内传输3 个有效载荷为1KB 的包(一个包的载荷可能小于1KB),这样配置数据在USB 通道中的传输速率可达到3*1KB*(1/125us)=24000KB/s。
数据从端点转移到外设(FPGA)的过程中,如果使用USB 设备芯片内嵌的8051 MCU进行转移的话,快8 个时钟周期才能传输一个字节的数据[2],在8051 的时钟周期为48MHz情况下,传输速度为6MB/s,远小于USB 通道的传输速率,会成为瓶颈而无法发挥出USB传输通道高传输速率的优势;而如果通过位宽为8bit 的 FIFO 来传输的话,快情况下,每时钟周期都可以传输一个字节数据[2]。在EZ-USB 中,大端点的缓存可以作为端点FIFO 直接连接FPGA 的配置数据输入口形成高速传输通道,端点FIFO 的读写时序可由EZ-USB 内嵌的GPIF(General Programmable Interface)产生,MCU 可以不参与端点到FPGA 的数据转移,只起到配置和控制的作用,在FIFO 位宽为8bit,GPIF 时钟频率为48MHz 的情况下,传输速率为48MB/s,这样数据从端点到FPGA 的传输速度超过了上位机到端点的USB 中断传输管道的速度,不对USB 传输通道构成瓶颈。
3. 配置时序的发生
配置数据需要在配置时序的配合下写入 FPGA。GPIF 是一个可编程的状态机,它可以采集5 个输入引脚(RDY)的状态,并通过5 个输出引脚(CTL)对外产生任意时序,因此可用来产生FPGA 的配置时序。表1 说明了FPGA 在SelectMap 模式下各配置引脚的作用,如图1 所示,CCLK 连接EZ-USB 提供的界面时钟IFCLK,D[7:0]连接端点FIFO,其它配置引脚连接着GPIF 状态机的RDY 及CTL 引脚。为了确保各引脚的输入有充足的建立时间供FPGA 采样,FPGA 的时钟输入应与GPIF 的内部时钟倒相。
根据配置时序所设计的 GPIF 状态机的状态转移图如图2 所示。配置时钟为48MHz,所以PROG 低脉冲要维持25 个时钟周期,状态机会根据端点FIFO 的空满状态控制FPGA 的CS 引脚,确保FPGA 在FIFO 有配置数据输出的情况下进行数据采样,数据输出在字节计数达到FPGA 配置比特流文件的字节数值时停止,500 万门的XC3S5000 为13271936 bit。
4. 系统软件的设计
4.1 EZ-USB 固件程序设计
EZ-USB 的固件框架如图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 的实用配置方案,配置方式灵活、配置、速度快、配置成本低、系统开发简单。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。