CN1625731A - 具有多种长度指令集体系结构的可配置数据处理器 - Google Patents
具有多种长度指令集体系结构的可配置数据处理器 Download PDFInfo
- Publication number
- CN1625731A CN1625731A CNA038031124A CN03803112A CN1625731A CN 1625731 A CN1625731 A CN 1625731A CN A038031124 A CNA038031124 A CN A038031124A CN 03803112 A CN03803112 A CN 03803112A CN 1625731 A CN1625731 A CN 1625731A
- Authority
- CN
- China
- Prior art keywords
- instruction
- stage
- length
- word
- bit
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 claims abstract description 58
- 238000000034 method Methods 0.000 claims abstract description 48
- 230000006835 compression Effects 0.000 claims abstract description 14
- 238000007906 compression Methods 0.000 claims abstract description 14
- 230000008569 process Effects 0.000 claims abstract description 12
- 230000007704 transition Effects 0.000 claims description 128
- 238000012545 processing Methods 0.000 claims description 28
- 238000013461 design Methods 0.000 claims description 25
- 238000003860 storage Methods 0.000 claims description 22
- 238000005056 compaction Methods 0.000 claims description 10
- 230000006399 behavior Effects 0.000 claims description 5
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 4
- 230000003139 buffering effect Effects 0.000 claims description 3
- 238000011143 downstream manufacturing Methods 0.000 claims 3
- 230000001965 increasing effect Effects 0.000 abstract description 17
- 230000002829 reductive effect Effects 0.000 abstract description 8
- 238000010586 diagram Methods 0.000 description 53
- 230000006870 function Effects 0.000 description 35
- 230000004913 activation Effects 0.000 description 20
- 238000006073 displacement reaction Methods 0.000 description 19
- 238000012856 packing Methods 0.000 description 19
- 230000003111 delayed effect Effects 0.000 description 13
- 238000005516 engineering process Methods 0.000 description 11
- 238000012360 testing method Methods 0.000 description 11
- 230000008901 benefit Effects 0.000 description 9
- 230000015572 biosynthetic process Effects 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 8
- 238000007792 addition Methods 0.000 description 7
- 231100000136 action limit Toxicity 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 230000006837 decompression Effects 0.000 description 6
- 230000003247 decreasing effect Effects 0.000 description 6
- 238000013507 mapping Methods 0.000 description 6
- 239000003550 marker Substances 0.000 description 6
- 230000001934 delay Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 5
- 230000000670 limiting effect Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 4
- 230000006872 improvement Effects 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 239000004065 semiconductor Substances 0.000 description 4
- 229910052710 silicon Inorganic materials 0.000 description 4
- 239000010703 silicon Substances 0.000 description 4
- 230000003213 activating effect Effects 0.000 description 3
- 230000033228 biological regulation Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000000052 comparative effect Effects 0.000 description 3
- 230000005059 dormancy Effects 0.000 description 3
- 238000005265 energy consumption Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 239000004615 ingredient Substances 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000000873 masking effect Effects 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000012797 qualification Methods 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- 238000010189 synthetic method Methods 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 241001093951 Ailanthus altissima Species 0.000 description 1
- 101100129500 Caenorhabditis elegans max-2 gene Proteins 0.000 description 1
- 206010011469 Crying Diseases 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 101000994167 Homo sapiens Iron-sulfur cluster assembly 1 homolog, mitochondrial Proteins 0.000 description 1
- 102100031404 Iron-sulfur cluster assembly 1 homolog, mitochondrial Human genes 0.000 description 1
- 239000002253 acid Substances 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 206010064930 age-related macular degeneration Diseases 0.000 description 1
- 238000004378 air conditioning Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000005314 correlation function Methods 0.000 description 1
- 238000013502 data validation Methods 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000004134 energy conservation Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 230000002147 killing effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 238000005086 pumping Methods 0.000 description 1
- 238000010926 purge Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 230000007958 sleep Effects 0.000 description 1
- 230000003068 static 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- 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
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30061—Multi-way branch instructions, e.g. CASE
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30156—Special purpose encoding of instructions, e.g. Gray coding
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- 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
- G06F9/30178—Runtime instruction translation, e.g. macros of compressed or encrypted instructions
-
- 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
-
- 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
-
- 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/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- 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 Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明是关于一种具有指令字长度相异的指令集体系结构(ISA)的数字处理器装置。在示范性的实施例中,该处理器包括扩展的用户可配置的RISC处理器,具有四个阶段的流水线(取、译码、执行和写回)以及被适合于译码和处理一单一程序内的32位和16位指令字的相关逻辑部分,从而增加指令集的灵活性,并且允许更好的代码压缩和精减的内存开销。提供了不需要模式转换的自由形式的使用不同长度的指令。本发明还公开了一种改进的指令调整器和代码压缩体系结构。
Description
优先权与相关申请
本申请主张如下优先权:2002年1月31日提交的名称为“具有多种长度指令集体系结构的可配置数据处理器”的60/353,647号美国临时申请、2003年1月31日提交的同名10/356,129号美国申请,以及申请号为PCT/US03/02834(2003年8月7日赋予国际公布号WO 03/065165 A2)的PCT国际申请,其内容在此全文引用以资参考。
发明背景
1.发明领字段
本发明涉及数据处理器领字段,特别是涉及一种经过改进的数据处理器指令集体系结构(instruction set architecture-ISA)及其相关的装置和方法。
2.背景技术
已知现有技术中有多种技术手段利用数据处理器实现特定的功能(如FFT、卷积编码、以及其他计算密集形的应用程序)。这些技术手段通常分为三大类:(i)“固定”硬件;(ii)软件;和(iii)用户可配置。
现有技术中所谓的“固定”体系结构处理器的特征是加入特殊指令和/或硬件以加速某些特定的功能。由于具有这种体系结构的处理器事先已经基本定型,并且对于处理器的设计者来说,无法得知其终端应用软件的具体内容,为了加速运算而加入的特殊指令在性能上没有得到优化。而且,目前现有技术的处理器中的硬件实现是无弹性的,并且,当没有被积极地用于编码时,逻辑线路通常不被其他用于“通用”计算的设备所使用,从而使处理器在晶圆面积、门数和耗能方面大大超过其需要。还有,对于这种“固定”的手段,不能对指令集体系结构增加后续的扩展。
可选地,基于软件的实现方案具有在灵活性方面的优势,特别是只要通过改***件程序就可以更改函数运算。由于程序编写者拥有有高级编译器和调试工具,软件的译码也具有优势。但是,这种工具方便的灵活性和可用性是以降低效率(例如:循环计数)为代价获得的,因为与相对应的硬件解决方案相比,软件解决方案通常要使用更多的循环来完成
所谓的“用户可配置”的可扩展的数据处理器,如本发明的受让人生产的ARCtangentTM,允许用户对处理器配置进行定制,从而将最终设计的某一项或多项属性优化。在使用用户可配置的可扩展的数据处理器时,在设计/合成阶段就已知终端应用软件了,用户对处理器进行配置,就能够得到预想的功能和属性。用户还可适当地对处理器进行配置,使之仅包含执行功能所必需的硬件资源,从而得到一种比固定体系结构的处理器更高的硅效率(节能)的体系结构。
ARCtangent处理器是一种用于ASIC、***芯片(system-on-chip,SoC)和FPGA集成的用户可定制的32位RISC内核。由于它是可合成、可配置和可扩展的,开发者可以对该体系结构进行改进和扩展,使其更好地应用于特定的应用软件。它包括一个带有4阶段执行流水线(four-stage executionpipeline)的32位RISC体系结构。指令集、寄存器文件、条件码、缓存、总线和其他体系结构特征都是用户可配置和可扩展的。它具有一个32x32位核心寄存器文件,如果需要可以加倍。此外,还可以使用大量的辅助寄存器(可达到2E32)。该处理器核心的功能元件包括算术及逻辑部件(ALU)、寄存器文件(如32x32)、程序计数器(PC)、取指令(i-fetch)接口逻辑,以及各种状态锁存器(stage latch)。
即使在诸如A4的可配置处理器中,现有技术的指令集(例如那些采用单字长指令的指令集)的特点是用于支持该指令集的编码尺寸相对较大,因而需要大量的存储开销,因而受到限制。这种开销必然导致使用超过原本需要量的额外的存储能力,以及更大的晶圆面积和能耗。相反地,对于一个给定的固定晶圆面积或存储能力,利用剩余存储执行其他功能的能力受到了限制。这一问题对于可配置处理器尤为突出,因为这些限制本身就表明设计者能够向指令集增加的扩展指令(扩展)的数量和/或类型受到了限制。这一问题使用户可配置原本的用途落空,即,用户能够根据其特殊的应用软件和自由地增加各种不同的扩展指令并符合其设计制约。
还有,随着32位的体系结构越来越广泛地应用于深度嵌入式***,程序代码密度对于***成本有着直接的影响。比较典型的是,在一个***芯片设备的硅晶面积中,存储器就占了很大比例。
作为前述的一个例子,表1列举了一个现有的典型的RISC处理器指令集。尽管还存在额外的单独操作数指令的空间,该指令集仅有两个剩余的扩充槽。基本上来说,在未来应用(例如:DSP硬件)或希望增加许多自己的扩展的用户等方面的发展余地不大。
表1
操作码 | 指令类型 | 内容描述 |
0x00 | LD | 从存储器延迟装入 |
0x01 | LD | 带短立即值偏移的从存储器延迟装入 |
0x02 | ST | 数据存入存储器 |
0x03 | Single Operand | 单操作数指令,例如:BRK、休眠、标志、正常化等 |
0x04 | Branch | 有条件分支转移 |
0x05 | BL | 有条件分支转移和连接 |
0x06 | LP | 零开销循环设置 |
0x07 | Jump/Jump&Link | 有条件跳转 |
0x08 | ADD | 两数相加 |
0x09 | ADC | 带进位加 |
0x0A | SUB | 减 |
0x0B | SBC | 带进位减 |
0x0C | AND | 逻辑按位与 |
0x0D | OR | 逻辑按位或 |
0x0E | BIC | 带翻转的按位与 |
0x0F | XOR | 异或 |
0x10 | ASL(LSL) | 算术左移 |
0x11 | ASR | 算术右移 |
0x12 | LSR | 逻辑右移 |
0x13 | ROR | 循环右移 |
0x14 | MUL64 | 带符号的32x32相乘 |
0x15 | MULU64 | 不带符号的32x32相乘 |
0x16 | N/A | |
0x17 | N/A | |
0x18 | MUL | 带符号的16x16或(24x24) |
0x19 | MULU | 不带符号的16x16或(24x24) |
0x1A | MAC | 带符号的累乘 |
0x1B | MACU | 不带符号的累乘 |
0x1C | ADDS | 带饱和限幅的XMAC加 |
0x1D | SUBS | 带饱和限幅的XMAC减 |
0x1E | MIN | 2数较小者写入核心寄存器 |
0x1F | MAX | 2数较大者写入核心寄存器 |
可变长度ISA
现有技术中已经提出了很多关于可变或多种长度指令方面的技术方案。例如,1978年7月4日授予Kancler的名称为“可变体系结构数字计算机”的美国专利4,099,229。该专利公开了一种可变体系结构数字计算机,通过执行可变长度指令提供对导弹的实时控制。该可变长度指令是借助一微程序控制处理器和一种指令字节串概念而专为此应用而优化的。该指令集是可变长度的,并经过优化通过两种途径解决计算问题。第一,一条指令内所包含的信息量与指令的复杂性成正比,格式最短的被赋予执行最频繁的指令以节省执行时间。第二,借助微程序控制机制和弹性指令格式,通过存取适当的微例行程序,只提供特定计算应用需要的指令,其结果是节省了存储器的空间。
1996年1月30日授予Sato等人的名称为“由用于同时对多个可变长度指令译码的指令长度译码电路构成的缓冲存储器和数据处理器”的美国专利申请5,488,710中公开了一种缓冲存储器和一种包括有该缓冲存储器的数据处理器,用于处理至少一条来自存储器的可变长度指令并将处理信息输出到一个控制单元,如一个中央处理器(CPU)。该缓冲存储器包括一个对来自存储器的可变长度指令的指令长度进行译码的单元,以及一个用于储存来自存储器的可变长度指令和经过译码的指令长度信息的单元。该可变长度指令和指令长度信息被送至控制单元。相应地,缓冲存储器使控制单元能够同时对多个可变长度指令进行译码,从表面上看实现了更高的处理速度。
1997年6月3日授予Bealkowski等的名称为“使用压缩指令的方法和装置”的美国专利5,636,352号公开了一种处理器,该处理器包括以下步骤:接收一个指令,该指令包括一指令标识符和多个指令同义词;为每个指令同义词产生至少一个全宽度指令;以及处理器执行生成的全宽度指令。使用了一种标准指令单元,用来容纳***处理器将要执行的指令。对于PowerPC 601 RISC型的微处理器来说,指令单元的宽度为32位。指令为四字节长度(32位)并且是字对正的。指令字的第0-5位表示主要操作码。某些指令可能还有第二操作码,对第一操作码进一步限定。指令的剩余位包含一个或多个用于不同指令格式的字段。压缩指令单元由压缩单元说明符(Condensed Cell Specifier-CCS)和一个或多个指令同义词(InstructionSynonyms-IS)IS1、IS2...ISn构成。典型的指令同义词是一个(在总位数中)更短的值,用于代表一个全宽度指令单元的值。
1998年10月6日授予Miller等的名称为“处理器的指令压缩和解压缩***和方法”的美国专利5,636,352号公开了一种压缩和解压缩包含在具有多个处理单元的处理器的可变长度指令包中的可变长度指令的***及其方法。提供了一个压缩***,包括:一用于生成一含有多个指令的指令包的***;一用于将一具一预定长度的压缩指令分配给一指令包内的指令;一对应于一较频繁使用指令的更短的压缩指令;和一个用于生成一包含有压缩指令的指令包的***,这些压缩指令对应处理单元的指令。解压缩***包括一个用于在多个存储区字段存储多个指令包的***,一个用于生成一个在存储***中指向一个选定的可变长度指令包的地址的***,以及一个解压缩***,将该选定的指令包内的压缩指令解压缩,为每个处理单元生成一个可变长度指令。该解压缩***还可以具有一个用于从该解压缩***向每个处理单元为该可变长度指令选择路径的***。
1999年3月9日授予Raje等的名称为“利用每条指令内的指令边界标记为可变长度指令定序和译码的方法和装置”的美国专利5,881,260号公开了一种将处理器内的可变长度指令译码的装置和方法,来自指令缓冲存储器的一队可变长度指令被装入一个指令缓冲器,并且指令中指示出该队可变长度指令的指令边界的起始位被装入起始位缓冲器。一个第一移位寄存器被装入起始位并对应一较低的程序计数值被移位,该计数值也用于对指令缓冲器进行移位。检测第一寄存器内起始位的下一指令边界的位置,获取当前指令的长度。当前指令的长度被加入较低程序计数值的当前值,以便为较低程序计数获取下一连续值,该较低程序计数被装入较低程序计数寄存器。将起始位装入一第二位移寄存器,对应较低程序计数值将起始位移位,并检测何时在指令缓冲器中只留有一条指定,由此确定一较高程序计数值,
2001年3月27日授予Otani等的名称为“执行具有两种不同长度指令代码的处理器和输入该指令代码的设备”的美国专利6,209,079号公开了一种具有两种指令长度(16位和32位)的处理器,和定位该指令代码的方法。这些方法限于以下两种类型:(1)两个16位指令代码被存储于32位字边界内,和(2)一个单一32位指令代码被存储于该32位字边界内。仅在该32位字边界内规定一个分支转移目的地址。每条指令代码的MSB用作一个1位指令长度标识符,控制该指令代码的执行序列。这就为处理器内由指令取部分向指令译码部分提供两条跳转路径,从表面上达到代码和硬件的减少,从而提高了运算速度。
2001年8月28日授予Killian等的名称为“高数据密度RISC处理器”的美国专利6,282,633号公开了一种RISC处理器,该处理器所执行的指令集不仅试图对执行程序所需要的指令数目,时钟周期和每条指令的平均时钟数之间的关系进行优化,还试图优化等式S=IS*BI,其S为程序指令的位数大小,IS是代表程序所需的指令的静态数量(不是执行所需要的数量),BI是每条指令的平均位数。该技术手段的目的是在尽量减少时钟周期和每条指令的平均时钟数的情况下减少BI和IS。该处理器寻求对基于RISC原则的固定长度高性能编码提供理想代码密度,包括一个带装入/存储的通用寄存器体系结构。还有,该处理器采用可变长度编码。
2002年10月8日授予Otani等的名称为“执行两种不同长度的指令码的处理器和输入该指令码的设备”的美国专利6,463,520号公开了一种有助于处理器中指令码的处理的技术。存储器件设置有由多个2N位字边界构成,其中N大于等于一。该发明的处理器执行2N位长度和N位长度的指令代码。指令代码被存储于存储器件中,存储方式是2N位字边界包括一个单一2N位指令码或两个N位指令码。每条指令中最有效位作为指令格式标识符控制指令代码的执行(或译码)队列。结果是从处理器的取指令部至指令译码部仅需要两条传输路径,从而减少了处理器的硬件要求并增加了***吞吐量。
1999年9月7日授予Hsu等的名称为“可变长度指令、超标量流水线处理器的分支转移预测和取指令机制”的美国专利5,948,100号公开了处理器体系结构,包括:一个引入单元(fetcher)、数据包单元(packet unit)和一个分支转移目标缓冲器。分支转移目标缓冲器设有一个以组联合(setassociative)方式组织的标记RAM(tag RAM)。对应于接收一个寻址,标记RAM中的多个组同时对预计要取的分支转移指令进行搜寻。数据包单元具有一个包含有指令的队列,取出的缓冲块存储于该队列中。队列入口还具有指示指令序列的起始或最终数据是否包含在队列入口的指示符,并且如果是,还具有一个指示该特点起始或最终数据字的偏移量。相应地,数据包单元将指令序列的数据字连接成一个连续的块
1999年2月9日授予Faraboschi等的名称为“在一个包含指令压缩指针的指令缓冲器中检测到一个为宽指令文字处理器机构压缩指令的遗漏条件下存储和扩展可变长度程序指令的方法和装置”的美国专利5,870,576号公开了一种计算机***中存储和扩展宽指令字的方法和装置。该计算机***包括一个存储器和一个指令缓冲器。程序的压缩指令字被存入存储器的代码堆段(code heap segment),并且代码指针被存入存储器内的代码指针段(code pointer segment)。每个代码指针都包含一个指向一个压缩指令字的指针。程序的一部分作为扩展指令字存储于指令缓冲区。在程序的执行过程中,一个指令字在指令缓冲器中被存取。当需要执行的指令字不在指令缓冲器中时,指示缓冲器遗漏,对应于需要的指令字的代码指针在存储器的代码指针段中被存取。使用代码指针存取存储器的代码堆段中对应需要的指令字的压缩指令字。压缩指令字被扩展,以便提供一扩展指令字,该扩展指令字被装入指令缓冲器并被存取执行。
1999年1月26日授予Battle等的名称为“使用具有源操作码的操作码规约的可变长度指令作为在先指令的多媒体处理器”的美国专利5,864,704号公开了一种将多种媒体功能纳入一单片结构的媒体引擎。该媒体引擎包括一个与主机CPU共享一个存储器的信号处理器,还包括多个控制模块,每个控制模块负责七个多媒体功能中的一个。该信号处理将主机CPU放入共享存储器中的指令恢复并对其作出响应,从而通过片上控制模块之一使这些指令被执行。信号处理器利用一具有可移动分区的指令寄存器,该移动分区允许将一较长指令与一较短指令配对。该信号处理器通过如下方式减少对存储器读入口的需求量:将数据放入指令寄存器,数据在该指令寄存器中可以被直接路由到算术逻辑单元执行,在第一个指令的目标地址与第二指令的源地址匹配时,默认地将第二指令源分类符放置于执行第一指令的ALU的结果寄存器。
1998年9月15日授予Thusoo等的名称为“超标量处理器内可变长度指令的早期指令长度预译码”的美国专利5,809,272号公开了一种超标量处理器,可以在一个时钟周期内分派两条指令。第一条指令在一个大的指令缓冲器内由指令字节译码。第个指令缓冲器被装入在一个周期内将被分派的第二指令的头几个字节的副本。在上一周期内该第二指令缓冲器被用来确定分派到该上一周期的该第二指令的长度。然后该第二指令的长度被用来提取第三指令的首字节,并且其长度也是确定的。然后第四条指令的首字节被定位。当第一指令和第二指令都被分派时,第二缓冲器被装入第一指令的若干字节。如果只分派第一指令,那么第二缓冲器被装入第三指令的首字节。这样第二缓冲器总是被装入未分派指令的起始字节。起始字节在上一周期被找到。一旦激活,每个周期就可以分派两条指令。
尽管已经存在该种种努力,仍然需要提供一种改进的处理器指令集体系结构(ISA)和相关功能,能够(i)将指令集需要的开销减少或压缩到一个绝对最小值,从而减少内存(及相关硬件硅晶)的需要量;(ii)在给定的约束条件下为设计者提供在增加用户扩展方面的最大弹性。这种改进的ISA将能够理想地在不使用模式转换开关的情况下提供不同指令格式的自由格式混合,从而极大地简化编程和编译操作,并且有助于减少前述的开销。
发明内容
本发明通过提供一改进的处理指令集体系结构(ISA)及相关装置和方法来满足该需要。
根据本发明的第一个方面,公开了一种改进的处理指令集体系结构(ISA)。该改进的ISA主要包括:多个具有第一长度的第一指令和多个具有第二长度的第二指令,该第二长度比该第一长度短。在本发明的一个典型实施例中,ISA即包括16位指令,也包括32位指令,当他们包含在一个单一码表中时,可以被32位内核译码和处理。16位指令被有选择地用于不需要32位指令的操作和/或可以减少循环计数的情况。这样就为主处理器提供压缩或精减的编码大小,并提供更多数目的扩充槽和可用的扩展指令。
根据本发明的第二个方面,公开了一种基于该ISA的改进的处理器。该处理器主要包括:多个具有第一长度的指令;多个具有第二长度的指令;以及一个为了适合从一具有第一和第二长度指令的单一程序中译码和处理该第一长度和第二长度指令的逻辑(线路)。在一本发明的一个典型实施例中,该处理器由一个具有取指令、译码、执行和写回等阶段的用户可配置的扩展RISC处理器构成,并同时具有16位和32位指令的译码和处理能力。该处理器仅需要数目有限片上存储器(on-chip memory)支持该的使用基于“压缩的”16位和32位ISA的编码。
根据本发明的第三个方面,公开了一种用于该ISA的改进的指令调整器(instruction aligner)。在本发明的一个典型实施例中,该指令调整器被置于流水线的第一(取)阶段,并使之适合于接收来自指令缓存的指令并生成基于该指令的16位和32位长的指令字。正确的或有效的指令被挑出并沿流水线向后传递。16位指令在调整器内被有选择地缓冲,从而允许处理器的32位体系结构的适当格式化。
根据本发明的第四个方面,公开了一种改进的在数字处理器指令流水线内多种长度指令的处理方法。该方法主要包括以下步骤:提供多个第一长度的第一指令;提供多个第二长度的第二指令,该第二指令至少有一部分包括长字部件;确定一给定长字何时包括一个第一指令或多个第二指令,以及该给定长字何时包括多个第二指令,将至少一个第二指令缓冲。在本发明的一个典型实施例中,该长字由具有16位边界的32位的字构成,并且指令的MSB被用于确定它们是16位指令还是32位指令。
根据本发明的第五个方面,公开了一种改进的将具有该改进的ISA的处理器设计合成的方法。在本发明的一个典型实施例中,该方法包括以下步骤:提供至少一个需要的功能;提供一个处理器设计工具,该处理器设计工具包括多个逻辑模块,该设计工具适合于生成一个具有混合16位和32位ISA的处理器设计;为该设计工具提供多个对上设计的约束;至少利用该设计工具并至少部分地基于该多个约束生成一个混合ISA处理器设计。
附图简要说明
图1是用图形表示的使用本发明ISA的几种指令格式的示例,包括LD、ST、分支转移,和比较/分支转移指令。
图2是用图形表示的通用寄存器格式的示例。
图3是用图形表示的分支转移、MOV/CMP、ADD/SUB格式的示例。
图4是用图形表示的BL指令格式示例。
图5是高位寄存器指令格式的MOV、CMP和ADD。
图6是指令BSET、BCLR、BTST和BMSK的流水线图。
图7是16位和32位指令的选择器复用器的示意图。
图8是通过流水线阶段2的数据通路的示意图。
图9是在流水线阶段3内生成s2val_one_bit的示意图。
图10是在流水线阶段3内生成2val_mask的示意图。
图11是BRNE指令的流水线示意图。
图12是‘fs1a’和‘s2offset’的阶段1mux的示意图。
图13是‘s1val’和‘s2val’的阶段2数据通路的示意图。
图14是BR和BBIT指令的阶段2分支转移目标计算的示意图。
图15是ALU和标志计算的阶段3数据流的示意图。
图16是ABS指令的示意图。
图17是移位加/减指令的示意图。
图18是右移和遮蔽扩展的示意图。
图19是代码压缩体系结构的示意图。
图20是译码逻辑(阶段2)配置的示意图。
图21是处理器层次的示意图
图22是取操作数的示意图
图23是阶段1的数据路径的示意图
图24是16位指令的扩展逻辑的示意图
图25是16位指令2的扩展逻辑的示意图
图26是当Actionpoint/BRK时阶段1的关门逻辑的示意图
图27是当单一指令步进时阶段1的关门逻辑的示意图
图28是当无指令时阶段1的关门逻辑的示意图
图29是取指令逻辑的示意图
图30是长立即数的示意图
图31是程序计数器开通逻辑的示意图
图32是程序计数器开通逻辑2的示意图
图33是指令未决逻辑的示意图
图34是BRK指令译码的示意图
图35是阶段1的actionpoint/BRK迟延的示意图
图36是阶段2的actionpoint/BRK迟延逻辑的示意图
图37是阶段2数据路径-源1操作数的示意图
图38是阶段2数据路径-源2操作数的示意图
图39是比例寻址的示意图
图40是分支转移目标地址的示意图
图41是Next PC信号生成(1)的示意图
图42是Next PC信号生成(2)的示意图
图43是状态寄存器编码的示意图
图44是PC32寄存器编码的示意图
图45是Status32寄存器编码的示意图
图46是用图形表示更新PC/Status寄存器。
图47是在等待延迟装入时阶段2的关门逻辑的示意图
图48是阶段2分支转移停顿逻辑(branch holdup logic)的示意图
图49是条件跳转迟延(stall)的示意图
图50是的取消延迟槽(killing delay slot)示意图
图51是阶段3数据路径的示意图
图2是本发明的处理器使用的运算器的示意图
图53是地址生成的示意图
图54是逻辑部件的示意图
图55是算术/循环功能的示意图
图56是阶段3结果选择的示意图
图57是标志生成的示意图
图58是写回地址生成(p3a)的示意图
图59是MIN/MAX数据路径的示意图
图60是MIN/MAX指令的进位标志的示意图
图61是图形表示的第一操作-重置时对准指令。
图62是图形表示的第二操作-重置时对准指令。
图63是图形表示的第一操作-分支转移后对准指令。
图64是图形表示的第二操作-分支转移后对准指令。
图65是图形表示的图64的操作。
实施例详述
所有附图中相同的标记符号都代表相同的部件。在本申请中,术语“处理器”的含意包括所有能够在至少按一个指令字执行一个操作的集成电路或其他电子器件(或器件的集合),包括(但不限于)精简指令集内核(reducedinstruction set core-RISC)的处理器,例如本发明的受让人制造的ARCtangentTM A4,A5,A600和A700用户本配置内核,中央处理单元(CPU),以及数字信号处理器(digital signal processor-DSP)。这些器件的硬件可以是被集成到一个基片(例如:硅“片”),或是分布在两个或更多的基片上。此外,处理器的各种功能可由与处理器相关的软件或固件独自地实现。
此外,本技术领字段的普通专业人员应该明白,术语“阶段”在本申请中指流水线处理器中的各种连续的阶段;即,阶段1指第一流水线阶段,阶段2指第二流水线阶段,如此等等。例如,这些阶段可包括取指令、译码、执行和写回阶段等。
最后,本发明中提及的所有硬件描述语言(hardware description language-HDL)或超高速集成电路硬件描述语言(VHSIC HDL-VHDL)都包括其他硬件描述语言,如Verilog。此外,示例性的Synopsys合成引擎如DesignCompiler 2000.05(DC00)可被用于合成本文中提及的各个实施例,或其他合成引擎如Cadence Design Systems公司出品的Buildgates等均可以使用。IEEE标准1076.3-1997、IEEE标准VHDL合成包描述一种产业化的语言,用来规定基于硬件定义语言的设计和本技术领字段普通技术人员可以获得的合成能力。
概述
本发明是一种新型的指令集体系结构(ISA),允许设计者自由地在他们的32位用户可配置处理器上混合16位和32位指令。ISA最重要的优点在于能够大比例地减少***芯片(system-on-chip,SoC)上对存储器的需求量,从而降低深度嵌入式应用***的能耗和成本,如无线通信和高容量用户电子产品。本发明的受让人根据经验确定,与现有技术的(非压缩的)单一长度指令ISA相比,本发明的改进ISA提供对ISA代码的最多至40%的压缩。
本发明的(ARCompact)ISA主要特点包括:旨在提供更大代码密度的32位指令;用于最常用操作的16位指令集;不需要模式转换的16位和32位指令的自由形式的混合。它们的意义在于,与正在竞争的模式转换体系结构相比,极大地减少了编译器使用的复杂性。本指令集扩展了可以由用户加入基本方案(base-case)ARCtangentTM或其他处理器指令集的用户扩展指令的数量。现有的可配置处理器体系结构早已允许用户增加多达69条新指令以加速关键例行程序和算法程序。而本发明的改进的ISA可以使用户增加多至256条新指令。用户还可以增加新的核心寄存器、辅助寄存器和条件码。本发明的ISA不仅保持了现有的可配置处理器技术的用户可定制这一特点,而且还有所增强和扩展。
本发明的改进的ISA提供了高密度代码,有助于大大减少嵌入式软件对存储器的需要量,如闪速存储器卡(flash memory card),这对大容量用户应用软件还说是一个重要因素。此外,通过使代码适于更小的存储器区字段,处理器对存储器的存取势必减少。如此就减少了能耗并延长了诸如MP3播放器、数字照相机和无线手机等移动设备的电池寿命。此外,本发明的ISA所提供的较短指令可以通过在一个时钟周期内执行原本需要两条或更多的指令才能完成的操作来提高***吞吐量。这样常常可以不必在更高时钟频率上运行处理器就可以提高应用性能。
由于支持对16位和32位指令的自由使用,编译和程序设计人员可以为给定任务使用最适合的指令,而不需要专门的代码分区可***模式管理。16位指令对相应的32位指令直接替代提供一种立即代码密度优点,可以在整个应用软件的单个指令水平上实现。由于不需要编译人员对代码进行重构,在更大指令范围上达到了更大范围上的优化。应用软件的调试也更为直观,因为新生成的代码尾随在原始源代码结构之后。
本发明提供对基于ARCtangent处理器的32位和16位ISA的示范性的详细说明,但应该明白,本发明的优点还可以用于许多不同类型和配置的数据处理器。本发明还描述了允许对16位和32位指令进行译码和处理的数据和控制路径配置。16位ISA的加入使更多的指令被***并减少了代码长度,从而提供了一种与现有的“单一长度(例如:32位)ISA相比较而言对代码一定程度的“压缩”。
本文中描述的处理器还具有能够执行混合在同一段源代码内的16位和32位指令的优点。该改进的ISA还允许设计者使用数量众多的扩展槽。
还应注意到此文中公开的内容中引用了将前述的16/32位ISA功能纳入的某些参数(“build”)的处理器设计的合成方法。本申请人于1999年10月14提交的(2000年4月20公开,公开号WO 00/22553)另一正在审查中的名称为“管理半导体设计的配置和功能的方法和装置”的美国专利申请09/418,663号中公开了合成具有用户设定(即“soft”)指令集的集成电路的通用方法。该方法被置入本申请的受让人制造“ARChitect”设计软件,其内容在此全文引用并作为本申请的一部分。但是应该明白,其他软件环境和技术方案可以和可表明一同利用。例如,2003年12月11日公开的公开号20030229482由Cook等人提交的名称为“管理集成电路设计的装置和方法”的美国专利申请中描述的面向对象技术手段也可以使用。因此,本申请中对前述ARChitect程序的特殊属性的引用仅仅是说明性的。
此外,尽管在此对关于在微机或其他类似处理器件上运行的算法或计算机程序的本发明的各个方面进行了说明,应该明白其他硬件环境(包括小型机、工作站、网络计算机、“超级计算机”、特大型机,以及分布式处理环境等)也可以用于本发明的实施。此外,如果需要还可以将计算机程序的一个或多个部分固化到硬件或固件中等等,这些实施例的变形都在本领字段的技术人员能够达到的范围之内。
32位ISA
以下参考图1-5对本发明的一个示范实施例的改进ISA的32位部分进行说明。该实施例采用一个32位指令集,该指令集对现有指令集(例如用于ARCtangent A4处理器的指令集)进行了增强和改进。这些增强和改进使任何给定应用软件的代码长度缩短了,从而使存储器开销保持在一个绝对最小值。本实施例的代码压缩方案包括将指令集分区为两个子指令集:(i)一个32位指令集;和(ii)一个16位指令集。如下面的详细说明中所指出的那样,该“双ISA”方案还使处理器能够很容易地进行16位和32位指令的转换。
表2是本发明的核心寄存器“双ISA”处理器的格式。
表2
寄存器编号 | 核心寄存器名称 | 内容 |
0 to 25 | r0 to r25 | 通用寄存器 |
26 | Gp or r26 | 通用寄存器或全局指针 |
27 | Fp or r27 | 通用寄存器或帧指针 |
28 | Sp or r28 | 通用寄存器或栈指针 |
29 | Ilink1 or r29 | 可屏蔽中断寄存器 |
30 | Ilink2 or r30 | 可屏蔽中断寄存器 |
31 | Blink or r31 | 分支转移连接寄存器 |
32 to 59 | r32 to r59 | 更多通用寄存器 |
60 | r60 | 循环计数寄存器 |
61 | r61 | 保留 |
62 | r62 | 长立即(limm)数据寄存器编码 |
63 | r63 | 程序计数器寄存器编码(currentpc) |
32位指令集包括:(i)位设置(bit set)、测试(test)、屏蔽(mask)、清除(clear);(ii)进栈/退栈(push/pop);(iii)比较并分支转移(compare & branch);(iv)装入相对于PC的偏移量;和(v)2个辅助寄存器(auxiliary register),32位PC和状态寄存器(status Register)。此外,如表3所示,本实施例中的另一32位指令被编入操作码槽(opcode slot)0x0至0x07(在前述的ARCtangent A4 32指令集的情况下)。
表3
指令操作码 | 指令类型 | 内容描述 |
0x00 | 分支转移 | 条件分支转移转移 |
0x01 | BL | 条件连接并分支转移转移 |
0x02 | LD | 由存储器延迟装入。格式为寄存器+shimm |
0x03 | ST | Stores to memory.存入存储器。格式为寄存器+shimm |
0x04 | 操作格式1 | 包括基本方案指令 |
0x05 | 操作格式2 | 为扩展指令预留 |
0x06 | 操作格式3 | |
0x07 | 操作格式4 | 为用户扩展指令预留 |
0x08 | 空槽 | 16位指令的扩展槽 |
0x09 | 空槽 | |
0x0A | 空槽 | |
0x0B | 空槽 | |
0x0C | 空槽 | |
0x0D | 可变的 | 为16位ISA保留 |
0x0E | ||
....... | ||
0x1E | ||
0x1F |
本实施例中的分支转移指令已经被分别配置到操作码槽0x0和0x1,即,条件分支转移(Bcc)与分支转移并连接(BL)。该指令格式如下:(i)Bcc21位无地址(0x0);及(ii)BLcc22位地址(0x1)。该分支转移和连接指令为32位对齐,而分支转移指令为16位对齐。尽管意识到还可以规定其他的和更为复杂的跳转延迟槽模式,例如2000年3月13日提交的名称为“流水线处理器跳转延迟槽控制的方法和装置”的美国专利申请09/523,877号中所描述的,本申请的受让人为该美国专利申请的共同专利权人,本申请将其全文并入引用,在图中所示实施例中,只有两个延迟槽模式(delay slot mode)提供给跳转(jump),即,“.nd”(不执行延迟槽)和“.d”(总是执行延迟槽)。
本实施例的装入/存储(LD/ST)指令配置为能够通过一核心寄存器(coreregister)加短立即偏移量(short immediate offset)(例如:9位)LD/ST操作的寻址模式包括(i)相对于程序计数器(PC)的LD;和(ii)比例索引寻址模式(scaled index addressing mode)。
LD/ST PC相对指令允许32位ISA的LD/ST指令与PC相对。在图中所示的实施例中的实施方式是具有作为PC的只读值的寄存器r63。该寄存器作为一个源寄存器对于所有其他的指令都是可用的。
该比例索引寻址模式允许操作数二通过数据存取的大小移位,例如,字节(byte)为0,字(word)为1,长字(longword)为2。后文将对该功能具体说明。
还应注意到可以使用不同的编码,例如,64位为3。
算术和逻辑指令的数量被包含在前述的操作码槽0x2至0x7,如下:(i)算术指令-ADD,SUB,ADC,SBC,MUL64,MULU64,MACU,MAC,ADDS,SUBS,MIN,MAX;(ii)位移指令-ASR,ASL,LSR,ROR;和(iii)逻辑指令-AND,OR,NOT,XOR,BIC.
图中所示实施例的移位和加/减指令允许数值被移动0、1或2位,然后与一个寄存器中的内容相加。这样在处理器阶段3增加了额外的开销(overhead),这是因为会为2级别的逻辑被加入32位加法器的输入端(bigalu)。后文将对该功能具体说明。
位设置、清空并测试(Bit Set,Clear & Test)指令去除了用于屏蔽目的的长立即(limm)数据。这允许一个指令编码中的5位字值生成一个“2的乘幂”32位操作数。在本实施例中,执行这些操作的逻辑被置于处理器的阶段3。
逻辑乘并屏蔽(And&Mask)指令与前述的位设置指令类似,都是允许指令编码中的一个5位值生成一个32位屏蔽码。这一特征部分利用了该的阶段3逻辑。
进栈(PUSH)指令根据栈指针所保留的值向存储器内存储一个数值,然后将栈指针递增。这基本上是一个激活地址写回模式的存储操作,因此存在一个对地址的预递减。一个额外的出栈(POP)指令类型是“POP PC”,该指令按如下方式拆分:
POP Blink
J [Blink]
该出栈指令正好相反,根据栈针所指示的值从存储器装入一个数值并将栈指针递减。这是一个向存储器存储之前带有对地址后递减的装入指令。
移动(MOV)指令被配置为无符号12位常数可以被移入核心寄存器。比较(CMP)指令基本上是一个SUB指令的特殊编码,具有标志设置而没有结果目的地。
循环(LOOP)指令被配置为将一个寄存器用于循环的迭代数和一个短立即值(shimm),该短立即值提供循环所包含的指令的偏移量。为了激活一个单一指令循环,需要额外的互锁。在一个实施例中,循环计数寄存器(Loopcount Register)被移至辅助寄存器空间。在实施例中所有与本指令有关的寄存器的宽度都是32位(即LP_START、LP_END、LP_COUNT)
本发明ISA的指令格式参见附录I和图1-5。表4定义了32位ISA的编码。
表4
常量名称 | 宽度 | 内容描述 |
Isa32_width | 32 | 32字节ISA的宽度。 |
instr_ubnd | 31 | 操作码字段中最高有效位。 |
instr_lbnd | 27 | 操作码字段中最低有效位。 |
Aop_ubnd | 5 | 目的单元格中的最高有效位。 |
Aop_lbnd | 0 | 目的单元格中的最低有效位。 |
bop_2_ubnd | 26 | 源操作数的一字段(低三位)中最高有效位。 |
bop_2_lbnd | 24 | 源操作数的一字段(低三位)中最低有效位。 |
bop_1_ubnd | 14 | 源操作数的一字段(高三位)中最高有效位。 |
bop_1_lbnd | 12 | 源操作数的一字段(高三位)中最低有效位。 |
cop_ubnd | 11 | 源操作数2字段的最低有效数。 |
cop_lbnd | 6 | 源操作数2字段的最低有效数。 |
shimm16_1_u9_msb | 15 | 9位有符号常数中最高有效位。 |
shimm16_2_u9_ubnd | 23 | 9位有符号常数中第8位的位置。 |
shimm16_2_u9_lbnd | 16 | 9位有符号常数中最低有效位。 |
shimm16_u5_ubnd | 4 | 5位无符号的立即数据中的最高有效位。 |
shimm16_u5_lbnd | 0 | 一个5位无符号的立即数据中的最低有效位。 |
targ_1_ubnd | 15 | 分支偏移量字段(高10位)的最高有效位。 |
targ_1_lbnd | 6 | 分支偏移量字段(高10位)的最低有效位。 |
targ_2_ubnd | 26 | 分支偏移量字段(低10位)的最高有效位。 |
targ_2_lbnd | 17 | 分支偏移量字段(低10位)的最低有效位。 |
setflgpos | 16 | 标记设置位(.f)的位置。 |
single_op_ubnd | 21 | 子操作段的最高有效位。 |
single_op_lbnd | 16 | 子操作段的最低有效位。 |
shimm32_1_s8_msb | 15 | 一个8位有符号立即数的最高有效位。 |
shimm32_2_s8_ubnd | 23 | 一个8位有符号立即数的第7数位位置。 |
shimm32_2_s8_lbnd | 17 | 一个8位有符号立即数的最低有效位。 |
shimm32_u6_ubnd | 11 | 一个6位无符号立即数的最高有效位。 |
shimm32_u6_lbnd | 6 | 一个6位无符号立即数的最低有效位。 |
qq_ubnd | 4 | 需要存储条件码字段的最高有效位。 |
qq_lbnd | 0 | 需要存储条件码字段的最高有效位。 |
ls_nc | 5 | 直接数据存储器旁路(.di)。 |
ls_awbck_ubnd | 4 | 地址写回字段的最高有效位。 |
ls_awbck_ubnd | 3 | 地址写回字段的最低有效位。 |
ls_s_ubnd | 2 | LD/STs数据大小的最高有效位。 |
ls_s_lbnd | 1 | LD/STs数据大小的最低有效位。 |
ls_ext | 0 | 信号扩展位。 |
pc_size | 32 | 程序计数器中的位数。 |
pc_msb | 31 | PC的最高有效位。 |
loopcnt_size | 32 | 循环计数器中的位数。 |
loopcnt_msb | 31 | 循环计数寄存器的最高有效位。 |
如前述,由于程序计数器(PC)被扩展到了32位宽,处理器内额外提供了四个辅助寄存器。这些寄存器是:(i)PC32;(ii)Status32;(iii)Status32l1/Status32_l2。这些寄存器允许对全部地址空间的存取,对已有的状态寄存器(status Register)是一个补充。一个额外的标志寄存器(flag Register)还允许对额外标志的扩展。表5显示了对这些寄存器的映射(mapping)。
表5
辅助寄存器地址 | 寄存器类型 | 寄存器名称 | 内容描述 |
0x0 | Read/Write | Status | 状态寄存器,包括24位PC状态,标记状态,停止状态和zho那个段信息。 |
0x1 | Read/Write | Semaphore | 内部程序/主机(semaphore)寄存器。 |
0x2 | Read/Write | Lp_start | 循环开始地址(32-bit)。 |
0x3 | Read/Write | Lp_end | 循环结束地址(32-bit)。 |
0x4 | Read only | Identity | 核心鉴定寄存器。(basecase core辅助寄存器)。 |
0x5 | Read/Write | Debug | 调试寄存器(basecase core辅助寄存器)。 |
0x6 | Read/HostWrite | PC32 | 这个保存一个新的32位PC. |
0x7 | Read/Write | STATUS32 | 这个包含了在ALU标记位,停止位和中段信号的信息。 |
TBD | Read/Write | STATUS32_L1 | 水平1例外的状态寄存器 |
TBD | Read/Write | STATUS32_L2 | 水平2例外的状态寄存器 |
16位指令集体系结构
请参阅图2-5,是处理器ISA1的16位部分的一个示范性实施例。如前所述,本发明的配置中使用一16位指令集,以便最终减少存储器开销。这允许用户/设计者降低外部存储器方面的成本。下面对该指令集(ISA)中的16位部分进行详细说明。
表6定义了处理器中16位ISA的核心寄存器映射(Core RegisterMapping)的格式。
表6
寄存器编号 | 核心寄存器名称 | 32位ISA寄存器 | 内容描述 |
0 to 3 | r0 to r3 | r0 to r3 | 在应用级二进制接口内定义的变量寄存器 |
4 | r4 | r12 | 存储的寄存器 |
5 | r5 | r13 | |
6 | r6 | r14 | |
7 | r7 | r15 |
表7显示了该ARCtangent A4处理器中的16位ISA的实施例。请注意,现有的指令(例如:A4的指令)已经被重新组织以适合操作码槽0x0C~0x1F。
表7
指令操作码 | 指令类型 | 内容描述 |
0x0C | LD/ADD | 加载和添加一个短的立即偏移量。 |
0x0D | ADD/SUB/ASL/LSR | 从内存和存储的被延误的装入。格式为:寄存器+shimm |
0x0E | MOV/CMP | 移动并且和在核心寄存器文件的满64位存储器比较 |
0x0F | Operation Format 1 | 算法和逻辑操作 |
0x10 | LD | 具有7位不带符号的带短立即值偏移从存储器延迟装入 |
0x11 | LDB | 来自内存的带有5位无符号带短立即值偏移量的延迟装入的字节。 |
0x12 | LDW | 来自内存的带有5位无符号带短立即值偏移量的延迟装入的字符。 |
0x13 | LDW.x | 来自存储器的被延误装入的字符。 |
0x14 | ST | 存储到内存。Fornat包括寄存器和7位无符号的带短立即值。 |
0x15 | STB | 存储到字节存储器。Fornat包括寄存器和5字节无符号的带短立即值。 |
0x16 | STW | 存储到字符存储器。Fornat包括寄存器和6位无信号的带短立即值。 |
0x17 | Operation format 1 | 包括算数右移,算数左移,减,单操作数和逻辑指令。 |
0x18 | LD/ST SPPOPPUSH | 从内存地址9位无符号的立即值偏移量+PC(或者6位无符号立即偏移量+SP)被延误的装入 |
0x19 | LD GP | 从相对于全局指针的地址到r0的装入。 |
0x1A | LD PC | 相对于PC地址的装入。 |
0x1B | MOV | 无符号短立即值的移动指令。 |
0x1C | ADD/CMP | 添加和比较指令。 |
0x1D | BRcc | 比较和分支转移指令。 |
0x1E | Bcc | 有条件的分支转移。 |
0x1F | BL | 分支转移和连接。 |
以下各段提供了对每条指令的详细描述。图2显示了使用寄存器的16位指令格式,图2中的通用寄存器指令格式中的每一个字段(field)都履行下面的指令:(i)位4~0-子操作码字段为指令类型提供额外的选择或者可以是一个用于移位的5位无符号的立即值;(ii)位7~5-源2字段包含指令的第二源操作数;(iii)位10~8-B字段包含指令的源/目的地;和(iv)位15~11-主操作码。
图3是Branch,MOV/CMP,ADD/SUB指令的格式。字段编码如下:(i)位6~0-立即数据值;(ii)位7-子操作码;(iii)位10~8-B字段包含指令的源/目的地;(iv)位15~11-主操作码。
图4是BL指令格式。该字段编码如下:(i)位10~0-有符号12位立即地址长字对齐;和(ii)位15~11-主操作码。
图5是显示MOV、CMP、ADD高位寄存器指令格式。指令中的每一个字段都履行下列功能:(i)位1~0-子操作码字段;(ii)位7~2-指令的目的地寄存器(destination register);(iii)位10~8-B字段包含指令的源操作码;和(iv)位15~11-主操作码
个定义了LD/ST指令的不同格式(0x0C-0x0D,0x10-0x17,0x1B)。无符号常数按数据存取对齐的要求被左移位。
表8
指令操作码 | 操作 | 内容 |
0x0C | LDb,[pc,u9] | PC+9位无符号带短立即值偏移从内存中延迟装入。 |
0x0D | LD/STb,[gp,u9] | GP+9位无符号带短立即值偏移从内存中延迟装入。 |
0x10 | LDa,[b,u7] | 7位无符号带短立即值偏移从内存中延迟装入。 |
0x11 | LDBa,[b,u5] | 来自内存的带有5位无符号带短立即值偏移量的延迟装入的字节。 |
0x12 | LDWa,[b,u6] | 来自内存的带有6位无符号带短立即值偏移量的延迟装入的字符。 |
0x13 | LDW.xa,[b,u6] | 来自内存的带有6位无符号带短立即值偏移量的延迟装入的字符。 |
0x14 | STa,[b,u7] | 存储到存储器。格式包括寄存器+7位无符号带短立即值。 |
0x15 | STBa,[b,u6] | 存储到字节存储器。格式包括寄存器+5位无符号带短立即值。 |
0x16 | STWa,[b,u6] | 存储到字符存储器。格式包括寄存器+6位无符号带短立即值。 |
0x17 | LDa,[pc,u9] | PC+9位无符号带短立即值偏移从内存中延迟装入。这是一个新的32位指令。 |
0x17 | LDa,[sp,u6] | SP+6位无符号带短立即值偏移从内存中装入。这是一个新的对齐的32位。 |
0x17 | LDBa,[sp,u6] | SP+6位无符号带短立即值偏移从内存中装入。这是一个新的对齐的32位。 |
0x17 | STa,[sp,u6] | SP+6位无符号带短立即值偏移从内存中存储。这是一个新的对齐的32位。 |
0x17 | STBa,[sp,u6] | SP+6位无符号带短立即值偏移从内存中存储。这是一个新的对齐的32位。 |
0x1B | LDc,[a,b] | SP+6位无符号带短立即值偏移从内存中存储。这是一个新的32位排列。 |
0x1B | LDBc,[a,b] | 来自内存的带有地址(存储器+存储器)的延迟装入的字符。 |
0x1B | LDWc,[a,b] | 来自内存的带有地址(存储器+存储器)的延迟装入的字符。 |
进栈(PUSH)指令根据栈指针所保留的值向存储器内存储一个数值,然后将栈指针递增。这基本上是一个激活地址写回模式的存储操作,因此存在一个对地址的预递减。一个额外的出栈(POP)指令类型是“POP PC”,该指令按如下方式拆分:
POP Blink
J [Blink]
该出栈指令正好相反,根据栈针所指示的值从存储器装入一个数值并将栈指针递减。这是一个向存储器存储之前带有对地址后递减(post-decrement)的装入指令。
LD PC相对指令允许16位ISA的LD指令与PC相关。这可以通过将寄存器r63作为一个PC的只读值来实施。这作为一个源寄存器对于所有其他指令都是可以的。
该16位ISA还提供比例索引寻址模式;这里,操作数2可以通过数据存取的大小而被移位,例如,字节为0、字为1、长字为2。
移位并加/减指令允许一个值向左移动0、1、2或3位,然后与寄存器的的内容相加。这样该指令就去除了对长立即数据(limm)的需要。由于有2级逻辑被加入32位加法器的输入(bigalu),这样该指令在处理器的阶段3增加了一个额外的开销。
带有SHIMM操作数指令的标准(即:基本方案核心IS)加/减(ADD/SUB)指令由基本方案核心算术指令构成。
右移和屏蔽(Shift Right and Mask)扩展指令根据一个5位数值进行移位,然后根据另一个4位常数将结果屏蔽,该4位常数确定一个1~6位屏蔽码。这些4位和5位常数被压缩到9位短立即值中。该功能基本上是一个桶式位移(barrel shift),其后是屏蔽处理。这样尽管计算是顺序进行的,由于编码的原因可以将其设置为并行的。现有的桶形位移器逻辑可用于运算的第一部分,但是,第二部分需要额外的专用逻辑,可以由本技术领域的普通技术人员很容易地合成。该功能是桶式位移器扩展的一部分,并且在实施上仅对现有的桶式位移器的门数增加了数量很小(大约50个)的门。
16位IS的位设置、清空并测试指令免去了屏蔽所需的长立即数(limm)数据。这就允许在指令编码中的一个5位生成一个“2的乘幂”32位操作数。实施这些运算所需要的逻辑被置于处理器的阶段3,需要大约100个额外的逻辑门。CMP指令是一个激活标志设置没有目的寄存器的SUB指令,即,SUB.f0、a、u7其中u7是一个无符号的7位常数。
分支转移和比较(Branch and Compare)指令根据比较结果进行分支转移。该指令不是条件执行的,没有标志设置的能力。这就需要在流水线的阶段2计算出分支转移地址,并且在阶段3进行比较。这样就实现了完成比较后的分支转移。该指令会产生2个延迟槽。但是,另一解决方案是在阶段2进行分支转移,并且如果比较结果为假,那么处理器就可以从比较/分支转移指之后的那一点立即执行。
对于该指令的32位版本来说,还可以提供一个可选的提示标志(hintflag),在实施例中该提示标志被缺省为总是接受分支转移或总是取消分支转移。因此,为了实行这个功能,必须在阶段2存储一个保持未接受路径的PC的32位寄存器。
16位IS具有两条相关的分支转移指令,即:(i)条件分支转移,和(ii)分支转移和连接。条件分支转移(Bcc)指令具有带符号的16位对齐的偏移量,并为了某些条件(即,AL、EQ、NE)具有一个更长的范围。该分支转移和连接指令为了具有一个更大范围而具有一个带符号的32位对齐的偏移量。表9列出了ISA内可用的分支转移指令。
表9
指令操作码 | 操作 | 内容描述 |
0x1E | BAL s10 | 带有10位有符号立即偏移量的分支转移。 |
0x1E | BEQ s10 | 当与带有10位有符号的立即偏移量的标记一样时的分支转移。 |
0x1E | BNE s10 | 当与带有10位有符号的立即偏移量的标记不一样时的分支转移。 |
0x1E | BGT s7 | 当比带有7位有符号的立即偏移量的标记更多时的分支转移。 |
0x1E | BGE s7 | 当比带有7位有符号的立即偏移量的标记更多或者一样时的分支转移。 |
0x1E | BLT s7 | 当比带有7位有符号的立即偏移量的标记更少时的分支转移。 |
0x1E | BLE s7 | 当比带有7位有符号的立即偏移量的标记更少或者一样时的分支转移。 |
0x1E | BHI s7 | 当与7位有符号的立即偏移量一样时的分支转移。 |
0x1E | BHS s7 | 当与7位有符号的立即偏移量不一样时的分支转移。 |
0x1E | BLO s7 | 当与7位有符号的立即偏移量不一样时的分支转移。 |
0x1E | BLS s7 | 当与7位有符号的立即偏移量一样时的分支转移。 |
0x1F | BL s13 | 分支偏移和带有13位立即偏移量的连接。在分支转移被提取之前,闪烁寄存器记录有PC的值 |
注意到当实行一个压缩的(16位)跳转或分支转移指令时,相关的延迟槽应该总是包括另一个16位指令。该指令与普通的32位指令类似,或者被执行,或者不被执行。在本实施例中,尽管其他配置可以被替代,分支转移和跳转不能被包括在指令的延迟槽中。
本发明的指令集体系结构(ISA)中的额外指令包括以下内容:(i)LD/ST寻址模式;(ii)移动指令;(iii)位设置、清空和测试指令;(iv)逻辑与并屏蔽;(v)比较并分支转移;(vi)循环指令;(vii)非指令;(viii)求反指令;(ix)绝对指令;(x)移位并加/减;和(xi)右移并屏蔽(扩展)。下文中将对这些指令的实施进行详细描述。
装入/存储操作(LD/ST)的寻址模式按如下划分:
1.预先更新模式-在ALU加之前取得地址
2.后更新模式-在ALU加之后取得地址
3.比例寻址模式(scaled addressing mode)-根据指令的操作码编码方式对短立即常数移位(具体说明见下)。
预先/后更新寻址模式在处理器的阶段3进行,下文对此还有具体说明。进栈/出栈指令在阶段2分别被译码为LD/ST操作,地址写回向栈指针开启(例如:r28)。
移动指令在处理器的阶段2被译码并映射到基本指令集中的AND指令。提供了互锁,用于处理长立即数据编码(r62)或PC(r63)作为目的地址。该互锁可以是编译程序汇编器的组成部分,因为所有使用前述寄存器作为目的地的指令都不进行写操作。
位设置(BSET)、清空(BCLR)、测试(BTST)和屏蔽(BMSK)指令免除了用于屏蔽目的的对长立即(limm)数据的需要。这就允许一个指令编码中的5位数值生成一个“2的乘幂”32位操作数。执行这些操作所需要的逻辑被置于处理器的阶段3。此“2的乘幂”操作是一个有效的简单译码块。该译码操作在ALU逻辑之前实行,并且对于所有本文中所提及的位处理指令都是通用的。
图6是一个前述指令的操作的流水线图。对于位设置操作,按如下的序列进行:
1.在时间(t)处源字段为“sla”并且利用图7所示的逻辑700将“fs2a”或“s2shimm”提取。结果地址“dest”也被提取。
2.在时间(t+1)处该指令位于流水线的阶段2并且,如图8所示,逻辑800从寄存器文件提取数据“s1val”并且从寄存器文件(使用地址“s2a”)或“p2shimm” 提取数据“s2val”
3.在时间(t+2)处译码器902在阶段3 900(图9)将“s2val”解码为“s2val one bit”。然后复用器904选择“s2val one bit”以产生“s2val new”。该数据与“s1val”一同被送入“bigalu”内的逻辑块906以实行逻辑或运算。其结果被锁存入“wbdata”。
4.在时间(t+3)处阶段4内,“wben”信号与设定“wba”一同被断言(asserted)到原“dest”地址以执行写回操作。
对于位清空指令,ALU对译码后的数据有效地执行一个BIC操作。对于位测试指令,ALU对译码后的数据有效地为位测试指令执行一个AND.F运算。如果被测试位为零,将设置零标志。还有,在阶段1地址62(“limm”地址)被放入“dest”字段,防止写回的发生。
位屏蔽指令与阶段3的其他指令不同。请参阅图10所示,首先在带有(u6+1)个被称为“s2val mask”的屏蔽码生成器块1002生成一个屏蔽码。然后该屏蔽码通过复用器1004在进入逻辑块1006前进被复用到“s2valnew”,逻辑块1006利用寄存器“s1val”对该屏蔽码进行逻辑乘操作。
本实施例的逻辑乘并屏蔽指令与位设置指令类似,该指令允许在指令编码中存在一个5位数据以生成一个32位屏蔽码,随后该32位屏蔽码与寄存器(s1val)中的源操作数的数据进行逻辑乘。
比较并分支转移指令需要在流水线的阶段2计算的分支转移地址,并且在阶段3进行比较。因此,需要在比较进行后实施取得分支转移;这将产生2个延迟槽。
图11所示的是通过流水线的取得分支转移但不使用延迟槽(BranchTaken But Delay Slot Not Used-BRNE)指令。对于该BRNE指令,按如下序列实行:
1.在时间(t)处BRNE指令进入流水线的阶段1,利用如图12所示的逻辑1200将“p1iw16”或“p1iw32”被拆分并锁存入“p2offset”、“p2cc”、“fs1a”,和“s2a”或“p2shimm”。
2.在时间(t+1)处通过复用器1302将“fs1a”与“h_addr”复用以生成“s1a”,并向寄存器文件1304寻址以生成值“pd_a”,参见图13。随后该值被锁存入“s1val”。同时从地址为“s2a”的寄存器文件1304或从“p2shimm”生成被锁存的值“s2val”。还有在阶段2,逻辑块1402内的“last_pc”+1被加入“p2offset”以生成“target”,随后又被锁存入“target_buffer”(参见图14)。需要存储条件码信号“p2cc”,但是“p3cc”已经存在,所以没有必要生成,例如,“p2ccbuffer”。
3.在时间(t+2)处,“s2val”被译码并生成“s2val_one_bit”,是一个只有一个位设置的值。这2个信号被复用,生成“s2val_new”。只有实行一个BBIT指令,“s2val_one_bit”值才会被选定;否则该复用选择“s2val”。在块“bigalu”内,“type_decode”这一处理根据当前存在的是BRcc指令还是BBIT指令,选择“arith”块1502或“logic”块1504以执行操作(参见图15)。“alurflags”1506内的标志信号通常被锁存入“aux_regs”块内的“aluflags”。但是,在这种情况下,需要一个回到阶段2的捷径,以便在不引入一个阻塞的情况的允许一个分支转移判断。在“rctl”块1410(参见图14)中,需要信号“ip2ccbuffermatch”对应“alurflags”和“p3cc”匹配,从而判断是否应该授受该分支转移。还有,提供一个额外输出“docmprel”1412检查信号“p3iw”是否是一个BR或BBIT指令。该“docmprel”信号进入“cr_int”块1414,使“pcen_related”选择“target_buffer”1416作为下一个地址。
4.在时间(t+3)处,“current_pc”(当前程序计数器)具有分支转移目标值并且“p1iw”在那个目标包含该指令。阶段2和阶段3的指令通过对 “p2iv”和“p3iv” 取消断言(de-asserting)被取消。。对“p3killnext”的断言会取消“p3iv”。该断言是通过增加的条件“p3iw=obr AND p2dd=nd”来实现的。类似地,对“p2killnext”的断方将第二延迟槽取消。该断言是通过增加的条件“p3iw=obr OR p3iw=obbit”来实现的。
求反(NEG)指令采用减法(SUB)指令的编码,即,SUB r0、0、r0。因此求反指令被译码为带源双操作数(source two-operand)的减法指令,用来规定被求反的值,并且这也是目的寄存器。在本实施例中,源单操作数(source one-operand)字段的值总为零。
如果源操作数是负的(最高有效位=1),那么实行求反操作;否则允许不改变通过。在本实施例中,该功能在流水线的阶段2和阶段3实施,参见图16。绝对(ABS)指令对带符号32位值实行下列操作:(i)正数不变;(ii)负数要求在源双操作数上实行求反操作。这意味着如果s2_direct 1602的最高有效位(msb)为“1”,那么在s2val上阶段3补入求反操作。但是,如果最高有效位为“0”,那么在阶段3,p3iv=0上将绝对指令取消。这意味着该值已经是一个绝对值,不需要再改变。如图16所示,用于取消阶段的绝对指令的信号为p3killabs 1604。
移位并加/减(扩展)指令采用一个常数,该常数确认立即值在补入加法或减法之前应该移位多少。因此源操作数二可以在实行算术运算之前被左移1到3位。这样就在大多数情况下免去了对长立即数据的需求。移位操作在处理器流水线的阶段3由与“基本”运算器(如下所述)逻辑1702实行,以便在加/减操作之前完成移位,参见图17。
右移并屏蔽(扩展)指令是根据一个5位值进行移位,然后根据另一个4位常数将结果屏蔽,该4位常数定义一个1至16位宽的屏蔽码。这些4位和5位常数被压缩到9位短立即值中。该功能实际上是一个后跟屏蔽处理的桶式移位。以上尽管计算是依次完成的,由于编码操作的原因可以并行完成。可以采用现有的桶式移位器1802(参见图18)完成操作的第一部分;但是,第二部分要求专用逻辑1804。该功能在图示的实施例中被作为桶式移位器扩展的一部分。
这样,如图18所示,右移并屏蔽的子操作码在阶段2被译码并且这将标志出在阶段3的s2val 1806是右移并屏蔽指令控制的一部分
硬件实现
请参阅图19~20,以下对处理器的四阶段流水线(即:取、译码、执行和写回阶段)内的组合16/32位ISA的硬件实现进行说明。如图19所未,与现有技术的结构相比主要的不同在于处理器的指令高速缓冲存储器1902和阶段2的1904,该1904实行从核心寄存器文件1906取操作数。在实施例中提供了模块1908,在此称之为“指令调整器”(instruction aligner)。图示实施例中的该调整器1908向处理器的阶段1提供一个32位指令和一个16位指令。这些指令中仅有一个是有效的,由阶段1的解码逻辑(图中未示)来确定。为寄存器文件1906输入端的操作码取逻辑提供一个额外的复用器2002(参见图20),使其根据16位指令和32位指令之一选择适当的操作数。
指令调整器1908还被配置为生成一个信号2004用来规定哪条指令是有效的,即,32位或16位。当进行16位存取或未对齐的存取时,其包含一个内部缓冲区(实施例中为16位宽),这样可以保持***的最快存取。这基本上意味着仅使用取出的32位指令的一半的指令需要一个缓冲器。因此,即使需要取两个长字时,一条越过一个长字边界的指令也不会导致流水线阻塞。
处理器的第二阶段还被配置为:为分支转移生成目标地址的逻辑包括一个32位加法器和控制逻辑以便支持新指令、比较并分支转移指令。除了用于这些指令的移位和屏蔽逻辑之外,ALU阶段还支持预先/后递增逻辑处理器的写回阶段基本没有改变,因为本发明的ISA不采用额外写回模式。
代码压缩的集成
本发明的代码压缩方案需要对与内核相关的配置文件进行正确的配置;例如,在图21所示的处理器设计层次内quarc级2102以下的配置。流水线阶段1和阶段2内的控制和数据路径被专门配置,并且32/16位ISA的指令和扩展被集成了。例如,在如图21所示的ARCtangent处理器中,核心配置中受到影响的主模块有:(i)arcutil,extutil,xdefs(对于32位ISA的寄存器、操作数和操作码映射,需要合适的常数);(ii)rctl(支持额外指令格式的配置);(iii)coreregs,aux_regs,bigalu(在某些情况下某些基本方案(basecase)指令可导致对这些文件的修改);(iv)xalu,xcore_regs,xrctl;xaux_regs(移位并相加扩展要求对这些文件正确的配置);和(v)asmutil,pdisp(ISA流水线线显示机制的配置).此外,新的扩展指令要求正确配置的扩展占位符(placeholder)文件;即,xrctl,xalu,xaux_regs,and xcoreregs。
这些块被划分入这些相应的模块中,允许在不需要过量越界优化的情况对内部关键路径的优化。这些扩展文件、控制、运算器、辅助和寄存器的每个父模块都在内部被串行化(flattened),以便协助合成处理。特别是图21所示的层次结构中,所有在控制、寄存器、辅助和运算器模块之下的块都被串行化了。
以下参考图22对本发明的指令译码、执行、写回和取操作界面进行详细说明。
在图22所示的实施例中,处理器的第二阶段2202除生成分支转移操作的目标地址外,还从寄存器文件1906中选择操作数。在这一阶段,控制单元(rctl)标志出下一个长字应该是长立即数据,并且在阶段1将这一点向调整器1908发送信号(参见图19)。LD生成后,第二阶段2202还对装入记分板单元(lsu)进行更新。
参见图21,在表10中显示了本实施例中为了支持联合的32/16位ISA经过重新配置的子模块。
表10
子模块 | 信号 |
Rctl | p2iv,en2,mload,mstore,p2limm |
cr_int | currentpc,en2,s1val,s2val |
Lsu | en2,mload,mstore |
aux_regs,pcounter,flags | currentpc,en2 |
loopcnt | currentpc |
int_unit | p2iv,p2int,en2 |
sync_regs | en2 |
用于为分支转移生成目标地址的流水线阶段2 2202的加法器4006(参见图40)被改造,使其变为32位宽。还存在译码阶段配置的其他方面支持相加指令格式。例如,比较/分支转移指令必需配置控制逻辑,以使延迟槽机制保持不变。因此,在知晓条件是否为真之前就会在阶段2分支转移,因为在运算器阶段对此进行了评估。这样,被证明非真的比较会导致跳转的取消,并且将流水线退回至分支转移之后的那一点,并从那一点开始继续执行。
此处描述的RISC处理器的流水线的第四阶段是一个写回阶段,操作的结果,如返回装入和逻辑操作结果,被写入寄存器1906;例如:LD和MOV。经过配置的用来支持联合32/16位ISA(带相关信号)的子模块如下:(i)rctl-p3iv,en3,p3_wben,p3lr,p3sr;(ii)cr_int-next_pc,en2;(iii)aux_regs,pcounter,flags-p3sr,p3lr,en3;(iv)loopcnt-next_pc;(v)int_unit-p3iv,en3;(vi)bigalu-en3,mc_addr,p3int;and(vii)sync_regs-en2。
额外的复用逻辑被加在流水线阶段3的32位加法器之前,用来生成地址和其他数学表达式。这包括对指令的屏蔽和逻辑移位,例如,移位加(SADD)、移位减(SSUB)。运算器的输出还包括用于进栈/出栈指令的递增模式的额外的复用逻辑。本技术领域的普通技术人员根据本描述可以很容易地生成该逻辑,因此不再作更详细的说明。
此处所说的处理器的中断被配置为:当开始使用一个中断时,硬件既存储新的状态寄存器(映射到辅助寄存器空间)内的值,也存储32位PC。应用于中断的寄存器如下:
(i)1级中断
-32位PC-ILINK1(r29)
-状态信息-Status_il1
(ii)2级中断
-32位PC-ILINK2(r30)
-状态信息-Status_il2
状态寄存器的格式与状态32寄存器的定义方式一样。
为了支持本发明的联合32/16位ISA需要对处理器界面的取指令(ifetch)进行配置。下面将对此详细描述。
表11
信号名称 | 输入/输出 | 总线宽度 | 内容描述 |
do_any | input | 1 | 一个挑转/分支转移已经被提取。 |
en1 | output | 1 | 这是流水线阶段1的方法。 |
ifetch | output | 1 | 这是来自处理器的取指令信号。 |
ivalid | input | 1 | 从高速缓冲器返回的指令是有效的32位。 |
ivic | output | 1 | 无效的指令重设高速缓冲器和调整器。 |
inst_16 | input | 1 | 从高速缓冲器中返回的指令是16位。 |
next_pc | output | 31 | 这是被处理器要求的指令的地址。 |
p1iw | output | 16 | 32位指令返回到处理器。 |
p2limm | output | 1 | 下一个长字是长的立即数据。 |
下面对寄存器文件、程序计数器、相关中断逻辑在取指令阶段为了使用而生成的信号进行详细描述。
图23显示了一个阶段1的数据路径。它存在于指令高速缓冲存储器1902(即,代码RAM等)和阶段2的控制单元rctl内的寄存器p2iw_r之间。如图23所示,调整器1908将出入指令高速缓冲存储器的信号格式化。尽管由于调整器块包括在内,某些信号在控制块中被重命名(即,p1iw信号变为p0iw;无效信号被拆分为ivalid0),指令高速缓冲存储器1902的行为保持不变
来自调整器1908的16位ISA指令字的格式被进一步格式化,使其扩展到填满32位值,该值被控制单元读出。将16位指令扩展到32位指令长字空间的逻辑是需要的,因为采用了同样的寄存器文件,并且在16位ISA内编码的源操作数不是一个32位ISA的直接映射。请参阅表11,是16位和32位ISA之间的寄存器编码。在本实施例中,16位ISA被映射到32位指令长字的头16位中。16位ISA向32位指令的映射的编码使阶段2的解码处理与现有技术手段相比要简单,这是因为操作码字段总是在[31:27]之间。源寄存器位置按如下方式进行编码:
(i)源1地址寄存器
-26:24(16位)
-26:24 & 14:12(32位)
(ii)源2地址寄存器
-23:21(16位)
-5:0(位)
对16位ISA剩余的编码(不包括操作码)被定义在[20:16]之间。图24显示了扩展处理过程。包括了指令高速缓冲存储器的阶段1的数据路径不变。特别是,在图中所示的实施例中,16位指令的下8位被映射到32位寄存器文件p2iw的位[23:16]。上8位被用于保留操作码,下2位被用于源操作数1向寄存器文件编码。操作码被移动,驻留在数位位置[31:27],使其与32位ISA相配。16位ISA的源操作数被移至数位位置[14:12],[26:24]和[11:6]。
对寄存器文件的接口也在阶段2生成操作数时被改造了。下文对该逻辑进行描述。
相对于SP/GP的LD-从栈指针或全局指针相对取地址的16位LD编码在指令中被暗示了。这意味着必需将该编码转译为符合32位ISA所规定的编码。用于GP的LD相对的(r26)为操作码0x0D,并且用于SP相LD相对的(r28)为操作码0x17(参见图25)。
进栈/出栈指令不规定栈指针寄存器内的地址应该被自动递增(或递减)。这是指令自身固有的,因此对于进栈/出栈指令存在一个向SP的写回。
操作数寻址-从寄存器文件、扩展、长立即数据得到指令所需要的操作数,或者操作数就作为一个常数嵌在指令当中。用于源单字段的寄存器地址(sla)来自如下的资源:
1.plc_field(pliw[11:6])-32位指令(plopcode=0x04,0x05)当MOV,RCMP若RSUB时
2.p1hi_reg16(p1iw[18:16]&p1iw[23:21])-16位指令(plopcode=0x0E)需要向所有64核心寄存器。
3.rglobalptr(0x1A)-全局指针操作(plopcode=0x19)
4.rstackptr(0x1C)-全局指针操作(plopcode=0x18)
5.plb_field(p1iw[14:12]&p1iw[26:24])-对于抽有其他空调。获取源二字段的取寄存器地址(fs2a)所需要的逻辑来自不同的源,如下所示:
1.plb_field(p1iw[14:12]&p1iw[26:24])-32位指令(plopcode=0x04,0x05)当它是MOV,RSUB时.为16位指令(plopcode=0x0E),0x0F)
2.plhi_reg16(p1iw[18:16]&p1iw[23:21])-16位指令(plopcode=0x0E)要求为MOV和CMP指令存取所有64核心寄存器的位置。
3.rblink(0x1F)-分支转移并连接寄存器更新(plopcode=0x0F)16位跳转并连接指令
4.plc_field(p1iw[14:12]&p1iw[26:24])-所有其他指令
阶段1控制路径
被配置为支持联合ISA处理器流水线阶段1的控制信号如下:
表12
控制信号 | 内容描述 |
en1 | 使寄存器能更新信号到一个阶段。例如:p1iw |
ifetch | 为下一个指令寻问信号。 |
p2limm | 当下一个来自指令高速存储器的长字为长立即数据时为真 |
pcen | 更新程序计数器的激活,例如:next_pc |
pcen_niv_nbrk | 能够更新程序计数器,例如:next_pc,不使用BRK,或不将其作为qualifiers。 |
ipending | 未决的指令信号 |
brk_inst_non_iv | 在阶段1倍探测到的BRK指令。 |
被配置过的以支持子模块的联合ISA为rctl,lsu和cr_int。下面对前述的控制信号进行更为详尽的说明。
流水线激活(en1)-如果下列任一条件为真时,流水线阶段1的寄存器的激活为假:(1)处理器核心暂停,en=0;(2)阶段1的指令无效,NOT(ivalid);(3)检测到中断点或有效行为点,因此阶段2必需暂停,同时其余的阶段必需被清除,break_stage1_non_iv=1;(4)单一指令步骤已经将指令移动到了阶段2并且在阶段1没有依存,p2step AND NOT(p2p1dep)AND NOT(p2int);(5)阶段1内没有指令,(p2int OR p2iv)AND p2_real_stall;or(6)接受BRcc指令失败,未能将延迟槽内的指令取消。
对于一个中断点或一个有效行为点被检测到的情况,break_stage1_non_iv,根据图26中所定义的信号,流水线阶段1被禁止。信号i_brk_decode_non_iv是断开指令在流水线阶段1来自16位和32位指令格式的p1iw_aligned的译码。signal p2_sleep_inst是对流水线阶段2来自32位指令格式的p2iw(并且为p2iv限定)的休眠(SLEEP)指令的译码。
图27是显示当实行单一指令步骤时,流水线阶段1的禁止逻辑的图。在图示实施例中,主机已经实施了一单一指令步骤操作并且阶段2的指令在阶段1没依存关系。类似地,流水线激活在阶段1没有指令时是不活动的(如图28所示)。
取指令(ifetch)-取指令(ifetch)信号限定处理器要执行的下一条指令(next_pc)的地址。当发生由于处理器、休眠、断开或行动点,即i_break_stage1_non_iv 2902导致的暂停时,用于清除流水线的信号被特别地适合于16/32位ISA
长立即数据(p2limm)-本发明的处理器的实施例支持长立即数据格式;当信号p2limm为真时发出信号。图30显示了实施这一功能的逻辑3000。源寄存器(s1en,s2en)的激活的分离是由阶段2获得的并且包括16位指令格式。请注意,如果操作码(p2opcode)利用源一和源二字段规定的许可的寄存器的内容,图30所示逻辑输入3002、3004被设定为“1”
程序计数器激活(pcen)-图31显示了程序计数器激活逻辑3100。程序计数器(pcen)在下列情况不激活:(i)处理器暂停,en=0;(ii)阶段1内的指令无效,NOT(ivalid);(iii)检测到一个断开点或一个有效的行动点,剩余阶段只能被清除,break_stage1_non_iv;(iv)一个单一指令步骤已经将指令移动到了阶段2并且在阶段1没有依存,inst_stepping;(v)在阶段1检测到了一个中断,p1int,因此当前指令应该被取消,使正确的PC存储为i1ink寄存器;(vi)在阶段2检测到了一个中断,p2int,因此阶段1的指令应该被取消;或(vii)在阶段2存在一条指令,p2iv,并且阶段1的指令由于长立即数据的关系应该被取消。
在另一配置中(参见图32),PC激活(pcen_non_iv)对于来自阶段1的指令有效(ivalid)信号不限定。如图31的实施例那样,该激活被优化时序。
指令未决(ipending)-ipending信号表明当前有一条指令正在被取出。当取指令(ifetch)信号被设定时将一条指令称为未决,并且当一指令有效(ivalid_16,ivalid_32)信号被设定并且ifetch为不活动的或高速缓冲存储器正在被无效时,这条指令才被清空。图33显示了实施该功能的逻辑。
断开(BRK)指令-断开指令使处理器核心在流水线阶段1对指令进行译码时发生阻塞。图34是一个断开指令译码逻辑3400。阶段2的指令被清除(flush),前提是这些指令在阶段1不存在任何依存;例如,断开指令是一个待执行分支转移的一个延迟槽。断开指令从p1iw_aligned信号被译码,该信号通过前述的指令调整器1908(参见图19)被提供给处理器。在本实施例中,对断开指令有两个编码,即,一个为ivalid限定,另一个不限定。
请参阅图35~36,对本发明的流水线清除机制进行详细说明。本实施例中使用的用于在阶段1(或引发了行动点(actionpoint))存在一个断开指令时对处理器流水线进行清除的机制使阶段2和阶段3的指令在停止前完成。任何在阶段1存在依存的阶段2的指令,例如:延迟槽或长立即数据等都被挂起,直到处理器通过清空暂停标志被激活。实行这一功能的逻辑由阶段2和3的控制信号所使用。清除流水线的信号如下:
1.i_brk_stage1-阶段1的Stall信号(图35).
2.i_brk_stage1_non_iv-阶段1的Stall信号(参见图35).
3.i_brk_stage2-阶段2的Stall信号(参见图36).
4.i_brk_stage2_non_iv-阶段2的Stall信号(参见图36).
5.i_p2disable-阶段2的有效信号(参见图36).
-阶段2的指令在阶段1存在依存关系(break_stage2)
-激活一个行为点(或断开)并且阶段2被允许向前移动(en2)
-激活一个行为点(或断开)并且阶段2该指令为无效(NOT p2iv)
6.i_p3disable-阶段3的有效信号(参见图40).
-阶段2的指令无效(i_p2disable_r)并且阶段3指令也无效(NOTp3iv)
-阶段2的指令无效(i_p2disable_r)并且阶段3的指令被激活(en3)下面对进一步对支持前述的联合32/16位ISA所需要指令译码接口的配置进行更为详尽的说明。表13定义了取指令接口的信号。
表13
信号名称 | 输入/输出 | 总线宽度 | 内容描述 |
aluflags | input | 4 | 这些是阶段3内的零、负、进位、溢出标志位的寄存方式。 |
brk_inst | output | 1 | 一个BRK指令在阶段1已经被探测到。 |
dest | output | 6 | 对于一个指令结果的目的地寄存器 |
desten | output | 1 | 目的地存储器的激活。 |
dojcc | output | 1 | 执行一个跳转。 |
dorel | output | 1 | 执行一个相对的跳转。 |
en2 | output | 1 | 流水线阶段2的激活。 |
fs2a | output | 6 | 操作数2的源寄存器。 |
holdup12 | input | 1 | 这是被lsu产生的在阶段1和2的迟延信号。 |
mload2 | output | 1 | 在阶段2,LD被请求。 |
mstore2 | output | 1 | 在阶段2,ST被请求。 |
p2_alu_cc | output | 1 | 为了检测MAC/MUL指令,ALU运行条件码字段出现在阶段2。 |
p2bch | output | 1 | 阶段2内有一个转移。 |
p2condtrue | output | 1 | 这来自于阶段2内的条件代码的结果。 |
p2cc | output | 4 | 这是条件代码段。 |
p2opcode | output | 5 | 指令的opcode。 |
p2int | input | 1 | 中断进入阶段2。 |
p2iv | output | 1 | 阶段2内指令有效。 |
p2jblcc | output | 1 | 存在一个转移和连接指令。 |
p2killnext | output | 1 | 阶段2内有一个转移/跳转,延迟槽将被终止。 |
p2ldo | output | 1 | 这是一个阶段2内的LD操作。 |
p2lr | output | 1 | LR在阶段2内被调用。 |
p2offset | output | 20 | 这是一个转移指令的偏移。 |
p2q | output | 5 | 条件代码段。 |
p2setflags | output | 1 | 当前指令的标志位被激活。 |
p2shimm | output | 1 | 有一个短即时数据。 |
p2shimm_data | output | 13 | 有一个来自于p2iw_r的短即时数据。 |
p2st | output | 1 | 阶段2内有ST指令。 |
s1a | output | 6 | 操作数1的源寄存器。 |
s1en | output | 1 | 源寄存器2的激活信号。 |
s2en | output | 1 | 源寄存器1的激活信号。 |
xholdup112 | input | 1 | 阶段1和2的扩展停止信号。 |
x_idecode2 | input | 1 | 这是扩展的解码。 |
xp2idest | input | 1 | 这表示目标段内明确的寄存器不会被写入。 |
xp2ccmatch | input | 1 | 信号来自于阶段2内的扩展条件代码单元,而阶段3的alu标志位对它们进行一些操作来产生此信号。 |
x_p2nosc1 | input | 1 | 表示fs1a内的寄存器不允许捷径 |
x_p2nosc2 | input | 1 | 表示s2a内的寄存器不允许捷径 |
流水线阶段2的译码逻辑对下列模块产生影响:
1.rctl-拆分指令字的编码以代表源/目的地、操作码、子操作码字段等
2.lsu-为阶段和阶段2生成阻塞逻辑(支持12)
3.cr_int-将新指令逻辑位移之外生成操作码和写回。
4.aux_regs-对PC/Status寄存器进行改信。
对于阶段2数据路径的功能的主要考虑包括(i)生成阶段3的操作数;(ii)生成用于跳转/分支转移的目标地址;(iii)更新程序计数器;和(iv)装入计分板考虑。作为处理器组成部分的指令模式如屏蔽、比例寻址、和额外立即数据格式需要为寻址、分支转移和源操作数选择而复用。以下对支持逻辑进行描述。
字段提取-表14显示了从图示实施例的32位指令长字提取的信息:
表14
字段 | 信息 |
目标(p2a_field)段 | p2iw_r[5:0] |
地址写回(p2a_fieldwb_r)段 | p2iw_r[:] |
源1操作数(p2b_field_r)段 | p2iw_r[:] |
源2操作数(p2b_field_r)段 | p2iw_r[:] |
主操作码(p2opcode)段 | p2iw_r[31:27] |
次操作码(p2subopcode)段 | p2iw_r[21:16] |
当i_enable2被设置为真时,这些信号被锁存入阶段3。
取操作数-指令要求的操作数是从寄存器文件、扩展、长立即数据等取得的,或作为一个常数被嵌入指令本身。图37显示了从源一字段获取操作数(s1val)所需要逻辑3700。该操作数从各种来源取得:(i)核心寄存器提供r0~r31;(ii)占用r32~r59的用于扩展的x1data;(iii)存取r60时的loopcnt_r寄存器;(iv)寄存器r62被编码时被选定的长立即数(p1iw_aligned);(v)当寄存器r63被编码时PC的只读值被选定;(vi)当激活捷径(sc_load2)并且标志rct_fast_load_returns都被设定时选定回装(drd);以及(vii)阶段3带来的捷径(p3res_sc)。
图38显示了从源二字段获取操作数(s2val)所需要的逻辑3800。该操作数是从下列不同的源获得的:(i)核心寄存器文件提供r0~r31;(ii)占用r32~r59的用于扩展的x2data;(iii)存取r60时的loopcnt_r寄存器;(iv)长立即(p1iw)在寄存器r62被编码时被选定;(v)当寄存器r63被编码时,PC的只读值被选定;(vi)立即数据类型(shimmx)由于在指令s2_shimm内根据操作码被明确地定义;(vii)当捷径被激活时(sc_load2)回装(drd)被选定并且标志rct_fast_load_returns均被设定;(viii)当捷径被激活时阶段3产生的捷径(p3res_sc),sc_reg2为真;(ix)当JL或BL被接受时程序计数+4(或对于16位指令加2)被选定,即,s2_pp被设定;(x)当阶段2中存在一个中断时程序计数器(currentpc_r)被选定,即,s2_currentpc被设定;及(xi)当阶段中存在一个有效ST时(p2iv AND p2st)最终复用器在锁存前选定ls_shimm_sext,否则缺省到s2tmp。
源操作数2的比例寻址-图39所示的实施例中的比例寻址模式在处理器的阶段2被实行并被锁存到s2val。对于16位ISA该比例寻址模式在操作码字段中被编码。短立即值被被从0到2位置定比例:(i)LD/ST与shimm(LDB/STB);(ii)LD/ST与shimm定比例的1位左移(LDW/STW);和/或(iii)LD/ST与定比例的2位左移(LD/ST)
参见图39,ALU指令的短立即数据-ALU操作短立即数据的选择见表15
表15
操作码 | 数据/操作 |
操作码0x05~0x7 | 当p2iw_r[23:22]=01或p2iw_r[23:22]=11时,无符号的6位常数。 |
操作码0x05~0x7 | 当p2iw_r[23:22]=10时,带符号的12位常数。 |
操作码0x0D | 与不带符号的9位常数进行ADD操作。 |
操作码0x0E | 与不带符号的3位常数进行ADD/SUB/ASL/ASR操作 |
操作码0x18 | 与不带符号的5位常数进行ASL/ASR/LSR操作 |
操作码0x17/0x1C/0x1D | 与不带符号的7位常数进行ADD/SUB/MOV/CMP操作 |
分支转移地址(目标)-内建子模块cr_int提供用于跳转和分支指令的地址生成逻辑4000(参见图40)。该模块接受来自分支转移指令偏移的地址并将其加入currentpc寄存的结果。currentpc_r的值在加偏移量时被四舍五入至最接近的长字地址。所有的分支转移目标地址都是16位对齐的,而分支转移和连接(BL)目标地址是32位对齐的。这意味着对16位对齐的存取的分支转移的偏移必须向左移位一个位置并对于32位对齐的存取向左移位两个位置。该偏移量还是符号扩展的。
下一程序计数(next_pc)-程序计数的下一值是根据当前指令和数据编码类型来确定的(如图41中所示的下一PC逻辑4100)。对于下一PC值产生影响的主要有:(i)跳转指令(jcc_pc);(ii)分支转移指令(target);(iii)中断(int_vec);(iv)零开销循环(loopstart_r);和(v)主存取(pc_or_hwrite)
-核心寄存器文件提供r0至r31
-占用r32~r59的用于扩展的x1data
-存取r60时loopcnt_r寄存器
当寄存器r62被编码时选择长立即数(p1iw)
-当寄存器r63被编码时选定PC的只读值(currentpc_r)
-根据子操作码对扩展的立即数据类型(shimm_sext)加符号
-当激活捷径(sc_load2)并且flag rct_fast_load_returns都被设定时选择回装(drd)
-阶段3的捷径结果(p3res_sc)
为PC生成逻辑4200的下一级复用(参见图42所示的配置)向所有逻辑相关的指令提供PC激活信号,即,pcen_niv_nbrk,包括:(i)跳转指令(jcc_pc),当dojcc为真时;(ii)中断向量(int_vec),当p2int为真时;(iii)分支转移目标地址(目标),当dorel为真时;(iv)比较和分支转移目标地址(target_buffer),当docmprel为真时;(v)loopstart_r,当doloop被设定时;和(vi)否则移动到下一指令(pc_plus_value)。请注意,向下一指令递增取决于当前指令的大小,因此相应地16位指令要求递增2,32位指令要求递增4。PC的选择处理的最终部分是如图42所示的pcen_related 4204和pc_or_hwrite 4206之间。在图示的实施例中,这些选择是基于下列标准的:
1.pcen_related 4204当:
-阶段1未检测到BRK指令i;
-阶段1的指令有效(ivalid);及
-程序计数器被激活(pcen_niv_nbrk)
2.currentpc_r[31:26]和h_dataw[23:0]4208,当存在从主机写入状寄存器(h_pcwr)时
3.h_dataw[31:0]4210,当存在从主机写入32位PC时(h_pc32wr)
4.currentpc_r4212,适用于所有其他情况
短立即数据(p2shimm_data)-短立即数据(p2shimm_data)是从指令本身中提取出来然后与阶段3中使用的第二操作数(s2val)合并。该短立即数据是根据主次操作码的标准从指令类型中提取的。该短立即数据被送到s2val的选择逻辑。
表16
指令类型 | 操作码 | 子操作码 | 短立即数位置 |
LD(op_ld) | 0x02 | N/A | sxt(p2iw_r[g]&p2iw_r[23:16],13) |
ST(op_st) | 0x03 | N/A | sxt(p2iw_r[8]&p2iw_r[23:16],13) |
ADD(op_fmt1) | 0x04 | p2iw_r[23:22]=0x1(p2format_r=fmt_u6) | ext(p2iw_r[11:6],13) |
ADD(op_fmt1) | 0x04 | p2iw_r[23:22]=0x3(p2format_r=fmt_cond_reg | ext(p2iw_r[11:6],13) |
ADD(op_fmt1) | 0x04 | p2iw_r[21:16]=0x2(p2format_r=fmt_sl2) | sxt(p2iw_r[11:0],13) |
ADD/ASL(op_16_arith) | 0x0D | N/A | ext(p2iw_r[20:16],11) |
LD(op_16_ld_u7) | 0x10 | N/A | ext(p2iw_r[20:16],13)&“00” |
LDB(op_16_ldb_u5) | 0x11 | N/A | ext(p2iw_r[20:16],13) |
LDW(op_16_ldw_u6) | 0x12 | N/A | ext(p2iw_r[20:16],13)&‘0’ |
LDWX(op_16_ldwx_u6) | 0x13 | N/A | ext(p2iw_r[18:16],13)&‘0’ |
ST(op_16_st_u7) | 0x14 | N/A | ext(p2iw_r[20:16],13)&“00” |
STB(op_16_stb_u5) | 0x15 | N/A | ext(p2iw_r[20:16],13) |
STW(op_16_stw_u6) | 0x16 | N/A | ext(p2iw_r[20:16],13)&‘0’ |
ASL/ASR/SUB/BMSK/BCLR/BSET | 0x17 | p2iw_r[23:21]=0x7(p2subopcode3_r=op_16_btst) | ext(p2iw_[20:16],13) |
LD/ST/POP/PUSH(op_16_sp_rel) | 0x18 | N/A | ext(p2iw_r[20:16],11)&“00” |
LD(op_16_gp_rel) | 0x19 | N/A | sxt(p2iw_r[22:16],11)&“00” |
LD(op_16_ld_pc) | 0x1A | N/A | ext(p2iw_r[23:16],11)&“00” |
MOV(op_16_mov) | 0x1B | N/A | ext(p2iw_r[23:16],13) |
ADD(op_16_addcmp) | 0x1C | N/A | ext(p2iw_r[22:16],13) |
BRcc(op_16_brcc) | 0x1D | N/A | sxt(p2iw_r[22:16],12)&‘0’ |
Bcc(op_16_bcc) | 0x1E | N/A | ext(p2iw_r[24:16],12)&‘0’ |
Bcc | 0x1F | N/A | sxt(p2iw_r[21:16],11)&‘0’ |
符号扩展(i_p2sex)-回装的符号扩展(i_p2sex)按如下生成:(i)op_16_ldwx_u6(p2opcode=0x13)-符号扩展,当和6位不带符号数据执行LDW指令时;(ii)对于所有其他16位LD操作停用符号扩展;(iii)LD(p2opcode=0x02)-基于p2iw_r[6]符号扩展装入。
状态及PC辅助寄存器-图示实施例的状态寄存器和32位PC寄存器在合适时采用相同的寄存器;即,新寄存器的位置的当前状态寄存器内的PCPC32[25:2]。
向状态寄存器4300(参见图43)的一个写入是指新PC32寄存器4400(图44)在剩余部分不变的情况下仅在PC32[25:2]之间更新。ALU标志、中断激活和暂停标志也在状态32位寄存器4500中更新(图45)。向PC32寄存器的写入还反向工作,PC[25:2]在状态寄存器4300中更新并且剩余的字段保持不变。状态32寄存器4500的行为与ALU标志更新、中断激活和暂停标志相同。所有在此讨论的寄存器都是辅助映射的。
用于更新上述寄存器的数据路径4602,4604,4606参见图46。状态寄存器4300在如下情况下通过主机更新:(i)向状态寄存器4300实行一个写操作(h_pcwr);或(ii)向PC32寄存器440实行一个写操作(h_pc32wr)。其他情况下将PC的当前值向前传送。
当下列情况时暂停标志被更新:(i)接收到一个外部暂停信号,例如i_en=0;(ii)该暂停位被写入调试寄存器(h_db_halt),例如,i_en=0;(iii)实行一个复位(i_postrst),并且处理器被设定为用户定义的暂停状态,例如,i_en=arc_start;(iv)向状态寄存器4300实行一个主机写入(h_en_write),例如,i_en=NOT h_data_w(25);(v)向状态32寄存器4300实行一个主机写入(h_en32_write),即,i_en=NOT h_data_w(25);(vi)实行一个单循环步骤操作(l_do_step AND NOT do_inst_step),即,i_en=dostep;(vii)实行一个指令步骤操作(do_inst_step),即,i_en=NOT stop_step;(viii)引发一个来自行动点的处理器的暂停,存在一个BRK指令,即,i_en=0;或(ix)实行一个标志操作(doflag AND en3),并且轶标志被设定为适当值,即,i_en=NOTs1val(0)。否则,将位设定为暂停位的上一个值,或实行一个单循环步骤;即,i_en=i_en_r OR step。
采用类似的方式更新ALU标志,当(i)向状态寄存器实行一个主机写入(hostwrite)即,i_aflags=h_data_w(31:28);(ii)向状态32寄存器实行一个主机写入(host32_write)即,i_aflags=h_data_w(31:28);(iii)流水线阶段3被迟延(NOT en3),即,i_aflags=i_aluflags r;(iv)在阶段3内有JLcc.f(ip3dojcc),因此更新标志,即,i_aflags=s1val[31:28];(v)已经执行了一个激活标志设定的扩展指令,即,i_aflags=xflags;(vi)实行一个标志操作(doflag AND NOT s1val(0)),并且设定为适当值的ALU标志,即,i_aflags=s1val[7:4];或(vii)一个激活标志庙宇的有效指令已经被执行(alurload),即i_aflags=alurflags。否则,ALU标志被设定为ALU标志的上一个值,即,i_aflags=i_aluflags_r。
阶段2控制路径
被配置为支持16/32位ISA的处理器阶段2的控制信号如表17所示:
表17
控制信号 | 内容描述 |
en2 | 阶段2的激活 |
p2iv | 阶段2指令有效 |
s1a,fs2a | 寄存器文件的源地址 |
pcen | 更新程序计数器的激活 |
p2killnext | 阶段2内的结束指令——停止阶段1和2,中止12 |
ins_err | 指令错误 |
h_pcwr,h_pc32wr,etc | 其它未知的控制信号 |
以下对前述的信号进行更为详细的描述。
如果以下条件中任何一个为真,那么阶段2流水线激活(en2)-流水线阶段2寄存器的激活en2为假:(1)处理器核心被暂停,en=0;(2)阶段3的一个有效指令被阻塞(held-up);(3)由于延迟装入造成指令引用的寄存器被阻塞,holdup12 OR hp2_ld_nsc;(4)扩展要求阶段2被挂起,xholdup12=1;(5)阶段2的中断在发出取中断向量之前等待未决指令的取操作,p2intAND NOT(ivalid);(6)阶段2的分支转移等待阶段1的有效指令(延迟槽),i_branch_holdup2 AND(ivalid);(7)阶段2的指令要求来自阶段1的长立即数,ip2limm AND(ivalid);(8)阶段3的指令设定标志,并且阶段的分支转移取决于迟延阶段1和2,即i_branch_holdup2;(9)操作码无效(p2iv=0)并且不是由于中断引起的,(p2int=0);(10)如果阶段1中存在分支转移/跳转指令,一行动点(或BRK)被引发,该行动点(或BRK)使指令不能进入阶段3;(11)在阶段2存在一个分支转移/跳转(I_p2branch),并在阶段1具有一个没有被取消的(NOT p2killnext)延迟槽依存(NOT p2limm ANDplp2step);(12)在阶段3比较/分支转移指令的比较结果为假,导致阶段2的指令被迟延(cmpbcc_holdup12);或(13)在阶段2检测到一个寄存器的条件跳转,对于该跳转需要来自阶段3的一个指令的捷径。以上这些不可得到,因此将流水线迟延(ip2_jcc_scstall)。当指令引用的寄存器由于延迟装入(3)的原因被阻塞时,holdup12 OR hp2_ld_nsc,流水线阶段2根据图47所未的关门逻辑4700中定义的信号被停用。
要求阶段3操作的标志状态的一个阶段2分支转移将会需要将阶段1和2迟延(暂停);利用图48所示的逻辑4800实施该迟延,此条件不适用于BRcc指令。
停用机制在当有条件转移带寄存器包含该地址时被激活,
用于核心寄存器中选择操作数1(sla)的地址是由下表(表18a)确定的:
表18a
源(Source) | 内容 |
C-field(i_p2c_field_r) | 当MOV、RSUB和RCMP指令的主操作码是0x04(p2opcode_r+op_fmt1)时,对于32位指令。 |
16-bit Highregister(i_p2hi_reg16_r) | 当MOV指令的源地址在0与63之间时,主操作码是0x0D(p2opcode_r=op16_mv_add)。 |
0x1A(rglobalp) | 对与全局指针相对应的LD指令,主操作码是0x19(p2opcode_r=op_16_gp_rel)。 |
0x1C(rstackp) | 对与堆栈指针相对应的LD、ST、PUSH和POP指令,主操作码是0x18(p2opcode_r=op_16_sp_rel)。 |
B-field(i_p2b-field_r) | 对所有其它的32/16位指令 |
从核心寄存器选择操作数2的地址是由下表(表18b)中的方式决定的。
表18b
控制信号 | 内容描述 |
B-field(i_p2b_field_r) | 当RSUB和RCMP指令的主操作码是0x04(p2opcode_r=op_fmt1)时,对于32位指令。当寄存器清除的SUB.NE的单操作数指令(p2subopcode2_r=so16_sop)的主操作码是0x0F(p2opcode_r=op_16_alu_gen)时,对于16位指令。当MOV指令的目标地址在0与63之间时,对于主操作码是0x0D(p2opcode_r=op_16_mv_add)的情况。 |
16-bit Highregister(i_p2hi_reg16_r) | 当源地址在0和63之间时,MOV或CMP指令的主操作码是0x0D(p2opcode_r=op_16_mv_add)。 |
0x1F(rblink) | 当跳转的单操作数指令(p2opcode_r=op_16_alu_gen)和零操作数指令(p2subopcode2_r=so16_zop)(如JEQ、JNE、J和J.D.)的主操作码是0x0F(p2opcode_r=o_16_alu_gen)时,对于16位指令。 |
C-field(i_p2c_field_r) | 对所有其它的32/16位指令 |
目的地址(dest)-用于向核心处理器写回的目的地址(dest)被送入装入记分板单元(lsu),并至阶段3的ALU。这些目的地址是基于指令编码的。
表19
控制信号 | 内容 |
B-field(i_p2b_field_r) | 当MOV、除格式外的单操作数指令(i_p2subopcode_r=so_sop)、带符号的12位以及条件执行的主opcode为0x04(p2opcode_r=op_fmt1)时,对于32位指令。当目标地址在0与63之间的MOV指令的主opcode是0x0F(p2opcode_r=op_16_alu_gen)及当此主opcode是0x0D(p2opcode_r=op_16_ mv_add)时,对16位指令。对与堆栈指针相对应的LD、ST、PUSH和POP指令,主opcode是0x18(p2opcode_r=op_16_sp_rel)。当不执行位测试操作(p2subopcode3_r=so16_add_u7)时,16位移位/减指令的主opcode是ox17(p2opcode_r=op_16_ssub)。对MOV指令而言,16位指令的主opcode是0x1B(p2opcode_r=op_16_mv)。 |
0x0(r0) | 对所有与全局指针对应的指令,主opcode是0x19(p2opcode_r=op_16_gp_rel) |
16-bit High register(i_p2hi_reg16_r) | 对源地址为0至63的MOV或CMP指令,主opcode是0x0D(p2opcode_r=op_16_mv_add) |
C-field(i_p2c_field_r) | 对于主opcodes为0x0D或在0x10与0x16之间的16位LD/ST指令 |
0x1C(rstackp) | 对与堆栈指针相对应的ADD和SUB指令,主opcode是0x18(p2opcode_r=op_16_sp_rel) |
0x3F(rlimm) | 当主opcode是0x0F(p2opcode_r=op_16_alu_gen)时,对于16位指令;当执行零操作数指令(i_p2c_field_r=so16_zop)时,对单操作数指令(p2subopcode2_r=so16_sop) |
A-field(i_p2a_field_r) | 对所有其它32/16位指令 |
阶段2指令有效(p2iv)-用于阶段2的指令有效(p2iv)信号限定每条指令,随着它进入流水线时。当存在迟延时是一个重要的信号,即,阶段2的指令导致迟延并且执行阶段3的指令,这样当阶段2的指令被允许在后面的阶段继续指令时就被无效,因为它已经完成了。阶段2有效信号在下列时刻被更新:(i)阶段2被允许继续,而阶段1被挂起(en2 AND NOT en1),因此阶段2的指令必需被取消,这样当阶段1的指令可用时不再被重新执行,i_p2iv=0;(ii)阶段1被迟延(NOT en1),因此p2iv的状被保留,i_p2iv=i_p2iv_r;或(iii)在阶段1或阶段2内有中断,或有长立即数,或需要取消延迟槽,i_p2iv=0。否则阶段2有效信号被设定到阶段1的指令有效信号,i_p2iv=ivalid。
阶段2内取消下一指令(p2killnext)-利用图50所示的逻辑5000实施取消信号,该取消信号根据所选择的模式将跳转/分支转移的延迟槽内的指令取消。根据下面的标准取消延迟槽:(i)延迟槽被取消并且分支转移/跳转指令被接受;(ii)延迟槽总是被取消并且跳转/分支转移指令不被接受。
指令错误(instruction error)-当软件中断(SWI)指令在阶段2被检测到时生成该错误。这与未知指令中断是相同的,但是本实施例中被赋予了一个特别编码,用以在程序控制下生成此中断。当以下任何为真时引发指令错误:(i)对于32位ISA一个主操作码是无效的并且子操作码也都是无效的(f_arcop(p2opcode,p2subopcode)=0);(ii)一个16位ISA主操作码无效(f_arcop16(p2opcode)=0),并且这不是一个扩展指令(NOT x_idecode2 ANDNOT xt_aluop);(iii)检测到一个SWI指令。当上述任何一个条件为真时,p2iv的状态被传递到instruction_error。
条件代码评价(p2condtrue)-该指令中的条件代码字段被使用,用来规定需要为待执行指令而设定的ALU标志的状态。当条件代码字段内设定的条件与适当的标志设定相匹配时p2ccmatch和p2ccmatch16信号被设定。这些信号被下列相应的32和16位指令的函数所设定:
1.对于32位ISA,p2ccmatch在(f_ccunit(aluflags_r,i_p2q_r)=1)时被设定
2.对于16位ISA,p2ccmatch16在(f_ccunit16(aluflags_r,i_p2q16_r)=1)时被设定
3.如果规定的条件为真并且如下所示,p2condtrue信号激活一条指令的执行。
4.对于分支转移,p2condtrue=‘1’
- 操作码,p2opcode=0x0(op_bcc)
-条件执行,p2iw_r[4]/=0x1
5.对于基本方案指令,p2condtrue=‘1’
-操作码,p2opcode=0x4(op_fmt1)
-条件寄存器操作,p2iw_r[23:22]=0x3
6.没有设定条件代码扩展位,p2condtrue=p2ccmatch
7.设定了条件代码扩展位,p2condtrue=xp2ccmatch
8.如果规定的条件为真并且如下所示,那么信号p2condtrue16激活指令的执行
9.操作码,p2opcode=0x1E(op_16_bcc),p2condtrue16=p2ccmatch16
10.操作码,p2opcode=0x1F(op_16_bl),p2condtrue16=p2ccmatch16
寄存器字段对LSU有效(s1en,s2en,desten)-这些信号的作用是激活装入记分板单元(lsu),以限定寄存器地址总线,即,s1a,fs2a和dest。这些信号从主操作码(p2opcode)和子操作码(p2subopcode)译码。每一个激活都
1.源1操作数激活-s1en
-f_s1en(使用有效核心寄存器时函数为真)
-OR写入核心寄存器的一条扩展指令
-OR写入核心寄存器的一条扩展运算
2.源2操作数激活-s2en
-f_s2en(使用有效核心寄存器时函数为真)
-OR写入核心寄存器的一条扩展指令
3.目的地址激活-desten
-f_desten(使用有效核心寄存器时函数为真)
-OR写入核心寄存器的一条扩展指令
检测到的进栈/出栈指令(p2pushpop)-阶段2存在一进栈或出栈指令,当:(i)出栈-操作码(p2opcode)=0x17且子操作码(p2subopcode)=0x6;or(ii)出栈-操作码(p2opcode)=0x17和子操作码(p2subopcode)=0x7。存在LD/ST指令的特殊编码。存在为出栈和进栈的单独信号,即分别为p2push和p2pop。
检测到的装入和存储-阶段2检测到的LD或ST编码在表20中定义。这些编码是从32/16位ISA的主操作码(p2opcode)和子操作码中提取的。主信号如下所示:
-p2st-这是阶段2内对所有ST的解码
-p2ld-这是阶段2内对所有LD的解码
-p2sr-这是阶段2内对所有辅助SR的解码
-p2lr-这是阶段2内对所有辅助LR的解码
表20
LD/ST类型 | 操作码 | 子操作码 |
LD(op_ld) | 0x02 | N/A |
LD(op_fmt1) | 0x04 | p2iw_r[21:16]=0x30(p2subopcode_r=so_ld) |
LDB(op_fmt1) | 0x04 | p2iw_r[21:16]=0x32(p2subopcode_r=so_ldb) |
LDB.X(op_fmt1) | 0x04 | p2iw_r[21:16]-0x33(p2subopcode_r=so_ldb_x) |
LDW(op_fmt1) | 0x04 | p2iw_r[21:16]=0x34(p2subopcode_r=so_ldw) |
LDW.X(op_fmt1) | 0x04 | p2iw_r[21:16]=0x35(p2subopcode_r=so_ldw_x) |
LD(op_16_ld_add) | 0x0C | p2iw_r[20:19]=0x00(p2subopcode1_r=so16_ld) |
LDB(op_16_ld_add) | 0x0C | p2iw_r[20:19]=0x01(p2subopcode1_r=so16_ldb) |
LDW(op_16_ld_add) | 0x0C | p2iw_r[20:19]=0x10(p2subopcode1_r=so16_ldw) |
LD(op_16_ld_u7) | 0x10 | N/A |
LDB(op_16_ldb_u5) | 0x11 | N/A |
LDW(op_16_ldw_u6) | 0x12 | N/A |
LDW.X(op_16_ldwx_u6) | 0x13 | N/A |
LD(op_16_sp_rel) | 0x18 | p2iw_r[23:21]=0x0(p2subopcode3_r=so16_ld_sp) |
LDB(op_16_sp_rel) | 0x18 | p2iw_r[23:21]=0x1(p2subopcode3_r=so16_ldw_sp) |
POP(op_16_sp_rel) | 0x18 | p2iw_r[23:21]=0x7(p2subopcode3_r=so16_pop_u7) |
LD(op_16_gp_rel) | 0x19 | p2iw_r[23]=0x0(p2subopcode4_r=so16_ld_gp) |
LD(op_16_ld_pc) | 0x1A | N/A |
ST(op_st) | 0x03 | N/A |
ST(op_16_st_u7) | 0x14 | N/A |
STB(op_16_stb_u5) | 0x15 | N/A |
STW(op_16_stw_u6) | 0x16 | N/A |
ST(op_16_sp_rel) | 0x18 | p2iw_r[23:21]=0x2(p2subopcode3_r=so16_st_sp) |
STB(op_16_sp_rel) | 0x18 | p2iw_r[23:21]=0x3(p2subopcode3_r=so16_stb_u7) |
PUSH(op_16_sp_rel) | 0x18 | p2iw_r[23:21]=0x6(p2subopcode3_r=so16_pop_u7) |
ST(op_16_gp_rel) | 0x19 | p2iw_r[23]=0x1(p2subopcode4_r=so16_st_gp) |
阶段2中的有效LD/ST被限定如下:(i)mload2-p2ld ANDp2iv;和(ii)mstore2-p2st AND p2iv.请注意,取决于指令类型,16位ISA的子操作码从指令字的不同单元中被提出。还有一点很重要的就是本实施例中所有的16位LD/ST运算都不支持.DI(指向存储器绕过数据高速缓存)。
更新BLINK寄存器(p2dolink)-该信号在阶段2为有效分支转移和连接指令的存在加上标志(p2iv and p2jblcc),并且执行此条BLcc指令的前置条件也是有效的(p2condtrue)。这种配置的后果是,BLINK寄存器在其到达流水线阶段4时被更新。
实行分支转移(dorel/dojcc)-接受一个相对分支转移(Bcc/BLcc),当:(i)分支转移的条件为真(p2condtrue);(ii)循环的条件为假(NOT p2condtrue);和(iii)阶段2指令有效(p2iv)。接受一个直接跳转(Jcc),当:(i)该跳转的条件为真(p2condtrue);(ii)该指令为一个跳转指令(p2opcode=ojcc);和(iii)阶段2的指令为有效(p2iv)。
指令执行接口
以下对需要支持联合32/16位ISA的指令执行接口配置进行详细描述,特别是关于流水线的第三(执行)阶段。在这一阶段,LD/ST要求被处理并且ALU运算也被执行。本处理器第三阶段包括一个桶式移位器,用来循环左/右移,算术左/右移运算。具有一个ALU,除地址生成外还执行标准数学运算的加法和减法。指令执行接口的信号在表21中定义。
表21
信号名称 | 输入/输出 | 总线宽度 | 内容 |
ap_p3disable_r | output | 1 | 这表示一旦管道阶段3由于一个BRK或Actionpoint被清除,它将被停止 |
en3 | output | 1 | 激活管道阶段3 |
ldvalid | input | 1 | 下一个循环将发生一个延迟的装入写回 |
ldvalid wb | input | 1 | 控制LD写回通路到寄存器文件的多路技术 |
mload | output | 1 | 阶段3中有一个有效装入 |
mstore | output | 1 | 阶段3中有一个有效装入 |
mwait | input | 1 | 直接存储管道不能接受任何更多的LD/ST接入 |
nocache | output | 1 | 表示LS/ST需绕过数据高速缓存 |
p3a | output | 6 | 阶段3内的目标段 |
p3_alu_cc | output | 1 | ALU操作条件代码段为检测到MAC/MUL指令而显示在阶段3 |
p3c | output | 6 | 条件代码段 |
p3cc | output | 4 | 此为条件代码段 |
p3condtrue | output | 1 | 这来自于阶段3内的条件代码单元的结果 |
p3dolink | output | 1 | BLcc/JLcc被由阶段2取用来更新闪烁寄存器。寄存的p2dolink信号。 |
p3opcode | output | 5 | 指令的Opcode |
p3ilev1 | input | 1 | |
p3int | input | 1 | 中断进入阶段3 |
p3iv | output | 1 | 阶段3内指令有效 |
p3lr | output | 1 | 阶段3内要求LR |
p3_ni_wbrq | output | 1 | |
p3q | output | 5 | 条件代码段 |
p3setflags | output | 1 | 当前指令标志为激活状态 |
p3sr | output | 1 | 阶段3内有一个SR指令 |
p3wba | output | 6 | 写回地址 |
p3wb_en | output | 1 | 这是阶段3内的写回激活信号 |
p3wb_nxt | output | 1 | |
regadr | input | 6 | 返回装入的寄存器地址 |
sc_load1 | output | 1 | |
sc_load2 | output | 1 | |
sc_reg1 | output | 1 | |
sc_reg2 | output | 1 | |
sex | output | 1 | 信号扩展返回装入 |
size | output | 2 | 这表示LD/ST操作的大小0x0-longword(长字)0x1-word(字)0x2-byte(字节)0x3-reserved(保留) |
xholdup123 | input | 1 | 阶段1、2、3的扩展停止信号 |
x_idecode3 | input | 1 | 这是扩展的解码 |
Xnwb | input | 1 | |
xshimm | input | 1 | 即时信号扩展 |
xp3ccmatch | input | 1 | 此信号来自于阶段3的扩展条件代码单元 |
阶段3的执行逻辑要求对以下模块进行配置:(i)rctl-控制额外指令,即,CMPBcc,BTST,等;(ii)bigalu-除了为LD/ST操作的地址生成,还有算术运算和逻辑表达式;(iii)aux_regs-包含辅助寄存器,包括loopstart,loopend寄存器;和(iv)lsu-对新进栈/出栈指令的记分板的改进。
阶段3数据路径-参见图51,是根据本发明阶段3数据路径的配置。在设计本数据路径中考虑到的特殊功能包括:(i)LD/ST指令的地址生成;(ii)执行预先/后递增逻辑进栈/出栈指令的额外复用;(iii)作为基本方案ALU运算的MIN/MAX指令;(iv)NOT/NET/ABS指令;(v)ALU单元的配置;和(vi)Status32_L1/Status32_L2寄存器。图51所示的数据路径5100显示两个操作数,s1val 5102和s2val 5104,被锁存入阶段3,其中加法器5106和其他硬件执行适当的计算机运算;即算术、逻辑、移位等。在本配置中,一条指令一旦离开阶段3就不能被取消,因此所有写回和LD/ST指令都将被执行。
还提供了复用器4602(参见图46),如果标志设定被禁止,用于根据当前操作或最后标志设定操作来选择标志。
本实施例的阶段3算术单元为了生成LD/ST存取而生成的地址执行必要的计算和标准算术操作,例如,ADD,SUB等。阶段2的的输出,即s1val 5102和s2val 5104被送入阶段3,并且这些输入在进入32位加法器5106之前被格式化(取决于指令类型)。加法器具有四种运算模式,包括加、带进位加、减、带进位减。这些模式从32位指令的指令操作码和子操作码中提取。图52显示了与算术单元相关的逻辑5200。信号s2val_shift与如前所定义的移位ADD/SUB指令相关。
在ALU中使用加法器5106以生成一个结果的指令如表22所示。操作码被集合到一起以便为第二操作数选择合适的值。
表22
指令 | 子/操作码 | 类型 |
LD | 0x02 | 加 |
ST | 0x03 | 加 |
0x04 | ||
NEG | 0x04/0x13 | 减 |
ABS | 0x04/0x2F/0x09 | 减 |
MAX | 0x04/0x08/0x3E | 减 |
MIN | 0x04/0x09/0x3E | 减 |
LD/ST | 0x0D | 加 |
ADD | 0x0E/0x0 | 加 |
CMPSUB | 0x0E/0x2 | 减 |
LD | 0x10 | 加 |
LDB | 0x11 | 加 |
LDW | 0x12 | 加 |
LDW.X | 0x13 | 加 |
ST | 0x14 | 加 |
STB | 0x15 | 加 |
STW | 0x16 | 加 |
LD PC relative/SP | 0x1A7 | 加 |
LD SP relative | 0x18/0x00 | 加 |
PUSH | 0x187/0x07 | 减 |
POP | 0x187/0x06 | 加 |
ADD GP relative | 0x19A/0x03 | 加 |
ADD | 0x01D/0x00 | 加 |
SUB | 0x17D/0x03 | 减 |
LD/ST的地址生成逻辑5300(参见图53)允许为写回模式的预先/后更新逻辑。这就需要二个复用器5302,应该从s1val(预更新)或加法器输出(后更新)。进栈/出栈指令也使用该逻辑,因为他们自动递增/递减栈指针,将其作为数据项目从中加入或去除。
利用图54所示的逻辑5400处理阶段3执行的逻辑运算(例如:i_logicres)。在此描述的可用于处理器的指令类型为:(i)NOT指令;(ii)AND指令;(iii)OR指令;(iv)XOR指令;(v)BIC指令;和(vi)AND-MASK指令。逻辑5400提供的逻辑运算的类型是通过操作码/子操作码输入5404来选择的。请注意信号s2val_new 5402是屏蔽逻辑和位测试功能的一部分。该值是从一能够产生单位屏蔽码或n位屏蔽码(其中n=1~32)的6位编码p2shimm[5:0]生成的。
现在参照图55对移位和循环指令逻辑5500及功能进行详细说明。移位和循环指令是处理器内部提供的用来实现左右方向上的单位移位的指令。在图中所式的实施例中,这些指令都是单操作数据指令,并且被表23所限定。
表23
操作 | 描述 |
Sign extend byte | 源1的操作数(s1val)的低八位被增加符号 |
Sign extend word | 源1的操作数(s1val)的低十六位被增加符号 |
Zero extend byte | 源1的操作数(s1val)的低八位被增加0 |
Zero extend word | 源1的操作数(s1val)的低十六位被增加0 |
Arithmetic shiftright | 将被移位的值(snglop_shift)与源操作数1(s1val)的底部31位连接 |
Logical shift right | 将被移位的值(snglop_shift)与源操作数1(s1val)的底部31位连接 |
Rotate right | 将被移位的值(snglop_shift)与源操作数1(s1val)的底部31位连接 |
Rotate right throughcarry | 将被移位的值(snglop_shift)与源操作数1(s1val)的底部31位连接 |
被写回到寄存器文件的阶段3的运算结果是从以下源中提取的:(i)回装(drd);(ii)主机写入核心寄存器(h_dataw);(iii)PC到ILINK/BLINK寄存器,分别用于中断和分支转移(s2val);和(iv)ALU运算的结果(i_aluresult)。图56显示了本发明的结果选择逻辑5600。请注意ALU(i_aluresult)5602的操作结果是由逻辑单元5604、32位加法器5606、桶式位移器5608、扩展ALU5610和辅助接口5612中提取的。
状态标志的更新随着算术运算(ADD,ADC,SUB,SBC)、逻辑运算(AND,OR,NOT,XOR,BIC)和单操作数指令(ASL,LSR,ROR,RRC)进行的。图57显示了从各种算术、逻辑和扩展单元中选择标志。
写回寄存器地址-写回寄存器地址是从以下按优先顺序排列的源中选定的,(1)来自LSU的用于回装的寄存器地址,regadr;(2)用于写入核心寄存器的来自主机的寄存器地址;h_regadr;(3)用于1级中断的Ilink1(r29)寄存器,rilink1;(4)用于2级中断的Ilink2(r30)寄存器,rilink2;(5)LD/ST地址写回,p3b;(6) POP/PUSH地址写回,r28;(7)用于BLcc指令的Blink寄存器,rblink;和(8)标准ALU运算的地址写回,p3a。图58显示了本发明的写回地址生成逻辑5800。
延迟LD写回通过为一个周期设定hold_host信号越过(override)主机写入。参见本文其他地方此数据路径关于控制信号的讨论。对于16位指令,操作码(p3opcode)是0x08 to 0x1f的,因此,写回地址必须被重新映射到32位指令编码(在流水线的阶段2实行)。这适用于p3a字段,其应该将16位寄存器地址格式化,这样寄存器文件可以正确地更新。从阶段2的目的字段的16位编码为p2a_16 5802,并且被翻译成32位编码,如图62所示。新的写回5804根据操作码和流水线激活(en2)被庙宇而被锁存入阶段3
Min/Max指令-图59显示了处理器内MIN/MAX指令数据路径5900的配置。图示实施例的该MIN/MAX指令要求适当的信号,即s1val 5902或s2val 5904被传送到阶段4并根据计算结果进行写回。这些指令是通过从s1val减去s2val并依靠是否MAX或MIN检查哪个值大些或小些。从算术单元有三个源可供选择,因为返回到阶段4的值不作为加法器内计算的结果,而是来自源操作数。该值按如下选择:(i)s1val-操作码为MIN(p3opcode=omin)并且源二操作数大于源一操作数(s2val_gt_s1val=1);(ii)s1val-操作码为MAX(p3opcode=omax)a且源二操作数不大于源一操作数(s2val_gt_s1val=0);(iii)s2val-用于所有其他情况的MIN/MAX指令。这些指令的零、溢出和负的标志自标准算术运算保持不变。进位樗需要额外的支持,如图60所示,显示了MIN/MAX指令的进位标志逻辑6000。
Status32_L1 & Status32_L2寄存器-用于当1级或2级叫断被激活时的保存标志状态的寄存器被分别称为Status32_L1和Status32_L2。Status32_L1寄存器在下列任何一种条件为真时被更新:(i)中断在阶段3(p3int AND wba=rilink1) -用aluflags_r,i_e1_r and i_e2_r对新值更新;(ii)要求主机存取(h_write AND aux_access AND h_addr=rilink1)-用h_dataw更新新值;(iii)要求辅助存取(aux_write AND aux_access ANDaux_addr=rilink1)-用aux_dataw对新值更新。
Status32_L1和Status32_L2
Status32_L2寄存器在当以下任何一条件为真时被更新:(i)中断在在阶段3(p3int AND wba=rilink2)-用aluflags_r,i_e1_r和i_e2_r对新值更新;(ii)要求主机存取(h_write ANDaux_access AND h_addr=rilink2)-用h_dataw对新值进行更新;或(iii)要求辅助存取(aux_write AND aux_access ANDaux_addr=rilink2)-用aux_dataw对新值更新。
阶段3控制路径-阶段3的控制信号如下:(i)为阶段3激活-en3;(ii)阶段3指令有效-p3iv;(iii)迟延阶段1,2和3-holdup123;(iv)LD/ST要求-mload,mstore;(v)写回,p3wba;(vi)其他控制信号,p3_wb_req.这些信号支持进行ALU运算,扩展指令和LD/ST存取机制。
激活流水线阶段3(en3)-如果以下任何条件为真(i)处理器内核被暂停,en=0;(ii)扩展要求阶段1,2和3挂起,因为多周期ALU运算,xholdup123 AND xt_aluop;(iii)直接存储器流水线忙(mwait)并且不能接受本自处理的更多的LD/ST存取;(iv)在下一个周期实行一个延迟的LD写回并且阶段3的指令会写回到寄存器文件,ip3_load_stall;(v)行动点(或BRK)被检测到并且指令已经被清除(i_AP_p3disable_r)至stage4。阶段3返回LD迟延信号(ip3_load_stall)被从ldvalid中取出。当rctl_fast_load_returns被激活时,阶段3按如下被定义激活:(i)延迟的LD写回(ldvalid_wb)会在下一个周期被实行并且阶段3的指令会写回到寄存器文件(p3_wb_req);(ii)延迟的LD写回(ldvalid_wb)会在下一个周期实行并且阶段3的指令迫使一个向寄存器文件的写回,并且想从写回阶段得到数据和寄存器地址(p3_wb_rsv)。
阶段3指令有效(p3iv)-阶段3的有效指令(p3iv)信号在每条指令通向流水线的阶段3的过程中限定每条指令。阶段3无效信号被更新,当(i)阶段3被迟延(NOT en3)因此p3iv的状态被保留,i_p3iv=i_p3iv_r;(ii)阶段2(NOT en2)指令没有完成,当指令在阶段3已经成功地被实现(en3),所以会移向阶段4。这样以下周期的指令应该被无效,否则会被重复执行,i_p3iv=0.(iii)阶段2有ABS指令并且操作数为正(p3killabs),因此在阶段3将指令无效,i_p3iv=0;或(iv)一个CMPBcc已经到达了阶段3并且比较为假,因此下一条指令应该被无效,i_p3iv=0。信号p3iv在其他情况被设定为来自上一阶段的指令无效信号;即,i_p3iv=i_p2iv_r。
写回地址激活(p3_wb_req)-在下列条件下将会请求一个写回:(i)分支转移并连接(BLcc)寄存器写回,p3dolink AND p3iv;(ii)中断连接寄存器写回,(p3int);(iii)LD/ST地址写回包括PUSH/POP,p3m_awb;(iv)扩展指令寄存器写回,p3xwb_op;(v)从辅助寄存器空间装入,p31r;或(vi)标准条件指令寄存器写回,p3ccwb_op。BLcc指令被p3iv限定,因此被取消的指令被算入,而所有其他条件早已被p3iv限定。写回至寄存器文件支持PUSH/POP指令,因为必须自动更新保留SP值的寄存器(r28)。
还提供了另一为当前阶段3内指令而保留阶段4的写回请求。
检测到的PUSH/POP指令(p3pushpop)-阶段3是否存在PUSH或POP指令的状态在流水线激活阶段2(en2)时被设定(p3pushpop=p2pushpop),否则它还保持不变。还相应地存在PUSH或POP指令于阶段3,当
PUSH-操作码(p3opcode)=0x17并且子操作码(p3subopcode)=0x6,和指令有效(p3iv);或
POP-操作码(p3opcode)=0x17和子操作码(p3subopcode)=0x6,和指令是有效的(p3iv)
存在特别LD/ST指令的编码。存在单独的PUSH和PO指令,即,分别为p3push和p3pop。本指令被作为16位指令支持。
检测到的装入和存储-LD,ST,LR或SR操作的编码在阶段3被检测到并被从与子操作码相关的主操作码中取出(p3opcode),如表24所示
表24
操作 | 内容 |
mstore | 这是阶段3中所有ST的解码,指令为有效的(p3iv) |
Mload | 这是阶段3中所有LD的解码,指令为有效的(p3iv) |
p3sr | 这是阶段3中所有辅助SR的解码,指令为有效的(p3iv) |
p3lr | 这是阶段3中所有辅助LR的解码,指令为有效的(p3iv) |
更新BLINK寄存器(p3dolink)-标志存在阶段3的有效分支转移和连接指令是信号是p3dolink。当流水线激活阶段2(en2)被设定时,该信号通过采用p2dolink更新p3dolink由阶段2被更新。否则p3dolink保持不变。
写回寄存器地址选择器-该写回寄存器地址通过下列控制信号进行选择,按优先顺序排列:(1)来自LSU的寄存器地址用于回装,regadr;(2)来自主机寄存器地址用于向核心寄存器写入,h_regadr;(3)Ilink1(r29)寄存器,用于1级中断,rilink1;(4)Ilink2(r30)寄存器,用于2级中断,rilink2;(5)LD/ST地址写回,p3b;(6)POP/PUSH地址写回,r28;(7)Blink寄存器,用于BLcc指令,rblink;和(8)地址写回,用于标准ALU运算,p3a。延迟LD写回通过为一个周期设定hold_host信号来超越主机写入。数据路径如前所述。
写回阶段
写回阶段是本处理器的最后阶段,ALU运算、回装、扩展和主机写入的结果都被写入核心寄存器文件。该写回接口在表25中描述。
表25
信号名称 | 输入/输出 | 总线宽度 | 内容描述 |
wba | 输出 | 6 | 值为真时需写入的核心寄存器地址 |
wben | 输出 | 1 | 使要写入寄存器文件的数据有效化 |
wbdata | 输出 | 32 | 写入核心寄存器文件的32位值 |
当发生下列情况时写回激活(p3wb_nxt)的预锁值被更新:
1.正在发生主机写入(cr_hostw),p3wb_nxt=1;
2.一个延迟装入返回(ldvalid_wb),p3wb_nxt=1;
3.Tangent处理器被暂停(NOT en),p3wb_nxt=0;
4.由于多周期ALU运算,扩展要求阶段1,2和3(xholdup123AND xt_aluop),p3wb_nxt=0;
5.直接存储器流水线忙(mwait)并且不能接受更多的来自处理器的LD/ST存储,p3wb_nxt=0;或
6.在下一周期实行一延迟的LD写回并且阶段3的指令会写到寄存器文件(ip3_load_stall),p3wb_nxt=0.
取指令接口
取指令接口实行通过调整器来自指令高速缓存对指令的要求。调整器将返回指令格式化进32位或16位,随源操作数寄存器依靠指令进行扩展。来自调整器16位指令的指令格式在表26中示出(注意下面的例子中假设16位指令被定位于I-cache返回的长字的高位字)。
表26
p1iw<=p0iw(31 downto 16)& --16-bit instruction word′0′& --Flag bit″00″&p0iw(26)& --B field MSBs″00″&p0iw(23)&p0iw(23 downto 21)& --C field″000000″; --Padding |
用于本16位ISA的16位指令源操作数被映射到32位ISA。操作码的格式为5位宽度。16位ISA的剩余部分在主流水线控制块(rctl)中译码。
操作码(iplopcode)是从调整器输出p1iw[31:27]提取的。该操作码仅在当流水线激活阶段1信号en1对p2opcode为真时时被锁存。源操作数的地址取自对准器输出p1iw[25:12]。这些源地址在流水线激活阶段1的信号en1对s1a,s2a为真时被锁存。来自16位ISA的3位地址必须被扩展至其在32位ISA中相当的大小。
16位指令字的剩余字段在进入处理器阶段2之前不要求任何操作。
在16位指令集内定义字段位置用的常数在表27中给出。请注意15位ISA的操作数已经被重新映射到被送至处理器的32位指令长字的高部。已经这样做是为了使联合ISA的指令译解更为简洁。
表27
常数名称 | 宽度 | 内 容 |
isa16_width | 16 | 16位ISA的宽度 |
isa16_msb | 15 | 16位ISA的最高有效位 |
isa16_lsb | 0 | 16位ISA的最低有效位 |
opcode16_msb | 31 | 操作码字段的最高有效位 |
opcode16_lsb | 27 | 操作码字段的最低有效位 |
subopcode16_msb | 10 | 子操作码字段的最高有效位 |
subopcode16_lsb | 6 | 子操作码字段的最低有效位 |
shimm16_u9_msb | 6 | 定义9位不带符号常数的最高有效位 |
shimm16_u9_lsb | 0 | 定义9位不带符号常数的最低有效位 |
shimm16_u5_msb | 4 | 5位不带符号立即数的最高有效位 |
shimm16_u5_lsb | 0 | 5位不带符号立即数的最低有效位 |
shimm16_s9_msb | 6 | 10位带符号立即数的最高有效位 |
shimm16_s9_lsb | 0 | 10位带符号立即数的最低有效位 |
Fieldb16_msb | 11 | 源操作数1字段的最高有效位 |
Fieldb16_lsb | 9 | 源操作数1字段的最低有效位 |
Single_op16_msb | 7 | 子操作码字段的最高有效位 |
Single_op16_lsb | 5 | 子操作码字段的最低有效位 |
Fieldq16_msb | 7 | 条件码字段的最高有效位 |
Fieldq16_lsb | 6 | 条件码字段的最低有效位 |
Fieldc16_msb | 8 | 源操作数2字段的最高有效位 |
Fieldc16_lsb | 6 | 源操作数2字段的最低有效位 |
Fielda16_msb | 2 | 目的字段的最高有效位 |
Fielda16_lsb | 0 | 目的码字段的最低有效位 |
图式实施例的32位ISA的常量定义使用一现有的处理器(如,ARCtangent A4)作为一个基线。这样的好处在于命名约定不需要改变,即便是每个字段在指令长字中的位置是特别适合于本发明的。
指令调整器接口
下面对指令调整器的接口进行详细描述。该模块具有从一个指令高速缓存提取一个32/16位值的能力,并将其格式化,使处理器能够将其译码。本实施例的调整器配置支持以下特性:(i)32位存储器***;(ii)对32/16位指令格式化并将其送至处理器;(iii)支持big endian和little endian;(iv)对齐和未对齐的存取;和(v)中断。表28中对指令调整接口进行了说明。
表28
信号名称 | 输入/输出 | 总线宽度 | 内容 |
next_pc | input | 31 | 处理器请的指令地址 |
Ifetch | input | 1 | 来自处理器的取指令信号 |
word_fetch | output | 1 | 过滤的ifetch信号,确保不必在调整器中的下一条指令 |
word_valid | input | 1 | 高度缓存返回的字有效 |
Ivalid | output | 1 | 调整器输出指令有效 |
P0iw | input | 32 | 指令长字从高速缓存到调整器 |
P1iw | output | 32 | 调整器的指令长字 |
Dorel | input | 1 | 指出阶段2的指令是bcc/blcc/lpcc |
Dojcc | input | 1 | 指出阶段2的指令是一个jcc/jlcc |
docmprel | input | 1 | 指出阶段3的指令是一个brcc/bbit0/bbit1 |
p2limm | input | 1 | 下一个长字是一个长立即数,因此不必对齐 |
Ivic | input | 1 | 指出指令高速缓存的内容无效并且,调整器内的任何信息也是同样 |
inst_16 | output | 1 | 指出该当前在p1iw的指令是一个16位指令 |
misaligned_access | output | 1 | 当调整器要求current_pc+8的值next_pc时此信号为真 |
所据举实施例的调整器能够确定所要求的指令是16位还是32位,如下所述。
通过读取两个最重要的位,即[31]和[32],调整器能够确定指令是16位还是32位。它取决于p1iw[31:30]=“00”,指令是32位宽,或者当p1iw=“01”,“10”or“11”中的任何一个,则位16位。如上所述,如果调整器中的缓冲器含有长字的较低的16位,当一个通路被执行时,没有从缓存器中应用全部的32位的长字指令。调整器保持这个值的历史,并决定是否是一个32/16位的指令。如果下一个指令是一个缓存器的冲击,缓冲器的值是指令的一部分,则这允许未对齐通道的单个循环的执行。从处理器上会有一个附加的信号,祺告诉调整器下一个32位的长字是长时间的(p2limm),因此其能够传到下一阶段而保持不变。
当被重置(或重启)时,调整器的性能取决于指令是32位宽(=“00”)或是16位(当p1iw=“01”,“10”or“11”中的任意一个)。图61显示了连续指令流的一个实例。如图所示,由于p1iw[31:30]=“00”,第一个指令6102是一个32位的。调整器不需要进行任何格式化。由于p1iw=“01”,“10”or“11”,第二指令6104是16位的。注意,当较低的16位代表的是地址在pc+6的指令时,这个长字的前16位代表的是地址在pc+4的指令。由于调整器贮存的是较低的16位,其必须检测,以确定其是否是一个完整的16位指令或一个32位指令的前半部分。这取决于调整器如何过滤取回的信号。第三指令6106是16位宽,其从缓冲器中获取,并转存到处理器中。没有必要从存储器中取回。第四个指令6108是32位宽,其作为第一指令处理。
由于p1iw[31:30]!=“00”,第五个指令是6110。较低的16位是可缓冲的。第六个指令6112是32位宽,从下一个连续的长字通过缓冲的16位和前16位的串连而产生。较低的16位是可缓冲的。
图62显示了连续指令流的另一个实例。由于p1iw=“01”,“10”or“11”,第一指令6202是16位的。调整器通过p1iw 16将这个指令传至处理器。较低的16位是可缓冲的。第二指令6204也是16位的,其被发现为同一长字的一部分,并在p1iw[15:14]=“01”处保持第一指令。注意,前16为代表的指令在位置pc,而较低的16位代表的是pc+2处的指令。第三指令6206也是16位的指令,并以与(1)相同的方式处理。较低的16位是可缓冲的。第四指令6208是32位宽的,其通过(3)处可缓冲的指令与下一连续长字的串连而产生。较低的16位是可缓冲的。第五指令6208是32位宽的,其通过(4)处可缓冲的指令与下一连续长字的串连而产生。较低的16位是可缓冲的。第六指令6212是16位的指令,其从缓冲器中的历史取出,并转存到处理器中。
对于被校对的具有目的文件地址的分支转移(或跳转),由于当p1iw=“01”,“10”or“11”时,第一指令是16位。这就是跳转(或者分支转移)指令。调整器在将指令传递给处理器之前,执行合适的格式化。较低的16位是可缓冲的。由于缓冲值为p1iw[15:14]=“00”,第二指令是32位的。注意,指令的前16位在地址pc+4,e而较低的16位在pc+6。这迟延了跳转(或分支转移)指令的跟踪。在分支转移(2)后的下一个指令是32位宽的。这个长字被校对,所以没有等待时间。接下来的指令(3)是16位的指令,较低的16位是可缓冲的。过程继续,直至被终止。
当分支转移(或跳转)被采纳,调整器的性能取决于跳转指令是否为32位宽(=“00”)或16位(当p1iw=“01”,“10”or“11”中的任何一个)。图64显示了分支转移或跳转指令流的实例。调整器在将指令传给处理器前现进行合适的格式化。较低的16位是可缓冲的。由于(1)处的缓冲值p1iw[15:14]=“00”,第二指令(1a)是32位的。注意,指令前16位在pc+4处,而较低的16位在pc+6处。这延缓了跳转(或分支转移)指令的跟踪。分支转移(2)后采用的下一个指令是32位宽。由于调整器因为一个未对齐的通道必须取回两个长字,这儿有两个周期的等待时间。这意味着PC+N处的较低的16位是指令的前部分,下述长字的前16位体哦女冠了较低部分的指令。第二长字的较低的16位是可缓冲的。下述指令(3)也是32位宽的指令,其通过(3)处的16位和下一连续的长字的前16位之间的串连而产生。较低的16位是可缓冲的。
注意,当未对齐通道从分支转移返回,调整器如上所述进行运转。
零点以上的环的单个32位出现的调整器的性能可以被优化。当32位的指令降低通过一个长字的边界,默认的调整器的性能每次指令进行2次读取。较好的方法是发现当前读取的下一个脉冲pc与前一个读取脉冲的“下一个pc”的匹配。这个信息可以用于阻止额外的读取过程。图64显示了这种情况下指令流的一个实例。如图所示,由于p1iw[31:30]!=“00”,第一指令(1)是16位的。这是跳转(或分支转移)指令。调整器在指令传给处理器前进行合适的格式化。较低的16位是可缓冲的。由于(1)处的缓冲值p1iw[15:14]=“00”,第二指令(1a)是32位的。注意,指令的前16位在pc+4处,而较低的16位在pc+6处。这迟延了跳转(或分支转移)指令的跟踪。分支转移(2)后采取的下一个指令是32位宽的。由于调整器必须因未对齐通道进行读取两个长字,所以有两个周期的等待时间。这意味着位于PC+N处的较低16位是指令的前16位,并且接下来的长字前16位提供了较低部分的指令。第二长字的较低的16位是可缓冲的。接下来的指令(3)也是32位宽的指令,其通过(3)处缓冲的16位和下一连续长字的前16位的串连而产生,较低的16位是可缓冲的。
MOV LP_COUNT,5 ; no.of times to do loop
MOV r0, dooploop>>2 ; convert to longword size
ADD r1, r0, 1 ; add 1 to‘dooploop’address
SR r0, [LP_START] ; setup loop start regi ster
SR r1, [LP_END] ; setup loop end register
NOP ; allow time to update regs
NOP
dooploop:
OR r21, r22, r23 ; single inst in loop
ADD r19, r19, r20 ; first inst.after loop
请参阅图65和下述实例代码。注意当未对齐通道从分支转移返回,调整器如上所述进行运转。
注意,当中断信号产生时,本实施例中的调整器也必须能够支持中断信号。所以运行排列的字的中断信号可以通过。当缓冲器的指令时无效的或当分支转移/跳转被采纳时,调整器的状态被重置。
集成电路装置
如上所述,此处公开的处理器的核心结构时IC设备的基础。实例中的设备通过运用本发明的方法,为用户定制的VHDL设计进行生产。然后集成为逻辑等级的方法,接着通过在半导体领域常用的合成、设计和制造,以简化为一个物理设备。例如,本发明于0.38、0.18和0.1微米的工艺相兼容,并最终可以应用到甚至更小的工艺中(如IBM/AMD发展的0.065微米的工艺),或除了此处清楚公开的替代的其它解决办法。设备制造的一个实施例为0.1微米的“蓝色逻辑“Cu-11的工艺由IBM提供,尽管其它的可以清晰的被应用。
本领域技术人员可以知道,本发明中的IC设备也可以包括任何普通的可用的***设备,如连续的通信设备,平行端口,USB端口/驱动器,定时器,计数器,高速驱动器,模拟到数字的转换器(A/D),数字到模拟的转换器(D/A)),中断信号处理器,LCD驱动器,存储器,RF***构件,和其它的类似的设备。而且,处理器也可以包括其它常用的或应用较好的电路,以便在芯片上形成一个有用的***,以提供一些不同功能,如上所述。本发明不仅限于类型,数字或***设备的复杂性和其它电路,其可以通过应用方法和设备进行合并。更确切的,任何由主要施加在物理存储器上的现有半导体工艺的缺陷,可以通过超时进行改进。因此,如同半导体工艺得到改善,应用本发明的复杂性和可能的集成度会进一步提高。
其进一步认识到,任何结合如前所述的“双重ISA”功能的方法或其组合可以应用到制造IC设备。前面提到的申请号为09/418.663的美国专利公开了一种具有面向用户的指令(即软件)体系的一个实例,其是一种逻辑电路的集成方法。
在本发明的技术领域内,只要具备最基本的知识,可以对本发明的其他可操作的实施例进行改进。在本发明中对实质性技术方案提出了专利保护请求,其保护范围应包括具有上述技术特点的一切变化方式。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的方法及技术内容作出些许的更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
附录1-指令编码的实施例
2000-2003 ARC International.All rights reserved.使用寄存器的32位指令(图1):
-5~0位-目的文件字段
-11~6位-源操作数2的字段
-14~12位-源操作数1的字段(高于3位)
-15位-由标记(F)位使用,以便将基于指令的结果标记在寄存器中的状态被被置位
-21~16位-Sub-opcode字段提供指令类型可用的附加选择
-23~22位-模式字段提供第2操作数的信息,即
“00”-Register(寄存器)
“01”-Unsigned 6-bit immediate(立即不标记6位)
“10”-Signed 12-bit immediate(立即标记12位)
“11”-Conditional execution(有条件执行)
-Bits 26 to 24-Source Operand 1 field(lower 3-bits)
-26~24位-源操作数1的字段(低于3位)
-Bits 31 to 27-Major Opcode
-31~27位-Major Opcode
32位LD指令(图1)
-0位-标记扩展(X)短快数据
-2~1位-数据大小(ZZ),即
“00”-Byte(字节)
“01”-Word(字)
“10”-Longword(长字)
“11”-Reserved(保留)
-4~3位-重写的地址模式(A),即
“00”-No update(没有更新)
“01”-Pre-increment/decrement(预增/减)
“10”-Post-increment/decrement(滞后增/减)
“11”-Scaled address mode(排列的地址模式)
-5位-直接向存储器中负载,迂回数据缓存器(DI)
-11~6位-返回负载的目的文件的寄存器
-Bits 14 to 12-Source Operand 1 field(upper 3-bits)
-14~12位-源操作数1的字段(高于3位)
-15位-当与从源操作数1的数据合并时,大部分重要的9位的位立即标记数据偏移字段至存储器的位置
-23~16位-当与从源操作数1的数据合并时,较低部分的9位立即标记数据偏移字段至存储器的位置
-26~24位-源操作数1的字段(低于3位)
-31~27位-Major Opcode
32位ST指令(图1):
-0位-标记扩展(X)短快数据
-2~1位-数据大小(ZZ),即
“00”-Byte(字节)
“01”-Word(字)
“10”-Longword(长字)
“11”-Reserved(保留)
-4~3位-重写的地址模式(A),即
“00”-No update(没有更新)
“01”-Pre-increment/decrement(预增/减)
“10”-Post-increment/decrement(滞后增/减)
“11”-Scaled address mode(排列的地址模式)
-Bit 5-Store direct to memory and bypass the data cache
(.DI)
-5位-直接贮存到存储器和迂回数据缓冲器(DI)
-11~6位-源寄存器字段,其含有寄存器的地址,寄存器中含有存储到存储器的数据
-14~12位-源操作数1的字段(高于3位)
-15位-当与从源操作数1的数据合并时,大部分重要9位的位,立即标记数据偏移字段,应用到来自存储器的位置
-23~16位-当与从源操作数1的数据合并时,较低部分的9位,立即标记数据偏移字段,应用到来自存储器的位置标记直接的数据偏移字段
-26~24位-源操作数1的字段(低于3位)
-Bits 31 to 27-Major Opcode
-31~27位-Major Opcode
32位Bcc/BLcc指令(图1):
-4~0位-条件码(Q)的字段
-5位-这种选择迟延了跟踪模式
-15~6位-21位的较高部分标记直接的数据偏移字段至源自分支转移的目标地位
-16位-总是将有条件的分支转移设置为0
-26~17位-21位的较低部分标记直接的数据偏移字段至源自分支转移的目标地位
32位BRcc指令(图1)
-4~0位-条件码(Q)的字段
-5位-这种选择迟延了跟踪模式
-11~6位-源存储器的字段,当位4是正确的时候,含有寄存器的地址,该寄存器含有数据或未标记的6位的直接的值。其和源操作数1的值相比较
-14~12位-源操作数1的字段(高于3位)
-15位-大部分重要的9位的位标记直接数据字段,应用于源自分支转移的目标地位
-16位-总是将有条件的比较/分支转移指令设置为1
-23~17为-较低部分的9位标记直接数据字段,应用于源自分支转移的目标地位
-26~24位-源操作数1的字段(低于3位)
-31~27位-Major Opcode
Claims (29)
1.一种数据处理器装置,具有一多阶段流水线和一指令集;其特征在于其包括:
多个第一指令,具有一第一长度;
多个第二指令,具有一第二长度;和
逻辑部分,被适合于从一具有该第一长度和第二长度指令的单一程序中将其中包含的该第一长度指令和第二长度指令进行译码和处理。
2.根据权利要求1所述的数据处理器装置,其特征在于其中所述的逻辑部分包括一指令调整器,该指令调整器被置于该流水线的第一阶段,该调整器被适合于提供该第一长度的至少一个第一字和该第二长度的至少一个第二字到译码逻辑,该译码逻辑在该至少一个第一和第二字中进行选择。
3.根据权利要求2所述的数据处理器装置,其特征在于其中所述的调整器还进一步包括一个缓冲器,该缓冲器被适合于存储来自一个与该调整器在操作上联接的指令高速缓冲存储器的一个取出指令的至少一部分,该存储减缓该流水线的迟延
4.根据权利要求2或3所述的数据处理器装置,其特征在于其中所述的选择行为的作出至少部分的基于该存储器最小开销。
5.根据权利要求4所述的数据处理器装置,其特征在于其中所述的指令集包括至少一条用户配置的扩展指令。
6.根据权利要求1所述的数据处理器装置,其特征在于其中所述的数据处理器是用户可配置的,该用户可配置至少包括选择至少一条用于该指令集内的扩展指令的能力。
7.根据权利要求6所述的数据处理器装置,其特征在于其中所述的至少一条扩展指令包括该第一或第二指令之一。
8.根据权利要求7所述的数据处理器装置,其特征在于其中所述的逻辑部分包括一个指令调整器,置于该流水线的第一阶段,该调整器被适合于提供该该第一长度的至少一个第一字和该第二长度的至少一个第二字以便译码逻辑,该译码逻辑在该至少一个第一和第二字中进行选择。
9.根据权利要求8所述的数据处理器装置,其特征在于其中所述的调整器还进一步包括一个缓冲器,该缓冲器被适合于存储来自一个与该调整器在操作上联接的指令高速缓冲存储器的一个取出指令的至少一部分,该存储减缓该流水线的迟延
10.根据权利要求1所述的数据处理器装置,其特征在于其中所述的至少一个第一或第二指令包括一个分支转移或跳转指令,该数据处理器装置被配置为:
提供在一个具有一个高部和低部的第一长字内的第一16位分支转移/跳转指令,该分支转移/跳转指令被置于该高部;
处理该分支转移/跳转指令,包括缓冲该低部;
连接该第一长字被缓冲的低部于一个第二长字的高部,产生一个第一32位指令;并且
保留该分支转移/跳转,其中该第二长字的低部被丢弃。
11.根据权利要求10所述的数据处理器装置,其特征在于其中所述的第一32位指令驻留于该第一16位分支转移/跳转指令的延迟槽内。
12.根据权利要求1所述的数据处理器装置,其特征在于其中所述的流水线包括:
一个取指令阶段;
一个指令译码阶段,与该取指令阶段的下游操作上的联接;
一个指令执行阶段,与该译码指令阶段的下游操作上的联接;和
一个写回阶段,与该指令执行阶段的下游操作上的联接;
其中该的取、译码、执行和写回阶段被适合于处理该多个第一指令,该多个第一指令包括16位指令和该包括32位指令的多个第二指令。
13.根据权利要求12所述的数据处理器装置,其特征在于其中至少一个该多个第一或第二指令包括一个用户可配置扩展指令。
14.根据权利要求12所述的数据处理器装置,其特征在于其还进一步包括至少一个选择器,该选择器操作性地至少与取阶段联接,该至少一个选择器在该16位和32位指令中操作性地选择独立的指令。
15.根据权利要求12所述的数据处理器装置,其特征在于其进一步包括一个寄存器文件,置于该译码阶段。
16.根据权利要求12所述的数据处理器装置,其特征在于其进一步包括:
一个指令高速缓冲存储器,在该取阶段内;
一个指令调整器,与该指令高速缓冲存储器操作上的联接;和
译码逻辑,与该指令调整器和该译码阶段操作上的联接;
其中所述的调整器被配置为向该译码逻辑提供16位和32位指令,该译码逻辑在该16位和32位指令中进行选择,以便产生一个选定指令,该选定指令经过该流水线装置的译码阶段。
17.一个处理器流水线代码压缩装置,其特征在于其包括:
一个指令高速缓冲存储器,被适合于存储多个第一和第二长度的指令字;
一个指令调整器,操作性地与该指令高速缓冲存储器联接;和
译码逻辑,与该调整器操作性地联接;
其中该调整器被适合于提供该第一长度的至少一个第一字和该第二长度的至少一个第二字到该译码逻辑,在该译码逻辑在该至少一个第一和第二字中进行选择。
18.根据权利要求17所述的处理器流水线代码压缩装置,其特征在于该调整器还进一步包括一个缓冲器,该缓冲器被适合于存储来自该高速缓冲存储器的一个取指令的至少一部分,该存储减缓该流水线的迟延
19.根据权利要求18所述的处理器流水线代码压缩装置,其特征在于其中所述的取指令越过一个长字边界。
20.根据权利要求19所述的处理器流水线代码压缩装置,其特征在于其进一步包括一个寄存器文件,置于该调整器的下游,该寄存器文件被适合于存储多个源数据。
21.根据权利要求20所述的处理器流水线代码压缩装置,其特征在于其进一步包括至少一个复用器,与该译码逻辑和该寄存器文件操作性联接,其中该至少一个复用器为上述选定的第一或第二字之一选择至少一个操作数。
22.根据权利要求17所述的处理器流水线代码压缩装置,其特征在于其中所述的第一长度比该第二长度短,并且该译码逻辑还进一步包括逻辑部分,该逻辑部分被适合于将该第一字从该第一长度扩展该第二长度。
23.一种压缩一种用户可配置的数字处理器设计的指令集的方法,其特征在于其包括以下步骤:
提供一个第一指令字;
生成至少第二和第三指令字,该第二字具有一个第一长度并且该第三字具有一个第二长度,该第二长度比该第一长度长;以及
选择,根据该第一指令字内的至少一位进行选择,选择该第二和第三字中有效的那一个;
其中履行该生成和选择步骤是为了提供代一个码密度给指令集,该指令集大于仅利用该第二长度的指令获取的指令集。
24.根据权利要求23所述的压缩一种用户可配置的数字处理器设计的指令集的方法,其特征在于其中所述的第一长度包括16位,并且该第二长度包括32位。
25.根据权利要求24所述的压缩一种用户可配置的数字处理器设计的指令集的方法,其特征在于该方法还进一步包括选择合适的操作数,该选择是基于利用一个复用器对该16位或32位指令的该选择而作出的。
26.一种处理一个数字处理器指令流水线内多位长度指令的方法,该指令中至少有一条包括一个分支转移或跳转指令,该方法包括:
提供在一个具有高部和低部的第一长字内的一个第一16位分支转移/跳转指令,该分支转移/跳转指令被置于该高部中;
处理该分支转移/跳转指令,包括将该低部缓冲;
连接一个第二长字的高部于该第一长字的该被缓冲的低部,以便产生一个第一32位指令;和
保留该分支转移/跳转,其中该第二长字的低部被丢弃。
27.根据权利要求26所述的方法,其中所述的该第一32位指令驻留在该第一16位分支转移/跳转指令的延迟槽内。
28.一种带有ISA的单一模式流水线的数字处理器,该ISA具有多个至少第一和第二长度的指令,每条该指令都具有一个位于其高部的操作码,该操作码包含至少两指定操作长度的位。
29.一个为一个数字处理器编程的方法,其特征在于该方法包括以下步骤:
提供一个具有一个与其相关的第一长度的多个第一指令的第一ISA;
提供一个具有第二长度的多个第二指令的第二ISA,该第一长度是该第二长度的整数倍;以及
该编程过程中在该第一和第二指令中选择;以及
利用至少上述选定的第一和第二指令生成一个计算机程序;
其中在该处理器上该计算机程序的执行不需要指令集模式转换。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US35364702P | 2002-01-31 | 2002-01-31 | |
US60/353,647 | 2002-01-31 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1625731A true CN1625731A (zh) | 2005-06-08 |
Family
ID=27663235
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA038031124A Pending CN1625731A (zh) | 2002-01-31 | 2003-01-31 | 具有多种长度指令集体系结构的可配置数据处理器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20030225998A1 (zh) |
EP (1) | EP1470476A4 (zh) |
KR (1) | KR100718754B1 (zh) |
CN (1) | CN1625731A (zh) |
AU (1) | AU2003210749A1 (zh) |
WO (1) | WO2003065165A2 (zh) |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009092180A1 (zh) * | 2008-01-21 | 2009-07-30 | Institute Of Computing Technology Of The Chinese Academy Of Sciences | 一种risc处理器装置及其指令地址转换查找方法 |
CN101833437A (zh) * | 2009-05-19 | 2010-09-15 | 威盛电子股份有限公司 | 适用于微处理器的装置及方法 |
CN102033735A (zh) * | 2009-09-30 | 2011-04-27 | 英特尔公司 | 使用寄存器扩展在中央处理单元中管理和实现元数据 |
CN101344840B (zh) * | 2007-07-10 | 2011-08-31 | 苏州简约纳电子有限公司 | 一种微处理器及在微处理器中执行指令的方法 |
CN102298515A (zh) * | 2010-06-22 | 2011-12-28 | 国际商业机器公司 | 执行对两个操作数的操作并随后存储原始值的方法和*** |
CN104025042A (zh) * | 2011-12-30 | 2014-09-03 | 英特尔公司 | 编码以增加指令集密度 |
CN105677298A (zh) * | 2015-12-30 | 2016-06-15 | 李朝波 | 一种将计算机指令中立即数扩展的方法和装置 |
CN106796504A (zh) * | 2014-07-30 | 2017-05-31 | 线性代数技术有限公司 | 用于指令预提取的方法和设备 |
CN107463355A (zh) * | 2017-07-28 | 2017-12-12 | 珠海市杰理科技股份有限公司 | 立即数压缩编码方法和*** |
CN108027734A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 空指令的动态生成 |
CN109062604A (zh) * | 2018-06-26 | 2018-12-21 | 天津飞腾信息技术有限公司 | 一种面向标量和向量指令混合执行的发射方法及装置 |
US10572252B2 (en) | 2013-08-08 | 2020-02-25 | Movidius Limited | Variable-length instruction buffer management |
CN111258654A (zh) * | 2019-12-20 | 2020-06-09 | 宁波轸谷科技有限公司 | 指令分支预测方法 |
CN111381876A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | move指令译码方法、数据移动方法、译码器及数据存取装置 |
CN113961247A (zh) * | 2021-09-24 | 2022-01-21 | 北京睿芯众核科技有限公司 | 一种基于risc-v处理器的向量存/取指令执行方法、***及装置 |
CN114116005A (zh) * | 2021-11-29 | 2022-03-01 | 海飞科(南京)信息技术有限公司 | 基于aigpu架构的立即数数据存储方法 |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
US11768689B2 (en) | 2013-08-08 | 2023-09-26 | Movidius Limited | Apparatus, systems, and methods for low power computational imaging |
TWI828934B (zh) * | 2019-08-06 | 2024-01-11 | 南韓商Ictk控股有限公司 | 處理器、處理器的操作方法及包括其的電子裝置 |
Families Citing this family (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7278137B1 (en) | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
US7043682B1 (en) | 2002-02-05 | 2006-05-09 | Arc International | Method and apparatus for implementing decode operations in a data processor |
DE10205523A1 (de) * | 2002-02-08 | 2003-08-28 | Systemonic Ag | Verfahren zum Bereitstellen einer Entwurfs-, Test- und Entwicklungsumgebung sowie ein System zur Ausführung des Verfahrens |
US6976049B2 (en) * | 2002-03-28 | 2005-12-13 | Intel Corporation | Method and apparatus for implementing single/dual packed multi-way addition instructions having accumulation options |
US9088474B2 (en) * | 2002-10-08 | 2015-07-21 | Broadcom Corporation | Advanced processor with interfacing messaging network to a CPU |
US7334086B2 (en) * | 2002-10-08 | 2008-02-19 | Rmi Corporation | Advanced processor with system on a chip interconnect technology |
GB2402757B (en) * | 2003-06-11 | 2005-11-02 | Advanced Risc Mach Ltd | Address offset generation within a data processing system |
GB2402763B (en) * | 2003-06-13 | 2006-03-01 | Advanced Risc Mach Ltd | Data access program instruction encoding |
US20050041746A1 (en) * | 2003-08-04 | 2005-02-24 | Lowell Rosen | Software-defined wideband holographic communications apparatus and methods |
US20050084033A1 (en) * | 2003-08-04 | 2005-04-21 | Lowell Rosen | Scalable transform wideband holographic communications apparatus and methods |
US20050100076A1 (en) * | 2003-08-04 | 2005-05-12 | Gazdzinski Robert F. | Adaptive holographic wideband communications apparatus and methods |
US7302556B2 (en) * | 2003-09-25 | 2007-11-27 | International Business Machines Corporation | Method, apparatus and computer program product for implementing level bias function for branch prediction control for generating test simulation vectors |
CN101002169A (zh) | 2004-05-19 | 2007-07-18 | Arc国际(英国)公司 | 微处理器架构 |
US7526633B2 (en) * | 2005-03-23 | 2009-04-28 | Qualcomm Incorporated | Method and system for encoding variable length packets with variable instruction sizes |
US7581082B2 (en) * | 2005-05-13 | 2009-08-25 | Texas Instruments Incorporated | Software source transfer selects instruction word sizes |
US7747088B2 (en) | 2005-09-28 | 2010-06-29 | Arc International (Uk) Limited | System and methods for performing deblocking in microprocessor-based video codec applications |
US7840001B2 (en) * | 2005-11-04 | 2010-11-23 | Arm Limited | Data processing apparatus |
US20070240164A1 (en) * | 2006-03-15 | 2007-10-11 | Microsoft Corporation | Command line pipelining |
US8879636B2 (en) * | 2007-05-25 | 2014-11-04 | Synopsys, Inc. | Adaptive video encoding apparatus and methods |
DE102007038544A1 (de) * | 2007-08-16 | 2009-02-19 | Robert Bosch Gmbh | Kommunikationsverfahren und Schnittstelle zwischen einem Begleit-Chip und einem Mikrokontroller |
US8108652B1 (en) * | 2007-09-13 | 2012-01-31 | Ronald Chi-Chun Hui | Vector processing with high execution throughput |
US7882325B2 (en) * | 2007-12-21 | 2011-02-01 | Intel Corporation | Method and apparatus for a double width load using a single width load port |
US20090182983A1 (en) * | 2008-01-11 | 2009-07-16 | International Business Machines Corporation | Compare and Branch Facility and Instruction Therefore |
US7971034B2 (en) * | 2008-03-19 | 2011-06-28 | International Business Machines Corporation | Reduced overhead address mode change management in a pipelined, recycling microprocessor |
US9274796B2 (en) | 2009-05-11 | 2016-03-01 | Arm Finance Overseas Limited | Variable register and immediate field encoding in an instruction set architecture |
US20110072238A1 (en) * | 2009-09-20 | 2011-03-24 | Mimar Tibet | Method for variable length opcode mapping in a VLIW processor |
KR101084728B1 (ko) | 2009-12-24 | 2011-11-22 | 서울대학교산학협력단 | 동적 암시 어드레싱 모드를 지원하는 파이프라인 방식의 프로세서 |
US10671391B2 (en) * | 2014-02-25 | 2020-06-02 | MIPS Tech, LLC | Modeless instruction execution with 64/32-bit addressing |
CN104468043B (zh) * | 2014-12-04 | 2019-02-12 | 福建京奥通信技术有限公司 | 一种应用于lte的pbch卷积码快速译码装置及方法 |
KR20160070965A (ko) | 2014-12-11 | 2016-06-21 | 삼성전자주식회사 | 컴파일러 |
US9696992B2 (en) * | 2014-12-23 | 2017-07-04 | Intel Corporation | Apparatus and method for performing a check to optimize instruction flow |
US10642617B2 (en) * | 2015-12-08 | 2020-05-05 | Via Alliance Semiconductor Co., Ltd. | Processor with an expandable instruction set architecture for dynamically configuring execution resources |
WO2019046716A1 (en) * | 2017-08-31 | 2019-03-07 | MIPS Tech, LLC | CONTROLLED INSTRUMENT PROCESSING BY POINTER SIZE |
US10846089B2 (en) * | 2017-08-31 | 2020-11-24 | MIPS Tech, LLC | Unified logic for aliased processor instructions |
WO2021025490A1 (ko) * | 2019-08-06 | 2021-02-11 | 주식회사 아이씨티케이 홀딩스 | 프로세서, 프로세서의 동작 방법 및 이를 포함한 전자 장치 |
US11204768B2 (en) | 2019-11-06 | 2021-12-21 | Onnivation Llc | Instruction length based parallel instruction demarcator |
US11360772B2 (en) | 2020-03-31 | 2022-06-14 | International Business Machines Corporation | Instruction sequence merging and splitting for optimized accelerator implementation |
CN117372495A (zh) * | 2023-09-15 | 2024-01-09 | 进迭时空(杭州)科技有限公司 | 一种加速数字图像处理中不同位宽点积的计算方法 |
Family Cites Families (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4763242A (en) * | 1985-10-23 | 1988-08-09 | Hewlett-Packard Company | Computer providing flexible processor extension, flexible instruction set extension, and implicit emulation for upward software compatibility |
JPH0630063B2 (ja) * | 1989-02-17 | 1994-04-20 | 株式会社東芝 | マイクロプロセッサ |
US5438668A (en) * | 1992-03-31 | 1995-08-01 | Seiko Epson Corporation | System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer |
US5884057A (en) * | 1994-01-11 | 1999-03-16 | Exponential Technology, Inc. | Temporal re-alignment of a floating point pipeline to an integer pipeline for emulation of a load-operate architecture on a load/store processor |
GB2289353B (en) * | 1994-05-03 | 1997-08-27 | Advanced Risc Mach Ltd | Data processing with multiple instruction sets |
GB9412434D0 (en) * | 1994-06-21 | 1994-08-10 | Inmos Ltd | Computer instruction compression |
US5638525A (en) * | 1995-02-10 | 1997-06-10 | Intel Corporation | Processor capable of executing programs that contain RISC and CISC instructions |
US5897660A (en) * | 1995-04-07 | 1999-04-27 | Intel Corporation | Method for managing free physical pages that reduces trashing to improve system performance |
US5905893A (en) * | 1996-06-10 | 1999-05-18 | Lsi Logic Corporation | Microprocessor adapted for executing both a non-compressed fixed length instruction set and a compressed variable length instruction set |
US20010025337A1 (en) * | 1996-06-10 | 2001-09-27 | Frank Worrell | Microprocessor including a mode detector for setting compression mode |
US5896519A (en) * | 1996-06-10 | 1999-04-20 | Lsi Logic Corporation | Apparatus for detecting instructions from a variable-length compressed instruction set having extended and non-extended instructions |
US5961632A (en) * | 1996-07-25 | 1999-10-05 | Texas Instruments Incorporated | Microprocessor with circuits, systems, and methods for selecting alternative pipeline instruction paths based on instruction leading codes |
JP3658101B2 (ja) * | 1996-09-13 | 2005-06-08 | 株式会社ルネサステクノロジ | データ処理装置 |
US5809563A (en) * | 1996-11-12 | 1998-09-15 | Institute For The Development Of Emerging Architectures, Llc | Method and apparatus utilizing a region based page table walk bit |
US6026474A (en) * | 1996-11-22 | 2000-02-15 | Mangosoft Corporation | Shared client-side web caching using globally addressable memory |
TW357318B (en) * | 1997-03-18 | 1999-05-01 | Ind Tech Res Inst | Branching forecast and reading device for unspecified command length extra-purity pipeline processor |
US6085193A (en) * | 1997-09-29 | 2000-07-04 | International Business Machines Corporation | Method and system for dynamically prefetching information via a server hierarchy |
US6101592A (en) * | 1998-12-18 | 2000-08-08 | Billions Of Operations Per Second, Inc. | Methods and apparatus for scalable instruction set architecture with dynamic compact instructions |
US6067565A (en) * | 1998-01-15 | 2000-05-23 | Microsoft Corporation | Technique for prefetching a web page of potential future interest in lieu of continuing a current information download |
US6425070B1 (en) * | 1998-03-18 | 2002-07-23 | Qualcomm, Inc. | Variable length instruction decoder |
US6385641B1 (en) * | 1998-06-05 | 2002-05-07 | The Regents Of The University Of California | Adaptive prefetching for computer network and web browsing with a graphic user interface |
US6473840B2 (en) * | 1998-06-19 | 2002-10-29 | International Business Machines Corporation | Data processing system having a network and method for managing memory by storing discardable pages in a local paging device |
US6862563B1 (en) * | 1998-10-14 | 2005-03-01 | Arc International | Method and apparatus for managing the configuration and functionality of a semiconductor design |
US6282633B1 (en) * | 1998-11-13 | 2001-08-28 | Tensilica, Inc. | High data density RISC processor |
US6347364B1 (en) * | 1998-11-20 | 2002-02-12 | International Business Machines Corp. | Schedulable dynamic memory pinning |
US6701515B1 (en) * | 1999-05-27 | 2004-03-02 | Tensilica, Inc. | System and method for dynamically designing and evaluating configurable processor instructions |
US6477697B1 (en) * | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Adding complex instruction extensions defined in a standardized language to a microprocessor design to produce a configurable definition of a target instruction set, and hdl description of circuitry necessary to implement the instruction set, and development and verification tools for the instruction set |
US6477683B1 (en) * | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6496912B1 (en) * | 1999-03-25 | 2002-12-17 | Microsoft Corporation | System, method, and software for memory management with intelligent trimming of pages of working sets |
EP1050796A1 (en) * | 1999-05-03 | 2000-11-08 | STMicroelectronics S.A. | A decode unit and method of decoding |
EP1050798A1 (en) * | 1999-05-03 | 2000-11-08 | STMicroelectronics SA | Decoding instructions |
US6081799A (en) * | 1999-05-05 | 2000-06-27 | International Business Machines Corporation | Executing complex SQL queries using index screening for conjunct or disjunct index operations |
US6408368B1 (en) * | 1999-06-15 | 2002-06-18 | Sun Microsystems, Inc. | Operating system page placement to maximize cache data reuse |
US6763327B1 (en) * | 2000-02-17 | 2004-07-13 | Tensilica, Inc. | Abstraction of configurable processor functionality for operating systems portability |
US20020004897A1 (en) * | 2000-07-05 | 2002-01-10 | Min-Cheng Kao | Data processing apparatus for executing multiple instruction sets |
US6732238B1 (en) * | 2001-06-08 | 2004-05-04 | Tensilica, Inc. | Set-associative cache memory having variable time decay rewriting algorithm |
-
2003
- 2003-01-31 WO PCT/US2003/002834 patent/WO2003065165A2/en not_active Application Discontinuation
- 2003-01-31 AU AU2003210749A patent/AU2003210749A1/en not_active Abandoned
- 2003-01-31 US US10/356,129 patent/US20030225998A1/en not_active Abandoned
- 2003-01-31 CN CNA038031124A patent/CN1625731A/zh active Pending
- 2003-01-31 EP EP03735088A patent/EP1470476A4/en not_active Withdrawn
- 2003-01-31 KR KR1020047011897A patent/KR100718754B1/ko not_active IP Right Cessation
Cited By (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101344840B (zh) * | 2007-07-10 | 2011-08-31 | 苏州简约纳电子有限公司 | 一种微处理器及在微处理器中执行指令的方法 |
WO2009092180A1 (zh) * | 2008-01-21 | 2009-07-30 | Institute Of Computing Technology Of The Chinese Academy Of Sciences | 一种risc处理器装置及其指令地址转换查找方法 |
CN101833437A (zh) * | 2009-05-19 | 2010-09-15 | 威盛电子股份有限公司 | 适用于微处理器的装置及方法 |
CN101833437B (zh) * | 2009-05-19 | 2013-06-26 | 威盛电子股份有限公司 | 适用于微处理器的装置及方法 |
CN102033735A (zh) * | 2009-09-30 | 2011-04-27 | 英特尔公司 | 使用寄存器扩展在中央处理单元中管理和实现元数据 |
CN102033735B (zh) * | 2009-09-30 | 2015-06-17 | 英特尔公司 | 使用寄存器扩展在中央处理单元中管理和实现元数据 |
CN102298515A (zh) * | 2010-06-22 | 2011-12-28 | 国际商业机器公司 | 执行对两个操作数的操作并随后存储原始值的方法和*** |
CN104025042A (zh) * | 2011-12-30 | 2014-09-03 | 英特尔公司 | 编码以增加指令集密度 |
US11768689B2 (en) | 2013-08-08 | 2023-09-26 | Movidius Limited | Apparatus, systems, and methods for low power computational imaging |
US11579872B2 (en) | 2013-08-08 | 2023-02-14 | Movidius Limited | Variable-length instruction buffer management |
US10572252B2 (en) | 2013-08-08 | 2020-02-25 | Movidius Limited | Variable-length instruction buffer management |
CN106796504B (zh) * | 2014-07-30 | 2019-08-13 | 线性代数技术有限公司 | 用于管理可变长度指令的方法和设备 |
CN106796504A (zh) * | 2014-07-30 | 2017-05-31 | 线性代数技术有限公司 | 用于指令预提取的方法和设备 |
US11681531B2 (en) | 2015-09-19 | 2023-06-20 | Microsoft Technology Licensing, Llc | Generation and use of memory access instruction order encodings |
CN108027734A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 空指令的动态生成 |
CN108027734B (zh) * | 2015-09-19 | 2023-05-16 | 微软技术许可有限责任公司 | 空指令的动态生成 |
CN105677298A (zh) * | 2015-12-30 | 2016-06-15 | 李朝波 | 一种将计算机指令中立即数扩展的方法和装置 |
CN105677298B (zh) * | 2015-12-30 | 2018-03-27 | 李朝波 | 一种将计算机指令中立即数扩展的方法和装置 |
CN107463355B (zh) * | 2017-07-28 | 2020-03-31 | 珠海市杰理科技股份有限公司 | 立即数压缩编码方法和*** |
CN107463355A (zh) * | 2017-07-28 | 2017-12-12 | 珠海市杰理科技股份有限公司 | 立即数压缩编码方法和*** |
CN109062604A (zh) * | 2018-06-26 | 2018-12-21 | 天津飞腾信息技术有限公司 | 一种面向标量和向量指令混合执行的发射方法及装置 |
CN111381876B (zh) * | 2018-12-28 | 2022-12-09 | 上海寒武纪信息科技有限公司 | move指令译码方法、数据移动方法、译码器及数据存取装置 |
CN111381876A (zh) * | 2018-12-28 | 2020-07-07 | 上海寒武纪信息科技有限公司 | move指令译码方法、数据移动方法、译码器及数据存取装置 |
TWI828934B (zh) * | 2019-08-06 | 2024-01-11 | 南韓商Ictk控股有限公司 | 處理器、處理器的操作方法及包括其的電子裝置 |
CN111258654A (zh) * | 2019-12-20 | 2020-06-09 | 宁波轸谷科技有限公司 | 指令分支预测方法 |
CN113961247A (zh) * | 2021-09-24 | 2022-01-21 | 北京睿芯众核科技有限公司 | 一种基于risc-v处理器的向量存/取指令执行方法、***及装置 |
CN113961247B (zh) * | 2021-09-24 | 2022-10-11 | 北京睿芯众核科技有限公司 | 一种基于risc-v处理器的向量存/取指令执行方法、***及装置 |
CN114116005A (zh) * | 2021-11-29 | 2022-03-01 | 海飞科(南京)信息技术有限公司 | 基于aigpu架构的立即数数据存储方法 |
CN114116005B (zh) * | 2021-11-29 | 2022-12-23 | 海飞科(南京)信息技术有限公司 | 基于aigpu架构的立即数数据存储方法 |
Also Published As
Publication number | Publication date |
---|---|
KR20040101215A (ko) | 2004-12-02 |
EP1470476A2 (en) | 2004-10-27 |
WO2003065165A3 (en) | 2003-11-27 |
WO2003065165A2 (en) | 2003-08-07 |
AU2003210749A1 (en) | 2003-09-02 |
US20030225998A1 (en) | 2003-12-04 |
EP1470476A4 (en) | 2007-05-30 |
KR100718754B1 (ko) | 2007-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1625731A (zh) | 具有多种长度指令集体系结构的可配置数据处理器 | |
CN1112635C (zh) | 多媒体信号处理器中的单指令多数据处理方法及其装置 | |
CN1135468C (zh) | 对存储设备中信号数据字执行数字信号处理的方法和装置 | |
CN1103961C (zh) | 协处理器的数据访问控制装置和方法 | |
CN1117316C (zh) | 采用多个向量寄存器组的单指令多数据处理方法及其装置 | |
CN1246772C (zh) | 处理器 | |
CN1202470C (zh) | 处理器 | |
CN1194292C (zh) | 具有改良的指令集体系结构的微处理器 | |
CN1287270C (zh) | 重启动翻译的指令 | |
CN1584824A (zh) | 一种基于cisc结构的微处理器构架及指令实现方式 | |
CN1186718C (zh) | 微控制器指令集 | |
CN1126030C (zh) | 数据处理装置 | |
CN1497435A (zh) | 处理器 | |
CN1472646A (zh) | 适应性强具备最佳化功能的编译装置 | |
CN1107983A (zh) | 一种数据处理***及其方法 | |
CN1226323A (zh) | 数据处理装置寄存器 | |
CN1641567A (zh) | 自堆栈快取存储器进行快速推测性弹出操作方法及装置 | |
CN1484787A (zh) | 处理器流水线中的硬件指令翻译 | |
CN1103959C (zh) | 数据处理装置和操作数据处理装置的方法 | |
CN1269030C (zh) | 高速缓存的快取线选取目标地址的装置及方法 | |
CN1137421C (zh) | 可编程控制器 | |
CN1269052C (zh) | 支持缩小代码长度的常量还原型处理器 | |
CN1152300C (zh) | 多媒体信号处理器中的单指令多数据处理方法及其装置 | |
CN1104679C (zh) | 数据处理装置和数据处理方法 | |
CN1254740C (zh) | 使用协处理器的数据处理 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |