verilog求倒数-ROM实现方法

Posted dinging006

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog求倒数-ROM实现方法相关的知识,希望对你有一定的参考价值。

采用线性逼近法结合32段线性查找表的方式来实现1/z的计算。

首先将1/32-1/64的定点化数据存放到ROM中,ROM中存放的是扩大了2^20 次方的数字四舍五入后的整数部分。n值越大,精度越大,误差越小。这里取n=20;

ROM中存储的数据是1/(32+i)*2^20的四舍五入的整数部分。

32-64间的数据可以通过查表来实现,其他的数据则采用的是线性逼近的方法。

线性逼近的步骤为:

1.确定最高非零比特位的位置

2.对z进行左移或者右移,得到zp

3.zp查找ROM,得到1/zp,以及1/(zp+1),

4.求的1/zp-1/(zp+1),为误差A

5.N=z-zp*2^(m-5)

6.B=A/2^(m-5)*N

7.将扩大的部分缩小回去,或者缩小了的放大回去,那么1/z=(1/zp-B)*(1/2^(m-5))

 

那么最终的仿真结果:如果直接查询的话,结果输出延时一个时钟周期,如果线性逼近的方法得到,延时3-5个时钟周期,这里周期设定为20ns;

技术分享图片

占用资源报告:

技术分享图片

以上是关于verilog求倒数-ROM实现方法的主要内容,如果未能解决你的问题,请参考以下文章

用Verilog写的ROM存储器里面有memory类型变量在Modelsim里面仿真时看不见是怎么回事?求高手指点。谢谢

FPGA/数字IC手撕代码3——通过纯verilog实现简单的ROM

如何用verilog综合出RAM和ROM使用BlockRAM

verilog数组赋值

求一个用verilog实现二分之一分频(是提高频率,不是降低频率)的代码

怎么用verilog实现cos,sin等三角函数