FPGA+DSP结构嵌入式系统的FPGA配置方法及其实现
扫描二维码
随时随地手机看文章
0 引言
在信号处理领域中,基于FPGA+DSP的结构设计已经是系统发展的一个重要方向。随着该系统设计的广泛应用,功能变得更加丰富,成本日趋低廉。而在某些小型化应用的场合中,对系统体积的要求越来越高,因此如何在硬件层次上缩小系统体积,已经是必须要考虑的重点。除了选用高集成度的芯片、布局更加紧凑的电路结构之外,优化系统的功能实现方式则能在更高层次上减小系统体积。
对于FPGA+DSP的基本架构,DSP电路模块的主要构成为DSP芯片和存储其程序的FLASH芯片,已经为最小结构,无法精简。FPGA电路模块常用的构成方式为FPGA芯片和相应的配置芯片。而FPGA有多种配置方式,不同的配置方式,所需芯片会有差异,因此采用芯片数量少的配置方式可以在一定程度上节省电路板的面积。
不同厂家、不同系列的FPGA芯片,配置方式都存在有差异。对于Xilinx公司的Virtex-Ⅱ系列FPGA来说,主要有主动串行、主动并行、被动串行、被动并行和边界扫描5种配置方式。其中,边界扫描方式只能烧写断电即丢失的.bit文件,不能在系统中单独使用;主动串行和主动并行的配置方式需要额外的配置芯片,不利于精简系统;被动并行和被动串行的配置方式都是依靠FPGA外部连接的微处理器来进行配置的,而FPGA+DSP结构中的DSP正好可以充当配置电路中的微处理器,这样就可以省去配置芯片和JTAG电路等相关模块,能在一定程度上缩小系统体积。本文选择了被动的并行配置方式,原因在于更高的配置速率,此种配置方法在工程实践中有着重要意义。
1 配置方法
1.1 配置文件格式
配置FPGA即是要把开发工具已经综合好的程序文件按一定的时序写入FPGA芯片中。而Xilinx的开发环境可以根据用户的选择产生多种文件格式,以不同的后缀名区分。不同的文件格式包含了不同的信息,有不同的用途。最常用的格式有.mcs格式、.bit格式和.bin格式,其中,.mcs文件是给FPGA的配置芯片烧写程序时使用的,而.bit和.bin文件都是直接给FPGA烧写程序时使用的。所不同的是,.bin只包含了最原始的配置数据,而.bit文件除包含有最原始的配置数据外,还在开头添加有头部冗余信息,里面包含了当前ISE工程的名字、器件型号、编译时间等。这部分信息是不应该烧写到FPGA芯片中去的,因此,本文选择使用.bin文件来对FPGA进行配置。一般的,此配置文件数据都是以Xilinx指定的16进制同步字符FF FF FF FF AA 99 55 66开头,并在重复4次16进制同步字符20 00 00 00后结束。
由于被动并行的配置方式省去了配置芯片,因此,FPGA程序需要和DSP程序共同存入FLASH芯片中。本文选择使用AD公司的DSP,其烧写FLASH用的程序文件格式为.ldr,每行是由16进制的0xXXXXXXXX数据组成。所以,应该对FPGA所用的.bin文件进行格式转换。利用Matlab工具,可以实现这一功能。要注意的是,.bin文件其实是ASCII码形式,要转换成ASCII码的二进制码才能使用。.bin文件是由若干个2位的16进制数据构成的,对每个数据a(i)首先分别提取高低位,可通过Matlab的函数floor(a(i)/16)和mod(a(i),16)来分别实现。然后对提取后的数据d进行格式码转换,相应的matlab程序如下:
if(d<10)
d=d+48;
else
d=d+55;
end
1.2 配置管脚
与FPGA配置相关的管脚可以分为2类:专用管脚和可复用管脚。专用管脚的作用是固定的,而可复用管脚在配置阶段作为配置管脚,配置结束后可以配置为通用的IO管脚,也可以继续作为配置管脚。配置管脚主要有:异步复位PROG_B,初始化INIT_B,配置时钟CCLK,数据输入D0-D7,加载成功指示DONE,写信号RDWR_B,片选信号CS_B,模式选择M0~M2,忙指示BUSY(并行加载且钟速率大于50 MHz时才使用)等。需要注意的是,通常的微处理器数据格式是little endian格式,D0位为最低有效位,而Xilinx的FPGA采用了big endian格式,在接收程序数据时,D0位是最高有效位。而.bin文件仍采用littIe endian格式,其最高有效位是D7位,所以需要对数据进行位顺序转换。在本文中,为了简化操作,直接在硬件连接上进行了数据位的顺序转换,即DSP的D7位和FPGA的D0位相连,DSP的D6位和FPGA的D1位相连,以此类推。
1.3 配置流程
FPGA的上电配置过程大致可以分为4个阶段:上电、初始化、数据加载和启动。具体完成的操作如下:
(1)上电。内核供电VCCint大于2.5 V,管脚供电电压VCCO大于1.0V,上电即可完成。
(2)初始化。上电完成后,外部输入低电平PROG_B信号,复位配置寄存器,同时,FPGA拉低INIT_B信号,来指示其正在进行内部配置寄存器的清除。当PROG_B为高时,INIT_B仍要保持一段时间直至配置寄存器完全清除。PROG_B信号至少需要300ns,无最大值限制。本文中的PROG _B信号由DSP提供。
(3)数据加载。在INIT_B信号的上升沿,FPGA会采样它的配置模式管脚M0~M2来选择不同的配置方式,本文的被动并行模式,需要M0~M2值为:011。然后在INIT_B信号为高时,开始进行配置数据加载。在同步字符加载完成后,真正的配置逻辑数据开始被加载。在数据加载完毕并且做了2次正确的CRC检验之后,开始进入FPGA启动阶段,否则,FPGA输出INIT_B为低,并重新来进行配置。
(4)启动。CRC校验正确,则FPGA拉高指示信号DONE,然后再需要4个CCLK来激活所有的IO管脚,使能并初始化内部RAM、触发器等,最终完成FPGA的启动过程。
在生成FPGA的.bin文件时,可以设置加载FPGA时使用的时钟CCLK频率,但是,这个频率只对主动加载方式有效,被动方式时,CCLK时钟由外部供给,与此参数无关。
2 硬件实现电路
2.1 硬件结构
本文选用AD公司生产的ADSP-TS101这款芯片作为配置FPGA的主处理器。ADSP-TS101是一款极高性能的静态超标量处理器,同时支持浮点和定点处理,最高工作频率为300 MHz,地址范围4 GB,最大支持16MB的PROM。从地址的0x08000000~0xFFFFFFFF为外部存储器空间的一部分,可以访问独立的外围设备,完全可以满足片外程序的寻址。为了完成配置FPGA的时序,需要DSP有灵活可控的引脚信号。而ADSP-TS101的4个标志引脚信号FLAG3~FLAG0允许在ADSP-TS101和其他的设备之间传递位信号。任何一个标志引脚既可以作为输入也可以作为输出,且ADSP -TS101的许多指令都可以以标志引脚的输入作为执行条件,可以在多处理器和其他接口之间进行高效的通信和同步。因此,可以将此4个管脚和FPGA进行连接,模拟完成FPGA的配置时序。
存储芯片选用Spansion公司的高性能FLASH芯片S29JL064H,最小访问周期为55 ns,其可以配置成8M×8 b的存储方式。而Virtex-Ⅱ系列FPGA的配置数据包括配置数据帧和配置寄存器数据,配置寄存器数据都为40×32 b,即1 280 b,配置数据帧会因器件不同而有变化,对于XC2V1000器件来说,配置数据帧为4 082 592 b,总的配置数据不到4 Mb。所以,此存储芯片完全可以满足FPGA和DSP程序的存储。对于FLASH存储空间的划分,采用一分为二的方法,DSP和FPGA程序各占一半空间。即,从地址0x00000~0x3FFFFF这4 MB空间用来存储DSP程序,剩余的4MB空间0x400000~0x7FFFFF存储FPGA程序。
[!--empirenews.page--]
系统的硬件结构示意图如图1所示。由DSP的RD信号充当FPGA的配置时钟CCLK,FLAG0信号模拟FPGA的PROG_B信号,FLAG1和FLAG2分别作为FPGA的DONE信号和BUSY信号的输入。此系统在设计时,采用了DSP,FPGA,FLASH共用数据总线的方式,所以当DSP从FLASH芯片中读取FPGA的加载数据并出现在总线上的时候,可以直接被FPGA抓取来完成FPGA程序的正常加载。
2.2 工作时序
系统上电后,DSP启动DMA通道0,从FLASH地址0开始,把一个256 word的程序块传送到内部存储器地址0x00~0xFF。然后,DSP开始从0x00执行加载核,加载核将后续应用代码和数据加载至地址0xFF之后的内部存储器内。最后,加载核启动一个256 word的DMA,使其自身被工作程序代码覆盖。至此,DSP即从地址0x00开始执行工作程序。在工作程序中首先从FLASH存储器中读取FPGA的加载程序,并给出相应的加载时序,完成FPGA程序加载。具体的工作时序,如图2所示。
3 结语
随着FPGA+DSP的系统结构在电子设计领域中应用的日益广泛化,在不增加其它额外器件的前提下,依靠DSP模拟FPGA加载时序,对FPGA使用了被动并行的配置方式。此方法在一定程度减少了设计冗余,实现了小型化和低成本。应用于电路系统中,工作稳定可靠,灵活高效。