FPGA实现对数log2和10*log10
找到的实现对数的方式有三种:
- 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}logab=logcalogcb
不过这里要求的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∗log10b=log21010∗log2b=3.321910∗log2b=3.0103∗log2b
不管误差,在HDL实现的时候有
3∗log2b=2∗log2b+log2b=log2b<<1+log2b3*log_2b = 2*log_2b + log_2b = log_2b << 1 + log_2b3∗log2b=2∗log2b+log2b=log2b<<1+log2b
所以在没有使用任何乘除法的情况下,我们就实现了log2log_2log2和10∗log1010*log_{10}10∗log10
我用systemverilog实现了上述方法,代码链接如下,没分的可以留下邮箱,记得先点赞^^
https://download.csdn.net/download/qq_16923717/11570694
注意:不建议将该代码用到实际的工程中,精度不够是一个原因,更重要的是该代码中有很长的if else,时序可能不好
3. 求log10(a),0<a<1log_{10}(a), 0 < a < 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 进行放大,然后对算出的结果减去一个固定值就好了。
.
参考链接
- 用verilog实现log2的一种方法
.
.
.
.
.
.
FPGA实现对数log2和10*log10相关推荐
- R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域)、ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节
R语言ggplot2可视化:ggplot2可视化密度图(显示数据密集区域).ggplot2可视化密度图(对数坐标):log10比例的收入密度图突出了在常规密度图中很难看到的收入分布细节 目录
- (10)FPGA面试技能提升篇10(MATLAB)
1.1 FPGA面试技能提升篇10(MATLAB) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇10(MATLAB): 5)结束语. 1.1.2 ...
- FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义
前言 本文首发自:FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义 上篇文章:FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异有提到,制造商会以一系列由破折号 ...
- FPGA开发之时序收敛10个小技巧
1.好的代码风格 1)代码要跟器件结构相关 2)避免异步复位,异步复位同步化,全局复位局部化 3)层次的边界要加流水寄存 \quad例如:BRAM中有两级register,第一级在内部,第二级在外部s ...
- 信奥中的数学:对数(2022.10.29)
[仙童小学]你真的认识对数吗 [仙童小学]你真的认识对数吗_哔哩哔哩_bilibili 小学生对数学的理解 5年级 小学生对数学的理解 5年级_哔哩哔哩_bilibili [秒懂数学]对数运算难如狗, ...
- FPGA学习笔记1.1——10人表决器
设计思路: 十人裁决器,当多于5人,输出为10,等于5人则为00,小于5人则为01:同时可以用sum统计十人的1的数目,进行判定. 原理图: 功能模块代码: module decision_circu ...
- FPGA的设计艺术(10)HDL是软件还是硬件?
前言 大家都知道HDL是逻辑设计的语言,FPGA开发是一种硬件开发的行为,但由于我们平时也使用某种类似软件的方式管理项目,并且类似软件的行为来编码,大多数人还是会误会?你是不是在搞软件? 对于这种问题 ...
- 复习对数函数相关知识
对数公式是数学中的一种常见公式,如果a^x=N(a>0,且a≠1),则x叫做以a为底N的对数,记做x=log(a)(N),其中a要写于log右下.其中a叫做对数的底,N叫做真数 . 通常将以10 ...
- (10)FPGA与ASIC区别
(10)FPGA与ASIC区别 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA与ASIC区别 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1 ...
- 2019英特尔服务器芯片,英特尔重申2019 年推出10 纳米制程,服务器、FPGA将优先应用...
日前,在外资投资大会上,处理器龙头英特尔(intel)暂代首席执行官 Robert Swan 又重申对 10 纳米制程的规划,确定 2019 年 FPGA 芯片将首先采用 10 纳米制程技术,到了 2 ...
最新文章
- flask mysql项目模板渲染_Flask模板渲染
- 熟知的CRM有哪些功能特点?
- python第三方库全部_自动更新Python所有第三方库
- Tinyhttpd 代码学习
- 解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题
- 给 22 岁的自己六点建议
- R语言自然语言处理:关键词提取与文本摘要(TextRank)
- 移远EC20 4G模块拨号相关
- 如何用邮件客户端收发电子邮件,如何配置邮件客户端?
- 4-产品需求文档PRD
- MATLAB 整数小数负数十进制转换为十六进制
- 腾讯数据库TcaplusDB X 黎明觉醒,热血不散,探索不止!
- 使用python获取日历信息并制作订阅文件
- 批量修改图片的后缀名以及删除相同的符号
- Multi class ovr or ovo
- goahead移植和使用
- 大数据中心系统集成资质
- 初尝Google Code
- python 余弦距离_距离最小余弦
- 决战燕京城-08 武穆帅印
热门文章
- 【2022西电A测】温度检测控制仿真系统
- android xutils加密,xutils
- 2019新版《龙果学院JavaEE秒杀系统企业级实战应用教程》
- 总会用到的系列4:关键时刻能救家庭的保险
- 嵌入式开发笔记——调试组件SEGGER_HardFaultHandle
- h3c交换机限制端口访问_勒索病毒,华为/H3C三层交换机/路由器用ACL访问控制实现端口禁用...
- t-SNE原理与推导
- 学计算机导论的感悟,学习《计算机导论》后的感想
- 华为悦盒EC6108V9 、EC6108V9C_1080UI_非高安版_鸿蒙动画_免拆卡刷固件
- Netapp 存储文件共享-windows 系统应用