引言DSP+
FPGA广泛地应用于各种数字信息处理系统中。在某些特殊的应用场合中,往往需要系统在高温的环境下工作,而系统功耗又不明显增加。虽然一般基于SRAM工艺的FPGA的显现配置方法已经多种多样,但使用的基于SRAM工艺的FPGA高温性能较差,难以满足高温、低功耗系统的需要。Actel公司基于Flash工艺的FPGA是为军工以及宇航设计的器件,完全能够胜任高温的需要。一般的FPGA都具有上电功耗、配置功耗、静态功耗和动态功耗4种,而Actel基于Flash的FPGA由于上电不需要一个很大的启动电流,并且掉电非易失,不需要配置过程,所以只有静态功耗和动态功耗,没有上电功耗和配置功耗。FPGA在高温下具有更低功耗的优势。
本文根据Actel公司的产品手册及相关文件,设计了一种由DSP控制实现FPGA在线编程的方案,使Actel的FPGA能应用于需要在线升级的应用场合中,充分发挥其高温高可靠性、低功耗的优势。当FPGA需要在线编程时,只需通过PC下传FPGA配置命令给DSP,DSP即可把PC下传的FPGA的配置数据通过JTAG写入FPGA完成在线升级。该方法的优点在于:无需额外配置芯片(DSP在不需要给FPGA进行在线升级时,可进行其他工作),简单可靠,在低功耗和高温的应用中显得更为重要。
1 方案设计
图1所示为整体结构设计方案,由PC、UART接口、DSP、RAM存储器、FPGA以及相应的外围辅助
电路构成。其中TMS320F28335芯片是
ti公司2000系列的DSP芯片,A3P250为Actel公司ProASIC3系列的FPGA芯片,RAM芯片为IS61LV51216。DSP的4个GPIO与FPGA的JTAG接口相连,而DSP通过串口转USB与PC
通信。这些芯片都能在125℃环境下正常稳定地工作。其中A3P250一般的静态待机电流仅几mA。
系统基本实现步骤为:
①基于VC编写文件转换软件,实现FPGA的程序代码(.dat文件)转换成2位十六进制的数据,并存储在txt文档中。
②PC发送下载代码指令至DSP,通知DSP有代码需要下传。之后就可以把FPGA程序代码(txt文档)以十六进制数据发送给DSP,DSP将收到2位十六进制数据存至外部RAM中。每个地址存两个2位十六进制数据,先存低位,再存高位(存入RAM是由于FPGA的程序代码量比较大)。
③DSP对下载的代码进行CRC校验,回传调试信息。若代码CRC校验成功,PC就可以发送编程指令通知DSP给FPGA编程。
④DSP控制FPGA JTAG实现读取FPGA设备的ID,验证是否与配置数据中的ID一致。成功,则开始FPGA编程。DSP实时回传编程的调试信息给PC,方便观察调试。编程成功之后,FPGA即可正常运行。
由于串口传输过程只需要两根信号线,即传输线TX以及接收线RX,故传输协议简单,且较好地避免了JTAG距离的限制。同时,系统在需要对DSP的配置控制功能进行升级时,也可以通过串口实现。
2 方案实现
2.1 系统硬件设计和实现
根据方案设计,配置控制电路如图2所示。在本系统中FPGA的JTAG口与DSP的GPIO相连,DSP的SCIA接口经RS485收发器和串口转USB芯片连接至PC,实现指令下传至DSP和调试信息上传至PC。DSP在外部接口(XINTF)的ZONE7区(共3个区域,另两个为ZONE0、ZONE6)外部扩展1片512 KB×16的外部RAM,用以存储FPGA的配置码流。F28335的XINTF区域可以通过编程来配置特定的等待状态数,选通信号的建立和保持时间,而且读写访问可以独立配置。当片选信号被拉低时,用户可以访问该区域。如当程序访问0x00300000时,就会产生外部地址0x00000和ZONE7区片选信号(
)。另外,需特别注意的是,在编程电压VPUMP和地之间需接0.01μF和0.33%20%20μF滤波电容。不接,可能会导致JTAG边界扫描接入失败等问题。通过PC下传下载代码指令,DSP接收FPGA的配置码流并保存在外部RAM,之后PC就可以下传指令,命令DSP给FPGA再编程。
2.2 系统软件设计和实现
2.2.1 DerectC介绍和移植
Actel公司基于Flash的FPGA只能通过JTAG接口,而JTAG使用的距离较近,程序升级必须拆卸系统封装,较为麻烦,且容易造成零部件损坏。Derectc3.0是Actel提供的一系列C源程序代码,通过移植它到不同的微处理器,将微处理器通用I/O(需支持LVTTL电平)连接至FPGA的JTAG接口,实现FPGA的擦除或再编程。DerectC不包含任何与应用或者设备相关的信息,它只负责解析配置文件中的内容,在JTAG接口上产生用于配置的二进制数据流并读取反馈数据,适用于IGL002、SmartFusion2、ProASIC3、IGLOO、Smart Fusion和Fusion系列。DerectC程序框图如图3所示,DerectC需使用Libero生成的.dat格式的FPGA配置文件,文件需要LiberoV8.5以上才能获得。在Libero SoC v11.1中,只需点击gene rate programming data选项即可获得。在使用DerectC时,只需对它作一些修改,增加一些必要的API函数,然后添加至C工程中即可。
把DerectC移植到DSP中,主要经过以下步骤:
①针对使用的FPGA系列,添加和去除预处理语句,去除不必要的代码;
②将JTAG信号映射到具体的DSP硬件引脚;
③添加JTAG输入输出函数和配置文件数据块读取函数等必要的API函数。
对于IGLOO2、SmartFusion2、IGLOO、Smart Fusion和Fusion系列的FPGA,移植过程是完全一样的。移植完成后,对于以上提到的所有Actel的FPGA芯片都可以实现在线编程,只是FPGA的配置电路中滤波电容的个数可能稍有差异。
另外,DerectC还支持FPGA的菊花链编程。在移植DerectC时,只需设置好在边界扫描链中IR和DR的长度和额外支持菊花链的预编译指令。此时只需一块DSP就可以依次完成多块FPGA的在线升级,大大节省了硬件开支。2.2.2 配置文件格式及转换
A3P系列Libero产生的配置文件包含3个方面的内容:
①头块:包含二进制文件的识别信息(软件版本号等)、数据块的数目、总的字节长度、目标设备ID和DerectC识别所支持的块所需的标志位等,共69字节。
②数据查找表:在DerectC中使用到的各数据块在文件的相对起始地址以及长度,每个数据占5字节。
③数据块:二进制数据码流,用于给FPGA在线编程的主要数据,总长度以字节为单位,最后包含总的data文件的CRC校验码。
方便下传数据,基于VC把整个二进制data文件转换成2位十六进制的数据流并存储在TXT文档中,同时在文件的头部加入表明整个data文件长度的4字节,以方便PC指示DSP下传的数据长度。具体为VC以二进制的形式打开配置文件,读取其长度写入TXT文档,并每次读取8位二进制数据转换为2位十六进制数据。DSP把收到的数据依次存在DSP的外部RAM(每个地址存两个字节),先存低位,再存高位。
2.2.3 配置程序数据的下载实现
本设计PC通过USB转串口向DSP发送指令,以指示DSP需要进行什么样的操作。表1为常用的几个串口指令,指令长度都为2字节。
DSP的主程序流程图如图4所示。DSP串口中断等待PC下传FPGA在线编程指令,对收到的FPGA配置数据流进行CRC校验,保证程序的完整性。之后DSP接入FPGA边界扫描链,在JTAG每个TCK上升沿读取TDI的数据或向TD0输出1位数据,在DSP把IR操作数内容写入IR,FPGA会自动把DR放入边界扫描链,进行FPGA的数据读出与写入,从而实现读取FPGA设备ID与配置数据流中的设备ID匹配、FPGA的擦除、配置文件中的数据块写入FPGA等操作,完成在线升级。
3 试验结果分析
为了确保配置控制方法的可靠性,通过串口往DSP下传经过VC转换的FPGA配置文件,DSP接收到全部配置文件后会进行CRC校验。检验的结果通过串口实时回传至PC,保证了配置文件的完整性。之后DSP读取FPGA的设备ID,与配置文件的ID进行对比,确保目标设备的正确性,结果同样通过PC显示出来。
在上述验证通过的情况下,DSP开始对FPGA进行擦除操作,之后向FPGA中烧写跑马灯配置码流数据。和Actel的FlashPRO3编程器一样,烧写完成之后会对编程结果进行验证,确保烧写的正确性。以上过程中,DSP串口会返回调试过程信息给PC,以表明程序烧写进程。整个过程完成后,LED灯按预期程序设计有规律地闪烁,无需重新启动。在实验系统环境中,一次配置的时间约为97 s,与使用Actel的FlashPRO3编程器的时间相差无几,配置时间很短。
结语
本设计实现了一种基于DSP GPIO口驱动FPGA的JTAG接口,以及串口对Actel FPGA进行系统的在线编程。不仅适用于某一型号的Actel的FPGA,而且适用于IGLOO2、Smart Fus ion2、ProASIC3、IGLOO、Smart Fusion和Fusion系列,适用范围很广。另外,该设计简单,只需将DSP的GPIO与FPGA的JTAG中4个必要的引脚相连,串口下传指令和FPGA配置数据,无需额外的配置芯片,避免了JTAG距离的限制,且采用的芯片完全满足高温、低功耗的要求,具有高速高、可靠性等优点,方便多任务的切换。使用本系统无需重启就可以动态地更新FPGA应用,使得Actel的FPGA应用能不受在线升级的距离困扰。