提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
对于FPGA而言,其对对数运算是十分有限的,但在某些特殊场景种,需要进行精度不高但快速的对数运算,FPGA就体现了他计算速度的优势,本文主要介绍采用Verilog实现对数运算的原理及实现方法。
一、理论基础
对数换底公式:
log 2 A \log_2A log2A计算变换:
A = ∑ i = 0 N − 1 a i 2 i \sum_{i=0}^{N-1} a_i2^i ∑i=0N−1ai2i ,其中N为A的bit位宽, a i a_i ai为各bit的数据(0或1)
若A中不为0的最高bit位为k,即 a k a_k ak=1, a i a_i ai(i>k)均为0,则:
因 A / 2 k A/2^k A/2k < 2,则0< log 2 ( A / 2 k ) \log_2(A/2^k) log2(A/2k) <1,那么就将 log 2 A \log_2A log2A的运算分为2个部分:整数部分k和小数部分 log 2 ( A / 2 k ) \log_2(A/2^k) log2(A/2k)。
因1/ log 2 D \log_2D log2D位固定值,故采用乘法器可计算出最终的
二、Verilog实现方法
提供一种Verilog计算log2的计算方法,最终计算 log D A \log_DA logDA需增加乘法,实际应用中,受底数和其它影响,乘法器设计较为灵活,所以不提供乘法器设计,仅仅提供log2的计算方法。
1、查找不为0的最高bit位k,查找方法可开用bit轮询查找或case查找。bit轮询查找每次只能查找1个bit,耗时较长,case查找可在最短1个时钟找到。
2、小数位计算,从k-1bit位开始,依次向后取m个bit数据,m的大小影响计算精度,m越大,精度越高。最终得到mbit的数据,将该数据作为查找表的索引即地址,查询查找表的数据即小数部分F。
3、定点即运算
如最终结果定点位Fix16_8,8位小数位,则查找表中的数据位宽位8,均为小数。7位整数,将K右移8位并扩展到16位即可得到整数位数据,整数位数据和小数位数据相加即为最终 log 2 A \log_2A log2A的值。
因1/ log 2 D \log_2D log2D位固定值,故采用乘法器可计算出最终的 log D A \log_DA logDA
4、查找表制定
查找表通过matlab制定,并定点后写入文件存储,如采用m=8,数据为8位数据
m = 8;
a = log2(1+(0


4441

被折叠的 条评论
为什么被折叠?



