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

    关注

    559

    文章

    8214

    浏览量

    363847
  • FPGA
    +关注

    关注

    1655

    文章

    22282

    浏览量

    630083
  • 乘法器
    +关注

    关注

    9

    文章

    221

    浏览量

    38516
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Xilinx 7系列FPGA的四位乘法器设计

    (Shinshu University)研究团队的最新设计,一个专为 Xilinx 7 系列 FPGA 量身打造的 4 位乘法器使用了仅 11 个 LUT + 2 个 CARRY4 块,关键路径延迟达到 2.75 ns。这是一
    的头像 发表于 11-17 09:49 2660次阅读
    使用Xilinx 7系列<b class='flag-5'>FPGA</b>的四位<b class='flag-5'>乘法器</b>设计

    E203在基于wallace树+booth编码的乘法器优化后的跑分结果

    优化思路 E203为了实现低功耗的要求,乘法器为基于booth编码和移位加法器结合的思路,优点是只需要一个加法器,而且该加法器还和除法器复用
    发表于 10-27 07:54

    E203V2长周期乘法器核心booth算法解读

    。 E203V2多周期运算单元乘法器booth编码具体如下: 进行乘法运算时所调用的加法器的两个操作数具体如下: 这里把乘法器的操作数
    发表于 10-24 09:33

    Verilog实现使用Booth编码和Wallace树的定点补码乘法器原理

    结果只需要一个周期,大大提升了乘法器性能。 1.Booth编码 将乘数看作从最低位开始的一串二进制数字。Booth算法的基本思路是:对于具有连续0和1的组,需要产生的部分积较少。对于乘数每个0
    发表于 10-23 08:01

    改进wallance树乘法器优化方法

    周期复用加法器的部分积加和算法,我们采用了改进的wallance树结构进行部分积的快速压缩,实现了单周期的乘法计算。 经过时序分析,我们的单周期乘法器时钟频率可以提高至140Hz,对比
    发表于 10-23 06:37

    关于E203内核高性能乘法器优化(一)

    一、简介 对于cpu各类测试程序,设计一个高性能的硬件乘法器模块无疑是提分最快的法案,本文将从乘法算法开始,到rtl设计进行详细的解释说明,并附带一部分源码。 二、乘法算法 乘法器
    发表于 10-23 06:09

    蜂鸟乘法器设计分享

    蜂鸟的乘法器主体设计在ALU模块的子单元MDV模块,MDV模块包括乘除法器逻辑设计,它只包含运算控制,但并不包含具体运算,它们都需要将部分积或者部分余数传入数据通路(dpath模块)
    发表于 10-22 08:21

    基4-Booth单周期乘法器的具体设计

    本文主要讲解基4 Booth和wallace数高性能乘法器的设计,同时针对实际情况进行了些许优化。 基4-Booth单周期乘法器设计 针对e203的应用场景,本队考虑了其架构修改所要
    发表于 10-22 08:07

    改进型乘法器结构设计

    的高32位。控制信号控制部分积产生和部分积压缩对操作数和部分积的处理,从而完成乘法器乘法运算。 译码模块对乘法指令进行译码,基4 Booth编码接收控制信号对被乘数和乘数进行符号扩展并产生18个
    发表于 10-22 07:51

    蜂鸟E203乘法器改进

    蜂鸟E203为了节约资源,乘法运算采用循环移位方式计算最终结果,这样的乘法器需要经过较多时钟周期来处理数据,导致处理数据效率较低。为了提高计算效率,这里分享一种基于流水线思想的乘法器,即采用多个
    发表于 10-22 07:28

    蜂鸟E203内核乘法器的优化

    乘法器的优化实现一般从两个方面入手。第一是减少生成的部分积数量,另外就是减少部分积累加的延时。 在开源的E203源码,32*32乘法器是利用radix-4 booth编码产生部分积,每个周期做一次
    发表于 10-22 06:11

    优化boot4的乘法运算周期

    优化电路设计:在电路设计,优化关键路径和信号传输路线,使用更高速的逻辑单元和存储器元件来降低延迟,从而缩短乘法器的运算周期。 利用流水线技术:使用流水线技术将乘法操作分成多个阶段,使每个阶段的操作
    发表于 10-21 13:17

    优化boot4乘法器方法

    优化电路设计:在电路设计,可以采用更快速的逻辑单元和存储器元件,优化关键路径和信号传输路线,从而降低延迟,缩短乘法器的运算周期。 固定位宽:Boot4乘法器可以处理不同位宽的数据,但是处理不同位宽
    发表于 10-21 12:13

    ADL5390 RF矢量乘法器技术手册

    ADL5390矢量乘法器由一对匹配的宽带可变增益放大器组成,二者输出相加,每个放大器具有单独的线性幅度增益控制。如果两个输入RF信号正交,则可以将该矢量乘法器配置为矢量调制器,或将增益控制引脚用作
    的头像 发表于 04-09 10:02 720次阅读
    ADL5390 RF矢量<b class='flag-5'>乘法器</b>技术手册

    ADA-28F00WG乘法器Marki

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