基于FPGA的通用矩阵浮点乘法器 【技术领域】
本发明涉及的是一种微处理器技术领域的乘法器,具体是一种基于FPGA(Field-Programmable Gate Array的缩写,现场可编程门阵列)的通用矩阵浮点乘法器。
背景技术
矩阵乘法操作是科学计算中的一个基本操作,在工业控制、模式识别、数字信号处理等领域广泛存在,特别是在便携式设备中,经常涉及模式识别、图像处理的操作,这些操作都是有大量的矩阵运算来完成的,而便携式设备通常计算配置较低,矩阵乘法也就称为计算过程中最为耗时的关键操作。矩阵乘法的时间复杂度较高,通常为O(N3),其计算性能直接影响系统的整体性能。
以前的矩阵乘法器通常采用通用数字信号处理器(Digital Signal Processor,DSP)实现。DSP具有技术成熟,实现工具完善、编程简单等优点,但由于其内部结构的限制,在进行计算时经常会出现缓存(Cache Miss)扑空等现象,影响计算性能。基于DSP技术的涉及通常持续时间只能维持在其峰值计算性能的10%~33%,无法取得很高的计算性能。
近年来的FPGA技术取得了飞速发展,已经从最初只能面向纯逻辑代替的应用转变为能够面向复杂的计算密集型应用。最新的FPGA器件,不仅逻辑资源门极其丰富,而且还包括了大量面向高计算性能的DSP单元、块状RAM(Block RAM,BRAM)等。同时为方便FPGA的调试,各FPGA厂商还提供了各种片内逻辑分析工具(如Xilinx公司的ChipScope),在软硬件上均保证了FPGA实现高性能计算的可能性。
经对现有文献检索发现,中国专利申请号为:200710069954.8,名称为:基于单FPGA的矩阵乘法器装置,该技术包括P2个计算单元PE,由P2个计算单元PE排列形成的P行×P列的PE阵列,数据输入输出接口和数据预处理单元。但是该技术逻辑资源消耗太高,每一个浮点向量乘法器单元要消耗多个DSP48和FIFO单元,对于芯片要求太高,导致成本增加,且不利于实际应用。
【发明内容】
本发明的目的在于克服现有技术的上述不足,提供一种基于FPGA的通用矩阵浮点乘法器。本发明采用并行流水线结构,可以进行任意维数的矩阵浮点乘法运算,并且多个矩阵浮点乘法器可以并行工作,进一步提高计算效率和计算精度。
本发明是通过以下技术方案实现的:
本发明包括:若干并行的矩阵浮点乘法器,每个矩阵浮点乘法器包括:控制管理模块、运算模块和存储模块,其中:控制管理模块与运算模块相连传输累加器清零信号,控制管理模块与存储模块相连传输数据地址信号和结果有效信号,运算模块与存储模块相连传输待运算数据信号和运算结果信号。
所述的控制管理模块生成控制信号以控制运算模块和存储模块,该模块包括:数据地址控制子模块、结果有效控制子模块和累加器清零控制子模块,其中:数据地址控制子模块与存储模块相连传输数据地址控制信号,结果有效控制子模块与存储模块相连传输结果有效信号,累加器清零控制子模块与运算模块相连传输累加器清零信号。
所述的运算模块执行矩阵数据的乘法和累加操作,该模块包括:乘法器、浮点-定点转换器、累加器和定点-浮点转换器,其中:乘法器与存储模块相连传输待运算数据信号,累加器与控制管理模块相连传输累加器清零信号,乘法器与浮点-定点转换器相连传输浮点乘法信号,浮点-定点转换器与累加器相连传输定点乘法信号,累加器与定点-浮点转换器相连传输浮点累加信号,定点-浮点转换器与存储模块相连传输运算结果信号。
所述的存储模块缓存待运算矩阵的数据和结果矩阵的数据,并提供总线访问接口使外部其他设备与本发明装置进行数据交换,该模块包括:乘数矩阵存储单元、被乘数矩阵存储单元、结果矩阵存储单元、总线数据接口和内部数据接口,其中:乘数矩阵存储单元与控制管理模块相连传输乘数地址信号,被乘数矩阵存储单元与控制管理模块相连传输被乘数地址信号,结果矩阵存储单元与控制管理模块相连传输结果有效信号,乘数矩阵存储单元分别与总线数据接口和内部数据接口相连传输待运算的乘数信息,被乘数矩阵存储单元分别与总线数据接口和内部数据接口相连传输待运算的被乘数信息,结果矩阵存储单元分别与总线数据接口和内部数据接口相连传输运算结果信息,总线数据接口与外部其他设备相连传输待运算的乘数信息、待运算的被乘数信息和运算结果信息,内部数据接口与运算模块相连传输待运算的乘数信息、待运算的被乘数信息和运算结果信息。
本发明的工作过程:
步骤A,将待运算的数据通过总线数据接口写入存储模块;
步骤B,向控制管理模块提供矩阵维数信息,并给出开始运算信号;
步骤C,控制管理模块将矩阵乘法分解为多个向量内积的过程,并生成周期性控制信号,发送给运算模块和存储模块;
步骤D,运算模块根据控制信号读取数据,进行浮点乘法和累加运算,存储模块根据控制信号将运算结果写入缓存;
步骤E,控制管理模块生成运算结束信号,总线设备从存储模块中读出运算结果。
与现有技术相比,本发明的有益效果是:每个矩阵浮点乘法器之间相互独立,可同时运算,互不影响,计算的时间大大减小,且计算的精度高达10-4,效率提高十倍以上,且装置简单,成本低。
【具体实施方式】
以下对本发明的实施例作进一步描述:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例
本实施例采用Xilinx的Virtex IV(XC4VFX12-10-ffg668)芯片实现两个15×15的矩阵的浮点乘法运算。
本实施例包括:四个并行的矩阵浮点乘法器,每个矩阵浮点乘法器包括:控制管理模块、运算模块和存储模块,其中:控制管理模块与运算模块相连传输累加器清零信号,控制管理模块与存储模块相连传输数据地址信号和结果有效信号,运算模块与存储模块相连传输待运算数据信号和运算结果信号。
所述的控制管理模块生成控制信号以控制运算模块和存储模块,该模块包括:数据地址控制子模块、结果有效控制子模块和累加器清零控制子模块,其中:数据地址控制子模块与存储模块相连传输数据地址控制信号,结果有效控制子模块与存储模块相连传输结果有效信号,累加器清零控制子模块与运算模块相连传输累加器清零信号。
本实施例中控制管理模块由XC4VFX12-10-ffg668芯片的数字逻辑电路实现。
所述的运算模块执行矩阵数据的乘法和累加操作,该模块包括:乘法器、浮点-定点转换器、累加器和定点-浮点转换器,其中:乘法器与存储模块相连传输待运算数据信号,累加器与累加器清零控制模块相连传输累加器清零信号,乘法器与浮点-定点转换器相连传输浮点乘法信号,浮点-定点转换器与累加器相连传输定点乘法信号,累加器与定点-浮点转换器相连传输浮点累加信号,定点-浮点转换器与存储模块相连传输运算结果信号。
本实施例中运算模块由XC4VFX12-10-ffg668芯片的DSP运算单元实现。
所述的存储模块缓存待运算矩阵的数据和结果矩阵地数据,并提供总线访问接口使外部其他设备与本发明装置进行数据交换,该模块包括:乘数矩阵存储单元、被乘数矩阵存储单元、结果矩阵存储单元、总线数据接口和内部数据接口,其中:乘数矩阵存储单元与数据地址控制子模块相连传输乘数地址信号,被乘数矩阵存储单元与数据地址控制子模块相连传输被乘数地址信号,结果矩阵存储单元与结果有效控制子模块相连传输结果有效信号,乘数矩阵存储单元分别与总线数据接口和内部数据接口相连传输待运算的乘数信息,被乘数矩阵存储单元分别与总线数据接口和内部数据接口相连传输待运算的被乘数信息,结果矩阵存储单元分别与总线数据接口和内部数据接口相连传输运算结果信息,总线数据接口与外部其他设备相连传输待运算的乘数信息、待运算的被乘数信息和运算结果信息,内部数据接口与乘法器相连传输待运算的乘数信息和待运算的被乘数信息,内部数据接口与定点-浮点转换器相连传输运算结果信息。
本实施例中存储模块由XC4VFX12-10-ffg668芯片的Block-RAM实现。
本实施例的工作过程具体是:
1、复位后实施例装置处于空闲状态;
2、实施例装置等待总线设备将待运算数据写入存储模块;
3、实施例装置等待总线设备将矩阵维数和是否需要转置信息发送给控制管理模块,并给出开始运算信号;
4、控制管理模块收到开始运算信号后,根据矩阵的维数信息,将待运算矩阵拆分成15个行向量或列向量的组合,以向量为单位将数据交由运算模块进行乘加运算;
5、由控制管理模块给出运算使能信号,运算开始后,运算模块不断读入数据,进行乘法累加运算;
6、当一组数据计算完毕以后,输出计算结果,并将累加器清零;
7、运算模块判断是否有新的数据需要计算,如有,则转到运算状态;否则,转到空闲状态;
8、向量运算结束后,控制管理模块发出结果有效信号,控制存储模块写入计算结果;
9、全部运算完成以后,控制管理模块生成运算结束信号,乘法器回复到空闲状态。
当采用现有的FPGA的FPU(Float Process Unit)处理该矩阵乘法要96341时钟周期,而采用本实施例装置则需要8784个时钟周期,并且计算精度可达10-4,又通过对各种维数的矩阵进行对比运算,发现采用本实施例装置比采用FPU计算矩阵乘法的效率普遍高十倍以上。