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

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

3天内不再提示

FPGA中的有符号数乘法说明

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-16 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

poYBAGIMpoCAHqnrAAKVaCL3Jso537.png

pYYBAGIMpoGAKTaeAAJ6-aNWnxU862.png

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

reg [7:0] ubyte_a;
reg [7:0] ubyte_b;
(* *)
output reg[15:0] u_res;

always @ ( posedge clk ) begin
if(rst)
u_res else
u_res end

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

reg signed [7:0] byte_a;
reg signed [7:0] byte_b;
(* *)
reg signed [15:0] res;

always @ ( posedge clk ) begin
if(rst)
res else
res end

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

有符号数乘法:

reg [7:0] ubyte_a;
reg [7:0] ubyte_b;
(* *)
reg [15:0] res_manul;

always @ ( posedge clk ) begin
if(rst)
res_manul else
res_manul end

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

审核编辑:符乾江

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

    关注

    1655

    文章

    22282

    浏览量

    630071
  • 乘法器
    +关注

    关注

    9

    文章

    221

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    定点数表示实数的方法以及定点数在硬件上的运算验证

    实现,不建议使用除法,通常除法运算较慢,将严重影响时序。 FPGA定点数乘法运算 高版本的综合工具已经支持有符号整数运算的综合,我
    发表于 10-28 08:13

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

    E203V2乘法器所在模块为e203_exu_alu_muldiv.v,其中包含乘法和除法两大块,这里仅对乘法模块进行解读。 乘法模块首先进行booth编码,其目的为方便两个
    发表于 10-24 09:33

    通过内联汇编调用乘法指令mulh\\mulhsu\\mulhu

    高32位 mulhsurd, rs1,rs2 将rs1当作符号数,rs2当作无符号数相乘,取高32位 2.由于C语言中的乘法符号
    发表于 10-24 06:52

    e203乘除法模块(e203_exu_alu_muldiv.v)的back2back和special case信号的含义

    alu加法器数据通路实现乘法,已知基4booth编码的32位符号数乘法会产生部分积一条乘法的计算需要消耗十七个周期。 除法则采用加减交替法
    发表于 10-24 06:37

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

    周期乘法器。乘法器,对于无符号乘法进行一位符号扩展后统一当作
    发表于 10-23 08:01

    对于指令集中back2back情况的简单介绍

    复杂,是因为积的长度是乘数和被乘数长度的和。将两个 32 位数相乘得到的是 64 位的乘积。为了正确地得到一个符号或无符号的 64 位积,RISC-V 带有四个
    发表于 10-23 06:52

    蜂鸟乘法器设计分享

    与其他指令复用一个加法器。 对于具体的乘法指令而言,包括MUL指令、MULH指令、MULHSU指令与MULHU指令,在四条乘法指令之中,仅有MUL指令是将乘法结果低32位写入寄存器
    发表于 10-22 08:21

    Booth编码的原理及选择

    Booth提出该算法的初衷是基于当时计算机的移位运算比加法运算要快这个硬件环境,其目的是通过移位运算代替部分加法运算来提高乘法运算速度。然而,Booth算法更大的优势在于,它对符号数
    发表于 10-22 07:53

    改进型乘法器结构设计

    表示源寄存器。4条乘法指令分别按符号扩展操作和结果高低位选取操作生成相应的控制信号,MULHU指令乘法的两个操作数(被乘数和乘数)的符号扩展位都为0;MULHSU指令被乘数的
    发表于 10-22 07:51

    蜂鸟E203内核乘法器的优化

    符号位扩展,34bit的乘数经过booth4编码后会生成17个部分积,因此一条乘法指令需要17个周期执行完成(不考虑back-to-back情况),最后根据指令输出32bit的结果。 我们将源码迭代
    发表于 10-22 06:11

    RISC-V M扩展介绍

    。 3.硬件乘法器将两个操作数进行乘法运算,并将结果存放到指定的寄存器。 4.如果乘法结果超出了寄存器的位数,需要进行截断以适应寄存器的大小。 需要注意的是,RISC-V
    发表于 10-21 06:50

    Verilogsigned和$signed()的用法

    吗?其实不是的,因为符号数和无符号数据的加法强结果和乘法器结构是一样的,signed的真正作用是决定如何对操作数扩位的问题。 2、verilog
    的头像 发表于 02-17 17:47 1184次阅读
    Verilog<b class='flag-5'>中</b>signed和$signed()的用法

    请问AFE5801 AD转换后数字信号是用符号数还是无符号数表示的?

    请问AFE5801 AD转换后数字信号是用符号数还是无符号数表示的啊?
    发表于 02-11 07:18

    ADS8688分别设置0 to 1.25 × VREF和±1.25 × VREF采样范围时,得到的16位数据是按照符号数还是无符号数进行转换?

    请问ADS8688 在分别设置 0 to 1.25 × VREF 和±1.25 × VREF采样范围时,得到的16位数据是按照符号数还是无符号数进行转换?两者一样吗?
    发表于 12-20 08:03