【DNN Weaver FPGA实现】Vivado 乘法器与DSP资源使用

乘法器HDL编写

转自Vivado使用技巧(26):HDL编写技巧

综合工具从源代码中的乘法运算符来推测是否使用乘法器。乘法运算结果的位宽为两个操作数位宽之和。比如16Bits的信号乘以8Bits的信号,结果为24Bits。乘法器可以用Slice单元或DSP块实现,选择依据有两点:(1).操作数的大小;(2).是否需要最佳性能。通过第25篇介绍过的USE_DSP属性可以强制设定乘法器的实现方式,设置为no用slice实现;设置为yes用DSP块实现。

当使用DSP块实现乘法器时,Vivado综合可以发挥DSP块流水线能力的最大优势,综合时会在乘法操作数和乘法器后插入两级寄存器。当乘法器无法用一个DSP块实现时,综合时会拆分乘法运算,采用几个DSP块或DSP块加slice的方案实现。下面给出代码示例:

// 16*24-bit乘法器,操作数一级延迟,输出三级延迟

module mult_unsigned (
    input clk, 
    input [15:0]A, 
    input [23:0]B, 
    output [39:0]RES
);

reg [15:0] rA;
reg [23:0] rB;
reg [39:0] M [3:0];

integer i;
always @(posedge clk)
begin
    rA <= A;
    rB <= B;
    M[0] <= rA * rB;
    for (i = 0; i < 3; i = i+1)
        M[i+1] <= M[i];
end

assign RES = M[3];

endmodule

5、DSP结构

转自BRAM和DSP间的纠缠(一) ---Vivado高效设计案例分享

DSP资源DSP48E1,其基本结构如图所示,主要由预加器(Pre-adder)、乘法器(Multiplier)、累加器/逻辑单元(Accumulator/Logic Unit)和模式检测器(Pattern Detector)。

DSP基本结构

内部的详细结构如下图所示,其中预加器输入来自输入端口A(30-Bit)和D(25-Bit);乘法器的输入来自输入端口B(18-Bit)和预加器结果(25-Bit),支持25-Bit X 18-Bit的运算;累加器/逻辑单元的输入来自乘法器结果和输入端口C(48-Bit),输入的模式组合由控制字OPMODE决定,运算模式由控制字ALUMODE决定。

DSP详细结构
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。