CN116028013B - 一种fpga除法运算的优化方法、装置、除法器和介质 - Google Patents
一种fpga除法运算的优化方法、装置、除法器和介质 Download PDFInfo
- Publication number
- CN116028013B CN116028013B CN202310133144.3A CN202310133144A CN116028013B CN 116028013 B CN116028013 B CN 116028013B CN 202310133144 A CN202310133144 A CN 202310133144A CN 116028013 B CN116028013 B CN 116028013B
- Authority
- CN
- China
- Prior art keywords
- divisor
- value
- variable
- bit
- dividend
- 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
Links
Images
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
本申请涉及驱控一体的技术领域,尤其是涉及一种FPGA除法运算的优化方法、装置、除法器和介质,方法包括:基于除数和被除数,确定中间变量,在同一个时钟周期,基于高除数位宽的值和除数的值进行大小比较,确定比较结果对应的目标操作,并基于目标操作对中间变量进行数值处理,同时,确定下一次数值处理对应的周期数;若下一次数值处理对应的周期数小于被除数的位宽,将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期的操作,直至周期数不小于被除数位宽,基于最终的运算变量,得到余数和商。将单时钟周期的除法运算拆分成多个时钟周期的加法运算,提高了系统的稳定性,且,利用中间变量进行除法运算使得资源占用大幅度减小。
Description
技术领域
本申请涉及驱控一体的技术领域,尤其是涉及一种FPGA除法运算的优化方法、装置、除法器和介质。
背景技术
在机器人控制系统的更新换代上,从基于脉冲型的机器人运动控制卡,到各类总线型伺服控制系统,再更新为驱控一体机器人控制系统,在多次更新换代中大大提升了机器人的运行速度,且性能大幅提升。驱控一体技术,即将多轴伺服驱动及运动控制结为一体,实现驱动、运控、机器人应用工艺三层次的完美结合。
目前Zynq7020系列芯片作为驱控一体的主控MCU,在能耗、性能、成本和兼容性等方面都有巨大的优势,然而,驱控一体系统需要的功能繁多,其中,简单的功能可以通过移位与求和高效的完成,但用硬件逻辑资源完成两变量间的除法运算不仅需要占用大量的LUT逻辑资源,而且,除法运算时间长会使系统的建立时序欲量为负值,进而,导致系统出现不稳定的状态。因此,在FPGA开发中会尽量避免除法运算,然而,驱控一体系统需要对电机进行精细控制,其中,除法运算为驱控一体系统中是必不可少的算法,现有技术中,基于单时钟周期的除法运算存在运算资源不足和系统不稳定的缺点,无法满足驱控一体系统对资源和稳定性的需求。
因而,如何提供一种低资源占用且保证系统稳定的除法运算是本领域技术人员亟待解决的问题。
发明内容
本申请的目的是提供一种FPGA除法运算的优化方法、装置、除法器和介质,用于解决以上至少一项技术问题。
本申请的上述发明目的是通过以下技术方案得以实现的:
第一方面,本申请提供一种FPGA除法运算的优化方法,采用如下的技术方案:
一种FPGA除法运算的优化方法,包括:
基于除数和被除数进行变量初始化,确定中间变量,其中,所述除数和所述被除数为二进制形式,且所述除数、所述被除数和所述中间变量均包括:数值属性和位宽属性;
在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,所述中间变量的高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值;
基于结果和操作的对应关系,确定与所述比较结果对应的目标操作,基于所述目标操作对所述中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数;
判断所述下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将所述运算变量确定为新的所述中间变量,重复执行在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果的步骤,直至周期数不小于被除数位宽,得到最终的运算变量;
基于所述最终的运算变量,得到除法运算的余数和商。
通过采用上述技术方案,基于除数和被除数进行变量初始化,确定中间变量,然后,在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,并基于结果和操作的对应关系确定与比较结果对应的目标操作,进而,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。然后,判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期进行的处理,直至周期数不小于被除数位宽,基于最终的运算变量,得到除法运算的余数和商。通过这种方式,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
本申请在一较佳示例中可以进一步配置为:基于结果和操作的对应关系,确定与所述比较结果对应的目标操作,包括:
当比较结果为高除数位宽的值小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量整体左移一位;
当比较结果为高除数位宽的值不小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位。
本申请在一较佳示例中可以进一步配置为:基于所述最终的运算变量,得到除法运算的余数和商,包括:
基于最终的运算变量执行右移一位操作,得到移位变量;
基于所述移位变量的高除数位宽的值,得到除法运算的余数,其中,所述高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值;
基于所述移位变量的低被除数位宽的值,得到除法运算的商,其中,所述低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值。
本申请在一较佳示例中可以进一步配置为:基于除数和被除数进行变量初始化,确定中间变量之前,还包括:
获取十进制除数和十进制被除数,基于所述十进制除数、所述十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,其中,所述初始除数和初始被除数的最高位均为符号位;
判断所述初始除数和所述初始被除数各自对应的最高位是否为1,若最高位为1,则将最高位为1对应的数值进行取负数操作,若最高位为0,则保持最高位为0对应的数值不变,最终确定除法运算的除数和被除数;
若初始除数和初始被除数中任意一项的最高位为1,相应的,所述基于所述最终的运算变量,得到除法运算的余数和商,包括:
基于最终的运算变量,得到除法运算的余数和初始商;
判断初始除数和初始被除数的最高位是否一致,若不一致,则将所述初始商进行取负数操作,最终得到除法运算的商。
本申请在一较佳示例中可以进一步配置为:基于最终的运算变量,得到除法运算的余数和商之后,还包括:
基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位;
将除法运算的商的最高位和所述目标符号位进行匹配,若匹配失败,则重新执行除法运算,直至除法运算的商的最高位和所述目标符号位匹配成功。
本申请在一较佳示例中可以进一步配置为:基于除数和被除数进行变量初始化,确定中间变量,包括:
基于除数的位宽和被除数的位宽进行计算,得到中间变量的位宽,其中,所述中间变量的位宽为除数的位宽和被除数的位宽的总和加一;
基于被除数进行左移一位的结果和所述中间变量的位宽,综合确定中间变量。
本申请在一较佳示例中可以进一步配置为:基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,包括:
基于所述中间变量的高除数位宽的值和除数的值,从高位至低位逐一进行比较,得到比较结果,其中,所述比较结果包括:高除数位宽的值小于除数的值和高除数位宽的值不小于除数的值。
第二方面,本申请提供一种FPGA除法运算的优化装置,采用如下的技术方案:
一种FPGA除法运算的优化装置,包括:
变量初始化模块,用于基于除数和被除数进行变量初始化,确定中间变量,其中,所述除数和所述被除数为二进制形式,且所述除数、所述被除数和所述中间变量均包括:数值属性和位宽属性;
数值比较模块,用于在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,所述中间变量的高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值;
数值处理模块,用于基于结果和操作的对应关系,确定与所述比较结果对应的目标操作,基于所述目标操作对所述中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数;
循环执行模块,用于判断所述下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将所述运算变量确定为新的所述中间变量,重复执行在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果的步骤,直至周期数不小于被除数位宽,得到最终的运算变量;
结果确定模块,用于基于所述最终的运算变量,得到除法运算的余数和商。
通过采用上述技术方案,基于除数和被除数进行变量初始化,确定中间变量,然后,在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,并基于结果和操作的对应关系确定与比较结果对应的目标操作,进而,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。然后,判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期进行的处理,直至周期数不小于被除数位宽,基于最终的运算变量,得到除法运算的余数和商。通过这种方式,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
本申请在一较佳示例中可以进一步配置为:数值处理模块在执行基于结果和操作的对应关系,确定与所述比较结果对应的目标操作时,用于:
当比较结果为高除数位宽的值小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量整体左移一位;
当比较结果为高除数位宽的值不小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位。
本申请在一较佳示例中可以进一步配置为:结果确定模块在执行基于所述最终的运算变量,得到除法运算的余数和商时,用于:
基于最终的运算变量执行右移一位操作,得到移位变量;
基于所述移位变量的高除数位宽的值,得到除法运算的余数,其中,所述高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值;
基于所述移位变量的低被除数位宽的值,得到除法运算的商,其中,所述低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值。
本申请在一较佳示例中可以进一步配置为:FPGA除法运算的优化装置,还包括:
数值预处理模块,用于获取十进制除数和十进制被除数,基于所述十进制除数、所述十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,其中,所述初始除数和初始被除数的最高位均为符号位;
判断所述初始除数和所述初始被除数各自对应的最高位是否为1,若最高位为1,则将最高位为1对应的数值进行取负数操作,若最高位为0,则保持最高位为0对应的数值不变,最终确定除法运算的除数和被除数;
若初始除数和初始被除数中任意一项的最高位为1,相应的,结果确定模块在执行所述基于所述最终的运算变量,得到除法运算的余数和商时,用于:
基于最终的运算变量,得到除法运算的余数和初始商;
判断初始除数和初始被除数的最高位是否一致,若不一致,则将所述初始商进行取负数操作,最终得到除法运算的商。
本申请在一较佳示例中可以进一步配置为:FPGA除法运算的优化装置,还包括:
符号位匹配模块,用于基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位;
将除法运算的商的最高位和所述目标符号位进行匹配,若匹配失败,则重新执行除法运算,直至除法运算的商的最高位和所述目标符号位匹配成功。
本申请在一较佳示例中可以进一步配置为:变量初始化模块在执行基于除数和被除数进行变量初始化,确定中间变量时,用于:
基于除数的位宽和被除数的位宽进行计算,得到中间变量的位宽,其中,所述中间变量的位宽为除数的位宽和被除数的位宽的总和加一;
基于被除数进行左移一位的结果和所述中间变量的位宽,综合确定中间变量。
本申请在一较佳示例中可以进一步配置为:数值比较模块在执行于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果时,用于:
基于所述中间变量的高除数位宽的值和除数的值,从高位至低位逐一进行比较,得到比较结果,其中,所述比较结果包括:高除数位宽的值小于除数的值和高除数位宽的值不小于除数的值。
第三方面,本申请提供一种除法器,采用如下的技术方案:
至少一个处理器;
存储器;
至少一个应用程序,其中至少一个应用程序被存储在存储器中并被配置为由至少一个处理器执行,所述至少一个应用程序配置用于:执行第一方面中的任意一项所述的FPGA除法运算的优化方法。
第四方面,本申请提供一种计算机可读存储介质,采用如下的技术方案:
一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令所述计算机执行第一方面中的任意一项所述的FPGA除法运算的优化方法。
综上所述,本申请包括以下至少一种有益技术效果:
1.基于除数和被除数进行变量初始化,确定中间变量,然后,在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,并基于结果和操作的对应关系确定与比较结果对应的目标操作,进而,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。然后,判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期进行的处理,直至周期数不小于被除数位宽,基于最终的运算变量,得到除法运算的余数和商。通过这种方式,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
2.当比较结果为高除数位宽的值小于除数的值时,则确定与比较结果对应的目标操作为中间变量整体左移一位;当比较结果为高除数位宽的值不小于除数的值时,则确定与比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位。在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
附图说明
图1是本申请其中一实施例的一种FPGA除法运算的优化方法的流程示意图;
图2是本申请其中一实施例的一种FPGA除法运算的优化方法的程序流程图;
图3是本申请其中一实施例的对初始被除数和初始除数的取负数处理的程序流程图;
图4是本申请其中一实施例的一种FPGA除法运算的优化装置的结构示意图;
图5是本申请其中一实施例的一种除法器的结构示意图。
具体实施方式
以下结合图1至图5对本申请作进一步详细说明。
本具体实施例仅仅是对本申请的解释,其并不是对本申请的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本申请的范围内都受到专利法的保护。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
下面结合说明书附图对本申请实施例作进一步详细描述。
驱控一体系统需要的功能繁多,其中,简单的功能可以通过移位与求和高效的完成,但用硬件逻辑资源完成两变量间的除法运算不仅需要占用大量的LUT逻辑资源,而且,除法运算时间长会使系统的建立时序欲量为负值,进而,导致系统出现不稳定的状态。然而,驱控一体系统需要对电机进行精细控制,其中,除法运算为驱控一体系统中是必不可少的算法,现有技术中,基于单时钟周期的除法运算存在运算资源不足和系统不稳定的缺点,无法满足驱控一体系统对资源和稳定性的需求。
为了解决上述技术问题,本申请实施例中提供了一种FPGA除法运算的优化方法、装置、除法器和介质,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,其中,拆分成多个时钟周期用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,利用中间变量进行除法运算使得资源占用大幅度减小。
本申请实施例提供了一种FPGA除法运算的优化方法,由除法器执行,该除法器可以为服务器也可以为终端设备,其中,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机等,但并不局限于此,该终端设备以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例在此不做限制,如图1所示,该方法包括步骤S101、步骤S102、步骤S103、步骤S104和步骤S105,其中:
步骤S101:基于除数和被除数进行变量初始化,确定中间变量,其中,除数和被除数为二进制形式,且除数、被除数和中间变量均包括:数值属性和位宽属性。
对于本申请实施例,基于FPGA进行除法运算时,首先,将输入至FPGA的除数和被除数进行预处理,预处理包括但不限于:二进制转换、设置位宽等,然后,基于二进制形式的除数和被除数确定中间变量,并对中间变量进行初始化。进行变量初始化,确定中间变量的过程具体为:基于除数的位宽和被除数的位宽的总和加一,得到中间变量的位宽,然后,基于被除数进行左移一位的结果和中间变量的位宽,综合确定中间变量。
步骤S102:在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,中间变量的高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值;
步骤S103:基于结果和操作的对应关系,确定与比较结果对应的目标操作,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。
对于本申请实施例,在同一时钟周期内,需要完成高除数位宽的值和除数的值的大小比较,并基于目标操作对中间变量进行数值处理。具体的,当检测到时钟信号后,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值,最高位为符号位。然后,基于结果和操作的对应关系,确定与比较结果对应的目标操作,结果和操作的对应关系是预先存储在除法器中的,当比较结果为高除数位宽的值小于除数的值时,则确定目标操作为中间变量整体左移一位,并基于目标操作对中间变量进行数值处理,得到运算变量;当比较结果为高除数位宽的值不小于除数的值时,则确定目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将处理后的中间变量整体左移一位,进而,基于目标操作对中间变量进行数值处理,得到运算变量。与此同时,在对中间变量进行数值处理时,还需要确定下一次数值处理对应的周期数,优选的,可以预设一个初始周期数,记为0,在基于除数和被除数进行除法运算时,倘若为首次进行数值处理,则将初始周期数确定为数值处理对应的周期数,倘若非首次进行数值处理,则将周期数加一作为数值处理对应的周期数。
步骤S104:判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,重复执行“在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果”的步骤,直至周期数不小于被除数位宽;
步骤S105:基于最终的运算变量,得到除法运算的余数和商。
对于本申请实施例,在对中间变量进行数值处理后能够得到运算变量,并判断周期数是否小于被除数的位宽,其中,被除数的位宽为一个具体的数值,例如,被除数为“01100100”,则被除数的位宽为8,即,当周期数为0至7时,则将运算变量确定为中间变量,重复执行“在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果”的步骤;当周期数为8时,则不再重复执行上述步骤,而是,基于最终的运算变量右移一位的结果,确定除法运算的余数和商。
在本申请实施例中,为了更加清晰的对一种FPGA除法运算的优化方法进行论述,整体流程的实现过程如图2所示,在图2中,首先定义被除数、除数、被除数位宽、除数位宽和中间变量各自对应的变量dividend、divisor、DEND_W、SOR_W、tempa,其中,中间变量的位宽为:DEND_W+ SOR_W+1,定义变量用于存储各自对应的数值。在确定了中间变量的位宽后,则开始确定中间变量的数值,如图2中的“tempa={SOR_W 个0,dividend,0}”,此步骤即完成了基于被除数进行左移一位的结果和中间变量的位宽,综合确定中间变量。进而,在一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,如图2中的“tempa[DEND_W+ SOR_W: DEND_W]>= divisor”,当小于除数的值,则对中间变量整体左移一位,并确定下一次数值处理对应的周期数,如图2中的判断执行否的分支,具体执行“tempa整体左移一位”“周期数=周期数+1”;当大于等于除数的值,则对中间变量的值加一,并减去除数左移被除数的位宽的值,再将处理后的中间变量整体左移一位,如图2中的判断执行是的分支,具体执行“tempa=tempa-(divisor<<DEND_W)+1”、“tempa整体左移一位”和“周期数=周期数+1”。然后,判断周期数是否小于被除数的位宽,若小于被除数的位宽,则循环执行上述步骤,即,图2中的“周期数<DEND_W”判断中是的分支;若不小于被除数的位宽,则基于最终的运算变量,得到除法运算的余数和商,即,图2中进行输出部分“商=tempa[DEND_W:1]”和“余数=tempa[DEND_W+SOR_W: DEND_W+1]”。
与此同时,本申请实施例中提及的一种FPGA除法运算的优化方法通过vivado软件进行代码编译,并得到验证结果,其中,在代码编译过程中加入时钟信号sys_clk、开始信号cal_en和运算完成信号cal_valid,当sys_clk产生一个上升沿时模块运行一个周期,当cal_en产生上升沿电平时开始计算,计算完成后cal_valid产生一个脉冲。现有技术中,32位除法运算占用4287个逻辑资源,最坏的时序裕度为-212.068ns,本申请实施例中,除法器运算占用89个逻辑资源,最坏的时序裕度为0.265ns ,大幅度减少逻辑资源的作用,并且提升了系统稳定性。
可见,在本申请实施例中,基于除数和被除数进行变量初始化,确定中间变量,然后,在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,并基于结果和操作的对应关系确定与比较结果对应的目标操作,进而,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。然后,判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期进行的处理,直至周期数不小于被除数位宽,基于最终的运算变量,得到除法运算的余数和商。通过这种方式,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
进一步的,在本申请实施例中,基于结果和操作的对应关系,确定与比较结果对应的目标操作,包括:
当比较结果为高除数位宽的值小于除数的值时,则基于结果和操作的对应关系,确定与比较结果对应的目标操作为中间变量整体左移一位;
当比较结果为高除数位宽的值不小于除数的值时,则基于结果和操作的对应关系,确定与比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位。
对于本申请实施例,基于高除数位宽的值和除数的值进行大小比较,得到了比较结果后,基于结果和操作的对应关系,确定与比较结果对应的目标操作,其中,比较结果包括:高除数位宽的值小于除数的值和高除数位宽的值不小于除数的值,即,高除数位宽的值等于除数的值、高除数位宽的值大于除数的值所对应的目标操作相同。
为了便于理解,此处基于被除数为100,除数为3进行除法运算过程的描述,以使得对数值处理的操作更加清晰。将被除数和除数均转化为位宽为8的二进制形式,即,被除数=01100100,除数=00000011,然后,基于被除数和除数确定的中间变量,即,中间变量=00000000011001000。进而,基于中间变量的高除数位宽的值和除数的值进行大小比较,其中,高除数位宽的值为从中间变量的次高位开始与除数的位宽相同的二进制的值,即,高除数位宽的值=00000000,故在进行大小比较时,高除数位宽的值(00000000)小于除数的值(00000011),因而,确定的目标操作为中间变量整体左移一位,并基于目标操作对中间变量进行数值处理,得到运算变量,即,运算变量=00000000110010000,并确定下一次数值处理对应的周期数,由于此次数值处理为首次,故确定本次运算的周期数为0,并将周期数加一作为下次数值处理的周期数。然后,基于下一次数值处理对应的周期数和被除数的位宽进行比较,故,周期数为1小于被除数的位宽8,因而,将运算变量(00000000110010000)确定为中间变量,并在后一时钟周期内进行下一次循环处理过程。
当检测到时钟信号后,基于中间变量的高除数位宽的值和除数的值进行大小比较,高除数位宽的值(00000001)小于除数的值(00000011),确定对应的目标操作为中间变量整体左移一位,然后,基于目标操作对中间变量(00000000110010000)进行数值处理,得到运算变量(00000001100100000),确定本次运算的周期数为1,并将周期数加一作为下次数值处理的周期数。基于周期数和被除数的位宽进行比较,故,周期数为2小于被除数的位宽8,因而,将运算变量(00000001100100000)确定为中间变量,并在后一时钟周期内进行下一次循环处理过程。
当检测到时钟信号后,基于中间变量的高除数位宽的值和除数的值进行大小比较,高除数位宽的值(00000011)等于除数的值(00000011),确定对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再对中间变量整体左移一位,然后,基于目标操作对中间变量(00000001100100000)进行数值处理,得到运算变量(00000000001000010),故确定本次运算的周期数为2,并将周期数加一作为下次数值处理的周期数。基于周期数和被除数的位宽进行比较,故,周期数为3小于被除数的位宽8,因而,将运算变量(00000000001000010)确定为中间变量,并在后一时钟周期内进行下一次循环处理过程。
重复执行上述过程,其中,周期数为3至6的过程与周期数1的处理过程相同,本申请实施例不再进行论述,在周期数为7时,基于中间变量的高除数位宽的值和除数的值进行大小比较,高除数位宽的值(00000100)大于除数的值(即,00000011),确定对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再对中间变量整体左移一位,然后,基于目标操作对中间变量(00000010000100000)进行数值处理,得到运算变量(00000001001000010),故确定本次运算的周期数为7,并将周期数加一作为下次数值处理的周期数。基于下一次数值处理对应的周期数和被除数的位宽进行比较,故,周期数为8不小于被除数的位宽8,因而,将运算变量(00000001001000010)确定为最终的中间变量,然后,将最终的中间变量右移一位,得到移位变量(00000000100100001),并确定除法运算的余数(00000001)和商(00100001)
其中,确定数值处理对应周期数的方式有多种,优选的,在除法器内设置有计数器,除法器内预先设置有初始周期数,首次进行数值处理时,数值处理对应的周期数为初始周期数,后续再进行数值处理时,则基于上次数值处理对应的周期数进行加一,以确定数值处理对应周期数。
可见,在本申请实施例中,当比较结果为高除数位宽的值小于除数的值时,则确定与比较结果对应的目标操作为中间变量整体左移一位;当比较结果为高除数位宽的值不小于除数的值时,则确定与比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位。在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
进一步的,在本申请实施例中,基于最终的运算变量,得到除法运算的余数和商,包括:
基于最终的运算变量执行右移一位操作,得到移位变量;
基于移位变量的高除数位宽的值,得到除法运算的余数,其中,高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值;
基于移位变量的低被除数位宽的值,得到除法运算的商,其中,低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值。
对于本申请实施例,当周期数不小于被除数的位宽时,不再重复执行“在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果”的步骤,即,停止循环处理的过程。然后,将最终的中间变量右移一位,得到移位后的移位变量,继上文论述的100/3的例子,在周期数为8时,最终的中间变量为00000001001000010,右移一位确定的移位变量为00000000100100001。然后,基于位移变量确定除法运算的余数和商,具体的,基于移位变量的高除数位宽的值,得到除法运算的余数,其中,高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值,即,余数=00000001;基于移位变量的低被除数位宽的值,得到除法运算的商,其中,低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值,即,商=00100001。将余数和商均转化为十进制为1和33,能够确定除法运算准确地计算出了余数和商,即100/3=33余1。
可见,在本申请实施例中,基于最终的运算变量执行右移一位操作,得到移位变量,然后,基于移位变量的高除数位宽的值,得到除法运算的余数,基于移位变量的低被除数位宽的值,得到除法运算的商,实现了基于最终的运算变量确定除法运算的余数和商的操作。
进一步的,在本申请实施例中,基于除数和被除数进行变量初始化,确定中间变量之前,还包括:步骤SA(图中未示出)至步骤SD(图中未示出),其中:
步骤SA:获取十进制除数和十进制被除数,基于十进制除数、十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,其中,初始除数和初始被除数的最高位均为符号位。
对于本申请实施例,基于FPGA进行除法运算时,直接参与运算的除数和被除数为设定了位宽的二进制数值,因而,在基于FPGA进行除法运算前,需要将十进制除数和十进制被除数进行相应的预处理,得到满足FPGA除法运算规则的除数和被除数。因而,获取到十进制除数和十进制被除数后,首先需要进行二进制转换,具体的,基于十进制除数、十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,其中,位宽设置规则可以基于人为进行确定,即,人为规定二进制转换后的初始除数和初始被除数各自对应的位宽,当然,也可以将位宽设置规则预先存储在除法器内,其中,位宽设置规则中确定了数值范围和位宽的关系,然后,将获取到的十进制除数和十进制被除数与位宽设置规则进行匹配,确定二进制转换后的初始除数和初始被除数各自对应的位宽。在进行二进制转换后,得到的初始除数和初始被除数为二进制补码的形式。
步骤SB:判断初始除数和初始被除数各自对应的最高位是否为1,若最高位为1,则将最高位为1对应的数值进行取负数操作,若最高位为0,则保持最高位为0对应的数值不变,最终确定除法运算的除数和被除数。
对于本申请实施例,在除法运算过程中,同号数值相除和异号数值相除的情况均是存在的,然而,当除数或被除数为负数时,需要进行负数对应的相关处理,以使得处理后的负数对应的二进制数值,在基于除法器进行除法运算时,也能够得到正确的除法运算结果。由于初始除数和初始被除数的最高位为符号位,若最高位为1,则表征该数值为负数;若最高位为0,则表征该数值为正数。由于需要对负值的初始除数和/或初始被除数进行相关处理,因而判断初始除数和初始被除数各自对应的最高位是否为1。
若最高位为1,则表征该数值为负数,故将最高位为1对应的数值进行取负数操作;若最高位为0,则保持最高位为0对应的数值不变。在完成了判断初始除数和初始被除数的最高位数值并执行对应操作后,最终确定除法运算的除数和被除数。
若初始除数和初始被除数中任意一项的最高位为1,相应的,基于最终的运算变量,得到除法运算的余数和商,包括:
步骤SC:基于最终的运算变量,得到除法运算的余数和初始商;
步骤SD:判断初始除数和初始被除数的最高位是否一致,若不一致,则将初始商进行取负数操作,最终得到除法运算的商。
对于本申请实施例,针对为负数的初始除数和/或初始被除数进行取负数操作,并将取负数后的数值作为除法器进行运算的除数和被除数,因而,针对负数的初始除数和/或初始被除数,在确定除法运算的余数和商时,需要基于最高位判断后确定对应的处理。具体的,基于最终的运算变量,得到除法运算的余数和初始商,此时,初始商并非作为除法运算最终的商,然后,判断初始除数和初始被除数的最高位是否一致,若不一致,则表明除法运算最终的商应为负数,因而,将初始商进行取负数操作,最终得到除法运算的商。
在本申请实施例中,为了更加清晰的论述对初始被除数和初始除数的取负数处理,整体流程的实现过程如图3所示,首先定义初始除数和初始被除数,对应图3中:被除数=dividend、除数= divisor、被除数位宽= DEND_W、除数位宽= SOR_W,然后,判断初始除数和初始被除数各自对应的最高位是否为1,若初始被除数最高位为1,则将初始被除数进行取负数操作,即,图3中“dividend_temp=-dividend”;若初始除数最高位为1,则将初始除数进行取负数操作,即,图3中“divisor _temp=- divisor”。进而,将dividend_temp和divisor_temp作为除法运算的被除数和除数,后续执行过程与图2中对应处理相同,本申请实施例不再进行论述。当周期数不小于被除数的位宽时,则能够确定最终的中间变量,得到除法运算的余数和初始商,并判断初始除数和初始被除数的最高位是否一致,若不一致,则将初始商进行取负数操作,最终得到除法运算的商,即,图3中“判断被除数最高位==除数最高位”,然后,选择否的分支并执行“商=-{tempa[DEND_W-1:0]}”,除法运算的余数不执行特殊操作,即,图3中“余数=tempa[DEND_W+ SOR_W-1: DEND_W]”。
为了便于理解,此处基于十进制被除数为-100,十进制除数为3进行除法运算过程的描述,以使得对数值处理的操作更加清晰。首先,将十进制被除数和十进制除数均转化为位宽为8的二进制形式,即,初始被除数=10011100,初始除数=00000011,基于最高位判断确定初始被除数的最高位为1,因而,对初始被除数进行取负数操作,得到被除数=01100100,初始除数保持不变,得到除数=00000011。然后,基于除数和被除数进行除数运算,在上文已经详细论述了被除数=01100100且除数=00000011的除法运算过程,为了论述简洁,本申请实施例不再进行论述。当周期数不小于被除数的位宽时,基于最终的运算变量能够确定最终的中间变量,最终的中间变量=00000000100100001,得到除法运算的余数(00000001)和初始商(00100001),即,余数为1、商为33。最后,判断初始除数和初始被除数的最高位是否一致,确定初始除数和初始被除数的最高位不一致,因而,将初始商进行取负数操作,最终得到除法运算的商,故,最终确定除法运算的商为-33。
可见,在本申请实施例中,在基于除数和被除数进行变量初始化,确定中间变量之前,首先,基于十进制除数、十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,然后,判断初始除数和初始被除数各自对应的最高位是否为1,若最高位为1,则将最高位为1对应的数值进行取负数操作,若最高位为0,则保持最高位为0对应的数值不变,最终确定除法运算的除数和被除数。相应的,在确定除法运算的余数和商时,首先,基于最终的运算变量,得到除法运算的余数和初始商,然后,判断初始除数和初始被除数的最高位是否一致,若不一致,则将初始商进行取负数操作,最终得到除法运算的商。通过这种方式,使得除法器能够同时满足正数和负数的除法运算。
进一步的,在本申请实施例中,基于最终的运算变量,得到除法运算的余数和商之后,还包括:
基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位;
将除法运算的商的最高位和目标符号位进行匹配,若匹配失败,则重新执行除法运算,直至除法运算的商的最高位和目标符号位匹配成功。
对于本申请实施例,在除法运算结束后,能够得到除法运算的余数和商,然而,在进行除法运算时会存在多种运算情况,包括:正数和正数相除、正数和负数相除、负数和负数相除,即,除数和被除数的正负号不同,运算结果中商的符号也会与之对应。面对大量的除法运算,在除法运算结束后的结果验证在一定程度上能够提升除法运算结果的准确性。
具体的,基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位,例如,初始除数和初始被除数各自对应的最高位均为1,则1⊕1=0,即,目标符号位为0;初始除数和初始被除数各自对应的最高位分别为0和1,则0⊕1=1,即,目标符号位为1;初始除数和初始被除数各自对应的最高位均为0,则1⊕1=0,即,目标符号位为0。然后,获取除法运算的商的最高位,最高位为商的符号位,并基于除法运算的商的最高位和目标符号位进行验证匹配,若商的最高位和目标符号位匹配成功,则表征除法运算得到的商的符号位正确;若商的最高位和目标符号位匹配失败,则表征除法运算得到的商的符号位错误,即,存在运算错误,故重新执行除法运算。通过这种方式,在一定程度上能够提升除法运算结果的准确性。
可见,在本申请实施例中,基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位,将除法运算的商的最高位和目标符号位进行匹配,若匹配失败,则重新执行除法运算,通过这种方式,在一定程度上能够提升除法运算结果的准确性。
进一步的,在本申请实施例中,基于除数和被除数进行变量初始化,确定中间变量,包括:
基于除数的位宽和被除数的位宽进行计算,得到中间变量的位宽,其中,中间变量的位宽为除数的位宽和被除数的位宽的总和加一;
基于被除数进行左移一位的结果和中间变量的位宽,综合确定中间变量。
对于本申请实施例,在基于除数和被除数确定中间变量的过程中,由于中间变量包括:数值属性和位宽属性,因而,在确定中间变量时,需要确定位宽和数值两方面的属性。因而,在确定中间变量的位宽时,基于除数的位宽和被除数的位宽的总和加一,得到中间变量的位宽;在确定中间变量的数值时,基于被除数进行左移一位的结果和中间变量的位宽,综合确定中间变量,即,将被除数左移一位并在中间变量的位宽的其余位置补零,最终得到中间变量。
具体的,被除数是位宽为8的100,即,被除数=01100100,除数是位宽为8的3,即,除数=00000011,基于位宽均为8的除数和被除数,确定中间变量的位宽为17,然后,将被除数左移一位,得到移位被除数=011001000,最终,基于移位被除数和中间变量的位宽,在中间变量的位宽的其余位置补零,得到中间变量=00000000011001000。
可见,在本申请实施例中,基于除数的位宽和被除数的位宽进行计算,得到中间变量的位宽,然后,基于被除数进行左移一位的结果和中间变量的位宽,综合确定中间变量。通过这种方式,定义并初始化中间变量,基于中间变量进行数值处理并存储数值处理中的数值。
进一步的,在本申请实施例中,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,包括:
基于中间变量的高除数位宽的值和除数的值,从高位至低位逐一进行比较,得到比较结果,其中,比较结果包括:高除数位宽的值小于除数的值和高除数位宽的值不小于除数的值。
对于本申请实施例,在基于中间变量的高除数位宽的值和除数的值进行大小比较时,首先,确定高除数位宽的值和除数的值,由于高除数位宽的值为从中间变量的次高位开始与除数的位宽相同的二进制的值,故,两者的位宽相同,因而,在进行数值大小比较时,从高位至低位进行逐位比较,并得到比较结果。在本申请实施例中,除法器在进行除法运算时,高除数位宽的值等于除数的值和高除数位宽的值大于除数的值两种情况对应的目标操作均相同,因而,在确定比较结果时,将两种情况归为一种情况,即,高除数位宽的值不小于除数的值。
可见,在本申请实施例中,基于中间变量的高除数位宽的值和除数的值,从高位至低位逐一进行比较,得到比较结果。由于除法器针对高除数位宽的值等于除数的值、高除数位宽的值大于除数的值两种情况对应的目标操作均相同,因而,在确定比较结果时,仅分为高除数位宽的值小于除数的值、高除数位宽的值不小于除数的值两种情况。
上述实施例从方法流程的角度介绍一种FPGA除法运算的优化方法,下述实施例从虚拟模块或者虚拟单元的角度介绍了一种FPGA除法运算的优化装置,具体详见下述实施例。
本申请实施例提供一种FPGA除法运算的优化装置200,如图4所示,该FPGA除法运算的优化装置200具体可以包括:
变量初始化模块210,用于基于除数和被除数进行变量初始化,确定中间变量,其中,除数和被除数为二进制形式,且除数、被除数和中间变量均包括:数值属性和位宽属性;
数值比较模块220,用于在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,中间变量的高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值;
数值处理模块230,用于基于结果和操作的对应关系,确定与比较结果对应的目标操作,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数;
循环执行模块240,用于判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为新的中间变量,重复执行在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果的步骤,直至周期数不小于被除数位宽,得到最终的运算变量;
结果确定模块250,用于基于最终的运算变量,得到除法运算的余数和商。
对于本申请实施例,基于除数和被除数进行变量初始化,确定中间变量,然后,在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,并基于结果和操作的对应关系确定与比较结果对应的目标操作,进而,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。然后,判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期进行的处理,直至周期数不小于被除数位宽,基于最终的运算变量,得到除法运算的余数和商。通过这种方式,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
本申请实施例的一种可能的实现方式,数值处理模块230在执行基于结果和操作的对应关系,确定与比较结果对应的目标操作时,用于:
当比较结果为高除数位宽的值小于除数的值时,则基于结果和操作的对应关系,确定与比较结果对应的目标操作为中间变量整体左移一位;
当比较结果为高除数位宽的值不小于除数的值时,则基于结果和操作的对应关系,确定与比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位。
本申请实施例的一种可能的实现方式,结果确定模块250在执行基于最终的运算变量,得到除法运算的余数和商时,用于:
基于最终的运算变量执行右移一位操作,得到移位变量;
基于移位变量的高除数位宽的值,得到除法运算的余数,其中,高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值;
基于移位变量的低被除数位宽的值,得到除法运算的商,其中,低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值。
本申请实施例的一种可能的实现方式,FPGA除法运算的优化装置200,还包括:
数值预处理模块,用于获取十进制除数和十进制被除数,基于十进制除数、十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,其中,初始除数和初始被除数的最高位均为符号位;
判断初始除数和初始被除数各自对应的最高位是否为1,若最高位为1,则将最高位为1对应的数值进行取负数操作,若最高位为0,则保持最高位为0对应的数值不变,最终确定除法运算的除数和被除数;
若初始除数和初始被除数中任意一项的最高位为1,相应的,结果确定模块250在执行基于最终的运算变量,得到除法运算的余数和商时,用于:
基于最终的运算变量,得到除法运算的余数和初始商;
判断初始除数和初始被除数的最高位是否一致,若不一致,则将初始商进行取负数操作,最终得到除法运算的商。
本申请实施例的一种可能的实现方式,FPGA除法运算的优化装置200,还包括:
符号位匹配模块,用于基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位;
将除法运算的商的最高位和目标符号位进行匹配,若匹配失败,则重新执行除法运算,直至除法运算的商的最高位和目标符号位匹配成功。
本申请实施例的一种可能的实现方式,变量初始化模块210在执行基于除数和被除数进行变量初始化,确定中间变量时,用于:
基于除数的位宽和被除数的位宽进行计算,得到中间变量的位宽,其中,中间变量的位宽为除数的位宽和被除数的位宽的总和加一;
基于被除数进行左移一位的结果和中间变量的位宽,综合确定中间变量。
本申请实施例的一种可能的实现方式,数值比较模块220在执行基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果时,用于:
基于中间变量的高除数位宽的值和除数的值,从高位至低位逐一进行比较,得到比较结果,其中,比较结果包括:高除数位宽的值小于除数的值和高除数位宽的值不小于除数的值。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的一种FPGA除法运算的优化装置200的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例中提供了一种除法器,如图5所示,图5所示的除法器300包括:处理器301和存储器303。其中,处理器301和存储器303相连,如通过总线302相连。可选地,除法器300还可以包括收发器304。需要说明的是,实际应用中收发器304不限于一个,该除法器300的结构并不构成对本申请实施例的限定。
处理器301可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器301也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线302可包括一通路,在上述组件之间传送信息。总线302可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线302可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一型的总线。
存储器303可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器303用于存储执行本申请方案的应用程序代码,并由处理器301来控制执行。处理器301用于执行存储器303中存储的应用程序代码,以实现前述方法实施例所示的内容。
其中,除法器包括但不限于:移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端、还可以为服务器等。图5示出的除法器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与相关技术相比,本申请实施例,基于除数和被除数进行变量初始化,确定中间变量,然后,在同一个时钟周期内,基于中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,并基于结果和操作的对应关系确定与比较结果对应的目标操作,进而,基于目标操作对中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数。然后,判断下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将运算变量确定为中间变量,并在下一时钟周期重复执行上一时钟周期进行的处理,直至周期数不小于被除数位宽,基于最终的运算变量,得到除法运算的余数和商。通过这种方式,将一个单时钟周期的除法运算拆分成多个时钟周期的加法运算,用于确保每一步运算均能够一个时钟周期内完成,以保证不会出现时序错误的情况,提高了系统的稳定性,且,在进行除法运算时仅对中间变量进行数值处理就能够完成所有步骤,利用中间变量进行除法运算使得资源占用大幅度减小。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (7)
1.一种FPGA除法运算的优化方法,其特征在于,包括:
基于除数和被除数进行变量初始化,确定中间变量,其中,所述除数和所述被除数为二进制形式,且所述除数、所述被除数和所述中间变量均包括:数值属性和位宽属性;
在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,所述中间变量的高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值;
基于结果和操作的对应关系,确定与所述比较结果对应的目标操作,基于所述目标操作对所述中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数;
判断所述下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将所述运算变量确定为新的所述中间变量,重复执行在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果的步骤,直至周期数不小于被除数位宽,得到最终的运算变量;
基于所述最终的运算变量,得到除法运算的余数和商;
其中,所述基于除数和被除数进行变量初始化,确定中间变量,包括:
基于所述除数的位宽和所述被除数的位宽的总和加一,得到所述中间变量的位宽,基于所述被除数进行左移一位的结果和所述中间变量的位宽,综合确定中间变量;
所述基于结果和操作的对应关系,确定与所述比较结果对应的目标操作,包括:
当比较结果为高除数位宽的值小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量整体左移一位;
当比较结果为高除数位宽的值不小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位;
所述基于所述最终的运算变量,得到除法运算的余数和商,包括:
基于最终的运算变量执行右移一位操作,得到移位变量;
基于所述移位变量的高除数位宽的值,得到除法运算的余数,其中,所述高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值;
基于所述移位变量的低被除数位宽的值,得到除法运算的商,其中,所述低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值。
2.根据权利要求1所述的FPGA除法运算的优化方法,其特征在于,所述基于除数和被除数进行变量初始化,确定中间变量之前,还包括:
获取十进制除数和十进制被除数,基于所述十进制除数、所述十进制被除数和位宽设置规则进行二进制转换,得到初始除数和初始被除数,其中,所述初始除数和初始被除数的最高位均为符号位;
判断所述初始除数和所述初始被除数各自对应的最高位是否为1,若最高位为1,则将最高位为1对应的数值进行取负数操作,若最高位为0,则保持最高位为0对应的数值不变,最终确定除法运算的除数和被除数;
若初始除数和初始被除数中任意一项的最高位为1,相应的,所述基于所述最终的运算变量,得到除法运算的余数和商,包括:
基于最终的运算变量,得到除法运算的余数和初始商;
判断初始除数和初始被除数的最高位是否一致,若不一致,则将所述初始商进行取负数操作,最终得到除法运算的商。
3.根据权利要求2所述的FPGA除法运算的优化方法,其特征在于,所述基于所述最终的运算变量,得到除法运算的余数和商之后,还包括:
基于初始除数和初始被除数各自对应的最高位进行异或处理,得到目标符号位;
将除法运算的商的最高位和所述目标符号位进行匹配,若匹配失败,则重新执行除法运算,直至除法运算的商的最高位和所述目标符号位匹配成功。
4.根据权利要求1所述的FPGA除法运算的优化方法,其特征在于,所述基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,包括:
基于所述中间变量的高除数位宽的值和除数的值,从高位至低位逐一进行比较,得到比较结果,其中,所述比较结果包括:高除数位宽的值小于除数的值和高除数位宽的值不小于除数的值。
5.一种FPGA除法运算的优化装置,其特征在于,包括:
变量初始化模块,用于基于除数和被除数进行变量初始化,确定中间变量,其中,所述除数和所述被除数为二进制形式,且所述除数、所述被除数和所述中间变量均包括:数值属性和位宽属性;
数值比较模块,用于在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果,其中,所述中间变量的高除数位宽的值为从中间变量的次高位开始匹配到的与除数的位宽相同的二进制的值;
数值处理模块,用于基于结果和操作的对应关系,确定与所述比较结果对应的目标操作,基于所述目标操作对所述中间变量进行数值处理,得到运算变量,并确定下一次数值处理对应的周期数;
循环执行模块,用于判断所述下一次数值处理对应的周期数是否小于被除数的位宽,若小于被除数的位宽,则将所述运算变量确定为所述中间变量,重复执行“在同一个时钟周期内,基于所述中间变量的高除数位宽的值和除数的值进行大小比较,得到比较结果”的步骤,直至周期数不小于被除数位宽,得到最终的运算变量;
结果确定模块,用于基于所述最终的运算变量,得到除法运算的余数和商;
变量初始化模块在执行基于除数和被除数进行变量初始化,确定中间变量时,用于:基于所述除数的位宽和所述被除数的位宽的总和加一,得到所述中间变量的位宽,基于所述被除数进行左移一位的结果和所述中间变量的位宽,综合确定中间变量;
数值处理模块在执行基于结果和操作的对应关系,确定与所述比较结果对应的目标操作时,用于:
当比较结果为高除数位宽的值小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量整体左移一位;
当比较结果为高除数位宽的值不小于除数的值时,则基于结果和操作的对应关系,确定与所述比较结果对应的目标操作为中间变量的值加一,并减去除数左移被除数的位宽的值,再将中间变量整体左移一位;
结果确定模块在执行基于所述最终的运算变量,得到除法运算的余数和商时,用于:
基于最终的运算变量执行右移一位操作,得到移位变量;
基于所述移位变量的高除数位宽的值,得到除法运算的余数,其中,所述高除数位宽的值为从移位变量的次高位开始匹配的与除数的位宽相同的二进制的值;
基于所述移位变量的低被除数位宽的值,得到除法运算的商,其中,所述低被除数位宽的值为从移位变量的最低位开始匹配的与被除数的位宽相同的二进制的值。
6.一种除法器,其特征在于,包括:
至少一个处理器;
存储器;
至少一个应用程序,其中至少一个应用程序被存储在存储器中并被配置为由至少一个处理器执行,所述至少一个应用程序配置用于:执行权利要求1~4任一项所述的FPGA除法运算的优化方法。
7.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令所述计算机执行权利要求1~4任一项所述的FPGA除法运算的优化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310133144.3A CN116028013B (zh) | 2023-02-20 | 2023-02-20 | 一种fpga除法运算的优化方法、装置、除法器和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310133144.3A CN116028013B (zh) | 2023-02-20 | 2023-02-20 | 一种fpga除法运算的优化方法、装置、除法器和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116028013A CN116028013A (zh) | 2023-04-28 |
CN116028013B true CN116028013B (zh) | 2023-07-04 |
Family
ID=86091358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310133144.3A Active CN116028013B (zh) | 2023-02-20 | 2023-02-20 | 一种fpga除法运算的优化方法、装置、除法器和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116028013B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113625992B (zh) * | 2021-06-28 | 2023-07-14 | 山东云海国创云计算装备产业创新中心有限公司 | 基于除法器的任务处理方法、装置、除法器及存储介质 |
CN117908833A (zh) * | 2024-03-19 | 2024-04-19 | 广州三晶电气股份有限公司 | Mcu高位数整型除法器的加速方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708468A (zh) * | 2015-11-17 | 2017-05-24 | 华为数字技术(苏州)有限公司 | 一种除法运算方法及装置 |
CN109074622A (zh) * | 2016-04-27 | 2018-12-21 | 北京嘀嘀无限科技发展有限公司 | 确定运输服务路线的系统及方法 |
CN111399803A (zh) * | 2019-01-03 | 2020-07-10 | 北京小米松果电子有限公司 | 除法运算方法、装置、存储介质及电子设备 |
CN113791753A (zh) * | 2021-09-15 | 2021-12-14 | 山东芯慧微电子科技有限公司 | 一种基于fpga的支持快速除法的可编程dsp |
CN114089951A (zh) * | 2021-11-24 | 2022-02-25 | 深圳市海浦蒙特科技有限公司 | 一种快速除法器及其运行方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101917162B (zh) * | 2010-07-28 | 2012-08-15 | 浙江大学 | 一种基于fpga的键相倍频方法及装置 |
CN102231101B (zh) * | 2011-07-29 | 2015-02-25 | 电子科技大学 | 一种除法器及除法处理方法 |
CN102314331A (zh) * | 2011-08-02 | 2012-01-11 | 深圳市国微电子股份有限公司 | 除法器及其实现方法 |
CN105469373B (zh) * | 2014-09-04 | 2018-07-31 | 南京理工大学 | 一种Retinex图像增强方法及系统 |
CN105704464A (zh) * | 2016-01-18 | 2016-06-22 | 安徽工程大学 | 一种基于fpga的色域空间转换方法 |
CN105955706B (zh) * | 2016-06-16 | 2018-06-26 | 武汉芯泰科技有限公司 | 一种除法器及除法运算方法 |
CN108897523B (zh) * | 2018-07-02 | 2021-01-26 | 京东方科技集团股份有限公司 | 一种除法器及其运算方法、电子设备 |
CN109783053A (zh) * | 2019-01-16 | 2019-05-21 | 中科亿海微电子科技(苏州)有限公司 | 一种fpga实现可变位宽除法的方法及装置 |
CN110765717A (zh) * | 2019-10-22 | 2020-02-07 | 哈尔滨理工大学 | 一种基于fpga的扩展卡尔曼滤波器电路结构设计方法 |
CN113625992B (zh) * | 2021-06-28 | 2023-07-14 | 山东云海国创云计算装备产业创新中心有限公司 | 基于除法器的任务处理方法、装置、除法器及存储介质 |
CN115357216A (zh) * | 2022-09-01 | 2022-11-18 | 安谋科技(中国)有限公司 | 数据处理方法、介质、电子设备和程序产品 |
-
2023
- 2023-02-20 CN CN202310133144.3A patent/CN116028013B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106708468A (zh) * | 2015-11-17 | 2017-05-24 | 华为数字技术(苏州)有限公司 | 一种除法运算方法及装置 |
CN109074622A (zh) * | 2016-04-27 | 2018-12-21 | 北京嘀嘀无限科技发展有限公司 | 确定运输服务路线的系统及方法 |
CN111399803A (zh) * | 2019-01-03 | 2020-07-10 | 北京小米松果电子有限公司 | 除法运算方法、装置、存储介质及电子设备 |
CN113791753A (zh) * | 2021-09-15 | 2021-12-14 | 山东芯慧微电子科技有限公司 | 一种基于fpga的支持快速除法的可编程dsp |
CN114089951A (zh) * | 2021-11-24 | 2022-02-25 | 深圳市海浦蒙特科技有限公司 | 一种快速除法器及其运行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116028013A (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116028013B (zh) | 一种fpga除法运算的优化方法、装置、除法器和介质 | |
CN108780441B (zh) | 用于定点矩阵乘法的存储减少方法 | |
US8880815B2 (en) | Low access time indirect memory accesses | |
CN103914276A (zh) | 利用浮点架构的定点除法电路 | |
US9983850B2 (en) | Shared hardware integer/floating point divider and square root logic unit and associated methods | |
CN113902089A (zh) | 加速激活函数运算的装置、方法及存储介质 | |
CN113254073B (zh) | 数据处理方法及装置 | |
CN113805974A (zh) | 基于应用程序的数据类型选择 | |
CN111190910B (zh) | 额度资源的处理方法、装置、电子设备及可读存储介质 | |
CN112000485A (zh) | 任务分配方法、装置、电子设备及计算机可读存储介质 | |
CN115357216A (zh) | 数据处理方法、介质、电子设备和程序产品 | |
CN115483934A (zh) | 用于多方安全计算的数据转换方法和装置 | |
CN106991058B (zh) | 预取文件处理方法及装置 | |
CN115269199A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
US10459689B2 (en) | Calculation of a number of iterations | |
CN114510217A (zh) | 处理数据的方法、装置和设备 | |
US8924447B2 (en) | Double precision approximation of a single precision operation | |
CN115934029B (zh) | 乘法运算资源转换逻辑资源方法、装置、乘法器及介质 | |
EP4058885B1 (en) | Execution of a conditional statement by an arithmetic and/or bitwise unit | |
US9311272B1 (en) | System and method for faster division | |
US8732369B1 (en) | Minimal-cost pseudo-round-robin arbiter | |
CN114077886A (zh) | 电子设备、用于识别图像的方法和设备 | |
CN114077416A (zh) | 浮点数运算方法及装置 | |
CN116048456A (zh) | 矩阵乘法器、矩阵相乘的方法以及计算设备 | |
CN113032007A (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 |