xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1

参考:xilinx FPGA 除法器ip核(divider)的使用(VHDL&Vivado)_vivado除法器_坚持每天写程序的博客-CSDN博客

一、创建除法IP

vivado的除法器ip核有三种类型,跟ISE相比多了一个LuMult类型,总结来说就是

LuMult:使用了DSP切片、块RAM和少量的FPGA逻辑原语(寄存器和lut),所以和Radix2相比占用fpga资源更少;可以选择有符号或者无符号类型数据;但是位数有限,只能用于运算量小的时候,被除数位宽:2~17,除数位宽:2~11;只能选择余数模式

Radix2:使用FPGA逻辑原语(寄存器和LUTs);可以选择有符号或者无符号类型数据;被除数位宽:2~64,除数位宽:2~64;可以选择余数模式或者分数模式

High Radix:使用DSP切片和块ram;只能选择有符号类型(所以要扩展一位);被除数位宽:4~64,除数位宽:4~64;只能选择分数模式

时序控制有两种模式:

Non Blocking Mode:非阻塞模式

 valid是数据输入有效信号(in),ready是数据已经输入的标志信号(out),也就是说只有当除数和被除数同时输入成功,才会进行运算,并且在计算完成后在valid有效时,输出结果。但是在图中的dout_valid第二次有效时,这次的除数是无效的,所以要避免这个情况。

Blocking Mode:阻塞模式

valid是数据输入有效信号(in),ready是数据已经输入的标志信号(out),但是在该模式下对于除数和被除数是否有效的判定是一样的,只是两个过程是独立的,相当于单独判断被除数和除数 是否有效,然后一次放到两个fifo当中,然后依次去计算

二、避坑点

正常情况下,你ip配置跟上面一样但数据出来不对先看ip有没有更新,每次更改ip或者代码都要

 要不生成bit文件后也没更新数据。

一般我们取输出有效信号时的值,后面的值都是错乱的

还有赛灵思的ip生成后是.vhd后缀的 不是.v的不过不影响我们verilog语言正常使用,例化如下:

div_gen_0   inst_div_gen_0  (
    .aclk (aclk ),                   //: IN STD_LOGIC;
    .s_axis_divisor_tvalid(s_axis_divisor_tvalid),  //: IN STD_LOGIC;
    .s_axis_divisor_tdata (s_axis_divisor_tdata ),            // : IN STD_LOGIC_VECTOR
    .s_axis_dividend_tvalid (s_axis_dividend_tvalid ),          // : IN STD_LOGIC;
    .s_axis_dividend_tdata(s_axis_dividend_tdata),  //  : IN STD_LOGIC_VECTOR
    .m_axis_dout_tvalid(m_axis_dout_tvalid),        // : OUT STD_LOGIC;
    .m_axis_dout_tdata (m_axis_dout_tdata )    // : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
  );

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值