随着通信技术的快速发展,多模式通信体制在现代通信中广泛存在,如时分多址、空分多址、空分多址、频分多址等。而调制、解调技术又分为FM、FSK、BPSK、QPSK等多种调制及解调技术。在一个通信系统中往往采用多种通信模式,这对硬件设备资源提出了比较高的要求,特别是对可编程芯片资源的要求。另外,多模式系统设计的复杂性也大大提高,同时对系统的维护和升级提出了挑战。
近些年FPGA技术得到了飞速的发展,其作为可编程资源广泛应用在大型复杂通信系统设计中。尽管FPGA在资源集成度方面近些年取得了可观的成果,但是在多模式的大型系统设计中,单片FPGA资源远远不能够满足设计需求,有时可能需要多个芯片。然而FPGA价格相对较高,这大大提高了设计成本,而且不易于产品升级和维护。
FPGA多重加载技术[1-2]实际是对可编程资源的复用,用户可以根据需求选择加载不同的比特文件,从而实现多模式功能。FPGA多重加载技术可以解决可编程资源不足的问题,提高了可编程资源的利用率,同时降低了系统设计的复杂性,增加了系统设计的灵活性,减小了多模式系统的耦合性,便于系统升级和维护。
1 硬件设计
Kintex7和SPI Flash物理连接的硬件设计如图1所示。SPI Flash的容量选择与设计的加载模式的个数和FPGA芯片的种类有关,本设计实现4种模式切换,SPI Flash内存储4个比特文件,SPI Flash的容量是512 Mbit。
2 控制部分的设计
控制部分的设计是基于PowerPC[3]处理器实现的,用于对整个数据采集系统的控制,这里只对FPGA模式加载控制做简单说明。FPGA的加载模式控制信息由上位机发送,上位机的1 G(TCP协议)网络将加载模式控制信息发送到数据采集系统的1 G网络;数据采集系统控制部分解析TCP数据包,提取有效信息,判断加载模式,将加载信息通过EPC(外设控制器)写到FPGA的寄存器中,Kintex7会根据寄存器中的值选择加载模式。外设控制器(EPC)是FPGA与PowerPC之间通信的桥梁,在重加载控制过程中主要负责传递加载模式信息到FPGA寄存器内,另外还需要将加载成功后的模式信息进行回读,并且通过1 G网络送到上位机界面,判断是否重加载成功。嵌入式控制部分的设计如图2所示。
3 重加载模块的设计
IRPOG命令序列是实现FPGA重加载的重要环节。IPROG命令的效果与在PROGRAM_B引脚产生一个脉冲的效果类似,但是IPROG命令不对重配置[4]逻辑进行复位。Kintex7内部ICAPE2模块能够执行IPROG命令,IPROG命令触发FPGA从SPI Flash中重新加载比特文件,加载地址是Kintex7中WBSTAR寄存器指定的地址。IPROG命令发送后,FPGA完成3个动作:发送同步字节(AA995566);向Kintex7的WBSTAR寄存器写入下一个加载地址(表1地址为00000000);发送IPORG命令(0000000F)。表1是通过ICAPE2向重配置模块发送IPROG命令的比特流,Multiboot[5]控制器用一个状态机向ICAPE2发送表1中的IPROG命令序列。一般情况下,重配置控制器等待外部的激励信号,当激励信号到达后,控制器向ICAPE2发送表1命令序列,在发送命令序列之前,控制器先把WRITE端口置为低电平,在下一个时钟的上升沿把CE端口置为低电平,接下来发送表1指令序列。
FPGA内的重配置逻辑接收到IPROG命令后,FPGA执行复位操作,但不对重配置逻辑进行复位,并且将INIT_B和DONE引脚拉低。FPGA清除了所有的配置存储后,INIT_B端口被拉高。最后,WBSTAR寄存器的值被用来重新配置FPGA。
IPROG命令序列通过状态机实现,状态机中最少有8个状态才能生成整个IPROG命令序列,否则,IPROG命令序列不能够生成,FPGA不能重新配置。另外,IPROG命令的发送由ICAPE2模块执行,ICAPE2模块的输出时序和SelectMAP的输出时序是一致的,SelectMAP的输出数据格式是位转换格式,所以IPROG命令序列生成的过程中需要将配置数据进行位转换。这里位转换是指字节内位转换,即最高有效位变为最低有效位,以此为规则进行字节内的位互换。位转换结果如表2所示。
4 生成PROM文件
本设计的可编程文件是.mcs文件,生成.mcs文件有两种方法:(1)用户ISE中用命令行的格式生成,在用命令行的方式生成时需要把其他模式的顶层比特文件拷贝到当前工作路径,用promgen+参数的方式生成.mcs文件;(2)使用软件Impact中的PROM File Formatter生成.mcs文件,PROM File Formatter为用户提供了可视化的.mcs文件生成环境。本设计的.mcs文件是由4个比特文件组合而成,每个比特文件代表一种不同的设计模式,其在Flash中存放的首地址和Kintex7中重配置寄存器地址保持一致。
本设计选用S25FL512S Flash,可以存放4个配置Kintex7的比特文件。这4个比特文件的首地址与状态机生成的首地址不同,状态机生成的加载首地址必须进行位转换。4个比特文件存放的首地址分别为表2中左侧的4个地址,位转换后的加载首地址如表3右侧所示,这是由ICAPE2的输出时序决定的,ICAPE2的输出时序和SelectMAP的读写时序一致。另外,ICAPE2的输入时钟范围是1~100 MHz,若超出该范围则不能够正确执行相关寄存器的配置。
5 测试结果及分析
本设计使用Chipscope软件对信号进行捕捉,图3是FPGA重新加载时对ICAPE2模块的输入信号的捕捉结果。可以观察到,状态机成功生成了IPROM命令,并将其发送给ICAPE2模块。
本设计在硬件平台上进行了多模式启动的测试,测试过程及结果:用户通过上位机的控制界面向终端发送模式切换命令,上位机与终端用1 G(TCP协议)网络通信,以PowerPC为处理器搭建的嵌入式控制系统负责接收模式切换指令,终端接收到命令后通过EPC(图1)接口写入Kintex7寄存器,Kintex7的控制逻辑会根据指令触发相应的重加载模式,最后通过终端设备上的LED灯观测到FPGA正确加载。
FPGA是否正确重加载的依据是:FPGA配置文件的功能都是点亮同一个LED灯,区别在于它们点亮LED的频率不同,通过观察LED灯的闪烁频率可以确定FPGA是否正确加载了相应模式。
本实验在重加载前后,LED灯的显示频率分别为1 Hz和2 Hz,说明FPGA重加载成功。对另外两种模式也进行了重加载测试,LED闪烁频率分别是4 Hz和8 Hz。本实验最后观测到LED灯闪烁情况满足预期结果。综上所述,FPGA可以在不掉电的情况下正确重加载,并且任何两种模式可以相互切换,提高了芯片可编程资源的利用率。
参考文献
[1] 李鹏,兰巨龙.用CPLD和Flash实现FPGA配置[J].电子技术应用,2006,32(6):101-102.
[2] 刘钊,杜琪峰,许知博.基于Xilinx-Spartan6 FPGA的MultiBoot设计的实现[J].电子科技,2012,25(3):28-31.
[3] 李炜.基于MicroBlaze的FPGA重配置系统设计[J].科学技术与工程,2007,7(23):6190-6192.
[4] 张江伟.基于Virtex-5和FLASH实现FPGA的多重配置[J].计算机与网络,2012(Z1):3-4.
[5] HUSSEIN J,PATEL R.Multiboot with Virtex-5 FPGAs and platform Flash XL[EB/OL].(2008-11-06)[2014-04-07].http://www.xilinx.com/support/documentation/application_notes/xapp1100.pdf.