1、测试环境

vivado 2018.2

2、IP接口

时钟使能 与 复位可定制。

3、参数配置

  • Algorithm Type

    LUTMult

    This is recommended for operand widths less than or equal to 12 bits
    This implementation uses DSP slices, block RAM and a small amount of FPGA logic primitives (registers and LUTs).

    Radix-2

    This is recommended for operand widths less than around 16 bits or for applications requiring high throughput。
    The Radix2 solution does not use DSP or block RAM primitives, so this implementation is recommended when these primitives are needed elsewhere.

    High Radix

    High Radix division with prescaling. This is recommended for operand
    widths greater than around 16 bits. This implementation uses DSP slices and block
    RAMs.

  • Divisor Width和Dividend Width

除数与被除数位宽都会被自动扩展成8的倍数,具体配置的后的精度位宽可查看

  • Reminder Type

余数模式:输出余数位宽与除数位宽相等。

分数模式:输出小数位宽与除数位宽相等,但有符号除法时,整数部分和小数部分各自为有符号数。

对于有符号数的除法,IP输出的数据不能直接供下一级使用,于是进行相应的处理。 这里主要是因为输出的结果小数位有一个单独的符号位,我们需要把这个符号位去掉再拼接,例如对于下面的例子:

输出数据小数位的第11位是符号位,进行拼接的代码如下:

assign      data                    =   {M_AXIS_DOUT_tdata[28:11],M_AXIS_DOUT_tdata[10:0]};
  • Clocks per Division

控制除法器每隔多少个时钟有一个有效的输出

  • Flow Control

Non Blocking 非阻塞模式
非阻塞模式就是送入除数和被除数接口当除数和被除数的 TREADY 和 TVALID的都共同有效时刻的 TDATA 数据被除法器接收并运算, 如果单个除数或者被除数 TREADY 和 TVALID 一起有效, 不会被除法器接收数据运算。

有些特殊场景希望使用资源少,也可以使用 H Radix + Non Blocking 注意除数是否有效, 除数如果无效还不能取其计算的结果。
Blocking 阻塞模式
阻塞模式相当于在除数和被除数端口上都增加了 fifo, 除数和被除数不要求TVALID 和 TREADY 都同时有效, 可以分拍有效, 这时候除法器还会根据送入除法器的接口数据顺序进行计算。 如下图时序

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

  • Lantency Options

输出延迟,可手动设置,延迟越高,资源用的越多。

那为什么默认还这么高延迟呢?

下表测试条件:除数16位有符号,被除数16位有符号,输出分数模式,其余默认。

输出延迟与资源使用
Lantency LUT FF
0 669 608
1 669 643
10 672 959
36(默认) 707 1871

4、测试代码

测试条件:除数16位有符号,被除数16位有符号,输出分数模式,其余默认。

module tb;
reg clk;
reg s_axis_divisor_tvalid;
reg [15:0] s_axis_divisor_tdata;
reg s_axis_dividend_tvalid;
reg signed [15:0] s_axis_dividend_tdata;
wire m_axis_dout_tvalid;
wire [31:0] m_axis_dout_tdata;
wire [31:0] c;always #3.125 clk = ~clk;         //  延迟可变,来改变频率initialbeginclk = 0;s_axis_divisor_tvalid = 0;s_axis_dividend_tvalid = 0;s_axis_divisor_tdata = 0;s_axis_dividend_tdata = 0;#1000 s_axis_divisor_tvalid = 1;#0    s_axis_dividend_tvalid = 1;#0    s_axis_divisor_tdata = 2;    //除数#0    s_axis_dividend_tdata = 24;  //被除数#6.25  s_axis_divisor_tdata = 12;    //除数#0    s_axis_dividend_tdata = -11;  //被除数#6.25  s_axis_divisor_tdata = 12;    //除数#0    s_axis_dividend_tdata = 131;  //被除数#6.25  s_axis_divisor_tdata = 12;    //除数#0    s_axis_dividend_tdata = -131;  //被除数#6.25  s_axis_divisor_tdata = 12;    //除数#0    s_axis_dividend_tdata = -1;  //被除数#6.25   s_axis_divisor_tvalid = 0;#0    s_axis_dividend_tvalid = 0;foreverbegin #100000 s_axis_divisor_tvalid = 1;s_axis_dividend_tvalid = 1;s_axis_dividend_tdata=s_axis_dividend_tdata+20;#6.25 s_axis_divisor_tvalid = 0;#0    s_axis_dividend_tvalid = 0;end  enddiv_gen_0 div_gen(.aclk                    (clk),.s_axis_divisor_tvalid   (s_axis_divisor_tvalid),.s_axis_divisor_tdata    (s_axis_divisor_tdata),.s_axis_dividend_tvalid  (s_axis_dividend_tvalid),.s_axis_dividend_tdata   (s_axis_dividend_tdata),.m_axis_dout_tvalid      (m_axis_dout_tvalid),.m_axis_dout_tdata       (m_axis_dout_tdata)
);
assign  c=m_axis_dout_tdata[39:16];      //c 就是得到的结果 ,低位为余数值,所以c取高24位//assign 余数=m_axis_dout_tdata[15:0]; endmodule

仿真结果

参考文章:感谢

https://blog.csdn.net/qq_37363005/article/details/97764666

https://blog.csdn.net/zhangningning1996/article/details/107943365

VIVADO 11.Divider除法器IP相关推荐

  1. 【FPGA】:ip核--Divider(除法器)

    文章目录 二. Divider(除法器) 2.1 概述 2.2 端口说明 2.3 ip核的生成 2.4 测试代码 2.5 仿真结果 2.6 参考资料 二. Divider(除法器) 2.1 概述    ...

  2. vivado 除法器ip核的使用

    根据手册pg-151 Divider Generator v5.1 LUTMult This is recommended for operand widths less than or equal ...

  3. Xilinx Vivado定制IP核调用和除法器IP核的latency和resource分析

    加入定制的乘法IP核,必须在sources右键,用Add Directories加入才完整 加入文件夹后如下图: 测试代码与主程序模块连接端口初学者容易出现错误 输入端口:从模块内部来讲,输入端口必须 ...

  4. 基于 FPGA Vivado 的74系列IP封装(附源工程)

    今天给大侠带来基于 FPGA Vivado 的 74 系列IP封装,开发板使用的是Digilent basys 3,如有想要入手 basys 3 开发板的,可以联系牛总:18511371833.话不多 ...

  5. 数字信号处理基础----xilinx除法器IP使用

    前言 在进行数字信号处理的时候,计算是必不可少的,通常情况下,能够不用乘法器和除法器就不用乘除法器,可以采用移位和加减法的方式来完成计算.但在一些特殊情况下,希望采用乘除法,这时候在FPGA当中就需要 ...

  6. vivado中复数乘法器IP核使用小结

    vivado中复数乘法器IP核使用小结 添加ip核 进入工程,点击IP Catalog,在弹出的窗口中点击数学功能–math functions,选择multipliers–complex multi ...

  7. Vivado中RTL封装IP流程

    Vivado中RTL封装IP流程 前言 本文记录自己将RTL代码封装成IP的流程,以供之后查阅使用.最近一个月在做一个数据仲裁与转发的项目,已经完成功能仿真,准备将其封装成IP在Block Desig ...

  8. 计算机网络之网络层:11、移动IP

    网络层:11.移动IP 产生原因: 移动IP的相关术语: 移动IP通信过程: 产生原因: 当一个设备从一个网络移动到另一个网络时仍想保持IP地址不变,为达到这种目的产生了移动IP(实现了从一个网络到另 ...

  9. 解决新版本Vivado打开老工程IP锁住的问题

    解决新版本Vivado打开老工程IP锁住的问题 参考文章: (1)解决新版本Vivado打开老工程IP锁住的问题 (2)https://www.cnblogs.com/chensimin1990/p/ ...

最新文章

  1. SAP QM 物料主数据QM视图里字段MARC-INSMK的更新
  2. 用C语言写一个选择题程序,C语言程序设计选择题:1,设char*strp4-={aa 爱问知识人...
  3. 快速幂(二进制,十进制)
  4. React单页如何规划路由、设计Store、划分模块、按需加载
  5. 指针数据类型 java_C/C++ 指针的小结——指针与其它数据类型(数组、字符串、函数、结构体)的关系...
  6. 【面向对象】对象的本质
  7. 电机学第一章(磁路的基本定律)
  8. 《麦肯锡方法》读书笔记15
  9. Qt学习之自定义控件——颜色下拉框
  10. APICloud的config.xml应用配置的说明
  11. 计算机专业英语词汇缩写CIA,CIA英文词汇缩写
  12. 苹果商店打不开怎么办_苹果手机下载迅雷方法,iOS迅雷安装,怎么安装苹果版迅雷...
  13. python中怎么取小数点后两位函数_python中round函数保留两位小数的方法
  14. 网卡offload功能介绍
  15. eviews曲线图怎么做,eviews如何画趋势图
  16. [zkaq靶场]命令执行--IBOS协同办公系统通杀漏洞
  17. SEO入门:网站站内优化流程
  18. code::blocks自动补全诸如socket或者其它一些库中的函数
  19. C语言口求整除x与y的余数,取余或取模运算小结
  20. 群、环、域基础与例子

热门文章

  1. 十大WIFI提速技巧
  2. 优秀!华为诺亚方舟实验室联合中山大学发布新一代半/自监督的2D基准数据集SODA10M
  3. 许昌西继电梯服务器显示ZY,许昌西继西门子电梯5000故障代码
  4. DW怎么把两个html放在一起,用Dreamweaver怎么制作网页
  5. java日志管理(slf4j+logback,tomcat)
  6. js加密大全(防止客户端查看自己的js文件)
  7. Google账户登录服务
  8. Android软键盘手动显示、隐藏、布局上移和EditText上移
  9. 1407C. Chocolate Bunny(交互,推导)
  10. 17篇点云处理综述-点云语义分割、点云物体检测、自动驾驶中的点云处理……