基于ARM的CRC算法和基于FPGA的算法性能比较
题目分析:本题目的设计意图在于使用FPGA中硬件资源对某些流程固定的软件算法进行加速,即algorithm-hardware codesign,是软硬协同设计中更为具体的一种形式,本题目中的CRC算法只是其中一种实例。这种由硬件电路实现的软件算法通常能够很大程度上的降低计算时间,代价仅是FPGA内部所消耗的一些逻辑、存储资源,但对于如今的FPGA芯片来讲是完全可以接受的。本题目的设立将充分验证MicroZed开发板中Zynq系列芯片的优势,因为它集成了高性能ARM处理器内核、充足外设资源和FPGA逻辑资源,对于软硬件协同设计的嵌入式应用,是很好的选择。
(二)过程说明
1.软件学习:Vivado+ SDK
要在两周时间内完成挑战题目,需尽快学会题目规定的Vivado + SDK软件开发流程。其中第一个目标就是要搭建起基于ARM CortexA9的嵌入式系统,才能够进行下一步CRC算法的实现和调试。在Vivado 2013.4及以上的版本中都包含支持MicroZed开发板的硬件定义和板级支持包,新建工程时选中就会将开发板的所有信息导入到工程中,十分快捷。
有很多网友或MicroZed、Zynq使用者上传过很详细的图文开发流程,在这里我就不再重复演示了。这些教程包含了从入门级到专家级的MicroZed开发板、Vivado/SDK软件使用教程甚至代码。正是由于这些人乐于分享的精神,才使得国内FPGA设计技术能够快速、深入的发展起来。在这里跟大家推荐一个名字叫“亚当泰勒玩转MicroZed”的连载,中英版都有,但英文版的更全一些。这个入门级的图文教学可以教大家如何从一个新手快速熟悉基于Vivado+SDK的MicroZed开发流程,本题目能够顺利完成离不开这位外国友人的帮助。连载中除了说明开发板的使用、软件设计/调试流程外,还包含部分PS基本外设的使用方法,比如GPIO、中断控制器、三重定时器以及PS与PL进行通信使用的AXI4总线搭建/调试方法等。在这里提一下用Vivado进行设计的一个典型特点:在搭建嵌入式硬件系统时,它采用的是模块图的形式比PlanAhead更直观一些,下图就是本题目最终设计的系统模块图:
其中包含了CortexA9处理器系统、AXI总线互连IP以及PL实现的自定义CRC算法IP。
2.基于ARM的CRC算法实现(PS端)及性能比较流程
软件CRC算法实现方法有很多种,目前大多使用查表法,具有较低的算法复杂度和运行时间。但是此题目的目的在于比较硬件加速对某种软件算法的性能提升,需要使用与PL端相同的算法实现才更有说服性。所以在ARM中实现的32bit CRC校验采用根据生产多项式按bit异或的方式,需要将输入的32bit整型数据拆分为32个单bit数据进行运算,然后将结果重新组合为32bit整型,如下所示
另外,为确保以太网数据包CRC校验的真实性,在本题目中使用了Wireshark从网络中随意抓取的一个ARP广播包,如下图:
下面向大家说明本题目进行性能比较时采用的流程:
首先,在进行性能比较时,统一时间标准是必要的。由于PS端进行时间计算采用的是TTC三重定时器,将其工作频率设为系统内部ARM_PLL产生的CPU_1X,约为133MHz。同时将其通过FCLK_CLK0信号输出到PL端用作CRC校验模块的工作时钟,能够确保PS端与PL端的计时标准一致性,如下图:
另外,为体现CRC循环冗余校验中的“循环”特点,本人将ARP数据包的完整校验过程分步呈现了出来。使用了开发板上唯一的GPIO按键进行过程控制,每次按键产生一次中断,执行一次中断比较程序。每次中断比较程序进行对比的数据包都会比上一次多一组(32bit),直到完整的ARP数据包完成CRC校验,则继续重复初始的校验过程。
按键中断程序中,首先进行PS端的CRC校验和计时,之后将数据包通过GP总线传送到PL端,PL端接收到完整数据包后进行自动校验和计时,完成后将结果返回PS端,流程如下:Reset Timer—>Start Timer—>Start CRC Calculate Function—>StopTimer—>Get Counter Value—>Output PS Result—>.Packet Transmit—>StartPL CRC FSM—>Read Back Result—> Output PL Result—>Reset Control Reg—>Return.
按键中断比较程序输出内容如下:
Ø每次按键触发后,首先输出提示:
“*********
ARMCRC算法FPG 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)