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

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

3天内不再提示

如何利用xilinx器件中LUT的结构特征设计乘法器呢?

FPGA之家 来源:AI加速 2024-01-19 09:14 次阅读

卷积占据了CNN网络中绝大部分运算,进行乘法运算通常都是使用FPGA中的DSP,这样算力就受到了器件中DSP资源的限制。比如在zynq7000器件中,DSP资源就较少,神经网络的性能就无法得到提升。利用xilinx器件中LUT的结构特征,设计出的乘法器不但能灵活适应数据位宽,而且能最大限度降低LUT资源使用。

01

Xilinx ultrascale器件LUT结构

在这里简要介绍一下ultrascale系列器件中的LUT结构,有助于后边对乘法器设计思路的理解。CLB(configuratble logic block)是主要的资源模块,其包含了8个LUT,16个寄存器,carry逻辑,以及多路选通器等。其中LUT可以用作6输入1输出,或者两个5输入LUT,但是这两个LUT公用输入,具有不同输出。每个LUT输出可以连接到寄存器或者锁存器,或者从CLB输出。LUT可以用于64x1和32X2的分布式RAM,一个CLB内最大可以支持512X1大小的RAM。RAM的读写地址和输入的读写数据是共享的,数据通道可以使用x和I接口。LUT还可以配置用于4:1选通器,CLB最大能够支持到32:1的选通器。CLB中的carry逻辑含有异或门和产生进位的门,用于生成进位数据。

8aaad320-b65d-11ee-8b88-92fbcf53809c.png

图1.1 LUT结构

LUT还可以被动态配置成32bit移位寄存器,这个功能在乘法器设计中可以用于改变乘法器的乘数和被乘数。在写入LUT数据的时候,每个时钟周期从D接口进入数据,依次写入32bit数据。读数据的时候,可以通过地址来定位任何32bit中的数据。这样就可以配置成任何小于32bit的移位寄存器。移位输出Q31可以进入下一级LUT用于串联产生更大移位寄存器。在一个CLB中最大可以串联产生256bit移位寄存器。

8ab02f1e-b65d-11ee-8b88-92fbcf53809c.jpg

图1.2 移位寄存器配置

02

LUT乘法器原理

首先假设我们处理整数乘法,小数乘法也可以用这样的方法。基本思想就是将m bit大小的数据进行分割表示:

8ab5877a-b65d-11ee-8b88-92fbcf53809c.png

其中0<=di<2^q。乘以一个常数K:

8abd2a70-b65d-11ee-8b88-92fbcf53809c.png

这样就将两个数据乘法分解成低bit数据乘法,结果是一个常数K和di相乘,然后再进行移位求和。M bit数据分解后的低bit数据位宽通常都适配LUT输入宽度,这样能最大利用LUT资源。现在乘法只有K*di,由于bit位宽较小,这部分可以用LUT查找表的形式来。预先将0K到(2^q-1)K的数据存储到LUT中,然后通过di来选择对应的数据。如果是负数乘法,那么数据使用补码表示,那么LUT中存储的数据是从-2^(q-1)K到(2^(q-1)-1)K。针对以上介绍的ultrascale器件的LUT6,q可以选择为5。但是在本论文中使用的是LUT4器件,其只有4输入,因此选择了q=3,为什么没有选择4呢?另外1bit是为了用于半加器的实现。

03

基本结构

实现上述累加的方法有很多种,论文中采用了进位链加法器。图2.1中是m bit和n bit数据乘法,每个E结构计算di*K,并且和上一个结构求和,输出的低3bit直接作为最终结果,而n bit传输到下一级进行计算。q=3的计算单元E有[m/3]个。K*di是有n+3bit的查找表实现的。查找表的结果由di选择,然后再通过一个求和器和之前数据求和。这是一个最基本的结构,论文又针对这个结构做了优化,用一个LUT同时实现了一个查找表和半加器。具体来讲,其中3bit输入用于di,还有1bit用于上一次输出,LUT中存放数据是di*K和上一次结果第j bit的半加结果,实际上是第j bit数据LUT中结果的异或。而进位数据由CLB中相应的carry逻辑来计算。相比于粗暴的进行数据求和,这样精确的来控制LUT能够大大节省资源。

8ac43b1c-b65d-11ee-8b88-92fbcf53809c.jpg

图2.1 基本结构

8acc67f6-b65d-11ee-8b88-92fbcf53809c.jpg

图2.2 LUT实现乘法和半加,外围carry逻辑实现进位

04

动态配置LUT内容

Xilinx的LUT结构允许在运行过程中改变LUT中的内容,这样的乘法器就能改变被乘数据K。这可以实现在神经网络计算中需要更新权重参数。论文中使用的是LUT4,所以一个LUT可以被配置成16bit移位寄存器。通过这16bit寄存器可以来配置LUT中的内容,每个时钟周期更新1bit数据,16个时钟周期可以完成一个LUT中数据更新。是否进行LUT内容更新通过CE使能信号控制。

如何产生LUT中数据的值呢?如果上一次输出数据对应bit为0,那么LUT中就存放0*K到7*K的值,如果上一次对应bit为1,那么存放值为对以上数据取反。图4.1表示了获得LUT中内容的电路图。首先数据被初始化为0*K,下一次对应着求和进位为1的情况,取反,然后再加K得到1*K的值,这样每隔两个时钟周期就得到下一个乘法的数据值,依次对LUT进行更新。上述中针对的是正整数,如果对于负数乘法更新,可以在上述求整数乘法的电路基础上做一下改进,如图4.2。当最高位为0的时候,输出结果就是之前求得的乘法结果。如果最高位是1,那么负数的补码表示是乘法的原码结果减去最高位数值。

8ad7aa80-b65d-11ee-8b88-92fbcf53809c.png

图4.1 LUT中内容更新电路图

8ae23e82-b65d-11ee-8b88-92fbcf53809c.jpg

图4.2 负数乘法结果更新电路

05

结果分析

最后我们来看看这种乘法器的实现效果,图5.1表示对多级进位不适用pipeline结构的时钟频率随着被乘数K位宽变化,可以看到随着级数E的增加,频率降低很多,这主要是进位链边长导致。而随着K位宽增加,频率也有降低,这主要是因为实现di*K乘法的LUT资源增加导致。

8ae9753a-b65d-11ee-8b88-92fbcf53809c.jpg

图5.1 没有pipeline下频率MHz

图5.2是不同乘法位宽下的使用slice数量。论文中考虑了两种极端情况,一种是完全pipeline下,即每级计算单元都经过寄存器,另外一种是完全没有pipeline,所有级E都是串联。

8af1322a-b65d-11ee-8b88-92fbcf53809c.jpg

图5.2 slice资源

结论

上述通过LUT来设计乘法器的方法,可以应用于CNN中的卷积运算当中,因为权重可以被当做被乘数,用于LUT内容的配置,在更换权重时,可以对LUT内容更新,这样就能避免了DSP资源的限制,不失为一种增加算力的方法。







审核编辑:刘清

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

    关注

    544

    文章

    7682

    浏览量

    344364
  • 移位寄存器
    +关注

    关注

    2

    文章

    181

    浏览量

    22018
  • 锁存器
    +关注

    关注

    8

    文章

    744

    浏览量

    41037
  • 乘法器
    +关注

    关注

    8

    文章

    192

    浏览量

    36585
  • LUT
    LUT
    +关注

    关注

    0

    文章

    49

    浏览量

    12396

原文标题:用LUT来搭建乘法器

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    应用于CNN中卷积运算的LUT乘法器设计

    利用xilinx器件LUT结构特征,设计出的乘法器
    的头像 发表于 11-30 11:45 2427次阅读
    应用于CNN中卷积运算的<b class='flag-5'>LUT</b><b class='flag-5'>乘法器</b>设计

    乘法器和混频器的区别

    乘法器和混频器的区别  表面上看,都是做“乘法”了,其实区别很大。     乘法器,一般叫模拟乘法器,是用于
    发表于 11-13 16:37

    FPGA乘法器设计

    刚接触学习FPGA,懂得verilog HDL的基础语法,有一块带XILINX的ZYNQ xc7z020的开发板,开发软件用的是vivado;现在要设计一个16位的乘法器,功能已经实现。但需要考查
    发表于 02-25 16:03

    如何分析传统乘法器和vedic乘法器的时序延迟?

    我正在研究一种适用于Vedic Maths算法的乘法器。我想对传统乘法器和vedic乘法器的时序延迟进行比较分析。我有spartan 3e和Xilinx 12.1时序分析器。请任何人都
    发表于 07-04 06:36

    怎么设计基于FPGA的WALLACETREE乘法器

    在数字信号处理乘法器是整个硬件电路时序的关键路径。速度和面积的优化是乘法器设计过程的两个主要考虑因素。由于现代可编程逻辑芯片FPGA的集成度越来越高,及其相对于ASIC设计难度较低和产品设计
    发表于 09-03 07:16

    乘法器的基本概念

    乘法器的基本概念 乘法器是一种完成两个互不相关的模拟信号相乘作用的电子器件。理想乘法器的输出特性方程可由下式表示: UO
    发表于 05-18 14:03 1.4w次阅读
    <b class='flag-5'>乘法器</b>的基本概念

    1/4平方乘法器

    1/4平方乘法器 这种乘法器是根据数学关系设计而成的,因此称为1/4平方乘法电路,或称1/4平方乘法器。其
    发表于 05-18 14:08 1815次阅读
    1/4平方<b class='flag-5'>乘法器</b>

    变跨导乘法器的基本原理

    变跨导乘法器的基本原理 图5.4-25为变跨导乘法器原理图。它利用V1、V2管的跨导GM正比于恒流源电流IO,而IO又受另一个输入电压控制,而实
    发表于 05-18 14:48 2975次阅读
    变跨导<b class='flag-5'>乘法器</b>的基本原理

    N象限变跨导乘法器

    N象限变跨导乘法器 为了克服图5.4-25所示的乘法器的缺点,在基电路的基础上,采用了双重差分放大式结构,设计出如图5.4-27所示的N象限变跨导乘法器
    发表于 05-18 15:24 1578次阅读
    N象限变跨导<b class='flag-5'>乘法器</b>

    变跨导乘法器

    变跨导乘法器 这种乘法器现在已经成为一种工业上的标准方法,是应用极为广泛的优质乘法器
    发表于 05-18 16:00 1115次阅读

    基于IP核的乘法器设计

    实验目的 1、熟悉Xilinx的ISE 软件的使用和设计流程; 2、掌握Modelsim仿真软件的使用方法; 3、用乘法运算符实现一个16*16 乘法器模块; 4、用IP核实现一个16*16
    发表于 05-20 17:00 66次下载
    基于IP核的<b class='flag-5'>乘法器</b>设计

    一种高速流水线乘法器结构

    设计了一种新颖的3232位高速流水线乘法器结构.该结构所采用的新型Radix-16 Booth算法吸取了冗余Booth编码与改进Booth编码的优点,能简单、快速地产生复杂倍数.设计完成的乘法
    发表于 03-15 13:34 6次下载
    一种高速流水线<b class='flag-5'>乘法器</b><b class='flag-5'>结构</b>

    硬件乘法器是什么?

    硬件乘法器是现代计算机中必不可少的一部分,其基础是加法器结构
    的头像 发表于 05-11 10:52 8572次阅读

    使用verilogHDL实现乘法器

    本文在设计实现乘法器时,采用了4-2和5-2混合压缩器对部分积进行压缩,减少了乘法器的延时和资源占 用率;经XilinxISE和QuartusII两种集成开发环境下的综合仿真测试
    发表于 12-19 13:30 1.1w次阅读
    使用verilogHDL实现<b class='flag-5'>乘法器</b>

    乘法器原理_乘法器的作用

    乘法器(multiplier)是一种完成两个互不相关的模拟信号相乘作用的电子器件。它可以将两个二进制数相乘,它是由更基本的加法器组成的。乘法器可以通过使用一系列计算机算数技术来实现。
    发表于 02-18 15:08 2.5w次阅读
    <b class='flag-5'>乘法器</b>原理_<b class='flag-5'>乘法器</b>的作用