需求说明:IC设计基础

内容       :浮点运算定点化处理

来自       :时间的诗

原文:http://blog.csdn.net/mccrocodile/article/details/6754929

通常在FPGA中做信号处理为达到比较高的fMax和较少的资源占用,通常使用定点化数字信号处理,虽然FPGA厂商和IP提供商提供了一些浮点IP,但是目前大多数应用还是趋向定点化处理。这里主要介绍在设计滤波器中使用工具中的定点化选项,实现滤波器的定点化,为后面一节的HDL代码生成做铺垫。

这儿还是使用前面的例子,来实施定点化。

FDAtool中定点化

如下图所示为FDATool中的定点化过程中截图,选择左侧设置量化参数(Set Quantization Parameters )按钮,在滤波器结构栏选择定点,滤波器精度有最高精度和指定精度,通常使用指定精度这样比较节约资源,最后部分为对滤波器的参数,输入数出和滤波器内部进行定点化设计。

在设置滤波器内部的参数,如乘法器,累加器的精度和整数的溢出模式。在设置精度是通常开始设置较大的精度和动态范围,满足要求后再优化。整数溢出的模式Wrap模式占用资源最少,但是如果正式部分动态范围不够会带来糟糕情况,而且不利于整体的稳定性;Staturate会占用额外的逻辑资源。

FilterBuilder中定点化

从下图可以看得出与FDATool的定点化设置是一致的。这儿就不再做介绍了。

fdesign中的定点化

(准确的应该成为使用面向对象的方式的滤波器定点化)

详细的帮助中搜索Fixed-Point Filter Design。

前面介绍的基于GUI的定点化都是一个根据经验的迭代化的优化过程,下面来详细的说下基于fdesign的定点化过程。

滤波器的定点化包含两个主要的部分:滤波器数的量化和动态范围分析。(The dynamic range analysis is a process of fine tuning the scaling of each node to ensure that the fraction lengths are set for full

input range coverage and maximum precision。)

1、首先修改滤波器对象属性为定点的:(当然这儿的滤波器对象也可以来自于fdatool等设计的导出的滤波器对象)

Hf=hd;

Hf.Arithmetic='fixed';

2、初步设置滤波器系数的字长

set(Hf, 'CoeffWordLength', 9);%设置滤波器系数的字长

fvtool(Hf)%,比较不同字长设置

屏幕剪辑的捕获时间: 2011/8/30 22:22

可以清晰的观察到定点化和浮点的幅频响应的区别,通过观察是否满足要求进一步优化滤波器系数的字长,增加字长达到更高的性能,缩减字长节约资源减小面积。如在Altera的QII中,如果乘数是固定且位宽比较小(比如小于10bit时),综合时会使用移位和加法实现乘法(有点类似于RAG算法),但当乘数比较大时则需要使用硬件乘法器。如果较小片子硬件乘法器不足就是个糟糕的事情了。

3、设置滤波器内部的位宽:累加器,乘法器,输出信号

info(Hf) %有观察到的信息可以看出位宽过宽

屏幕剪辑的捕获时间: 2011/8/30 22:32

如图所示可以看到,自动设置的位宽以及其动态范围,这些自动设置的位宽通常是首先满足精度,还需要根据硬件(DSP,FPGA)特性做修改。下面针对Altera的CIII片子给出一个设置:

set (Hf, 'InputWordLength', 10);%输入ADC位宽

set (Hf, 'FilterInternals', 'SpecifyPrecision');%设置滤波器内部参数

set (Hf, 'ProductWordLength', 18);%如Altera的CIII片子的乘法器为9的倍数,这儿选18bit

set (Hf, 'AccumWordLength', 22);%累加器的字长,通常累加器比乘法器多4比特作为保护位宽

set (Hf, 'OutputWordLength', 16);%输出数据总线

输入信号位宽通常和ADC是保持一致的,乘法器的位宽通常设置9的倍数(某些高档片子含有DSP40,那就设置为40)。诸如硬件乘法器资源,如果想要充分利用,那么你就需要参考器件的硬件特性。累加器通常要比乘法器宽4bit作为保护比特。如果设置得过宽会造成累加器的时延过大,得不到一个较大的fMax。

到这里滤波器的基本设置算是完成了,但是还是有可能在使用的使用发生溢出等错误。动态分析将进一步优化滤波器的定点化设置,以降低溢出的发生。

4、动态分析:进一步精细调整系数的比例(Scaling)。

系数最好是又能覆盖所有输入信号,同时保持最大的精度,但这是互相矛盾的。所以在动态分析过程中用于测试的输入数据的选择是非常重要的。如果设置较大的动态范围,可以覆盖输入信号的范围,但是精度会损失;如果设置较窄的动态范围,可以保持较好的精度,但是输入信号可能超出范围引起溢出。

最坏情况测试法:

1)源代码和报告如下,首先使用脉冲响应的取符号函数,设置信号最大幅度,作为信号的激励。

2)以测试激励自动调整动态范围,如果不使用这个选项观察一下3中的报告时什么样子的。

3)创建fipref对象开启记录模式,定点化滤波,观察定点化滤波过程的报告。

tx = 2*sign(fliplr(impz(Hf)));%激励

Hf2 = autoscale(Hf, tx);%自动调整动态范围

fipref('LoggingMode', 'on', 'DataTypeOverride', 'ForceOff');%创建fipref对象打开记录

y = filter(Hf2, tx);

fipref('LoggingMode', 'off');

R = qreport(Hf2)%查看报告,报告最近的顶点滤波计算报告

屏幕剪辑的捕获时间: 2011/9/5 21:29

下面是对信号分离的定点化测试:

%% 对信号分离的定点化测试

fipref('LoggingMode', 'on', 'DataTypeOverride', 'ForceOff');%创建fipref对象打开记录

y = filter(Hf2, x);

fipref('LoggingMode', 'off');

R1 = qreport(Hf2)%查看报告,报告最近的顶点滤波计算报告

figure;plot(y);title('定点化滤波信号分离测试')

屏幕剪辑的捕获时间: 2011/9/5 21:39

屏幕剪辑的捕获时间: 2011/9/5 21:39

通过上面的报告和滤波结果观察可以看出,定点化达到了效果。这就为后面HDL代码生成做好基本的准备。

总结:

通过上面的例子,可以得知使用面向对象方式实现定点化是一个更优秀的方式。根据测试的激励可以自动调整滤波器的精度以达到不同的动态范围,达到精度和动态范围(过小会引起溢出)的权衡,那么也就看出合适的测试激励的重要性。这种滤波器的定点化方法对IIR滤波器的定点化优势尤其明显。这里先不介绍,由于IIR的定点化有时比较复杂,放到后面多带带讨论。

所以建议亲自试试使用fdesign的方式。

matlab浮点转定点的函数,FPGA基础知识17(Matlab中滤波器的定点化 浮点运算转换为定点运算)...相关推荐

  1. 初学者必须要知道的FPGA基础知识

    初学者必须要知道的FPGA基础知识 一.FPGA是什么? 在<FPGA至简设计原理与应用>一书里是这样描述的:『FPGA的全称为Field-Programmable Gate Array, ...

  2. FPGA基础知识|芯片设计基础知识

    FPGA 基础知识 可查看原文:FPGA基础知识 1.查找表 LUT 和编程方式第一部分: 查找表 LUT FPGA 是在 PAL.GAL.EPLD.CPLD 等可编程器件的基础上进一步发展的产物.它 ...

  3. FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇

    博文目录 写在前面 正文 同步FIFO回顾 $clog2()系统函数使用 综合属性控制资源使用 异步FIFO设计 FIFO用途回顾 异步FIFO原理回顾 异步FIFO设计 异步FIFO仿真 参考资料 ...

  4. FPGA基础知识极简教程(10)二进制到BCD转换算法

    文章目录 写在前面 正文 快速认识 实现方式一 实现方式二 写在最后 写在前面 FPGA基础知识极简教程(9)讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编 ...

  5. FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输

    博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...

  6. SAP SD基础知识之订单中装运相关的功能 II

    SAP SD基础知识之订单中装运相关的功能 II 一,计划Scheduling 当业务人员创建一张订单时,系统能够决定基于客户要求的delivery date的物料可用日期:需要交货的货物必须在该时点 ...

  7. SAP SD基础知识之订单中装运相关的功能 I

    SAP SD基础知识之订单中装运相关的功能 I 一,装运点决定Shipping Point Determination 每个订单行项目都会决定一个shipping point:系统会自动带出一个shi ...

  8. SAP SD基础知识之交货中的控制元素

    SAP SD基础知识之交货中的控制元素 一,交货类型Delivery Type Delivery type控制整个的交货,我们可以在delivery header中看到delivery type: D ...

  9. SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)

    SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing) 一,定价程序Pricing Procedure 所有定价中允许的条件类型都包含在定价程序中: ...

  10. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation

    [WPF 基础知识系列] -- 绑定中的数据校验Vaildation 原文:[WPF 基础知识系列] -- 绑定中的数据校验Vaildation 前言: 只要是有表单存在,那么就有可能有对数据的校验需 ...

最新文章

  1. 2022-2028年中国公路客运行业市场研究及前瞻分析报告
  2. MySQL计算指标连续两月金额相比_20160929
  3. 使用python用什么软件-Python读写Excel表格,就是这么简单粗暴又好用
  4. CSUOJ 1525 Algebraic Teamwork
  5. 中软国际入职java考核_中软国际技术人员入职试题2(Java)
  6. apache camel_Apache Camel简介
  7. tomcat:sessionId生成机制导致tomcat启动过慢问题
  8. 写代码的注意了,User这个单词用不得
  9. etag java_你知道HTTP协议的ETag是干什么的吗?
  10. 利用Linq对集合元素合并、去重复处理
  11. Java学习步骤及路线(超详细)
  12. Linux,IP归属地查询(nali)
  13. 计算机键入命令,win7系统安装软件出现命令行选项语法错误键入“ 命令/?”怎么办...
  14. 别让你20多岁的活法,毁掉你30岁后的人生
  15. 用于微信小程序的图文编辑器(富文本编辑器)
  16. Android Studio教学视频118集(共18.2G)
  17. 关于host文件、IE代理和nginx的关系
  18. 2021年P气瓶充装考试题及P气瓶充装最新解析
  19. 荣耀手环5自定义表盘设计
  20. spring boot spring data 整合 redis redis keys * 出现 \xac\xed\x00\x05t\x00) 编码异常

热门文章

  1. 人工智能 一种现代方法 第6章 约束满足问题
  2. 教你写Linux设备驱动程序:一个简短的教程
  3. PHP实现国密SM3算法
  4. javaweb框架学习开端
  5. ubuntu五笔输入法安装_打造最强Windows 10微软拼音输入法 + 600万词库下载
  6. MATLAB 格拉布斯准则代码
  7. HTTP文件下载原理
  8. (深度剖析结构)模块化解释矢量控制
  9. 医学DICOM文件解析(笔记整理)
  10. SAI+PS超萌Q版插画手绘视频教程