你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

Zynq PS/PL 第七篇: Adam Taylor’s MicroZed 系列27

发布者:jackzhang 时间:2014-07-22 20:54:49

作者:Steve Leibson, 赛灵思战略营销与业务规划总监

Adam Taylor's博客系列讲解在基于ARM的Zynq SoC芯片可编程逻辑上实现定点数学函数计算。

我们已经在MicroZed 系列的前期博客中学习了在PL(可编程逻辑)内实现定点运算,现在我们来分析系统内如何执行这些函数,将会发现令人惊讶的结果。

在编写代码前,需要确定我们在特定实例中用到的比例因子(小数点位置)。在这个示例中,输入信号将在0至10范围内,所以我们可以在16位的输入向量内封装4个小数位和12个分数位。

执行上述等式,其中有三个常量 A, B和C:

我们需要在计算中缩放这些常量。在FPGA这样做的好处在于,我们可以分别扩展每个常数以优化性能,如表所示:

执行上述公式后,我们需要考虑合成向量的扩展,如下图的Ax2 and Bx:

要执行最后加上常量C,我们需要对齐小数位。因此,我们需要将Ax2 和Bx的结果值除以2的乘方,对齐常量C的小数位。结果值的格式为8,8。

完成上述计算后,我们开始在前期博客中创建的Vivado外设中执行设计。第一步是打开Vivado内的框图,右键单击外设,然后选择“Edit in IP Packager”。当IP Packager在顶层文件中打开后,我们可以很容易地执行简单进程,可在数个时钟周期数完成计算。(这个实例中是5个时钟周期,您也可进行进一步优化。)

现在我们可在Vivado内重新封装和重要创建项目(记得更新版本号),然后将更新的硬件导出至SDK。

在SDK内我们可以使用此前使用的相同方法,唯一不同的是以前使用的是浮点系统,现在使用的是定点系统:

在MicroZed板创建上述代码并运行后,通过通过串行链路输出以下结果:33610除以2 ^ 8结果等于131.289,这个结果值是正确的, (参见Zynq PS/PL, 第5篇: Adam Taylor’s MicroZed 系列25)。

计算结果相同,但最大的区别是计算时间。虽然由于外设执行实际计算只需要5个时钟周期,但生成这个结果值消耗140个时钟周期或42ns,而在使用ARM Cortex-A9处理器在 Zynq SoC PS消耗了25个时钟周期。

为什么会产生差异?难道可编程逻运行速度不够快?

这就需要在外设I / O开销的中所学到的技巧。使用PL,我们必须考虑基于AXI总线和AXI总线频率的总线延时,在这个应用程序中是142.8MHz (所要求的是150兆)。AXI总线开销导致计算时间长于预期。当然所有努力并非徒劳,我们只是执行错误。由于I / O开销的原因,不应使用这种方式卸载Zynq SoC PL任务。

如果我们要采取更加合理的方法,我们会使用DMA发送至外设提出计算要求,正如我在博客系列对有关PL / PL接口所解释的那样。这个例子说明了DMA的重要性,我将在下一个博客中对实验结果进行解释。

原文链接:
http://forums.xilinx.com/t5/Xcell-Daily-Blog/The-Zynq-PS-PL-Part-Seven-A...

© Copyright 2014 Xilinx Inc
如需转载,请注明出处

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了