一种ARM+DSP协作架构的FPGA验证实现
2.1 ARM负责准备阶段
本文引用地址:http://www.amcfsurvey.com/article/83026.htmARM从Flash中运行启动代码,通过配置PLD来连接FPGA X3S5000中的AHBC,目的在于ARM通过AHBC同FPGA X2V6000中的DSP Core进行交互。
代码唤醒外部DMA通过以太网口从PC机端搬运第一帧待处理的图像数据,放到双核公用的外部SRAM memory既定的地址段中。然后,ARM Core通过AHBC控制FPGA X2V6000中的DSP Core。
这里需要说明两点:
(1) FPGA开发板的的图像传输是通过专门配置的带有LXT972芯片的以太网口与PC机的以太网口进行交互, 如图3所示。图3左边的以太网子板即图1中的Ethernet模块。
(2) DSP Core顶层的wrapper是支持AMBA协议的TOP Module,其中包括一个Debug Sub-Module。ARM就是通过读写Debug Sub-Module的控制寄存器来控制DSP Core的启动、停止等工作状态的。所以说,Debug Sub-Module是整个FPGA工程最为关键的部件之一,它直接关系到ARM和DSP之间的交互。本项目中,利用Debug Sub-Module实现对DSP Core的复位、启动、暂停、断点设置、单步运行、读写内部SRAM、读DSP Core寄存器等一系列功能,大大方便了调试工作,同时也非常便捷地实现了ARM和DSP的交互运行。
2.2 DSP运行阶段
ARM写控制寄存器使DSP Core复位,并把小目标识别的程序代码写入DSP内部的SRAM0中等待DSP启动运行,由ARM控制DSP Core运行起来。DSP Core运行完程序之后,会在外部SRAM的一个地址上返回一个标志数(0x00ff00ff),同时进入idle状态,完全释放对AHBC的操作。每隔一段时间,ARM检查一下相应地址上的这个标志数,如果没有,则表示程序还未运行完,ARM继续检查;如果有,则表示程序已经运行完毕,ARM将进入下一步操作。
选用这种流程有两个特点:(1)ARM完全实现了控制和辅助的作用,而运行部分则完全由DSP负责,各自分工明确。(2)ARM和DSP实现了很好的交互,严谨地控制了流程的运行步骤。
2.3 ARM控制停止返回
ARM通过写控制寄存器把DSP Core停下来,从外部SRAM的既定地址段中取出DSP Core运行完所返回的小目标的坐标信息,并通过以太网口返回到PC机端,在显示界面的此帧图像上显示出小目标。图4为其中一帧图像的处理结果显示。
ARM擦除DSP Core运行完毕的标志数,同时判断当前处理完的图像是否为最后一帧,如果不是,则流程跳回DMA搬运步骤去执行下一帧图像,同时加上必要的控制,避免写程序的重复执行;如果是,则结束整个程序运行。这样循环下去,直到所有图像序列处理完毕。
这个过程充分显示了ARM在控制流程的判断跳转方面所起到的主要作用。由ARM的平台来实现对整个视频序列的最终处理控制过程,显得非常清晰便捷。
3 体系架构的调试
3.1 FPGA的选取
FPGA的选取一定要合适(这里主要针对容量而言)。以本开发过程为例, Xilinx的两片FPGA(X2V6000和X3S5000)的容量分别为600万门和500万门左右,而项目的硬件代码容量却稍微超出了这个范围,所以不得不对一些模块作精简和舍弃。即便如此,两片FPGA的利用率都已大于90%。
一般来说,FPGA的利用率达到70%或多一些是比较好的,太高的利用率反而容易造成板子的不稳定。本开发过程就有一些不稳定因素,例如,因一些数据线、地址线的个别位传输值不正确,需要花大量的精力才能追查出这些存在问题的线路,然后更换Bonding连接,选用其他的通路。同时,所造成的不稳定因素也会影响下载代码的运行速度。目前经过Xilinx的软件工具ISE综合出来的FPGA可下载代码受时序约束,所能达到的速度上限为25MHz时钟频率。
容量大的FPGA的成本同样也会比较高,所以在研发需要和成本之间必须找到一个比较好的平衡点,这在整个电路设计阶段就要预测得比较好,但这不太容易做到,需要经验的积累。
3.2 观测点的预留
开发板在设计电路图阶段,一定要预留出足够的观测点。这一点非常重要。因为:在后来的调试过程中,当出现问题时需要追查线路,而目前的FPGA调试软件还不成熟,并不像RTL代码前端仿真那样方便,能够把所有的信号都输出到屏幕上观看,而且FPGA调试时使用的逻辑分析仪只能够测量观测点的信号波形,如果观测点不够的话,当出现逻辑错误时,根本没办法追查下去,找不到问题的所在,或者需要做相当繁琐的重复工作,才能把估计存在问题的线路节点信号连(Bonding)到仅有的观测点上。如果经排查,估计得不正确或者需要进一步拉出更多的其他信号时,又需要重新花时间将节点新信号连到观测点。这样,会耗费非常多的时间和精力。因为对每一次新的节点生成一版新的FPGA下载代码都很烦琐。
所以,从电路的设计之初,预留出足够的观测点,尽量将更多的节点信号连到观测点上。这样将会极大地方便调试工作,加快整个研发进程。
3.3 FPGA调试的原则
FPGA的调试应该按照由简入繁的步骤进行。这样可以方便研发人员快速地熟悉板子,并且容易定位问题的所在。
由于整个ARM+DSP体系结构是由ARM加上两块FPGA共同工作,相对比较复杂,相互之间交互性比较多。所以,在调试整个程序之前,可以先通过另外的小程序和硬件结构分别调通ARM对两片FPGA的交互;然后,再用较为简单的功能模块调试好三块片子的简单交互功能;最后,把整个大程序应用在上面进行尝试。这样一步步下来,出现问题时,就比较容易发现问题所在,方便调试。
例如,可以先不考虑FPGA X2V6000,单独调试ARM通过FPGA X3S5000中的AHBC对外部SRAM读写的控制,成功之后,再将FPGA X2V6000考虑进去,但先不考虑Debug模块对DSP的控制,单独将Debug模块提取出来,下载到FPGA X2V6000当中;然后再调试ARM通过FPGA X3S5000中的AHBC对于FPGA X2V6000当中的Debug模块的控制寄存器的读写情况等。
评论