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

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

一、创建除法IP

xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第1张图片

xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第2张图片

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;只能选择分数模式
xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第3张图片

时序控制有两种模式:

Non Blocking Mode:非阻塞模式

xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第4张图片

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

Blocking Mode:阻塞模式
xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第5张图片

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

二、避坑点

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

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

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

xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第6张图片

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

xilinx FPGA 除法器IP核(divider)的使用 vivado 2019.1_第7张图片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)
  );

你可能感兴趣的:(fpga开发)