一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

用于阵列处理器的装置及相关方法与流程

2023-01-14 16:23:14 来源:中国专利 TAG:

用于阵列处理器的装置及相关方法
1.相关申请的交叉引用
2.本技术与以下申请相关:
3.提交于2021年6月28日、题为“用于具有宏指令的处理器的装置及相关方法(apparatus for processor with macro-instruction and associated methods)”并且代理人案卷号为sila427的美国专利申请17/361,244号;
4.提交于2021年6月28日、题为“用于阵列处理器的存储器配置的装置及相关方法(apparatus for memory configuration for array processor and associated methods)”并且代理人案卷号为sila430的美国专利申请17/361,250号;以及
5.提交于2021年6月28日、题为“用于带有程序包的阵列处理器的装置及相关方法(apparatus for array processor with program packets and associated methods)”并且代理人案卷号为sila431的美国专利申请17/361,257号。
技术领域
6.本公开大体上涉及电子处理器,并且更具体地,涉及用于具有改进的特性、功能和/或特征的阵列处理器的装置以及相关方法。


背景技术:

7.信息处理的进步导致对处理能力的需求不断增加。示例包括更快、更强大的处理器、更快的图形或视频硬件,以及更快和更大的存储器。
8.在某些应用中,需要阵列处理。阵列处理用于各种技术领域。例如,当需要矩阵操纵时,可以有利地使用阵列处理器。
9.本节中的描述和任何一个或多个对应的图均作为背景信息材料。本节中的材料不应被视为承认此类材料构成本专利申请的现有技术。


技术实现要素:

10.根据示例性实施例,设想了多种装置和相关方法。根据一个示例性实施例,一种装置包括用于处理阵列数据的阵列处理器。阵列数据排列在存储器中。阵列数据是用可编程的每维大小和步长值指定的。
11.根据另一示例性实施例,一种装置包括用于处理阵列数据的阵列处理器。阵列处理器包括指令定序器和耦合到指令定序器的阵列控制器。
12.根据另一示例性实施例,提供了一种处理布置在存储器中的阵列数据的方法。该方法包括使用阵列处理器来处理阵列数据。阵列数据是用可编程的每维大小和步长值指定的。
附图说明
13.附图仅图示出示例性实施例,因此不应被视为限制本技术或要求保护的主题的范
围。本领域普通技术人员将理解,所公开的概念适用于其他同样有效的实施例。在附图中,在不止一个附图中使用的相同数字指示符表示相同、相似或等效的功能、部件或块。
14.图1示出根据示例性实施例的阵列处理器的电路布置。
15.图2示出根据示例性实施例的用于包括阵列处理器的系统的电路布置。
16.图3示出根据示例性实施例的阵列处理器的电路布置。
17.图4示出根据示例性实施例的原子动作序列。
18.图5示出根据示例性实施例的宏指令的格式。
19.图6示出根据示例性实施例的使用阵列处理器的矩阵乘法的示例。
20.图7示出了根据示例性实施例的指令定序器和相关电路的电路布置。
21.图8示出根据示例性实施例的用于控制指令定序器的状态图。
22.图9示出根据示例性实施例的用于程序状态和循环控制器的电路布置。
23.图10a-10g示出根据示例性实施例的使用阵列处理器处理的循环的示例。
24.图11示出根据示例性实施例的循环控制器的电路布置。
25.图12示出根据示例性实施例的阵列控制器和相关电路的电路布置。
26.图13示出根据示例性实施例的地址计算器的电路布置。
27.图14示出根据示例性实施例的阵列状态寄存器的电路布置。
28.图15示出根据示例性实施例的阵列配置字段。
29.图16示出根据示例性实施例的阵列存储器切片。
30.图17a-17c示出根据示例性实施例的矩阵操纵的示例。
31.图18示出根据示例性实施例的存储器中的滑动窗口的示例。
32.图19示出根据示例性实施例的包字段的示例。
33.图20示出根据示例性实施例的存储器或器件中的包排序的示例。
34.图21示出根据示例性实施例的用于ic的包括一个或多个阵列处理器的电路布置。
35.图22示出根据示例性实施例的使用一个或多个阵列处理器的信息处理系统的框图。
具体实施方式
36.所公开的概念大体上涉及处理装置,诸如用于处理信息的处理器。更具体地,所公开的概念提供用于具有改进的特性、功能和/或特征的阵列处理器的装置和方法。
37.根据各种实施例的阵列处理器具有处理一般n维阵列中的信息的能力,其中n表示大于零的整数(例如,n可能具有值1、2、3、4、5、6等中的任何一个)。根据示例性实施例的阵列处理器对阵列作为流进行操作,其中每个一个或多个操作对阵列的元素(例如,阵列的每个元素)执行,并且可以以多种方式迭代。
38.根据示例性实施例的阵列处理器是用于对多维阵列数据执行矢量化或非矢量化操作的域特定计算机或处理器。对阵列数据执行的操作类型可能相对复杂,例如嵌套循环的组合,每个循环级别可能具有多个算术运算和阵列迭代运算。
39.在示例性实施例中,阵列数据以可以使用阵列配置结构指定的方式存储在存储器中。阵列由存储器访问模式指定,该模式由基地址和每个维度的步长和大小组成。因此,在示例性实施例中,阵列具有可编程的每维步长值。如本领域普通技术人员所理解的,步长是
指给定阵列元素与沿着阵列的指定维度的下一个或后续阵列元素之间的距离。步长值在每个维度上是固定的,但可以在阵列的各个维度之间变化,即,每个维度都是可编程的。
40.在示例性实施例中,阵列由存储器访问模式指定,该存储器访问模式包括基地址和每个维度的步长和大小值。阵列处理器以固定方式使用阵列配置信息而不是通过随机访问加载/存储指令来循环访问存储器。配置方案用于使用地址、存储类型、每个维度的元素数量、每个维度的步长等的组合来指定任意数量的阵列(取决于可用的存储器容量)。用于此类阵列处理器的程序包括指令,其中指令可导致执行循环控制、阵列迭代或算术逻辑单元(alu)运算中的一项或更多项。
41.与通用cpu不同,根据示例性实施例的阵列处理器具有由宏指令组成的定制指令集架构(isa)。宏指令定义阵列处理器应如何迭代/循环多个阵列以及每个条目的一个或更多个计算。
42.在示例性实施例中,阵列处理器没有条件指令。因此,对于给定的程序,存储器访问模式是预先确定的,并且唯一的变量是阵列元素值本身。阵列处理器不同于通用矢量处理器,因为它不是通用中央处理单元(cpu),而是具有新颖的架构、isa和实现方式。
43.在示例性实施例中,阵列处理器与张量处理单元(tpu)不同,张量处理单元(tpu)是专为计算特定矩阵操作而设计的非常特定域的架构。根据各种实施例的阵列处理器具有能够在任何存储器段上迭代的isa,只要存储器可以被定义为阵列。
44.为此,阵列处理器使用一组可编程的宏指令,其包括程序,其中每个宏指令可以执行任意数量的循环、阵列迭代和alu运算,称为原子动作序列(aas)。在示例性实施例中,宏指令基于存储器访问模式、循环和索引机制被定制为定制的管线。
45.根据示例性实施例的阵列处理器至少具有以下属性:(1)灵活的存储类型(从存储器读/写到alu算术类型时的隐式转换);(2)描述完整动作序列的新颖宏指令编程机制(意味着零开销循环和阵列迭代);(3)可实现每周期1个alu运算的吞吐量的并行输入和输出总线;(4)灵活的n维阵列配置,其实现就地视图,如转置、子块、反向迭代等(由于存储器中的阵列存储没有重新排列,因此节省了数据移动时间,并节省了复制和移动存储时所需的中间存储器开销);(5)alu输入转换(允许就地否定、共轭和实/虚分离)。下面将详细描述上述属性。
46.一般而言,根据示例性实施例的阵列处理器可以被认为包括两个主要子块,一个用于排序和控制,另一个用于数据路由和计算。为此,示例性实施例中的阵列处理器分别包括指令定序器和阵列控制器。
47.图1示出了根据示例性实施例的阵列处理器1的电路布置。阵列处理器1包括指令定序器5和阵列控制器10,如下文详细描述。
48.尽管图1中的阵列处理器1可以用作主处理器,但在某些情况下,可以根据需要使用更复杂的布置。例如,阵列处理器1可以用作系统的一部分,该系统根据需要可以包括附加的处理电路或控制器等,并且如本领域普通技术人员将理解的。
49.图2示出了根据示例性实施例的用于包括阵列处理器1的系统的电路布置。阵列处理器1耦合到主机或cpu 565,并且可以根据需要向主机/cpu 565提供中断信号(以表示诸如任务完成、错误状况等的事件或情况)。主机/cpu565耦合到系统总线(或通常链接)560,通过该系统总线它可以与系统存储器625和阵列处理器1通信。
50.阵列处理器1经由一个或多个数据总线(标记为“数据总线0”、“数据总线1”和“数据总线2”)耦合到系统总线560,以经由系统总线560与系统中的其他块通信或向其传递数据。阵列处理器1还经由控制总线(标记为“控制总线”)耦合到系统总线560,通过该控制总线它可以接收控制信息,诸如要执行的任务等。
51.最后,阵列处理器1耦合到功率控制器580。阵列处理器1从功率控制器580接收一个或多个功率控制信号。响应于功率控制信号,阵列处理器可以根据需要采取低功率(或睡眠或待机或休眠)模式或正常(全功率、处理)模式,并且如本领域普通技术人员将理解的。
52.图3示出了根据示例性实施例的阵列处理器1的电路布置。更具体地,图3示出了图2中所示的阵列处理器1的更多细节(其可以用于或可以不用于系统中,如上所述)。
53.再次参考图3,在所示实施例中,阵列处理器1包括数据管线(或数据管线电路)15和控制电路20。数据管线15对应于上述阵列处理器1的数据路由和计算子块。控制电路20对应于上述阵列处理器1的排序和控制子块。
54.数据管线15包括加载-存储单元35,其通过上述数据总线可以接收数据或向阵列处理器1外部的电路或块提供数据。加载-存储单元35耦合到用于促进alu运算的alu寄存器30。更具体地,alu寄存器向alu 22提供操作数(标记为x、y和a)。alu 22执行所需的运算,并将结果(标记为z)提供给alu寄存器30。alu寄存器30根据需要将结果提供给加载-存储单元35。管线控制电路25控制数据管线15中的各种块和电路的操作,诸如接收数据、执行期望的操作以及提供操作的结果。
55.控制电路20包括指令定序器5、阵列控制器10和控制寄存器45。指令定序器5包括一个或多个循环控制器40(下面详细描述)。
56.控制寄存器45从控制总线接收控制信号或数据。控制寄存器还可以根据需要向控制总线提供状态信息,并且如本领域普通技术人员将理解的。控制寄存器中的数据用于控制指令定序器5和阵列控制器10的操作,更一般地,控制阵列处理器1的操作。
57.指令定序器5执行高级程序执行控制和指令流控制。高级程序执行控制包括程序的启动/恢复、程序完成的检测(例如,经由中断标志断言)以及程序的故障报告/处理/中止。
58.指令流控制包括程序计数器(pc)管理、指令解码、指令复用和循环管理。阵列控制器10执行阵列状态管理和阵列索引递增。下面更详细地描述阵列处理器的各个块,诸如指令定序器5和阵列控制器10的细节。
59.如上所述,本公开的一个方面涉及宏指令。同样如上所述,与通用cpu不同,根据示例性实施例的阵列处理器不使用条件指令。因此,与通用cpu不同,根据示例性实施例的阵列处理器具有使用新颖宏指令范例的定制isa。
60.使用宏指令而不是通用指令。宏指令是复合指令,其中每个宏指令可以如上所述执行任意数量的循环操作、阵列迭代和alu运算(统称为原子动作序列aas)。图4示出了根据示例性实施例的阵列处理器的aas。
61.图4中的动作按照软件将导致它们被执行的顺序被编写为一系列步骤。需注意,根据示例性实施例的阵列处理器能够在每个时钟周期完成一个完整的序列,假设没有由于存储器访问争用导致的数据延迟。进一步注意,宏指令不仅可以实现图4所示的内容,还可以根据需要实现其他任务,诸如阵列配置等,并且如本领域普通技术人员将理解的。
62.如上所述,根据示例性实施例的阵列处理器没有条件指令。因此,对于给定的程序,存储器访问模式是预先确定的,并且变量本身构成阵列元素值。这种访问模式和指令执行的可预测性允许阵列处理器被管线化到任何期望的级别(例如,通过使用上述数据管线15),甚至可以实现零延迟数据移动(通过以为整个动作序列提供单周期吞吐量的方式管线化aas中的动作步骤),这通常是利用固定功能计算硬件而不是可编程处理器的情况。
63.图5示出了根据示例性实施例的宏指令50的格式。宏指令50包括各种字段,显示为输入-输出(i/o)控制50a、循环控制50b、alu控制50c和操作码(操作码)50d,操作码50d包括嵌入在宏指令50中的基本指令代码。字段50a-50d对应于包括宏指令50的一组位。
64.宏指令50中的字段50a-50d用于控制阵列处理器的硬件。因此,对于所示的示例,字段50a中的位表示由宏指令50执行的i/o控制,字段50b中的位指定支配循环控制操作的位,字段50c中的位对应于alu控制,并且字段50d中的位指定宏指令50的基本操作码。在根据示例性实施例的阵列处理器中,指令定序器5负责解码宏指令,诸如图5中的宏指令50,处理循环迭代和程序计数器(pc)计算,以及将命令分派到数据管线15中用于存储器访问和相关计算。
65.如上所述,根据示例性实施例的阵列处理器中的宏指令架构是一种新颖的isa。它由复合指令组成,而不是像典型的传统处理器情况下的单操作指令。此属性减少了对条件构造的需求,从而提供了完全可预测的执行管线和存储器访问模式,进而实现了零延迟数据移动。零延迟数据移动通常可以通过固定功能的计算硬件实现,而不是通过可编程处理器实现。
66.仅作为一个示例,图6示出了根据示例性实施例的阵列处理器的矩阵乘法运算。假设一个mxn矩阵a,一个nxp矩阵b,使用以下数学运算,将矩阵a与矩阵b相乘得到一个mxp矩阵c:
[0067][0068]
i=1,

,m并且j=1,..,p
[0069]
对于图6所示的示例,说明了4x3矩阵a与3x5矩阵b相乘得到4x5矩阵c,即数学运算c=axb。图6中的框示出了存储器中对应于上述矩阵乘法运算的数据。在图6中较大的框内,包括三个框,分别说明了存储器(诸如图2中的系统存储器625)中对应于矩阵a、b和c的数据。
[0070]
如上所述,本公开的一个方面涉及指令定序器5及其在根据示例性实施例的阵列处理器1中所起的作用。指令定序器的一个功能是获取阵列处理器d用户定义的序列,并将序列分解为单独的操作,以在每个时钟周期通过处理管线。如前所述,isa使用相对高度参数化但固定的技术(无条件指令或分支)。指令定序器采用相对较少数量的指令,并且产生大量的指令,如数百、数千甚至数百万条命令。这些命令传递给管线控制器,阵列处理器的每个操作周期一个。
[0071]
图7示出了根据示例性实施例的指令定序器5和相关电路的电路布置。在所示示例中,指令定序器5包括有限状态机、fsm(或定序器fsm)5a、循环控制器40、管理pc(程序计数器)的程序状态逻辑或电路5d、指令发布电路5b和控制功能以通过使用数据管线控制电路75来编排指令流到数据管线中的流动。
[0072]
fsm 5a控制指令定序器5的初始化和运行/暂停状态。在程序开始时,循环计数器要么被初始化,要么被来自先前暂停程序的值重新加载。指令定序器5的状态然后转变为活动状态,其中指令被发布到数据管线中,如上面所述。指令定序器5将继续运行,直到程序结束、用户暂停定序器或fsm 5a在返回空闲状态之前协调正确处理未完成操作的终止完成时发生错误,如下面关于图8所述。
[0073]
架构中定义的每个循环都有一个专用的循环控制器10,它保持该循环的计数并在适当的时间处理循环的前进和重置以及在循环结束时(当计数器翻转时)发出阵列递增操作。每个循环控制器10是完全独立的,但在示例性实施例中,循环控制器是级联的,使得当循环完成时,它通知翻转条件的下一个活动外环(经由下一个活动循环控制器)以递增外环。非活动循环(当前指令中不涉及的循环)将递增请求传递给相邻的循环控制器,直到活动循环认领通知。
[0074]
响应来自fsm 5a的前进信号,程序状态控制器5d管理pc(程序计数器)以指示当前指令并监控当前活动的循环及其状态以确定程序计数器何时应该前进(在同时翻转所有活动循环时)或在内循环完成后向后跳转到前一条指令。程序状态控制器5d还管理紧密循环与非紧密循环,该紧密循环是在单个指令上开始和结束的循环,该非紧密循环在不同指令上开始和结束并且涉及pc向后跳转以恢复循环。
[0075]
指令发布电路5b管理要传送到数据管线15(未示出)以执行数值运算的地址、控制和操作码的组合,并将该信息提供给数据管线控制电路75。该信息由数据管线控制电路75传输到数据管线15,在数据管线15中,数据从系统存储器或本地寄存器中被取出,由当前指令操作,并分别被写回寄存器或系统存储器。当前阵列地址指针由阵列控制器10基于阵列状态提供,其可以通过来自循环控制器40或指令发布电路5b的增量来更新。
[0076]
指令发布电路5b负责解码当前指令(由指令多路复用器(mux)5c响应pc的值提供),并组合所有相关的地址和所需的控制信号,以通过使用以下操作将操作发布到数据管线15中(使用数据管线控制电路75):(a)指令流控制,其基于pc复用当前指令;(b)数据管线控制(存储器加载/存储控制和alu计算控制);以及(c)阵列控制(阵列部分选择控制,以及用于一个或多个加载/存储单元的阵列索引递增)。
[0077]
在示例性实施例中,指令定序器耦合到控制寄存器45。如图7所示,控制寄存器45向指令定序器5内的电路提供各种数据和/或控制信号。控制寄存器45从指令定序器5中的电路接收数据和/或状态信号,例如来自fsm 5a的状态信号。
[0078]
fsm 5a管理当前程序的全局状态,管理程序初始化,并在程序结束或错误状况下协调命令的完成。图8示出了fsm 5a的状态图。
[0079]
idle(空闲)状态是复位时或程序完成后的状态。在程序执行完成后返回idle(空闲)状态时,done(完成)状态位将在转换到该状态时被断言。在init(初始化)状态下,指令定序器5将pc复位为零并将所有的循环控制器40清零到它们的初始状态。
[0080]
当用户软件将init(初始化)写入控制寄存器45中的命令寄存器时,状态机进入init(初始化)状态。当处于exec(执行)状态时,fsm 5a加载了一个程序并正在积极执行指令。当用户软件将start(开始)写入控制寄存器45中的命令寄存器时,fsm 5a进入exec(执行)状态。
[0081]
在执行时(exec状态),如果用户的软件将halt(暂停)写入控制寄存器45中的命令
寄存器,则fsm 5a可能会进入halt(暂停)状态。fsm 5a将保持在halt(暂停)状态,直到用户软件使用start(开始)重新启动操作或通过写入init(初始化)位字段终止操作。成功执行程序后,fsm 5a返回idle(空闲)状态。
[0082]
当出现终止程序执行的无效或错误状况时,指令定序器5进入error(错误)状态。无效状况的示例包括无效的循环控制结构、加载/存储操作中的总线错误或alu故障或错误。在返回idle(空闲)状态之前,任何适当的清理(设置各种字段或位、状态报告等)都会在此状态下发生,此时将断言error(错误)状态位。
[0083]
再次参考图7,程序状态电路5d和循环控制器40负责基于指令序列中的循环结构适当地推进pc(程序计数器)和循环计数器。与传统处理器不同,根据示例性实施例的阵列处理器不使用显式编码的分支操作,而是每条指令可以设置零个或多个循环开始和/或结束标志。
[0084]
图9设置了程序状态电路5d如何耦合到循环控制器40。更具体地,程序状态电路5d的作用是:(a)指示哪些循环计数器将在任何给定周期中递增;(b)基于当前循环计数器状况确定pc是否应该保持不变、前进(向前移动)或后跳;(c)检测循环控制中的错误并在这种情况下终止程序。
[0085]
程序状态电路5d向每个循环驱动初始化和清除信号以指示该循环被初始化(在程序开始时)或被清除(在新循环开始时)。前进信号是一个限定符,用于在控制器需要推进其状态时通知控制器(如果管线停止,则保留其当前状态,不能发出任何指令)。next_pc(下一个pc)信号指示下一个时钟周期的程序计数器(pc)的值。循环控制器40使用它来记录循环开始的pc,以便当循环完成时,定序器可以向后跳到适当的pc。
[0086]
pc用作接收指令流(标记为“instr[]”)的mux中的选择信号,以确定正在执行的指令并将来自宏指令的开始和结束标志提供给循环控制器40。指令定序器5逻辑电路还构造辅助控制begin_next(开始下一个),它指示新循环在下一个时钟周期开始,以及innermost_loop(最内部循环),它确定在给定当前程序和循环状态的情况下应该前进的最内层循环。循环控制器40每个都提供终止信号,该终止信号向指令定序器5指示当前循环已经完成。指令定序器5使用来自所有循环控制器40的终止信号来确定何时已经满足所有循环或者外循环是否仍需要完成。如上所述,每个循环控制器40向后续循环控制器40提供翻转信号(最后一个循环控制器40除外,因为它没有后续循环控制器)。
[0087]
根据示例性实施例的阵列处理器的循环架构允许几种类型的循环状况。图10a-10g提供了循环状况的几个示例。在图10a-10g的示例中,表格显示了相关指令以及对应于每个循环控制器40的循环开始(b)或结束(e)标志的存在。n指的是最内层(最低)循环计数器的循环计数,而m是下一个更高的循环计数器,l表示下一个循环计数器,依此类推。
[0088]
图10a示出了在单个循环中具有单个指令紧密循环的情况。当一条指令指示循环设置了开始(b)和结束(e)标志时,单循环控制器(loop1)将在pc前进之前重复该指令n次。在n次循环迭代结束时,循环控制器将通知阵列控制器与此循环关联的阵列将被递增,并且指令定序器将前进到下一条指令。
[0089]
图10b示出了具有多个循环的单个指令紧密循环的场景。当一条指令指示两个或多个循环设置了开始(b)和结束(e)标志两者时,这些循环将组合起来执行同一条指令的mxn次迭代。在n次循环迭代结束时,最内层循环(loop4)将翻转并通知阵列控制器与此循环
关联的阵列将被递增。它还将通知loop2(循环2)发生了翻转,并且loop2将加一。当loop2达到其终端计数(m)时,两个循环都发出阵列递增通知,并且程序状态电路5d前进到下一条指令。请注意,可以一次将所有循环控制器编程为处于紧密循环状态。
[0090]
图10c示出了在单个循环中具有多个指令的情况。当开始标志在一条指令中而结束标志在另一条指令中时,单个循环可以迭代多条指令。在这种情况下,instr0(指令0)和instr1(指令1)将重复(按该顺序)n次,直到循环完成。
[0091]
在某些情况下,多个循环中存在多个指令。根据需要并且本领域普通技术人员将理解,可以在相对大量的配置中在多个循环内执行多条指令。作为说明而非限制,图10d-10g提供了一些示例。
[0092]
图10d对应于重复instr0 instr1 nxm次。图10e示出了重复(instr0 instr1xn)m次的情况。图10f涉及重复((instr0xn) instr1)m次。图10g示出了重复(instr0 instr1xn instr2xm)l次的情况。loop4(循环4)重复instr1 n次,loop2重复instr2 m次,并且loop0(循环0)重复整个序列l次。
[0093]
如所指出的,图10a-10g中的示例仅仅是说明性的。当启用跨越多个指令的多个循环时,通过使用根据示例性实施例的阵列处理器,相对复杂的循环场景是可能的。根据示例性实施例的阵列处理器可以处理所有可能的(有效的)组合并且能够通过各种操作对复杂的阵列结构进行迭代。
[0094]
图11示出了根据示例性实施例的循环控制器40的电路布置。如上所述,在示例性实施例中,阵列处理器1包括至少一个循环控制器,并且根据所需的处理类型,通常包括多于一个循环控制器40。
[0095]
参考图11,循环控制器40包括控制逻辑(或控制电路或电路)40a、计数器40b、以及寄存器active(活动)(标记为40c)和pc开始(标记为40d)。循环控制器40接收对应于当前指令的若干信号或标志,如提供给控制电路40a的信号所示,包括开始/结束标志,识别在任何给定时间的最里面的活动循环的最内_循环(innermost_loop)信号(由程序状态电路5d生成),以及begin_next(开始下一个),它向循环控制器40指示循环将在下一个时钟周期中被激活。当循环应该向后跳转以便继续其下一个操作时,循环控制器还通过在寄存器40d中存储为程序状态电路5d提供下一个pc的pc来跟踪控制器被激活处的指令。loop_active(循环_活动)信号指示循环控制器40被启用并且正在为当前程序状态主动执行循环计数,并且当rollover_input(翻转_输入)被断言时它将递增。
[0096]
在图中所示的示例性实施例中,编号较低的循环控制器对应于外循环,而编号较高的循环控制器对应于内循环。对于多个循环计数器40处于活动状态的任何周期,最内层循环将由程序状态电路5d递增,而如果前一个内循环翻转,则活动外循环可以被递增。当多个循环处于活动状态时,最终内循环将触发一连串外循环递增,因为每个循环依次翻转。
[0097]
图12示出了根据示例性实施例的阵列控制器10和相关电路的电路布置。阵列控制器10负责保持每个定义的程序阵列的状态。每个阵列具有由其在控制寄存器45中的相关阵列配置寄存器提供的基地址、大小和步长。
[0098]
响应来自指令定序器5和一个或多个循环控制器40的递增请求,连同来自控制寄存器45的静态配置,阵列控制器10沿每个维度维持当前阵列索引(index[])。当指令定序器5和一个或多个循环控制器40发送信号以递增各种阵列维度时,阵列控制器10将通过递
增1,或者如果它已经达到最终维度大小则执行模运算(翻转)来更新适当的索引。
[0099]
从指令定序器5到阵列控制器10的增量有两个来源:(1)循环控制器40在循环翻转(达到其终端计数)时发出递增信号,以及(2)加载/存储操作在向数据管线发出指令时发出递增信号。此外,阵列控制器10具有地址计算器电路10d-10f,其用于计算阵列处理器1的每个加载和存储总线在当前指令周期中应该操作的存储器地址。需注意,在一些实施例中,每个循环控制器40(可选地)发出多个递增信号。对于每个独立的阵列和维度,如果被配置,则它可能会递增。类似地,只要阵列参与加载/存储操作,那么每个加载/存储都可以可选地递增任何或所有维度。
[0100]
参考图12,地址计算器电路10d-10f的输出,即信号“数据总线0地址”;“数据总线1地址”和“数据总线2地址”被提供给加载-存储单元35。如下所述,这些信号由加载-存储单元35使用。
[0101]
参考图12,阵列控制器10包括耦合到mux 10c的状态寄存器和增量器电路10a。状态寄存器10a包括用于阵列0到n(标记为10a0到10an)的状态的寄存器,其中n是正整数。状态寄存器和增量器电路10a经由“size[]”信号从控制寄存器45接收关于阵列配置(显示为阵列配置0到阵列配置n)的信息。
[0102]
关于阵列状态的信息由状态寄存器和增量器电路10a提供给mux 10c。来自指令定序器5的lsu_array_selects信号用作mux 10c的选择信号。mux10c向地址计算器10d-10f提供基地址(base_addr)、步长(stride[])和索引(index[])信号。在示例性实施例中,对于给定的宏指令,最多可以配置两个加载和一个存储。选择线提供了为这三个i/o通道中的每一个选择哪个阵列的选项。关于阵列配置的信息由控制寄存器45提供给mux 10c。耦合控制寄存器45和mux 10c的每条线封装或包括base_addr和stride[]信号。图中的重复点表示所示的两个mux模式的重复。
[0103]
在示例性实施例中,地址计算器电路10d-10f基于为特定加载或存储操作选择哪个阵列来为加载-存储电路35完成的每个加载和存储生成有效地址。作为3维阵列的示例,有效地址,即地址计算器电路的输出,计算如下:
[0104]
地址=基地址 [(索引0*步长0) (索引1*步长1) (索引2*步长2)]
[0105]
如前所述,上述公式提供了3维阵列的有效地址。如本领域普通技术人员将理解的,可以通过进行适当修改来修改公式以提供具有其他维度的阵列的有效地址。
[0106]
图13示出了根据示例性实施例的地址计算器电路10d的电路布置。图13中的电路为示例3维阵列的有效地址实现了上述公式。如本领域普通技术人员将理解的,可以通过进行适当修改(例如,添加或去除乘法器等)来修改图13中的电路以提供具有其他维度的阵列的有效地址。此外,虽然图13示出了地址计算器电路10d,但是根据需要并且如本领域的普通技术人员将理解的,类似的电路布置可以用于地址计算器电路10e和地址计算器电路10f。
[0107]
参考图13,地址计算器电路10d包括三个乘法器10d1、10d2和10d3,它们分别产生乘积(索引0*步长0)、(索引1*步长1)、(索引2*步长2)。加法器10d4将三个乘法器10d1-10d3的输出相加。加法器10d5将基地址(base_addr)加到加法器10d4的输出中。加法器10d5的输出构成由上述公式给出的用于示例3维阵列的地址。
[0108]
图14示出了根据示例性实施例的阵列状态寄存器和增量器的电路布置。更具体
地,该图示出了状态寄存器和增量器10a1(参见图12)。再次参考图14,所示电路为示例3维阵列提供阵列状态寄存器和增量器。如本领域普通技术人员将理解的,可以通过进行适当的修改(例如,添加或去除模增量器等)来修改图14中的电路以提供用于具有其他维度的阵列的阵列状态寄存器和增量器。
[0109]
图14中的电路包括对应于一个3维阵列的三个模增量器10a11-10a13。针对给定维度的模增量器接收与该特定维度对应的大小和增量(incr)信号作为输入。使用图14所示的操作,增量器10a11-10a13产生对应于各自三个阵列维度的三个索引信号(index[0]、index[1]和index[2])。
[0110]
如上所述,阵列控制器10在执行期间基于静态程序配置(base_address、大小、步长、storage_type)和程序状态(索引)的组合来计算地址。base_address表示阵列的基地址,即阵列源在存储器中的地址。storage_type表示阵列元素的存储类型,例如8位有符号整数、16位浮点整数等。在一些实施例中,从存储器读取/写入到alu算术类型时会发生隐式转换。相反,在一些实施例中,alu具有对多种类型的本地支持,从而克服了数据类型转换的开销。
[0111]
字段size[]表示每个维度的大小。例如,size[n]是阵列沿维度n的大小。字段stride[]表示每个维度的步长。作为一个示例,stride[n]是沿阵列的n维在一个元素和下一个元素之间的地址差。字段index[]构成了每个维度的索引状态。例如,index[n]沿着当前选定元素的维度n跟踪索引。请注意,要完全寻址阵列元素,将使用所有维度的索引。
[0112]
图15示出了根据示例性实施例的阵列配置字段。更具体地,用于示例3维阵列的阵列控制器10中的字段被映射到存储器(例如,图2中的系统存储器625)中的数据。base字段是阵列的基地址。dim0size、dim0stride表示第一维度(维度0)的维度大小和步长,对于其他适用的阵列维度,依此类推。如上所述,3维阵列仅用作阵列大小的示例。在各种实施例中,通过进行如本领域普通技术人员将理解的适当修改,预期使用其他阵列维度。
[0113]
从阵列处理器1的角度来看,“阵列”存储器映射配置机制允许相对灵活的存储器布置仍作为“阵列”被遍历。特别地,根据示例性实施例的阵列处理器可以支持存储器切片。更具体地,使用可配置的步长允许支持在存储器中布局的阵列,在元素之间具有所需的间距(或存储器位置),只要它在被单独使用时在每个维度上是一致的。
[0114]
根据示例性实施例,该技术可用于使用阵列处理器的灵活阵列处理。例如,图16示出了根据示例性实施例的阵列存储器切片。在所示实施例中,dim0size、dim0stride、dim1size、dim1stride、dim2size和dim2stride分别具有3、3、2、20、2和50的值。如示例中所示,可以根据需要配置每个维度的维度和步长值,从而可能灵活地在存储器中表示或排列或存储阵列。
[0115]
请注意,图16仅作为示例示出了3维阵列。根据需要和如本领域普通技术人员将理解的那样,通过对所示的阵列配置进行适当的修改,可以使用任意或所需维度值的阵列并在存储器中表示。
[0116]
在示例性实施例中,沿每个维度具有独立步长的能力意味着不存在隐式假定的行优先或列优先顺序,但如果需要,任何一种都是可能的。事实上,由系统中的一个计算元件生成并存储在存储器中的阵列可以由根据示例性实施例的阵列处理器使用诸如就地转置或逆序迭代的视图来读出,而无需使用直接存储器访问(dma)来重新排列元素或阵列处理
器上使用的程序而更改。
[0117]
图17a-17c示出了根据示例性实施例的矩阵或阵列操纵的示例。更具体地,图17a示出了一个阵列,其中base、dim0size、dim0stride、dim1size和dim1stride的值分别为11、7、1、4和10。图17b示出了转置操作(交换索引)。dim0size、dim0stride、dim1size和dim1stride通过操作分别更改为4、10、7和1。图17c示出了一种反向转置(负索引)操作。base、dim0size、dim0stride、dim1size和dim1stride值通过操作分别更改为48、4、-10、7和-1。
[0118]
需注意,在根据示例性实施例的阵列处理器中,阵列配置可以沿着每个索引独立于一个或多个其他索引来完成。沿每个索引的阵列的独立配置意味着也可以将某些存储器访问序列定义为阵列,例如,即使具有重复的元素。例如,图18示出了在存储在存储器中的更大矩阵上作为滑动窗口迭代矩阵或阵列子块。在所示示例中,3x3切片显示为较大的9x6阵列或矩阵上的滑动窗口。
[0119]
在图18所示的示例中,一个3x3的窗口在更大的存储器空间上滑动,其中维度2控制滑动。在此示例中,每个维度2增量将窗口向下滑动2行并向右滑动1行(解释假设此存储器段表示某个更大的10x10矩阵)。
[0120]
在一些实施例中,除了或代替上述存储格式类型转换,阵列处理器包括用于就地修改阵列元素或值的电路。例如,在一些实施例中,支持元素或值的就地否定。作为另一个示例,在一些实施例中,支持元素或值的原地掩码为零。除了上述之外,可以根据需要在各种实施例中使用对阵列元素或值的其他修改或更改。阵列元素或值的这种修改可以通过根据需要进行适当的修改来进行,并且如本领域普通技术人员将理解的。
[0121]
进一步注意,图16、17a-17c和18中所示的操作仅作为说明性示例提供。如本领域普通技术人员将理解的,通过使用根据示例性实施例的阵列处理器中的灵活存储器配置方案,可以对具有期望值的维度和步长的阵列执行相对广泛的各种操作。
[0122]
根据各种实施例的存储器中的阵列配置提供了许多属性。这种配置允许专门用cpu处理数据。cpu可以处理一个或多个阵列的任意存储器布置。在这种情况下,cpu资源的使用以阵列的存储器配置的灵活性为代价。
[0123]
在其他实施例中,dma可用于根据需要在不同计算步骤之间移动和/或复制阵列数据。这样做权衡灵活性和从cpu卸载任务与功率和/或延迟,以及dma可能不支持某些所需的存储器布置或转换的可能性。在某些情况下,可能会发生复制操作后的信息复制。
[0124]
根据示例性实施例的存储器配置将对待或处理数据的每个计算引擎与每个其他计算引擎匹配,以按照下一个或后续或目的地计算引擎使用或预期的方式排列数据。这样做需要各种硬件块的相对紧密耦合,并且在某些情况下可能会使用额外的存储来在存储器中填充数据,以获得数据消费者(最终用户、各种计算引擎或电路块或子系统)的正确或预期格式。请注意,在某些情况下,可能存在不止一个相同或重叠数据段的消费者,在这种情况下,可能不存在单个理想数据排列。
[0125]
在示例性实施例中,阵列的存储器配置在某些情况下完全降低了复制和/或移动数据的可能性,从而降低了功耗(来自额外的准时和额外的存储器访问)、减少了等待时间/延迟、降低了存储成本等。在这样的实施例中,可以使用相同的系统资源来启用附加应用或更高功能的应用。
[0126]
在一些实施例中,采用程序包。程序包的使用涉及控制寄存器在阵列处理器的控制块或电路中的新颖布置。作为一般概念,数据包的使用可以应用于任何具有可编程寄存器的外围设备,这些寄存器可以被分组为包。
[0127]
包的使用允许将打算用于阵列处理器的程序编译成程序包。在过去的典型情况下,寄存器是使用配置字段的单独寄存器编程的概念来编写的。尽管根据各种实施例的阵列处理器也可以使用该方法,但在一些实施例中,硬件寄存器被明确地分组和排序以作为“包”被写入和读取。
[0128]
在示例性实施例中,程序包表示阵列处理器1配置寄存器,即用于为阵列处理器1配置新程序的信息。另一方面,扩展程序包表示程序包和alu寄存器状态(aluregstate或alustate)。alu寄存器状态在示例性实施例中加载在程序配置寄存器之前。
[0129]
该方案允许在需要将alu寄存器初始化作为程序执行的一部分的情况下,将扩展程序包(而不是程序包)写入阵列处理器1。如果需要,可以预先(动态地或在编译期间)生成程序包和扩展程序包,并将其存储在存储器(ram或非易失性存储器(nvm)(参见例如图21,nv存储器635))中以用于运行时检索并跨多个数据集重用。
[0130]
在示例性实施例中,除了程序配置和alu状态寄存器之外,还有其他运行时状态寄存器,例如,阵列状态、循环状态等,它们可以包括在包中。状态寄存器保存由硬件在程序执行期间写入的实现方式定义的状态信息。它们包含用于表示正在执行的程序的完整上下文的信息。为了包括这样的信息,可以使用上下文程序包。
[0131]
更具体地,上下文程序包构成扩展程序包和所有状态寄存器的组合。为了保存暂停程序的上下文,可以将完整的扩展程序包存储在存储器中(见上文)。当需要恢复上下文并恢复执行时,它可以稍后重新加载到阵列处理器1中。根据需要,并且如本领域的普通技术人员将理解的,任何数量的程序都可以以这种方式保存和恢复,以允许在执行期间切换上下文,这取决于诸如使用场景、可用存储器、阵列处理器1的设计和性能规范等因素。
[0132]
请注意,以上对各种类型包的描述假设所有提到的程序包寄存器都可以从主机访问(参见例如图2),即使是表示实现定义状态的程序包寄存器。如本领域普通技术人员将理解的,在来自主机的这种访问不可用或不希望的情况下,可以通过进行适当的修改来使用其他类型的包。
[0133]
图19示出了根据示例性实施例的包字段的示例。在所示示例中,program_packet(程序包)包括loopcfg(循环配置)、arraycfg(阵列配置)和instrcfg(指令配置)字段。此外,extended_program_packet包括program_packet字段加上alustate(alu状态)字段。最后,上下文程序包包括extended_program_packet(扩展程序包)字段加上loopstate(循环状态)、arraystate(阵列状态)和programstate(程序状态)字段。
[0134]
请注意,上述包类型和内容仅是说明性的而非限制性的。可以根据需要并且如本领域普通技术人员将理解的,构造和使用其他类型的包。如本领域普通技术人员将理解的,针对给定实施方式的包类型和内容的选择取决于多种因素。此类因素包括设计规格、性能规格、成本、功耗、ic或设备面积、可用资源(如存储器容量)、目标市场、目标最终用户等。
[0135]
为了支持数据包的使用,根据示例性实施例的阵列处理器包括某些硬件块或电路。支持上述包的硬件包括阵列处理器的存储器映射,这些存储器映射被组织形成寄存器子集,这些寄存器子集形成不同的包类型,其中每种包类型都占用最少的存储空间或容量
来形成包。图20示出了存储器(或设备)中寄存器的排序,以支持上述三种包类型。
[0136]
如图20所示,存储器空间中的最高有效字节(msb)被cmd(命令)字占用。分配给包的其余存储器空间包括上述字段。更具体地,在存储器中排列的字段的排序从cmd字开始,如instrcfg、loopcfg、arraycfg、aluregstate(alu寄存器状态)、loopstate、arraystate和programstate。在所示实施例中,programstate占据存储器空间中的最低有效字节(lsb)。
[0137]
同样如图20所示和如上所述,instrcfg、loopcfg和arraycfg形成程序包。除了程序包之外,aluregstate形成了扩展程序包。除了扩展程序状态之外,loopstate、arraystate和programstate形成了上下文程序包。需注意,如本领域普通技术人员将理解的,取决于人们希望使用程序包、扩展程序包还是上下文程序包,可以不使用图20中所示的一些字段。
[0138]
同样,寄存器排序考虑因素允许自主加载三种包类型中的任何一种,包括紧跟程序包的存储器映射的命令寄存器(参见图20中的cmd作为示例)。除了程序包存储器布置之外,根据示例性实施例的阵列处理器1还支持三种不同的编程加载用例:(1)完整的程序加载和执行(使用扩展程序包);(2)部分程序加载和执行(使用程序包);以及(3)程序(上下文)保存/恢复(使用上下文程序包)。
[0139]
这种方案启用(抢占)上下文切换或低功耗模式的保存/恢复窗口,否则状态信息将丢失。因此,支持正在进行的程序的完整状态和配置。
[0140]
定序器fsm 5a(参见图7)允许阵列处理器1的程序器启用各种编程模型,诸如上述经由使用启动、暂停和初始化命令位来导致定序器fsm 5a的状态转换的那些(参见图8)。在没有加载或使用上下文程序包的情况下,cmd字的init(初始化)控制位会自动激活某些状态寄存器的正确初始化。
[0141]
如上所述,根据需要,可以在各种实施例中使用其他类型的包。另外,根据需要并且如本领域普通技术人员所理解的,上述的包类型可以混合和/或分开并且混合。仅作为一个示例,可以根据需要支持用于相同程序但不同状态/配置的包。
[0142]
如本领域普通技术人员将理解的,为了支持包的使用,在各种实施例中预期使用相关软件。该软件旨在促进在运行时和编译时根据需要编译和操纵各种类型的包。例如,可以使用阵列编程语言。例如,这样的编程语言可能允许用与其他编程语言(诸如c或python)在概念上相似的形式语言指定离散的微动作。例如,可以根据需要支持在c编程语言中创建与阵列编程语言语法相匹配的宏,以便将该语言直接嵌入到要与它一起编译的c程序中的能力。这些实施例中的微动作被编译成由根据各种实施例的阵列处理器使用的宏指令。
[0143]
在一些实施例中,可以使用指令序列构建器(将阵列编程语言转换成程序包的编译器)。该特性可以同时支持即时和离线编译能力,即程序可以在运行时动态翻译或在编译时翻译,并且根据需要将结果存储到存储器中。
[0144]
可以根据需要使用其他运行时应用程序编程接口api,诸如:(1)用于获取不同包类型并在存储器中加载/存储的api;(2)使用其中一种程序包类型对阵列处理器进行直接存储器访问(dma)编程的api;(3)获取已编译的程序包并通过修改程序配置的某些部分来对其进行参数化的api。据需要并且如本领域普通技术人员将理解的,可以根使用各种其他软件结构,包括api。如本领域普通技术人员将理解的,用于给定实现方式的这种软件结构的选择和类型取决于多种因素。这些因素包括设计规范、性能规范、成本、可用技术,诸如使
用的一种或多种编程语言的类型、目标市场、目标最终用户等。根据这些因素,可以为给定的应用实施合适的软件平台,如本领域普通技术人员将理解的。
[0145]
根据示例性实施例的阵列处理器1可以根据需要用在各种系统、子系统、模块等中。例如,在一些实施例中,一个或多个阵列处理器1可以集成或包含在ic中,诸如微控制器单元(mcu)中。图21示出了这种示例性实施例的电路布置。
[0146]
该电路布置包括构成或包括mcu的ic 550。ic 550包括使用链路560彼此通信的多个块(例如,一个或多个处理器565、数据转换器605、i/o电路585等)。在示例性实施例中,链路560可以构成耦合机构,诸如总线、一组导体或半导体元件(例如,迹线、器件等),以用于传送信息,诸如数据、命令、状态信息等。
[0147]
ic 550可以包括耦合到一个或多个处理器565、时钟电路575和电源管理电路或电源管理单元(pmu)580的链路560。在一些实施例中,一个或多个处理器565可以包括用于提供信息处理(或数据处理或计算)功能的电路或块,诸如中央处理单元(cpu)、算术逻辑单元(alu)等。在一些实施例中,此外或作为替代,处理器565可包括一个或更多个dsp。dsp可以根据需要提供各种信号处理功能,诸如算术功能、滤波、延迟块等。
[0148]
ic 550可以包括一个或多个阵列处理器1。阵列处理器1可以以多种方式实现以具有相对宽范围的功能和属性,如上面所述。阵列处理器1经由链路560与ic 550中的一个或多个块通信。例如,经由链路560,一个或多个阵列处理器1根据需要与一个或多个处理器565、存储器电路625、pmu(或功率控制器)580等进行通信,如本领域普通技术人员将理解的。
[0149]
时钟电路575可以生成一个或多个时钟信号,以促成或控制ic 550中一个或多个块的操作时序。时钟电路575还可以根据需要控制使用链路560的操作的时序。在一些实施例中,时钟电路575可以经由链路560向ic 550中的其他块提供一个或多个时钟信号。
[0150]
在一些实施例中,pmu 580可以相对于电路的一部分或电路的所有部件,诸如ic 550中的一个或多个块降低装置(例如,ic 550)的时钟速度、关闭时钟、降低功率、关闭电源、禁用(或断电或置于较低功耗或睡眠或不活动或空闲状态)、启用(或加电或置于较高功耗或正常或活动状态)或前述的任何组合。此外,pmu 580可以响应从非活动状态到活动状态的转换(包括但不限于,当一个或多个处理器565从低功率或空闲或睡眠状态转换到正常操作状态时),打开时钟、提高时钟速率、打开电源、提高功率或前述的任何组合。
[0151]
链路560可以通过串行接口595耦合到一个或多个电路600。通过串行接口595,耦合到链路560的一个或多个电路或块可以与电路600通信。如本领域普通技术人员将理解的,电路600可以使用一种或多种串行协议,例如smbus、i2c、spi等进行通信。
[0152]
链路560可以通过i/o电路585耦合到一个或多个外围设备590。通过i/o电路585,一个或多个外围设备590可以耦合到链路560,因此可以与一个或多个耦合到链路560的块通信,例如,与一个或多个处理器565、存储器电路625等通信。
[0153]
在示例性实施例中,外围设备590可以包括各种电路、块等。示例包括i/o设备(小键盘、键盘、扬声器、显示设备、存储设备、定时器、传感器等)。需注意,在一些实施例中,一些外围设备590可以在ic 550的外部。示例包括小键盘、扬声器等。
[0154]
在一些实施例中,对于一些外围设备,i/o电路585可以被绕过。在这样的实施例中,一些外围设备590可以在不使用i/o电路585的情况下耦合到链路560并与链路560通信。
如上所述,在一些实施例中,这样的外围设备可以在ic 550的外部。
[0155]
链路560可以经由一个或多个数据转换器605耦合到模拟电路620。数据转换器605可包括一个或多个adc 605a和/或一个或多个dac 605b。
[0156]
adc 605a从模拟电路620接收一个或多个模拟信号,并将一个或多个模拟信号转换为数字格式,它们将数字格式的信号传送到耦合到链路560的一个或多个块。相反,dac 605b从耦合到链路560的一个或多个块接收一个或多个数字信号,并将该数字信号转换为模拟格式,它们将该信号传送到模拟电路620。
[0157]
模拟电路620可以包括提供和/或接收模拟信号的多种电路。如本领域普通技术人员将理解的,示例包括传感器、换能器等。在一些实施例中,模拟电路620可以根据需要与ic 550外部的电路通信以形成更复杂的系统、子系统、控制块或系统、反馈系统和信息处理块。
[0158]
控制电路570耦合到链路560。因此,控制电路570可以通过提供控制信息或信号来与耦合到链路560的各个块通信和/或控制其操作。在一些实施例中,控制电路570还从耦合到链路560的各个块接收状态信息或信号。此外,在一些实施例中,控制电路570促成(或控制或监督)耦合到链路560的各个块之间的通信或合作。
[0159]
在一些实施例中,控制电路570可以启动或响应复位操作或信号。如本领域普通技术人员将理解的,复位操作可引起耦合到链路560的一个或多个块、ic 550等的复位。例如,控制电路570可以使pmu 580和诸如一个或多个阵列处理器1的电路复位到初始或已知状态。
[0160]
在示例性实施例中,控制电路570可以包括多种类型和电路块。在一些实施例中,控制电路570可包括逻辑电路、fsm或其他电路以执行诸如上述操作的操作。
[0161]
通信电路640耦合到链路560并且还耦合到ic 550外部的电路或块(未示出)。通过通信电路640,耦合到链路560(或ic 550,通常)的各种块可以经由一种或多种通信协议与外部电路或块(未示出)通信。通信的示例包括usb、以太网等。在示例性实施例中,如本领域普通技术人员将理解的,取决于诸如针对给定应用的设计或性能规范的因素,可以使用其他通信协议。
[0162]
如上所述,存储器电路625耦合到链路560。因此,存储器电路625可以与耦合到链路560的一个或多个块通信,诸如与一个或多个块处理器565、控制电路570、i/o电路585等通信。
[0163]
如本领域普通技术人员将理解的,存储器电路625为ic 550中的各种信息或数据提供存储,诸如操作数、标志、数据、指令等。存储器电路625可根据需要支持各种协议,诸如双倍数据速率(ddr)、ddr2、ddr3、ddr4等。
[0164]
在一些实施例中,存储器电路625的存储器读取和/或写入操作涉及使用ic 550中的一个或多个块,诸如一个或多个处理器565。在某些情况下,直接存储器访问(dma)布置(未示出)允许提高存储器操作的性能。更具体地,dma(未示出)提供了一种用于在数据的源或目的地和存储器电路625之间直接,而不是通过诸如一个或多个处理器565的块执行存储器读取和写入操作的机制。
[0165]
存储器电路625可以包括多种存储器电路或块。在所示实施例中,存储器电路625包括非易失性(nv)存储器635。此外或替代地,存储器电路625可以包括易失性存储器(未示出),诸如随机存取存储器(ram)。nv存储器635可用于存储与ic 550中一个或多个块的性
能、控制或配置相关的信息。例如,如上所述,nv存储器635可以存储与一个或多个阵列处理器1相关的配置信息。
[0166]
图22示出了根据示例性实施例的使用一个或多个阵列处理器1的信息处理系统1000的框图。使用系统1000,人们可以在计算机系统、设备、处理器、控制器等上执行、运行或执行各种算法、过程、方法或软件。如本领域普通技术人员将理解的,系统1000或其修改或变体可用于运行或执行各种过程,诸如如上所述,通过使用一个或多个阵列处理器1进行阵列处理。
[0167]
系统1000包括计算机设备1005、输入设备1010、视频/显示设备1015和存储/输出设备1020,尽管根据需要可以包括这些设备中每个的不止一个。计算机设备1005耦合到输入设备1010、视频/显示设备1015和存储/输出设备1020。根据需要,系统1000可以包括不止一个的计算机设备1005,例如,一组相关联的计算机设备或系统。
[0168]
在示例性实施例中,计算机设备包括一个或多个阵列处理器1。如本领域普通技术人员将理解的,一个或多个阵列处理器1可以是阵列处理器的各种实施例中的一个或多个,或者这种阵列处理器的组合或修改。
[0169]
通常,系统1000与来自用户的输入相关联地操作。用户输入通常使系统1000执行特定的期望信息处理任务,包括阵列处理。系统1000部分地使用计算机设备1005来执行那些任务。除了一个或多个阵列处理器1之外,计算机设备1005还包括信息处理电路,诸如cpu、控制器、微控制器单元(mcu)等,尽管可以使用不止一个这样的设备或信息处理电路,如本领域技术人员将理解的。根据需要,计算机设备可以包括存储器电路,诸如与一个或多个阵列处理器1结合使用的存储器电路。
[0170]
输入设备1010接收来自用户的输入并使该输入可用于计算机设备1005以进行处理。根据需要,用户输入可以包括数据、指令或两者。输入设备1010可以构成字母数字输入设备(例如,键盘或小键盘)、指点设备(例如,鼠标、滚珠、光笔、触敏装置,例如,触敏显示器或平板),或两者。用户操作字母数字键盘或小键盘以向计算机设备1005提供文本,诸如ascii字符。类似地,用户操作指点设备以向计算机设备1005提供光标位置或控制信息。
[0171]
视频/显示设备1015向用户显示视觉图像。视频/显示设备1015可以根据需要包括图形电路,诸如图形处理器。视觉图像可以包括关于计算机设备1005的操作的信息,诸如图形、图片、图像和文本。如本领域普通技术人员将理解的,视频/显示设备1015可以包括计算机监视器或显示器、电子显示器(例如,液晶显示器)、投影设备等。如果系统1000使用触敏显示器,则显示器还可以操作以向计算机设备1005提供用户输入。
[0172]
存储/输出设备1020允许计算机设备1005存储用于附加处理或以后检索(例如,软拷贝)的信息,以各种形式(例如,硬拷贝)呈现信息,或两者。作为一个示例,存储/输出设备1020可以包括能够以期望的格式将信息存储在期望的介质上的磁、光、半导体或磁光驱动器。作为另一个示例,存储/输出设备1020可以构成打印机、绘图仪或其他输出设备以生成来自计算机设备1005的信息的打印或绘图表达。在一些实施例中,作为存储信息的补充或替代,存储设备1020可以向系统1000的一个或多个部件或部分(例如计算机设备1005)提供信息(例如,先前存储的信息)。
[0173]
计算机可读介质1025(或计算机程序产品)在结构上和功能上与计算机设备1005相互关联。计算机可读介质1025存储、编码、记录和/或体现功能描述材料。作为说明,功能
描述材料可以包括计算机程序、计算机代码、计算机应用和/或信息结构(例如,数据结构、数据库和/或文件系统)。当由计算机可读介质1025存储、编码、记录和/或体现时,功能描述材料赋予功能。功能描述材料与计算机可读介质1025相互关联。在一些实施例中,根据需要,计算机可读介质1025是非暂时性的。
[0174]
功能描述材料内的信息结构定义了信息结构和计算机可读介质1025和/或系统1000的其他方面之间的结构和功能相互关系。这些相互关系允许实现信息结构的功能。
[0175]
此外,在这种功能描述材料中,计算机程序定义了计算机程序和计算机可读介质1025以及系统1000的其他方面之间的结构和功能相互关系。这些相互关系允许实现计算机程序的功能。因此,在一般意义上,计算机可读介质1025包括信息,诸如指令,当由计算机设备1005执行时,该指令使计算机设备1005(通常是系统1000)提供由进程、计算机程序、软件、固件、方法、算法等规定的功能,如包括(部分或全部)在计算机可读介质1025中的功能。
[0176]
作为说明,计算机设备1005读取、访问功能描述材料或将其复制到计算机设备1005(或根据需要为耦合到计算机设备1005的单独块或存储器电路)的计算机存储器(图中未明确示出)。计算机设备1005响应于计算机存储器中存在的材料执行操作。计算机设备1005可以执行处理计算机应用的操作,这使得计算机设备1005执行附加操作。因此,功能描述材料展示了与计算机设备1005执行过程和执行操作的方式的功能相互关系。
[0177]
此外,计算机可读介质1025构成计算机设备1005可以从其访问计算机信息、程序、代码和/或应用的装置。计算机设备1005可以处理使计算机设备1005执行附加的或期望的任务或操作的信息、程序、代码和/或应用。
[0178]
需注意,如本领域普通技术人员将理解的,可以以多种方式实现计算机可读介质1025。例如,根据需要,计算机设备1005内(和/或计算机设备1005外部)的存储器可以构成计算机可读介质1025。
[0179]
可替代地,计算机可读介质1025可以包括一组关联的、相互相关的、耦合的(例如,通过导体、光纤等)或联网的计算机可读介质,例如,当计算机设备1005从计算机设备或信息处理系统的网络接收功能描述材料时。需注意,计算机设备1005可以根据需要从计算机可读介质1025、网络或两者接收功能描述材料。此外,可以根据需要从一个或多个网络(未示出)接收系统1000的一个或多个输入和/或一个或多个输出或将一个或多个输入和/或一个或多个输出提供给一个或多个网络。
[0180]
上述和在示例性实施例中使用的各种电路和块可以以各种方式并使用各种电路元件或块来实现。例如,阵列处理器1中的块和电路通常可以使用数字电路来实现。数字电路可以根据需要包括电路元件或块,诸如门、数字多路复用器(mux)、锁存器、触发器、寄存器、fsm、处理器、可编程逻辑(例如,现场可编程门阵列(fpga)或其他类型的可编程逻辑)、alu、标准单元、定制单元、门、传输门等,如本领域普通技术人员将理解的。此外,根据需要,可以包括模拟电路或混频信号电路或两者(例如,在图21中的ic 550中),例如,功率转换器、分立器件(晶体管、电容器、电阻器、电感器、二极管等)等。模拟电路可以根据需要包括偏置电路、去耦电路、耦合电路、电源电路、电流镜、电流和/或电压源、滤波器、放大器、转换器、信号处理电路(例如,乘法器)、检测器、换能器、分立元件(晶体管、二极管、电阻器、电容器、电感器)、模拟多路复用器等,如本领域普通技术人员将理解的。如上所述,除了模拟电路和数字电路之外,混频信号电路还可以包括模数转换器(adc)、数模转换器(dac)等,如本
领域普通技术人员将理解的。如本领域普通技术人员将理解的,用于给定实现方式的电路选择取决于多种因素。这些因素包括设计规范、性能规范、成本、ic或器件面积、可用技术,诸如半导体制造技术、目标市场、目标最终用户等。
[0181]
参考附图,本领域的普通技术人员将注意到,所示的各个块可能主要描绘概念性功能和信号流。实际的电路实现方式可能包含也可能不包含用于各种功能块的可单独识别的硬件,并且可能会或可能不使用所示的特定电路。例如,可以根据需要将各种块的功能组合成一个电路块。此外,可以根据需要在多个电路块中实现单个块的功能。电路实现方式的选择取决于各种因素,诸如给定实现方式的特定设计和性能规范。除了本公开中的实施例之外的其他修改和替代实施例对于本领域普通技术人员来说将是显而易见的。因此,本公开教导本领域技术人员根据示例性实施例执行所公开的概念的方式,并且该方式应当被解释为仅是说明性的。在适用的情况下,如本领域普通技术人员将理解的,附图可能按比例绘制也可能不按比例绘制。
[0182]
所示和描述的特定形式和实施例仅构成示例性实施例。本领域技术人员可以在不脱离本公开的范围的情况下,对零件的形状、尺寸和布置进行各种改变。例如,本领域技术人员可以用等效的元件代替所示出和描述的元件。此外,在不脱离本公开的范围的情况下,本领域技术人员可以独立于其他特征的使用而使用所公开概念的某些特征。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献