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

Zynq PS / PL 第六篇: Adam Taylor玩转 MicroZed 系列26

发布者:jackzhang 时间:2014-07-14 17:55:12

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

Adam Taylor's博客系列讲解基于ARM的Zynq SoC芯片可编程逻辑实现定点算法以提高性能。

这个博客系列每周发布,迄今为止已经发布了6个月,我们在Zynq SoC处理器系统(PS)中实现了转换函数,并粗略测量了计算时间。在这个博客中我们开始了解在之前创建的外设添加VHDL(或Verilog)代码所需要执行的任务,以实现和加速同一转换函数。我们将使用定点数值系统执行这个任务。因此本篇博客将介绍定点函数,以及如何在Zynq SoC可编辑逻辑中如何实现这个函数。

在设计中有两种方法表示数值:定点和浮点。定点表示指小数点在固定位置,极大简化了算术运算。定点数由两个部分组成:整数部分和小数部分,如图所示:

数值的整数部分在隐小数点左侧,而数值的小数部分在隐小数点右侧。上述定点数能够表示在0.0至255.9906375之间的无符号数,或者使用两个补码表示在–128.9906375至127.9906375之间的有符号数。

浮点数由两个部分组成,即指数和尾数。浮点表示法使得小数点按照数值的数量级在数值内浮动。

定点数的缺点是表示较大数值或获取带有小数的精确结果值时,需要更多的位数。虽然FPGA可支持定点数和浮点数,但大多数应用程序选择使用定点数,主要是因为定点数系统更容易实现。

在设计中我们可选择使用符号数或无符号数。一般地,怎样选择数值受所实现的算法约束。无符号数可表示0 至2n – 1之间的数值,总是表示正数。符号数使用两个补码数系统表示正数和负数。两个补码数系统可利用两个数相加来表示一个数减去另一个数。两个补码数可表示为:

在定点数中表示整数位和小数位之间分割的一般方法是 x,y,其中x表示整数位数,而y表示小数位数。例如8,8表示8个整数位,8个小数位,而16,0表示16个整数位,0个小数位。

在许多情况下,在设计时已经确定整数位和小数位的位数,一般按照浮点算法转换。由于FPGA具有灵活性,可表示任意位数的定点数;FPGA支持32位、64位或甚至128位寄存器。FPGA同样支持15位、37位、1024位寄存器。我们可扩展硬件准确地解决问题。

必要的整数位数取决于需要存储数值的最大整数值。小数位数取决于结果值所需的精确度。

要确定必要的整数位数,需要使用以下等式:

例如必要的整数位数表示0.0和423.0之间数值的等式为:

我们需要9个整数位,表示0至511之间的数值。

必须对齐两个定点运算数的小数点以加、减、乘、除这两个数值。即,x,8数只能与同样在x,8表达式中的一个数加、减、乘、除。执行不同x,y格式内数值的运算,必须首先要对齐小数点。注意严格来说,在除法算式中不需要对齐小数点。但执行定点除法需要仔细考虑以确保结果值能够被除尽,不会出现负数。

同样,将两个定点数相乘时也不需要对齐小数点。按照乘法得出结果值格式为X1 + X2, Y1 + Y2 。也就是说,将两个格式分别为14,2和10,6的定点数相乘所得出的值为24,8(格式为24个整数位和8个小数位)。

如果需要除以不变常数,我们当然可通过计算常数的倒数,将结果值当做乘数以简化设计。通常,使用这个方法可完成更为有效的设计实现。

以上就是有关定点算法的讲解,我们将在下个博客系列中讲述在FPGA内使用定点数系统执行函数。

顺便说下我将在EElive演讲!时间就是本周,地点在加利福尼亚州圣何塞市。如果您也参加活动,遇到我别忘记与我打招呼,我也期待与您见面。以下是我的日程安排

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

© Copyright 2014 Xilinx Inc.

最新课程

  • 深入浅出玩儿转FPGA

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

  • 从零开始大战FPGA基础篇

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

  • Verilog基础及典型数字

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