【FPGA数学运算】乘法运算的N种实现方法

本文转载自:FPGA入门到精通微信公众号

FPGA开发中遇到乘法运算的概率非常高,不管是信号处理,还是图像处理,都需要掌握F乘法运算的使用方法。

今天我们就来聊一聊“FPGA中乘法运算的N种实现方式”。

一、直接使用乘法符“*”

直接在verilog代码中调用乘法符“*”,剩下的就让编译器自动判断和优化,决定最终是用LUT还是硬件乘法器DSP实现。

如果明确要求使用“硬件乘法器DSP”,则可以在寄存器变量声明前面,添加“(* use_dsp48 = "yes" * )”,如下:

wire [11:0] a, b;

(* use_dsp48="yes" *) wire [23:0] sum;

assign sum = a*b;

​这种方法的优点是写起代码简单,易移植代码,推荐使用该方式。

注意事项:

(1)存储乘法运算结果的寄存器位宽,等于2个乘数的位宽之和。
(2)建议乘法运算结果再打一拍,至少保持2个周期的延迟,改善代码时序,可兼容更高时钟频率下运行。

二、调用乘法器IP“Multiplier”

xilinx乘法器IP支持有符号数和无符号数,也有两种资源消耗模式可选,一个是“使用LUT”,一个是“使用硬件乘法器DSP”。

1、打开IP

在vivado中打开IP库“IP Catalog”,选择“Multiplier”

2、basic界面配制参数

Multiplier Type:
Parallel Multiplier:并行乘法器。
Constant Coefficient Multiplier:恒定系数乘法器。

Input Options:
Data Type:Signed有符号数、 Unsigned无符号数。
Width:操作数位宽。

Multiplier Construction: 使用LUT或乘法器DSP。

Optimization Options:Area Optimized 资源优先或Speed Optimized速度优先。

3、Output and Control 输出控制界面

Output Product Range:
Use Custom Output Width:自定义输出宽度。

Pipelining and Control Signals:
Pipeline Stages: 流水线级数选择
Clock Enable:时钟使能。
Synchronous Clear: 同步清除。
SCLR/CE Priority: 设置SCLR引脚和CE引脚的优先级。

三、小结

FPGA开发中,优先推荐使用DSP资源,如果DSP资源有限时,可考虑使用LUT资源实现,可以使用Multiplier这个IP,也可以考虑自己写。

最新文章

最新文章