专利名称:合并用于执行基于周期的程序的互连处理器阵列的集成电路的制作方法
技术领域:
本发明涉及集成电路领域。本发明尤其涉及合并用于执行基于周期(cycle-based) 的程序的互连处理器阵列的集成电路。
背景技术:
已知提供用于执行数据处理任务的集成电路。这些集成电路在能力和复杂度方面迅速增加。还已知采用在通用处理器上执行的程序或者使用专门目的的专用硬件的形式来提供想要的数据处理功能。在通用处理器上执行程序的方法其优点在于灵活性,其可以相对容易地修改程序因此适应执行的处理。作为一个例子,如果程序执行一些数据加密或解密处理并且在集成电路的使用寿命期间修改加密或解密的方法,那么可以修改正执行的程序以便考虑该变化。然而,使用在通用处理器上执行的程序通常比使用专用硬件更为缓慢且功率效率更低。专用硬件可以被调谐并优化以便执行特定的处理功能。诸如加密引擎或解密引擎之类的这种专用硬件与在通用处理器上执行的程序相比较可以以相对较低的功耗来给出高性能。然而,这种专用硬件其缺点在于相对不够灵活,并且在集成电路的使用寿命期间通常不可被修改以便适合于改变处理要求。其中在软件实现的处理和专用硬件支持之间存在权衡的另一情况是其中要求集成电路的多个变形。与开发和制造集成电路相关联的成本很高。如果使用专用硬件以便从其高速和低功耗中获益,那么需要对每种不同的变形制造不同的集成电路以便提供要求的不同硬件支持。这增加了成本。据此,在这种环境中可能希望经由在处理器上执行的软件来提供想要的功能,即使这可能相对较慢并且功率效率更低。进一步问题情况是其中以可观的费用开发并制造集成电路然后改变想要的集成电路的功能。在设计和制造集成电路时,可能不需要特定形式的功能。然而,在制造的集成电路的使用寿命期间,可能出现这种需要。为了避免必须适应制造处理的成本,在这些环境中可能优选采用软件而不是使用专用硬件的形式提供新的想要的功能。此软件实现方式通常具有较低的性能和较高的功耗,但是这优选可以是开发新的集成电路的成本。还可以经由软件更新修改现有的现场最终用户设备,而替换在那些最终用户设备内的集成电路以便提供想要的新功能更加有问题。
发明内容
从一个方面来看,本发明提供了一种用于数据处理的集成电路,所述集成电路包括互连的处理器阵列,每个处理器具有存储器,所述存储器存储定义要由所述处理器执行的一组处理操作的程序;另外的处理电路,用于对同步时钟信号作出响应以便执行同步处理操作;和接口电路,被耦合到所述阵列和所述另外的电路以便在所述阵列和所述另外的处理电路之间提供一个或多个信号的通信,以致在所述阵列和所述另外的处理电路之间分布所述集成电路的数据处理操作;其中在所述阵列的存储器内存储的程序一起定义了要由
6所述阵列的处理器执行的多组处理操作,以致所述阵列被配置为执行基于周期的程序;所述基于周期的程序提供了状态变量,用于允许在所述基于周期的程序的一个程序周期中执行的操作结果将在所述基于周期的程序的随后的程序周期期间访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个处理器执行从预定的执行开始点开始的相应程序以便估计所述至少一些状态变量的下一状态,在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。当前技术在集成电路内提供互连处理器阵列的组合,每个处理器均具有用于存储该处理器的程序的存储器,并且所述阵列响应于同步时钟信号经由接口电路与另外的处理电路通信以便执行其自己的同步处理操作。从而互连处理器阵列和另外的处理电路协作以便实现相关集成电路全部想要的功能。编程阵列的处理器以致所述阵列被配置为执行基于周期的程序。基于周期的程序提供了用于允许在基于周期的程序的一个程序周期中执行的操作以在所述基于周期的程序的随后程序周期期间被访问的状态变量。基于周期的程序通过确认在每个程序周期中需要执行什么处理操作以便根据可用的输入状态变量产生想要的输出状态变量来提供想要的功能。然后在阵列的不同处理器之间划分此处理。阵列中的每个处理器在每个估计周期开始时执行从预定的执行开始点开始的自己的程序,以便估计至少一些状态变量的下一状态。所述阵列的每个处理器执行从在每个程序周期期间的相同点开始的相同程序,不过通过该程序的路径可以改变。在程序周期之间的边界提供了用于由阵列执行的处理操作的同步时间。在这种阵列内的不同处理器之间划分要执行的处理允许高度的并行性。基于周期的程序简化了阵列的编程。并行处理的编程非常困难。然而,当用户设法提供这种处理而不是专用硬件时,对这种专用硬件的设计者来说正常的是已经具有处理操作的清晰视界, 需要由专用硬件在每个周期期间并行执行所述处理操作。使用怎样提供专用硬件的此理解允许基于周期的程序依照以下方式在阵列的不同处理器之间形成和分割,所述方式允许在使用所述阵列提供要求的功能中实现在处理器性能和功耗之间的良好平衡。硬件工程师用来把要求的处理分割为不同的部分,所述部分可以被硬件并行执行。使用诸如寄存器传送级Verilog或可合成Verilog之类的设计语言来执行大量硬件设计,所述设计语言利用明确的时钟信号并且定义了要在每个时钟周期期间并行执行的操作。可以在形成用于阵列处理器的基于周期的程序中利用此类理解和现有的基础结构。阵列的每个处理器在程序周期期间执行其单个程序以便根据其输入状态变量来生成其输出状态变量。由并未产生状态变量和临时(非状态)变量的处理器所要求的这些变量值在执行期间跨过阵列通信链路传输。 程序周期对应于硬件内的时钟周期。依照硬件元件将在每个时钟周期执行相同处理的相同方式,阵列内的处理器在每个程序周期也执行相同的程序。与由同步时钟信号驱动的另外的处理电路通信的接口电路可以采取各种不同的形式。可以独立地或组合地使用这些不同的形式。不同的形式包括另外的处理电路的同步时钟总线;另外的处理电路的异步总线;依照握手协议提供通信的握手电路;用于对来自阵列将要传送到另外的处理电路的信号作出响应以便维持要被传递到另外的处理电路的信号的信号电平达预定数目周期的同步时钟信号的电路;用于对来自所述阵列将要传送到另外的处理电路的信号作出响应以便在预定数目周期的同步时钟信号之后改变被传递到另外的处理电路的信号的信号电平的电路;和/或用于在相对于所述同步时钟信号的预定
7时间从另外的处理电路采样信号然后把所述信号传递到利用所述阵列的时钟信号同步的阵列的电路。这些不同的接口机构具有不同的强度和缺点。例如,利用同步总线可以更容易地提供可预测的性能级别。使用异步总线可以在集成电路执行的整个处理内合并想要的通信中给予更多的灵活性。使用保持信号达预定数目周期的同步时钟信号或者在预定数目的周期之后改变信号的电路来提供用于确保适当地捕获被传递到利用同步时钟信号操作的另外的处理电路的信号的机构。由阵列的处理器执行的程序与静态或时变硬件配置的特性相对比具有软件程序的特性。在至少优选实施例中,阵列的处理器的程序可以包括用于允许非顺序程序流的分支编程指令、用于允许更高的程序密度和/或程序指令的可变长度指令,所述指令按照可以与不同的程序指令相关联的处理复杂度的不同级别花费阵列处理器的不同数目的时钟周期来执行。阵列的处理器一般是相对简单的处理器,这是由于只要求它们重复地执行只是本身作为全部想要处理的一部分的一个程序。阵列处理器的简单形式可以允许它们利用高频率阵列时钟信号来执行,高频率阵列时钟信号可以比由另外的处理电路使用的同步时钟信号在频率上更大。从而,阵列处理器可以执行许多处理周期来在另外的处理电路的同步时钟信号的单个时钟周期期间实现由所述阵列提供的全部处理中想要的部分。可以依照某些固定方式利用同步时钟信号来同步阵列的程序周期。这可以便于在阵列和另外的处理电路之间的通信。还可以允许程序周期具有可变的持续时间,而接口电路仍然依照与同步时钟同步的方式继续与另外的处理电路通信。这可以允许阵列例如在不要求高性能时进入低功率模式。更进一步例子可能会改变程序周期持续时间以便匹配要执行的处理量。阵列内的处理器可以提供用于处理多比特数据值的多比特数据通道。情况常常是当要并行执行的处理操作被划分时相对于多比特值内的不同比特要求相同的处理操作并且这可以利用支持这种多比特通道的阵列内的处理器方便地且有效地执行。在阵列和另外的处理电路之间的接口电路在一些实施例中可以使用系统总线,所述系统总线被开放用于在不涉及阵列的集成电路内的通信。从而所述阵列可以充当被附着到系统总线的主或从设备,其利用已经提供的通信基础结构。在其它实施例中,接口电路可以经由专用于在阵列和另外的处理电路之间的通信的私有总线提供到另外的处理电路的通信。此布置允许实现更紧密耦合的关联并且比利用开放系统总线提供更可预测的性能级别和潜在的更高性能。阵列的程序通常可以是根据具有将由阵列提供的功能的硬件的机器可读硬件描述产生的机器。如上所述,硬件工程师已知使用机器可读的硬件描述来设计专用硬件。然后通常使用各个软件工具来把这些机器可读的硬件描述转换为想要硬件的门级实现方式。此处理通常被称为硬件合成。利用当前技术,可以利用相同的机器可读硬件描述来采用类似于软件编译的技术产生用于阵列处理器的程序。硬件描述一般采用具有明确时钟的形式, 其便于在阵列的处理器之间的分割以及正执行处理的有效并行化。机器可读的硬件描述的例子包括寄存器传送级Verilog和可合成的Verilog。当在阵列内处理器的存储器可重写时,便于在集成电路内阵列的复用性和灵活性。虽然在一些情况下可以使用非可重写存储器,不过用于阵列内处理器的可重写存储器
8允许它们被重新编程并且允许它们易于在每个程序周期期间用于临时数据存储。应当理解,另外的处理电路可以采取各式各样的不同形式。这些例如可以包括通用程序控制处理器、数字信号处理器、不可编程的处理引擎和存储器。从另一方面来看,本发明提供了一种用于编程具有互连处理器阵列和另外的处理电路的集成电路的方法,每个处理器具有存储器,所述存储器存储包括要由所述处理器执行的一组处理操作的程序,另外的处理电路对同步时钟信号作出响应以便执行同步处理操作,所述方法包括步骤产生具有至少一个明确时钟信号的可合成硬件描述以便执行想要的处理;把所述硬件描述映射到多个程序,每个程序均定义要由所述阵列内的处理器执行的一组处理操作;并且把所述多个程序存储在所述阵列内的相应程序存储器中,以致
所述阵列当执行所述多个程序时对应于在所述硬件描述中描述的想要处理来执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个处理器执行从预定执行开始点开始的相应程序以便估计所述至少一些状态变量的下一状态,在为由所述阵列执行的处理操作提供同步时间(或点)的程序周期之间的边界。从进一步方面来看,本发明提供了一种包括用于数据处理的集成电路的最终用户设备,所述集成电路包括互连的处理器阵列,每个处理器具有存储器,所述存储器存储定义要由所述处理器执行的一组处理操作的程序;另外的处理电路,其对同步时钟信号作出响应以便执行同步处理操作;和接口电路,被耦合到所述阵列和所述另外的电路以便在所述阵列和所述另外的处理电路之间提供一个或多个信号的通信,以致在所述阵列和所述另外的处理电路之间分布所述集成电路的数据处理操作;其中在所述阵列的存储器内存储的程序一起定义了要由所述阵列的处理器执行的多组处理操作,以致所述阵列被配置为执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个处理器执行从预定执行开始点开始的相应程序以便估计所述至少一些状态变量的下一状态,在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。从进一步方面来看,本发明提供了一种用于对具有互连处理器阵列和另外的处理电路的集成电路的功能提供现场更新的方法,每个处理器具有存储器,所述存储器存储包括要由所述处理器执行的一组处理操作的程序,并且另外的处理电路对同步时钟信号作出响应以便执行同步处理操作,所述方法包括步骤产生具有至少一个明确时钟信号的可合成硬件描述以便执行想要的处理;把所述硬件描述映射到多个程序,每个程序定义了要由所述阵列内的处理器执行的一组处理操作;并且把所述多个程序存储在所述阵列内的相应程序存储器中,以致所述阵列当执行所述多个程序时对应于在所述硬件描述中描述的想要处理来执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个处理器执行从预定执行开始点开始的相应程序以便估计所述至少一些状态变量的下一状态, 在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。
现在参考附图仅以举例形式描述本发明的实施例,其中 图1示意地图示了合并了集成电路的最终用户设备;
图2示意地图示了合并了处理器阵列和另外的处理电路的集成电路; 图3示意地图示了处理器阵列; 图4从处理器阵列内部示意地图示了单个处理器;
图5ajb、5c、5d和^示意地图示了在简单的C程序、用于执行与C程序相同功能的伪码基于周期的程序之间的关系、在所述伪码程序内的指令之间的依赖性、把伪码程序分割为在两个处理器上运行的两个子程序和伪码执行轨迹;
图6A、6B和6C图示了在同步时钟信号(系统时钟信号)、阵列时钟信号和程序周期之间的关系;和
图7是示意地图示编程处理器阵列的流程图。
具体实施例方式图1图示了最终用户设备2,合并与存储器6和输入/输出电路8通信的片上系统集成电路4。应当理解,最终用户设备可以具有各式各样的不同形式。例如,最终用户设备可以是移动电话、便携式计算机、车内控制系统、电视机内的控制系统或许多其它最终用户设备。存储器6存储用于供集成电路4操纵或使用的数据和程序。与最终用户设备2外部的设备的通信由输入/输出电路8执行。在初始设计之后,或在现场使用期间,所要求的集成电路4的功能可以改变。例如,可能需要支持新的加密算法,或者可能需要解码新格式的媒体数据。可以通过重新编程用于控制在集成电路4内的通用处理器的软件来适应一些新的要求。然而,这种通用处理器与新功能的专用硬件实现方式相比较可能不能提供足够高性能或足够高效率的处理。图2示意地更详细地图示了集成电路4,所述集成电路4包括处理器10的阵列、接口电路12和另外的处理电路14。处理器10的阵列使用系统总线16经由接口电路12与另外的处理电路14通信。在一些实施例中,还可以利用直接在接口电路12和另外的处理电路14之间径直延伸的私有总线(和/或各个信号)18。高速缓冲存储器20、主存储器22和输入/输出电路M也被连接到系统总线16并且可以在不牵涉阵列10的情况下与另外的处理电路14通信以及互相通信。另外的处理电路14、高速缓冲存储器20、主存储器22和输入/输出电路M均由遍及集成电路4分布的系统时钟信号sclk (用于充当上述同步时钟信号)来驱动。阵列10 具有其自己的更高频率的阵列时钟信号aclk,其用来控制处理器沈的阵列。这些处理器 26互连。示出了从阵列内的处理器到它们的北、南、东和西邻居的局部连接。还可以在间隔很远的处理器之间提供非局部互连。接口电路12接收系统时钟信号sclk和来自阵列10的信号。接口电路12管理在另外的处理电路14和阵列10内的处理器沈之间的通信。此通信可以经由系统总线16或私有总线18。经由系统总线16或私有总线18的通信可以是同步或异步的。当异步操作时,代替sclk,总线可以使用异步电路(例如异步握手电路(无sclk))或者可以只是sclk与 aclk不同步。同步通信具有诸如可预测性之类的优点,而异步通信可以更灵活且可适应。 也可以支持两种类型的通信。接口电路12可以尽可能迅速地向另外的处理电路14输出从基于周期的程序接收的值。类似地可以使来自另外的处理电路14的值尽快地可用于基于周期的程序。作为选择,接口电路12可以把到另外的处理电路14的输出同步到sclk或在sclk 边缘之后的多个aclk周期。类似地,可以在sclk边缘或在sclk边缘之后多个aclk周期采样来自另外的处理电路14的输入。作为选择,对于在sclk边缘之后的多个aclk周期可以将到另外的处理电路14的输出值发信号给接口电路12。类似地,来自另外的处理电路14的输入对于在sclk边缘之后的多个aclk周期来说可以是灵敏的。接口电路12可以被发送一组输出值以便依照由sclk或aclk边缘推进的顺序来输出到另外的处理电路14。类似地,可以每个程序周期一次以上地采样来自另外的处理电路14的输入,该组采样可用于基于周期的程序。接口电路12可以被配置为保持其输出值,除非在相对于aclk或sclk指定的最终期限前向其发送新值。类似地,来自另外的处理电路14的接口电路12的输入可以被配置为只有当在相对于aclk或sclk指定的最终期限前来自另外的处理电路14的新值到达时才采样此新值。可以对某些值和到被报告给基于周期的程序的那些值的转变来监视来自另外的处理电路14的输入,即便所述值随后在所述基于周期的程序读取输入之前改变为其它值。当使用握手把另外的处理电路14连接到阵列时,接口电路12可以负责握手协议的一部分或全部。在一种极端情况,接口电路12采取要从阵列传送的值并且执行到另外的处理电路14的整个握手控制转移或者反之亦然。在另一极端情况,接口电路12把握手控制信号值传递到阵列并且在所述阵列上的基于周期的程序执行握手协议。在一些实现方式中,接口电路12还可以缓冲从阵列到另外的处理电路14或者从另外的处理电路14到阵列的通信。依照一个时钟或协议把值插入到缓冲器中并且依照其它时钟或协议从缓冲器中移除。图3更详细地示意地图示了阵列10。特别地是,接口电路12被示为包括总线接口部件28和输入/输出部件30。总线接口部件28负责使用系统总线16或私有总线18与总线事务通信。这些事务可以利用阵列时钟aclk同步或者是异步的。所述事务可以在任一方向上传递数据或控制。总线接口部件观对阵列时钟信号aclk以及系统时钟信号sclk 作出响应。输入/输出部件30负责向和从阵列10传递并非是总线事务的信号。这些信号例如可以是中断信号或控制信号。输入/输出部件30负责保持到另外的处理电路14的输出信号达预定数目的aclk时钟信号周期(利用依照aclk或sclk周期计数的延迟)或者如先前所讨论在预定数目的系统时钟信号周期之后改变这种信号。也可以使用握手电路和协议。图4更详细地示意地图示了阵列10的处理器26。处理器沈包括存储器32,用于存储要由处理器26执行的程序以及提供用于由所述处理器沈执行的处理变量使用的数据存储。存储器32可以被分割以便允许同时访问多个指令或数据值。指令或数据的使用可以是固定的或可变的。处理器26进一步包括加载存储部件34,用于向和从存储器32加载数据。算术逻辑部件36对数据值执行由从存储器32获取的程序指令所指定的算术或逻辑操作。互连电路38用来向阵列10内的其它处理器沈提供北、南、东和西局部连接以及非局部连接。处理器沈被互连并且可以在程序周期边界和与这种边界的固定偏移处交换信号。处理器沈进一步包括用于存储在处理操作中频繁使用的值的寄存器文件40。即时产生器电路42响应于解码的指令以便产生用于数据操纵的即时值。这种即时值由正操纵的程序指令指定,如在本技术领域内的技术人员所熟知。使用包括PC控制逻辑46、递增器48和多路复用器50的程序计数器电路44来寻址存储器32以便获取供处理器沈执行的程序指令。PC控制逻辑46借助适当操纵程序计数器值来响应于分支指令以便触发程序流到分支目标的非顺序跳转。在正常的顺序程序流中,当要求要由处理器沈执行的每个程序指令时,递增器48用来推进程序计数器(达取决于当前指令长度的量)。指令译码器52解码从存储器34取出的程序指令。这些程序指令可以是可变长度程序指令以便改进代码密度。程序指令还可以采用可变数目的阵列时钟周期来利用在适当数目的阵列时钟信号周期之后改变的程序计数器值PC来执行。当遇到用于指定即时值的指令时,指令译码器52控制即时产生器电路42及其它电路元件。此外,至少由算术逻辑部件36产生的标志信号可以用来修改指令译码器52的行为。例如,当由算术逻辑部件执行的先前数据处理操作生成零值时,条件分支指令可以触发分支。诸如非零、进位、上溢等进一步的标志类型是惯用的并且可以由指令译码器52根据其复杂水平来使用。从每个程序周期的预定开始点执行在存储器32内存储的程序。通过所述程序的路径可以改变。在一些程序周期中,处理器沈可以不要求任何处理并且相应地处理路径非常短,所述处理器花费大部分时间来等待开始下一估计周期。在其它程序周期中,可以要求复杂处理,所述复杂处理正好在程序周期结束之前完成。在每个程序周期中,执行的程序可以被认为是操纵输入状态变量以便依照等效于可能由涉及功能的专用硬件实现方式的相应部分实现什么的方式来产生输出状态变量。阵列内的各个处理器负责重复地执行它们各自的程序以便实现硬件的小部分功能,所述功能否则可能会在专用硬件实现方式中使用。 处理器沈由于它们相对简单所以可以以高阵列时钟信号频率操作,许多阵列时钟信号周期对应于信号程序周期和/或单个系统时钟周期。阵列10内的处理器沈总体上一起用来执行基于周期的程序,所述基于周期的程序执行所想要的用于在每个程序周期操纵状态变量的整个功能以便确定下一程序周期的那些状态变量值。这类似于其中同步硬件在每个时钟信号中进行估计以便产生用于表征当前周期结果的电路状态的方式,所述当前周期从用于表征结果周期的状态开始。处理器沈例如利用支持多比特算术操作和多比特逻辑操作的算术逻辑部件沈来操纵多比特数据值。类似地,加载存储部件34可以关于多比特数据值执行向和从存储器34 的存储数据操作和加载数据运算。在实践中,许多想要的处理操作具有这种多比特特性,其
12更有效地被具有多比特能力的处理器26支持。存储器32是可重写的。这允许现场重新编程处理器沈。可以依照各种不同的方式来实现存储器32的重新编程。可以提供独立的重新编程信道。作为选择,重新编程可以在阵列10内的处理器沈之一的控制之下进行。返回到图2,应当理解,另外的处理电路14可以具有各种不同的形式。例如,可以采用通用程序控制处理器、数字信号处理器、不可编程的处理引擎或存储器的形式。集成电路4可以或可以不包括另外的元件。图如是简单的C程序,用于执行与图恥中基于周期的伪码相同的功能。其目前只是为了帮助理解测试案例的目的。基于周期的代码并非根据C程序导出。所述程序上数到极限然后倒数至零然后再次重复地上数。当上数时,计数增加到当前计数(count)乘以3 加上1。当倒数时,计数减少100。C语言是这样的以致在程序中的指令依照它们在程序中出现的次序执行,因此例如当所有的“if”条件估计为真时
在行12的“if”估计,之后在行14的“if”估计,之后在行14的“count = count * 3 + 1”估计,之后在行 15 的 “downward” · · ·
注意C程序包括printf函数调用,用于把结果打印到屏幕上。这并未包括在图恥中基于周期的伪码中。图恥示出了用于执行与图如相同计数的基于周期的程序的伪码。行11、12和沈划清了用于捕获想要的程序功能的指令块的界限。在行11和25 之间的指令并未依照执行它们的次序来描述想要的程序功能。作为替代,可以依照满足它们之间依赖性的任何次序来估计指令(参见图5c)。注意为了排序,在行21和22上的整个“if. .. else... ”被认为是一个指令。类似地,在行M、25的“if. .. else...”也是。运行此基于周期的程序的处理器重复地估计在行11和25之间的操作。每次估计对应于阵列中元件的程序周期。在一些应用中,允许此重新估计无限地继续,即直到移除功率或者复位处理器。在其它应用中,实现“退出”指令(未在此伪码中示出)并且这可以由程序用来发信号表示它想要停止执行。行4和5宣告用于从一个程序周期向下一程序周期发送信息的状态变量。使用在变量名末尾的“*”来标识从上一程序周期传递的值,不插入任何空白空间。因此,“count *”访问从上一程序周期传递的状态变量“count”值,"count"访问要被发送到下一程序周期的值,“count *”只可以被读取并且无法被赋值,“count”可以被读取和赋值。每个程序周期可以读取多次,但是每个程序周期只可以赋值一次。在这些实施例中,在第一程序周期之前状态变量被初始化为零。在其它实施例中,所有状态变量可以按每个变量被初始化为一到程序员指定的值。行7和8宣告临时变量,其值在程序周期结束时丢失。同样,这些变量在每个程序周期可以读取多次,但是每个程序周期只可以赋值一次。具有同步数字电子硬件设计知识的那些人应当认识到,基于周期的程序相似于用于指定同步数字硬件的寄存器传送级(RTL)描述。他们还看出可以根据在硬件描述语言的
13可同步子集中的代码来导出基于周期的程序。所述设计必须具有单个时钟或者通过划分一个主时钟导出的多个时钟。用于导出基于周期的程序所要求的算法是合成算法,在学术和商业电子设计自动化工具中是公知的并且有所表明。图5c示出了在图恥中的行11和25之间的伪码指令之间的依赖性。(1) & (2) 表示由“if”指令表明的选择。虚线箭头表示循环返回以便估计下一程序周期的执行。只要涉及程序员,在开始下一程序周期之前就完全完成一个程序周期的全部工作。执行所述工作以致认可在图5c中所示出的依赖性。从一个程序周期到下一程序周期的推进由虚线箭头图示的新程序周期同步来标记。一些实施例可以允许在开始下一程序周期时完成来自上一程序周期末尾的一些工作。在下一程序周期中并非立即需要相应的状态变量的情况中此“借”工作。向程序员隐瞒了“借”优化,所述程序员可能会依赖好像在开始下一程序周期之前完全完成上一程序周期那样起作用的程序。图5d示出了此简单的测试案例可以怎样被分割为在多处理器的两个处理器上运行的两个伪汇编码子程序。因为这是一个小例子,所以只需要两个处理器。现实例子可能需要成百上千或者更多的处理器,所述处理器之间具有巨大的细粒通信。一旦已经对程序导出诸如在图5c中所示出的依赖关系图,就可以使用已知的分配和调度算法来向处理器分配指令。所述例子示出了可以在处理器之间分配代码的许多方式之一。在此例子中,每个处理器依照次序执行代码但是在其它实施例中,可以使用在无序处理器和动态数据流计算机中发现的技术由每个处理器的硬件来确定执行次序。下面描述两个处理器的伪汇编码。此伪汇编码用来表明在处理器之间基于周期的程序的细粒分割。此伪汇编码可能会被转换为二进制编码的机器代码指令以便存储在处理器的存储器中。常常一个汇编指令对应于一个机器代码指令,但是并不保证一定是这样。处理器0
行1 把来自另一处理器的值接收到RO中(通信标记“x_Coimt*”) 行2 如果RO大于334,那么把Rl设置为非零行3 向另一处理器发送Rl中的值(通信标记“x_hit_max”) 行4 把RO乘以3 行5 把RO增加1
行6 向另一处理器发送RO中的值(通信标记“x_COimt_U”) 处理器1
行1 把RO设置为从上一程序周期传递的“count”状态变量值行2 向另一处理器发送RO中的值(通信标记“x_COimt *”) 行3 从RO中减去100
行4 把Rl设置为从上一程序周期传递的“downward”状态变量值行5 把来自另一处理器的值接收到R2中(通信标记“x_hit_max”) 行6 如果Rl中的值是零,那么分支到“labell” 行7 如果RO小于或等于零,那么把R3设置为非零行8 反向R3中的值行9 到“label2”的无条件分支行10 分支目标标记“label 1” 行11:把R3设置为R2中的值行12:分支目标标记“label2”
行13 在“downward”状态变量中把R3中的值传递到下一程序周期
行14 把来自另一处理器的值接收到R4中(通信标记“X_Coimt_U”)
行15 在R3是非零的条件下,在“downward”状态变量中把RO中的值传递到下一程序
周期
行16 在R3是零的条件下,在“downward”状态变量中把R4中的值传递到下一程序周
期
行6到12使用条件分支实现了图5c中的选择操作标记(1)以便使控制流改变。但是行15 & 16使用条件指令来实现图5c中的选择操作标记(1)。大部分伪码指令在许多处理器中是公知的并且被使用。进一步解释四个指令 “get_state,,、“put_state,,、“send,,禾口 "receive”。Get state and put state 这些伪指令用于访问从一个程序周期向下一程序周期传递信息的状态变量。例如“get_State(C0Unt *)”获得从先前程序周期传递的“count” 值。“pUt_State (count)”设置在此程序周期中的计数(count)值并且传递给下一程序周期。“get_State (count)”也获取在当前程序周期中先前设置的计数值。因此,在当前周期中的计数值和从先前周期传递的值均可以被访问。使用指令中的状态变量的串标识符(在这种情况下为“count”)使汇编码易于读和写。汇编器根据情况为状态变量分配存储器或寄存器空间并且使用适当的机器指令来访问状态。如果可以调度机器代码使得在一周期中的所有“count *”读取均出现在写入“count”之前,那么可以通过重写保持“count”的存储单元或寄存器来简单地把该值传递到下一程序周期。如果必须在写入“count”之后读取 "count *”,那么在此实施例中,工具必须插入代码以便管理拷贝“count *”或延迟重写用于保持“count”的寄存器或地址。在其它实施例中,处理器硬件直接支持更新状态变量。send and receive 这些伪指令用于在处理器之间进行通信。以及源或目的寄存器,在发送(send)和接收(receive)指令中给出用于事务的标签。此标签标识汇编器打算的开始和结束点,使得它可以创建正确的代码来实现想要的转移。注意,“send”指令可以具有一个以上相关联的“receive”指令。在此实施例中,使用多比特链路把处理器连接到它们的最近邻。在其它实施例中, 使用其它类型的处理器间消息传递链路技术和网络拓扑。这些包括单比特串行链路和多比特链路、链路、最近邻的分组路由链路、第N邻居、异构超立方体网络。在此实施例中,处理器通信可以在处理器之间直接路由,并且处理器的处理器间通信硬件将自主地把行进的转移传递到其它处理器。在其它实施例中,通过中间体路由器块来路由通信。在其它实施例中,处理器的处理器间通信硬件不是自主的并且路由通过处理器的程序通信进行。在此实施例中,事务标签由汇编器用来对准发送和接收指令的时间,因此它们同时出现在独立的处理器上。事务标签还用于用执行传输的机器代码来编码接收处理器的相对位置。在其它实施例中,编码接收处理器的绝对位置。在其它实施例中,编码接收处理器的另一唯一标识符。
在接收处理器,事务标签用来编码预计通信的输入信道。此实施例通过要求链路在一个周期操作以约束链路性能为代价来对准发送和接收指令的时间以便使处理器间的链路变得简单。这也约束了指令相对于程序周期的开始在机器代码中的位置。其它实施例把每个处理器中的事务代码与固定偏移对准以便向链路给予用于传递信息的更多时间。其它实施例用机器代码指令编码用于事务的偏移,所述机器代码指令放松对发送和接收指令位置的约束。允许比链路等待时间更长的偏移增加了用于在处理器或处理器间链路中某处缓冲的要求。在其它实施例中,事务标签用来分配事务的唯一标志。所述标志必须至少跨过时间范围是唯一的,所述传输可以进行并且跨过消息可以传递的多处理器的区域。在发送和接收处理器之间唯一的标志可以用来标识在两个处理器之间的事务。这些大部分可用于直接通信。跨过多处理器的一部分或全部唯一的标志还可以用来通过中间处理器或路由器路
由通信。图k是基于周期的程序的两个程序周期的伪码执行轨迹。在每个处理器时钟周期中执行的操作被示为每个程序周期的开始。在此实施例中,处理器按次序执行指令并且每个处理器周期可以并行执行多达一个通信指令(发送或接收)和一个其它指令。在其它实施例中,处理器每个周期执行一个指令。在其它实施例中,处理器并行执行其它数目的指令。在其它实施例中,处理器无序地执行指令。下面是处理器0上的活动描述
1.在此实施例中,此指令开始新的程序周期,在静态调度中它与处理器1上的相同指令对准。在其它实施例中,在第一指令或通信上隐含出现对准的情况下,可以不需要指令。 在其它实施例中,通过在处理器1和处理器0之间的程序宽同步信号来出现对准。这随后允许每个程序周期的处理器周期的数目取决于在给定处理器周期中要求的工作而动态地改变。在其它实施例中,每个程序周期的处理器周期的数目动态地改变,只要运行一部分程序的所有处理器为它们都传送足够的信息来在每个程序周期执行相同数目的处理器周期即可。2.这是空周期。要求空周期是因为处理器0无法作任何有用的事情,直到它接收传输“X_COimt *”。在此实施例中,它使用用于把处理器置于周期的功率减少状态的NOP指令来实现。在其它实施例中,在从程序周期开始的偏移开始的或者通过接收处理器间通信触发的执行的情况下,可以不需要NOP。在动态调度中,可以潜在地移除此空周期以减少程序周期中处理器周期的数目或者通过允许处理器以降低的功率进入空闲状态来在程序周期结束时节约功率
3.被标记为“X_Coimt *”的传输值被接收到寄存器RO中。4.如果内容RO大于334,那么Rl被设置为非零。5.传输内容R1,被标记为“X_hit_maX”。传输指令可以与步骤4并行执行,除步骤 4设置Rl之外,并且此实施例不支持必要的转送路径以便在相同的周期传输计算的值。其它实施例可以包括此转送路径。6.多级指令的开始把值RO乘以3 7.乘法指令继续
168.乘法指令继续
9.乘法指令继续
10.向内容RO加一。11.传输内容 R0,被标记为 “x_count_u,,。12. & 13.这些是空步骤,这是因为处理器已经完成了它在程序周期的工作并且下一程序周期尚未开始。在此实现方式中,处理器进入低功率状态,直到下一周期开始。在其它实现方式中,处理器可以开始来自下一程序周期的任何工作。14.到26.这些是下一程序周期。工作是上面步骤1到13的镜像。
在示出的伪指令轨迹一部分之后,执行会继续迭代。后面是处理器1上的活动描述
1.此指令开始新的程序周期,在此实施例中,在静态调度中它与处理器0上的相同指令对准。2. RO被设置为从上一程序周期发送的“count”状态变量值。3. RO中的值被发送到另一处理器,其具有被标记为“X_Coimt *”的事务。并行地从RO中减去100。传输在减去100之前的值RO。4.Rl被设置为从上一程序周期发送的“downward”状态变量值。
5.被标记为“x_hit_max”的传输值被接收到寄存器R2中。
6.不取分支——在此例子中我们假定在此周期中Rl不为零。
7.如果RO中的值小于或等于0,那么R3被设置为非零。
8.如果R3是零,那么它被设置为非零,如果R3是非零,那么它被设置为零。
9.无条件分支(无条件的,因此没有分支负担)10.R3中的值被存储在状态变量“downward”中以便传递到下一程序周期。
11.被标记为“X_Coimt_U”的传输值被接收到寄存器R4中。
12.如果R3是零,那么RO中的值被存储到状态变量“count”中以便传递到下
序周期。13.如果R3是非零的,那么R4中的值被存储到状态变量“count”中以便传递到下
一程序周期。14.此指令开始新的程序周期。15.作为周期2
16.作为周期3
17.作为周期4
18.作为周期5
19.与先前的程序周期不同,采取分支的时间。20.由于采取条件分支所导致的未使用的周期负担。21. R3被设置为在R2中保持的值。22. R3中的值被存储在状态变量“downward”中以便传递到下一程序周期。23.这是空周期。要求空周期是因为处理器0无法作任何有用的事情,直到它接收传输"x_count_u,,。24.作为周期11 (被标记为“X_COimt_U”的传输值被接收到寄存器R4中)。
25.作为周期12 26.作为周期13
在示出的伪指令轨迹一部分之后,执行会继续迭代。图6a、6b和6c示意地图示了在系统时钟信号sclk、阵列时钟信号aclk和程序周期之间的关系。如同所见,系统时钟信号sclk具有比阵列时钟信号aclk更低的频率。系统时钟信号sclk的上升沿可以用来定义程序周期的边界并且在由每个处理器沈执行的处理之间提供同步点。每个处理器可以被配置成在已经完成程序周期时已经完成程序的执行,如系统时钟sclk的下一周期开始所表明。这些同步时间提供用于在阵列10的处理器 26之间通信的机会。通信也可以如同所示以相对这些同步时间的预定偏移在阵列内进行。 在程序周期期间的阵列内通信可以利用能够更有效协作的两个或多个处理器沈来改进效率。在图6中还图示了估计周期。此程序周期被示为具有可变的持续时间并且相应地不限于与系统时钟信号sclk的任何固定关系。在程序周期之间的边界定义了由阵列10执行的处理操作的同步时间。在环境子集中,在程序周期之间的边界也是在系统周期之间的边界。图7示意地图示了用于图示阵列10编程的流程图。在步骤M,程序员编写具有想要的将由阵列10提供的功能的硬件的寄存器传送级Verilog硬件描述或可合成的Verilog 硬件描述。此硬件描述包括明确的时钟。然后把硬件描述提供到逻辑合成器,逻辑合成器分配(步骤56)将由阵列10内的哪个处理器沈提供硬件描述的哪个功能。执行分割以致在阵列内的处理器26的程序周期匹配硬件描述内的明确时钟。在步骤58,软件把为每个处理器沈分配的功能编码为用于该处理器沈的程序指令,所述程序指令将控制单个的处理器 26在程序周期内实现想要的功能,即从其要求的输入状态变量开始产生负责的输出状态变量的下一状态。在步骤60,各处理器沈的独立程序被存储在阵列10内各处理器沈的存储器32内。
权利要求
1.一种用于数据处理的集成电路,所述集成电路包括互连处理器阵列,每个处理器具有存储器,所述存储器存储定义要由所述处理器执行的一组处理操作的程序;另外的处理电路,其对系统时钟信号作出响应以便执行同步处理操作;和接口电路,其耦合到所述阵列和所述另外的电路,以在所述阵列和所述另外的处理电路之间提供一个或多个信号的通信以致在所述阵列和所述另外的处理电路之间分布所述集成电路的数据处理操作;其中存储在所述阵列的所述存储器内的所述程序一起定义要由所述阵列的所述处理器执行的多组处理操作,以致所述阵列被配置为执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个所述处理器执行从预定的执行开始点开始的相应程序以便估计至少一些所述状态变量的下一状态、在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。
2.如权利要求1所述的集成电路,其中所述接口电路包括耦合到所述另外的处理电路的同步时钟总线的总线接口部件。
3.如权利要求1所述的集成电路,其中所述接口电路包括耦合到所述另外的处理电路的异步总线的总线接口部件。
4.如权利要求1所述的集成电路,其中所述接口电路包括用于依照握手协议提供所述通信的握手电路。
5.如权利要求1所述的集成电路,其中所述接口电路对要从所述阵列传送到所述另外的处理电路的信号作出响应以便把被传递到所述另外的处理电路的信号的信号电平维持在相应的电平达所述系统时钟信号的预定数目周期。
6.如权利要求1所述的集成电路,其中所述接口电路对要从所述阵列传送到所述另外的处理电路的信号作出响应以便在所述系统时钟信号的预定数目周期之后修改被传递到所述另外的处理电路的信号的信号电平。
7.如权利要求1所述的集成电路,其中所述接口电路包括;和/或在相对于所述同步时钟信号的预定时间从所述另外的处理电路采样信号然后把所述信号传递到与所述阵列的时钟信号同步的所述阵列的电路。
8.如先前任何一个权利要求所述的集成电路,其中在相对于每个程序周期的开始时间的预定时间在所述阵列的所述处理器之间传递一个或多个信号。
9.如先前任何一个权利要求所述的集成电路,其中由所述阵列的所述处理器执行的至少一个所述程序包括至少一个分支程序指令。
10.如先前任何一个权利要求所述的集成电路,其中由所述阵列的所述处理器执行的至少一个所述程序包括可变长度指令。
11.如先前任何一个权利要求所述的集成电路,其中由所述阵列的所述处理器执行的至少一个所述程序包括花费不同数目的处理周期来执行的指令。
12.如先前任何一个权利要求所述的集成电路,其中所述阵列的处理器在阵列时钟信号的控制之下执行所述程序,所述阵列时钟信号具有比所述同步时钟信号更高的频率。
13.如先前任何一个权利要求所述的集成电路,其中所述阵列的所述程序周期利用所述同步时钟同步。
14.如先前任何一个权利要求所述的集成电路,其中所述阵列的所述程序周期具有可变的持续时间并且所述接口电路提供与所述另外的处理电路的通信,所述另外的处理电路利用所述同步时钟同步。
15.如先前任何一个权利要求所述的集成电路,其中所述阵列的至少一个所述处理器提供用于处理多比特数据值的多比特数据通道。
16.如先前任何一个权利要求所述的集成电路,其中所述接口电路经由被开放用于不涉及所述阵列的通信的系统总线来在所述阵列和所述另外的处理电路之间提供通信。
17.如权利要求1到15中任何一个所述的集成电路,其中所述接口电路经由专用于在所述阵列和所述另外的处理电路之间的通信的私有总线来在所述阵列和所述另外的处理电路之间提供通信。
18.如先前任何一个权利要求所述的集成电路,其中所述阵列的所述程序是根据具有将由所述阵列提供的功能的硬件的机器可读硬件描述而产生的机器。
19.如权利要求18所述的集成电路,其中所述机器可读硬件描述是寄存器传送级 Verilog 禾P^Tgj^白勺 Verilog ;t一。
20.如先前任何一个权利要求所述的集成电路,其中所述处理器的所述存储器是可重写的以致在制造所述集成电路之后能够改变所述程序。
21.如先前任何一个权利要求所述的集成电路,其中所述另外的处理电路包括以下一个或多个通用程序控制处理器;数字信号处理器;不可编程的处理引擎;和存储器。
22.一种用于编程具有互连处理器阵列和另外的处理电路的集成电路的方法,每个处理器具有存储器,所述存储器存储包括要由所述处理器执行的一组处理操作的程序,并且所述另外的处理电路对同步时钟信号作出响应以便执行同步处理操作,所述方法包括步骤利用至少一个明确时钟信号产生可合成的硬件描述以便执行想要的处理;把所述硬件描述映射到多个程序,每个程序定义要由所述阵列内的处理器执行的一组处理操作;并且把所述多个程序存储在所述阵列内的相应程序存储器中,以致所述阵列当执行所述多个程序时对应于在所述硬件描述中描述的想要处理来执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个所述处理器执行从预定的执行开始点开始的相应程序以便估计至少一些所述状态变量的下一状态、在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。
23.一种包括用于数据处理的集成电路的最终用户设备,所述集成电路包括互连处理器阵列,每个处理器具有存储器,所述存储器存储定义要由所述处理器执行的一组处理操作的程序;另外的处理电路,其对同步时钟信号作出响应以便执行同步处理操作;和接口电路,其耦合到所述阵列和所述另外的电路,以在所述阵列和所述另外的处理电路之间提供一个或多个信号的通信以致在所述阵列和所述另外的处理电路之间分布所述集成电路的数据处理操作;其中存储在所述阵列的所述存储器内的所述程序一起定义要由所述阵列的所述处理器执行的多组处理操作,以致所述阵列被配置为执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个所述处理器执行从预定的执行开始点开始的相应程序以便估计至少一些所述状态变量的下一状态、在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。
24.一种用于对具有互连处理器阵列和另外的处理电路的集成电路的功能提供现场更新的方法,每个处理器具有存储器,所述存储器存储包括要由所述处理器执行的一组处理操作的程序,并且所述另外的处理电路对同步时钟信号作出响应以便执行同步处理操作,所述方法包括步骤利用至少一个明确时钟信号产生可合成的硬件描述以便执行想要的处理; 把所述硬件描述映射到多个程序,每个程序定义要由所述阵列内的处理器执行的一组处理操作;并且把所述多个程序存储在所述阵列内的相应程序存储器中,以致 所述阵列当执行所述多个程序时对应于在所述硬件描述中描述的想要处理来执行基于周期的程序;所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列的每个所述处理器执行从预定的执行开始点开始的相应程序以便估计至少一些所述状态变量的下一状态、在为由所述阵列执行的处理操作提供同步时间的程序周期之间的边界。
25.一种用于数据处理的集成电路,所述集成电路包括互连处理器装置的阵列装置,每个处理器装置具有存储器装置,所述存储器装置存储定义要由所述处理器装置执行的一组处理操作的程序;另外的处理装置,其对同步时钟信号作出响应以便执行同步处理操作;和接口装置,其耦合到所述阵列装置和所述另外的装置,以在所述阵列装置和所述另外的处理装置之间提供一个或多个信号的通信以致在所述阵列装置和所述另外的处理装置之间分布所述集成电路的数据处理操作;其中存储在所述阵列装置的所述存储器装置内的所述程序一起定义要由所述阵列装置的所述处理器装置执行的多组处理操作,以致所述阵列装置被配置为执行基于周期的程序; 所述基于周期的程序提供状态变量,所述状态变量允许在所述基于周期的程序的一个程序周期中执行的操作结果在所述基于周期的程序的随后程序周期期间被访问;并且在所述基于周期的程序的每个程序周期期间,所述阵列装置的每个所述处理器装置执行从预定的执行开始点开始的相应程序以便估计至少一些所述状态变量的下一状态、在为由所述阵列装置执行的处理操作提供同步时间的程序周期之间的边界。
全文摘要
提供了一种包括处理器(26)的阵列(10)的集成电路(4),所述处理器(26)具有用于提供与另外的处理电路(14)通信的接口电路(12)。阵列(10)内的处理器(26)执行各个程序,所述程序用于一起提供基于周期的程序的功能。在基于周期的程序的每个程序周期期间,每个处理器执行从预定的执行开始点开始的各自程序以便估计所述基于周期的程序的至少一些状态变量的下一状态。在程序周期之间的边界提供了用于处理由阵列执行的操作的同步时间(点)。
文档编号G06F17/50GK102197396SQ200980141863
公开日2011年9月21日 申请日期2009年10月13日 优先权日2008年10月22日
发明者M·P·穆勒, S·J·希尔 申请人:Arm有限公司