一款基于DSP内核处理器的FPGA验证实现设计

arm通用cpu及其开发平台,是近年来较为流行的开发平台之一,而由arm+dsp的双核体系结构,更有其独特的功能特点:由arm完成整个体系的控制和流程操作,由dsp完成具体的算法和计算处理。这样,不但可以充分地发挥arm方便的控制优势,同时又能最大限度地发挥dsp的计算功能。这在业界已逐渐成为一种趋势。
本文的fpga的demo验证,是在基于一款dsp内核处理器的研发基础上,对其功能进行验证的一个小目标识别算法的实现。考虑到软件环境仿真的速度以及仿真模型的局限性,用fpga进行硬件协同验证。这样,既能够保证仿真的真实性,又能够快速发现实际问题,减少不必要的流片次数,加快开发的进程,这对于一个大规模的soc设计,已经成为不可或缺的手段之一,而且对节约成本也有很大好处。
1 系统体系结构
双核系统的体系结构如图1所示。
1.1 内嵌arm内核的epxa1芯片及其特点
图1中,包含arm922t内核的开发平台选用的是altera公司的excalibar系列,本验证实现选用的型号是epxa1。epxa1是一款带有100万门可重配置pld的arm core+pld体系结构,可以通过quartus ii软件工具来灵活配置arm core同外部的端口连接,最大时钟频率能够达到200mhz。epxa1的高度集成化,不仅大大加快了arm与片内各种资源的通讯速度,而且减小了硬件电路的复杂性、体积和功耗,真正实现了sopc[1]。
1.2 fpga硬件平台及其特点
对于一个具体项目,fpga芯片的选取要根据实际需求和特点来具体考虑。一般应从逻辑资源需求、易扩展能力、信号质量以及成本等因素来考虑。如图1所示,本次设计采用的两片fpga分别为xilinx公司的fpga x3s5000和x2v6000,其容量分别为500万门和600万门。选用这两块芯片正是基于逻辑资源需求的考虑。fpga x2v6000面向高端应用,存储资源更多,功能更强大,适用于性能要求较高的dsp内核,但其成本相对也较高;而fpga x3s5000成本较低,适用于一般性能要求的模块。两片fpga都具备三个扩展槽,可做接口扩展,同时也能作为调试测试点用。
1.3 双核体系结构设计特点
具体来讲,整个体系结构是指通过人为设计电路图,外部选用不同的fpga器件来下载生成特定功能的外部硬件电路,在电路图上对应相应的端口标号;同时,arm core可以通过quartus ii工具方便地连接不同的端口标号,编译运行生成相应的配置文件;arm的启动代码中用以上的的配置文件信息来配置pld,从而实现arm同外部硬件电路即两片fpga的连接[3]。fpga x3s5000中下载固化ahbc硬件电路以及外部sram memory,而fpga x2v6000中下载固化dsp core以及支持amba协议的wrapper。
这种体系结构能够充分利用硬件资源,合理的版图位置方便了arm和dsp对外部sram的访问,同时可快捷地实现arm的控制功能,而且预留的扩展槽能够较为方便地进行功能扩展和调试。dsp core的wrapper能够快速响应arm的控制请求,调动dsp core进入不同的工作状态。
2 系统工作流程及特点
系统工作流程图如图2所示,介绍如下。
2.1 arm负责准备阶段
arm从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.1fpga的选取
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.3fpga调试的原则
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模块的控制寄存器的读写情况等。
3.4软硬件协同验证
软硬件协同验证是较好的验证方式(或调试方式),二者都是为了保证系统功能和结构正确的有效手段。在整个fpga系统实现过程中,非常有必要结合前端软件仿真波形来参照调试系统各个环节的功能运行情况,这样可以大大简化研发进程,有效地缩短调试周期。可以说,如果不结合前端软件仿真波形来协同验证的话,要想实现一个较为复杂的体系结构是非常困难的。
一般而言,对于这样一个较为复杂的体系结构需要先进行前端rtl代码的软件仿真,因为前端仿真对于纠正rtl级代码以及功能方面的错误是非常方便的,而且它所需要的验证周期和纠错难度比硬件的fpga验证要有利得多。但是fpga硬件验证,其真实性又是非常可靠的。所以验证波形完全调试通过之后,可以非常有效地指导fpga的实现。当fpga在调试某项功能时出现了问题,可以通过逻辑分析仪将可疑端口节点出来的观测点波形导出来对照软件仿真波形来查找问题,这是一种非常有效的手段。
3.5demo演示速度的调整
目前,开发板选用的晶振频率为24mhz,稳定的演示版本速度能够达到28帧/秒,为人眼所能接受的连续视频速度,效果已经相当好。这是经过了各种调试才达到的效果。主要原因在于考虑比较周全:dma在传输图像序列的时候,所用到的fifo在设计之初就考虑到了fpga的容量和利用率,认识到其容量有限,在现有的fifo容量下,要想调整到一个dma与pc机双方网口传输速度的精确状态不太容易,如果运行速度太快,交互同步不准确,就会有丢包的现象发生;如果为了更方便的调试和达到更好的速度性能,可以选用更大容量的fpga,设计更大容量的fifo,这样每一次图像传输就可以传送更多的图像数据,减少dma搬运的次数,传输双方的交互过程较为容易控制。表1给出了从开始演示速度不理想到较为理想所做的调整过程。从表1中可以看出,单独调整晶振频率,速度提升并不明显。这说明了速度瓶颈不在硬件代码性能上,关键在于演示界面的软件代码、arm的cache打开与否以及图像搬运的速度三方面。同时还可以看出cache的打开对于速度影响很大,说明arm的取指速度受到影响。目前arm的运行指令是放在flash中,如果改成从sram中取指,估计效果会更加理想。
从以上分析可见,arm在整个设计中所起的主要作用是控制图像的输入输出,以及循环控制dsp core的运行停止等状态;dsp core的主要作用是处理运算应用程序,计算小目标识别程序。这样既分工又合作,能够充分发挥arm的控制功能以及dsp core的数字运算处理功能。
与此同时,由于arm在整个设计当中主要起到一些辅助的控制作用,arm922t的一些扩展dsp运算功能没有用到,如果综合考虑到成本和性价比等因素,可以考虑采用arm7硬核、nios 或其他形式的软核替代。

Zidoo UHD 3000HIFI级4K播放器:家庭娱乐的好助手
电瓶修复锂电与铅酸充电器可不可以换用
行业 | 村田开发并开始量产小型SAW双工器、滤波器
RF PA放大电路设计的几种思路
厦门LED产业直接产值达397.3亿元 创新发展成为行业主旋律
一款基于DSP内核处理器的FPGA验证实现设计
光电式液位传感器可以实现无水提醒功能吗?
安森美半导体FL7740应用于智能照明,实现调光、节能两不误
IBM加强Power8系统拟定,助推FPGA
泰克支持电赛2019,为未来工程师培养赞助“仪”臂之力
浪涌和浪涌保护器概述
顺丰进军人形机器人?顺丰官方回应
魅族16和16 Plus有什么区别?哪个好一点?该如何去选?
低功耗嵌入式设计的提示和技巧
利用智能安防传感器,让家电以低成本变智能
智能传感技术助力智慧医疗行业发展
可编程逻辑控制器解决方案
一体化风速风向仪的功能特点介绍
VLF超低频高压发生器接线图使用方法
覆盖测试中的高效代码插桩技术