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
    +关注

    关注

    554

    文章

    8060

    浏览量

    350859
  • FPGA
    +关注

    关注

    1631

    文章

    21806

    浏览量

    606684
  • 乘法器
    +关注

    关注

    9

    文章

    206

    浏览量

    37233
收藏 人收藏

    评论

    相关推荐

    ADA-28F00WG乘法器Marki

    ADA-28F00WG是一种高性能的模拟乘法器,能够将两个输入信号(电压或电流)进行乘法运算,并输出其结果。ADA-28F00WG乘法器采用高质量材料制造,并结合了最新的肖特基二极管和MMIC技术
    发表于 02-12 09:25

    求助,LMX2572LP参考时钟路径乘法器MULT的输入频率范围问题求解

    在lmx2572LP的参考时钟输入路径,有一个乘法器MULT,其输入频率范围在手册描述为10Mhz~40MHz。当我在TICS Pro软件中进行配置时,这个乘法器提示我“Maxi
    发表于 11-08 11:36

    MPY634做基本乘法器遇到的疑问求解

    我是按图所接.X2,Y2直接接地.但是乘法器输出波形会跳.示波器是用直流偶合.DC一时是正的一时是负的.怎么回事?
    发表于 09-25 06:06

    请问如何用VCA810实现模拟乘法器

    我在《德州仪器高性能单片机和模拟器件在高校的应用和选型指南》中看见,书中说VCA810可以做为模拟乘法器使用,但是应用手册里的公式却不是V0=VC*Vin,而是一个带指数向的公式,所以我很好
    发表于 09-23 07:11

    请问VCA822做成四象限乘法器的带宽是多少?

    如题,根据VCA822数据手册的四象限乘法器的原理图,该电路的带宽能达到多少?
    发表于 09-11 06:12

    CDCS504-Q1时钟缓冲器和时钟乘法器数据表

    电子发烧友网站提供《CDCS504-Q1时钟缓冲器和时钟乘法器数据表.pdf》资料免费下载
    发表于 08-23 10:35 0次下载
    CDCS504-Q1时钟缓冲器和时钟<b class='flag-5'>乘法器</b>数据表

    CDCVF25084时钟乘法器数据表

    电子发烧友网站提供《CDCVF25084时钟乘法器数据表.pdf》资料免费下载
    发表于 08-22 11:33 0次下载
    CDCVF25084时钟<b class='flag-5'>乘法器</b>数据表

    CDCF5801A具有延迟控制和相位对准的时钟乘法器数据表

    电子发烧友网站提供《CDCF5801A具有延迟控制和相位对准的时钟乘法器数据表.pdf》资料免费下载
    发表于 08-22 10:56 0次下载
    CDCF5801A具有延迟控制和相位对准的时钟<b class='flag-5'>乘法器</b>数据表

    CDCF5801时钟乘法器数据表

    电子发烧友网站提供《CDCF5801时钟乘法器数据表.pdf》资料免费下载
    发表于 08-22 10:37 1次下载
    CDCF5801时钟<b class='flag-5'>乘法器</b>数据表

    CDCE906 PLL频率合成器/乘法器/分频器数据表

    电子发烧友网站提供《CDCE906 PLL频率合成器/乘法器/分频器数据表.pdf》资料免费下载
    发表于 08-22 09:30 0次下载
    CDCE906 PLL频率合成器/<b class='flag-5'>乘法器</b>/分频器数据表

    CDCS503带可选SSC的时钟缓冲器/时钟乘法器数据表

    电子发烧友网站提供《CDCS503带可选SSC的时钟缓冲器/时钟乘法器数据表.pdf》资料免费下载
    发表于 08-22 09:18 0次下载
    CDCS503带可选SSC的时钟缓冲器/时钟<b class='flag-5'>乘法器</b>数据表

    SN5497、SN7497同步6位二进制速率乘法器数据表

    电子发烧友网站提供《SN5497、SN7497同步6位二进制速率乘法器数据表.pdf》资料免费下载
    发表于 06-03 09:24 2次下载
    SN5497、SN7497同步6位二进制速率<b class='flag-5'>乘法器</b>数据表

    AD630可以被用作这种乘法器吗?怎么使用AD630实现两个信号相乘呢?

    AD630芯片可以被用作这种乘法器吗?怎么使用AD630芯片实现两个信号相乘呢?
    发表于 05-30 08:26

    CMOSBCD速率乘法器CD4527B TYPES 数据表

    电子发烧友网站提供《CMOSBCD速率乘法器CD4527B TYPES 数据表.pdf》资料免费下载
    发表于 05-21 09:19 0次下载
    CMOSBCD速率<b class='flag-5'>乘法器</b>CD4527B TYPES 数据表

    CMOS二进制速率乘法器CD4089B TYPES 数据表

    电子发烧友网站提供《CMOS二进制速率乘法器CD4089B TYPES 数据表.pdf》资料免费下载
    发表于 05-21 09:17 0次下载
    CMOS二进制速率<b class='flag-5'>乘法器</b>CD4089B TYPES 数据表