跳转到主要内容

Vivado除法IP注意事项

joycha 提交于

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhangningning1996/article/details/107943365

<strong>参考文献</strong>
[1]、V3学院——软件无线电课程

<strong>项目简述</strong>
这篇博客主要记录Vivado中除法IP的注意事项,遇见一些新的知识点应该做相应的笔记。

本次实验所用的软硬件环境如下:
[1]、Vivado 2019.2
[2]、Modelsim 10.7

<strong>注意事项</strong>

<strong>第一个注意事项</strong>

首先可以在除法IP的定制界面看到被除数、除数、商的位宽有详细的说明:
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052446-10…; alt=""></center>

从上面的位宽信息,我们可以发现被除数有18位整数,除数有18位整数,商有18位整数、11位小数。当然这里的被除数与除数可以是量化完之后的结果,但是量化要注意被除数与除数乘以相同的数。

<strong>第二个注意事项</strong>

除法器的下面的选项是控制除法器每隔多少个时钟有一个有效的输出:
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052446-10…; alt=""></center>

<strong>第三个注意事项</strong>

<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052446-10…; alt=""></center>

这两种模式的解释如下:
Non Blocking 非阻塞模式
非阻塞模式就是送入除数和被除数接口当除数和被除数的 TREADY 和 TVALID的都共同有效时刻的 TDATA 数据被除法器接收并运算, 如果单个除数或者被除数 TREADY 和 TVALID 一起有效, 不会被除法器接收数据运算。
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052446-10…; alt=""></center>

有些特殊场景希望使用资源少,也可以使用 H Radix + Non Blocking 注意除数是否有效, 除数如果无效还不能取其计算的结果。

Blocking 阻塞模式
阻塞模式相当于在除数和被除数端口上都增加了 fifo, 除数和被除数不要求TVALID 和 TREADY 都同时有效, 可以分拍有效, 这时候除法器还会根据送入除法器的接口数据顺序进行计算。 如下图时序
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052446-10…; alt=""></center>

除数和被除数数据来临的时刻不相等, 而希望按照顺序进行做运算, 这时候使用 blocking 模式最好。

<strong>第四个注意事项</strong>

对于有符号数的除法,IP输出的数据不能直接供下一级使用,于是进行相应的处理。 这里主要是因为输出的结果小数位有一个单独的符号位,我们需要把这个符号位去掉再拼接,例如对于下面的例子:
<center><img src="http://xilinx.eetrend.com/files/2020-09/%E5%8D%9A%E5%AE%A2/100052446-10…; alt=""></center>

输出数据小数位的第11位是符号位,进行拼接的代码如下:
<pre>assign data = {M_AXIS_DOUT_tdata[28:11],M_AXIS_DOUT_tdata[10:0]};
</pre>

<strong>总结</strong>

上面的是一些关于VIVADO除法IP的注意事项,认为文章有帮助的同学们可以关注、点赞、转发支持。