CN111142840B - 基于fpga的数据计算方法和装置 - Google Patents

基于fpga的数据计算方法和装置 Download PDF

Info

Publication number
CN111142840B
CN111142840B CN201911377108.1A CN201911377108A CN111142840B CN 111142840 B CN111142840 B CN 111142840B CN 201911377108 A CN201911377108 A CN 201911377108A CN 111142840 B CN111142840 B CN 111142840B
Authority
CN
China
Prior art keywords
data
order part
input
low
output data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911377108.1A
Other languages
English (en)
Other versions
CN111142840A (zh
Inventor
焦黎
李远超
蔡权雄
牛昕宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Corerain Technologies Co Ltd
Original Assignee
Shenzhen Corerain Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Corerain Technologies Co Ltd filed Critical Shenzhen Corerain Technologies Co Ltd
Priority to CN201911377108.1A priority Critical patent/CN111142840B/zh
Publication of CN111142840A publication Critical patent/CN111142840A/zh
Application granted granted Critical
Publication of CN111142840B publication Critical patent/CN111142840B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明实施例公开了一种基于FPGA的数据计算方法和装置,所述方法包括:根据第一预设规则,将第一输入数据、第二输入数据、第三输入数据和第四输入数据分别拆分为高位部和低位部;根据第二预设规则,将第一输入数据、第二输入数据、第三输入数据和第四输入数据的低位部输入第一计算模块进行计算,得到第一输出数据;根据第三预设规则,对第一输入数据、第二输入数据、第三输入数据和第四输入数据分别拆分的高位部和低位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据;根据第四预设规则得到最终输出数据。本发明实施例实现了P=A*B+C*D的计算,提高了IntelFPGA芯片中DSP计算模块在计算8bit乘加运算时的资源利用率。

Description

基于FPGA的数据计算方法和装置
技术领域
本发明实施例涉及Intel FPGA的应用领域,尤其涉及一种基于FPGA的数据计算方法和装置。
背景技术
现场可编程门阵列(Field-Programmable Gate Array,FPGA)是一种半定制电路,FPGA芯片的设计周期短,开发费用低,小批量系统,是提高系统集成度和可靠性的最佳选择之一。
乘加运算在Intel FPGA上的实现有两种方式,第一种是直接使用查找表(Look-Up-Table,LUT)模块实现乘法器和加法器,第二种是调用FPGA上的数字信号处理(DigitalSignal Processing,DSP)模块实现乘法器和加法器。第一种方式适用于数据量小且简单的乘加运算。使用第二种方式时,由于Intel FPGA上的DSP的位宽固定为18bit*19bit,在设计中只需要实现一个8bit*8bit的运算的情况下,一个DSP仅能实现一个8bit*8bit的运算,这种方法对DSP计算能力的利用率极低,造成了很大的资源浪费,同时会限制设计中能够实现的乘加运算数量。
因此,如何充分利用FPGA的LUT模块和DSP模块的资源来达到较高的性能是设计时面临的一个重大问题。
发明内容
有鉴于此,本发明实施例提供一种基于FPGA的数据计算方法和装置,以采用IntelFPGA的18bit*19bitDSP实现高利用率的8bit乘加运算。
第一方面,本发明实施例提供一种基于FPGA的数据计算方法,包括:
获取第一输入数据、第二输入数据、第三输入数据和第四输入数据;
根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部;
根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据;
根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据;
根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据。
进一步的,所述第一输入数据、所述第二输入数据、所述第三输入数据和所述第四输入数据都为8位二进制数据。
进一步的,所述根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部包括:
将所述第一输入数据的低6位设为所述第一数据低位部,将所述第一输入数据的高2位设为所述第一数据高位部;
将所述第二输入数据的低6位设为所述第二数据低位部,将所述第二输入数据的高2位设为所述第二数据高位部;
将所述第三输入数据的低6位设为所述第三数据低位部,将所述第三输入数据的高2位设为所述第三数据高位部;
将所述第四输入数据的低6位设为所述第四数据低位部,将所述第四输入数据的高2位设为所述第四数据高位部。
进一步的,所述第一计算模块包括第一数据输入口和第二数据输入口。
进一步的,所述根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据包括:
将所述第一数据低位部输入所述第一计算模块的所述第一数据输入口的第一部分;
将所述第三数据低位部输入所述第一计算模块的所述第一数据输入口的第二部分;
将所述第四数据低位部输入所述第一计算模块的所述第二数据输入口的第一部分;
将所述第二数据低位部输入所述第一计算模块的所述第二数据输入口的第二部分;
所述第一计算模块根据所述第一数据输入口和所述第二数据输入口的输入数据进行计算,得到所述第一输出数据。
进一步的,所述根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据包括:
将所述第一数据高位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第一部分;
将所述第一数据高位部和所述第二数据低位部输入第二计算模块进行计算,得到第二输出数据第二部分;
将所述第一数据低位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第三部分;
将所述第三数据高位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第四部分;
将所述第三数据低位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第五部分;
将所述第三数据高位部和所述第四数据低位部输入第二计算模块进行计算,得到第二输出数据第六部分;
根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据。
进一步的,所述第一计算模块为基于FPGA的DSP计算模块,所述第二计算模块为基于FPGA的LUT计算模块。
第二方面,本方面实施例提供一种基于FPGA的数据计算装置,包括:
输入数据获取模块,用于获取第一输入数据、第二输入数据、第三输入数据和第四输入数据;
数据划分模块,用于根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部;
第一输出数据获取模块,用于根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据;
第二输出数据获取模块,用于根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据;
最终输出数据获取模块,用于根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据。
进一步的,所述第一输入数据、所述第二输入数据、所述第三输入数据和所述第四输入数据都为8位二进制数据。
进一步的,所述数据划分模块用于:
将所述第一输入数据的低6位设为所述第一数据低位部,将所述第一输入数据的高2位设为所述第一数据高位部;
将所述第二输入数据的低6位设为所述第二数据低位部,将所述第二输入数据的高2位设为所述第二数据高位部;
将所述第三输入数据的低6位设为所述第三数据低位部,将所述第三输入数据的高2位设为所述第三数据高位部;
将所述第四输入数据的低6位设为所述第四数据低位部,将所述第四输入数据的高2位设为所述第四数据高位部。
本发明实施例提供的一种基于FGPA的数据计算方法,通过将4个输入数据分别拆分为高位部和低位部,将4个输入数据低位部的计算输入到第一计算模块进行计算,其余部分的计算通过第二计算模块进行计算,实现了通过一个DSP计算模块完成4个8bit数据的计算,即实现了P=A*B+C*D的计算,提高了Intel FPGA芯片中DSP计算模块在计算8bit乘加运算时的资源利用率。
附图说明
图1为本发明实施例一提供的一种基于FPGA的数据计算方法的流程示意图;
图2为本发明实施例二提供的一种基于FPGA的数据计算方法的流程示意图;
图3为本发明实施例二中的第四预设规则的示意图;
图4为本发明实施例二中使用第四预设规则计算的示意图;
图5为本发明实施例三提供的一种基于FPGA的数据计算装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时处理可以被终止,但是还可以具有未包括在附图中的附加步骤。处理可以对应于方法、函数、规程、子例程、子程序等等。
此外,术语“第一”、“第二”等可在本文中用于描述各种方向、动作、步骤或元件等,但这些方向、动作、步骤或元件不受这些术语限制。这些术语仅用于将第一个方向、动作、步骤或元件与另一个方向、动作、步骤或元件区分。举例来说,在不脱离本申请的范围的情况下,可以将第一预设规则称为第二预设规则,且类似地,可将第二预设规则称为第一预设规则。第一预设规则和第二预设规则两者都是预设规则,但其不是同一预设规则。术语“第一”、“第二”等而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
实施例一
图1为本发明实施例一提供的一种基于FPGA的数据计算方法的流程示意图,可适用于通过Intel FPGA的18bit*19bitDSP实现4个8bit数据的乘加运算。该方法可以由基于FPGA的数据计算装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成在硬件设备上,例如芯片。
如图1所示,本发明实施例一提供的一种基于FPGA的数据计算方法包括:
S110、获取第一输入数据、第二输入数据、第三输入数据和第四输入数据。
具体的,Intel FPGA芯片上的DSP的固定位宽为18bit*19bit(二进制),即,一个DSP包括两个输入口,第一数据输入口输入第一输入数据A为18bit,第二数据输入口输入第二输入数据B为19bit,输出的结果P为36bit,计算方式为P=A*B,即实现两个数据的乘加运算。在实际设计中,经常涉及8bit的乘加运算,若直接使用DSP进行计算,则第一数据输入口和第二数据输入口均只用到8bit,造成很大的资源浪费。
本实施例获取第一输入数据A、第二输入数据B、第三输入数据C和第四输入数据D,其中,第一输入数据A、第二输入数据B、第三输入数据C和第四输入数据D均为8bit二进制数据,例如,第一输入数据A为10001001,第二输入数据B为11001010,第三输入数据C为01100001,第四输入数据D为10100010。
通过对输入数据进行拆分和组合,达到使用Intel FPGA固定位宽为18bit*19bit的DSP实现P=A*B+C*D的4个8bit数据的乘加运算。
S120、根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部。
具体的,在一个8bit二进制数据中,将排列靠前(或靠左)的数称为高位部,将排列靠后(或靠右)的数据称为低位部,例如,对于一个8bit二进制数据00010010,可以将前4位(或排列靠左的4位)称为高位部或高4位,可以将后4位(或排列靠右的4位)称为低位部或低4位。
第一预设规则是将数据划分为高位部和低位部的规则。例如,预设规则为将8bit二进制数据划分为高2位和低6位。根据预设规则,将第一输入数据A划分为第一数据低位部A1和第一数据高位部A2,将第二输入数据B划分为第二数据低位部B1和第二数据高位部B2、第三输入数据C划分为第三数据低位部C1和第三数据高位部C2,第四输入数据D分别划分为第四输入数据高位部D1和第四输入数据低位部D2,后续可以将计算过程划分为计算各输入数据之间高位部和低位部的组合。
S130、根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据。
具体的,第一计算模块包括第一数据输入口和第二数据输入口,优选的,第一计算模块为Intel FPGA芯片中的DSP计算模块。第一数据低位部A1、第二数据低位部B1、第三数据低位部C1和第四数据低位部D1通过第二预设规则进行排列组合后,将4个数据组合成2个数据输入第一计算模块以进行计算,从而得到第一输出数据。例如,将第一数据低位部A1和第三数据低位部C1组合为一个数据A1C1,输入DSP计算模块的第一数据输入口;将第四数据低位部D1和第二数据低位部B1组合为一个数据D1B1,输入DSP计算模块的第二数据输入口。DSP计算模块通过计算后得到第一输出数据P1=A1*B1+C1*D1。
S140、根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据。
具体的,第三预设规则为分组规则,将第一数据低位部A1、第一数据高位部A2、第二数据低位部B1、第二数据高位部B2、第三数据低位部C1、第三数据高位部C2、第四数据低位部D1和第四数据高位部D2进行分组,由于步骤S130已经对第一数据低位部A1、第二数据低位部B1、第三数据低位部C1和第四数据低位部D1进行了计算,因此,本步骤中的分组不包含全部是低位部的组合,应至少包含一个数据的高位部。
优先的,第二计算模块为Intel FPGA芯片中的LUT计算模块,本步骤包括:
将第一数据高位部A2和第二数据高位部B2分为一组,输入LUT计算模块得到第二输出数据第一部分A2*B2;
将第一数据高位部A2和第二数据低位部B1分为一组,输入LUT计算模块得到第二输出数据第二部分A2*B1;
将第一数据低位部A1和第二数据高位部B2分为一组,输入LUT计算模块得到第二输出数据第三部分A1*B2;
将第三数据高位部C2和第四数据高位部D2分为一组,输入LUT计算模块得到第二输出数据第四部分C2*D2;
将第三数据低位部C1和第四数据高位部D2分为一组,输入LUT计算模块得到第二输出数据第五部分C1*D2;
将第三数据高位部C2和第四数据低位部D1分为一组,输入LUT计算模块得到第二输出数据第六部分C2*D1;
第二输出数据第一部分A2*B2、第二输出数据第二部分A2*B1、第二输出数据第三部分A1*B2、第二输出数据第四部分C2*D2、第二输出数据第五部分C1*D2和第二输出数据第六部分C2*D1形成第二输出数据。
S150、根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据。
具体的,由于对第一输入数据A、第二输入数据B、第三输入数据C和第四输入数据D进行拆分,最终输出数据应该由步骤S130得到的第一输出数据和步骤S140得到的第二输出数据按照特定的规则相加得到。若最终输出数据为P,则P=A*B+C*D。
本发明实施例一通过将4个输入数据分别拆分为高位部和低位部,将4个输入数据低位部的计算输入到第一计算模块进行计算,其余部分的计算通过第二计算模块进行计算,实现了通过一个DSP计算模块完成4个8bit数据的计算,即实现了P=A*B+C*D的计算,提高了Intel FPGA芯片中DSP计算模块在计算8bit乘加运算时的资源利用率。
实施例二
图2为本发明实施例二提供的一种基于FPGA的数据计算方法的流程示意图,本实施例是对上述实施例的进一步细化。如图2所示,本发明实施例二提供的一种基于FPGA的数据计算方法包括:
S210、获取第一输入数据、第二输入数据、第三输入数据和第四输入数据,其中,所述第一输入数据、所述第二输入数据、所述第三输入数据和所述第四输入数据都为8位二进制数据。
具体的,获取第一输入数据A、第二输入数据B、第三输入数据C和第四输入数据D,其中,第一输入数据A、第二输入数据B、第三输入数据C和第四输入数据D均为8bit二进制数据,例如,第一输入数据A为10001001,第二输入数据B为11001010,第三输入数据C为01100001,第四输入数据D为10100010。
通过对输入数据进行拆分和组合,达到使用Intel FPGA固定位宽为18bit*19bit的DSP实现P=A*B+C*D的4个8bit数据的乘加运算。
S220、将所述第一输入数据的低6位设为所述第一数据低位部,将所述第一输入数据的高2位设为所述第一数据高位部;将所述第二输入数据的低6位设为所述第二数据低位部,将所述第二输入数据的高2位设为所述第二数据高位部;将所述第三输入数据的低6位设为所述第三数据低位部,将所述第三输入数据的高2位设为所述第三数据高位部;将所述第四输入数据的低6位设为所述第四数据低位部,将所述第四输入数据的高2位设为所述第四数据高位部。
示例性的,第一输入数据A为10001001,第二输入数据B为11001010,第三输入数据C为01100001,第四输入数据D为10100010,则第一输入数据A的低位部A1为001001、高位部A2为10,第二输入数据B的低位部B1为001010、高位部B2为11,第三输入数据C的低位部C1为100001、高位部C2为01,第四输入数据D的低位部D1为100010、高位部C2为10。
S230、第一计算模块包括第一数据输入口和第二数据输入口,将所述第一数据低位部输入所述第一计算模块的所述第一数据输入口的第一部分;将所述第三数据低位部输入所述第一计算模块的所述第一数据输入口的第二部分;将所述第四数据低位部输入所述第一计算模块的所述第二数据输入口的第一部分;将所述第二数据低位部输入所述第一计算模块的所述第二数据输入口的第二部分;所述第一计算模块根据所述第一数据输入口和所述第二数据输入口的输入数据进行计算,得到所述第一输出数据。
具体的,DSP计算模块包括两个数据输入口,第一数据输入口为18位,第二数据输入口为19位,实际输出为36位。将第一数据输入口的18位均等分为3个6位大小的部分,分别称为第一输入口高6位、第一输入口中6位和第一输入口低6位。第二数据输入口的19位的最高位为符号位,将第二数据输入口去除符号位剩下的18位均等分为3个6位大小的部分,分别称为第二输入口高6位、第二输入口中6位和第二输入口低6位。实际计算中,第一输入口中6位和第二输入口中6位均设为0,第一输入口高6位称为第一输入口的第一部分,第一输入口低6位称为第一输入口的第二部分,第二输入口高6位称为第二输入口的第一部分,第二输入口低6位称为第二输入口的第二部分,DSP计算模块实现的是6bit*6bit+6bit*6bit的乘加运算。
将第一输入数据A的低位部A1(001001)输入第一输入口高6位,将第三输入数据C的低位部C1(100001)输入第一输入口低6位,将第四输入数据D的低位部D1(100010)输入第二输入口高6位,将第二输入数据B的低位部B1(001010)输入第二输入口低6位。由此可得,DSP计算模块的第一数据输入口的数据为A1 0C1(001001 000000 100001),DSP计算模块的第二数据输入口的数据为D1 0B1(100010 000000 001010)。(为了清晰表示,数据中间用空格隔开)
DSP计算模块根据第一数据输入口和第二数据输入口的数据进行计算,得到第一输出结果。设DSP计算模块的输出结果为S1,则S1=(A1 0C1)*(D10B1)=(001001 000000100001)*(100010 000000 001010)=000100110010010010111100 000101001010,由于第一数据输入口和第二数据输入口的中6位都是0,所以DSP计算模块的输出结果为S1的中间12位才是实际需要的第一输出结果P1,P1=A1*B1+C1*D1=010010111100。此外,可以通过输出结果S1的高12位的最低位来判断6bit*6bit+6bit*6bit的乘加运算是否产生进位。
S240、将所述第一数据高位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第一部分;将所述第一数据高位部和所述第二数据低位部输入第二计算模块进行计算,得到第二输出数据第二部分;将所述第一数据低位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第三部分;将所述第三数据高位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第四部分;将所述第三数据低位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第五部分;将所述第三数据高位部和所述第四数据低位部输入第二计算模块进行计算,得到第二输出数据第六部分;根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据,其中,所述第二计算模块为LUT计算模块。
具体的,Intel FPGA的LUT计算模块使用的是查找表计算,即一组输入数据对应一组输出数据,其中,输入数据和输出数据都是预先设计好的,当实际输入数据与预先设置的输入数据相同时,则输出与预先设置的输入数据对应的输出数据作为结果,这种计算方式计算范围较小,但是计算速度较快。本步骤主要包括2bit*6bit的计算和2bit*2bit的计算,计算简单,采用LUT计算模块能够加快计算速度。
将第一数据高位部A2(10)和第二数据高位部B2(11)输入LUT计算模块进行计算,得到第二输出数据第一部分Y1=A2*B2=(10)*(11)=0110;
将第一数据高位部A2(10)和第二数据低位部B1(001010)输入LUT计算模块进行计算,得到第二输出数据第二部分Y2=A2*B1=(10)*(001010)=00010100;
将第一数据低位部A1(001001)和第二数据高位部B2(11)输入LUT计算模块进行计算,得到第二输出数据第三部分Y3=A1*B2=(001001)*(11)=00011011;
将第三数据高位部C2(01)和第四数据高位部D2(10)输入LUT计算模块进行计算,得到第二输出数据第四部分Y4=C2*D2=(01)*(10)=0010;
将第三数据低位部C1(100001)和第四数据高位部D2(10)输入LUT计算模块进行计算,得到第二输出数据第五部分Y5=C1*D2=(100001)*(10)=01000010;
将第三数据高位部C2(01)和第四数据低位部D1(100010)输入LUT计算模块进行计算,得到第二输出数据第六部分Y6=C2*D1=(01)*(100010)=00100010。
高位部与高位部相乘为2bit*2bit计算,输出结果为4位,高位部与低位部相乘为2bit*6bit计算,输出结果为8位。
将所有2bit*6bit计算的输出结果相加得到第二输出数据的第一模块P2=Y2+Y3+Y5+Y6=00010100+00011011+01000010+00100010=10010011,将所有2bit*2bit计算的输出结果相加得到第二输出数据的第二模块P3=Y1+Y4=0110+0010=1000。即,第二输出数据包括第二输出数据的第一模块和第二输出数据的第二模块。
S250、根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据。
具体的,由于对输入数据进行了拆分,那么由拆分后的各小部分输入数据计算得到的各小部分输出数据也要通过一定的规则相加才能得到最终输出数据。第一输出数据和第二输出数据的相加规则如图3所示。如图4所示,将本实施例计算所得P1、P2、P3的具体数值按照图3所示规则相加,得到最终输出结果P=1010100101111100。
本发明实施例二通过将4个8bit输入数据分别拆分为高2位和低6位,将低6位*低6位的计算输入到DSP计算模块进行计算,提高Intel FPGA芯片中DSP计算模块在计算8bit乘加运算时的资源利用率,将高2位*高2位和高2位*低6位的计算输入到LUT计算模块进行计算,提高计算速度,本实施例实现了通过一个DSP计算模块完成4个8bit数据的计算,即实现了P=A*B+C*D的计算。
实施例三
图5为本发明实施例三提供的一种基于FPGA的数据计算装置的结构示意图,可适用于通过Intel FPGA的18bit*19bitDSP实现4个8bit数据的乘加运算。该装置可以采用软件和/或硬件的方式实现,并可集成在硬件设备上,例如芯片。本发明实施例三所提供的基于FPGA的数据计算装置可执行本发明任意实施例所提供的基于FPGA的数据计算方法,具备执行方法相应的功能模块和有益效果。本发明实施例三中未详尽描述的内容可以参考本发明任意方法实施例中的描述。
如图5所示,本发明实施例三提供的基于FPGA的数据计算装置500包括:输入数据获取模块510、数据划分模块520、第一输出数据获取模块530、第二输出数据获取模块540和最终输出数据获取模块550。
输入数据获取模块510用于获取第一输入数据、第二输入数据、第三输入数据和第四输入数据;
数据划分模块520用于根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部;
第一输出数据获取模块530用于根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据;
第二输出数据获取模块540用于根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据;
最终输出数据获取模块550用于根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据。
进一步的,所述第一输入数据、所述第二输入数据、所述第三输入数据和所述第四输入数据都为8位二进制数据。
进一步的,所述数据划分模块520具体用于:
将所述第一输入数据的低6位设为所述第一数据低位部,将所述第一输入数据的高2位设为所述第一数据高位部;
将所述第二输入数据的低6位设为所述第二数据低位部,将所述第二输入数据的高2位设为所述第二数据高位部;
将所述第三输入数据的低6位设为所述第三数据低位部,将所述第三输入数据的高2位设为所述第三数据高位部;
将所述第四输入数据的低6位设为所述第四数据低位部,将所述第四输入数据的高2位设为所述第四数据高位部。
进一步的,所述第一计算模块包括第一数据输入口和第二数据输入口。
进一步的,第一输出数据获取模块530具体用于:
将所述第一数据低位部输入所述第一计算模块的所述第一数据输入口的第一部分;
将所述第三数据低位部输入所述第一计算模块的所述第一数据输入口的第二部分;
将所述第四数据低位部输入所述第一计算模块的所述第二数据输入口的第一部分;
将所述第二数据低位部输入所述第一计算模块的所述第二数据输入口的第二部分;
所述第一计算模块根据所述第一数据输入口和所述第二数据输入口的输入数据进行计算,得到所述第一输出数据。
进一步的,第二输出数据获取模块540具体用于:
将所述第一数据高位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第一部分;
将所述第一数据高位部和所述第二数据低位部输入第二计算模块进行计算,得到第二输出数据第二部分;
将所述第一数据低位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第三部分;
将所述第三数据高位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第四部分;
将所述第三数据低位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第五部分;
将所述第三数据高位部和所述第四数据低位部输入第二计算模块进行计算,得到第二输出数据第六部分;
根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据。
进一步的,所述第一计算模块为基于FPGA的DSP计算模块,所述第二计算模块为基于FPGA的LUT计算模块。
本发明实施例三通过输入数据获取模块、数据划分模块、第一输出数据获取模块、第二输出数据获取模块和最终输出数据获取模块,将4个输入数据分别拆分为高位部和低位部,将4个输入数据低位部的计算输入到第一计算模块进行计算,其余部分的计算通过第二计算模块进行计算,实现了通过一个DSP计算模块完成4个8bit数据的计算,即实现了P=A*B+C*D的计算,提高了Intel FPGA芯片中DSP计算模块在计算8bit乘加运算时的资源利用率。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (3)

1.一种基于FPGA的数据计算方法,其特征在于,包括:
获取第一输入数据、第二输入数据、第三输入数据和第四输入数据;
根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部;
根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据;
根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据;
根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据;
其中,所述第二输出数据包括第二输出数据的第一模块和第二输出数据的第二模块;
所述第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据,包括:
将所述第一输出数据、向左移动两位的所述第二输出数据的第一模块以及向左移动四位的所述第二输出数据的第二模块相加,得到最终输出数据;
所述第一输入数据、所述第二输入数据、所述第三输入数据和所述第四输入数据都为8位二进制数据;
所述根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部包括:
将所述第一输入数据的低6位设为所述第一数据低位部,将所述第一输入数据的高2位设为所述第一数据高位部;
将所述第二输入数据的低6位设为所述第二数据低位部,将所述第二输入数据的高2位设为所述第二数据高位部;
将所述第三输入数据的低6位设为所述第三数据低位部,将所述第三输入数据的高2位设为所述第三数据高位部;
将所述第四输入数据的低6位设为所述第四数据低位部,将所述第四输入数据的高2位设为所述第四数据高位部;
所述根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据包括:
将所述第一数据低位部输入所述第一计算模块的第一数据输入口的第一部分;
将所述第三数据低位部输入所述第一计算模块的所述第一数据输入口的第二部分;
将所述第四数据低位部输入所述第一计算模块的第二数据输入口的第一部分;
将所述第二数据低位部输入所述第一计算模块的所述第二数据输入口的第二部分;
所述第一计算模块根据所述第一数据输入口和所述第二数据输入口的输入数据进行计算,得到所述第一输出数据;
其中,所述第一数据输入口包括第一输入口高6位、第一输入口中6位和第一输入口低6位;所述第二数据输入口包括第二输入口高6位、第二输入口中6位和第二输入口低6位;所述第一输入口中6位和所述第二输入口中6位均设为0;所述第一输入口高6位为所述第一数据输入口的第一部分,所述第一输入口低6位为所述第一数据输入口的第二部分;所述第二输入口高6位为所述第二数据输入口的第一部分,所述第二输入口低6位为所述第二数据输入口的第二部分;
所述根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据包括:
将所述第一数据高位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第一部分;
将所述第一数据高位部和所述第二数据低位部输入第二计算模块进行计算,得到第二输出数据第二部分;
将所述第一数据低位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第三部分;
将所述第三数据高位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第四部分;
将所述第三数据低位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第五部分;
将所述第三数据高位部和所述第四数据低位部输入第二计算模块进行计算,得到第二输出数据第六部分;
根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据;
所述根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据,包括:
将所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第五部分和所述第二输出数据第六部分相加得到所述第二输出数据的第一模块,将所述第二输出数据第一部分和所述第二输出数据第四部分相加得到所述第二输出数据的第二模块;根据所述第二输出数据的第一模块和所述第二输出数据的第二模块形成第二输出数据。
2.如权利要求1任一项所述的方法,其特征在于,所述第一计算模块为基于FPGA的DSP计算模块,所述第二计算模块为基于FPGA的LUT计算模块。
3.一种基于FPGA的数据计算装置,其特征在于,包括:
输入数据获取模块,用于获取第一输入数据、第二输入数据、第三输入数据和第四输入数据;
数据划分模块,用于根据第一预设规则,将所述第一输入数据分为第一数据低位部和第一数据高位部,将所述第二输入数据分为第二数据低位部和第二数据高位部,将所述第三输入数据分为第三数据低位部和第三数据高位部,将所述第四输入数据分为第四数据低位部和第四数据高位部;
第一输出数据获取模块,用于根据第二预设规则,将所述第一数据低位部、所述第二数据低位部、所述第三数据低位部和所述第四数据低位部输入第一计算模块进行计算,得到第一输出数据;
第二输出数据获取模块,用于根据第三预设规则,对所述第一数据低位部、所述第一数据高位部、所述第二数据低位部、所述第二数据高位部、所述第三数据低位部、所述第三数据高位部、所述第四数据低位部和所述第四数据高位部进行分组,将分组后的数据输入第二计算模块进行计算,得到第二输出数据;
最终输出数据获取模块,用于根据第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据;
其中,所述第二输出数据包括第二输出数据的第一模块和第二输出数据的第二模块;
所述第四预设规则,将所述第一输出数据和所述第二输出数据相加,得到最终输出数据,包括:
将所述第一输出数据、向左移动两位的所述第二输出数据的第一模块以及向左移动四位的所述第二输出数据的第二模块相加,得到最终输出数据;
所述第一输入数据、所述第二输入数据、所述第三输入数据和所述第四输入数据都为8位二进制数据;
所述数据划分模块具体用于:
将所述第一输入数据的低6位设为所述第一数据低位部,将所述第一输入数据的高2位设为所述第一数据高位部;
将所述第二输入数据的低6位设为所述第二数据低位部,将所述第二输入数据的高2位设为所述第二数据高位部;
将所述第三输入数据的低6位设为所述第三数据低位部,将所述第三输入数据的高2位设为所述第三数据高位部;
将所述第四输入数据的低6位设为所述第四数据低位部,将所述第四输入数据的高2位设为所述第四数据高位部;
所述第一输出数据获取模块具体用于:
将所述第一数据低位部输入所述第一计算模块的第一数据输入口的第一部分;
将所述第三数据低位部输入所述第一计算模块的所述第一数据输入口的第二部分;
将所述第四数据低位部输入所述第一计算模块的第二数据输入口的第一部分;
将所述第二数据低位部输入所述第一计算模块的所述第二数据输入口的第二部分;
所述第一计算模块根据所述第一数据输入口和所述第二数据输入口的输入数据进行计算,得到所述第一输出数据;
其中,所述第一数据输入口包括第一输入口高6位、第一输入口中6位和第一输入口低6位;所述第二数据输入口包括第二输入口高6位、第二输入口中6位和第二输入口低6位;所述第一输入口中6位和所述第二输入口中6位均设为0;所述第一输入口高6位为所述第一数据输入口的第一部分,所述第一输入口低6位为所述第一数据输入口的第二部分;所述第二输入口高6位为所述第二数据输入口的第一部分,所述第二输入口低6位为所述第二数据输入口的第二部分;
所述第二输出数据获取模块具体用于:
将所述第一数据高位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第一部分;
将所述第一数据高位部和所述第二数据低位部输入第二计算模块进行计算,得到第二输出数据第二部分;
将所述第一数据低位部和所述第二数据高位部输入第二计算模块进行计算,得到第二输出数据第三部分;
将所述第三数据高位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第四部分;
将所述第三数据低位部和所述第四数据高位部输入第二计算模块进行计算,得到第二输出数据第五部分;
将所述第三数据高位部和所述第四数据低位部输入第二计算模块进行计算,得到第二输出数据第六部分;
根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据;
所述根据所述第二输出数据第一部分、所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第四部分、所述第二输出数据第五部分和所述第二输出数据第六部分形成所述第二输出数据,包括:
将所述第二输出数据第二部分、所述第二输出数据第三部分、所述第二输出数据第五部分和所述第二输出数据第六部分相加得到所述第二输出数据的第一模块,将所述第二输出数据第一部分和所述第二输出数据第四部分相加得到所述第二输出数据的第二模块;根据所述第二输出数据的第一模块和所述第二输出数据的第二模块形成第二输出数据。
CN201911377108.1A 2019-12-27 2019-12-27 基于fpga的数据计算方法和装置 Active CN111142840B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911377108.1A CN111142840B (zh) 2019-12-27 2019-12-27 基于fpga的数据计算方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911377108.1A CN111142840B (zh) 2019-12-27 2019-12-27 基于fpga的数据计算方法和装置

Publications (2)

Publication Number Publication Date
CN111142840A CN111142840A (zh) 2020-05-12
CN111142840B true CN111142840B (zh) 2023-06-09

Family

ID=70520977

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911377108.1A Active CN111142840B (zh) 2019-12-27 2019-12-27 基于fpga的数据计算方法和装置

Country Status (1)

Country Link
CN (1) CN111142840B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114118387A (zh) * 2022-01-25 2022-03-01 深圳鲲云信息科技有限公司 数据处理方法、数据处理装置及计算机可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104111816A (zh) * 2014-06-25 2014-10-22 中国人民解放军国防科学技术大学 Gpdsp中多功能simd结构浮点融合乘加运算装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6529040B1 (en) * 2000-05-05 2003-03-04 Xilinx, Inc. FPGA lookup table with speed read decoder
CN102566963A (zh) * 2010-12-21 2012-07-11 普天信息技术研究院有限公司 一种fpga进行数据处理的方法
US10831773B2 (en) * 2017-03-01 2020-11-10 Next Pathway Inc. Method and system for parallelization of ingestion of large data sets

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104111816A (zh) * 2014-06-25 2014-10-22 中国人民解放军国防科学技术大学 Gpdsp中多功能simd结构浮点融合乘加运算装置

Also Published As

Publication number Publication date
CN111142840A (zh) 2020-05-12

Similar Documents

Publication Publication Date Title
US7467176B2 (en) Saturation and rounding in multiply-accumulate blocks
CN115934030B (zh) 算数逻辑单元、浮点数乘法计算的方法及设备
US10037192B2 (en) Methods and apparatus for performing product series operations in multiplier accumulator blocks
US10073676B2 (en) Reduced floating-point precision arithmetic circuitry
US9098332B1 (en) Specialized processing block with fixed- and floating-point structures
US8364738B1 (en) Programmable logic device with specialized functional block
US10140091B2 (en) Integrated circuits with specialized processing blocks for performing floating-point fast fourier transforms and complex multiplication
CN111142840B (zh) 基于fpga的数据计算方法和装置
US5177703A (en) Division circuit using higher radices
US9787290B2 (en) Resource-saving circuit structures for deeply pipelined systolic finite impulse response filters
US9606608B1 (en) Low power optimizations for a floating point multiplier
CN109196465B (zh) 双精度浮点运算
US10037189B2 (en) Distributed double-precision floating-point multiplication
CN114844499A (zh) 使用现有加法器电路来增加fpga 4-lut的lut分裂度
EP4064036A1 (en) Floating-point number multiplication computation method and apparatus, and arithmetical logic unit
US9164728B1 (en) Ternary DSP block
Kant et al. Implementation and performance improvement of POSIT multiplier for advance DSP applications
US10305451B1 (en) Multiplier-based programmable filters
US8843541B1 (en) Circuit and method for multiplying a signed value by a constant
US7269617B1 (en) Hybrid multipliers implemented using DSP circuitry and programmable logic circuitry
CN107533456B (zh) 对数和指数指令的扩展使用
Shah et al. Design and Implementation of 32-bit Vedic Multiplier on FPGA
US9069624B1 (en) Systems and methods for DSP block enhancement
US20230214180A1 (en) Using and/or reduce carry chains on programmable hardware
CN111610955B (zh) 一种数据饱和加打包处理部件、芯片及设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant