0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA中乘法器的原理分析

454398 来源:科学计算technomania 作者:猫叔 2020-09-27 15:12 次阅读

作者:猫叔

FPGA中乘法器是很稀缺的资源,但也是我们做算法必不可少的资源。7系列及之前的FPGA都是25x18的DSP,UltraScale中是27x18,我们可以通过调IP Core的方式或者原语的方式来进行乘法操作。在里面可以设置有符号还是无符号数乘法。

FPGA中乘法器的原理分析



当然,我们也可以直接使用*符合来进行乘法,对于无符号的乘法

reg [7:0] ubyte_a;
reg [7:0] ubyte_b;
(* use_dsp48="yes" *)
output reg[15:0] u_res;

always @ ( posedge clk ) begin 
    if(rst)
        u_res <= 'b0;
    else
        u_res <= ubyte_a * ubyte_b;
end

有符号乘法可以在Verilog中使用signed来标注。

reg signed [7:0] byte_a;
reg signed [7:0] byte_b;
(* use_dsp48="yes" *)
reg signed [15:0] res;

always @ ( posedge clk ) begin 
    if(rst)
        res <= 'b0;
    else
        res <= byte_a * byte_b;
end

当然我们也要理解有符号数乘法的原理,其实就是扩位乘法,把高位都补充为符号位。

有符号数乘法:

reg [7:0] ubyte_a;
reg [7:0] ubyte_b;
(* use_dsp48="yes" *)
reg [15:0] res_manul;

always @ ( posedge clk ) begin
    if(rst)
        res_manul <= 'b0;
    else
        res_manul <= {{8{byte_a[7]}},ubyte_a} * {{8{ubyte_b[7]}},ubyte_b};
end

关于乘法输出的位宽,我们知道,两个8bits的无符号数乘法,结果的位宽是16bits,但对于两个8bits有符号数的乘法,只要两个数不同时为-128,即二进制0b1000_0000,那么输出结果的高两位都是符号位,我们只需要取低15bits即可。因此,如果我们可以保证两个输入的乘数不会同时为有符号数所能表示的负数最小值,那么乘法结果的高两位都是符号位,只取其中一位即可。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7680

    浏览量

    344319
  • FPGA
    +关注

    关注

    1601

    文章

    21294

    浏览量

    593030
  • 乘法器
    +关注

    关注

    8

    文章

    191

    浏览量

    36580
收藏 人收藏

    评论

    相关推荐

    基于FPGA的高效乘法器

    乘数为1时需要左移的位数与数据位的权重其实有关,但是FPGA实现这样的运算并不算特别简单,还能不能简化?
    发表于 03-08 14:11 281次阅读
    基于<b class='flag-5'>FPGA</b>的高效<b class='flag-5'>乘法器</b>

    Versal FPGA中的浮点计算单元DSPFP32介绍

    Versal FPGA中最新的DSP原语DSP58,它在最新的DSP48版本上已经有了许多改进,主要是从27x18有符号乘法器和48位后加法器增加到了27x24和58位。
    的头像 发表于 02-22 09:22 888次阅读
    Versal <b class='flag-5'>FPGA</b>中的浮点计算单元DSPFP32介绍

    如何设计一个16比特的减法器呢?

    减法电路是基本集成运放电路的一种,算术运算电路主要包括数字**加法器电路、数字减法器电路、数字乘法器电路和数字除法器电路。
    的头像 发表于 02-19 10:00 351次阅读
    如何设计一个16比特的减<b class='flag-5'>法器</b>呢?

    乘法器AD734上电后发热严重,数据漂移的原因?怎么解决?

    乘法器AD734上电后发热比较严重,输入与地短接的情况下,输出数据不稳定,用数据卡采集可以看到明显的漂移,[size=13.3333px]采用的是芯片手册上的最基本的乘法电路,这种现象的原因是什么,是PCB设计的问题吗。
    发表于 12-15 06:44

    pipeline ADC的实现原理及基本结构(1)

    假设单级的分辨率为n,它由S/H电路、n位的子ADC、n位的子DAC、减法器以及乘法器构成,一般也将n位的子DAC、减法器以及乘法器统称为MDAC(multiplying DAC)。
    的头像 发表于 12-14 12:34 811次阅读
    pipeline ADC的实现原理及基本结构(1)

    用AD835的Datasheet上的电路做了一个乘法器电路,出现两个直流偏置的原因?

    我用AD835的Datasheet上的电路做了一个乘法器电路,但是测试的时候发现,当输入信号大于峰值大于600mV左右的时候,1和8两个引脚端就会突然出现两个直流偏置,约-1.5V,请问有人用该芯片出现过这种问题吗?求指教。。。。
    发表于 11-27 06:43

    求助,关于二象限乘法器AD539的一些疑问

    各位,请教乘法器的一些问题: 1.二象限乘法器AD539控制通道Vx只能输入正信号,但是否只能为直流电平(用做电压控制放大器)? 2.如果控制通道Vx输入交流信号,理论上是否应该做偏置,使之在
    发表于 11-22 07:48

    用AD835乘法器做的一个电路,当X和Y的频率相同时,输出的波形问题求解

    请教大神,我用AD835乘法器做的一个电路,当X和Y的频率相同时,相乘时输出是正弦波,但是当频率不相同时输出波形就会变为这种波形,请问有人知道是什么问题??谢谢!附件里有一张图是同频率相乘,波形是对的,另一张是不同频率相乘的图!
    发表于 11-22 06:54

    集成乘法器幅度调制与解调实验

    掌握用MCl496集成模拟乘法器来实现AM和DSB调制的方法,并研究已调波与调制信号、载波之间关系
    的头像 发表于 11-08 15:38 2009次阅读
    集成<b class='flag-5'>乘法器</b>幅度调制与解调实验

    使用IAR IDE仿真RL78内置硬件乘法器和除法器注意事项

    使用IAR IDE仿真RL78内置硬件乘法器和除法器注意事项
    的头像 发表于 10-30 17:04 564次阅读
    使用IAR IDE仿真RL78内置硬件<b class='flag-5'>乘法器</b>和除<b class='flag-5'>法器</b>注意事项

    Altera FPGA内置的乘法器为何是18位的?

    Altera的FPGA内置的乘法器为何是18位的?
    发表于 10-18 07:01

    硬件乘法器是怎么实现的?

    硬件乘法器是怎么实现的
    发表于 09-22 06:53

    集成电路中低功耗乘法器的实现与设计方案

    限度的低功耗效果。本文紧跟市场发展动向,从以上应用角度出发,着力研究集成电路设计中小数乘法器的前端低功耗算法以及实现技术,并且改进了现有低功耗设计技术的一些不足之处。
    发表于 09-19 07:42

    FPGA常用运算模块-复数乘法器

    本文是本系列的第五篇,本文主要介绍FPGA常用运算模块-复数乘法器,xilinx提供了相关的IP以便于用户进行开发使用。
    的头像 发表于 05-22 16:23 1366次阅读
    <b class='flag-5'>FPGA</b>常用运算模块-复数<b class='flag-5'>乘法器</b>

    FPGA常用运算模块-加减法器乘法器

    本文是本系列的第二篇,本文主要介绍FPGA常用运算模块-加减法器乘法器,xilinx提供了相关的IP以便于用户进行开发使用。
    的头像 发表于 05-22 16:13 2789次阅读
    <b class='flag-5'>FPGA</b>常用运算模块-加减<b class='flag-5'>法器</b>和<b class='flag-5'>乘法器</b>