著录项信息
专利名称 | 流水线微处理器的循环高速缓冲存储器及高速缓存控制器 |
申请号 | CN01121139.3 | 申请日期 | 2001-05-31 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2002-01-02 | 公开/公告号 | CN1329302 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | 暂无 | IPC分类号 | 暂无查看分类表>
|
申请人 | 德克萨斯仪器股份有限公司 | 申请人地址 | 美国得克萨斯州
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 德克萨斯仪器股份有限公司 | 当前权利人 | 德克萨斯仪器股份有限公司 |
发明人 | R·H·斯凯尔斯 |
代理机构 | 上海专利商标事务所有限公司 | 代理人 | 沈昭坤 |
摘要
本发明揭示一种微处理器和用于操作该微处理器的方法。该微处理器包括从一个指令流水线接收指令的多重执行单元,一个循环高速缓存存储器(210)与指令流水线通信,一个循环高速缓存控制器(214)控制指令流。最好由软件指令通知存控制器开始建立一个规定规模的软件流水线循环到缓存器。然后将指令从指令流水线累积到缓存器;当软件流水线循环的核心被建立到缓存器时,控制器最好停顿该指令流水线并使用缓存的指令执行循环。在循环完成后,恢复指令流水线。可减少所需的程序规模并减少功率消耗。
1.一种操作具有指令流水线和一个能储存N个执行包的循环高速缓存存 储器的多重执行单元处理器的方法,其中N是大于零的整数,其特征在于,所 述的方法包括下述步骤:
提供一个用于储存N个执行包的循环高速缓存存储器,其中N是一个大于 零的整数;
在所述循环高速缓存存储器中建立一个长度为n个执行包的软件流水线循 环核心,其中n为大于零且小于或等于N的整数;
停顿所述的指令流水线;
通过对每次迭代发送所述循环高速缓存存储器中的n个执行包的所述软件 流水线循环核心,执行所述软件流水线循环核心的至少一次迭代;
检测循环退出条件;和
恢复所述的指令流水线;
其中,所述的建立步骤包括下述步骤:
通过一条指令通知所述处理器开始在所述循环高速缓存存储器中建立长 度为n时钟周期的软件流水线循环;
将m时钟周期循环建立指令输入到所述的处理器,其中m大于n且在每个 时钟周期m输入一个或多个指令;
将每个所述的m时钟周期的循环建立指令累积到所述循环高速缓存存储器 的一个所述n个执行包的位置;
其中,所述的累积步骤包括下述步骤:
将所述m个时钟周期循环建立指令的第一个储存到所述n个执行包的第一 个位置;
通过将执行包位置增加1计算新执行包的位置,并如果增加后的位置通过 所述n个执行包的最后位置,则将执行包位置复位到所述的第一执行包位置;
将所述m个时钟周期的循环建立指令的第二个存入所述的执行包位置;且
重复所述计算一个新执行包位置的步骤和所述存储一个时钟周期的循环 建立指令步骤,直到每个所述m个时钟周期循环建立指令被储存到所述的循环 高速缓存存储器。
2.如权利要求1所述的方法,其特征在于,在影响特定执行包位置的所 述存储步骤的第一个步骤的时间或以前,清零每个所述n个执行包位置的内容。
3.如权利要求1所述的方法,其特征在于,在所述的建立步骤中发送到 所述执行单元的指令包括在所述循环高速缓存存储器中累积的指令。
4.一种操作具有指令流水线和一个能储存N个执行包的循环高速缓存存 储器的多重执行单元处理器的方法,其中N是大于零的整数,其特征在于,所 述的方法包括下述步骤:
提供一个用于储存N个执行包的循环高速缓存存储器,其中N是一个大于 零的整数;
在所述循环高速缓存存储器中建立一个长度为n个执行包的软件流水线循 环核心,其中n为大于零且小于或等于N的整数;
停顿所述的指令流水线;
通过对每次迭代发送所述循环高速缓存存储器中的n个执行包的所述软件 流水线循环核心,执行所述软件流水线循环核心的至少一次迭代;
检测循环退出条件;和
恢复所述的指令流水线;
其中,所述的建立步骤包括下述步骤:
通过一条指令通知所述处理器开始在所述循环高速缓存存储器中建立长 度为n时钟周期的软件流水线循环;
将m时钟周期循环建立指令输入到所述的处理器,其中m大于n且在每个 时钟周期m输入一个或多个指令;
将每个所述的m时钟周期的循环建立指令累积到所述循环高速缓存存储器 的一个所述n个执行包的位置;
其中,在所述建立步骤中发送到所述执行单元的指令包括从所述m个时钟 周期来的单时钟周期循环建立指令和从循环高速缓存存储器执行包来的任何 指令的组合,其中将所述单时钟周期循环建立指令储存起来,直到从循环高速 缓存存储器执行包来的所述指令不会由于累积所述的单时钟周期循环建立指 令到所述执行包而被覆盖为止。
5.一种多重执行单元处理器,其特征在于,它包括:
一个指令流水线;
一个所述指令流水线通信的循环高速缓存存储器,所述的循环高速缓存存 储器能够储存指令的N个执行包,其中N是大于零的整数;
一个能够从所述的指令流水线和从所述的循环高速缓存存储器的所述N个 执行包可选择地发送指令到所述的执行单元的控制器;
其中,所述控制器可从所述指令流水线发送至少一条指令到一个所述的执 行单元,而且在同一时钟周期从所述的循环高速缓存存储器发送至少一条指令 到另一个所述执行单元。
6.如权利要求5所述的处理,其特征在于,所述的控制器响应一软件命 令从所述指令流水线将指令累积到所述的循环高速缓存存储器。
7.如权利要求5所述处理器,其特征在于,所述控制器可将指令从所述 指令流水线发送到所述执行单元,而又将该指令累积到所述的循环高速缓存存 储器。
8.如权利要求5所述处理器,其特征在于,所述控制器访问由软件命令 设置且包含软件流水线循环规模的循环规模寄存器。
9. 如权利要求8所述的处理器,其特征在于,所述控制器使用储存在所 述循环规模寄存器中的循环规模值n,以重复地排序储存在所述循环高速缓存 存储器内的n个执行包。
本发明一般涉及流水线(pipeline)微处理器,尤其涉及用于执行软件流 水线循环的方法和微处理器结构。\n微处理器是将一个计算机的指令处理、算术和逻辑操作结合到单个芯片 上的电路。一个数字信号处理器(DSP)是优化成有效地处理大量数据的微处理 器。这种处理器集中了许多当代电子产品的操作,如高速调制解调器,高密 度磁驱动器,数字蜂窝电话及复杂的自动化系统,并能实现各种未来的其它 数字系统功能。在这些环境中对DSP的要求在持续增长,因为消费者从其数 字产品中追求更高的性能。\n设计师通过增加时钟频率,消除DSP线路设计的体系结构瓶颈,通过在 单个处理器线路中加入多重执行单元,以及开发优化的编译器以有效的方式 调度处理器执行的操作来成功地增加了DSP的性能。当进一步增加时钟频率 变得难以实现时,设计师利用多重执行单元处理器作为达到提高DSP性能的 方法。例如,图1示出具有8个执行单元L1、S1、M1、D1、L2、S2、M2和D2 的DSP执行单元的寄存器结构的方框图。这些执行单元可以并行地同时完成 多个操作,如加、乘、寻址、逻辑功能和数据的存取。\n理论上多重操作单元处理器的性能正比于可用的执行单元的数目。但是, 此性能优点的利用取决于操作的有效调度,使大多数执行单元在每个时钟周 期有事可做。有效的调度对循环指定特别重要,因为在典型的运行时间应用 中处理器在循环执行之中花费大量时间。\n传统上,编译器是完成调度操作的一段软件。编译器是例如C,BASIC或 FORTRAN等源程序翻译成实际上在机器上运行的二进制映象的软件。典型地, 编译器由多个不同的阶段(phase)组成,一个阶段称为前端,负责校验源程序 语法上的正确性。如果编译器是C编译器,必须保证该源程序是C程序。还 有一个程序生成阶段,在前端和程序生成器之间的接口是高级中间表示。高 级中间表示是需要完成的更细化的指令序列。例如,在源程序中一个循环可 以编码成:for(l=0,l<10,l=l+1),它实际上可以分解成一系列步骤,例如, 每次通过循环时首先装入1并将其对10进行校验,以确定是否执行下一个循 环。\n程序生成阶段的程序生成器取出此高级中间表示,并将其转换成低级中 间表示。这更加接近于计算机能理解的实际指令。编译器的优化器必须保持 程序的语义(即从源程序翻译到高级中间表示,再到低级中间表示并最终到可 执行文件的指令的意义),但重写或转换该程序使计算机以更少的时间执行等 价的指令组。\n被编译器翻译成机器码的源程序由循环组成,如DO循环、FOR循环,和 WHILE循环。对这种循环编译进行优化对于在编译器生成的程序的运行时间性 能方面具有重要的影响。在某些情况,大量的时间花费在如做循环迭代和转 移等管理功能上而不是在这些循环本身完成的计算上。这些循环常实现科学 应用,处理大量数组和数据指令并在高速处理器上运行。在如RISC结构的机 器那样的现代处理器上尤其如此。这些处理器的设计使得算术运算一般比存 储器存取操作快很多。处理器和存储器速度之间的不匹配是限制微处理器性 能的一个很重要的因素。另外,转移指令(无论是条件转移或无条件转移)对 程序的性能有附加的影响。这是因为大多数现代的结构是超流水线的且实现 某种转移预测算法。该积极的流水线方法使得转移的误预测的不利后果十分 大。算术指令是在寄存器内部的指令,可快速执行,而转移指令由于误预测 的原因,存取由于存储器速度较慢的原因,可能占用较长的执行时间。\n能够安排循环指令得到多个执行单元的优点的一个有效方法是用软件流 水线循环。在传统的标量循环中,在任何指令执行下一迭代以前所有指令执 行一个单迭代。在软件流水线循环中执行的次序重新调度,使得在前一次迭 代结束以前开始执行原始循环的一个或多个迭代。参照图7,其中示出包括A、 B、C、D和E指令循环的20次迭代的简单标量循环。图8描述对图7的循环 的另一种执行调度,其中每个时钟周期开始原始循环的一个新的迭代。在此 调度中对时钟周期I4-I19每个时钟周期执行同样的指令(An,Bn-1,Cn-2,Dn-3,En-4 );如果可用多个执行单元平行地执行这些操作,此程序可以重新构造来完成 这些循环中的重复指令。于是,A、B、C、D、E的重复样式(以及循环控制操 作)形成一个新的软件流水线循环的循环核心(loop kernel),它在16个循环 中的时钟周期l4-l19执行这些指令。在图8的时钟周期l1到l3执行的指令仍 必须首先执行,以便适当地“填满”软件流水线循环;这些指令称为循环头 (loop prolog)。类似地,在图8的时钟周期l20到l23的指令也必须执行以便 适当地“流出”此软件流水线;这些指令称为循环的结尾(loop epilog)(注 意在许多情况此循环结尾可以通过熟知的思索(Speculative)执行技术予以删 除)。\n图7和图8的简单例子说明了软件流水线的基本原理,但是依赖性和冲 突的其它考虑可能限制特定的调度解决方案。为了更详细地解释软件流水线, 可参见Vicki H.Allan,“软件流水线”27 ACM“计算机检测”367(1955)。\n软件流水线的一个缺点是对每个循环需要一个专门的循环头。循环头直 接将一个流水线的头几次迭代排序,直到能进入稳态循环核心(一般被称为“填 充”此流水线)。如果执行此核心,只有在循环核心中的每条指令具有有效的 操作量后,才能达到稳态操作。根据经验,在k=l-m时钟周期以后循环核心 能进入稳态执行,其中l表示完成流水线循环的一次迭代需要的时钟周期数, 而m表示在循环核心的一次迭代中包括的时钟周期数(如果核心是顺序进行 的,此公式通常必须修改)。\n结合此关系,可理解当流水线循环的单次迭代需要的累计流水线延时增 加时,循环头的长度也相应的增加。在某些情况,需要填充流水线的循环头 程序可以是循环核心程序的规模的数倍。因为程序规模可能是执行速度的一 个确定因素,(短的程序与长的程序相比较通常在更大的范围更能使用芯片上 的程序存储器),长的循环头不利于程序执行速度。较长程序的附加缺点是增 加了能耗—存储器存取通常比CPU芯片操作需要大得多的能耗。\n对于长的循环头的一个解决缺陷方法是“预起动”(“prime”)此循环。 即去掉循环头并执行此循环更多次。为此,在头几次执行循环时不执行某些 指令,如存储,而在循环执行的最后时刻执行。通过使这些指令条件化且对 每组在每个特定的循环迭代开始执行的指令分配一个新计数器就可以实现上 述功能。但是,这样增加了每个新循环计算器减量的指令,引起更低的循环 效率。它还增加了程序的规模并对通用寄存器和条件寄存器两者增加了额外 的寄存器压力,由此,预起动软件流水线循环不总是可能或期望的。\n本发明通过消除至少一部分已有技术的软件流水线所需要的预编译循环 头和循环核心程序,寻求减少程序规模、能耗和处理的延时。本发明通过实 时“编译”或“建造”循环核心消除了直接重复循环头指令,而同时以循环 方式执行循环头指令。因此按照本发明的微处理器包括能完成该“建造”功 能并循环通过和执行以前产生的指令的硬件。\n在一方面,本发明提供一个多重执行单元微处理器,包括一个指令流水 线,一个与该指令流水线通信的循环高速缓冲存储器,和一个循环高速缓存 控制器。该指令循环缓冲存储器能够对每个执行单元存取直到N个执行单元 指令周期。该循环缓存存储器能可选择地从指令流水线和从循环高速缓存存 储器将指令发送到执行单元。该循环高速缓存控制器最好能响应软件命令使 能该指令循环高速缓存存储器,并控制从循环高速缓冲存储器存取指令。控 制器最好还对该高速缓存的循环检测退出条件。最好该控制器功能使用微处 理器程序计数器。该控制器还能适当地响应循环高速缓存命令停止和重新起 动微处理器的指令流水线。\n在另一方面,本发明提供一种具有一个循环高速缓存存储器和一个指令 流水线的多重执行单元处理器的操作方法。该方法包括在循环高速缓存存储 器中建造软件流水线循环核心的步骤,停止该指令流水线的步骤,使用循环 高速缓存存储器中的核心指令执行该循环核心的至少一次迭代的步骤,检测 循环退出条件和恢复指令流水线的步骤。最好在建造循环核心同时指令可从 循环高速缓冲存储器发出,这就允许减少程序的规模。\n本发明的一个优点是由于有较少的数值从存储器取出而节省功耗。\n本发明第二个优点是由于存储器加载时,它们是从高速缓存器而不是从 存储器加载从而节省功耗。\n本发明的第三个优点是可减少需要完成循环指令的程序量。\n参照附图可以更好地理解本发明;\n图1是方框图,描述了如Texas Instruments公司的C6x处理器那样的 多重执行单元处理器的执行单元和寄存器,由此本发明的一个较佳实施例可 以操作执行。\n图2以更详细的方框图的形式,示出读取包的流程,它从程序存储器30 接受,通过读取21、调度22和解码23阶段以及两个数据通路1和2、24a和 24b。\n图2b详细示出图1和图2中的数据通路1,24a和2,24b。\n图3示出图2的8指令宽的读取包的结构。\n图4示出以存储器映象模式物理上可编址的C6x处理器的芯片上的地址 空间。\n图5A示出C6000的流水线阶段,其上以图示方式表明了本发明。\n图5B是一图表。示出了在图1的C6x微处理器中一个指令执行流水线的 各处理阶段。\n图5C是一图表,示出了在图1的C6x微处理器中一个指令执行流水线的 各处理阶段。\n图6示出对顺序执行的5条指令序列的硬件流水线。\n图7示出同样5条指令,它们在20次串行执行迭代的单周期循环中执行, 无并行处理,且无软件流水线。\n图8示出同样5条指令,用软件流水线在20次迭代的循环中执行。\n图9示出用软件流水线在20次迭代的3周期循环中执行的指令A-P。\n图10示出图9的3周期循环核心,指令A-P映射到硬件功能单元。\n图11示出用软件流水线在具有20次迭代的3周期循环中执行的指令A-P 的C6000编码指令序列。\n图12示出从C6000流水线的C6000DP/DC阶段的DP阶段进行的指令A-P 调度。\n图13示出用在3周期循环中执行的指令A-P的软件流水线循环的一次迭 代的同一例子填入的C6000流水线。\n图14示出按照本发明较佳实施例的带有循环高速缓存执行包构造器(Loop Cache Execute Packet Builder)的C6000DP/DC阶段。\n图15示出在按照本发明较佳实施例的、实施循环高速缓存执行包构造器 的C6000上执行的同一个例子(指令A-P的3周期循环的20次迭代)的新指令 序列。\n图16a-16f图示出了循环高速缓存执行包构造器逐步操作的例子,特别 关注C6000的DP/DC阶段。\n图16a示出在将指令A发给C6000CPU的M1单元解码单元且在周期2发 给LCEPB的PC0时的循环高速缓存器(Loop Cache)和解码单元。\n图16b示出在将指令B和C分别发给C6000CPU的S2和M2解码单元且在 周期1发给LCEPB的PC1时的循环高速缓存器和解码单元。\n图16c示出在将指令D和E分别发给C6000CPU的M1和M2解码单元且在 周期0发给LCEPB的PC2时的循环高速缓存器和解码单元。\n图16d示出在将指令FGH分别发给C6000CPU的L2、S1和S2解码单元和 LCEPB的PC0,且在周期1将指令从LCEPB的PC0发给C6000CPU的M1解码单 元时的循环高速缓存器和解码单元。\n图16示出在将指令O和P分别发给C6000CPU的D2和L1解码单元和LCEPB 的PC2,且将指令JDE从LCEPB的PC2分别发给C6000CPU的S1、M1和M2解 码单元时的循环高速缓存器的解码单元。\n图16f示出在将指令KLFGHA从LCEPB的PC0分别发给C6000CPU的D1、D2、 L2、S1、S2和M1解码单元而指令的调度是从C6000DP阶段一直停留到 “Cntr=0”。\n现在叙述本发明几个说明性实施例。虽然有理由相信,本发明可以结合 实际上任何具有多重执行单元的处理器使用,为了解释的目的,参照特定的 处理器系列Texas Instruments TMS320C62xx详细地描述实施例。本领域的 普通技术人员将充分理解下面的描述,且能再现本发明;而对处理器结构、 指令集和操作等有关资料,有兴趣的读者可参考德克萨斯仪器股份有限公司 的TMS320C62xxCPU和指令集参照指南(1997)和德克萨斯股份有限公司的 TMS320C62xx程序设计器指南(1997),通过引用,上述内容与本发明结合。\n某些定义对读者也是有用的。这里使用的指令是由处理器上的一个执行 单元在一个或多个时钟周期内可以完成的功能。一个执行包(execute packet) 是一个或多个指令的组合,它们在相同的时钟周期内调派到各个执行单元。 一个取入包(fetch packet)是一个标准规模的指令块,包括一个或多个执行 包,它们作为一个单元加载到CPU。\n存储器件映射在芯片上的存储器占据正规可寻址程序存储器的一个连接 段。一个高速缓存器芯片上存储器包括一个指令的拷贝,它们也驻留在外部 存储器且已被CPU请求(通常是那些最新请求的)。这些不需要代表程序存储 器的一个连续段,且通常不由CPU直接选址。一个循环高速缓存存储器(loop Cache memory)具有附加的特性,它能在操作的任何时刻包含不驻留在传统高 速缓冲器或芯片外存储器中的执行包的拷贝。但是这些执行包使用驻留在传 统高速缓冲存储器或芯片外存储器中的指令加以构造。\nTexas Instruments TMS 320C6xCC6x处理器系列包括若干具体的处理器, 它们可以被修改成结合本发明。C6x系列包括标量和浮点结构。这些处理器的 CPU核心包含8个执行单元,其中每个需要31位指令。如果所有8个处理器 的执行单元对一个给定的时钟周期发出一个指令,需要最大256位指令字长 度(8个31位指令加上指示平行排序的8位)。\n在图1中示出了连接若干外部数据系统的C6x处理器的方框图。处理器10 包括与程序存储器控制器30和数据存储器控制器12通信的CPU核心 (core)20。该处理器的其他重要的块包括外设14,外设总线控制器17和DMA 控制器18。\n处理器10构造成使CPU核心20无须关心从存储控制器12和30来的所 请求的数据和指令是否实际上驻留在芯片上或芯片外。如果所请求的数据驻 留在芯片上,控制器12或30将从对应的芯片上的数据存储器13或程序存储 器/高速缓存器31抽取数据。如果所请求的数据未驻留在芯片上,这些(控制) 单元从外部存储器接口(EMIF)16请求数据。EMIF16与外部数据总线70通信, 后者连接到如盘71、ROM72或RAM那样的外部数据存储单元。外部数据总线70 为32位宽。\nCPU核心20包括两个通常相似的数据通路24a和24b,如图1所示,详 细示于图2a和2b。第一个通路包括一个共享的多端口寄存器文件A和4个执 行单元,包括一个算术和加载/储存单元D1,一个算术和移位单元S1,一个 乘法器M1和一个算术单元L1,第二个通路包括多端口寄存器文件B和执行单 元:算术单元L2,移位单元S2,乘法器M2和加载/储存单元D2。这两个数据 通路之间有共享数据的能力(但并不限定)。\n因为CPU核心20包括8个执行单元,指令处理是CPU核心20的一个重 要功能。256位宽的指令组由程序取入21请求并从程序存储控制器30作为取 入包(即100,200,300,400)接收,其中每个取入包是32位宽。指令调度22 从取入包在执行单元之间分配指令作为执行包,将“ADD”指令分配给算术单 元L1或算术单元L2,将“MPY”指令分配给乘法单元M1或M2,将“ADDK” 指令分配给算术和移位单元S1或S2,并将“STW”指令分配给算术和加载/存 储单元D1和D2。在指令调配22以后,指令解码器23在应用到对应的执行单 元之前解码此指令。\n在较佳实施例中,一个取入包具有固定的8条指令的长度,如图3所示。 取入包的执行组合由每条指令的p-位(即位0)指定。取入包在程序存储器中 是每8个字对齐。\n该P位控制指令的并行执行。P位被指令调配22从左到右(从低地址到高 地址)扫描。如果指令i的p位是1,则指令i+1与指令i并行执行,即在同 一个执行包。因此,一个执行包可以包含1条到8条指令,且一个取入包可 以包括1个到8个执行包,取决于这些执行包的规模。在一个执行包中的所 用指令必须使用单独的执行单元。一个执行包也不能跳越8个字的边界。因 此,在取入包的最后的p-位总设成0,且每个取入包以一个新的执行包开始。\n由于可变的执行包长度和固定的取入包长度,在较佳实施例中,芯片上 程序存储器31按照取入包对齐。如果位于取入包中间的一条指令被CPU请求, 则抽取整个取入包,但在较低地址的所有指令被忽视(即使它们在其它情况与 所请求的指令并行操作)。\nC6x处理器的物理的可寻址的地址空间是4G(千兆)字节。芯片上程序存 储器31的规模是64K字节。但是每条指令需要4个字节,每个取入包包含8 条指令,使得芯片上程序存储器31安排成2K帧,每帧保持长度是32字节或 256位的一个取入包。在存储器映射方式,该64K字节的芯片上存储器可以选 成在以地址1400000开始的地址空间中的连续存储器块,如图4A所示,或以 地址0000000开始,如图4B所示。\n图5A示出了当一个包括8条指令的取入包通过硬件流水线被处理时, C6000微处理器的流水线阶段。图5B是一图表,示出在图1的C6000微处理 器中一个指令执行流水线的各处理阶段。每个阶段大致相当于系统时钟的一 个时钟周期。例如,如果微处理器1以200MHz时钟频率运行,则每个阶段标 称为5NS。但是,在等待从如RAM70那样的存储器或外围设备的数据的阶段, 在所需的数据未准备好之前流水线一直停顿。在停顿时,给定流水线阶段占 据数个系统时钟周期。\n在图5B中,处理一条指令的第一阶段是产生在PG阶段中的程序地址。 这是通过加载位于程序取入器21中的程序取入计数器PFC完成的。在第二个 指令处理阶段PS,一个指令取入包的地址经由程序地址总线PADDR发送到程 序存储器31。第三阶段PW是在存储器31的访问时间需要的等待阶段。在第 四阶段PR,可得到从程序存储器31经由数据总线PDATA_1的程序取入包。在 第五处理阶段DP,检测指令的并行性并将能并行执行的指令每时钟周期一个 执行包地调配到适当的功能单元。在DP处理阶段还有一个调配缓存器,其中 8条指令驻留在那里等待调配到解码阶段DC。每个8条指令组包括1-8个执 行包。每一个时钟周期将一个执行包发送到DC。在所有执行包被发送以后可 从存储器得到下一个取入包。在以后的段落中将更详细地描述流水线操作的 这个方面。在第六处理阶段DC,执行指令被解码并且产生控制信号控制各种 数据通路及功能单元。对每个8个功能单元有8个单独的解码单元,或者对 每个功能单元有1个解码单元。\n图5C是一图表,示出在图1的C6x微处理器指令执行流水线的执行阶段。 在第一执行阶段E1,完成称为“ISC”的单时钟周期指令和称为“BR”的转移 指令。指定的执行单元完成在图5C指出由控制线路导向与操作。在第二执行 阶段E2,在控制线路控制下由指定的执行单元完成下述类型的指令:整数乘 法(IMPY),程序存储指令(STP)和数据存储指令(STD)。在第三执行阶段E3, 通常锁存从数据存储系统(DMS)来的数据持续执行加载数据指令,如图所示。 在执行阶段E4,在E3锁存的数据被传送到执行单元D1或D2的数据输入寄存 器DDATA_1。在执行阶段E5,通过处理在寄存器DDATA_1中的数据并将处理 后的数据写到寄存器文件A或B中的指定寄存器中来完成LD指令。\n图6示出硬件流水线,它包括对串行执行的下述A、B、C、D、E指令序 列的上述详述的阶段,PG、PS、PW、PR、DP、DC和E1。如图所示,指令A、B、 C、D、E通过处理阶段进行,每次一个时钟周期,直到以指令E结尾的每条指 令到达硬件流水线的执行或E1阶段。\n图7示出在没有并行处理和没有软件流水线情况下,以单周期时钟循环 的20次迭代串行执行来完成的同样5条指令A、B、C、D和E。此图简单地是 整个循环执行的一个周期图。下标1、2、3……20代表特定的循环迭代1,2, 3……20。例如,在所示的头5个时钟周期,循环的第一次迭代执行或达到处 理的E1阶段。类似地,从时钟周期95到时钟周期99,指令A、B、C、D和E 的循环的20次迭代执行或达到处理的E1阶段。循环的执行占用5×20或100 个时钟周期。\n图8示出在实行软件流水线的情况以单周期循环20次迭代执行的同样5 条指令A、B、C、D和E。执行指令A、B、C、D和E的循环的每次迭代的时间 从开始到结束是5个周期。在软件流水线中,每一个时钟周期循环的新的迭 代开始并结束。因此,例如在第二时钟周期中,在循环A1的第一次迭代完成 执行以前该循环的第二次迭代已经开始,A2、B2、C2、D2和E2。循环以所示 的代码定义,循环为迭代的执行次数在“LOOP”指令确定。如图8所示,指 令A、B、C、D和E的循环总共占用24个时钟执行周期。在前4个时钟周期 确定循环头。如以前的段落所确定,循环头建造了循环的核心,如前面所讨 论,此循环头能够变成特别长从而本身成为与软件相关的一个问题。在周期0 执行指令A1,在周期1执行指令B1和A2,在周期2执行指令C1、B2和A3 等,直至整个核心被建成,在软件流水线达到稳态操作以前浪费许多时钟周 期。在时钟周期4-19,由循环的每条指令A、B、C、D和E(虽然不同的迭代) 构成的循环核心执行16次或16次迭代。例如,在时钟周期4,执行指令A的 第5次迭代,同时执行指令B的第4次迭代,同时执行指令C的第3次迭代, 同时执行指令D的第2次迭代,同时执行指令E的第1次迭代。因为“LOOP” 指令确定迭代次数为20,循环的尾部跟随循环的核心并在周期20-23执行, 因此与循环头一起完成循环附加的4次迭代。\n图9示出了应用完成的软件流水线在3个时钟周期中用20次迭代执行的 循环中的指令A-P。如图所示,指令B和C能并行执行,这就意味着它们使用 不同的功能单元来执行。指令D和E,FG和H,K和L,M和N,O和P也能并 行执行,由此增加了系统的并行性。图中也示出,指令A1、B1、C1、D1和E1 形成前3个周期循环且在时钟周期0-3上执行,但由于还有指令F-P留在循 环中,在第4周期上不去开始做A2、B2等指令,而第3周期开始执行指令F1、 G1和H1,并还执行指令A、A2的第2次迭代。在周期0-5中头部继续建造核 心,直到由指令A-P组成的循环的每条指令在周期6-8的3周期循环中同时 执行。在周期60-65执行尾部指令。此循环总共占用66个周期来执行。6个 周期用于头部,18×3或54个周期用于循环,6个周期用于尾部。\n图10示出图9的3周期循环核心,其指令A-P映射到硬件功能单元。如 图所示,在第1个循环周期,在不同的功能单元同时执行指令A、F、G、H、K 和L。因此,在上面图9中,在周期3中不仅执行指令F、F1、G、G1和H、H1 的第一次迭代,而且执行指令A、A2的第二次迭代,由此完成指令A第二次 迭代的执行(指令A按照从程序中调出的“LOOP”指令需要20次迭代来完成, 因而使该系统更有效。此效果部分是由于软件流水线,部分是由于C6x微处 理器包括8个在每个时钟周期能并行执行的功能单元。类似地,在第二循环 周期,指令B、C、L、M和N并行地执行(虽然在互相不同的功能单元)。而且 在第三和最后循环周期(记住“LOOP”指令调出3周期循环)指令D、E、J、O 和P,由于它们特定功能单元需要,并行地执行。\n图11示出在软件流水线情况用20次迭代在3周期循环中执行的指令A-P 的C6000编码的指令序列。如在前面的段落描述的,考虑到循环的复杂性和 深度,程序的规模可能变得很大。必须对核心或稳态操作建立程序(例如执行 调度)。因此,如图9的执行调度所示,程序确定了执行指令A的第一次迭代, 然后在下一时钟周期指令B和C并行执行第一次迭代,然后在下一时钟周期, 并行执行指令D和E的第一次迭代,然后因为开始一个新的循环周期,执行 指令F、G和H的第一次迭代和指令A、A2的第二次迭代。如上面提到,此并 行性不仅归功于软件流水线,而且归功于包含在每个时钟周期能并行执行的8 个不同的功能单元的C6x微处理器硬件。在第7个时钟周期,开始循环的核 心,且显示第一个循环周期,其中第一条指令K与指令L的第一次迭代、指 令F1的第二次迭代、指令G的第二次迭代、指令H的第二次迭代及指令A的 第三次迭代并行执行。一旦开始循环核心,每3个时钟周期(因为在“LOOP” 指令中循环开始定义为3周期循环)指令迭代在“LOOP”指令确定次数。核心 占用18×3(在3周期循环的第一部分,在第一循环周期中执行迭代A3到A-20) 时钟周期用于执行。在循环核心以后。循环尾部完成从循环头到包括指令A-P3 周期循环的整个20次迭代中一直未完成的3周期循环的部分。此循环需要总 共48条执行指令。\n图12示出从C6000流水线的C6000DP/DC阶段的DP阶段调配指令A-P。 因此,使用在上述图9-11中示出的相同例子,示出C6x微处理器的硬件流水 线的调配阶段的调配缓存器222、DP22,和硬件流水线C6x的解码阶段的解码 器DC23(也示于图2)。其中图9示出在3周期循环中指令A-P的执行调度, 图10示出在循环核心的3个周期中指令A-P在哪些功能单元执行,而图11 示出编程指令A-P的软件流水线3周期循环的20次迭代所需的C6x程序,图 12示出在每个时钟周期将指令A-P从调配阶段DP22的调配缓冲器222调配到 各个单独的功能单元的解码单元DC23。因为调配缓冲器222能够储存用于调 配的最多8条指令,在时钟周期-2的开始将指令A、B、C、D、E、F、G和H 储存到调配缓冲器222。在时钟周期-2,指令A(第一个取入包的第一个执行 包)被调配到功能单元M1(乘法器)的解码单元23。在下一个时钟周期-1,指 令B和C(第一个取入包的第二个执行包)被调配到分别为存储和乘法单元的功 能单元S2和M2的解码单元,在时钟周期0,指令D和E(第一个取入包的第 三个执行包)从调配缓冲器222被调配到作为两个乘法器的功能单元M1和M2 的解码单元。在时钟周期1,不仅指令F、G和H(第一个取入包的第四个和最 后一个执行包)被调配到功能单元L1、S1和S2的解码单元,而且第二取入包 的新一组8条指令I、J、K、L、M、N、O和P被加载到调配缓冲器222,使得 在下一时钟周期(周期2)指令1在调配到功能单元L2的解码单元23而不必等 待将指令加载到调配缓冲器222。第二取入包的各种执行包的调配随后就象对 以前取入包所说的那样进行,直至每条指令A-P被调配到功能单元的适当的 解码单元。此图只示出循环A-P的第一次迭代。\n图13示出C6000硬件流水线和相应的阶段,用在图9-12中示出的以3 周期循环执行的指令A-P的软件流水线循环的相同的例子(区别在于一次迭代 而非20次迭代)。C6x微处理器硬件流水线的各阶段详述参照图5B和5C。如 图所示,指令ABCDEFGH的第一取入包经过PG、PS、PW、PR和符合软件流水 线原理的阶段,指令IJKLMNOP的第二取入包在第一取入包之后的一个时钟周 期经过同样的阶段PG、PS、PW、PR。一旦第一个取入包到达调配阶段22,且 如图12所示存入调配缓冲器222,调配阶段DP停顿来接收和储存更多的取入 包,直至所有的执行包从第一取入包被调配到与执行该指令的特定功能单元 相关的解码单元23。因此,DP从周期-1停留而到周期1,而执行包A、B和C, D和E,F,G和H被调配到合适的功能单元的解码单元23,并继续通过执行 阶段E1。如图12所示。在周期1,当包括指令F、G和H的执行包被调配到 合适的解码单元23时,指令IJKLMNOP的下一个取入包存入调配阶段DP22的 调配缓冲器222,用于在下一个时钟周期(周期2)调配到解码单元23。与第一 取入包相似,当第二取入包被分成能够并行执行的指令执行包时,在所有执 行包从第二取入包被调配到特定的解码单元23以前没有新的取入包加载到调 配单元22的调配缓冲器222(换言之,硬件流水线的DP阶段停顿)。\n图14示出带有按照本发明的较佳实施例的循环高速缓冲执行包构造器 (LCEPB)210的C6x微处理器DP/DC级。一方面,本发明提供一个如包括指令 流水线230的C6x那样的多重执行单元微处理器,一个与指令流水线230通 信的循环高速缓存存储器210和一个与指令流水线230及循环高速缓存存储 器210通信的循环高速缓存控制器214。指令循环高速缓存存储器210能够对 每个执行单元存放直到N周期的执行单元指令。循环高速缓存存储器210能 够有选择地从指令流水线230和从循环高速缓存存储器210发出指令到执行 单元。循环高速缓存控制器214最好响应软件指令使能指令循环高速缓存存 储器210,并控制从循环高速缓存存储器210存取指令。如图14所示,从调 配单元22的调配缓冲器222调配到特定解码单元23的指令同时存入循环高 速缓存存储器210。此外,一旦在LCEPB210中建立了循环高速缓冲执行包, 在从硬件流水线230来的新指令被从调配单元22的调配缓冲器222调配到合 适的解码单元的同时,以前储存在循环高速缓存210的能与刚调配到解码单 元23的那些新指令并行执行的指令也被发送到解码单元23,使得硬件流水线 230同时执行新指令和循环高速缓存的指令。循环高速缓存控制器214最好还 能检测对高速缓存循环的退出条件。最好循环高速缓存控制器214的功能使 用微处理器程序计数器。循环高速缓存控制器214也可以响应循环缓存命令 适当地停顿和重新启动微处理器的指令流水线230。\n图15示出在按照本发明的较佳实施例应用循环高速缓存执行包构造器的 C6000上执行的同一例子(指令A-P的3周期循环的20次迭代)的新指令序列。 与图11中示出的执行循环A-P的20次迭代所需的48条指令不同,现在只需 要17条指令,大量减少了程序的规模并减少了完成从存储器加载和存储所需 的功率。如图所示,新的“LOOP”(“循环”)命令调出如“B_LOOP LOOP_LABEL, X,Y”,其中“LOOP_LABEL”表示用于识别目的循环的标号。“B_LOOP”指令 的“X”部分表示从“B_LOOP”指令完成第一次转移占用的周期数或完成循环 的第一次迭代占用的周期数。“B_LOOP”指令的“Y”部分表示循环的周期的 规模。如图15的新“B_LOOP”指令的例子中所示,循环的标号是“LOOP New”, 来自A-P指令的循环占用9个周期用于执行(这更容易从图12看到,图中示 出从调配缓冲器222调配到解码单元23的执行包),而循环是3周期循环。 只有发出“B_LOOP_LABEL,X,Y”出现2周期的延时,从而复位和从DP218清 零循环高速缓存器和所有新的指令。\n如在图16a-16f中更详细地示出,一旦软件指令被循环高速缓存控制器214 所接收,将其转换成循环高速缓存控制器LCC模式,经由DP222调配的指令 同时经由循环高速缓存控制器214存入循环高速缓存存储器210,而且循环高 速缓存控制器214还将这些指令从循环高速缓存存储器210转发到指令流水 线230的DC级23。循环高速缓存控制器214还控制(1)从DP来的NOP(空操 作)是被写入还是忽略;(2)DP结果被写入哪个高速缓存存储器行;(3)DC级 从哪个高速缓存存储器行读取。为了在第一次通过循环以前清零缓存器,如 果在那个周期没有指令执行,DP必须将NOP写入缓存器。在第一次通过以后, 不要将另外的NOP写入缓存器的现指令。\n按照较佳实施例的方法包括下述步骤:在循环高速缓存存储器中构建软 件流水线循环核心;停顿该指令流水线;使用在循环高速缓存存储器中的核 心指令执行循环核心的至少一次迭代;检测循环退出条件;和恢复指令流水 线。最好在建立循环核心的同时指令从循环高速缓存存储器发出,这样就允 许减小程序的规模。\n图16a-16f示出参照C6000的DP/DC级,循环高速缓存执行包构造器的 操作的说明性的例子。现在使用图1中画出如TMS 320C6xx处理器那样8个 执行单元处理器上操作的实施例来描述本发明。图16a-16f示出当硬件流水 线被填充时“循环高速缓存执行包构造器”210(LC)如何建立循环高速缓存执 行包,即212。PC216表示在取入包(即E1流水线阶段)中的第一条指令的指 令地址。在E1流水线阶段的指令意味着该指令在流水线中的调配阶段DP已 经到达调配缓存器,且刚被调配到对每个执行单元都特定的解码单元DC,和 执行指令的DC/E1单元对。PFC是从存储器中获取下一个取入包的指令地址。 PFC在每个时钟周期增加到下一个取入包(除非流水线停顿)或者改变到在E1 阶段转移指令的转移目标。循环高速缓存执行包构造器210的操作应该不改 变完成上述增量的计数器的值或定时。执行单元D1、D2、L1、L1、S1、S2、M1 和M2是上面段落中控制的同样的执行单元,并沿着循环高速缓存执行包构造 器的顶部运行。\n图16a示出在周期-2期间在将指令A发到C6000CPU的M1单元的解码单 元和LCEPB的PC0过程中的循环高速缓存器和解码单元。在周期-2以前(如图 9中提供的例子),没有指令加载到LCEPB而调配缓存器222填满了指令A-H。 在循环高速缓存控制器LCC214在周期-2中接收到专门的“B-LOOP”指令以后, 在本例中从取入包进入E1流水线阶段PC216的第一个执行包—指令A的执行 包从调配缓存器222调配到CPU的M1单元的解码单元23,且还发送到LCEPB210 的与执行该指令的特定的执行单元类型相关的位置,在本例中是M1。在周期- 1的开始,指令A驻留在LCEPB的执行包EP0中,而且LCEPBPC指向EP1。此 外,如图13所示,虽然在所有的执行包从留在调配缓存器222取入包发送到 对应的解码单元23以前,组成留在调配缓存器222的取入包的执行包发出执 行包/时钟周期到对应的解码单元23,在硬件流水线的DP级218以前的流水 线级停顿。因此,在周期-1的开始,在硬件流水线的DP级218以前的流水线 级停顿,而且一直停顿到周期2的开始,此时所有执行包从调配缓存222发 送到对应的解码单元23而且新的取入包在周期1最终从硬件流水线230取入。\n图16b示出在周期-1期间在将包括指令B和C的第一个取入包的第二执 行包分别发送到C6000CPU的S2和M2解码器及LCEPB的EP1时的循环高速缓 存器和解码单元。因此,在周期0的开始,指令A留在LCEPB210的EP0中, 指令B和C分别发送到执行单元S2和M2的DC单元23,现在指令B和C也留 在LCEPB210的EP1与执行该指令的特定类型执行单元相关的位置,即分别为 S2和M2。而且在周期0的开始,PC指向EP2。如以前详细描述的,在硬件流 水线的DP阶段218以前的流水线阶段在周期0的开始停顿。\n图16c示出在周期0期间将包括指令D和E的第一取入包的第三执行包 分别送到C6000CPU的M1和M2的解码单元,并送到LCEPB的EP2时的循环高 速缓存器和解码单元。因此,在周期1的开始。指令A留在LCEPB210的EP0 中,指令B和C留在LCEPB210的EP1中,现在指令D和E留在LCEPB210的 EP2中与执行该指令的特定执行单元类型相关的位置,即分别为M1和M2。因 为“LOOP”被指令为具有3个周期(B_LOOP LOOP New,9,3),在周期1的开 始,PC从EP2移回到EP0。如前详细所述,在硬件流水线DP阶段218以前的 流水线阶段在周期1开始处停顿。\n图16d示出在周期1期间,在将包括指令FGH的调配缓存器222的第一 个取入包的第四个和最后一个执行包分别送到C6000CPU的L2,S1和S2解码 单元,并送到LCEPB的EP0,而且将指令A从LCEPB的EP0送到C6000CPU的 M1解码单元时的循环高速缓存器和解码单元。在周期2的开始时PC指向EP1。 因为指令FG和H构成以前储存在调配缓存器222的第一取入包的最后的执行 包,硬件流水线阶段在DP218之前走出以前的停顿状态,而调配缓存器222 中装入从硬件流水线来的下一个或第二个包括指令I,J,K,L,M,N,O和P 的取入包,它可以包括1至8个执行包,取决于互相的并行处理和互相的依 存关系。\n图16e和16f跳过许多步骤,通过周期6的未端和周期7的开始,其中 执行包括指令I(第二取入包的第一执行包),J(第二取入包的第二执行包),K 和L(第二取入包的第三执行包),和M和N(第二取入包的第四执行包),它们 从调配缓存器222发送到对应的解码单元23,并分别发送到LCEPB210的不同 的EP1、EP2、EP0,EP1中与执行该指令的特定类型的执行单元相关的位置, 即分别为L2,S1,D1和D2及D1和L1。这些执行包如以前执行包一样通过 LCEPB210处理。当然,如前已详述的,因为硬件流水线230的DP阶段的调配 缓存器222只能存储最多8条指令,且一个时钟周期只能从调配缓存器222 发送一个执行包,硬件流水线230的DP阶段218以前的流水线阶段在周期2 到周期7结束期间停顿,此时最后一个执行包从硬件流水线的DP阶段的调配 缓存器222送到执行这些指令的执行单元的特定解码单元23,在时钟周期6 结束,时钟周期7开始时,PC指向EP2。\n图16e示出在时钟周期7,在将包括指令O和P以前存入调配缓存器222 的第二取入包的第5个和最后的执行包分别送到C6000CPU的D2和L1解码器, 并送到LCEPB的EP2,而且将指令JDE从LCEPB的EP2分别送到C6000CPU的 S1,M1和M2的解码单元时的循环高速缓存器和解码单元。因为从第一个执行 包存入LCEPB开始的时钟周期数现在是9,而且原始“LOOP”指令(B_LOOP LOOP New,9,3)确定对该“循环”完整的迭代一次的时钟周期数为9,从硬件流水 线230的DP阶段218的调配缓存器的进一步调配停顿到循环高速缓存计算器 (LCC)214等于“零”,而且所有在LCEPB210中的指令被发送到对应的解码/ 执行单元23“CNTR”次(本例为20次),在这一点,硬件流水线230的DP阶 段的调配缓存器222包含指令Q,R,S,T,U,V,W和X而且随着LCEPB210 清除为下一次循环作好准备继续进行正常操作。\n图16f示出了上面段落的过程,其中在将指令KLFGHA从LCEPB的EP0分 别发送到C6000CPU的D1,D2,L2,S1,S2和M1解码单元并将指令从C6000 的DP阶段218调配到对应的解码单元23时,LCEPB210和解码单元23一直停 顿到“Cntr”=0。一旦软件流水线循环的第一条转移指令取入(因向所有循环 指令被加载到循环高速缓存器且最后的执行包从调制缓存器222被发送到特 定的解码单元23),LCC214能使用DP阶段218发送到取入流水线的同样信号 停顿该取入流水线阶段。在图16f中示出的LCEPB210包括那些指令,它们在 周期8,11,……56的开始时存在于LCEPB210。在时钟周期57-63的余下周 期中,当每条指令完成执行“CNTR”次时(本例中是20次)有效地执行循环尾 部。\n只有在完成LCEPB210中的循环,使得所有的循环的元素(虽然来自不同 的循环的迭代)被同时执行以后,LCC214发送一个条件指令停顿该取入流水线 阶段,而此循环执行预定的迭代次数。只有在发出:“B_LOOP_LABEL,X,Y” 后确实存在2个周期的延时,复位和清零循环高速缓存器以及所有从DP218 来的新指令,为下一次循环准备好LCEPB和硬件流水线的DP阶段。如前所述, 在“B_LOOP_LABEL,X,Y”指令中,LOOP_LABEL”表示用于识别目的的循环的 标号。“B_LOOP”指令的“X”部分表示从“B_LOOP”指令到完成第一次转移 占用的周期数,或为完成循环的第一次迭代占用的周期数。“B_LOOP”指令 的“Y”部分表示该循环的周期的规模。如前所述,一旦软件流水线循环的第 一次转移指令发生(因而所有循环指令被加载的循环高速缓存器),LCC214能 使用DP218发送到取入流水线的同一信号来停顿取入流水线阶段。\n虽然本发明参照特定的处理器加以描述,但应理解,本领域普通技术人 员能容易地采用所描述的实施例在另外多重执行单元处理器上加以运行。类 似地,使用那样的产品是示例性的而非必须的,可以理解,本发明通常可以 容易地用软件流水线循环来实现。虽然较佳实施例叙述中,参照构造软件流 水线循环核心的若干特定方法,然后停顿流水线执行此循环核心的迭代,但 本领域技术人员可以容易地用能用于本发明实施例中的特定微处理器的其它 类似的方法加以替代,在阅读了本发明揭示的内容以后,其它的修改对于本 领域技术人员是显而易见的,因而这些修改均在本发明范围中。
法律信息
- 2021-06-18
专利权有效期届满
IPC(主分类): G06F 9/38
专利号: ZL 01121139.3
申请日: 2001.05.31
授权公告日: 2005.10.05
- 2005-10-05
- 2003-08-20
- 2002-01-02
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |