基于ARM的CRC算法和基于FPGA的算法性能比较
- UID
- 1029342
- 性别
- 男
|
基于ARM的CRC算法和基于FPGA的算法性能比较
(一)题目分析
首先,向大家说明一下题目二的内容和要求:
CRC是一种实际通信中应用很广泛的线性分组码,具有很强的检错能力,但没有纠错能力。在应用的时候可以根据不同的场合选择硬件电路或者软件算法来实现,硬件实现的原理是根据特定的CRC多项式对输入信号和上一次校验结果进行移位异或操作,得到本次CRC校验结果;软件则可以采用多种不同算法进行计算,相应的时间复杂度会有所差别
题目分析:本题目的设计意图在于使用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整型,如下所示
|
|
|
|
|
|