乘法器累加器电路、用于乘法累加的逻辑瓦片架构和包括逻辑瓦片阵列的IC
文献发布时间:2023-06-19 10:25:58
本非临时申请要求2018年8月31日提交的标题为“Multiplier-AccumulatorCircuit,Logic Tile Architecture for Multiply-Accumulate and IC includingLogic Tile Array”的美国临时申请No.62/725,306的优先权和权益。因此,将'306临时申请的全部内容通过引用合并于此。
这里描述和说明了许多发明。本发明既不限于任何单个方面或其实施例,也不限于这些方面和/或实施例的任何组合和/或排列。重要的是,本发明的方面和/或其实施例中的每一个可以单独使用,或者可以与本发明的一个或多个其它方面和/或其实施例的组合使用。
在一个方面中,本发明针对乘法器累加器电路系统以及用于操作这种电路系统的技术。在一个实施例中,本发明的乘法器累加器电路系统包括促进乘法和累加运算的流水线的多个分开的乘法器累加器电路和多个寄存器(包括多个影子寄存器)。此外,乘法器累加器电路系统进一步促进了乘法和累加运算的级联,从而允许多个乘法器累加器电路系统更快地执行这种运算。级联的程度或长度(即,互连以实现或执行乘法和累加运算的乘法器累加器电路的数量)可以例如在原位(即,在集成电路的操作期间)进行调整(即,增加或减少),例如以满足系统要求或约束(例如,系统性能的基于时间的要求)。
在另一个方面中,本发明针对具有多个乘法器累加器电路的集成电路以及用于操作这种电路的技术。在一个实施例中,集成电路是现场可编程门阵列(FPGA)或嵌入式FPGA(在本文中统称为“FPGA”)。简要地说,FPGA是由用户、操作员、客户和/或设计师在制造之前和/或之后配置和/或重新配置(在下文中,除非另有说明,否则统称为“配置”等(例如,“配置”和“可配置”))的集成电路。FPGA可以包括可编程逻辑组件(通常称为“逻辑单元”、“可配置逻辑块”(CLB)、“逻辑阵列块”(LAB)或“逻辑瓦片”—在下文中统称为“逻辑瓦片”))。在本发明的一个实施例中,一个或多个(或全部)逻辑瓦片包括多个乘法器累加器电路,以例如以流水线方式实现乘法和累加运算。此外,一个或多个(或全部)逻辑瓦片还可以包括开关互连网络(可以例如被配置为分层和/或网状互连网络)、相关联的数据存储元件、输入引脚和/查找表(LUT),当被编程时,它们确定开关/多路复用器的配置和/或运算,以及除其它外确定逻辑瓦片内的电路系统(例如,逻辑组件)之间和/或多个逻辑瓦片的电路系统之间的通信。
一个或多个(或全部)逻辑瓦片中的乘法器累加器电路还可以以级联架构连接和配置,以促进级联乘法和累加运算,从而允许多个乘法器累加器电路系统更迅速地执行这些运算。实际上,在一个实施例中,集成电路包括如上所述的乘法器累加器电路系统等—即,促进乘法和累加运算的流水线的多个分开的乘法器累加器电路和多个寄存器(包括多个影子寄存器)。
此外,在一个实施例中,除了串联连接(级联架构)之外,多个乘法器累加器电路被组织成多行,每行包括多个乘法器累加器电路。乘法器累加器电路的行可以连接或断开以调整级联的程度或长度(即,增加或减少互连以执行乘法和累加运算的乘法器累加器电路的数量)。
在一个实施例中,开关互连网络直接连接到乘法器累加器电路的每一行中的至少一个乘法器累加器电路,以除其它外提供以下灵活性:配置、调整、修改和/或改变(i)被采用和/或互连以实现或执行乘法和累加运算的乘法器累加器电路(和/或乘法器累加器电路的行)和/或(ii)被采用和/或互连以执行乘法和累加运算的乘法器累加器电路的数量。如上所述,可以例如原位(即,在集成电路的操作期间)实现这样的配置、选择、修改和/或调整,以例如满足或超过基于时间的系统要求或约束。
在一个实施例中,开关互连网络可以促进将权重数据传送到被采用以存储这种数据以供乘法器累加器电路访问和使用的存储器。在一个实施例中,开关互连网络可以促进将权重数据传送到乘法器累加器电路的存储器以用于乘法运算。此外,开关互连网络可以提供至/自相关联的逻辑瓦片的逻辑电路系统的导管,或者提供至/自乘法器累加器电路的行的(单独的)乘法器累加器电路的不同逻辑瓦片的导管。这样的导管可以是可配置的和/或可重新配置的—例如,原位(即,在集成电路的正常运算期间)和/或在上电、启动、初始化、重新初始化、配置、重新配置等时或期间。
值得注意的是,集成电路可以是例如处理器、控制器、状态机、门阵列、片上系统(SOC)、可编程门阵列(PGA)和/或FPGA。
如上所提及的,本文描述和说明了许多发明。本发明既不限于任何单个方面或其实施例,也不限于这些方面和/或实施例的任何组合和/或排列。此外,本发明的方面和/或其实施例中的每一个可以单独采用,或者可以与本发明的一个或多个其它方面和/或其实施例的组合使用。为了简洁起见,在此不单独详细讨论和/或说明某些排列和组合。
附图说明
可以结合其附图中示出的实施例来实现本发明。这些附图示出了本发明的不同方面,并且在适当的地方,在不同附图中示出相似的电路、架构、结构、组件、材料和/或元件的附图标记、术语或名称被类似地标记。应当理解,除具体示出的那些以外,结构、组件、材料和/或元件的各种组合是可预期的,并且在本发明的范围内。
此外,本文描述和说明了许多发明。本发明既不限于任何单个方面或其实施例,也不限于这些方面和/或实施例的任何组合和/或排列。此外,本发明的方面和/或其实施例中的每一个可以单独使用,或者可以与本发明的一个或多个其它方面和/或其实施例组合使用。为了简洁起见,这里不单独讨论和/或说明某些排列和组合。值得注意的是,本文中被描述为“示例性”的实施例或实现方式不应被解释为例如相对于其它实施例或实现方式是优选或有利的;相反,其旨在反映或指示(一个或多个)实施例是(一个或多个)“示例”实施例。
值得注意的是,在附图中描述和/或示出的配置、块/数据宽度、数据路径宽度、带宽、数据长度、值、处理、伪代码、运算和/或算法以及与之相关联的文本是示例性的。实际上,本发明不限于根据例如示例性电路图、逻辑图、框图、功能和/或物理图示出和/或描述的特定的电路图、逻辑图、框图、功能和/或物理图、块/数据宽度、数据路径宽度、带宽、值、处理、伪代码、运算和/或算法。
图1A是根据本发明的某些方面的乘法器累加器电路系统的示例性实施例的示意性电路框图,其中,在该示例性实施例中,乘法器累加器电路系统包括两个乘法器累加器电路—包括乘法器0和累加器0的第一电路以及包括乘法器1和累加器1的第二电路;此外,乘法器累加器电路系统还包括多个影子寄存器(包括影子寄存器0和影子寄存器1),多个影子寄存器存储输入数据,直到输入数据被传输到寄存器(即,分别为寄存器0和1)以供乘法器电路乘法器0和乘法器1分别使用为止;在该示例性实施例中,乘法器累加器电路系统还包括负载/存储寄存器,该负载/存储寄存器在数据移入和移出时促进乘法器累加器电路系统的连续运算(参见,例如,负载/存储影子寄存器A和负载/存储影子寄存器B);值得注意的是,乘法器权重存储在存储器(例如,ROM)中,并且经由提供给乘法器累加器电路系统的地址数据(ADDR)选择性地(相对于与其相关联的输入数据)被提供给乘法器0和乘法器1;乘法器0和乘法器1使用乘法器权重执行乘法运算;在说明性实施例中,乘法器累加器电路系统在本文中有时被标记并且被称为“NMAX”或“2-NMAX”;
图1B是图1A的乘法器累加器电路系统的示例性实施例的根据本发明的某些方面的权重电路的示例性实施例的示意性电路框图;权重数据经由D1_w和D0_w被提供给乘法器累加器电路系统的乘法器电路以执行乘法运算;值得注意的是,在该实施例中,可以经由多个路径/技术(如下所讨论的)将权重数据传输或传送到权重电路,然后经由权重数据选择多路复用器(MUX)将权重数据存储到权重电路的存储器(例如,ROM)中;在一个实施例中,数据可以经由互连网络(WD_I)被输入、传输到权重电路中;在另一个实施例中,数据可以经由本地连接被输入或传输通过相邻/后继的乘法器累加器电路系统(WD_NI/WD_SI),该相邻/后继的乘法器累加器电路系统可以由例如逻辑单元、储器或其它乘法累加器来驱动;
图1C是根据本发明的某些方面的在图1A的乘法器累加器电路系统的示例性实施例中实现的负载/存储寄存器的示例性实施例的示意性电路图;在一个实施例中,负载/存储寄存器促进在数据移入和移出时乘法器累加器电路系统的连续运算(参见,例如,图1A中的负载/存储影子寄存器A和负载/存储影子寄存器B);在该示例性实施例中,负载/存储寄存器允许在“白色”常规寄存器与“阴影”(或“斜线的”—在下文中阴影或斜线的移位寄存器被称为“阴影”移位寄存器)影子移位寄存器之间的数据传输;例如,当乘法器累加器电路系统的乘法和累加运算完成时,输出数据首先存储在“白色”常规寄存器中,其中MAC_ST控制信号然后允许从白色常规寄存器到“阴影”移位寄存器上/中的数据传输;MAC_LD用于将数据从“阴影”移位寄存器传输到“白色”常规寄存器上/中;值得注意的是,MAC_ST和MAC_LD均可能在同一时钟周期内发生,在这种情况下,“白色”常规寄存器和“阴影”移位寄存器中的数据被交换;
图2A示出了根据本发明的某些方面的实施例的乘法器累加电路系统的示例性乘法累加运算(例如,图1A的电路系统的运算)的示例性时序图;值得注意的是,在该实施例中,乘法器累加电路系统以流水线架构配置,其中输入数据被加载或时钟输入到乘法器累加电路系统中,而其它数据被加载或时钟输入或传输到寄存器中以供实现或执行乘法和累加运算的电路系统使用,而将其它数据从乘法累加电路系统存储为输出数据并卸载(即,移位到图1A的输出MAC_SO);上述处理以流水线方式继续进行;在示例性时序图上标识的某些信息(例如,操作数、周期数量和时间量)仅是示例性的(例如,在某些方面,与图1A的乘法器累加器电路系统的示例性架构有关);这些信息决不以任何方式限制本发明的范围;
图2B-图2E各自示出了根据本发明的某些方面的实施例的乘法器累加电路系统的示例性乘法累加运算(例如,图1A的乘法器累加电路系统的运算)的示例性时序图的如图2A中标识的选定部分;
图3示出了根据本发明的某些方面的实施例的具有多个(例如,两个)乘法器累加器电路的多个互连的乘法器累加器电路系统的框图—多个乘法器累加器电路例如是包括乘法器0和累加器0的第一电路以及包括乘法器1和累加器1的第二电路,类似于图1A的实施例,以级联的方式执行/实现乘法和累加运算(参见,例如,图2A和图11A),其中,在该示出的实施例中,每个乘法器累加器电路系统向相继的乘法器累加器电路系统的输入(例如,在输入MAC I-参见,图1A)输出/提供部分完成的运算(例如,在输出MAC O-参见,例如,图1A),以级联的方式将处理推进到完成;值得注意的是,图1A的乘法器累加器电路系统(具有多个(例如,两个)乘法器累加器电路)可以被认为是MAC设计单元,其中,在级联架构中,多个互连的乘法器累加器电路系统被连接以执行/实现乘法和累加运算;在某些配置(原位编程或重新配置)中,随后或之后的乘法器累加器电路(例如,一系列的最后一个乘法器累加器)的输出(例如,MAC_O)被级联回到前一乘法器累加器电路的输入(例如,一系列的第一个乘法器累加器的输入(例如,MAC_I)以完成或实现某种配置的期望的乘法器累加器电路系统;
图4示出了根据本发明的某些方面的示例性集成电路(例如,分立或嵌入式处理器、控制器、状态机、门阵列、SOC、PGA和/或FPGA)的功能框图,该集成电路包括多个乘法器累加器电路,每个乘法器累加器电路实现乘法和累加运算;在一个实施例中,多个乘法器累加器电路(例如,图1A的多个乘法器累加器电路系统)以实现流水线处理和级联架构的方式互连;
图5A示出了根据本发明的某些方面的示例性分立FPGA集成电路或嵌入式FPGA集成电路(例如,包括FPGA和处理器(诸如,数字信号处理器)的集成电路)的功能框图,其中该集成电路包括多个乘法器累加器电路,每个乘法器累加器电路执行乘法和累加运算;在一个实施例中,多个乘法器累加器电路(例如,图1A的多个乘法器累加器电路系统)以实现流水线处理和级联架构的方式互连;在一个实施例中,除了控制电路系统、定时或时钟电路系统和电源电路系统之外,FPGA还包括多个逻辑瓦片;值得注意的是,每个逻辑瓦片可以包括具有两个或更多个输入的电互连以形成开关互连网络(例如,可以被配置为分层和/或网状互连网络)的开关/多路复用器、相关联的数据存储元件、输入引脚和/或查找表(LUT),当被编程时,它们确定开关/多路复用器的操作;在一个实施例中,一个或多个(或全部)逻辑瓦片包括一个或多个计算元件(例如,多个乘法器累加器电路系统—被标记为图5A中的“NMAX行”以及图5B和图5C中所示的逻辑瓦片布局或物理平面布置图中的“NMAX集群”)以及开关互连网络(例如,混合模式互连网络(即,分层开关矩阵互连网络和网状、环形等互连网络(在下文中统称为“网状网络”或“网状互连网络”));
图5B和图5C示出了根据本发明的某些方面的图5A的示例性集成电路的一个或多个(或全部)逻辑瓦片的示例性布局或平面布置图,其中,多个乘法器累加器电路(例如,图1A的多个乘法器累加器电路系统)被标记为“NMAX集群”;值得注意的是,瓦片与瓦片互连被用来电连接到一个或多个逻辑瓦片(例如,物理上与瓦片与瓦片互连相邻定位或设置的逻辑瓦片),并且在一个实施例中,连接一个或多个逻辑瓦片的开关互连网络(例如,连接物理上与瓦片与瓦片互连相邻定位或设置的逻辑瓦片的开关互连网络);此外,在一个实施例中,NMAX集群(即,多个乘法器累加器电路(例如,图1A的多个乘法器累加器电路系统)还连接到互连网络并且因此连接到FPGA的逻辑电路系统和处理器以及其它逻辑瓦片(例如,物理上与NMAX集群相邻定位或设置的逻辑瓦片)的NMAX集群、FPGA的逻辑电路系统和处理器;此外,NMAX集群直接连接到与之相邻设置或定位的存储器;
图5D示出了根据本发明的某些方面的逻辑瓦片(例如,具有图5C的布局的瓦片)的示例性布局或平面布置图,其中,在一个实施例中,逻辑瓦片包括乘法器累加器电路系统、逻辑-存储器和/或DSP内核,并且包括来自数百个可重新配置的构建块(RBB)(包括Kb RAM)的多于一千个LUT(例如,6输入LUT)和数百个I/O块(例如,各自为2输入、2输出);如本文所暗示的,逻辑瓦片可以被“平铺”以形成阵列(例如,像图6A和图6B中的阵列那样),其中逻辑瓦片的开关互连网络经由存储在例如LUT中的数据被互连(例如,经由混合分层网状互连网络的级中的一个的网状网络);值得注意的是,如上所述,本发明不限于根据例如图5B-图5D的示例性物理布局或平面布置图示出和/或实现的特定物理布局或平面布置图;
图6A示出了例如包括控制电路系统、定时或时钟电路系统、电源电路系统和可编程/可配置逻辑电路系统的示例性集成电路的框图表示(可编程/可配置逻辑电路系统包括多个逻辑瓦片,一个、一些或全部逻辑瓦片可以包括被配置为执行组合和/或顺序功能(简单和/或复杂)的晶体管、乘法器累加器电路系统(例如,像本文所描述和示出的包括例如图1A-图1C的乘法器累加器电路系统的电路系统)以及实现用于操作这种乘法器累加器电路系统的技术的电路系统(例如,像本文所描述和示出的包括例如图2A-图2E、图3、图5A-图5D、图7A-图7C、图8、图9、图10和图11A-图11E所暗示的电路系统、时序和架构的电路系统和技术);一个、一些或全部逻辑瓦片还可以包括晶体管和电路系统(例如,可以互连作为具有两个或更多个输入的电互连到开关互连网络中的开关或多路复用器(参见,例如,美国专利9,503,092和美国临时专利申请No.62/735,988中描述和/或说明的互连网络;将该'092专利和'988申请通过引用并入本文)以及连接到例如相关联的数据存储元件、输入引脚和/或查找表,当被编程时,它们确定多路复用器的操作和连接性));值得注意的是,在一个实施例中,可编程/可配置逻辑电路系统的每个逻辑瓦片包括多个多路复用器,这些多路复用器电互连到网络中(例如,分层网络和/或网状、环形等互连网络(在下文中统称为“网状网络”);每个逻辑瓦片的开关互连网络可以经由可配置的网状网络连接到阵列的一个或多个其它逻辑瓦片;实际上,在一个实施例中,混合模式开关互连架构的最高级是网状互连(此处,逻辑瓦片的最高级的多个开关矩阵连接到该逻辑瓦片中的该级的一个或多个开关矩阵以及至少一个其它逻辑瓦片中的最高级(即,网状级)的一个或多个开关矩阵);每个逻辑瓦片中的互连网络的较低级可以实现分层网络;尽管如此,另一个网状网络/级可以实现以替代和替换较低级的一个或多个分层网络;
除其它外,图6B示出了例如示例性FPGA(如上所述,“FPGA”可以是分立或嵌入式FPGA)的多个逻辑瓦片的物理阵列的框图表示,其中,逻辑瓦片的输入/输出(I/O)可以促进逻辑瓦片之间和/或某些逻辑瓦片与可编程/可配置逻辑电路系统外部的电路系统之间的通信;值得注意的是,可编程/可配置逻辑电路系统可以包括多个可编程逻辑瓦片,其中每个逻辑瓦片包括电互连到网络(例如,分层网络和/或网状网络)中的多个多路复用器;值得注意的是,如上所暗示的,每个逻辑瓦片的逻辑瓦片互连网络可以包括布置在经由逻辑瓦片互连而互连到逻辑瓦片互连网络中的多个开关矩阵级或开关矩阵级中的多个开关矩阵(例如,M×N个开关矩阵)(参见,例如,美国专利9,503,092和美国临时专利申请No.62/735,988中描述和/或示出的互连网络)—因此,在一个实施例中,逻辑瓦片可配置为在集成电路的操作期间、在逻辑瓦片内(例如,在计算元件/电路系统之间)以及与FPGA的至少一个其它逻辑瓦片一起通信;
图7A示出了根据本发明的某些方面的包括被标记为“2-NMAX行”的多个乘法器累加器电路(例如,图1A的多个乘法器累加器电路系统)的逻辑瓦片的示例性实施例的某些特征的与图5C的布局相关的示意性电路和框图;在本实施例中,2-NMAX行(即,多个乘法器累加器电路—例如,图1A的多个乘法器累加器电路系统,其中许多术语/信号名称被采用或应用于图7A的示意性电路图)还连接到互连网络,该互连网络(例如,经由NLINX接口连接器的导体单独地或成组地(例如,其中,多个乘法器累加器电路被配置为级联架构(例如,如图3中所示))促进与多个乘法器累加器电路进行接口连接或通信;值得注意的是,在此说明性实施例中,乘法器累加器电路的行中的多个互连的乘法器累加器电路经由行互连直接连接(也就是说,不通过连接或经由互连网络)到相邻行,以促进流水线处理并提供级联架构;在一个实施例中,行互连将第一行乘法器累加器电路的最后一个乘法器累加器电路的输出直接连接到第二行乘法器累加器电路的第一个乘法器累加器电路的输入;除此之外,NLINX接口连接器可以被配置为连接乘法器累加器电路的相邻和/或非相邻行,以促进流水线处理并提供级联架构;例如,NLINX接口连接器的路由选择电路系统(例如,(一个或多个)多路复用器)可以被配置为将一行乘法器累加器电路的最后一个乘法器累加器电路的输出连接到一个或多个不同行(相邻和/或非相邻)的乘法器累加器电路的第一个乘法器累加器电路的输入;如上所述,在一个实施例中,互连网络将多个乘法器累加器电路(例如,图1A的多个乘法器累加器电路系统)连接到逻辑瓦片的逻辑电路系统、其它逻辑瓦片(例如,物理上与多个乘法器累加器电路相邻定位或设置的逻辑瓦片)的电路系统和/或FPGA的电路系统;另外,在此说明性实施例中,NMAX行的乘法器累加器电路直接连接到片上设置的存储器(例如,在乘法器累加器电路的顶行和底行的边缘处与乘法器累加器电路相邻和/或定位—参见,例如,图5B和图5C)以接收例如用于在乘法运算中使用的权重数据;乘法器累加器电路的行接收例如权重数据和/或将这些数据转发到相邻行的乘法器累加器(图1B);值得注意的是,图7A的示意性电路图可以被实现为实现图5A中所示的示例性分立FPGA集成电路或嵌入式FPGA集成电路(例如,包括FPGA和处理器(诸如,数字信号处理器)的集成电路)的功能框图,并且可以经由图5C和图5D中所示的逻辑瓦片的示例性物理布局或平面布置图来实现;
图7B和图7C各自示出了图7A的示例性逻辑瓦片的示意性电路和框图的如图7A中所标识的选定部分;值得注意的是,NLINX接口的NLINX多路复用器可以被配置为互连一个或多个相邻行和/或非相邻行的乘法器累加器电路,其中一行乘法器累加器电路的输出(MAC_O)可以选择性地连接到不同行的乘法器累加器电路的输入(MAC_I);这里,在该说明性实施例中,NLINX接口连接器,并且具体地NLINX多路复用器和NLINX导体可配置为互连乘法器累加器电路的行,从而NLINX多路复用器可以被控制为将一行乘法器累加器电路的最后一个乘法器累加器电路的输出连接到不同行的乘法器累加器电路的第一个乘法器累加器电路的输入;例如,为了避免疑问,如上所述,本发明不限于根据例如图7A-图7C的示例性电路图所示出和/或实现的特定的电路图或框图、布局和/或物理图、块/数据宽度、数据路径宽度、带宽和/或值;例如,尽管将多个乘法器累加器电路描述/示出为乘法器累加器电路的“行”,但是也可以将多个描述为其中多个乘法器累加器电路的布局垂直的乘法器累加器电路的“列”;两者均旨在落入本发明的范围内;
图8示出了根据本发明的一个实施例的某些方面的在例如图7A的逻辑瓦片中示出的例如一行或多行的乘法器累加器电路的例如与乘法器累加器电路相关联的权重/数据存储器的存储器(例如,SRAM)的数据扩展电路系统和地址扩展电路系统的示例性实施例的示意性电路图;值得注意的是,数据扩展电路系统有效地增加了存储器输出的数据(实际上比每个单独的SRAM数据端口宽),从而允许代表乘法器权重的数据并行写入数据到权重/数据SRAM存储体中,从而加快了将适当的数据写入权重/数据SRAM存储体中的操作;地址扩展电路系统减少了用于与逻辑瓦片的互连网络接口的输入/输出引脚/导体;乒乓缓冲器允许使用奇数/偶数读取写入技术/方法来促进同时向SRAM的每个存储体写入数据/从SRAM的每个存储体读取数据,只要读取地址为奇数而写入地址为偶数,或者反之亦然;值得注意的是,在一种实施例或配置中,可以采用地址扩展和数据扩展,诸如,经由地址扩展将数据写入SRAM存储体中,然后从SRAM存储体传输或读取数据,并且经由数据扩展将数据写入乘法累加电路系统的存储器(例如ROM—参见,例如,图1A)中;
图9示出了根据本发明的某些方面的例如一个或多个逻辑瓦片(例如,图5A-图5D、图6A、图6B和图7A-图7C的逻辑瓦片)的多个乘法器累加器电路的示例性配置,可以被配置并重新配置(例如,原位(即,在集成电路的操作期间))以执行预定的乘法累加运算(例如,通常由神经网络执行的运算),预定的乘法累加运算包括被组织/配置为脉动阵列以实现三层卷积(即,运算A、B和C);例如,可以经由每行256个NMAX的两行互连的乘法器累加器电路系统来实现运算A的处理,每行将需要八行的16个2-NMAX行(参见,图7A-图7C);将运算A的结果(参见OUT)求和并可以将其存储在本地存储器中和/或经由逻辑瓦片的互连网络输出到处理电路系统(例如,DSP)以用于进一步的数据处理;可以经由每行256个NMAX的九行互连的乘法器累加器电路系统来实现运算B的处理;将运算B的结果(参见OUT)求和并且也可以将其存储在本地存储器中和/或经由逻辑瓦片的互连网络输出到处理电路系统(例如,DSP)以用于进一步的数据处理;并且可以经由每行256个NMAX的四行互连的乘法器累加器电路系统来实现运算C的处理;可以将运算C的结果(参见OUT)再次存储在本地存储器中和/或经由互连网络输出到处理电路系统(例如,DSP)以用于进一步的数据处理;值得注意的是,图8中所示的配置和脉动阵列是示例性的,并且本发明不限于根据图9中所示的此类示例性运算、配置和/或阵列实现的处理和/或算法;
图10示出了根据本发明的某些方面的直接映射到多个乘法器累加器电路系统的示例性2级4×4全连接层示例性配置;值得注意的是,在一个实施例中,在以神经网络实现本发明的情况下,可以使用推断语言(例如,执行Caffe或TensorFlow模型)来实现乘法器累加器电路系统的配置,包括图10中所示的示例性配置,如图所示;
图11A示出了根据本发明的某些方面的实施例的乘法器累加电路系统的示例性乘法累加运算(例如,图1A的电路系统的运算)的示例性时序图;值得注意的是,在该实施例中,乘法器累加电路系统以流水线架构配置,其中输入数据被加载或时钟输入到乘法器累加电路系统中,而其它数据被加载或时钟输入或传输到寄存器中以供实现或执行乘法和累加运算的电路系统使用,而其它数据作为输出数据从乘法累加电路系统中存储并卸载或输出(即,移位到图1A的输出MAC_SO);上述处理以流水线方式继续进行;在示例性时序图上标识的某些信息(例如,操作数、周期数量和时间量)仅是示例性的(例如,在某些方面,与图1A的乘法器累加器电路系统的示例性架构有关);这些信息决不以任何方式限制本发明的范围;
图11B-图11E各自示出了根据本发明的某些方面的实施例的乘法器累加电路系统的示例性乘法累加运算(例如,图1A的乘法器累加电路系统的运算)的示例性时序图的如图11A中标识的选定部分;值得注意的是,影子寄存器(例如,在乘法器累加器电路系统内—参见图1A)可以用来促进或实现流水线操作;和
图12示出了根据本发明的某些方面的示例性实施例的多个互连的乘法器累加器电路系统的示意性框图(例如,每个乘法器累加器电路系统具有多个(例如,两个)乘法器累加器电路—例如,包括乘法器0和累加器0的第一电路以及包括乘法器1和累加器1的第二电路,类似于图1A的实施例),以级联的方式执行/实现乘法和累加运算(参见,例如,图2A和图11A);在该示出的实施例中,乘法器累加器电路系统向相继的乘法器累加器电路系统的输入(例如,在输入MAC I-参见,图1A)输出/提供部分完成的运算(例如,在输出MAC O-参见,例如,图1A),以级联的方式处理数据,其中,乘法器累加器电路系统X的输出可被配置为输入到前一乘法器累加器电路系统(例如,在该说明性实施例中为乘法器累加器电路系统A);因此,如上所述,随后或之后的乘法器累加器电路(例如,一系列的最后一个乘法器累加器—在此,乘法器累加器电路系统X的乘法器累加器电路)的输出(例如,MAC_O)被级联并应用回到前一乘法器累加器电路的输入(例如,乘法器累加器电路系统A的第一个乘法器累加器电路的输入(例如,MAC_I));在该实施例中,可以控制输入选择电路以从(i)乘法器累加器电路系统X(即,同一环)的乘法器累加器电路或(ii)配置的另一个乘法器累加器电路系统的乘法器累加器电路(例如,同一环或另一个环中的乘法器累加器电路)输入乘法累加数据。
再次,本文描述和说明了许多发明。本发明既不限于任何单个方面或其实施例,也不限于这些方面和/或实施例的任何组合和/或排列。本发明的方面和/或其实施例中的每一个可以单独使用,或者可以与本发明的一个或多个其它方面和/或其实施例的组合使用。为了简洁起见,在本文中未单独讨论或示出许多那些组合和排列。
具体实施方式
在第一方面,本发明涉及乘法器累加器电路系统以及用于操作这种电路系统的技术。在一个实施例中,本发明的乘法器累加器电路系统包括促进乘法和累加运算的流水线的多个分开的乘法器累加器电路和多个寄存器(包括多个影子寄存器)。此外,乘法器累加器电路系统还包括促进实现或并入级联架构的电路系统,由此多个乘法器累加器电路系统将乘法和累加运算级联。以这种方式,多个乘法器累加器电路系统可以更迅速地和/或以更小/更少的数据移动和存储器访问来执行和/或完成这样的运算。值得注意的是,可以例如原位(即,在集成电路的操作期间)修改、改变或调整(即,增加或减少)级联的程度或长度(即,被采用和/或互连以实现或执行乘法和累加运算的乘法器累加器电路的数量),以例如满足系统要求或约束(例如,基于时间的要求)。
在一个实施例中,乘法器累加器电路系统还包括位于累加电路的输出处的负载/存储寄存器(两个互连的寄存器,其中每个寄存器的输出被路由到另一个寄存器的输入),以促进数据正在移入和移出乘法器累加器电路系统时乘法器累加器电路系统的连续操作。以这种方式,乘法器累加器电路系统可以在多个时钟沿上执行运算,从而在连续的流水线基础上完成这种运算。值得注意的是,负载/存储寄存器的负载和存储操作可以在同一时钟周期内发生,在这种情况下,常规寄存器中的数据和影子移位寄存器中的数据被交换。
在另一个方面中,本发明涉及具有多个乘法器累加器电路的集成电路以及用于操作这种电路的技术。例如,在一个实施例中,集成电路是包括多个逻辑瓦片的FPGA—其中一个或多个这样的瓦片包括多个乘法器累加器电路,以例如以流水线方式实现乘法和累加运算。而且,这样的乘法器累加器电路可以进一步促进级联乘法和累加运算,从而允许多个乘法器累加器电路系统更迅速地执行这样的运算。实际上,可以例如原位(即,在集成电路的操作期间)修改、改变或调整(即,增加或减少)级联的程度或长度(即,被采用和/或互连以实现或执行乘法和累加运算的乘法器累加器电路的数量),以例如满足系统要求或约束(例如,基于时间的要求)。
参考图1A,在一个实施例中,示例性乘法器累加器电路系统包括两个分开的乘法器累加器电路—包括乘法器0和累加器0的第一乘法器累加器电路以及包括乘法器1和累加器1的第二乘法器累加器电路。乘法器累加器电路系统还包括多个影子寄存器(包括影子寄存器0和影子寄存器1),这些影子寄存器存储输入数据,直到输入数据被传输到第二组寄存器(即,分别为寄存器0和寄存器1)以供乘法器0和乘法器1使用为止。乘法器权重存储在存储器(例如,ROM)中,并选择性地(相对于与其相关联的输入数据)被提供给乘法器0和乘法器1,以执行或进行乘法运算。值得注意的是,在说明性实施例中,乘法器累加器电路系统有时被标记为“2-NMAX”或“NMAX”。
参考图2A和图2B,在一个实施例中,在操作中,在周期0至周期4期间,最初将输入数据时钟输入到并存储到乘法器累加器电路系统的影子寄存器(即,影子寄存器0和影子寄存器1)中。在周期5上,输入数据被时钟输入、存储或传输到寄存器(即,分别为寄存器0和1)中,以供乘法器0和乘法器1用于执行乘法运算(与存储在与输入数据相关联的存储器中的权重数据有关)。(参见,图2C中的周期6)。此后,每个乘法器的输出被提供给相关联的累加器,并且在新的输入数据和新的权重数据(与这种“新的”输入数据相关联)被传输到乘法器之前,累加加权的输入数据。(参见,与周期6的结束-周期7的开始相对应的时钟沿)。这些处理以流水线方式继续。
在对输入数据进行运算并累加加权的数据之后,可以在数据卸载期间或在数据卸载之后对累加的加权数据执行附加操作(例如,非线性操作、激活功能)。例如,参考图2D,在周期11、12、13和14期间,可以将累积的加权数据应用于附加操作(即,可以实现/采用现在已知或以后开发的任何操作—所有这些都可以意在落入本发明的范围内)。可以在将新的输入数据(从影子寄存器)加载到与乘法器累加器电路系统的乘法电路连接并相关联的寄存器中时以及在输出数据被卸载或输出时执行附加操作。在该实施例中,执行数据加载/输入操作(包括乘法和累加)以及卸载/输出操作并且以这种流水线方式继续。(参见,例如,图2B-图2E)。
值得注意的是,在一个实施例中,示例性乘法器累加器电路系统的架构被组织为允许或以级联方式执行图2A中所示的乘法和累加运算。就这一点而言,乘法器累加器电路系统向连接到第一乘法器累加器电路系统(参见图3)的第二乘法器累加器电路系统(参见图1A)的输入(例如,在输入MAC I处)输出/提供图1C中所示的部分完成的运算(例如,在输出MAC O处)。除此之外或作为代替,乘法器累加器电路系统的输出也可以提供给其它电路系统,例如存储器。也就是说,数据可以在MAC SO输出处输出或移出乘法器累加器电路系统,并且在一个实施例中,可以将由乘法器累加器电路系统生成的输出数据存储在存储器中。
可以使用现在已知或以后开发的任何电路系统和技术将乘法权重的数据存储在与乘法器累加器电路系统相关联的存储器中—所有这些电路系统和技术均旨在落入本发明的范围内。例如,在一个实施例中,可以经由图1B的电路系统将这样的数据存储在多个乘法器累加器电路系统的存储器中。下面将结合其它实施例来讨论图1B的电路系统和运算。
参考图1A和图1C,在一个实施例中,乘法器累加器电路系统包括在数据移入和移出时促进乘法器累加器电路系统的连续运算的负载/存储寄存器。(参见,例如,图1A中的负载/存储影子寄存器A和负载/存储影子寄存器B)。也就是说,负载/存储寄存器允许在“白色”常规寄存器和“阴影”(或“斜线的”)影子移位寄存器之间进行数据传输。在此,当乘法和累加运算完成时,输出数据首先存储在“白色”常规寄存器中。然后,MAC_ST控制信号允许从白色常规寄存器到“阴影”移位寄存器上/中的数据传输。此外,如果“白色”常规寄存器需要被初始化为某个值,则“阴影”移位寄存器可以移入初始化数据,并使用MAC_LD将数据从“阴影”移位寄存器移入“白色”常规寄存器上/中。MAC_ST和MAC_LD均可能在同一时钟周期内发生,在这种情况下,“白色”常规寄存器和“阴影”(影子)移位寄存器中的数据将交换。
值得注意的是,继续参考图1A,可以经由输入MAC SI将数据直接施加/输入到负载/存储影子寄存器A和负载/存储影子寄存器B,其中数据移入“阴影”或“斜线的”移位寄存器中。在此,可以采用旁路电路(包括,例如多路复用器)来旁路某些乘法器累加器电路系统(例如,包括乘法器0和累加器0的乘法器累加器电路),其中输入信号MAC_SI上的数据可以存储在累加器0的输出处的(一个或多个)负载/存储寄存器的“阴影”移位寄存器中。类似地,可以采用旁路电路(例如,多路复用器)来旁路乘法器1和累加器1的乘法器累加器电路系统,其中来自累加器0的输出处的(一个或多个)负载/存储寄存器的“阴影”移位寄存器的数据可以存储在累加器1的输出处的(一个或多个)负载/存储寄存器的“阴影”移位寄存器中。在一个实施例中,数据(例如,初始化数据)可以被移位到寄存器中,并且经由施加MAC_LD控制信号,这种数据可以从“阴影”(影子)移位寄存器将数据传输到“白色”常规寄存器上/中以供乘法器累加器电路系统使用或实现为乘法器累加器电路系统。在一个实施例中,然后可以经由旁路电路将存储在(一个或多个)负载/存储寄存器(即,在该说明性实施例中为负载/存储影子寄存器B)中的数据输出到例如相继的乘法器累加器电路系统,其中多个乘法器累加器电路系统以级联架构或配置互连。(参见,例如,图3)。乘法器累加器电路系统此后可以执行包括乘法和累加运算的运算,如本文所述。
在另一个方面中,本发明针对具有多个逻辑瓦片的集成电路—其中一个或多个(或全部)这样的瓦片包括多个乘法器累加器电路(例如,图1A-图1C中所示的乘法器累加器电路系统—即,促进乘法和累加运算的流水线的多个分开的乘法器累加器电路和多个寄存器(包括多个影子寄存器)),以例如以流水线方式(即,采用流水线处理技术)实现乘法和累加运算。(参见,例如,图4)。在一个实施例中,集成电路是或包括耦合到和/或包括多个乘法器累加器电路系统(标记为“NMAX行”)的FPGA(如上所述,“FPGA”在本文中意指分立FPGA或嵌入式FPGA)。(参见,例如,图5A)。乘法器累加器电路系统可以按行和/或列组织(在下文中统称为“行”或“行”)。即,在一个实施例中,多个乘法器累加器电路被串联连接(级联架构)并且被组织成多行,每行包括多个乘法器累加器电路。如下所详细讨论的,乘法器累加器电路的行可以连接或断开以调整级联的程度或长度(即,增加或减少互连以执行乘法和累加运算的乘法器累加器电路的数量)。
值得注意的是,集成电路可以包括在运算期间(例如,在FPGA和/或乘法器累加器电路系统的数据处理期间/用于数据处理)使用的“本地”存储器(例如,SRAM、DRAM、MRAM、ROM和/或闪存存储器)。(参见,例如,图4和图5A)。
在一个实施例中,集成电路的FPGA部分包括多个逻辑瓦片。(参见,例如,图6A和图6B)。FPGA还可以包括控制电路系统、定时或时钟电路系统以及电源电路系统。在一个实施例中,每个逻辑瓦片可以包括具有两个或更多个输入的多个多路复用器,所述多个多路复用器被电互连以形成开关互连网络(例如,可以被配置为分层和/或网状互连网络)以及连接到例如相关联的数据存储元件、输入引脚和/或查找表(LUT),当被编程时,它们确定多路复用器的操作)。
参考图5B、图5C和图5D,一个或多个(或全部)逻辑瓦片还可以包括一个或多个计算元件(例如,多个乘法器累加器电路—诸如,例如,如图3中所示地互连的图1A的多个乘法器累加器电路系统)。(参见在图5B和图5C中所示的逻辑瓦片布局或物理平面布置图中标记为“NMAX集群”的区域)。如上所述,互连网络(例如,混合模式互连网络(即,分层开关矩阵互连网络和网状、环形等的互连网络(在下文中统称为“网状网络”或“网状互连网络”))。例如,参考图5D,在一个实施例中,每个逻辑瓦片可以包括乘法器累加器电路系统、逻辑存储器和/或DSP内核,并且包含来自数百个可重新配置的构建块(RBB)(包括Kb RAM)的多于一千个LUT(例如,6输入LUT)和数百个I/O块(例如,各自为2输入、2输出)。如上所述,逻辑瓦片可以被“平铺”以由例如LUT形成阵列。
在一个实施例中,每个逻辑瓦片的开关互连网络可以包括布置在互连到分层互连网络中的多个开关矩阵级或开关矩阵级中的多个开关矩阵(例如,M×N开关矩阵)。(参见,例如,在美国专利9,503,092中描述和/或示出的互连网络,该美国专利通过引用并入本文)。在一个实施例中,开关互连网络直接连接到乘法器累加器电路的每一行中的至少一个乘法器累加器电路,以除其它外提供以下灵活性:配置、调整、修改和/或改变(i)被采用和/或互连以实现或执行乘法和累加运算的乘法器累加器电路(和/或乘法器累加器电路的行)和/或(ii)被采用和/或互连以执行乘法和累加运算的乘法器累加器电路的数量。如上所述,可以例如原位(即,在集成电路的操作期间)实现这样的配置、选择、修改和/或调整,以例如满足或超过系统要求或约束。
逻辑瓦片的开关互连网络还可以经由瓦片与瓦片互连网络(例如,网状互连网络,其中多个瓦片与瓦片互连在例如逻辑瓦片的一个或多个开关矩阵和逻辑瓦片的互连网络之间提供通信)的瓦片与瓦片互连来进行互连。这样,逻辑瓦片可配置为在集成电路的操作期间与逻辑瓦片内的计算元件(例如,多个乘法器累加器电路系统)以及与FPGA的至少一个其它逻辑瓦片进行通信(例如,提供/接收数据和地址以及提供控制信息)。此外,这些逻辑瓦片可配置为互连同一逻辑瓦片和/或不同的逻辑瓦片中或内部的计算元件(例如,(i)处理器电路系统(例如,一个或多个数字信号处理器(DSP))和(ii)多个乘法器累加器电路系统)以及集成电路的FPGA。
参考图5C、图5D和图7A-图7C,如上所提及的,集成电路的FPGA的一个或多个(或全部)逻辑瓦片包括作为乘法器累加器电路系统(例如,如上所述和如图1A-图1C中所示的乘法器累加器电路系统)的多个乘法器累加器电路(标记为“NMAX行”或“NMAX集群”)。在这些示例性实施例中,多个乘法器累加器电路如图3中所示地连接在一起,以提供乘法器累加器电路系统的行。乘法器累加器电路系统的行设置并连接在权重/数据存储器(例如,SRAM存储器存储体—参见图5B和图5C)之间。在一个实施例中,权重/数据存储器存储代表在多个乘法器累加器电路系统的乘法运算中采用的乘法器权重数据的数据。在一个实施例中,权重/数据存储器可以经由互连网络接收代表乘法器权重的数据。即,在一个实施例中,控制电路系统经由互连网络管理/控制将代表乘法器权重的数据写入权重/数据存储器(例如,SRAM存储器存储体)中。此后,可以将乘法器权重数据写入乘法器累加器电路系统的存储器(例如,ROM)中,该乘法器累加器电路系统选择性地将权重数据(相对于与之相关联的输入数据)提供给乘法器0和乘法器1(可以视情况而定)以执行乘法运算(参见图1A)。
继续参考图5C、图5D和图7A-图7C,在另一个实施例中,权重/数据存储器可以经由互连网络接收代表输入数据的数据。这些数据可以被从例如外部存储器(例如,DRAM)或其它片上存储器(即,在集成电路中/上设置或制造的存储器(例如,片上SRAM))读取、提供或到达。实际上,在另一个实施例中,权重/数据存储器可以接收和存储来自一个或多个NMAX集群(例如,来自NMAX电路系统(诸如来自多个逻辑瓦片中的相关联/同一逻辑瓦片或不同逻辑瓦片的其它NMAX电路系统)的输出数据)或另一组NMAX集群(诸如来自多个逻辑瓦片中的相关联/同一逻辑瓦片或不同逻辑瓦片的另一个NMAX集群)的数据。在任一实施例中,输入数据被移位到NMAX电路系统或NMAX集群的数据输入(例如,图1A的D0_I或D1_I端口)中。可以经由逻辑瓦片的互连网络在例如同一或不同逻辑瓦片的NMAX电路系统之间提供这种连接。
在又另一个实施例中,权重/数据存储器可以经由互连网络接收代表部分累加的MAC数据的数据。这样的数据可以从例如外部存储器(例如,DRAM)、另一片上存储器(例如,片上SRAM)或者一个或多个其它NMAX电路系统或NMAX集群(即,另一组NMAX集群)的输出到达/被提供。此后,部分累加的MAC数据被移入NMAX集群的MAC影子寄存器输入(例如,图1A的MAC_SI端口)中以将那些NMAX集群中的NMAX电路系统的MAC处理操作初始化为部分累加的MAC数据,以继续乘法和累加处理或运算。在一个实施例中,经由逻辑瓦片的开关互连网络来提供/建立这种连接。
值得注意的是,在一个实施例中,其中权重/数据存储器包括SRAM存储器存储体,采用修改的寻址电路系统和技术将数据写入SRAM中可能是有利的。参考图8,用于寻址SRAM的技术可以包括(除了SRAM中的寻址电路系统之外)促进经由数据扩展技术和地址扩展技术写入更多的SRAM的电路系统。通过数据扩展,SRAM比每个单独的SRAM数据端口实际上更宽,从而允许代表乘法器权重的数据并行将数据写入权重/数据SRAM存储体(例如,图8中的Q0和Q8是32位数据接口,每个接口可以同时写入2个SRAM)中,从而加快了将适当的数据写入权重/数据SRAM存储体中的操作。通过将一个地址应用于SRAM地址扩展电路系统,地址扩展允许访问单独的SRAM存储体,而无需为每个SRAM存储体单独寻址(例如,图8中的SRAM12、13、14、15共享公共输出数据Q8[31:16],并共享公共输入数据D8[31:16],但是它们经由XA[11]和XA[12]单独地可寻址),多个SRAM存储体作为单个“更深的”SRAM存储体行动、起作用或操作。实际上,实施地址扩展减少了用于与互连网络接口的输入/输出引脚/导体(例如,图8中的SRAM8、9、10、11、12、13、14和15共享一组输入和输出数据端口(D8,Q8)和一组控制输入(WA8,XA8,WE8,CE8,SLP8,SD8))。此外,乒乓缓冲器允许使用奇数/偶数读取写入技术/方法以促进同时向SRAM的每个存储体写入数据/从SRAM的每个存储体读取数据,只要读取地址为奇数且写入地址为偶数即可,或者反之亦然。
可以使用现在已知或以后开发的任何电路系统和技术将乘法权重的数据存储在与乘法器累加器电路系统相关联的存储器中—所有这些都旨在落入本发明的范围内。如上所提及的,在一个实施例中,这样的数据可以存储在采用图1B中所示的电路系统的多个乘法器累加器电路系统的存储器中。简要地说,并且参考图1B、图5C和图7C,可以直接经由连接到输入WD_I的相关联的互连网络或经由连接到输入WD Nl和/或WD SI的权重/数据存储器(例如,SRAM存储器存储体)将权重数据写入与乘法器累加器电路系统相关联的存储器(例如,ROM)中。乘法器累加器电路系统中的权重数据选择多路复用器(MUX)确定选择/启用哪个输入(即,连接到多路复用器的输出)并由此提供给存储器,以促进将数据写入乘法器累加器电路系统的存储器(例如,ROM)中。
其中在经由输入WD I直接写入每个乘法器累加器电路系统的存储器(例如,ROM)的情况下,互连网络经由NLINX接口连接器的WD_I连接到输入WD I,以通过移入数据直接和串行/顺序地将数据写入每个乘法器累加器电路系统的存储器。在一个实施例中,NLINX接口连接器包括用于每两行2-NMAX乘法器累加器电路系统的WD_I连接/输出,以连接到与两行2-NMAX乘法器累加器电路系统的每个乘法器累加器电路系统相关联的WD I信号线。(参见,图7A-图7C)。
但是,其中经由信号线WD NI和/或WD IS将权重数据从设置在每个乘法器累加器电路系统中的存储器之间并且连接到每个乘法器累加器电路系统中的存储器的权重/数据存储器(例如,SRAM存储器存储体)写入乘法器累加器电路系统的行中,存储器并行地将数据写入每行乘法器累加器电路系统中的每个乘法器累加器电路系统的存储器(例如,ROM)中。每行乘法器累加器电路系统的权重数据可以被串行/顺序写入。这样,在此实施例中将权重数据写入乘法器累加器电路系统的行中的时间可能比经由NLINX接口连接器的WD_I从相关联的逻辑瓦片互连网络到每行乘法器累加器电路系统的输入WD I的直接和串行/顺序写入操作的时间要快得多。
如上所述,在一个实施例中,逻辑电路系统(例如,一个或多个计算元件,诸如,例如处理器电路(例如,数据处理器或数字信号处理器)、控制器电路、加速器、数据加密引擎、滤波器、编码器、状态机和/或组合逻辑电路)与权重/数据存储器(例如,SRAM存储器存储体)相邻定位并且在权重/数据存储器与I/O电路系统之间。(参见,例如,图5C和图7A-图7C)。计算元件可以被配置为连接到逻辑瓦片的互连网络(例如,分层互连网络和/或混合模式互连网络,美国专利9,503,092)。逻辑瓦片的互连网络可以经由瓦片与瓦片互连网络(例如,网状互连网络)的瓦片与瓦片互连将逻辑瓦片的计算元件连接到其它逻辑瓦片中的计算元件或其它电路系统。在此,瓦片互连网络经由瓦片与瓦片互连网络连接到其它逻辑瓦片(例如,例如逻辑瓦片的阵列的相邻逻辑瓦片,参见,例如,图5B、图5C和图6B)的互连网络,瓦片与瓦片互连网络提供或促进到多个逻辑瓦片(例如,可以布置在一行或多个行和/或列的阵列中)的其它逻辑瓦片(例如,布置在其中的电路系统(例如,一个或多个计算元件))的可配置或可重新配置的通信/连接。
参考图5B和图5C,在一个实施例中,逻辑瓦片的互连网络设置在逻辑瓦片的中心或书脊中,并且瓦片与瓦片互连被示出为设置在逻辑瓦片的边缘上的双箭头线(I/O或I/O电路系统中所示并相应标记的双箭头线除外)。
值得注意的是,I/O电路系统设置在边缘上,以促进与逻辑瓦片(或逻辑瓦片的阵列)外部的电路系统的可配置或可重新配置的连接,诸如,例如,与集成电路的片上系统(SOC)的电路系统、外部存储器接口电路系统(例如,DRAM接口)和/或设置在逻辑瓦片之间的一个或多个存储器块的连接(参见,例如,美国专利9,973,194,该美国专利通过引用并入本文)。
如上所述,参考图7A-图7C,在一个实施例中,多个乘法器累加器电路系统被组织和/或配置为互连的乘法器累加器电路系统的行。在该实施例中,每行乘法器累加器电路系统(由多个互连的乘法器累加器电路组成)经由行互连而连接到另一行的多个乘法器累加器电路系统,由此一行乘法器累加器电路系统的某些输出连接到并且应用作为第二行的多个互连的乘法器累加器电路系统的输入。例如,另外参考图1A和图3,第一行的互连的乘法器累加器电路系统的最后一个乘法器累加器电路系统的MAC O连接到第二行的互连的乘法器累加器电路系统中的第一个乘法器累加器电路系统的MAC I。行互连还包括例如图1A中所示的实施例的互连的乘法器累加器电路系统的其它输出/输入。在图7A-图7C的详细示出的示例性实施例中,两行的乘法器累加器电路系统(经由行互连而互连)由32块2-NMAX乘法器累加器电路系统(例如,像图1A中所示的那样)组成。
在一个实施例中,可以例如原位(即,在集成电路的操作期间)调整(即,增加或减少)级联的程度或长度(即,互连以实现或执行乘法和累加运算的乘法器累加器电路的数量)。例如,参考图7A-图7C,在一个实施例中,多于两行的乘法器累加器电路系统可以互连,以提供更长或更大数量或更多串的互连的乘法器累加器电路系统。例如,第二行的乘法器累加器电路系统(参见图7C中的2-NMAX行B)可以进一步经由NLINX接口连接器的NLINX多路复用器和导体连接到第三行的乘法器累加器电路系统(参见图7C中的2-NMAX行C)。而且,NLINX接口的NLINX多路复用器和导体可以被配置为互连一个或多个相邻和/或非相邻行的乘法器累加器电路。例如,一行乘法器累加器电路的输出(参见图7C中的行D的MAC_O)可以选择性地连接到非相邻行的乘法器累加器电路的输入(参见图7C中的行A的MAC_I)。这样,NLINX接口连接器,具体地此说明性实施例中的NLINX多路复用器,可配置为互连乘法器累加器电路的行,其中NLINX多路复用器可控地将一行乘法器累加器电路的最后一个乘法器累加器电路的输出连接到一个或多个不同行的乘法器累加器电路的第一个乘法器累加器电路的输入。
另外,NLINX接口连接器的NLINX多路复用器和导体可以被配置为连接相邻行的乘法器累加器电路,其中一行乘法器累加器电路的输出(参见图7C中的行D的MAC_O)可以经由其间设置的NLINX多路复用器选择性地连接到相邻行的乘法器累加器电路的输入(参见图7C中的行C的MAC_I)。这样,在一个实施例中,第三行的乘法器累加器电路系统经由行互连而连接到第四行的乘法器累加器电路系统(参见图7C中的2-NMAX行D),以实现甚至更长或更大串的互连的乘法器累加器电路系统(即,增加互连以实现或执行乘法和累加运算的乘法器累加器电路的数量),以及第四行的乘法器累加器电路系统的输出(参见图7C中的2-NMAX行D)可以经由NLINX接口(在图7A-图7C的该说明性实施例中,NLINX接口连接器的NLINX多路复用器和导体)连接到相邻或非相邻行的乘法器累加器电路的输入(参见图7C中的2-NMAX行A和/或行C)。
因此,在一个实施例中,开关互连网络连接到每行乘法器累加器电路中的至少一个乘法器累加器电路,以除其它外提供以下灵活性:配置、调整、修改和/或改变(i)被采用和/或互连以实现或执行乘法和累加运算的乘法器累加器电路(和/或乘法器累加器电路的行)和/或(ii)被采用和/或互连以执行乘法和累加运算的乘法器累加器电路的数量。在一个实施例中,配置电路系统例如经由多路复用器/开关来配置开关互连网络(在该说明性实施例中为NLINX接口连接器)的各方面的互连,以采用或实现特定数量和配置的乘法器累加器电路(和/或乘法器累加器电路的行)。该配置、选择、修改和/或调整可以例如原位(即,在集成电路的操作期间)实现,以例如执行或提供特定的操作和/或满足或超过系统要求或约束(例如,基于时间的要求或约束)。(参见,例如,图9)。
值得注意的是,可以互连任何数量的互连的乘法器累加器电路,以实现或执行级联的乘法和累加运算。在图7A-图7C中所示的实施例的上下文中,可以连接任何数量的行的乘法器累加器电路系统(即,两个、三个、四个等)以实现或执行级联的乘法和累加运算。事实上,在一个实施例中,逻辑瓦片中的全部乘法器累加器电路系统(参见,例如,图5B-图5D和图7A)可以经由NLINX接口连接器和行互连而连接在一起以形成乘法器累加器电路系统的完整“环”。再次,尽管前述讨论有时集中于连接乘法器累加器电路系统的行,但应注意,在一个实施例中,可以互连任何数量的互连的乘法器累加器电路系统以提供逻辑瓦片的期望配置(即,互连多个乘法器累加器电路系统(参见,例如,图3)—也就是说,在一个实施例中,可以互连逻辑瓦片中的从两个乘法器累加器电路系统到全部乘法器累加器电路系统的任何数量以实现或执行级联的乘法和累加运算)。
逻辑瓦片的多个乘法器累加器电路系统可以被配置和重新配置(例如,原位)以执行预定的乘法累加运算(例如,通常由神经网络执行的运算)。在一个实施例中,多个逻辑瓦片的多个乘法器累加器电路系统可以被配置为执行卷积(即,3D运算(W×H×Din×Dout))。例如,参考图9,在一个实施例中,逻辑瓦片的多个乘法器累加器电路系统可以被组织/配置为脉动阵列以实现三层卷积。简要地说,可以经由每行256个NMAX的两行互连的乘法器累加器电路系统来实现运算A的处理,每行将需要八行的16个2-NMAX行(参见,图7A-图7C)。将运算A的结果(参见OUT)求和并可以将其存储在本地存储器中和/或经由互连网络输出到处理电路系统(例如,DSP)以用于进一步的数据处理。可以经由每行256个NMAX的9行互连的乘法器累加器电路系统来实现运算B的处理。将运算B的结果(参见OUT)求和并且也可以将其存储在本地存储器中和/或经由互连网络输出到处理电路系统(例如,DSP)以用于进一步的数据处理。可以经由每行256个NMAX的4行互连的乘法器累加器电路系统来实现运算C的处理。可以将运算C的结果(参见OUT)再次存储在本地存储器中和/或经由互连网络输出到处理电路系统(例如,DSP)以用于进一步的数据处理。
在一个实施例中,采用开关互连网络以除其它外提供以下灵活性:配置、调整、修改和/或改变(i)被采用和/或互连以实现或执行乘法和累加运算的乘法器累加器电路(和/或乘法器累加器电路的行)和/或(ii)被采用和/或互连以执行乘法和累加运算的乘法器累加器电路的数量。该配置、选择、修改和/或调整可以例如原位(即,在集成电路的操作期间)实现。
值得注意的是,图9中所示的运算、配置和脉动阵列是示例性的。本发明不限于根据这样的示例性运算、配置和/或阵列实现的处理和/或算法,而是旨在除其它外覆盖现在已知或以后开发的任何运算、配置和/或阵列。
在神经网络的情况下,采用使用推理语言(例如,Caffe或TF)对乘法器累加器电路系统的配置进行编程可能是有利的。例如,参考图10,在一个实施例中,2级4×4全连接层的示例性配置直接映射到本发明的乘法器累加器电路系统和架构。FPGA的可配置和可重新配置逻辑促进实现所采用的控制逻辑(例如,加载/卸载和数据路径控制)。
本文描述和示出了许多发明。尽管已经描述和示出了本发明的某些实施例、特征、属性和优点,但是应当理解,本发明的许多其它以及不同和/或相似的实施例、特征、属性和优点从本说明和图示中将是清楚的。这样,本文描述和示出的本发明的实施例、特征、属性和优点不是穷举的,并且应当理解,本发明的这些其它的、相似的以及不同的实施例、特征、属性和优点也在本发明的范围内。
例如,乘法器累加器电路系统的各级可以更完整地流水线化和/或写入存储器。(参见,例如,图11A-图11E)。再次在这里,影子寄存器(例如,在乘法器累加器电路系统内—参见图1A)被用来促进或实现流水线操作。
而且,乘法器累加器电路系统可以被配置和/或重新配置(例如,在启动时和/或原位)以实现利用现在已知或以后开发的乘法和累加运算的任何功能。例如,在一个实施例中,电路系统的乘法器累加器电路的输出可以连接到一系列电路系统中的较早的乘法器累加器电路的输入。例如,参考图12,多个互连的乘法器累加器电路系统(例如,各自具有多个(例如,两个)乘法器累加器电路—例如包括乘法器0和累加器0的第一电路以及包括乘法器1和累加器1的第二电路,像图1A的实施例中那样)可以串联连接,以级联的方式执行/实现乘法和累加运算(参见,例如,图2A和图11A)。在此,乘法器累加器电路系统向相继的乘法器累加器电路系统的输入(例如,在输入MAC I-参见,图1A)输出/提供部分完成的运算(例如,在输出MAC O-参见,例如,图1A),以级联的方式处理数据,其中,乘法器累加器电路系统X的输出可配置为(经由输入选择电路的控制)施加或输入到前一乘法器累加器电路系统A(在图12中,乘法器累加器电路系统A的乘法器累加器电路(例如,MAC_I))。因此,随后或之后的乘法器累加器电路(例如,一系列的最后一个乘法器累加器—在此,乘法器累加器电路系统X的乘法器累加器电路)的输出被级联回到前一乘法器累加器电路(例如,乘法器累加器电路系统A的第一个乘法器累加器电路(例如,MAC_I))的输入以实现乘法器累加器电路系统配置。
继续参考图12,乘法器累加器电路系统可以被配置和/或重新配置,以使得乘法器累加器电路系统可以经由输入选择电路(例如,多路复用器)的控制从(i)乘法器累加器电路系统X(即,同一环)的乘法器累加器电路或(ii)配置的另一个乘法器累加器电路系统的乘法器累加器电路(例如,同一环或另一个环中的乘法器累加器电路)接收乘法累加数据。所有的组合和排列都意图落入本发明的范围内。
值得注意的是,多个乘法器累加器电路系统的系列的配置、选择、修改和/或调整可以例如原位(即,在集成电路的操作期间)实现,以例如执行或提供特定的操作和/或满足或超过系统要求或约束(例如,基于时间的要求或约束)。(参见,例如图9)。
重要的是,本发明既不限于任何单个方面或其实施例,也不限于这些方面和/或实施例的任何组合和/或排列。而且,本发明的方面和/或其实施例中的每一个可以单独使用,或者可以与本发明的一个或多个其它方面和/或其实施例结合使用。
此外,尽管在某些实施例中将存储器单元示出为静态存储器单元或存储元件,但是本发明可以采用动态或静态存储器单元或存储元件。实际上,如上所述,这样的存储器单元可以是锁存器、触发器或任何其它静态/动态存储器单元或现在已知或以后开发的存储器单元电路或存储元件。
值得注意的是,本文公开的各种电路、电路系统和技术可以使用计算机辅助设计工具进行描述,并根据其行为、寄存器传输、逻辑组件、晶体管、布局几何形状和/或其它特性表达为(或表示为)各种计算机可读介质中体现的数据和/或指令。可以实现此类电路、电路系统、布局和路由表达式的文件和其它对象的格式包括但不限于支持行为语言(诸如C、Verilog和HLDL)的格式、支持寄存器级描述语言(如RTL)的格式和支持几何描述语言(诸如GDSII、GDSIII、GDSIV、CIF、MEBES)的格式以及现在已知或以后开发的任何其它格式和/或语言。可以体现这种格式化的数据和/或指令的计算机可读介质包括但不限于各种形式的非易失性存储介质(例如,光、磁或半导体存储介质)以及可以用于通过无线、光或有线信令介质或其任何组合来传输此类格式化的数据和/或指令的载波。通过载波进行的这种格式化的数据和/或指令的传输的示例包括但不限于经由一个或多个数据传输协议(例如,HTTP、FTP、SMTP等)在互联网和/或其它计算机网络上的传输(上载、下载、电子邮件等)。
实际上,当在计算机系统内经由一个或多个计算机可读介质接收时,上述电路的基于此类数据和/或指令的表达式可以由计算机系统内的处理实体(例如,一个或多个处理器)结合一个或多个其它计算机程序的执行进行处理以生成这种电路的物理表现形式的表示或图像,一个或多个其它计算机程序包括但不限于网表生成程序、布局和布线程序等。例如,通过使得能够生成用于在装置制造处理中形成电路的各种组件的一个或多个掩模,这种表示或图像可以随后在装置制造中使用。
而且,本文公开的各种电路、电路系统和技术可以使用计算机辅助设计和/或测试工具通过仿真来表示。可以通过计算机系统来实现对由此实现的电路、电路系统、布局和布线和/或技术的仿真,其中,可以通过计算机系统模仿、复制和/或预测由此实现的这种电路、电路系统、布局和技术的特性和操作。本发明还针对由此实现的发明性电路、电路系统和/或技术的这种仿真,并且因此旨在落入本发明的范围内。对应于这样的仿真和/或测试工具的计算机可读介质也意图落入本发明的范围内。
值得注意的是,本文中对“一个实施例”或“实施例”(等)的引用意味着结合该实施例描述的特定特征、结构或特性可以被包括、采用和/或结合在本发明的实施例中的一个、一些或全部中。说明书中的短语“在一个实施例中”或“在另一个实施例中”(等)的用法或出现不是指相同的实施例,也不是必须相互排斥一个或多个其它实施例的分离或替代实施例,也不限于单个排他的实施例。这同样适用于术语“实现方式”。本发明既不限于任何单个方面或其实施例,也不限于这些方面和/或实施例的任何组合和/或排列。而且,本发明的方面和/或其实施例中的每一个可以单独使用,或者可以与本发明的一个或多个其它方面和/或其实施例结合使用。为了简洁起见,本文不分开讨论和/或示出某些排列和组合。
此外,如上所述,本文描述为“示例性”的实施例或实现方式不应被解释为例如相对于其它实施例或实现方式而言是理想的、优选的或有利的;相反,旨在传达或指示一个或多个实施例是(一个或多个)示例实施例。
尽管已经在某些具体方面描述了本发明,但是许多另外的修改和变化对于本领域技术人员将是清楚的。因此,应当理解,在不脱离本发明的范围和精神的情况下,可以以不同于具体描述的方式来实践本发明。因此,本发明的实施例在所有方面都应被认为是说明性/示例性而非限制性的。
在权利要求书中以及其它地方,术语“包含”、“包含有”、“包括”、“包括有”、“具有”和“有”或其任何其它变型旨在覆盖非排他性包括,以使得包括/包含元件、组件、步骤(等)的列表的处理、方法、电路、物品、集成电路或设备不仅仅包括那些元件、组件、步骤(等),还可以包括这些处理、方法、电路、物品、集成电路或设备未明确列出或固有的其它元件、组件、步骤(等)。此外,在权利要求书中,在整个文档中术语“连接”、“被连接”、“连接到”或“连接”的使用应广义地解释为包括直接或间接(例如,经由一个或多个导体和/或中间装置/元件(有源或无源)和/或经由电感或电容耦合)),除非另有说明(例如,使用术语“直接连接”或“被直接连接”)。
在权利要求书中以及其它地方,本文中的术语“一”和“一个”不表示数量限制,而是表示存在至少一个所引用的项目。此外,术语“第一”、“第二”等在本文中不表示任何次序、数量或重要性,而是用于将一个元件与另一个元件区分开。
此外,在权利要求书中以及其它地方,术语“逻辑瓦片”意指多个晶体管的设计单位或块(通常多于数千个),在本申请中,逻辑瓦片能够连接到多个其它(例如,邻近或相邻)逻辑瓦片、逻辑单元、逻辑内核、可配置逻辑块、逻辑阵列块和/或逻辑块。
另外,在权利要求书中以及其它地方,术语“集成电路”除其它外意指处理器、控制器、状态机、门阵列、SoC、PGA和/或FPGA。术语“集成电路”还意指例如处理器、控制器、状态机和SoC—包括嵌入式FPGA。为避免疑问,现场可编程门阵列或FPGA既指FPGA又指嵌入式FPGA。
此外,权利要求中的术语“多路复用器”意指多路复用器和/或开关。术语“电路系统”除其它外意指电路(无论是集成的还是其它方式的)、这样的电路的集合、一个或多个处理器、一个或多个状态机、一个或多个实现软件的处理器、一个或多个门阵列、可编程门阵列和/或现场可编程门阵列,或者一个或多个电路(无论是集成的还是其它方式的)、一个或多个状态机、一个或多个处理器、一个或多个实现软件的处理器、一个或多个门阵列、可编程门阵列和/或现场可编程门阵列的组合。另外,术语“数据”除其它外意指例如在(一个或多个)电流或电压信号中提供或包含和/或存储在存储器等中的信息(复数或单数),无论是模拟还是数字形式,其可以是单个位(等)或多个位(等)。
在权利要求中,术语“MAC电路”意指例如像图1A-图1C的示例性实施例以及与之相关联的文本中所描述和示出的乘法累加器电路。但是,值得注意的是,术语“MAC电路”不限于根据例如图1A-图1C的示例性实施例示出和/或描述的特定的电路图、逻辑图、框图、功能和/或物理图、块/数据宽度、数据路径宽度、带宽以及处理。
- 乘法器累加器电路、用于乘法累加的逻辑瓦片架构和包括逻辑瓦片阵列的IC
- 具有处理流水线的乘法器-累加器电路系统以及操作该电路系统的方法