博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】FPGA算法映射要点
阅读量:6123 次
发布时间:2019-06-21

本文共 1153 字,大约阅读时间需要 3 分钟。

  近期一直在学习利用FPGA完成算法的定点运算,转载些相关的博客方面回顾查找。本博文原文链接为:https://blog.csdn.net/u013989284/article/details/78998035

  将图像处理的算法转换为FPGA系统设计的过程称为算法映射,CPU并行算法的实现与FPGA并行算法的实现是有一定区别的。 

FPGA 

1.算法系统结构

  图像处理算法主要有两种设计结构:流水线结构和并行阵列结构。

1.1 流水线结构

  在我看来,流水线结构和我们之前所理解的CPU的串行结构还是有一定区别的。相反,它与处理器的流水线结构很相似,都是依照时钟来进行流水层级的同步。

流水线

1.2并行阵列结构

|--Data1--->Data1-->Data1 | InputData------Data2--->Data2-->Data2 | |--Data3--->Data3-->Data3

2.算法转换

2.1 定常数转换

  对于FPGA而言,做加法与移位较为简单,而涉及到乘法与除法时需要调用到乘法器或除法器,这在FPGA中是较为宝贵的资源,所以作为定常数,我们尽量转换为移位和加法运算,如:

ex1:        dout = din * 255转换后        dout = ( din << 8 ) - din ex2: dout = din * 11 转换后: dout = din * 2^2 + din * 2^3 - din * 2^0 = din * (2^2 + 2^3 - 2^0)

  上式中的255 和 11就是定常数

2.2 不等式等效转换

  进行转换的目的也是为了在FPGA实现后能够更加节省资源。如:

ex1:        √a ̄  < b, a > 0转换后:        b^2 > a ex2: a/b > c/b (b > 0, d > 0) 转换后 a * d > b * c

2.3 取近似值

  最简单的近似值莫过于四舍五入,假如某数据D[-1~4]为整数部分,D[3~0]为小数部分,那么四舍五入可为:

assign dout = din[3]?(dout[-1~4] + 1) : (dout[-1~4])

泰勒公式定义 

泰勒公式
那么就可以有如下近似转换:

1/3 = 1/4 * (1 + 1/4 + 1/16 + 1/64 + 1/256)

3.构造查找表

  查找表是使用简单的查询操作代替运行时的实时计算,使用查找表代替那些运行时经常需要用到的运算能够极大的减少时间复杂度,如我们经常用到的三角函数就应该使用查找表替换实时计算。

转载于:https://www.cnblogs.com/moluoqishi/p/9350695.html

你可能感兴趣的文章
linux 搜索文本
查看>>
超实用Mac软件分享(二)
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
Oracle表分区
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>