FPGA实现简单乘法的一种方法-FPGA常见问题社区-FPGA CPLD-ChipDebug

FPGA实现简单乘法的一种方法

FPGA的乘法操作一般是由dsp硬核实现的,比如我们之前文章中曾将仔细讲解的xilinx k7系列的DSP48E1,Ultrascale+的dsp48E2。每个芯片都有各自的DSP硬核可供使用。

dsp48e1结构图如下,详细的说明文章为:FPGA的底层资源之DSP48E1,对应的仿真说明为:Xilinx DSP48E1仿真

037cada719213802

 

本次文章针对的是简单的乘法操作:简单的固定乘法可以使用移位加的方法进行实现,进一步简单的说就是将固定的乘法转换为若干个2**n的和的结果。

比如:a*9 = a*(8+1)=a*(2**3)+a*(2**0),对于任意a*9的操作,可以将其分为a*8+a,对应的代码为:

/// mult9
assign S_data_in_mult8 = {i_data_in,3'b0};

always @(posedge i_sys_clk)
    S_data_in_mult9 <= S_data_in_mult8 + i_data_in ;

 

同样的对于a*18=a*(16+2)=a*(2**4)+a*(2**1),对应的代码就是:

/// mult18
assign S_data_in_mult16 = {i_data_in,4'b0};
assign S_data_in_mult2 = {i_data_in,1'b0};

always @(posedge i_sys_clk)
    S_data_in_mult9 <= S_data_in_mult16 + S_data_in_mult2 ;

 

这样将将乘法转换为了加法,大大节约了对FPGA底层资源的浪费。

 

请登录后发表评论

    没有回复内容