CN100430889C - 在数字信号处理器***中的存储器访问方法 - Google Patents
在数字信号处理器***中的存储器访问方法 Download PDFInfo
- Publication number
- CN100430889C CN100430889C CNB2004800397542A CN200480039754A CN100430889C CN 100430889 C CN100430889 C CN 100430889C CN B2004800397542 A CNB2004800397542 A CN B2004800397542A CN 200480039754 A CN200480039754 A CN 200480039754A CN 100430889 C CN100430889 C CN 100430889C
- Authority
- CN
- China
- Prior art keywords
- instruction
- cycle
- visit
- storage
- programmed
- 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
- 230000015654 memory Effects 0.000 title abstract description 147
- 238000000034 method Methods 0.000 claims abstract description 29
- 238000004519 manufacturing process Methods 0.000 claims 2
- 238000012545 processing Methods 0.000 abstract description 12
- 230000000630 rising effect Effects 0.000 description 82
- 230000006870 function Effects 0.000 description 7
- 102100025682 Dystroglycan 1 Human genes 0.000 description 4
- 101000855983 Homo sapiens Dystroglycan 1 Proteins 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 3
- COCLLEMEIJQBAG-UHFFFAOYSA-N 8-methylnonyl 2-methylprop-2-enoate Chemical compound CC(C)CCCCCCCOC(=O)C(C)=C COCLLEMEIJQBAG-UHFFFAOYSA-N 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000000994 depressogenic effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- XXBDWLFCJWSEKW-UHFFFAOYSA-N dimethylbenzylamine Chemical compound CN(C)CC1=CC=CC=C1 XXBDWLFCJWSEKW-UHFFFAOYSA-N 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/325—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
一种方法和架构访问具有二相时钟的微处理***中的统一存储器。该统一存储器是在第一指令周期期间访问的。当遇到程序代码不连续时,在指令周期期间以空访问来访问该统一存储器第一次。当如循环的最后一条指令的情况中那样以数据访问,或者如跳转指令的情况中那样以指令访问遇到程序代码不连续时,在指令周期期间访问该统一存储器第二次。
Description
优先权信息
本申请要求于2003年11月17日提交的美国专利申请第10/715,629号的优先权,该申请通过整体引用包含在此。
技术领域
本发明针对允许单周期指令执行的数字信号处理器或微处理器的微架构。更具体地,本发明针对为所有指令维持单周期执行同时允许使用单端口同步存储器的数字信号处理器或微处理器的微架构。
背景技术
需要向常规的数字信号处理器或微处理器供给来自存储器的信息(数据和指令)来实行或执行任务。还注意到,诸如数字信号处理任务等某些任务对每条指令都需要多个字节或字的信息,这些字节或字存储在不同的存储器位置中。在这样的情况中,常规的处理器对每条指令需要若干次存储器访问。如果期望在其中信息(数据和指令)可存储在同一存储器块的统一的存储器空间中以单周期执行指令,这就成为问题。
例如,在常规的处理器架构中,如果要求在单周期中双倍地访问主存储器来实现以单周期执行指令。这样,处理器必须在单周期期间取出当前指令之后的新指令,并读或写执行当前指令所需的所有的主存储器数据。
在常规的处理器架构中,存储器访问是在指令的执行阶段期间执行的,例如参考从主处理器时钟的上升沿到上升沿的同步***。要写或读的数据的地址在执行阶段的开始处可用(通常在前一指令的执行阶段期间计算),数据访问周期是从上升沿到上升沿,其中访问在执行阶段的中间在下降沿上触发。
类似地,在常规的处理器架构中,要从主存储器取出的指令的地址在周期的开始处可用,并在该周期的结尾处将从主存储器中读取的指令加载至寄存器中。这导致对指令的访问也发生在周期的中间。
从而,在常规的处理器架构中,用于指令取出的主存储器访问将与并发的数据访问冲突。如果访问是针对同一存储器块或者如果访问是使用一条唯一的总线来完成时,情况尤其如此。
为了解决这个问题,曾提出使用允许两个并发的读的双端口存储器。还提出使用较高频率的时钟将两次访问挤入一个单周期中,仍旧留有足够的时间用于设置地址和设置数据。
以上提出的两种解决方案具有它们自己的缺点,它们昂贵、造成高功耗并限制了总体性能。
另一提出的备选方案是改变管线并增加管道阶段的个数。由于期望对包括分支、跳转等的所有指令维持单周期执行,因此这是不可能的。
从而,期望提供允许每一指令周期对每一存储器块进行两次存储器访问而不负面影响处理器成本或性能或需要较高功耗的微架构。也期望提供允许每一指令周期对单个存储器块两次访问,同时对包括分支、跳转等的所有指令维持单周期执行的微架构。更具体地,期望提供对所有指令维持单周期执行,同时允许使用单端口同步存储器来存储数据和指令两者且改进总体速度性能并保持低功耗的微架构。
发明内容
本发明的第一方面是一种用于访问具有微处理器、一级管线和二相时钟的微处理***中的统一存储器,使得所有指令在单个周期中执行的方法。该方法从统一存储器中取出程序指令;确定所取的程序指令在单个周期期间是否需要三次统一存储器访问来正确执行所取的程序指令,所取程序指令的正确执行是微处理器在单个指令周期中执行所取程序指令所请求的操作;当确定所取程序指令需要三次统一存储器访问来正确执行所取的程序指令时,在与所取程序指令相关联的指令周期期间以空访问(dummy access)来访问该统一存储器第一次;当确定所取程序指令需要三次统一存储器访问来正确执行所取程序指令时,在与所取程序指令相关联的指令周期期间从指令寄存器中取出下一程序指令;以及当确定所取程序指令需要三次统一存储器访问来正确执行所取程序指令时,在与所取程序指令相关联的指令周期期间内以数据访问来访问该统一存储器第二次。
本发明的第二方面是一种用于访问具有微处理器、一级管线和二相时钟的微处理***中的统一存储器,使得所有指令都在单个周期中执行的方法。该方法在第一指令周期期间从统一存储器中取出程序指令;确定第二指令周期的所取的程序指令是否是条件程序代码不连续;当确定对第二指令周期所访问的程序指令是条件程序代码不连续时,在第二指令周期期间以空访问来访问该统一存储器第一次;以及当确定对第二指令周期所访问的程序指令是条件程序代码不连续时,在第二指令周期期间访问该统一存储器第二次来读取新指令,从而使为第二指令周期从该统一存储器的指令访问延迟半个周期。
本发明的第三方面是一种用于访问具有微处理器、一级管线和二相时钟的微处理***中的统一存储器,使得所有指令在单个周期中执行的方法。该方法从统一存储器中取出程序指令;确定所取程序指令是否是循环启动指令;当所取程序指令是循环启动指令时,在指令寄存器中存储该循环的第一条指令;执行该循环;确定循环执行期间的所取指令是否是该循环的最后一条指令;在与所取的循环的最后一条指令相关联的指令周期期间以空访问来访问该统一存储器第一次;在与所取的循环的最后一条指令相关联的指令周期期间,从指令寄存器中取出循环的第一条指令;以及在与所取的循环的最后一条指令相关联的指令周期期间,以数据访问来访问该统一存储器第二次。
本发明的第四方面是一种用于在循环指令期间访问数字信号处理子***中的统一存储器的方法。该方法在第一指令周期期间从统一存储器访问程序指令;确定程序指令的类型;从该统一存储器中预取下一指令;当确定程序指令的类型是循环的第一条指令时,将所预取的指令保存在寄存器中;当确定程序指令的类型是循环的最后一条指令时从寄存器中取出下一条指令;在循环的最后一条指令的执行期间,以空访问来访问该统一存储器;以及在循环的最后一条指令的执行期间,以数据访问来访问该统一存储器第二次。
附图说明
本发明可具体化成各种组件和组件的排列,以及各种步骤和步骤的排列。附图仅是用于说明较佳实施例的目的,而不应被解释为对本发明的限制,附图中:
图1是根据本发明的概念的数字信号处理子***架构的框图;
图2是示出根据本发明的概念的数据存储器数据访问的时序图;
图3是示出根据本发明的概念的程序存储器数据访问的时序图;
图4是和5是示出根据本发明的概念的程序存储器指令访问的时序图;
图6是示出根据本发明的概念的基本管线、内联码、指令读取的时序图;
图7是示出根据本发明的概念的程序计数不连续的指令读取的时序图;
图8是示出根据本发明的概念的程序计数不连续的循环结尾(End of Loop)到循环顶部(Top of Loop)的指令读取的时序图;
图9示出了根据本发明的概念的用于邻近(near-by)存储器的管线和程序存储器总线;
图10示出了根据本发明的概念的用于循环结尾指令的邻近存储器的管线和程序存储器总线;
图11示出了根据本发明的概念的用于循环开始(Start of Loop)、DO UNTIL(进行……直到)指令的邻近存储器的管线和程序存储器总线;
图12示出了根据本发明的概念的用于单指令循环的邻近存储器的管线和程序存储器总线;
图13示出了根据本发明的概念的程序地址生成电路;
图14示出了根据本发明的概念的程序存储器地址生成电路的电路逻辑;
图15示出了根据本发明的概念的程序存储器接口的逻辑电路;
图16示出了根据本发明的概念的用于邻近存储器、程序存储器和访问的管线和程序存储器总线;以及
图17示出了根据本发明的概念的用于代替执行指令12占据的中断的邻近存储器的管线和程序存储器总线。
具体实施方式
将结合较佳实施例来描述本发明,然而可以理解,不存在将本发明限于此处所述的实施例的意图。相反,旨在覆盖可包含在如所附权利要求书所定义的本发明的精神和范围内的所有的替换、修改和等效方式。
为对本发明有一个概括理解,对附图进行了参考。附图中,同样的标号用于指定所有附图中相同或等效的元素。也注意,示出本发明的各个附图不是按比例绘制的,且特意不成比例地绘制了某些区域,以使本发明的特征和概念可被正确地示出。
为了解决对每一指令进行若干次存储器访问的情况,其中数据与指令位于同一存储体中,本发明利用了一种允许每一指令和每一周期对第一存储器块进行两次存储器访问且在同一周期期间对第二存储器块进行一次存储器访问的微架构。
因此,本发明能够对每一时钟周期或指令进行三次存储器访问。一次访问是在时钟周期或指令期间在数据存储器块中执行的,而另两次访问是在包含数据和指令信息两者的程序存储器块中执行的,该另两次访问在同一时钟周期或指令期间执行。
而且,本发明的微架构通过每一时钟周期对单个存储器块并行执行两次存储器访问,而在不同的存储器块并行执行第三次访问,来实现对需要两次或三次存储器访问的指令的简单管线的单周期执行。更具体地,由于对每一时钟周期的这样的双重访问,本发明减轻了对速度的限制,并简化了微架构,使得逻辑实现在性能方面更有效率。
最后,本发明允许在一个单周期中执行包含零开销循环或重复功能的所有指令,同时仍维持高性能水平的架构中使用单端口存储器、同步访问。
图1示出了根据本发明的概念的数字信号处理子***架构。如图1中所示,数字信号处理子***10包括核心11;包含数据存储器、程序存储器和高速缓存存储器块的邻近存储器模块14;以及数字信号处理子******设备15。
核心11具有两种类型的接口。第一接口,即邻近接口,为芯片上***的数字信号处理子***10内的存储器提供快速单周期执行。第二接口,即远距(distant)接口,对数字信号处理子***10内的***逻辑和该数字信号处理子***的边界以外的其它存储器/***设备提供多周期接口。注意到,在该情形中,对远距存储器(远距存储器是位于数字信号处理子***的边界之外的存储器)的访问的任何组合将占据至少两个周期。
在本发明的微架构中,定义了三个空间。这些空间是数字存储器(DM)空间、程序存储器(PM)空间和输入输出(I/O)空间。在本发明的一个较佳实施例中,PM空间包含指令和数据两者(16或24位)。在本发明的一个较佳实施例中,DM空间仅包含数据(16位)。最后,在本发明的一个较佳实施例中,I/O空间重组16位I/O***设备。
由于PM空间包含指令和数据两者,因此对每一指令PM空间可被访问两次。为了方便该功能,本发明的邻近接口及相关联功能被指定为允许对每一时钟周期进行两次存储器访问。当指令和数据均位于邻近存储器模块14中时,本发明实现全速执行,即每一时钟周期一条指令。
在本发明的一个较佳实施例中,对I/O空间的访问经由数据总线16仅通过远距存储器接口。
核心11也可通过例如两个串行端口,SPORT0 12和SPORT1 13,或IDMA接口与***的其它部分交互和交换数据。
在本发明的该较佳实施例中,四个模块可与核心11交互,并从管线中挪用周期来将数据移动至存储器位置或从存储器位置移出。这些模块是串行端口(SPORT0 12和SPORT1 13)、内部数据存储区(IDMA)接口和字节数据存储区(BDMA)。
周期挪用在指令边界处发生,它从程序计数中保持住下一指令,并将特殊的“空”指令***管线中。该空指令不改变程序计数,也不启动程序指令取出。
空指令命令核心11执行数据移动事务,并执行相关联的寄存器更新(在串行端口自动缓冲的情况下地址寄存器改变)。当该空指令完成时,核心管线以来自程序存储器的可执行代码继续前进。
空闲和总线授权也可被认为是该类别中的特殊情况。在这些情况中,CPU停止执行,且挪用的周期使核心11冻结,直到空闲或总线请求消失。周期的个数可以是无限的。
核心11具有从二相时钟运行且组织成即使对程序计数(PC)不连续也允许单周期指令执行的管线,从而迫使一级深的管道包含两个管道步骤:指令取出和指令执行。如上所述,与这种设计相关联的问题是单周期中对PM存储器的双重访问。在一条指令期间,核心11必须取出新的指令并取出当前指令的PM数据。
为解决这个问题,本发明允许与要写或读的数据相关联的地址在执行阶段的开始处可用(在前一指令的执行阶段中计算)。换言之,本发明提供从上升沿到上升沿的数据访问周期,其中访问例如在执行阶段的中间在下降沿上触发。
例如,如图2中所示,本发明在从数字信号处理(DSP)核心时钟的上升沿到上升沿的一个周期中实现DM数据访问。在该示例中,地址在DSP核心时钟信号的上升沿上发出,而存储器访问是在DSP核心时钟的下降沿上触发的(图2中由存储器时钟信号上升沿对应于DSP核心时钟信号的下降沿来示出)。在核心中在DSP核心时钟信号的下一上升沿上对数据进行读取或采样。如图2中另外示出的,写数据是在DSP核心时钟信号的上升沿上从存储器中发出的。
如图3-5所示,在另一示例中,本发明允许PM访问在两个半周期上管线化,使得每一时钟周期可完成两次存储器访问。存储器访问的两个阶段是地址阶段和数据阶段。取决于访问类型和存储器类型,有差别地完成访问。由于高速缓存仅用于指令,因此不存在为PM数据访问调整高速缓存的需要。
参考图3,PM数据访问被示为在从DSP核心时钟信号的上升沿到上升沿的一个周期中实现。如图2所示,在该示例中,地址在DSP核心时钟信号的上升沿上发出,且该地址直到DSP核心时钟信号的下降沿之前都可用。在DSP核心时钟信号的下降沿上触发存储器访问。在核心中在DSP核心时钟信号的下一上升沿上对数据进行读取和采样。如图3中另外示出的,在DSP核心时钟信号的上升沿上从存储器中发出写数据。
参考图4,从邻近存储器中的内联码的PM指令访问被示为在DSP核心时钟信号的下降沿到下降沿的一个周期中实现。在该示例中,地址在DSP核心时钟信号的下降沿上发出,且直到DSP核心时钟信号的上升沿之前都可用。在DSP核心时钟信号的上升沿上触发存储器访问。在缓冲器中在DSP核心时钟信号的下一下降沿上对指令进行读取或采样的。如果发生程序计数(PC)不连续,则该指令将被丢弃。
参考图5,图5示出了,从DSP核心时钟信号的上升沿到上升沿的一个周期中对PC不连续邻近存储器的PM指令访问以及从DSP核心时钟信号的上升沿到上升沿的一个周期中对邻近高速缓存的PM指令访问的时序。在这两种情况中,在DSP核心时钟信号的上升沿上发出地址,且在DSP核心时钟信号的下降沿上触发存储器访问。在核心11中在DSP核心时钟信号的下一上升沿上对指令进行读取或采样的。
从上述示例中,可以注意到,双重访问的存储器块是由以主管道时钟频率的两倍运行的时钟信号定时的。这是触发对同步单端口存储器访问的一种可能。
根据本发明的概念,由核心11完成的所有高速缓存访问与DSP核心时钟信号的下降沿对齐,包括为高速缓存初始化和高速缓存测试在数据模式中进行的数据访问。DSP核心时钟信号周期的另一沿用于高速缓存填充访问或高速缓存的动态下载。注意,在程序计数(PC)不连续的情况中,在可检测和确认不连续之前在PC+1处的邻近存储器中完成空指令取出。仅当地址指向邻近存储器时,该空读才发生;如果地址指向高速缓存或远距存储器,则不发生。还注意,没有对高速缓存的PM数据写/读。
图6示出了根据本发明的概念的基本管线、内联码、指令读的时序图。如图6中所示,在周期A期间,使指令I1的PMAddressI1可用。
之后,在周期B期间,使指令I2的PMAdrressI2可用,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。
如图6中所示,在周期C期间,执行对指令I2的PM指令读访问,并执行指令I1,其中PM指令读访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。在周期D期间,执行指令I2。
然而,根据本发明的概念,当存在条件程序计数(PC)不连续(RTI(从中断返回))、RTS(从子程序返回)、JUMP(跳转)、CALL(调用)、END-OF-LOOP(循环结尾))时,从前一指令的执行结果条件地生成新的PC地址。如上参考图4中所示的PM数据访问所述的,为时序原因,在该情况中,PM指令存储器访问被移后半个周期,且在时钟的下降沿触发存储器。PM指令访问占据了PM数据访问的时钟周期,因为对这些不连续情况中的多数,没有可请求的PM数据。这些情况的时序的一个示例在图7中示出。
如图7中所示,在周期A期间,使指令I1的PMAddressI1可用。之后,在周期B期间,使指令I2的PMAdrressI2可用,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。
如图7中所示,在周期C期间,使PMNewAddress可用,且由于条件程序计数不连续,在周期C的开始处在DSP核心时钟信号的上升沿上触发PM存储器空访问。同样,由于条件程序计数不连续,在周期C期间,执行对指令Inew的PM指令读访问,并执行指令I1,其中PM指令读访问在DSP核心时钟信号的下降沿上触发。在周期D期间,执行指令Inew。
另一方面,如果该程序计数不连续是END-OF-LOOP指令,则可请求PM数据访问,它将与循环顶部指令取出冲突。为避免与指令取出(循环顶部)冲突,本发明利用存储指令的4级深的循环顶部指令缓冲器(图15的200),使得不需要在每一循环迭代处重新取出第一条指令。
注意,退出条件恰巧是来自循环的最后一条指令的之前的指令。如果条件是来自循环的最后一条指令,则循环在退出之前再要执行一次。在这种情况中,由于对循环退出条件检查最后状态更新的值,因此如果在循环期间状态改变,将可能作出错误的决定。
在由于循环结尾的PC不连续的情况中,程序计数必须移至循环的顶部。由于管线,同时,循环结尾的指令可进行PM数据访问。这可能与程序指令取出冲突。如上描述和示为图15的PM接口逻辑的一部分的循环顶部(top of loop)指令栈释放周期以免于进行指令取出,使该周期可用于PM数据访问。
图8示出了其中程序计数不连续是END-OF-LOOP(循环结尾)不连续的情况的时序的示例。如图8中所示,在周期A期间,使指令I1的PMAddressI1可用。之后,在周期B期间,使指令I2的PMAdrressI2可用,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。同样,在周期B期间,循环结尾(End-of-Loop)信号变高,指示循环结尾的情形。
如图8中所示,在周期C期间,使PMNewAddress可用,且由于循环结尾条件程序计数不连续,在周期C的开始处在DSP核心时钟信号的上升沿上触发PM存储器空访问。同样,由于循环结尾条件程序计数不连续,在周期C期间,执行PM存储器读/写访问、数据访问,并执行指令I1,其中PM访问在DSP核心时钟信号的下降沿上触发。在周期D期间,执行指令Inew。
图9示出了根据本发明的概念的存储器访问时序的另一示例。如图9中所示,在周期A期间,使指令I1的PMAddressI1可用作预取地址。之后,在周期B期间,使指令I2的PMAdrressI2可用作预取地址,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。
如图9中所示,在周期C期间,使指令I3的PMAddressI3可用作预取地址,并执行对指令I2的PM指令读访问,其中PM指令读访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。最后,在周期C期间,执行指令I1。
在周期D期间,跳转信号变高指示跳转情形,并使PMAddressN+1可用作预取地址。同样,由于跳转指令,在周期D期间,取指地址是指令Inew的地址,并在周期D的开始处在DSP核心时钟信号的上升沿上触发PM存储器空访问。此外,由于该指令,在周期D期间,执行对指令Inew的PM指令读访问,并执行指令I2,其中PM指令读访问在周期D内在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。最后,在周期D期间,存储器地址一开始为指令Inew的地址,但是在存储器时钟信号的第二上升沿处,存储器地址改为IN+1指令的地址。
在周期E期间,使PMAddressN+2可用作预取地址。同样,在周期E期间,取指地址是指令IN+1的地址,并在周期E的开始处在DSP核心时钟信号的上升沿上触发对指令IN+1的PM存储器读访问。此外,在周期E期间,执行对指令IN+2的PM指令读访问,并执行指令Inew,其中PM指令读访问在周期E内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。最后,在周期E期间,存储器地址一开始为数据访问的地址,但是在存储器时钟信号的第二上升沿处,存储器地址改为IN+2指令的地址。
在周期F期间,使PMAddressN+3可用作预取地址。同样,在周期F期间,取指地址是指令IN+2的地址,并在周期F的开始处在DSP核心时钟信号的上升沿上触发对指令IN+2的PM存储器读访问。在周期F期间执行指令IN+1。
图10示出了根据本发明的概念的存储器访问的时序的示例。如图10中所示,在周期A期间,使指令I1的PMAddressI1可用作预取地址。之后,在周期B期间,使指令I2的PMAdrressI2可用作预取地址,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。
如图10中所示,在周期C期间,循环结束信号变高,并使指令I3的PMAddressI3可用作预取地址。执行对指令I2的PM指令读访问,其中PM指令读访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。最后,在周期C期间,执行指令I1。
在周期D期间,跳转信号变高,并使PMAddressN+1可用作预取地址。同样,在周期D期间,取指地址是指令Itop的地址,其中Itop是来自循环顶部(Top-of-Loop)的指令。如果发生跳转,则在周期D的开始处在DSP核心时钟信号的上升沿上触发PM存储器空访问,或者如果没有发生跳转,则在周期D的开始处在DSP核心时钟信号的上升沿上触发对指令I3的PM存储器读访问。此外,在周期D期间,取出来自从PM存储器读访问的数据,并执行指令I2,其中PM数据读访问在DSP核心时钟信号的下降沿上,即在周期D内存储器时钟信号的第二上升沿上触发。最后,在周期D期间,存储器地址一开始为数据访问的地址,但是在存储器时钟信号的第二上升沿处,存储器地址改为IN+1指令的地址。
在周期E期间,使PMAddressN+2可用作预取地址。同样,在周期E期间,取指地址是指令IN+1的地址,并在周期E的开始处在DSP核心时钟信号的上升沿上触发对指令IN+1的PM存储器读访问。此外,在周期E期间,取出来自PM存储器读访问的数据,并执行指令Itop,其中PM数据读访问在DSP核心时钟信号的下降沿上,即在周期E内存储器时钟信号的第二上升沿上触发。最后,在周期E期间,存储器地址一开始为数据访问的地址,但是在存储器时钟信号的第二上升沿处,存储器地址改为IN+2指令的地址。
在周期F期间,使PMAddressN+3可用作预取地址。同样,在周期F期间,取指地址是指令IN+2的地址,并在周期F的开始处在DSP核心时钟信号的上升沿上触发对指令IN+2的PM存储器读访问。在周期F期间执行指令IN+1。
图11示出了根据本发明的概念的存储器访问的时序的又一示例。如图11中所示,在周期A期间,使指令I1的PMAddressI1可用作预取地址。之后,在周期B期间,使指令I2的PMAdrressI2可用作预取地址,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。注意到,在该示例中,指令I2是DO UNTIL(进行……直到)指令,且在执行I2的结尾处,将指令I3压入循环顶部指令栈。
如图11中所示,在周期C期间,使指令I3的PMAddressI3可用作预取地址,并执行对指令I2的PM指令读访问,其中PM指令读访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。最后,在周期C期间,执行指令I1。
在周期D期间,DO UNTIL变高,并使PMAddressI4可用作预取地址。同样,在周期D期间,取指地址是指令I3的地址,并在周期D的开始处在DSP核心时钟信号的上升沿上触发对指令I3的PM存储器读访问。此外,执行指令I2。
在周期E期间,使PMAddressI5可用作预取地址。同样,在周期E期间,取指地址是指令I4的地址。然而,由于该DO UNTIL指令,在周期E的开始处在DSP核心时钟信号的上升沿上触发对指令IN+1的PM存储器读访问。此外,在周期E期间,取出PM存储器读访问,并执行指令I3,其中PM数据读访问在周期E内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。
在周期F期间,使PMAddressI6可用作预取地址。同样,在周期F期间,取指地址是指令I5的地址,并在周期F的开始处在DSP核心时钟信号的上升沿上触发对指令IN+2的PM存储器读访问。在周期F期间执行指令I4。
图12示出了根据本发明的概念的存储器访问的时序的另一示例。如图12中所示,在周期A期间,使指令I1的PMAddressI1可用作预取地址。注意到,在该示例中,指令I1是DO UNTIL指令,并在执行I1的结尾处,将指令I2压入循环顶部指令栈。
之后,在周期B期间,使指令I2的PMAdrressI2可用作预取地址,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处DSP核心时钟信号的上升沿上触发。
如图12中所示,在周期C期间,DO UNTIL信号变高,并使指令I3的PMAddressI3可用作预取地址,且执行对指令I2的PM指令读访问,其中PM指令读访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。最后,在周期C期间,执行指令I1。
在周期D期间,循环结尾(end-of-loop)跳转信号变高,并使PMAddressI3可用作预取地址。同样,在周期D期间,取指地址是指令I3的地址,并在周期D的开始处在DSP核心时钟信号的上升沿上触发对指令I3的PM存储器读访问。此外,在周期D期间,取出PM存储器读访问,并执行指令I2,其中PM数据读访问在周期D内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。
在周期E期间,使PMAddressI4可用作预取地址。同样,在周期E期间,取指地址是指令I3的地址,并在周期E的开始处在DSP核心时钟信号的上升沿上触发对指令IN+1的PM存储器读访问。此外,在周期E期间,取出PM存储器读访问,并执行指令I2,其中PM数据读访问在周期E内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。
在周期F期间,使PMAddressI5可用作预取地址。同样,在周期F期间,取指地址是指令I4的地址,并在周期F的开始处在DSP核心时钟信号的上升沿上触发对指令IN+2的PM存储器读访问。在周期F期间执行指令I3。
根据本发明的一个较佳实施例,图15的循环顶部(Top-Of-Loop)指令缓冲器200应用紧接在DO UNTIL指令之后的指令来加载。由于接在DO UNTIL指令之后的指令必须在DO UNTIL的执行阶段的结尾处之前可用(完成取出),这创建了两条指令之间的依存关系。在高速缓存未中(***IDLE(空闲)指令)或中断(***中断(Interrupt)周期)的情况中,由于指令可能不能及时可用,且执行了DO UNTIL的信息可能丢失,这就提出了一个难题。
关于高速缓存未中,DO UNTIL指令在接着该DO UNTIL的指令可用之前完成其执行。当取出该指令时,该指令由IDLE指令替代。当高速缓存被填充时,该指令变为可用,并必须被压入循环顶部(Top Of Loop)栈。为此,必须有标志指示,刚执行了DO UNTIL指令。
关于中断,有两种可能的解决方案。一种解决方案是只要DO UNTIL之后的指令取出没有完成就禁用中断。这允许在高速缓存提供了正确的指令之后将正确的指令加载至循环顶部(Top-Of-Loop)指令缓冲器中。第二种解决方案是添加一个状态位作为栈的一部分,使得当中断之后,如果再次取出指令,则该状态位指示该指令必须被压入循环顶部指令栈。在这第二种情况中,存在软件限制:ISR码不能跳转至循环顶部(DO UNTIL之后的指令)。第二种解决方案较佳,因为它阻止添加基于正执行的特定指令而禁用的中断的新概念。
在本发明的该较佳实施例中,DSP核心11接收2个时钟信号,DSPCLK和DSPCLK2。DSPCLK2时钟信号以两倍的频率运行,且仅用于生成对邻近PM存储器块的时钟和控制线。如果高速缓存需要对每一周期的双重访问,则DSPCLK2信号的双倍频率时钟用于触发高速缓存存储器访问。
在由于接口处的争用而造成的等待状态(软件或硬件)或CPU脱出同步(hold-off)的情况中,停止DSP时钟来防止管线在完成当前总线事务之前朝前移动。时钟被停止在低电平状态中,且当重新启动时钟时,该信号的下一上升沿是新管线状态的边界。
图16示出了根据本发明的概念的存储器访问的时序的另一示例。如图16中所示,在周期A期间,使指令I1的PMAddressI1可用作预取地址。
之后,在周期B期间,使指令I2的PMAdrressI2可用作预取地址,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。
如图16中所示,在周期C期间,使指令I3的PMAddressI3可用作预取地址,并执行对指令I2的PM指令读访问,其中PM指令读访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。最后,在周期C期间,执行指令I1。
在周期D期间,跳转信号变高,并使PMAddressIN4可用作预取地址。同样,在周期D期间,在周期D的开始处在DSP核心时钟信号的上升沿上触发对指令I3的PM存储器读访问。此外,在周期D期间,由于跳转信号变高,执行对指令IN3的PM存储器读访问,并执行指令I2,其中PM数据读访问在周期D内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。注意到,在周期D期间,存储器时钟使得信号能够在整个周期内保持高,来允许在该周期期间进行两次存储器访问,从而允许对I3的PM存储器读访问和对IN3的PM存储器读访问。
在周期E期间,使PMAddressIN5可用作预取地址。同样,在周期E期间,取指地址是指令IN4的地址,并在周期E的开始处在DSP核心时钟信号的上升沿上触发对指令IN4的PM存储器读访问。此外,执行指令IN3。
在周期F期间,读PM数据(Read PM)信号变高,DAG2 PM数据周期信号脉冲为高,并使PMAddressIN6可用作预取地址。同样,在周期F期间,在周期F的开始处在DSP核心时钟信号的上升沿上触发对指令IN5的PM存储器读访问。此外,在周期D期间,由于读PM数据信号变高,因此执行对该数据的PM存储器读访问,并执行指令IN4,其中PM数据读访问在周期F内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。注意到,在周期F期间,存储器时钟使得信号能够在整个周期内保持高,来允许在该周期期间进行两次存储器访问,从而允许对IN5的PM存储器读访问和对数据的PM存储器读访问。
在周期G期间,使PMAddressIN7可用作预取地址。同样,在周期G期间,取指地址是指令IN6的地址,并在周期G的开始处在DSP核心时钟信号的上升沿上触发对指令IN6的PM存储器读访问。在周期G期间执行指令IN5。
在周期H期间,写PM(Write PM)数据信号变高,DAG2 PM数据周期信号脉冲为高。同样,在周期H期间,在周期H的开始处在DSP核心时钟信号的上升沿上触发对指令IN7的PM存储器读访问。此外,在周期H期间,由于写PM数据信号变高,因此执行对数据的PM存储器写访问,并执行指令IN6,其中PM数据读访问在周期H内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发。注意到,在周期H期间,存储器时钟使得信号能够在整个周期内保持高,来允许在该周期期间进行两次存储器访问,从而允许对IN7的PM存储器读访问和对数据的PM存储器写访问。
图17示出了根据本发明的概念的存储器访问的时序的另一示例。如图17中所示,在周期A期间,使指令I1的PMAddressI1可用作预取地址。
之后,在周期B期间,使对指令I2的PMAdrressI2可用作预取地址,程序计数对应于指令I1,并执行对指令I1的PM指令读访问,其中PM指令读访问在周期B的开始处在DSP核心时钟信号的上升沿上触发。
如图16中所示,在周期C期间,使指令I3的PMAddressI3可用作预取地址,中断请求信号变高,程序计数对应于指令I2,并执行对指令I2的PM指令读访问空访问,其中PM指令读访问空访问在周期C的开始处在DSP核心时钟信号的上升沿上触发。最后,在周期C期间,执行指令I1。
在周期D期间,中断执行信号变高,并使PMAddressN+1可用作预取地址,程序计数对应于指令I2,且取指地址为中断向量。同样,在周期D期间,在周期D的开始处在DSP核心时钟信号的上升沿上触发对指令I3的PM存储器访问空访问。此外,在周期D期间,由于中断执行信号变高,因此执行对指令Inew的PM存储器读访问(其中PM数据读访问在周期D内在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发),存储器地址在周期D前半个周期期间对应于指令Inew,在周期D后半个周期期间对应于指令IN+1,且不执行任何指令(NOP)。
在周期E期间,PM数据读信号变高,使PMAddressN+2可用作预取地址,程序计数对应于指令IN+1,程序栈对应于指令I2,取指地址对应于指令IN+1。同样,在周期E期间,在周期E的开始处在DSP核心时钟信号的上升沿上触发对指令IN+1的PM存储器访问。此外,在周期E期间,执行对数据的PM存储器读访问(其中PM数据读访问在周期E内,在DSP核心时钟信号的下降沿上,即在存储器时钟信号的第二上升沿上触发),存储器地址在周期E的前半个周期期间对应于数据,在周期D的后半个周期期间对应于指令IN+2,并执行指令Inew。
在周期F期间,使PMAddressN+3可用作预取地址。同样,在周期F期间,取指地址是指令IN+1的地址,并在周期F的开始处在DSP核心时钟信号的上升沿上触发对指令IN+2的PM存储器读访问。此外,在周期F期间,执行指令IN+1。
参考图16,当执行时,中断占据功能指令的一个管道条(pipe slat)。中断将值压入栈(PC栈和状态(Status)栈)中,并改变PC/指令取指地址。压入栈中的值是来自前一指令取出的程序存储器地址(该取出是在中断执行之前执行的,由于它被中断代替,因此该取出指令被丢弃且不被执行)。
在其中中断紧接着PC不连续发生的情况中,新PC地址被压入高速缓存中(JUMP、CALL、RETURN(返回)目标地址、循环顶部地址、中断向量地址)。在循环顶部不连续的情况中,在ISR的返回处,即使不必要也将取出循环顶部(Top-of-Loop)指令,因为它已经存储在循环顶部(Top-of-Loop)指令栈中。
图13示出了根据本发明的概念用于生成PM地址的电路的一个较佳实施例的示例。如图13中所示,PM存储器接口由用于每一PM存储器类型:PM邻近、PM远距或PM高速缓存的3组不同的总线(地址和数据)构成。在该较佳实施例中,只有邻近存储器可执行预取,从而可使用较早的程序地址。而且,程序计数器20产生提供给多路复用器24和PC栈22的程序计数(PC)。
多路复用器24基于新地址(New Address)信号的状态(跳转发生)在来自程序计数器20的PC或来自多路复用器30的地址之间选择。多路复用器30基于下一地址源选择信号的状态,选择四个可能的地址之一:IRQ_Vector(向量)、IR、DAG2间接跳转(Indirect Jump)或栈。
来自多路复用器24的地址用作高速缓存或远距程序存储器的程序地址。来自多路复用器24的地址也提供给递增电路26,其中地址基于中断信号的状态而递增。来自递增电路26的地址(PC+1/+0)(递增或不递增)被提供给多路复用器28,后者基于新地址信号的状态(跳转发生)在来自多路复用器30的地址和来自递增电路26的地址之间选择。
最后,来自多路复用器28的所选地址被提供给多路复用器32,后者基于DAG2PM数据周期信号的状态在来自多路复用器28的地址与地址DAG2(图18中的500)之间选择。
如图13中所示,PM邻近地址的生成是从3个源中选择的:PM数据访问的数据地址生成电路2(DAG2)(图18中的500)、由新指令取指地址多路复用器30选择的地址(在PC不连续的情况中)或者由递增电路26生成的PC+1/+0值。
如果PM邻近地址的源是来自PM数据访问的DAG2或者是由新指令取指地址多路复用器30所选的地址,则对存储器的访问是在DSPCLK时钟信号的下降沿上完成的。
如果PM邻近地址是由递增电路26生成的PC+1值,则访问是在DSPCLK时钟信号的上升沿上完成的。
注意到,DAG2地址在两种情况中是PM地址源:间接跳转和PM数据访问。因此,在该较佳实施例中,为简化多路复用器的复杂性,DAG2地址在单个位置连接到电路。
图14示出了程序存储器地址生成的逻辑。如图14中所示,程序计数不连续事件确定电路50接收表示某些事件的多个输入。预定事件AND(与)在一起来生成表示是否存在程序计数不连续事件的信号。例如,如图14中所示,将表示发生程序存储器数据访问或间接跳转的信号与表示来自数据地址生成2电路的地址的生成的信号AND在一起,来生成表示是否存在程序计数不连续事件的信号。将来自并联AND电路的各个信号OR在一起来生成表示程序计数不连续事件是否存在的信号。
如图14中还示出,表示程序计数不连续事件是否存在的经OR的信号与非程序存储器数据访问信号AND在一起,来产生表示对仅指令取出情况是否存在高速缓存或远距存储器程序存储器地址的信号。图14也示出非跳转或循环结尾发生信号与表示程序代码地址的信号AND在一起产生表示对仅指令取出情况是否存在高速缓存或远距存储器程序存储器地址的信号。
最后,如图14中所示,邻近程序存储器地址确定电路60接收多个输入,用来确定地址是否是邻近程序存储器的。例如,如图14中所示,如果如由程序计数不连续事件确定电路50所确定的程序计数不连续存在,且表示数字信号处理器时钟的信号与跳转发生信号和程序存储器数据访问信号的ORAND在一起均为高,则邻近程序存储器地址确定电路60产生指示地址是邻近程序存储器的信号。
图14的电路也解决了当循环结尾情况时,程序计数(PC)必须移动至循环顶部+1,而同时程序存储器(PM)数据指令可能处于执行阶段中的情况。由于循环顶部指令还未从存储器中取出(而是从指令循环顶部(Top-Of-Loop)栈中取出),为下一指令取出更新PC和PM地址,即循环顶部(Top-Of-Loop)+1。
如上所述,参考图14,跳转地址(在PC不连续情况中)是从AND/OR函数中生成的。如果没有不连续事件是活动的,则跳转地址被驱动为低。还注意,当发生EOL时,高速缓存PM地址被驱动为低。在这种情况中,不要求指令取出。
在循环尾部的JUMP、CALL和RETURN指令的情况中,它们的优先级高于EOL条件。换言之,如果JUMP条件为真,则执行JUMP,而非循环尾部。在这样的情况中,如果检测到EOL条件且未发生跳转,则发生EOL为真。
注意到,如图14中所示,当执行DO UNTIL指令时,用作对地址比较器的一个入口的栈顶是压入栈中的地址。
如上所述,图15示出了根据本发明的概念的程序存储器接口的逻辑电路。在图15的示例中,电路包括循环顶部指令栈200和指令保持寄存器300。循环顶部指令栈200使得发生在循环尾部的所有指令无需向进程添加周期即可执行。循环顶部指令栈200去除了当可能存在程序存储器数据访问和/或程序计数器不连续时取出下一条指令的需求。
根据本发明的概念,对循环顶部指令栈200的使用利用了程序计数器不连续是预先已知的这一事实。这允许本发明在进入循环之后将循环的第一条指令保存在循环顶部指令栈200中,使得该指令可供稍后使用。这消除了在循环结尾不连续时对稍后周期的程序存储器读周期的需求。最后,指令保持寄存器300用于暂时存储指令值。
图15还示出其它逻辑组件;诸如数据多路复用器175、第一指令多路复用器120、第二指令多路复用器140和第三指令多路复用器160,它们允许在不冲突或程序不连续的情况下每一周期发生两次存储器访问。注意到,第一和第二指令多路复用器120和140可被组合来形成单个指令多路复用器。各个逻辑组件用来为在程序存储器数据总线(PMD总线)和/或指令寄存器总线(IR总线)上呈现的信息创建通路。该信息是从邻近程序存储器100或者从远距存储器中读取的信息。而且,该信息可以是两种类型的:数据或指令(程序)。
如果该信息是数据类型的,则该信息会经由数据多路复用器175通过PMD总线。数据多路复用器175是通过对读事务的地址解码来控制的,使得数据的源可从远距或邻近存储器块中正确地选择。
如果该信息是指令,则该指令必须被转发到取决于指令取出的类型的正确位置。存在两种类型的指令取出:从邻近存储器块中的早期取出或预取,以及从高速缓存或远距存储器中或在不连续情况中从邻近存储器中进行的正常取出。
第一指令多路复用器120和第二指令多路复用器140组合在一起以从程序中生成要接着执行的指令。如前所述,第一和第二指令多路复用器120和140可被组合来形成单个指令多路复用器,以从程序中生成要接着执行的指令。
第二指令多路复用器140从循环顶部指令栈200中选择指令值,即来自邻近程序存储器100的指令值,或者由多路复用器110选择的指令值。
第一指令多路复用器120从第二指令多路复用器140中选择指令值,即来自远距存储器(未示出)的指令值,或存储在预取指令寄存器130中的预取指令值。
第三指令多路复用器160选择要加载至指令寄存器(IR)170中的值。该指令值可以是来自要执行的程序序列的下一指令,或者特殊情况该指令被塞入管线作为对事件或请求的响应。这样的事件的示例有中断或周期挪用事件,其中特殊指令被加载至IR 170中。
中断干扰正常的程序流,而周期挪用事件只是***管线而不干扰程序序列的正常流。在周期挪用时,来自程序的指令被存储在保持寄存器300中。当周期挪用后,该指令从保持寄存器300经由第三指令多路复用器160被加载至IR 170中,从而允许程序序列正常继续。
在本发明关于图15的说明的操作的另一示例中,在执行DO-Until指令(循环指令)期间,从存储器(邻近程序存储器或远距存储器)中取出并被选为第一指令多路复用器120的输出的指令是循环的第一条指令,即循环的开始。该指令被加载至循环顶部指令栈200供将来使用。
最后,对第一指令多路复用器120和第二指令多路复用器140的控制逻辑引起第一指令多路复用器120和第二指令多路复用器140协同工作,以便:
1.,当程序代码从高速缓存中取出时需要来自高速缓存的指令时,经由多路复用器110输出来自高速缓存的指令值;
2.在程序代码不连续情况中,输出来自邻近程序存储器100的指令值;
3.在程序取出是从邻近程序存储器100中且顺序(非不连续)的情况中,输出来自预取指令寄存器130的指令值;
4.在从远距存储器指令取出的情况中,输出来自远距存储器的指令值;或者
5.在循环结尾不连续情况中,输出来自循环顶部指令栈200的指令值。
为改进功能并允许嵌套的循环和不可中断的循环,本发明利用循环顶部指令栈200将指令值压至例如新循环的开始或中断,并当程序从中断服务例程中返回或处于循环出口时使该指令值出栈。
本发明也处理来自指令高速缓存的未中。在该情况中,本发明迫使IDLE指令进入指令寄存器170。IDLE指令基本上冻结管线,且CPU在等待所取指令回来时不做任何事。注意到,如果中断事件或周期挪用事件发生时,本发明也允许该事件接管管线,且CPU可继续执行该中断指令或该周期挪用指令。
图18示出了根据本发明的概念各种访问的地址的生成。如图18中所示,地址可能来自三个源:数据地址生成器1 400(DAG1)、数据地址生成器2 500(DAG2)或者程序存储器访问定序器600(PMA定序器)。PMA定序器600生成用于指令和程序存储器数据的邻近程序存储器地址,以及仅用于指令取出的指令高速缓存存储器地址。
由DAG1 400和DAG2 500生成的地址被提供给第一多路复用器700和第二多路复用器800。而且,来自DAG2 500的地址也被提供给PMA定序器600。多路复用器700选择来自DAG1 400的地址或者来自DAG2 500的地址,来用作邻近数据存储器的地址。多路复用器700选择来自DAG1 400的地址,或者来自PMA定序器600的高速缓存程序存储器地址,或者来自DAG2 500的地址,来用作远距程序存储器或远距数据存储器的地址。
尽管在对本发明的不同实施例的以上各种描述中描述了本发明允许每一指令周期进行两次存储器访问,其中每一访问在周期的不同点触发来避免冲突且这些点由时钟信号的两个边沿定义,但本发明也构想了这样一个实施例,其中存储器接收指示在一个周期中必须执行的两次访问的命令,且基于主时钟和存储器的内部逻辑和时序电路,存储器一个接着另一个地生成两个数据读(假定存在读而不是两个写)。
总而言之,本发明允许每一周期访问存储器两次,使得指令序列的正确执行所需的信息被提供给CPU,其中正确操作指的是每一时钟周期一条指令且CPU可执行如指令集中所描述的由指令请求的操作。正确操作也指的是,向CPU提供来自正在执行的程序的下一条指令而没有延迟。为了允许每一周期两次程序存储器访问,CPU提供两个地址以及定义访问的相关联的两条控制线,并在写事务的情况中提供要写的数据。本发明还提供有效提供地址和控制线以及访问定序,使得不存在冲突且不必对每一指令周期进行两次以上访问的微架构和方法。
如上所示,本发明的微架构通过每一时钟周期在单个存储器块上并行执行两次存储器访问实现了需要两次存储器访问的简单管线上的单周期执行。更具体地,本发明由于这样的每一时钟周期的双倍访问而减轻了对速度的限制,并简化了微架构,使得逻辑实现在性能方面更有效。
最后,本发明允许在以单个周期执行包括零开销循环或重复功能的所有指令,同时仍旧维持高性能水平的架构中使用单端口存储器、同步访问。
尽管示出和描述了本发明的各个示例和实施例,但本领域的技术人员可以理解,本发明的精神和范围不限于此处的具体描述和附图,而是延及全部如所附权利要求书中所述的各种修改和改变。
Claims (14)
1.一种用于访问具有微处理器、一级流水线和二相时钟的微处理***中的统一存储器,使得指令在单个指令周期中执行的方法,所述方法包括:
(a)从所述统一存储器中取出程序指令;
(b)确定所取的程序指令在单个指令周期期间是否需要三次统一存储器访问来正确执行所取的程序指令,所取程序指令的正确执行是指微处理器在单个指令周期中执行所取程序指令所请求的操作;
(c)当确定所取程序指令需要三次统一存储器访问来正确执行所取程序指令时,在与所取程序指令相关联的指令周期期间以空访问来访问所述统一存储器第一次;
(d)当确定所取程序指令需要三次统一存储器访问来正确执行所取程序指令时,在与从所述统一存储器所取的程序指令相关联的指令周期期间从统一存储器中的指令寄存器中取出下一程序指令;以及
(e)当确定从所述统一存储器的第一次访问所取的程序指令需要三次统一存储器访问来正确执行从所述统一存储器的第一次访问所取的程序指令时,在与从所述统一存储器的第一次访问所取的程序指令相关联的指令周期期间内以数据访问来访问所述统一存储器第二次。
2.如权利要求1所述的方法,其特征在于,所述数据访问是读数据访问。
3.如权利要求1所述的方法,其特征在于,所述数据访问是写数据访问。
4.如权利要求1所述的方法,其特征在于,所述从统一存储器的第一次访问所取的程序指令是循环的最后一条指令。
5.如权利要求1所述的方法,其特征在于,所述指令寄存器是指令栈,从而允许对嵌套循环的程序指令取出。
6.一种用于访问具有微处理器、一级流水线和二相时钟的微处理***中的统一存储器,使得指令在单个指令周期中执行的方法,所述方法包括:
(a)在第一指令周期期间从所述统一存储器中取出对应于第二指令周期的程序指令;
(b)确定对应于第二指令周期所取的程序指令是否是条件程序计数不连续;
(c)当确定对应于第二指令周期所取的程序指令是条件程序计数不连续时,在所述第二指令周期期间以空访问来访问所述统一存储器第一次;以及
(d)当确定对应于第二指令周期所取的程序指令是条件程序计数不连续时,在所述第二指令周期期间访问所述统一存储器第二次来读取新指令,从而使从所述统一存储器的指令访问对第二指令周期延迟半个周期;
(e)当确定对应于第二指令周期所取的程序指令是条件程序计数不连续时,在所述第二指令周期期间的下降沿上以数据访问来访问所述统一存储器第三次以读取程序指令。
7.如权利要求6所述的方法,其特征在于,所述条件程序计数不连续是跳转指令。
8.如权利要求6所述的方法,其特征在于,所述条件程序计数不连续是调用指令。
9.一种用于访问具有微处理器、一级管线和二相时钟的微处理***中的统一存储器,使得指令在单个指令周期中执行的方法,所述方法包括:
(a)从所述统一存储器中取出程序指令;
(b)确定所取程序指令是否是循环启动指令;
(c)当所取程序指令是循环启动指令时,在指令寄存器中存储所述循环的第一条指令;
(d)执行所述循环;
(e)确定所述循环执行期间的所取指令是否是所述循环的最后一条指令;
(f)在与所取的所述循环的最后一条指令相关联的指令周期期间,以空访问来访问所述统一存储器第一次;
(g)在与所取的所述循环的最后一条指令相关联的指令周期期间,从所述指令寄存器中取出所述循环的第一条指令;以及
(h)在与所取的所述循环的最后一条指令相关联的指令周期期间,以数据访问来访问所述统一存储器第二次。
10.如权利要求9所述的方法,其特征在于,所述数据访问是读数据访问。
11.如权利要求9所述的方法,其特征在于,所述数据访问是写数据访问。
12.如权利要求9所述的方法,其特征在于,所述指令寄存器是指令栈,从而允许对嵌套循环的程序指令取出。
13.一种用于在循环指令执行期间访问微处理***中的统一存储器的方法,包括:
(a)在第一指令周期期间从所述统一存储器访问程序指令;
(b)确定程序指令的类型;
(c)从所述统一存储器中预取第二指令;
(d)当确定程序指令的类型是循环的第一条指令时,将所预取的第二指令保存在寄存器中;
(e)当确定程序指令的类型是循环的最后一条指令时,从所述寄存器中取出指令;
(f)在所述循环的最后一条指令的执行期间,以空访问来访问所述统一存储器;以及
(g)在所述循环的最后一条指令的执行期间,以数据访问来访问所述统一存储器第二次。
14.如权利要求13所述的方法,其特征在于,当确定所述程序指令的类型是循环的第一条指令时,所预取的第二指令被保存在栈中来允许嵌套循环和可中断循环,且当确定所述程序指令的类型是循环的最后一条指令时下一指令被从所述栈中取出。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/715,629 | 2003-11-17 | ||
US10/715,629 US7389405B2 (en) | 2003-11-17 | 2003-11-17 | Digital signal processor architecture with optimized memory access for code discontinuity |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1902582A CN1902582A (zh) | 2007-01-24 |
CN100430889C true CN100430889C (zh) | 2008-11-05 |
Family
ID=34574238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004800397542A Active CN100430889C (zh) | 2003-11-17 | 2004-10-18 | 在数字信号处理器***中的存储器访问方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7389405B2 (zh) |
EP (1) | EP1685481B1 (zh) |
CN (1) | CN100430889C (zh) |
TW (1) | TWI297457B (zh) |
WO (1) | WO2005052788A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7873953B1 (en) * | 2006-01-20 | 2011-01-18 | Altera Corporation | High-level language code sequence optimization for implementing programmable chip designs |
TWI307101B (en) * | 2006-11-02 | 2009-03-01 | Via Tech Inc | Memory device and related method for realizing two-port mrmory functions |
US7900027B2 (en) * | 2008-01-31 | 2011-03-01 | International Business Machines Corporation | Scalable link stack control method with full support for speculative operations |
CN103679042B (zh) * | 2012-09-06 | 2016-09-14 | 中天安泰(北京)信息技术有限公司 | 数据安全存储方法及装置 |
US10120688B2 (en) * | 2016-11-15 | 2018-11-06 | Andes Technology Corporation | Data processing system and method for executing block call and block return instructions |
CN117193861B (zh) * | 2023-11-07 | 2024-03-15 | 芯来智融半导体科技(上海)有限公司 | 指令处理方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5434989A (en) * | 1991-02-19 | 1995-07-18 | Matsushita Electric Industrial Co., Ltd. | Cache memory for efficient access with address selectors |
US20020056030A1 (en) * | 2000-11-08 | 2002-05-09 | Kelly Kenneth C. | Shared program memory for use in multicore DSP devices |
US20020178350A1 (en) * | 2001-05-24 | 2002-11-28 | Samsung Electronics Co., Ltd. | Loop instruction processing using loop buffer in a data processing device |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4276594A (en) * | 1978-01-27 | 1981-06-30 | Gould Inc. Modicon Division | Digital computer with multi-processor capability utilizing intelligent composite memory and input/output modules and method for performing the same |
US5809550A (en) * | 1994-09-30 | 1998-09-15 | Intel Corporation | Method and apparatus for pushing a cacheable memory access operation onto a bus controller queue while determining if the cacheable memory access operation hits a cache |
US5623311A (en) * | 1994-10-28 | 1997-04-22 | Matsushita Electric Corporation Of America | MPEG video decoder having a high bandwidth memory |
-
2003
- 2003-11-17 US US10/715,629 patent/US7389405B2/en active Active
-
2004
- 2004-10-18 EP EP04795452.4A patent/EP1685481B1/en active Active
- 2004-10-18 CN CNB2004800397542A patent/CN100430889C/zh active Active
- 2004-10-18 WO PCT/US2004/034291 patent/WO2005052788A1/en active Application Filing
- 2004-11-01 TW TW093133246A patent/TWI297457B/zh active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5434989A (en) * | 1991-02-19 | 1995-07-18 | Matsushita Electric Industrial Co., Ltd. | Cache memory for efficient access with address selectors |
US20020056030A1 (en) * | 2000-11-08 | 2002-05-09 | Kelly Kenneth C. | Shared program memory for use in multicore DSP devices |
US20020178350A1 (en) * | 2001-05-24 | 2002-11-28 | Samsung Electronics Co., Ltd. | Loop instruction processing using loop buffer in a data processing device |
Also Published As
Publication number | Publication date |
---|---|
EP1685481A1 (en) | 2006-08-02 |
US7389405B2 (en) | 2008-06-17 |
CN1902582A (zh) | 2007-01-24 |
TWI297457B (en) | 2008-06-01 |
EP1685481B1 (en) | 2016-12-14 |
US20050108505A1 (en) | 2005-05-19 |
TW200529070A (en) | 2005-09-01 |
WO2005052788A1 (en) | 2005-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5893165A (en) | System and method for parallel execution of memory transactions using multiple memory models, including SSO, TSO, PSO and RMO | |
US5251306A (en) | Apparatus for controlling execution of a program in a computing device | |
US5185868A (en) | Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy | |
US9195786B2 (en) | Hardware simulation controller, system and method for functional verification | |
US8255633B2 (en) | List based prefetch | |
US5630157A (en) | Computer organization for multiple and out-of-order execution of condition code testing and setting instructions | |
JP3604091B2 (ja) | マルチタスキングデータ処理システム | |
EP0180237B1 (en) | Data processor system having look-ahead control | |
US4293907A (en) | Data processing apparatus having op-code extension register | |
US6564313B1 (en) | System and method for efficient instruction prefetching based on loop periods | |
CN108287730A (zh) | 一种处理器流水线结构 | |
EP0617364A2 (en) | Computer system which overrides write protection status during execution in system management mode | |
CN101558390B (zh) | 用于微处理器的可配置高速缓冲存储器 | |
CN103257849A (zh) | 程序执行控制装置 | |
US20110238934A1 (en) | Asynchronously scheduling memory access requests | |
CN103513964A (zh) | 循环缓冲器打包 | |
EP1760581A1 (en) | Processing operations management systems and methods | |
EP1760580B1 (en) | Processing operation information transfer control system and method | |
US5924120A (en) | Method and apparatus for maximizing utilization of an internal processor bus in the context of external transactions running at speeds fractionally greater than internal transaction times | |
CN100430889C (zh) | 在数字信号处理器***中的存储器访问方法 | |
US20030196072A1 (en) | Digital signal processor architecture for high computation speed | |
JP2022014679A (ja) | 電子制御装置 | |
US7058938B2 (en) | Method and system for scheduling software pipelined loops | |
CN101581961A (zh) | 一种cpu和降低cpu功耗的方法 | |
US6430682B1 (en) | Reliable branch predictions for real-time applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MEDIATEK INC. Free format text: FORMER OWNER: ANALOG DEVICES, INC. Effective date: 20080404 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20080404 Address after: Hsinchu Science Industrial Park, Taiwan Applicant after: MEDIATEK Inc. Address before: Massachusetts, USA Applicant before: ANALOG DEVICES, Inc. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |