log2在verilog中到底有什么用

描述

很多小伙伴对上一篇文章讲的取对数没感觉,觉得这个没什么用。确实很多时候用不着,verilog本身不够灵活,所以很多时候我们也就没想把她写的多简介灵活,而且受限于编译器的支持,很多灵活的语法不能被编译成电路,所以有这种想法情理之中,毕竟花大把时间去玩一个函数发现他局限性很大那确实收益太少。

那么他到底有什么用?

如果大家要设计一个深度1024的fifo,那么地址位宽取多大合适?*╭︎( ˙º˙)╯︎*

当然是10位,log2(1024)

所以可以如下定义

parameter    deepth = 1024;

parameter    width = $clog2(deepth);

这样就把两个参数关联起来,调整代码的时候提高了可维护性也更方便。

但是到此为止了吗?

不知道大家有没有对做完fft以后取对数很苦恼,比如fft输出实部虚部各16bit,平方和开根号以后暂且也以16bit表示,那么怎么取对数呢?第一种方法是查表,第二种是传到上位机,让他处理。很多时候FPGA上确实不需要取对数这个操作,但是如果受限于高速接口,比如万兆网,pcie等接口速率希望压缩数据的时候对fft结果取对数无疑是一个很有必要的操作。毕竟log10这个对数可以把16位的数压缩到8位以内。所以查表确实可行,但是位数是24位呢,那情况就多了太多了,32位呢?

所以取对数这时候就有价值了,但是这是10为底的对数,和2为底的对数有什么关系?当然有关系,换底公式啊!

代码

多数时候fft之后我们计算10*log10或者20*log10,那么就等价于如下操作

代码

忽略3后面的小数影响的话,那么可以近似为

代码

多震撼的结论,所以数学好真的很有必要啊!当然你想更高精度,可以对换底公式以后的分子分母同时放大10的幂次方倍,然后再往下计算,这里留给读者自行思考。

是不是很累,很复杂?

那么我告诉你,verilog2005有log10的系统函数,哈哈哈哈哈,意不意外???

责任编辑:haq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分