CN105808206B - 基于ram实现乘法运算的方法及其系统 - Google Patents
基于ram实现乘法运算的方法及其系统 Download PDFInfo
- Publication number
- CN105808206B CN105808206B CN201610125083.6A CN201610125083A CN105808206B CN 105808206 B CN105808206 B CN 105808206B CN 201610125083 A CN201610125083 A CN 201610125083A CN 105808206 B CN105808206 B CN 105808206B
- Authority
- CN
- China
- Prior art keywords
- ram
- multiplier
- multiplicand
- partial product
- rom
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/52—Multiplying; Dividing
- G06F7/523—Multiplying only
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Abstract
本发明提供一种基于RAM实现乘法运算的方法及其系统,所述方法通过分别对乘数和被乘数进行位分解,生成每个乘数位数据分别与每个被乘数位数据相乘的部分积,并在RAM中存储每个部分积对应的ROM初始化文件,根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,根据所述存储地址对每个部分积进行移位相加,得到乘数与被乘数的乘法运行结果。因此,本发明可在逻辑资源匮乏、RAM资源富余的情况下,在RAM中实现乘法运算,从而提高运算效率和RAM资源的利用率,降低因乘法器资源不足而带来的额外成本。
Description
技术领域
本发明涉及数字信号处理领域,特别是一种基于RAM实现乘法运算的方法及其系统。
背景技术
数字解调中,DDC(Digital Down Conversion,信号在数字下变频)后的高阶FIR(Finite Impulse Response,有限脉冲反应滤波器)滤波需要占用大量的片内硬件乘法器。现今在FPGA(Field-Programmable Gate Array,即现场可编程门阵列)平台中有符号乘法运算的实现大多基于片内的硬件乘法器,硬件乘法器为芯片内专门用于处理乘法运算的电路,优点是速度快。硬件乘法器资源取决于芯片,在需要大量使用乘法器的场合,如DDC后滤波运算,造成硬件乘法器资源不足。
目前采用的有两种解决方式:一是选购乘法器资源较为丰富、价格更为昂贵的芯片;二是利用片内的逻辑资源,通过移位相加的方式实现有符号乘法运算。第一种解决方式造成成本的提高,第二种解决方式在逻辑资源较为丰富、RAM资源较为匮乏时可行,但在逻辑资源较为匮乏、RAM资源较为丰富时,运算效率低下,而且造成RAM资源浪费。
发明内容
针对上述现有技术中存在的问题,本发明提供一种基于RAM实现乘法运算的方法及其系统,能够在逻辑资源匮乏、RAM资源富余的情况下,使用RAM资源实现乘法运算,从而提高运算效率和RAM资源的利用率,降低因乘法器资源不足而带来的额外成本。
本发明的基于RAM实现乘法运算的方法,技术方案包括如下步骤:
对乘数进行位分解,得到两个以上的乘数位数据;对被乘数进行位分解,得到两个以上的被乘数位数据;
得到多个部分积,所述部分积包括每个乘数位数据分别与每个被乘数位数据的乘积;
生成每个部分积对应的ROM初始化文件,存储在RAM中;根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址;
读取RAM中的每个ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位;
对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果。
本发明的基于RAM实现乘法运算的系统,包括:
位分解模块,用于对乘数进行位分解,得到两个以上的乘数位数据;对被乘数进行位分解,得到两个以上的被乘数位数据;
部分积计算模块,用于得到多个部分积,所述部分积包括每个乘数位数据分别与每个被乘数位数据的乘积;
部分积存储模块,用于生成每个部分积对应的ROM初始化文件,存储在RAM中;根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址;
移位计算模块,用于读取RAM中的每个ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位;对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果。
本发明的基于RAM实现乘法运算的方法及其系统,通过分别对乘数和被乘数进行位分解,生成每个乘数位数据分别与每个被乘数位数据相乘的部分积,并在RAM中存储每个部分积对应的ROM初始化文件,根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,根据所述存储地址对每个部分积进行移位相加,得到乘数与被乘数的乘法运行结果。因此,本发明可在逻辑资源匮乏、RAM资源富余的情况下,在RAM中实现乘法运算,从而提高运算效率和RAM资源的利用率,降低因乘法器资源不足而带来的额外成本。
附图说明
图1为一个实施例的基于RAM实现乘法运算的方法的流程示意图;
图2为一个较佳实施方式的KCM算法位分解图;
图3为一个较佳实施方式的lsb_s2_8x8_rom模块结构图;
图4为一个较佳实施方式的lsb_s1_8x8_rom模块结构图;
图5为一个较佳实施方式的msb_s2_9x8_rom模块结构图;
图6为一个较佳实施方式的msb_s1_9x8_rom模块结构图;
图7为一个较佳实施方式的KCM硬件结构图;
图8为一个实施例的基于RAM实现乘法运算的系统的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步低详细描述。
请参阅图1中一个实施例的基于RAM实现乘法运算的方法的流程示意图,包括步骤S101至步骤S105:
S101,对乘数进行位分解,得到两个以上的乘数位数据;对被乘数进行位分解,得到两个以上的被乘数位数据。通过本步骤可以降低乘法结果的存储空间。
步骤S101中,所述乘数和/或被乘数可以是可变化的数字输入信号数据,也可以是预先设定的固定系数。例如,在数字解调中,信号在数字下变频(DDC,Digital DownConversion)后的高阶FIR滤波需要占用大量的片内硬件乘法器,考虑到滤波系数是常系数,可以利用FPGA的RAM资源实现常系数乘法器,乘数是可变化的输入信号,被乘数是设定的滤波系数。
步骤S101中,可根据乘数和被乘数的数据长度或者位宽、结合RAM资源的位宽进行分析,对乘数和被乘数进行位分解,得到两个以上的乘数位数据和两个以上的被乘数位数据。例如,信号在数字下变频后的高阶FIR滤波处理中,根据对FPGA芯片RAM资源的颗粒度分析,将17bit的数字信号位分解为0bit至7bit的8位低位数据和8bit至16bit的9位高位数据两部分,将16bit的滤波系数位分解为0bit至7bit的8位低位系数和8bit至15bit的8位高位系数两部分。
进一步地,在步骤S101之前,判断所述乘数与被乘数是否为有符号数,若是,则分别对所述乘数或被乘数进行符号位拓展,使得符号位宽与数据位宽之和等于该乘数的位宽与被乘数的位宽之和。
S102,得到多个部分积,所述部分积包括每个乘数位数据分别与每个被乘数位数据的乘积。
一个乘数位数据与一个被乘数位数据的乘积为一个部分积,每个乘数位数据分别与每个被乘数位数据相乘,可得到多个部分积。例如:乘数位分解为D1、D2两部分乘数位数据,被乘数位分解为C1、C2两部分被乘数位数据,则得到四个部分积,包括:D1×C1、D1×C2、D2×C1以及D2×C2。
该步骤使得即使较低位宽的RAM资源,只要能满足各个部分积的位宽需求,即能计算各个部分积,从而降低了RAM资源的位宽要求,进而降低硬件成本。
S103,生成每个部分积对应的ROM初始化文件,存储在RAM中;根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址。
本步骤根据步骤S102中得到的部分积,通过软件平台将得到的部分积一一罗列,得到ROM初始化文件,存储在RAM中;并且根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,便于后续对所述部分积的ROM初始化文件进行寻址。
进一步地,所述生成每个部分积对应的ROM初始化文件,存储在RAM中,包括将每个部分积存储为设定格式的文件,作为对应的ROM初始化文件,具体地,在软件平台上,将部分积通过程序生成相应的txt文件,作为ROM初始化文件;使用硬件描述语言中RAM的初始化语句将ROM初始化文件调用到代码中,所述硬件描述语言可以是VHDL、Verilog HDL等对数字集成电路进行描述的语言;对所述代码进行编译,把所述RAM例化为ROM,将所述ROM初始化文件内容存储在例化得到的ROM里面。例如,在FPGA芯片中可使用Verilog语言进行KCM乘法器(K-constant Coefficient Multiplier,常系数乘法器)的RTL设计。通过本步骤,进一步方便将ROM初始化文件存储在RAM中。
进一步地,所述根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,包括用寄存器寄存每个部分积对应的乘数位数据和被乘数位数据,将所述乘数位数据设置为地址寻址,将所述被乘数位数设置为的片选信号;根据所述地址寻址和片选信号得到ROM初始化文件在RAM中的存储地址。由于指令所需的操作数已存储在寄存器中,或操作的结果存入寄存器,在指令执行过程中,会减少读/写存储器单元的次数,所以,使用寄存器寻址方式的指令具有较快的执行速度。
本步骤也可以采用直接寻址方式、寄存器相对寻址方式以及基址加变址寻址方式等方式实现ROM初始化文件在RAM中的地址寻址。
S104,读取RAM中的每个ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位。
S105,对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果。
进一步地,所述对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果,包括任意选择两个移位后的部分积为一组,进行相加,同时得到多组部分积的相加结果,若存在单个部分积的情况,则该单个部分积作为一个相加结果,完成第一轮相加运算的步骤;基于第一轮相加运算的结果,重复所述第一轮相加运算的步骤,直至得到最终的结果,将该结果作为乘数与被乘数的乘法运行结果。通过该步骤可以提高运算速度。
进一步地,所述对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果,包括选择任意两个移位后的部分积进行相加,得到相加结果;将所述相加结果与另外一个移位后的部分积进行相加,得到新的相加结果;直至每个移位后的部分积均进行一次相加,得到的结果作为乘数与被乘数的乘法运行结果。通过该步骤使得运行结果的计算易于实现。
进一步地,所述乘法运行结果的位宽为乘数的位宽与被乘数的位宽之和。例如,对于位宽分别为M1和M2的被乘数与乘数,其乘法运行结果的位宽为M1+M2。
本实施例的基于RAM实现乘法运算的方法,通过分别对乘数和被乘数进行位分解,生成每个乘数位数据分别与每个被乘数位数据相乘的部分积,并在RAM中存储每个部分积对应的ROM初始化文件,根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,根据所述存储地址对每个部分积进行移位相加,得到乘数与被乘数的乘法运行结果。因此,本方法可在逻辑资源匮乏、RAM资源富余的情况下,在RAM中实现乘法运算,从而提高运算效率和RAM资源的利用率,降低因乘法器资源不足而带来的额外成本。
以下为本发明的基于RAM实现乘法运算的方法的一个较佳实施方式,该实施方式是在DDC后滤波中采用FPGA平台中的RAM资源实现输入信号与滤波系数的相乘运算。实现平台为C/C++软件开发平台,乘积ROM格式为二进制txt,对于位宽分别为M1和M2的被乘数和乘数,乘积ROM生成基于以下原则:a)对有符号数和无符号数,乘积结果位宽为M1+M2;b)若乘数与被乘数均为有符号数,则相乘之前进行符号位拓展,均拓展为M1+M2位;c)乘数与被乘数分别分解为MSB有符号部分和LSB无符号部分,产生对应无符号LSB部分积和有符号MSB部分积。
该较佳实施方式具体包括以下四个步骤:
步骤一:将输入的数字信号和滤波系数同时进行位分解,得到数字信号和滤波系数的高低位计算公式(亦即部分积)。
请参阅图2的KCM算法位分解图,对FPGA芯片RAM资源的颗粒度分析,将17bit的数字信号(Input[16:0])位分解为0bit至7bit的8位低位数据D2(dataa[7:0])和8bit至16bit的9位高位数据D1(dataa[16:8])两部分,将16bit的滤波系数(COEF[15:0])位分解为0bit至7bit的8位低位系数C2(COEFX[7:0])和8bit至15bit的8位高位系数C1(COEFX[15:8])两部分。得到的四个部分积分别为:
0×C1、1×C1,…,D1×C1;
0×C2、1×C2,…,D1×C2;
0×C1、1×C1,…,D2×C1;
0×C2、1×C2,…,D2×C2。
步骤二:根据步骤一得到的计算公式,生成部分积的ROM初始化文件。
在软件平台上预先生成相应的四个部分积,存储到文件中,作为乘法器的ROM初始化文件。在实现中KCM分为四个模块,分别为lsb_s1_8x8_rom,lsb_s2_8x8_rom,msb_s2_9x8_rom,msb_s1_9x8_rom模块,具体定义如下:
lsb_s2_8x8_rom:输入数据低8位与系数低8位的乘积结果。如图3所示,将两个8bit数据均视为无符号数,对于8’h00-8’hFF的系数,对应十进制的0至256,一个系数对应一个rom文件,共有256个rom文件,每一个rom文件存储着从0至255的被乘数与该系数的乘积结果。
lsb_s1_8x8_rom:输入数据低8位与系数高8位的乘积结果。如图4所示,将输入数据低8位数据视为无符号数,系数高8位数据视为有符号数,对于8’h00-8’hFF的系数,8’h00-8’h7F对应十进制的0至127,8’h80-8’hFF对应十进制的-128至-1,一个系数对应一个rom文件,共有256个rom文件,每一个rom文件存储着从0至255的被乘数与该系数的乘积结果。
msb_s2_9x8_rom:输入数据高9位与系数低8位的乘积结果。如图5所示,将输入数据高9位数据视为有符号数,系数低8位数据视为无符号数,对于8’h00-8’hFF的系数,对应十进制的0至256,一个系数对应一个rom文件,共有256个rom文件,每一个rom文件存储着从0至255和-256至-1的被乘数与该系数的乘积结果。
msb_s1_9x8_rom:输入数据高9位与系数高8位的乘积结果。如图6所示,将9bit数据和8bit数据均视为符号数,对于8’h00-8’hFF的系数,8’h00-8’h7F对应十进制的0至127,8’h80-8’hFF对应十进制的-128至-1,一个系数对应一个rom文件,共有256个rom文件,每一个rom文件存储着从0至255和-256至-1的被乘数与该系数的乘积结果。
步骤三:KCM乘法的RTL实现。
在FPGA中使用步骤二得到的ROM初始化文件进行KCM乘法器的RTL设计,将部分积存储在RAM中,参考表1的ROM部分积存储规则表:
表1:
用寄存器寄存每个部分积对应的输入数据的位数据和系数的位数据,将dataa[16:8]与COEFX[15:8]的部分积存储在ROM1,将dataa[16:8]与COEFX[7:0]存储在ROM2,将dataa[7:0]与COEFX[15:8]存储在ROM3,以及将dataa[7:0]与COEFX[7:0]存储在ROM4。
结合表1的ROM部分积存储规则表和图7的KCM硬件结构图,将dataa[16:8]设置为ROM1的地址寻址Hd,将COEFX[15:8]设置为ROM1的片选信号Hc,根据Hd和Hc得到ROM1的存储地址;将dataa[7:0]设置为ROM2的地址寻址Ld,将COEFX[15:8]设置为ROM2的片选信号Hc,根据Ld和Hc得到ROM2的存储地址;将dataa[16:8]设置为ROM3的地址寻址Hd,将COEFX[7:0]设置为ROM3的片选信号Lc,根据Hd和Lc得到ROM3的存储地址;将dataa[7:0]设置为ROM2的地址寻址Ld,将COEFX[7:0]设置为ROM3的片选信号Lc,根据Ld和Lc得到ROM4的存储地址。
步骤四:对部分积进行移位相加,得到运行结果。
读取RAM中的每个ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位。参考图7,将ROM1的部分积向高位移动16位,将ROM2和ROM3的部分积向高位移动8位,ROM1的部分积无需移动。将移位后的ROM1的部分积与移位后的ROM2的部分积相加,得到第一算术和,将移位后的ROM3的部分积与ROM4的部分积相加,得到第二算术和,将第一算术和、第二算术和相加得到结果即为输入信号与滤波系数的乘法运行结果。
由上述的较佳实施方式可知,通过分别对输入信号和滤波系数进行位分解,生成每个输入信号位数据分别与每个滤波系数位数据相乘的部分积,并在RAM中存储每个部分积对应的ROM初始化文件,根据每个部分积对应的输入信号位数据和滤波系数位数据,设置所述ROM初始化文件在RAM中的存储地址,根据所述存储地址对每个部分积进行移位相加,得到输入信号和滤波系数的乘法运行结果。因此,通过该实施方式可在逻辑资源匮乏、RAM资源富余的情况下,可在FPGA芯片的RAM中实现乘法运算,从而提高运算效率和RAM资源的利用率,降低因乘法器资源不足而带来的额外成本。
本发明还提供一种基于RAM实现乘法运算的系统,如图8所示,包括位分解模块801、部分积计算模块802、部分积存储模块803以及移位计算模块804。
所述位分解模块801用于对乘数进行位分解,得到两个以上的乘数位数据;对被乘数进行位分解,得到两个以上的被乘数位数据;所述部分积计算模块802用于得到多个部分积,所述部分积包括每个乘数位数据分别与每个被乘数位数据的乘积;所述部分积存储模块803用于生成每个部分积对应的ROM初始化文件,存储在RAM中;根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址;以及所述移位计算模块804,用于读取RAM中的每个ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位;对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果。
本实施例的基于RAM实现乘法运算的系统,通过分别对乘数和被乘数进行位分解,生成每个乘数位数据分别与每个被乘数位数据相乘的部分积,并在RAM中存储每个部分积对应的ROM初始化文件,根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,根据所述存储地址对每个部分积进行移位相加,得到乘数与被乘数的乘法运行结果。因此,通过该系统可在逻辑资源匮乏、RAM资源富余的情况下,在RAM中实现乘法运算,从而提高运算效率和RAM资源的利用率,降低因乘法器资源不足而带来的额外成本。
在其中一个实施例中,所述部分积存储模块803包括初始化子模块,用于将每个部分积存储为设定格式的文件,作为对应的ROM初始化文件;使用硬件描述语言中RAM的初始化语句将ROM初始化文件调用到代码中;对所述代码进行编译,把所述RAM例化为ROM,将所述ROM初始化文件内容存储在例化得到的ROM里面。通过所述初始化子模块进一步方便将ROM初始化文件存储在RAM中。
在其中一个实施例中,所述部分积存储模块803还包括寻址子模块,用于用寄存器寄存每个部分积对应的乘数位数据和被乘数位数据,将所述乘数位数据设置为地址寻址,将所述被乘数位数设置为的片选信号;根据所述地址寻址和片选信号得到ROM初始化文件在RAM中的存储地址。通过所述寻址子模块能够提高指令的执行速度。
在其中一个实施例中,所述移位计算模块804还包括第一计算子模块,用于任意选择两个移位后的部分积为一组,进行相加,同时得到多组部分积的相加结果,若存在单个部分积的情况,则该单个部分积作为一个相加结果,完成第一轮相加运算的步骤;基于第一轮相加运算的结果,重复所述第一轮相加运算的步骤,直至得到最终的结果,将该结果作为乘数与被乘数的乘法运行结果。通过所述第一计算子模块可以提高运算速度。
在其中一个实施例中,所述移位计算模块804包括第二计算子模块,用于选择任意两个移位后的部分积进行相加,得到相加结果;将所述相加结果与另外一个移位后的部分积进行相加,得到新的相加结果;直至每个移位后的部分积均进行一次相加,得到的结果作为乘数与被乘数的乘法运行结果。通过所述第二计算子模块使得运行结果的计算易于实现。
在其中一个实施例中,所述位分解模块801包括符号位拓展模块,用于判断所述乘数与被乘数是否为有符号数,若是,则分别对所述乘数或被乘数进行符号位拓展,使得符号位宽与数据位宽之和等于该乘数的位宽与被乘数的位宽之和。
在其中一个实施例中,所述乘法运行结果的位宽为乘数的位宽与被乘数的位宽之和。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (8)
1.基于RAM实现乘法运算的方法,其特征在于,包括如下步骤:
对乘数进行位分解,得到两个以上的乘数位数据;
对被乘数进行位分解,得到两个以上的被乘数位数据;
得到多个部分积,所述部分积包括每个乘数位数据分别与每个被乘数位数据的乘积;
生成每个部分积对应的ROM初始化文件,存储在RAM中;根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址;
读取RAM中的ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位;对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果;
所述根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址,包括:
用寄存器寄存每个部分积对应的乘数位数据和被乘数位数据,将所述乘数位数据设置为地址寻址,将所述被乘数位数设置为片选信号;
根据所述地址寻址和片选信号得到ROM初始化文件在RAM中的存储地址。
2.根据权利要求1所述的基于RAM实现乘法运算的方法,其特征在于,
所述生成每个部分积对应的ROM初始化文件,存储在RAM中,包括:将每个部分积存储为设定格式的文件,作为对应的ROM初始化文件;
使用硬件描述语言中RAM的初始化语句将ROM初始化文件调用到代码中;
对所述代码进行编译,把所述RAM例化为ROM,将所述ROM初始化文件内容存储在例化得到的ROM里面。
3.根据权利要求1所述的基于RAM实现乘法运算的方法,其特征在于,所述对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果,包括:
任意选择两个移位后的部分积为一组,进行相加,同时得到多组部分积的相加结果,若存在单个部分积的情况,则该单个部分积作为一个相加结果,完成第一轮相加运算的步骤;
基于第一轮相加运算的结果,重复所述第一轮相加运算的步骤,直至得到最终的结果,将该结果作为乘数与被乘数的乘法运行结果。
4.根据权利要求1所述的基于RAM实现乘法运算的方法,其特征在于,
所述对乘数进行位分解,得到两个以上的乘数位数据,对被乘数进行位分解,得到两个以上的被乘数位数据之前,包括:
判断所述乘数与被乘数是否为有符号数,若是,则分别对所述乘数或被乘数进行符号位拓展,使得符号位宽与数据位宽之和等于该乘数的位宽与被乘数的位宽之和。
5.基于RAM实现乘法运算的系统,其特征在于,包括:
位分解模块,用于对乘数进行位分解,得到两个以上的乘数位数据;对被
乘数进行位分解,得到两个以上的被乘数位数据;
部分积计算模块,用于得到多个部分积,所述部分积包括每个乘数位数据分别与每个被乘数位数据的乘积;
部分积存储模块,用于生成每个部分积对应的ROM初始化文件,存储在RAM中;根据每个部分积对应的乘数位数据和被乘数位数据,设置所述ROM初始化文件在RAM中的存储地址;
移位计算模块,用于读取RAM中的每个ROM初始化文件,得到对应的部分积,根据每个ROM初始化文件在RAM中的存储地址对每个部分积进行对应的移位;对移位后的部分积进行相加,得到乘数与被乘数的乘法运行结果;
所述部分积存储模块还包括:寻址子模块,用于用寄存器寄存每个部分积对应的乘数位数据和被乘数位数据,将所述乘数位数据设置为地址寻址,将所述被乘数位数设置为的片选信号;根据所述地址寻址和片选信号得到ROM初始化文件在RAM中的存储地址。
6.根据权利要求5所述的基于RAM实现乘法运算的系统,其特征在于,所述部分积存储模块包括:
初始化子模块,用于将每个部分积存储为设定格式的文件,作为对应的ROM初始化文件;使用硬件描述语言中RAM的初始化语句将ROM初始化文件调用到代码中;对所述代码进行编译,把所述RAM例化为ROM,将所述ROM初始化文件内容存储在例化得到的ROM里面。
7.根据权利要求5所述的基于RAM实现乘法运算的系统,其特征在于,
所述移位计算模块还包括:
第一计算子模块,用于任意选择两个移位后的部分积为一组,进行相加,同时得到多组部分积的相加结果,若存在单个部分积的情况,则该单个部分积作为一个相加结果,完成第一轮相加运算的步骤;基于第一轮相加运算的结果,
重复所述第一轮相加运算的步骤,直至得到最终的结果,将该结果作为乘数与被乘数的乘法运行结果。
8.根据权利要求5所述的基于RAM实现乘法运算的系统,其特征在于,
所述位分解模块包括:
符号位拓展模块,用于判断所述乘数与被乘数是否为有符号数,若是,则分别对所述乘数或被乘数进行符号位拓展,使得符号位宽与数据位宽之和等于该乘数的位宽与被乘数的位宽之和。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610125083.6A CN105808206B (zh) | 2016-03-04 | 2016-03-04 | 基于ram实现乘法运算的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610125083.6A CN105808206B (zh) | 2016-03-04 | 2016-03-04 | 基于ram实现乘法运算的方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105808206A CN105808206A (zh) | 2016-07-27 |
CN105808206B true CN105808206B (zh) | 2019-01-08 |
Family
ID=56466778
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610125083.6A Active CN105808206B (zh) | 2016-03-04 | 2016-03-04 | 基于ram实现乘法运算的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105808206B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108109655B (zh) * | 2017-12-28 | 2020-11-13 | 中国科学院微电子研究所 | 基于mig逻辑的rram迭代乘法器电路及实现方法 |
ES2905572T3 (es) | 2018-03-09 | 2022-04-11 | Huawei Tech Co Ltd | Método y aparato para filtración de imagen con coeficientes multiplicadores adaptativos |
CN109117114B (zh) * | 2018-08-16 | 2023-06-02 | 电子科技大学 | 一种基于查找表的低复杂度近似乘法器 |
CN109542799B (zh) * | 2018-11-05 | 2023-03-28 | 西安智多晶微电子有限公司 | 块存储器拼接方法、拼接模块、存储装置及现场可编程门阵列 |
CN113934678A (zh) * | 2020-06-29 | 2022-01-14 | 中科寒武纪科技股份有限公司 | 一种计算装置、集成电路芯片、板卡、设备和计算方法 |
CN112328511B (zh) * | 2021-01-04 | 2021-05-04 | 统信软件技术有限公司 | 一种数据处理方法、计算设备及可读存储介质 |
CN116414352A (zh) * | 2021-12-31 | 2023-07-11 | 华为技术有限公司 | 电路、乘加器和电路优化方法 |
CN116225366B (zh) * | 2023-03-06 | 2024-04-05 | 开源网安物联网技术(武汉)有限公司 | 应用于嵌入式流水cpu内核的乘法指令扩展方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4679164A (en) * | 1984-12-17 | 1987-07-07 | The United States Of America As Represented By The Secretary Of The Army | Digital high speed programmable convolver |
US5623527A (en) * | 1996-01-30 | 1997-04-22 | Hewlett-Packard Company | Method and apparatus for determining an integer power of a floating point number |
CN1227366A (zh) * | 1998-02-19 | 1999-09-01 | 朗迅科技公司 | 用于中央处理器和数字信号处理器的低功率乘法器 |
CN101408871A (zh) * | 2007-10-12 | 2009-04-15 | 南开大学 | 数字互相关器的高效实现方法和设备 |
CN101977032A (zh) * | 2010-11-10 | 2011-02-16 | 中国医学科学院生物医学工程研究所 | 应用于全数字b型超声诊断仪中的动态滤波器 |
CN104572010A (zh) * | 2013-10-11 | 2015-04-29 | 京微雅格(北京)科技有限公司 | 基于fpga芯片的乘法器 |
CN102722352B (zh) * | 2012-05-21 | 2015-06-03 | 华南理工大学 | 一种Booth乘法器 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63146125A (ja) * | 1986-12-10 | 1988-06-18 | Mitsubishi Electric Corp | 乗算器 |
-
2016
- 2016-03-04 CN CN201610125083.6A patent/CN105808206B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4679164A (en) * | 1984-12-17 | 1987-07-07 | The United States Of America As Represented By The Secretary Of The Army | Digital high speed programmable convolver |
US5623527A (en) * | 1996-01-30 | 1997-04-22 | Hewlett-Packard Company | Method and apparatus for determining an integer power of a floating point number |
CN1227366A (zh) * | 1998-02-19 | 1999-09-01 | 朗迅科技公司 | 用于中央处理器和数字信号处理器的低功率乘法器 |
CN101408871A (zh) * | 2007-10-12 | 2009-04-15 | 南开大学 | 数字互相关器的高效实现方法和设备 |
CN101977032A (zh) * | 2010-11-10 | 2011-02-16 | 中国医学科学院生物医学工程研究所 | 应用于全数字b型超声诊断仪中的动态滤波器 |
CN102722352B (zh) * | 2012-05-21 | 2015-06-03 | 华南理工大学 | 一种Booth乘法器 |
CN104572010A (zh) * | 2013-10-11 | 2015-04-29 | 京微雅格(北京)科技有限公司 | 基于fpga芯片的乘法器 |
Also Published As
Publication number | Publication date |
---|---|
CN105808206A (zh) | 2016-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105808206B (zh) | 基于ram实现乘法运算的方法及其系统 | |
CN111465924B (zh) | 用于将矩阵输入转换为矩阵处理器的向量化输入的系统和方法 | |
Park et al. | Efficient FPGA and ASIC realizations of a DA-based reconfigurable FIR digital filter | |
WO2018113597A1 (zh) | 矩阵乘加运算装置、神经网络运算装置和方法 | |
GB2582519A (en) | Convolutional neural network hardware | |
GB2566702A (en) | Hardware implementation of a deep neural network with variable output data format | |
KR20150132287A (ko) | 멀티-모드 래딕스-2x 버터플라이 벡터 프로세싱 회로들, 및 연관된 벡터 프로세서들을 제공하기 위한 프로그램 가능한 데이터 경로 구성들을 가지는 벡터 프로세싱 엔진들, 시스템들, 및 방법들 | |
CN103294446A (zh) | 一种定点乘累加器 | |
US11341400B1 (en) | Systems and methods for high-throughput computations in a deep neural network | |
CN103942028A (zh) | 应用在密码技术中的大整数乘法运算方法及装置 | |
WO2021232422A1 (zh) | 神经网络的运算装置及其控制方法 | |
CN114764615A (zh) | 卷积运算的实现方法、数据处理方法及装置 | |
CN113556101B (zh) | Iir滤波器及其数据处理方法 | |
Meher et al. | High-throughput memory-based architecture for DHT using a new convolutional formulation | |
CN104951596B (zh) | 一种板结构-声场耦合分析方法 | |
US11748100B2 (en) | Processing in memory methods for convolutional operations | |
US20220014199A1 (en) | Fast Fourier Transform (FFT) Based Digital Signal Processing (DSP) Engine | |
CN109756291A (zh) | 一种基于查表法的混沌扩频码生成方法及系统 | |
Hong et al. | Implementation of FIR filter on FPGA using DAOBC algorithm | |
WO2022169586A1 (en) | Mac processing pipeline having activation circuitry, and methods of operating same | |
BenSaleh et al. | Scalable design of microprogrammed digital FIR filter for sensor processing subsystem | |
CN113887714A (zh) | 用于在硬件中运行动态循环神经网络的方法和系统 | |
CN111090248A (zh) | 用于执行可配置处理操作的微控制器 | |
Yeary et al. | Theory and implementation of a computationally efficient decimation filter for power-aware embedded systems | |
CN1320444C (zh) | 数据处理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |