通过选择性页遗漏转换预取隐藏程序存储器控制器中转换遗漏时延的制作方法

文档序号:11450342阅读:230来源:国知局
通过选择性页遗漏转换预取隐藏程序存储器控制器中转换遗漏时延的制造方法与工艺
本发明总体涉及数字数据处理,并且更具体地涉及地址转换。
背景技术
:在支持虚拟内存的处理器中,由cpu提供的虚拟地址必须被转换为物理地址。这通常由存储器管理单元(mmu)完成。mmu通常使用μtlb(微转换后备缓冲器)作为存储在mmu中的地址转换条目的高速缓存。这些地址转换条目通常基于存储器页来组织。cpu请求的每个虚拟地址需要通过由μtlb/mmu转换为用于进行存储器访问的物理地址。这通常在页边界上执行。如果系列程序跨越边界提取到下一页,则需要下一地址转换条目将虚拟地址转换为物理地址。如果此下一地址转换条目不在μtlb中,则必须从mmu请求。根据mmu中的页转换和页表移动延迟,此转换数据提取可能需要数十个周期到数百个周期。技术实现要素:示例实施例隐藏了用于此类程序提取的页遗漏转换延迟。在所述的示例中,每当cpu请求访问时,l1i高速缓存控制器对于虚拟地址加上提取包计数是否跨越页边界进行先验查找。如果访问跨越页边界,则l1i高速缓存控制器将与第一页一起请求第二页转换。该流水线向μtlb请求,而无需等待l1i高速缓存控制器开始处理第二页请求。这变成第二页转换请求的确定性预取。第二页的转换信息被本地存储在l1i高速缓存控制器中,并且当访问跨越页边界时使用。在所述示例中,数字信号处理器(dsp)、程序高速缓存存储器控制器(l1i控制器)和cpu至l1i高速缓存接口提供虚拟地址和来自该虚拟地址的提取包的数量。待访问的这个提取包的数量通常基于分支预测体系结构。l1i高速缓存控制器将虚拟地址和提取包计数的总和展开到对应的提取包请求中,并将这些提取包预取到l1i高速缓存。在典型的现有dspl1i高速缓存控制器中,l1i高速缓存为虚拟索引的虚拟标记的高速缓存。外输出至l2高速缓存的任何l1i高速缓存遗漏请求(虚拟地址)都必须被转换为物理地址并请求至l2高速缓存。l1i高速缓存控制器还确定至第二页的最后预测提取索引是否在转换表中。如果发生此情况,则l1i高速缓存控制器在需要下一页转换表条目之前请求该下一页转换表条目。通常当程序提取地址跨入下一页时,新的页转换表条目将被完成或正在进行。这降低了在第二页中提取指令的时延。附图说明图1示出了根据一个实施例的单核标量处理器。图2示出了根据另一实施例的双核标量处理器。图3示出了根据又一实施例的单核向量处理器。图4示出了根据又一实施例的双核向量处理器。图5示出了cpu的一个实施例的构造。图6示出了全局标量寄存器文件。图7示出了全局向量寄存器文件。图8示出了由乘法和相关函数单元共享的局部向量寄存器文件。图9示出了加载/存储单元的本地寄存器文件。图10示出了预测寄存器文件。图11示出了根据优选实施例的中央处理单元的流水线阶段。图12示出了单个提取包的十六个指令。图13示出了指令的指令编码的示例。图14示出了根据示例实施例的用于simd操作的进位控制。图15示出了关键部件。图16示出了虚拟地址到物理地址的转换。图17示出了根据示例实施例的地址展开单元的实施例。图18示出了根据示例实施例的页边界跨越单元的实施例。图19示意性地示出了操作。具体实施方式图1示出了根据一个实施例的单核标量处理器。单核处理器100包括耦合至单独的一级指令高速缓存(l1i)111和一级数据高速缓存(l1d)112的标量中央处理单元(cpu)110。中央处理单元核110可以如本领域已知的那样构成,并且通常将包括寄存器文件、整数运算逻辑单元、整数乘法器和程序流控制单元。单核处理器100包括保存指令和数据的二级组合指令/数据高速缓存(l2)113。在优选实施例中,在单个集成电路上形成标量中央处理单元(cpu)110、一级指令高速缓存(l1i)111、一级数据高速缓存(l1d)112和二级组合指令/数据高速缓存(l2)113。在优选实施例中,该单个集成电路也包括诸如功率控制电路121、仿真/跟踪电路122、测试设计(dst)可编程内置自测(pbist)电路123和时钟电路124的辅助电路。存储器控制器131可在cpu110外部并且可以被集成在单个集成电路100上。cpu110在程序控制下进行操作,以对所定义的数据执行数据处理操作。控制cpu110的程序包括在解码和执行之前必须被提取的指令。单核处理器100包括多个高速缓存存储器。图1示出了一对第一级高速缓存。一级指令高速缓存(l1i)111存储cpu110所使用的指令。cpu110首先尝试访问来自一级指令高速缓存121的任何指令。一级数据高速缓存(l1d)112存储由cpu110所使用的数据。cpu110首先尝试从一级数据高速缓存112访问任何所需的数据。两个一级高速缓存(l1i111和l1d112)由二级统一高速缓存(l2)113支持。在高速缓存遗漏一级指令高速缓存111或一级数据高速缓存112的情况下,从二级统一高速缓存113寻求所请求的指令或数据。如果所请求的指令或数据被存储在二级统一高速缓存113中,则将其提供给请求一级高速缓存以用于提供给中央处理单元核110。如本领域已知的,可将所请求的指令或数据同时提供给请求高速缓存和cpu110两者以加速使用。二级统一高速缓存113另外经由存储器控制器131耦合至较高级存储器系统。存储器控制器131通过访问外部存储器(图1中未示出)来处理遗漏二级统一高速缓存113的高速缓存。存储器控制器131处理诸如缓存容量确定、误差检测和校正、地址转换等所有存储器中心功能。单核处理器100可为多处理器系统的一部分。在此情况下,存储器控制器131处理处理器之间的数据传输并且保持在处理器之间的高速缓存一致性。图2示出了根据另一实施例的双核处理器。双核处理器200包括耦合至单独的一级指令高速缓存(l1i)211和一级数据高速缓存(l1d)212的第一cpu210和耦合至单独的一级指令高速缓存(l1i)221和一级数据高速缓存(l1d)212的第二cpu220。中央处理单元210和220优选地构造成类似于图1所示的cpu110。双核处理器200包括支持所有四个一级高速缓存(l1i211、l1d212、l1i221和l1d222)的单个共享二级组合指令/数据高速缓存(l2)231。在优选实施例中,cpu210、一级指令高速缓存(l1i)211、一级数据高速缓存(l1d)212、cpu220、一级指令高速缓存(l1i)221、一级数据高速缓存(l1d)222和二级组合指令/数据高速缓存(l2)231在单个集成电路上形成。该单个集成电路优选也包括诸如功率控制电路245、仿真/跟踪电路116、测试设计(dst)的可编程内置自测(pbist)电路117和时钟电路118的辅助电路。该单个集成电路也可包括存储器控制器251。图3和图4示出了类似于分别在图1和图2所示的单核处理器和双核处理器。图3和图4与图1和图2的不同之处在于示出向量中央处理单元。如下面进一步描述的,单核向量处理器300包括向量cpu310。双核向量处理器400包括两个向量cpu410和420。向量cpu310、410和420包括比相应的标量cpu110、210和220更宽的数据路径操作单元和更宽的数据寄存器。在包括流引擎313(图3)和流引擎413和423(图5))时,向量cpu310、410和420进一步不同于对应的标量cpu110、210和220。流引擎313、413和423是类似的。流引擎313将数据从二级统一高速缓存313(l2)传送至向量cpu310。流引擎413将数据从二级统一高速缓存431传送至向量cpu410。流引擎423将数据从二级统一高速缓存431传送至向量cpu420。根据优选实施例,每个流引擎313、413和423管理多达两个数据流。在某些受限的情况下,每个流引擎313、413和423传送数据。流由特定类型的元素序列组成。在流上操作的程序顺序地读取数据,进而对每个元素进行操作。每个流具有以下基本属性。流数据具有明确定义的开始时间和结束时间。流数据在整个流中具有固定的元素大小和元素类型。流数据具有固定的元素序列。因此,程序不能在流内随机寻找。流数据在有效时是只读的。程序不能在读取流的同时向其写入。一旦流被流引擎打开:则计算地址;从二级统一高速缓存中提取定义的数据类型;执行数据类型操作,诸如零扩展、符号扩展、数据元素排序/交换,诸如矩阵转置;并将数据直接传送至cpu内的编程执行单元。因此,流引擎可用于对良性的数据进行实时数字过滤操作。流引擎从对应的cpu释放这些内存提取任务,从而实现其他处理功能。流引擎提供以下有益效果。它们允许多维存储器访问。它们增加了功能单元的可用带宽。它们最小化遗漏失速的高速缓存的数量,因为流缓冲器可以绕过l1d高速缓存和l2高速缓存。它们减少了维护循环所需的标量操作的数量。他们管理地址指针。它们处理地址生成,从而自动释放地址生成指令时隙和用于其他计算的.d单元。图5示出了cpu的一个实施例的构造。除非另有说明,此描述涵盖了标量cpu和向量cpu两者。cpu包括乘法单元511(.m)、相关单元512(.c)、算术单元513(.l)、算术单元514(.s)、加载/存储单元515(.d)、分支单元516(.b)和预测单元517(.p)的多个执行单元。这些执行单元的运算和关系详细如下。根据优选实施例,图5的cpu为非常长的指令(vliw)cpu,其在每个指令周期中提取十六个指令的程序提取包。如下所述,在每个指令周期期间,可由多个执行单元并行执行这些指令。乘法单元511主要执行乘法。乘法单元511接受多达两个双向量操作码,并产生多达一个双向量结果。乘法单元511为可配置以执行以下操作的指令:精度范围从8位到64位乘法运算的各种整数乘法运算;各种常规点积运算和复杂的点积运算;以及各种浮点乘法运算;按位逻辑运算、移动以及加法和减法。如图5所示,乘法单元511包括用于四个同时16位×16位的硬件。乘法单元511可以以下述的方式访问全局标量寄存器文件521、全局向量寄存器文件522和共享.m和c.本地寄存器523文件。转发复用器530调解全局标量寄存器文件521、全局向量寄存器文件522、对应的流引擎和乘法单元511之间的数据传输。相关单元512(.c)接受多达两个双向量操作码并产生多达一个双向量结果。相关单元512支持这些主要操作。为了支持wcdma“耙扫(rake)”和“搜索”指令,相关单元512每时钟周期执行多达512个2位pn*8位i/q复数乘法。相关单元512每时钟周期执行高达512个sad的8位和16位绝对差值和(sad)计算。相关单元512执行水平加和最小/最大指令。相关单元512执行向量置换指令。相关单元512包含8个256位宽的控制寄存器。这些控制寄存器用于控制某些相关单元指令的操作。相关单元512可以以下述的方式访问全局标量寄存器文件521、全局向量寄存器文件522和共享.m和c.本地寄存器文件523。转发复用器530调解全局标量寄存器文件521、全局向量寄存器文件522、对应的流引擎和相关单元512之间的数据传输。cpu500包括两个算术单元:算术单元513(.l)和算术单元514(.s)。每个算术单元513和算术单元514接受多达两个向量操作码并产生一个向量结果。计算单元支持这些主要操作。算术单元513和算术单元514执行精度范围从8位到64位的各种单指令多数据(simd)定点算术运算。算术单元513和算术单元514执行将结果直接写入预测寄存器文件526的各种向量比较和最小/最大指令(下面进一步描述)。这些比较包括a=b、a>b、a≥b、a<b和a≤b。如果比较正确,则1位被存储在预测寄存器内的对应位的位置中。如果比较失败,则在预测寄存器内的对应位的位置存储0。向量比较指令假设字节(8位)数据,并因此生成32个单个位的结果。如下所述,算术单元513和算术单元514使用指定的预测寄存器执行各种向量操作。算术单元513和算术单元514执行精度范围从半精度(16位)、单精度(32位)到双精度(64位)的各种simd浮点算术运算。算术单元513和算术单元514执行专门的指令以加速各种算法和功能。算术单元513和算术单元514可访问全局标量寄存器文件521、全局向量寄存器文件522、共享.l和.s本地寄存器文件524和预测寄存器文件526。转发复用器530调解全局标量寄存器文件521、全局向量寄存器文件522、对应的流引擎以及算术单元513和514之间的数据传输。加载/存储单元515(.d)主要用于地址计算。加载/存储单元515被扩展以接受高达64位的标量操作码并产生高达64位的标量结果。加载/存储单元515包括用于执行数据操作(诸如在负载上交换、打包和解包)并存储数据以减少其他单元上的工作负载的附加硬件。加载/存储单元515可以每时钟周期向一级数据高速缓存(l1d)发出一个加载或存储请求以及44位物理地址。加载或存储数据宽度可以为32位、64位、256位或512位。加载/存储单元515支持这些主要运算:64位simd算术运算;64位按位逻辑运算;以及标量和向量加载和存储数据的操作。加载/存储单元515优选包括用于执行从48位虚拟地址到44位物理地址的地址转换的微型tlb(表后备缓冲器)块。加载/存储单元515可以以下述的方式访问全局标量寄存器文件521、全局向量寄存器文件522和.d本地寄存器文件525。转发复用器530调解全局标量寄存器文件521、全局向量寄存器文件522、对应的流引擎和加载/存储单元515之间的数据传输。分支单元516(.b)计算分支地址、执行分支预测并依赖于预测结果改变控制流。预测单元517(.p)为对向量预测寄存器执行基本操作的小型控制单元。预测单元517可直接访问向量预测寄存器526。预测单元517对预测寄存器执行不同的位操作,诸如与、与非、或、异或、或非、bitr、否、集合、bitcnt(位计数)、rmbd(最右位检测)、位抽取(bitdecimate)和展开等。图6示出了全局标量寄存器文件521。存在16个独立的64位宽标量寄存器。全局标量寄存器文件521的每个寄存器可以被读取为32位标量数据(指定的寄存器a0至a15601)或64位标量数据(指定的寄存器ea0至ea15611)。但是,如果需要,写入总是64位,零扩展以填充到64位。所有功能单元的所有标量指令都可以读取或写入至全局标量寄存器文件521。指令类型确定数据大小。全局标量寄存器文件521支持大小范围从8位到64位的数据类型。向量指令也可以写入到64位全局标量寄存器521,并丢弃该向量的高192位数据。向量指令也可以从全局标量寄存器文件511读取64位数据。在此情况下,操作码在高192位上被进行零扩展以形成输入向量。图7示出了全局向量寄存器文件522。存在16个独立的256位宽向量寄存器。全局向量寄存器文件522的每个寄存器可以被读取为32位标量数据(指定的寄存器x0至x15701)、64位标量数据(指定的寄存器ex0至ex15711)、256位向量数据(指定的寄存器vx0到vx15721)或512位双向量数据(指定为dvx0至dvx12,其未示出)。在当前实施例中,只有乘法单元511和相关单元512可执行双向量指令。所有功能单元的所有向量指令均可以读取全局向量寄存器文件522或写入到全局向量寄存器文件522。任何功能单元的任何标量指令也可以访问全局向量寄存器文件522寄存器的低32位或64位以进行读或写。指令类型确定数据大小。图8示出了本地向量寄存器文件523。存在16个独立的256位宽向量寄存器。本地向量寄存器文件523的每个寄存器可以被读取为32位标量数据(指定的寄存器m0至m15701)、64位标量数据(指定的寄存器em0至em15711)、256位向量数据(指定的寄存器vm0到vm15721)或512位双向量数据(指定的dvm0至dvm7,其未示出)。在当前实施例中,只有乘法单元511和相关单元512可执行双向量指令。所有功能单元的所有向量指令均可以写入到本地向量寄存器文件523。只有乘法单元511和相关单元512的指令可从本地向量寄存器文件523中读取。指令类型确定数据大小。乘法单元511可对双向量(512位数据)执行运算。乘法单元511可从全局向量寄存器文件521和本地向量寄存器文件523读取双向量数据并向全局向量寄存器文件521和本地向量寄存器文件523写入双向量数据。寄存器名称(designation)dvxx和dvmx如下所述被映射到全局向量寄存器文件521和本地向量寄存器文件523。表1指令名称所访问的寄存器dvx0vx1:vx0dvx1vx3:vx2dvx2vx5:vx4dvx3vx7:vx6dvx4vx9:vx8dvx5vx11:vx10dvx6vx13:vx12dvx7vx15:vx14dvm0vm1:vm0dvm1vm3:vm2dvm2vm5:vm4dvm3vm7:vm6dvm4vm9:vm8dvm5vm11:vm10dvm6vm13:vm12dvm7vm15:vm14每个双向量名称映射到全局向量寄存器522或本地向量寄存器523中的对应的一对相邻向量寄存器。名称dvxo至dvx7映射至全局向量寄存器522。名称dvmo至dvm7映射至本地向量寄存器523。本地向量寄存器文件524类似于本地向量寄存器文件523。存在16个独立的256位宽向量寄存器。本地向量寄存器文件524的每个寄存器可以被读取为32位标量数据(指定的寄存器l0至l15701)、64位标量数据(指定的寄存器el0至el15711)或256位向量数据(指定的寄存器vl0至vl15721)。所有功能单元的所有向量指令均可以写入到本地向量寄存器文件524。只有算术单元513和算术单元514的指令可从本地向量寄存器文件524中读取。图9示出了本地寄存器文件525。存在16个独立的64位宽寄存器。本地寄存器文件525的每个寄存器可以被读取为32位标量数据(指定的寄存器d0至d15701)或64位标量数据(指定为寄存器ed0至ed15711)。所有功能单元的所有标量指令和向量指令均可以写入本地寄存器文件525。只有加载/存储单元515的指令可从本地寄存器文件525中读取。任何向量指令也可以将64位数据写入本地寄存器文件525,并丢弃所得向量的高192位数据。任何向量指令也可以从64位本地寄存器文件525的寄存器读取64位数据。返回数据在高192位中被零扩展以形成输入向量。图10示出了预测寄存器文件517。预测寄存器文件517中存在16个32位寄存器。预测寄存器文件517包含来自由择一算术执行的向量比较运算的结果,并由向量选择指令和向量预测存储指令来使用。特殊指令的小子集也可以直接从预测寄存器读取、执行运算并直接写回到预测寄存器。还存在可以在全局寄存器文件(521和522)和预测寄存器文件517之间传送值的指令。预测寄存器文件517与本地寄存器文件(523、524和525)之间的传送不受支持。预测寄存器(指定为p0至p15)的每一位控制向量数据的字节。由于向量为256位,预测寄存器的宽度等于256/8=32位。预测寄存器文件可以通过向量比较运算来写入,以用于存储向量比较的结果。诸如cpu110、210、220、310、410或420的cpu对指令流水线执行操作。该指令流水线可以每周期调度多达九个并行的32位时隙,以向七个执行单元(乘法单元511、相关单元512、算术单元513、算术单元514、加载/存储单元515、分支单元516和预测单元517)提供指令。指令为下面进一步描述的以固定长度打包的提取指令。所有指令均需要相同数量的流水线阶段以用于提取和解码,但需要不同数量的执行阶段。图11示出了以下流水线时期:程序提取时期1110、调度和解码时期1110和执行时期1130。程序提取时期1110包括所有指令的三个阶段。调度和解码时期包括所有指令的三个阶段。执行时期1130取决于指令包括一个阶段到四个阶段。提取时期1110包括程序地址生成阶段1111(pg)、程序访问阶段1112(pa)和程序接收阶段1113(pr)。在程序地址生成阶段1111(pg)期间,在cpu中生成程序地址,并将读取请求发送至用于一级指令高速缓存l1i的存储器控制器。在程序访问阶段1112(pa)期间,一级指令高速缓存l1i处理请求、访问其存储器中的数据,并将提取包发送至cpu边界。在程序接收阶段1113(pr)期间,cpu登记提取包。指令总是一次提取十六个字。图12示出了该提取包。图12示出了单个提取包的1201至1216的16个指令。提取包在512位(16字)边界上对齐。单个指令的执行部分地由每个指令中的p位控制。该p位优选地为指令的0位。p位确定指令是否与另一指令并行执行。从较低地址到较高地址来扫描p位。如果指令的p位为1,则与该指令i并行地(与该指令相同的周期)执行下一后续指令。如果该指令的p位为0,则下一后续指令在该指令之后的周期中被执行。并行执行的所有指令构成执行包。执行包可以包含多达九个指令。执行包中的每个指令必须使用不同的功能单元。执行包可以包含多达九个32位宽的时隙。时隙可为自包含指令,或者可以扩展由紧接着的在前指令指定的常量字段。可以将时隙用作条件码以应用于同一提取包内的指令。提取包可包含多达2个恒定扩展时隙和一个条件码扩展时隙。存在多达11个不同的指令时隙,但安排约束限制在最大并行时隙数为9个。最多九个时隙被如下共享:乘法单元511;相关单元512;算术单元513;算术单元514;加载/存储单元515;与预测单元517共享的分支单元516;第一恒定扩展;第二恒定扩展;以及与条件码扩展共享的单元减少指令(unitlessinstruction)。执行包中的最后指令的p位等于0。cpu和一级指令高速缓存l1i流水线彼此解耦。取决于诸如在一级指令高速缓存l1i中是否存在命中的外部情况,从一级指令高速缓存l1i返回的提取包可以采用不同数量的时钟周期。因此,与其他阶段一样,程序访问阶段1112(pa)可以占用几个时钟周期而不是1个时钟周期。调度和解码时期1110包括指令调度到适当的执行单元阶段1121(ds)、指令预解码阶段1122(d1);以及指令解码、操作码读取阶段1222(d2)。在指令调度到适当的执行单元阶段1121(ds)期间,提取包被划分为执行包并被分配给适当的功能单元。在指令预解码阶段1122(d1)期间,源寄存器、目的寄存器和相关联的路径被解码以用于执行功能单元中的指令。在指令解码期间,完成操作码读取阶段1222(d2)的更详细的单元解码,以及从寄存器文件中读取操作码。执行期间1130包括执行阶段1131至1135(el至e5)。不同类型的指令需要不同数量的这些阶段才能完成其执行。流水线的这些阶段在理解cpu周期边界的装置状态方面起重要的作用。在执行1阶段1131(el)期间,指令的条件被评估并且对操作码进行操作。如图11所示,执行1阶段1131可从流缓冲器1141接收操作码,并且其中一个寄存器文件示意性地被示为1142。为了加载和存储指令,执行地址生成并且将地址修改写入寄存器文件。对于分支指令,pg期间中的分支提取包受到影响。如图11所示,这里将加载和存储指令访问存储器示意性地示为存储器1151。对于单周期指令,结果被写入目的寄存器文件。这样假设指令的任何条件均被评估为真。如果条件被评估为假,则在执行1阶段1131后,指令不会写入任何结果或进行任何流水线操作。在执行2阶段1132(e2)期间,加载指令将地址发送至存储器。存储指令将地址和数据发送至存储器。如果发生饱和,则使结果饱和的单周期指令在控制状态寄存器(csr)中设置sat位。对于2周期指令,结果被写入目的寄存器文件。在执行3阶段1133(e3)期间,执行数据存储器访问。如果发生饱和,则使结果饱和的任何乘法指令在控制状态寄存器(csr)中设置sat位。对于3周期指令,结果被写入目的寄存器文件。在执行4阶段1134(e4)期间,加载指令将数据带到cpu边界。对于4周期指令,结果被写入目的寄存器文件。在执行5阶段1135(e5)期间,加载指令将数据写入寄存器。这在图11中示意性地示出,其中从存储器1151输入以执行5阶段1135。图13示出了指令的指令编码的示例。每个指令由32位组成并且控制可单独控制的功能单元(乘法单元511、相关单元512、算术单元513、算术单元514、加载/存储单元515)中的一个的操作。位字段定义如下。creg字段和z位为在条件指令中使用的可选字段。这些位被条件指令用来识别预测寄存器和条件。z位(位28)指示预测寄存器中的预测是基于零还是基于非零。如果z=1,则测试等于零。如果z=0,则测试为非零。creg=0和z=0的情况被视为始终为真,以允许非条件的指令执行。creg字段和z字段在指令中被编码为如表2所示。表2需注意,z位列中的“z”是指上述的零/非零比较选择,以及“x”为无关状态。该编码只能将16个全局标量寄存器的子集指定为预测寄存器。进行该选择以保留指令编码中的位。需要注意,无条件指令不具有这些可选位。对于无条件指令,这些位(28至31)优选地用作附加操作码位。然而,如果需要,执行包可以包含唯一的32位条件代码扩展时隙,其包含用于在相同执行包中的指令的4位creg/z字段。表3示出了此类条件代码扩展时隙的编码。表3位功能单元3:0.l7:4.s11:5.d15:12.m19:16.c23:20.b28:24保留31:29保留因此,条件代码扩展时隙指定以相同的方式解码的位,creg/z位被分配给相同执行包中的特定功能单元。特殊向量预测指令使用所指定的预测寄存器来控制向量操作。在当前实施例中,所有这些向量预测指令对字节(8位)数据进行操作。预测寄存器的每个位控制是否对数据的对应字节执行simd操作。预测单元517的操作允许基于不止一个向量比较的各种复合向量simd操作。例如,可以使用两个比较来进行范围确定。将候选向量与具有被打包在第一数据寄存器中的范围的最小值的第一向量参考进行比较。候选向量与具有被打包在第二数据寄存器中的范围的最大值的第二参考向量进行第二比较。两个所得的预测寄存器的逻辑组合将允许向量条件操作来确定候选向量的每个数据部分是在范围内还是超出范围。dst字段将对应寄存器文件中的寄存器指定为指令结果的目的地。src2字段将对应寄存器文件中的寄存器指定为第二源操作码。srcl/cst字段根据指令操作码字段具有若干含义(位2至12以及另外的位28至31用于无条件指令)。第一含义将对应寄存器文件的寄存器指定为第一操作码。第二含义为即时数。根据指令类型,这被视为无符号整数,并且零被扩展到指定的数据长度或被视为有符号整数,并且符号被扩展到指定的数据长度。操作码字段(所有指令的位2至位12,以及无条件指令的额外位28至位31)指定指令的类型并指派适当的指令选项。这包括功能单元和所执行的操作的指定。p位(位0)标记执行包。p位确定指令是否与以下指令并行执行。从较低地址到较高地址扫描p位。如果当前指令的p=1,则下一指令与当前指令并行执行。如果当前指令的p=0,则下一指令在当前指令之后的周期中执行。并行执行的所有指令构成执行包。执行包可以包含多达八个指令。执行包中的每个指令必须使用不同的功能单元。相关单元512以及算术单元513和算术单元514通常运行在单指令多数据(simd)模式下。在该simd模式中,相同的指令被应用于来自两个操作码的打包数据。每个操作码保存设置在预定时隙中的多个数据元素。通过数据边界的进位控制启用simd操作。此类进位控制使得能够在变化的数据宽度上进行操作。图14示出了进位控制。与门1401在宽操作码算术逻辑单元中接收位n的进位输出(用于算术单元513和514的256位,用于相关单元512的512位)。与门1401也接收将在下面进一步解释的进位控制信号。与门1401的输出被提供给宽操作码算术逻辑单元的位n+1的进位输入。诸如与门1401的与门被设置在可能的数据边界的每对位之间。例如,对于8位数据,此类与门将在位7和位8之间、位15和位16之间、位23和位24之间等。每个此类与门接收对应的进位控制信号。如果数据大小最小,则每个进位控制信号为0,从而有效阻止相邻位之间的进位传输。如果所选的数据大小需要两个算术逻辑单元部分,则对应的进位控制信号为1。下面的表4示出了诸如在算术单元513和514中使用的256位宽操作码的情况下的示例进位控制信号,256位宽操作码可被划分为8位、16位、32位、64位或128位的部分。不需要对最高有效位的进位输出进行控制,因此只需要31个进位控制信号。表4数据大小进位控制信号8位-000000000000000000000000000000016位-101010101010101010101010101010132位-111011101110111011101110111011164位-1111111011111110111111101111111128位-1111111111111110111111111111111256位-1111111111111111111111111111111本领域通常对于数据大小进行2的整数幂的操作(2n)。然而,该进位控制技术不限于2的整数幂。本领域的技术人员应理解如何将本技术应用到其他数据大小和其他操作码宽度。示例实施例隐藏许多指令提取的页遗漏转换时延。在示例实施例中,每当cpu请求访问时,l1i控制器进行虚拟地址加上提取包计数是否跨越页边界的先验查找。如果访问跨越页边界,则l1i高速缓存控制器将与第一页条目一起请求第二页转换条目,从而向μtlb流水线化请求,而无需等待l1i高速缓存控制器开始处理第二页请求。这变成第二页转换请求的确定性预取。第二页的地址转换信息被本地存储在l1i高速缓存控制器中,并且当访问跨越页边界时被使用。在优选实施例中,μtlb至mmu的请求被流水线化。无论μtlb请求是否被流水线化,此方案隐藏了一些页遗漏转换时延。这显著提高了程序存储器高速缓存的性能。图15示出了关键部件。为了简化说明,图15采用了图1的标量单核示例的附图标记。可以用图1至图4所示的任何示例来实施示例实施例。具体地,可以利用图2和图4中所示的具有在双处理器之间共享的二级统一高速缓存双处理器示例来实施示例实施例。中央处理单元(cpu)110被耦合至一级指令高速缓存(l1i)111。一级指令高速缓存111进一步连接到对应于图1所示的存储器控制器131的存储器管理单元(mmu)131并且连接到l2高速缓存113。图15示出了被包含作为l1i高速缓存111的一部分的微表后备缓冲器(μtlb)1501。图15示出了在cpu110和l1i高速缓存111之间传递的以下信号:虚拟地址1511;提取包计数1512;和提取包1513。图15示出了在l1i高速缓存111和mmu131之间的双向数据流,其包括:页转换条目请求1521;以及页转换条目1522。图15示出了在l1i高速缓存111和l2高速缓存113之间传递的以下信号;物理地址1531;以及数据1532。虚拟到物理地址的转换操作如图16所示。在该示例中,cpu110使用虚拟地址进行操作。l1i高速缓存111也采用虚拟地址。l2高速缓存113采用物理地址。从cpu110到l2高速缓存113的访问必须经历从虚拟地址到物理地址的地址转换。为了清楚起见,省略了l1i高速缓存111的一些部分。当需要另一指令的提取包时,cpu110提供所需提取包的虚拟地址1511。复用器1611向l1i标记ram1612提供虚拟地址1511。l1i标记ram1612将虚拟地址1511与指示哪些地址被高速缓存的标记进行比较。命中(hit)/遗漏单元1613确定虚拟地址是访问高速缓存数据(命中)还是不访问高速缓存数据(遗漏)。本质上,l1i高速缓存111不能包含cpu110可能使用的所有程序指令。l1i高速缓存存储这些程序指令的有限子集。根据时间和空间局部原理,对存储程序指令的存储器位置的cpu访问可同样访问相同的和附近的存储器位置。如果命中/遗漏单元1613确定所请求的提取包被存储在l1i高速缓存113中,则该提取包经由提取包1513从l1i高速缓存111数据存储器(未示出)提供给cpu110(图15)。如果命中/遗漏单元1613确定所请求的提取包未被存储在l1i高速缓存111中,则从l2高速缓存113请求该提取包。因为l1i高速缓存111被虚拟地标记,并且l2高速缓存113被物理地标记,所以这需要地址转换。同时虚拟地址1511被提供给l1i标记ram1612,虚拟地址也经由复用器1621提供给μtlb1501。通常使用虚拟地址的最高有效位和物理地址的对应最高有效位的表来执行地址转换。在该示例中,在检测到正确的地址对时,地址转换用最高有效物理地址位替换最高有效虚拟地址位。通常虚拟地址的最低有效位与物理地址的最低有效位相同。在该示例中,虚拟地址/物理地址转换表被存储在mmu131中。此外,l1i高速缓存111包括μtlb1501,其以高速缓存的方式存储一些地址转换表条目。当进行地址转换服务时,将所请求的虚拟地址1511与存储在μtlb1501中的地址转换表条目进行比较。如果虚拟地址1511与μtlb1501中的表条目匹配,则匹配的表条目用于当前页转换1623中的地址转换。在此μtlb命中时,当前页转换1623在单个周期中执行地址转换。如果虚拟地址1511与μtlb1501中的任何表条目不匹配,则必须从mmu131中提取这些地址转换参数。μtlb1501将用于虚拟地址1511的页转换条目请求1521发送给mmu131。根据mmu中的页转换和页表移动时延,可能需要数十个周期或数百个周期来进行此提取。mmu131找到对应的地址转换条目,并将该条目1522返回给μtlb1501。μtlb1501存储该新提取的转换条目,通常去除当前存储在μtlb1501中的条目以腾出空间。当前页转换1623使用新存储的转换条目执行地址转换。在地址转换之后,物理地址经由至l2单元1631的请求物理地址传送至l2高速缓存113。需注意,该请求取决于指示l1i高速缓存111中的高速缓存遗漏的命中/遗漏单元1613。当命中/遗漏单元1613指示命中时,不需要向l2高速缓存113提供物理地址,因为该命中指示可以从l1i高速缓存111对存储器访问进行服务。图16示出了进一步改进以减少在μtlb1501中遗漏时发生的延迟。该技术利用信息来预测在发生之前可能的微转换后备表。对于每个指令提取,cpu110生成待访问的提取地址和提取包的预测数量。待访问的该提取包的预测数量基于分支单元516中的分支预测器逻辑。分支预测处理流水线式处理器中的处理条件分支指令的问题。流水线为处理指令操作的方式。编程操作需要提取下一指令、解码该指令、访问操作码、执行操作并存储结果。流水线处理器具有专用于执行指令的不同方面的不同硬件。这种任务划分允许类装配线的操作。因此,在完成的各个阶段中,通常会在流水线中同时存在多个指令。正在进行中的指令的扩展可能导致执行条件分支指令的延迟。通常通过存储器位置线性进行指令执行。条件分支指令基于一些当前机器状态偏离此线性进程。这种机器状态诸如存储在寄存器中的数据或状态位的状态通常在条件分支指令之前是未知的或可知的。在许多情况下,这种机器状态为刚刚计算的数字。如果采用条件分支,则程序流程发生变化。这意味着正在进行中的多个指令是错误的指令。简单的补救措施是中止正在进行的这些不正确的指令,并在分支目的地正确地重新启动流水线的开始。这种指令流的中断被称为流水线命中。分支预测用于最小化这些流水线命中的数量。分支单元516预测是采取条件分支还是不采取条件分支。指令提取序列遵循预测路径。如果条件分支指令被正确地预测,则不存在程序流中断或流水线命中。对不正确预测的流水线命中与在没有预测的情况下采用分支上的流水线命中相同。分支预测可以为静态或动态的。静态预测的示例为,如果分支目的地在条件分支指令之前是短距离,则预测总是采用一分支,并预测所有其他分支未被采用。这是基于这样的理论:短的后向分支是从尾部到头部将被重复执行的循环。动态分支预测考虑了该条件分支指令的历史。如果分支在该条件分支被执行的最后一千次被执行,则预测该分支将采取这个实例似乎是合理的。如果该条件分支指令的最后四个实例是采用、未采用、采用、未采用,则任一预测(采用/未采用)与另一预测一样好。动态分支预测可比静态分支预测更好地处理嵌套循环。分支预测通常存储在其执行时在程序代码中遇到的每个条件分支指令的存储器地址。这使得分支单元516能够识别其已经遇到的条件分支。与条件指令地址相关联的是采用/未采用的分支预测和在动态分支预测中使用的任何分支历史。由于分支单元516内的存储器和电路的量的限制,该分支预测信息将总是被限制在程序代码的相当小的部分。然而,基于当前指令存储器位置和通过分支预测得到的程序代码的预测路径,分支单元516可以确定在当前提取包访问之后预测采用分支之前所使用的线性跟随指令或指令提取包的可能数量。该数字为提取包计数1512。图15示出了该提取包的预测数量1512的两种用途。地址展开单元1614以线性顺序确定每个提取包的地址。图17示出了地址展开单元1614的实施例。在将虚拟地址1511提供给地址展开单元1614时,复用器1701将该初始虚拟地址提供给地址寄存器1702。地址寄存器1702直到下一存储周期存储该地址。在下一存储器访问周期时,加法器1703将地址寄存器1702的内容和提取包大小的输入相加。该提取包大小输入为提取包的地址位中的大小。在优选实施例中,该提取包大小固定为16个指令。在优选实施例中,指令为4字节的32位。在优选实施例中,存储器为字节可寻址的,每个地址位置对应于8位/1字节。因此,地址位中的提取包大小为16x4=48。地址寄存器1702和提取包大小的总和为下一提取包的地址。复用器1611将此地址提供给l1i标记ram1612。l1i标记ram1612将来自地址展开单元1614的下一提取包地址与确定下一地址是否被缓存的标记进行比较。命中/遗漏单元1613指示地址被高速缓存(命中)或未被高速缓存(遗漏)。如果下一提取包地址在l1i高速缓存111中(命中),则不需要任何动作。如果下一提取包地址不在l1i高速缓存111中(高速缓存遗漏),则l1i高速缓存111生成指令预取命令。下一提取包地址经由复用器1621耦合至μtlb1501。至少最初,下一提取包地址将与初始虚拟地址1511位于同一页上,从而生成μtlb1501命中。当前页转换1623执行地址转换,并经由至l2单元1631的请求物理地址将对应的物理地址提供给l2高速缓存111。根据示例实施例,如果下一提取包地址命中在初始页之后的页,则下一页转换单元1624在如果下一地址转换条目已被预取时进行地址转换。在任一情况下,这将l1l高速缓存遗漏传递到l2高速缓存113以用于服务。在初始加载具有初始虚拟地址1511的地址寄存器1702之后,复用器1701切换输入以加载刚刚递增的地址。在下一存储器周期期间,加法器1703生成另一下一提取包地址。该新的下一提取包地址按上述描述来处理。计数寄存器1704最初装载有提取包计数1512。每个存储器访问周期递减计数寄存器1704。当零检测单元1705确定计数寄存器1704已递减到零时,到乘法器1801的启用的输入能切换回到虚拟地址1511。因此,地址展开单元1614生成在初始地址之后的每个提取包的地址,直到通过存储器地址的线性前进的预测结束。这使得能够通过构造预取所有这些提取包,提取包被存储在l1i111中或者从l2高速缓存113请求该提取包。提取包的预测数量1512的第二用途涉及检测地址转换中的页边界的跨越。页边界跨越单元1622确定在当前提取地址处开始的预取数量的提取包是否将跨越页转换表中的页边界。如本领域已知的,地址转换发生在具有与虚拟地址和物理地址相同的最低有效位数相对应的大小的存储器页上。当前提取地址指向地址转换表的一页。最后预测的提取包的结束地址可指向同一页或后续页。图18示出页边界跨越单元1622。乘法器1801将如上所述确定的提取包大小乘以提取包计数1512。加法器1802将该乘积添加到来自cpu111的虚拟地址1511。这样计算通过存储器的线性处理中最后提取包的地址。页检测单元1803接收该最后提取包地址和当前页大小的指示。在本领域中已知的是,地址转换可基于固定大小或可变大小的页。页检测单元1803确定最后的提取包地址在虚拟地址1511的相同页还是在虚拟地址1511的下一页上。如果页边界跨越单元1622指示页边界跨越复用器1621,则其向μtlb1501提供访问在初始虚拟地址的页之后的页的信号。在命中该地址时,如果命中/遗漏单元1613指示高速缓存遗漏,则μtlb1501经由至l2单元1631的请求物理地址将物理地址从下一页转换1624提交给l2高速缓存113。不需要访问l2高速缓存131,命中/遗漏单元1613指示l1i高速缓存111的命中。如果来自页边界跨越单元1622的下一页与μtlb1501中的任何表条目不匹配,则必须从mmu131提取下一页转换参数。在此情况下,下一页地址经由页转换条目请求1521被传递给mmu131。mmu131找到对应的地址转换条目,并经由页转换条目1522将该条目返回给μtlb1501。μtlb1501存储这个新提取的地址转换条目,通常去除当前存储在μtlb1501中的条目以腾出空间。这将在μtlb1501中存储下一页的地址转换条目。当指令提取到达该下一页时,μtlb1501中有一个命中。下一页转换1624执行地址转换。在地址转换之后,物理地址经由至l2单元1631的请求物理地址传送至l2高速缓存113。需注意,该请求取决于指示l1i高速缓存111中的高速缓存遗漏的命中/遗漏单元1613。如上所述,在优选实施例中,μtlb1501至mmu131请求被流水线化。此外,优选地,从mmu131返回到μtlb1501的页转换条目1522不需要与从μtlb1501发送到mmu131的页转换条目请求1521处于相同的顺序。在优选实施例中,mmu131和μtlb1501之间的接口可以同时处理多个请求(流水线式)。mmu131的组织可能会产生不同页表条目的不同延迟。mmu131优选地跟踪对应于返回的页转换条目1522的页转换条目请求1521。这允许μtlb1501将所返回的页转换条目1522与对应的页转换条目请求1521进行匹配。这使得μtlb1501能处理无序返回的页转换条目1522。图19示意性地示出了操作。cpu110生成指令提取地址1511和提取包数1512。在该示例中,提取地址1511指向存储器映射1901中的页a1911。如图19所示,指令提取地址1511和提取包数1512使得预测存储器访问跨越页a1911和页b1912之间的页边界。根据该确定,μtlb1501请求用于页a1911和页b1912两者的页转换条目。这意味着如果通过程序代码的路径跨越页边界,则用于该新页(页b1912)的页转换表条目已被存储在μtlb1501中。提取新页的页转换表条目的时延通过早期提取而被隐藏。示例实施例根据从分支预测器逻辑访问的提取包的预测数来确定程序是否将生成页遗漏。在进行此检测时,μtlb1501请求将生成遗漏的预期页访问的页转换表条目。因此,在cpu110实际访问下一页中的提取包之前,请求该页转换表条目。页转换表条目提取可能需要很长时间才能进行服务。此外,完成该页转换表条目提取的时间以cpu110不可见的方式可能是高度可变的。因此,在预测到μtlb1501的遗漏的情况下,早期请求是有利的。因此,在示例实施例中,隐藏了预测页边界跨越点的检测与对应于cpu110指令请求的实际页边界跨越之间的部分μtlb1501遗漏时延。示例实施例也可在生成预期页遗漏的地址上预取指令。因此,生成页遗漏的提取包在实际页遗漏之前可以是可利用的。如果访问预测不正确并且程序不访问第二页,则示例实施例进行不需要的页转换表条目提取。预期这不会降低系统性能。对第二页访问的错误预测通常会发生在错误预测的程序分支上。在此情况下,程序通常分支到与原始访问页和下一页不同的页。这种分支很可能引起页遗漏。第二页转换表条目的不必要的提取将与错误预测的分支页遗漏无关。因此,在错误的分支预测的情况下,示例实施例通常不会降低性能。请注意,由于替换方法的差异,μtlb1501可能不存储存储在l1i111中的所有程序指令的页转换表条目。因此,特定指令访问可能生成l1i命中/遗漏和μtlb1501的下一页命中/遗漏的四种组合中的任一种。表5列出了在优选实施例中采取的动作。表5μtlb下一页l1i动作遗漏遗漏预取页表条目和指令遗漏命中预取页表条目命中遗漏预取指令命中命中无动作在示例实施例中,指令预取是可选的。维护l1i高速缓存111中的遗漏预期通常比维护在μtlb1501中的页条目遗漏需要更少的时间并且具有更少的可变性。因此,对于页转换表条目预取,需要更少的指令预取。示例实施例确定是否将最终从μtlb请求第二页转换条目,并且在l1i高速缓存控制器请求属于该第二页的第一地址之前对其进行预取。因此第二页转换条目提取的一些或所有的遗漏延迟被隐藏。这减少了停机周期,从而提高了cpu的ipc(每周期的指令)执行量度。已经将示例实施例描述为适用于根据图5所示的优选实施例的非常长的指令工作(vliw)cpu的提取包。示例实施例同样适用于每周期提取单个指令的cpu。在此情况下,来自cpu的分支预测硬件的提取包的数量为指令的数量,这是因为提取包中的指令数为1。将结合将虚拟地址转换为物理地址的优选实施例来描述示例实施例。示例实施例同样适用于从物理地址到虚拟地址的相反转换。示例实施例使得当预测跨越页边界时能够进行从第一地址域到第二地址域的加强转换。将结合指令提取来描述示例实施例。与没有一般模式的数据提取相反,通常会发生线性地指令提取。可以预期,预测指令提取跨越页边界比预测数据提取更容易。然而,在某些受限的情况下的示例实施例对于数据提取可能是有价值的。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1