找到的实现对数的方式有三种:

  • LUT
  • Cordic
  • 无名

LUT只能用在输入参数较少的情况中,Cordic看了下,感觉还挺复杂的,就没看了……这里主要讲第三种方式,无名是因为没有找到叫什么名字,它的基本思路是先求log2然后在用换底公式求log10。

1. 求log2log_2log2​

观察下面的表格可以发现,只要找到了输入二进制从高位开始第一个为1的bit的位置,就能知道其log2的整数部分。至于小数部分,则可以使用查表的方式来实现,如果要精度比较高,就将表做细一点。总的来说,这种开销是很小的。

二进制 log2
00100 2
00101 2.3219
00110 2.5850
00111 2.8074
00010 1
01000 3

2. 求log10log_{10}log10​

在求得log2log_2log2​以后,就可以通过换底公式求log10log_{10}log10​

logab=logcblogcalog_ab = \frac{log_cb}{log_ca}loga​b=logc​alogc​b​

不过这里要求的10∗log1010*log_{10}10∗log10​,做如下推导

10∗log10b=10∗log2blog210=10∗log2b3.3219=3.0103∗log2b10*log_{10}b =\frac{10*log_2b}{log_210} = \frac{10*log_2b}{3.3219} = 3.0103*log_2b10∗log10​b=log2​1010∗log2​b​=3.321910∗log2​b​=3.0103∗log2​b

不管误差,在HDL实现的时候有

3∗log2b=2∗log2b+log2b=log2b&lt;&lt;1+log2b3*log_2b = 2*log_2b + log_2b = log_2b &lt;&lt; 1 + log_2b3∗log2​b=2∗log2​b+log2​b=log2​b<<1+log2​b

所以在没有使用任何乘除法的情况下,我们就实现了log2log_2log2​和10∗log1010*log_{10}10∗log10​

我用systemverilog实现了上述方法,代码链接如下,没分的可以留下邮箱,记得先点赞^^

https://download.csdn.net/download/qq_16923717/11570694

注意:不建议将该代码用到实际的工程中,精度不够是一个原因,更重要的是该代码中有很长的if else,时序可能不好

3. 求log10(a),0&lt;a&lt;1log_{10}(a), 0 &lt; a &lt; 1log10​(a),0<a<1

如果输入a小于1的话,上述方法就不行了,但是通过下面的公式,我们还是可以求出来。
loga(x∗y)=loga(x)+loga(y)log_a(x*y) = log_a(x) + log_a(y)loga​(x∗y)=loga​(x)+loga​(y)
比如求log10(0.01)log_{10}(0.01)log10​(0.01)
log10(0.01)=log10(10)−log10(1000)=1−3=−2log_{10}(0.01) = log_{10}(10) - log_{10}(1000) = 1 - 3 =-2log10​(0.01)=log10​(10)−log10​(1000)=1−3=−2
这样我们只需要在输入前对 aaa 进行放大,然后对算出的结果减去一个固定值就好了。
.

参考链接
  1. 用verilog实现log2的一种方法

.
.
.
.
.
.

FPGA实现对数log2和10*log10相关推荐

  1. R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域)、ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节

    R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域).ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节 目录

  2. (10)FPGA面试技能提升篇10(MATLAB)

    1.1 FPGA面试技能提升篇10(MATLAB) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇10(MATLAB): 5)结束语. 1.1.2 ...

  3. FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义

    前言 本文首发自:FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义 上篇文章:FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异有提到,制造商会以一系列由破折号 ...

  4. FPGA开发之时序收敛10个小技巧

    1.好的代码风格 1)代码要跟器件结构相关 2)避免异步复位,异步复位同步化,全局复位局部化 3)层次的边界要加流水寄存 \quad例如:BRAM中有两级register,第一级在内部,第二级在外部s ...

  5. 信奥中的数学:对数(2022.10.29)

    [仙童小学]你真的认识对数吗 [仙童小学]你真的认识对数吗_哔哩哔哩_bilibili 小学生对数学的理解 5年级 小学生对数学的理解 5年级_哔哩哔哩_bilibili [秒懂数学]对数运算难如狗, ...

  6. FPGA学习笔记1.1——10人表决器

    设计思路: 十人裁决器,当多于5人,输出为10,等于5人则为00,小于5人则为01:同时可以用sum统计十人的1的数目,进行判定. 原理图: 功能模块代码: module decision_circu ...

  7. FPGA的设计艺术(10)HDL是软件还是硬件?

    前言 大家都知道HDL是逻辑设计的语言,FPGA开发是一种硬件开发的行为,但由于我们平时也使用某种类似软件的方式管理项目,并且类似软件的行为来编码,大多数人还是会误会?你是不是在搞软件? 对于这种问题 ...

  8. 复习对数函数相关知识

    对数公式是数学中的一种常见公式,如果a^x=N(a>0,且a≠1),则x叫做以a为底N的对数,记做x=log(a)(N),其中a要写于log右下.其中a叫做对数的底,N叫做真数 . 通常将以10 ...

  9. (10)FPGA与ASIC区别

    (10)FPGA与ASIC区别 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA与ASIC区别 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1 ...

  10. 2019英特尔服务器芯片,英特尔重申2019 年推出10 纳米制程,服务器、FPGA将优先应用...

    日前,在外资投资大会上,处理器龙头英特尔(intel)暂代首席执行官 Robert Swan 又重申对 10 纳米制程的规划,确定 2019 年 FPGA 芯片将首先采用 10 纳米制程技术,到了 2 ...

最新文章

  1. flask mysql项目模板渲染_Flask模板渲染
  2. 熟知的CRM有哪些功能特点?
  3. python第三方库全部_自动更新Python所有第三方库
  4. Tinyhttpd 代码学习
  5. 解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题
  6. 给 22 岁的自己六点建议
  7. R语言自然语言处理:关键词提取与文本摘要(TextRank)
  8. 移远EC20 4G模块拨号相关
  9. 如何用邮件客户端收发电子邮件,如何配置邮件客户端?
  10. 4-产品需求文档PRD
  11. MATLAB 整数小数负数十进制转换为十六进制
  12. 腾讯数据库TcaplusDB X 黎明觉醒,热血不散,探索不止!
  13. 使用python获取日历信息并制作订阅文件
  14. 批量修改图片的后缀名以及删除相同的符号
  15. Multi class ovr or ovo
  16. goahead移植和使用
  17. 大数据中心系统集成资质
  18. 初尝Google Code
  19. python 余弦距离_距离最小余弦
  20. 决战燕京城-08 武穆帅印

热门文章

  1. 【2022西电A测】温度检测控制仿真系统
  2. android xutils加密,xutils
  3. 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
  4. 总会用到的系列4:关键时刻能救家庭的保险
  5. 嵌入式开发笔记——调试组件SEGGER_HardFaultHandle
  6. h3c交换机限制端口访问_勒索病毒,华为/H3C三层交换机/路由器用ACL访问控制实现端口禁用...
  7. t-SNE原理与推导
  8. 学计算机导论的感悟,学习《计算机导论》后的感想
  9. 华为悦盒EC6108V9 、EC6108V9C_1080UI_非高安版_鸿蒙动画_免拆卡刷固件
  10. Netapp 存储文件共享-windows 系统应用