[0001] The present invention relates generally to superscalar computers, and more particularly,
a system and method for using tags to control instruction execution in a superscalar
reduced instruction set computer (RISC).
[0002] One technique for maintaining the instruction order uses a reorder buffer to keep
dependency information in the correct order. This technique, described by Johnson
in "Superscalar Microprocessor Design", Prentice Hall, 1991; pages 48-50 and 139-142,
maintains dependency information in the reorder buffer so that this order does not
need to be maintained in the instruction window. Reorder buffer entries are allocated
at the top of a FIFO and are deallocated as results are written to the register file.
[0003] When an instruction is decoded, its result value is assigned a reorder-buffer location
and its destination register is renamed to this location. A tag is created to identify
this result and the tag is stored in the assigned re-order buffer location. When a
subsequent instruction refers to the renamed destination register, the instruction
obtains the value stored in the reorder buffer. When an instruction is decoded, the
register numbers of its source operands are used to access the reorder buffer and
the register file. The reorder buffer is content-addressable and associative lookup
is used to retrieve the appropriate value. If the reorder buffer has a matching entry,
the value in this entry is selected as the source operand.
[0004] Processors used in conventional computer systems typically execute program instructions
one at a time, in sequential order. The process of executing a single instruction
involves several sequential steps. The first step generally involves fetching the
instruction from a memory device. The second step generally involves decoding the
instruction, and assembling any operands. The third step generally involves executing
the instruction, and storing the results. Some processors are designed to perform
each step in a single cycle of the processor clock. Alternatively, the processor may
be designed so that the number of processor clock cycles per step depends on the particular
instruction.
[0005] Modern computers commonly use a technique known as pipelining to improve performance.
Pipelining involves the overlapping of the sequential steps of the execution process.
For example, while the processor is perforating the execution step for one instruction,
it might simultaneously perform the decode step for a second instruction, and perform
a fetch of a third instruction. Pipelining can thus decrease the execution time for
a sequence of instructions. Superpipelined processors attempt to further improve performance
by overlapping the sub-steps of the three sequential steps discussed above.
[0006] Another technique for improving performance involves executing more than one instruction
in parallel, simultaneously. Processors which utilize this technique are generally
referred to as superscalar processors. The ability of a superscalar processor to execute
two or more instructions simultaneously depends upon the particular instructions being
executed. For example, two instructions which both require use of the same, limited
processor resource (such as the floating point unit) cannot be executed simultaneously.
This type of conflict is known as a resource conflict. Additionally, an instruction
which depends on the result produced by execution of a previous instruction cannot
be bundled with that previous instruction. The instruction which depends on the result
of the previous instruction is said to have a data dependency on the first instruction.
Similarly, an instruction may have a procedural dependency on a previous instruction,
which prevents the two instructions from being executed simultaneously.
[0007] Thus, a superscalar processor seeks to execute more than one instruction at a time.
In order to do this a processor must contain a system for executing multiple instructions
called an Execution Unit (e.g., floating point unit and integer unit, etc.). The Execution
Unit must be supplied with a group of instructions that it is to execute in the near
future. This group of instructions are typically located in a so called "instruction
window." The Window provides a "snap-shot" of an instruction program.
[0008] The above mentioned Window is normally located in an Instruction Fetch Unit. The
Instruction Fetch Unit fetches a group of instructions from memory; decodes the instructions
and sends them to a Super-Scalar Unit. The Super-Scalar Unit issues the instructions
to the various functional units. The Super-Scalar unit needs information showing which
of the microprocessor's resources the instruction will use (e.g., Load/Store); the
names of registers where an instruction's inputs will come from (e.g., integer unit
register file) and its output will go to (e.g., floating-point unit register file),
information indicating what function the instruction will perform (e.g., add, multiply),
etc. As a result of knowing this information, once the instructions are completed,
the Superscalar Unit notifies the Instruction Fetch Unit to remove them from the window
and add new instructions to take their place.
[0009] Current designs employ an instruction window that utilizes a First In First Out queue
(FIFO). The data in the FIFO can only be advanced a "fixed amount." For example, an
instruction window might contain four instructions (I0-I3) and may be changed in groups
of four. In this case, after instructions I0, I1, I2, and I3 have executed, they are
removed from the window and four more instructions are advanced into the window. The
Super-Scalar Unit can easily follow the progress of the instructions through the window,
since the window changes by a fixed amount each time a group of instructions are completed.
[0010] Fixed advance windows have some drawbacks. One instruction can delay the group instructions
from being removed from the window. For example, if I0, I1, I2 are instructions that
all execute in one cycle, and I3 is an instruction that requires many cycles to execute,
then I0, I1, and I2 will have to remain in the window even after they are completed,
until I3 completes execution; instead of being pushed out of the FIFO and replaced
by three new instructions. This stalls the instruction stream (i.e., a bottleneck)
and tends to limit performance.
[0011] One solution for fixed advance windows (FIFOs) is an instruction window that can
be advanced by a variable amount. This would permit instructions to be removed from
the window immediately after they have been executed. Instruction execution is much
more complex using variable advance windows, since an instruction may be located in
several places in the FIFO. For example, if I1 is executed during the same cycle that
I0 is retiring (completed), then in the next cycle I0 will be pushed out of the FIFO,
and I1 will move into I0's slot in the FIFO (where I0 and I1 refer to slot locations
in a FIFO and not instruction program order). The Super-scalar Unit must know that
the new I0 was once I1, so that it can retire instructions when they are executed.
And the Execution Unit can write corresponding results into correct register files
addresses of the functional units.
[0012] Although this would improve performance, there are drawbacks associated with this
system. Typically, it is necessary to employ a large principal queue (usually in the
Super-scalar unit) that contains the instructions from the Instruction Fetch Unit.
Additionally, several other centrally located queues would need to contain the decoded
information associated with each instruction located in the principal queue (i.e.,
a resource queue, a destination register queue, etc.). The principal queue and the
queues that contain the decoded information, would all need to advance in parallel
in order to keep track of instructions (i.e., where they should be sent, when they
are executed, etc.).
[0013] Currently, the idea of using several queues to contain instructions is disadvantageous,
for many reasons including: a large amount of chip area resources are dedicated to
a plurality of queues; there is not as much flexibility in designing a system with
more than one queue; and control logic for directing data in queues is intricate and
inflexible.
[0014] Therefore, what is needed is technique to "track" or monitor instructions after they
are decoded. The system must require a small area on a chip; be flexible and must
be able to properly monitor instructions as they advance through a "Variable Advance
Instruction Window."
Summary of Invention
[0015] The present invention is directed to a technique of monitoring instruction execution
of multiple instructions in parallel by a system that assigns tags to the multiple
instructions. The system is a component of a super-scalar unit which is coupled between
an instruction fetch unit (which sends instructions from a memory unit) and an execution
unit (which executes the instructions). The super-scalar unit is in charge of directing
instructions to various functional units in the execution unit and notifying the instruction
fetch unit when instructions are executed or no longer needed (retired) so that the
instruction fetch unit can forward additional instructions to the execution unit.
The present invention provides a mechanism for the super-scalar unit to monitor instructions
(which may execute out-of-program order) and advance in the instructions in the "instruction
window" in a variable fashion.
[0016] The present invention employs a tag monitor system, which is a part of the super-scalar
unit. The tag monitor system includes: a register file and a queue that operates on
a First-In-First-Out basis (FIFO). The register file is coupled to the instruction
fetch unit and is used to store decoded instructions (i.e., resource requirements
of each instruction). The queue is coupled to the register file. Each slot of the
queue contains a tag. When an instruction is sent from the instruction fetch unit
it is assigned a tag that is not currently assigned to any active decoded instructions
being stored in the register file. The instruction is then stored in the register
file at an address location indicated by the tag in the register file.
[0017] Each time an instruction is retired, the queue advances (the queue advances in instruction
program order). Typically, a tag is pushed out the bottom of the queue when its respective
instruction is retired. That tag can be reassigned to a new instruction sent from
the instruction fetch unit. Accordingly, the tag is then sent back to the top of the
queue (in other words, it is recycled). During every processor cycle each slot of
the queue is output to a read enable port of the register file, which displays the
register file's contents in program order. The queue will typically advance by the
number of instructions that retire from a previous execution cycle.
[0018] The register file has write ports where instructions are received from the instruction
fetch unit. The maximum number of instructions that can be written into the register
file is determined by the maximum number of instructions (tags) that be advanced at
one time by the queue. The output port of the register file (read data port) has a
port for every instruction stored in the register file (corresponding to the number
of slots of the queue).
[0019] One feature of the present invention is that decoded instructions can be identified
without the need for multiple queues. This simplifies design and increases operational
flexibility. Additionally, the amount of area required on a chip is reduced.
[0020] Further features and advantages of the present invention, as well as the structure
and operation of various embodiments of the present invention, are described in detail
below with reference to the accompanying drawings.
Brief Description of the Drawings
[0021] Fig. 1 is a block diagram of a superscalar environment 101.
[0022] Fig. 2 shows a block diagram of a Tag Monitor System 222 located within a portion
of superscalar unit 106 (shown as dotted lines).
[0023] Fig. 3 is a flow chart illustrating the operation of tag monitor system 222.
[0024] The left-most digit of a reference number identifies the drawing in which the reference
number first appears.
Detailed Description of the Invention
1.0 System Environment
[0025] Fig. 1 is a block diagram of a superscalar environment 101. Superscalar environment
101 includes: a Memory Unit 102, an Instruction Fetch Unit 104, a Super-Scalar Unit
106, and an Execution Unit 108.
[0026] Super-scalar unit 106 controls execution of instructions that occurs in the execution
unit 108. The execution unit 108 may include functional units such as a floating-point
unit (not shown), an integer unit (not shown), a load/store unit (not shown) and other
such functional units commonly used by processors depending on the desired application.
[0027] Instruction fetch unit 104 fetches a group of instructions from memory 102 via a
bus 103, decodes them and sends them to superscalar unit 106 via a bus 105. Super-scalar
unit 106 then issues the instructions to the execution unit 108. Generally, the super-scalar
unit 106 monitors execution unit 108 availability and checks for dependencies between
instructions. Once the instructions are completed, super-scalar unit 106 retires instructions.
This is performed by removing completed instructions from a window in superscalar
unit 106 (to be described). Superscalar unit 106 can then send a signal on bus 105
to direct instruction fetch unit 104 to send more instructions. This enables superscalar
unit 106 to refresh the window (not shown, in Fig. 1) with new instructions.
[0028] In the preferred embodiment instructions have a fixed length of 32 bits. Busses shown
in Fig. 1 represent data and control signals. Bus and instruction size may vary depending
on the application. The remaining discussion will be focused on a tag monitor system,
which tracks instructions in superscalar unit 106.
2.0 Operation and Structure of the Tag Monitor System
A. Structure
[0029] Fig. 2 shows a block diagram of a Tag Monitor System 222 located within a portion
of superscalar unit 106 (shown as dotted lines). Tag Monitor System 222 includes:
a Register File 202, a Tag FIFO 204, and control logic 207.
[0030] Tag FIFO 204 is a queue that stores (or holds) tags 0-7 located in slots 206. A tag
is a unique label (a binary digit 0-7) assigned to an instruction at the time an instruction
is transferred from the instruction fetch unit 104 and stored in the super-scalar
unit 106 in register file 202.
[0031] Once a tag is assigned to an instruction, it will remain with that instruction until
the instruction is retired. An instruction is retired after: 1) it results have been
compared or stored; and/or 2) it has been executed by execution unit 108, and/or is
no longer needed for any reason. Once an instruction is retired, the corresponding
tag is pushed out the bottom 210 of tag FIFO 204 and sent back to the top 212 of tag
FIFO 206. Now, the tag is reassigned to a new instruction sent from the instruction
fetch unit 104. In this fashion tags are "recycled" or are recirculated in tag FIFO
204.
[0032] Register file 202 is coupled to tag FIFO 204 and instruction fetch unit 104. Register
file 202 stores execution data (destination register in execution unit 108, resource
requirements, operation function and so forth) of an instruction sent from instruction
fetch unit 104. Register file 202 includes: a write data port 214, a write address
port 216, a write enable port 218, a read address port 220, and read data port 224.
Register file 202 is a random access memory.
[0033] Write data port 214 receives instruction execution data from instruction fetch unit
104. Instruction execution data is transported on busses 208. As shown in Fig. 2,
W.D.A stands for "write instruction execution data A" and W.D.B. stands for "write
instruction execution data B" and so forth. Letters are used to identify instructions
to avoid confusion with instruction program order.
[0034] Write address ports 216 specify what tag location in register file 202 to store instructions.
Write address port 216 is coupled to control logic 207. Write enable port 218 is also
coupled to control logic 207. Active enable signals 226 will permit data be written
into register file 202.
[0035] Read address port 220 is coupled to tag FIFO 204 via busses (outputs) 230. Each slot
206 in tag FIFO 204 is coupled as an output signal to a read address port 206 (R.A.7-R.A.0).
Accordingly, read address port 220 will enable the contents of register file 202 to
be selected by tag FIFO 204 and read from read data port 224. The outputs 230 of tag
FIFO 204 permit the register file 202 to display its contents in order. In other words,
outputs 230 show the decoded instructions in program order.
[0036] Typically, register file 202 is connected to other elements (e.g. an issuer not shown)
located within super-scalar unit 106, which require instructions to appear in program
order.
[0037] To reiterate, a decoded instruction is stored in register file 202 by tag. For instance,
if instruction B is assigned tag 4, then its decoded information will be stored in
address 4 of register file 202.
[0038] Control logic 207 is comprised of logic circuits. Control logic 207 monitors the
execution unit 108 via bus 234 and tag FIFO 204. Control logic 207 will signal the
instruction fetch unit 104 to send new instructions to register file 202, once an
instruction is retired. Control logic 207 will also indicate how many new instructions
for instruction fetch unit 104 to send. In the preferred embodiment the maximum number
of instructions that can be sent at one time is 4, which corresponds to the write
ports in register file 202. Control logic 204 will also synchronize tag FIFO 204 to
advance the same number of instruction requested via a signal 236. Tag FIFO can advance
1, 2, 3 or 4 steps at a time. The circuit implementation for control logic 207 would
be readily apparent to those skilled in the art. For example, currently well known
and commercially available logic and layout systems can be used to convert a behavior
description (i.e., Verilog or V.H.D.L.) to a silicon or chip design.
B. Operation
[0039] Fig. 3 is a flow chart illustrating the operation of tag monitor system 222. Operational
steps 301-312 will be described with reference to hardware elements of Figs. 1 and
2.
[0040] In step 302, control logic 207 sends a request data signal 238 to instruction fetch
unit 104 indicating the number of instruction(s) needed. For example, if one instruction
is needed to fill a gap (due to instruction retirement) in register file 202, then
control logic 207 will send a request data signal 238 to instruction fetch unit 104
requesting a new instruction for execution.
[0041] In step 304, control logic 207 sends an active logic signal 228 and 226 to write
address port 216 and write enable port 218, respectively. Control logic 304 will only
activate write ports that correspond to slots A-D that have received a newly retired
tag. For example, if tag FIFO 106 advanced by one in step 312 previously (to be described),
then tag 0 would appear in slot I7, which corresponds to instruction address A. Accordingly,
only write address signal 228A and write enable signal 226A is activated, by control
logic 207 in this example. Thus, only port 216A is enabled.
[0042] In step 306, instruction(s) (instruction execution data) are sent from the instruction
fetch unit 104 to register file 202 via bus 208. Instructions sent from the instruction
fetch unit 104 are stored in the register file by tag numbers assigned to those instructions.
In other words, instructions are written into register file 202 at an address location
indicated by the corresponding tag number from one or more (depending on how many
instructions are sent from instruction fetch unit 104) of the first four slots (A,B,C,D)
of tag FIFO 204, which are sent to write address port 216. For example, if one instruction
is sent from instruction fetch unit 104 to register file 202, it will be transferred
on bus 208A. It is stored in address location "0" according to the tag located in
the top slot (I7 location) of tag FIFO 204, which is read out of tag FIFO via bus
232A; transported through control 207 and sent to write address port 216A via bus
228A.
[0043] In step 308, instructions are read out of register file read data port 224. Register
file 202 will display its contents in program order. Each slot 206 of tag FIFO 204
is output and transported on busses 230 to read address port 220. Read address port
220 enables contents (data out 240) from register file to be displayed. Outputs 230
of tag FIFO 204 show a "snap shot" of the actual program order, because tag FIFO 204
is always in sync with variable advanced instructions sent from instruction fetch
unit 104 and instruction retirement. Thus, as a result of having outputs 230 of tag
FIFO 204 coupled to read address port 220, data outputs 240 of register file 202 will
show execution data of the instructions in program order. For example, read address
port 7 (R.A.7) will enable I7's instruction data (which corresponds to tag 0), to
be read out of read data port 7 (R.D.7) and tag 1 will read out I0's execution data.
[0044] Additionally, in step 308, the read-out decoded-instructions are issued to the execution
unit 108 and executed.
[0045] In decisional step 310, control 307 waits for any instructions to retire. If no instructions
retire data will continue to be read out of register file 202, as indicated by the
"NO" path of decisional step 310. If instructions do retire control logic 207 will
receive an active retirement status signal 234, as shown in step 312. Retirement status
signal 234 indicates to control logic 207 how many empty slots (how many slots to
advance tag FIFO 204) need to be filled in tag FIFO 204. An empty space can also occur
in tag FIFO 204 where there are invalid instructions (i.e., cache misses, branches,
etc.) sent from instruction fetch unit 104. Additionally, in step 312 control logic
207 sends an advance data signal 236 to tag FIFO 204 indicating the number(s) (corresponding
to number of instructions needed) of times to advance tag FIFO 204. Referring to Fig.
2, tag 1 will move into I7's slot and all other tags will be advanced accordingly.
Tag 2 should be located at the bottom 210 of tag FIFO 206 after step 312. Now, the
operation of tag monitor system 222 will continue by returning to operational step
302 discussed above.
[0046] While various embodiments of the present invention have been described above, it
should be understood that they have been presented by way of example only, and are
not intended to be limiting. Thus, the breadth and scope of the present invention
should not be limited by any of the above described exemplary embodiments, but should
be defined only in accordance with the filing claims and their equivalents.
1. A system for assigning tags to instructions in a processor, the processor having a
memory unit (102) for storing instructions to be executed, an instruction fetch unit
(104) for decoding instructions retrieved from said memory unit (102), and a register
file (202) for storing the decoded instructions and having a plurality of read enable
ports (220) and corresponding read output ports (224), the system comprising:
a tag queue (204) for storing tags used to tag the decoded instructions; and
a control unit (207) comprising
means for assigning said tags to the decoded instructions in the order in which tags
are stored in the queue,
means for monitoring when instructions are executed, and
means for advancing tags in the queue (204) upon completion of an executed instruction;
characterized in that
the tags are applied to the register file (202) to store each instruction at a location
addressed by the tag assigned to that instruction; and wherein said tags are applied
to said read enable ports (220) in the order in which they are maintained in said
tag queue (204) to read the decoded instructions at said read output ports (224).
2. The system according to claim 1, wherein said tag queue (204) further comprises:
means for advancing the tags each time an instruction is retired; and
means for recycling a tag in said tag queue (204) to make that tag available for assigning
to a new instruction.
3. The system according to claim 1 or 2, wherein said control unit (207) further comprises
means for requesting a number of instructions, wherein said number is less than or
equal to the number of instructions retired in a previous cycle.
4. A method of maintaining instruction data in program order in a microprocessor capable
of executing instructions out of program order, comprising the steps of:
assigning a tag to each instruction as it is issued;
storing execution data (208) for each instruction in a register file (202) at a location
indicated by said tag assigned to that instruction;
maintaining said tags in a sequential tag file (204) in an order in which they were
assigned; and
applying said tags in said tag file (204) to said register file (202) to read said
execution data (208) in the program order.
5. The method according to claim 4, further comprising the step of issuing an instruction
using an instruction fetch unit (104).
6. The method according to claim 4 or 5, wherein said step of maintaining said tags comprises
the steps of:
advancing the tags in said tag file (204) each time an instruction is retired; and
recycling the tag at the bottom (210) of said tag file (204) to the top (212) of said
tag file (204) to make that tag available for assigning to a new instruction.
7. The method according to claim at least one of claims 4-6, further comprising the step
of sending a request signal (238) to an instruction fetch unit to request an instruction.
8. The method according to claim at least one of claims 4-6, further comprising the step
of requesting a number of instructions, wherein said number is less than or equal
to the number of instructions retired in a previous cycle.
1. System zum Zuordnen von Tags zu Befehlen in einem Prozessor, wobei der Prozessor eine
Speichereinheit (102) aufweist zum Speichern von auszuführenden Befehlen, eine Befehlsabrufeinheit
(104) zum Dekodieren von Befehlen, welche von der Speichereinheit (102) wiedergewonnen
werden, und eine Registerdatei (202) zum Speichern von dekodierten Befehlen und die
eine Vielzahl von Lese-Freigabekanälen (220) und entsprechende Leseausgabekanäle (224)
aufweist, wobei das System umfaßt:
eine Tag-Warteschlange (204) zum Speichern von Tags, welche dazu verwendet werden,
die dekodierten Befehle zu markieren; und
eine Steuereinheit (207) mit einer Einrichtung zum Zuordnen der Tags zu den dekodierten
Befehlen in einer Reihenfolge, in welcher die Tags in der Warteschlange gespeichert
sind, mit einer Einrichtung zum Überwachen, wann die Befehle ausgeführt werden und
mit einer Einrichtung zum Vorwärtsbefördern der Tags in der Warteschlange (207) nach
dem Beenden eines ausgeführten Befehls;
dadurch gekennzeichnet,
daß die Tags der Registerdatei (202) zugeführt werden, um jeden Befehl an einer Stelle
zu speichern, welche durch das Tag, das diesem Befehl zugeordnet ist, adressiert wird
und daß die Tags den Lese-Freigabekanälen (220) in der Reihenfolge zugeführt werden,
in welcher sie in der Warteschlange gehalten werden, um die dekodierten Befehle an
den Leseausgabekanälen (224) zu lesen.
2. System nach Anspruch 1, worin die Tag-Warteschlange (204) weiterhin umfaßt:
eine Einrichtung zum Vorwärtsbefördern der Tags immer dann, wenn ein Befehl abgeschlossen
wird; und
eine Einrichtung zum Recycling eines Tags in der Tag-Warteschlange (204), um dieses
Tag für die Zuordnung zu einem neuen Befehl verwendbar zu machen.
3. System nach Anspruch 1 oder 2, worin die Steuereinrichtung (207) weiterhin eine Einrichtung
umfaßt zum Anfordern einer Anzahl von Befehlen, worin die Anzahl geringer oder gleich
der Anzahl der Befehle ist, die in einem vorangehenden Zyklus abgeschlossen wurden.
4. Verfahren zum Halten von Befehlsdaten in Programmreihenfolge in einem Mikroprozessor,
der in der Lage ist, Befehle außerhalb der Programmreihenfolge auszuführen, mit folgenden
Schritten:
Zuordnen eines Tags zu jedem Befehl, wenn dieser ausgegeben wird;
Speichern von Ausführungsdaten (208) für jeden Befehl in einer Registerdatei (202)
an einer Stelle, welche durch das diesem Befehl zugeordnete Tag angezeigt wird;
Halten der Tags in einer sequentiellen Tag-Datei (204) in einer Reihenfolge, in welcher
sie zugeordnet wurden; und
Zuführen der Tags in der Tag-Datei (204) zu der Registerdatei (202), um die Ausführungsdaten
(208) in Programmreihenfolge zu lesen.
5. Verfahren nach Anspruch 4, weiterhin umfassend den Schritt des Ausgebens eines Befehls
unter Verwendung einer Befehlsabrufeinheit (104).
6. Verfahren nach Anspruch 4 oder 5, worin der Schritt des Haltens der Tags folgende
Schritte umfaßt:
Vorwärtsbefördern der Tags in der Tag-Datei (204) immer dann, wenn ein Befehl abgeschlossen
wird; und
Recycling des Tags am unteren Ende (210) der Tag-Datei (204) zur obersten Position
(212) der Tag-Datei (204), um das Tag für die Zuordnung zu einem neuen Befehl zur
Verfügung zu stellen.
7. Verfahren nach wenigstens einem Ansprüche 4 bis 6, weiterhin umfassend den Schritt
des Sendens eines Anforderungssignals (238) an eine Befehlsabrufeinheit, um einen
Befehl anzufordern.
8. Verfahren nach wenigstens einem der Ansprüche 4 bis 6, weiterhin umfassend den Schritt
des Anforderns einer Anzahl von Befehlen, worin diese Anzahl geringer oder gleich
der Anzahl der Befehle ist, die in einem vorangehenden Zyklus abgeschlossen wurden.
1. Système d'attribution d'étiquettes à des instructions dans un processeur, le processeur
ayant une unité de mémoire (102) pour mémoriser des instructions à exécuter, une unité
de prise en charge d'instructions (104) pour décoder des instructions extraites de
ladite unité de mémoire (102), et un fichier de registres (202) pour mémoriser les
instructions décodées et ayant une pluralité de ports de validation de lecture (220)
et de ports de sortie de lecture (224) correspondants, le système comprenant :
- une file d'attente d'étiquettes (204) pour mémoriser des étiquettes utilisées pour
étiqueter les instructions décodées; et
- une unité de commande (207) comprenant
- des moyens pour attribuer lesdites étiquettes aux instructions décodées dans l'ordre
dans lequel les étiquettes sont mémorisées dans la file d'attente,
- des moyens pour contrôler quand des instructions sont exécutées, et
- des moyens pour faire avancer des étiquettes dans la file d'attente (204) lors de
l'achèvement d'une instruction exécutée;
caractérisé en ce que :
- les étiquettes sont appliquées au fichier de registres (202) pour mémoriser chaque
instruction à une position adressée par l'étiquette attribuée à cette instruction;
et en ce que lesdites étiquettes sont appliquées auxdits ports de validation de lecture
(220) dans l'ordre dans lequel elles sont maintenues dans ladite file d'attente d'étiquettes
(204) pour lire les instructions décodées auxdits ports de sortie de lecture (224).
2. Système selon la revendication 1, dans lequel ladite file d'attente d'étiquettes (204)
comprend en outre :
- des moyens pour faire avancer les étiquettes chaque fois qu'une instruction est
retirée; et
- des moyens pour recycler une étiquette dans ladite file d'attente d'étiquettes (204)
pour que cette étiquette soit disponible pour être attribuée à une nouvelle instruction.
3. Système selon la revendication 1 ou 2, dans lequel ladite unité de commande (207)
comprend en outre des moyens pour demander un nombre d'instructions, dans lequel ledit
nombre est inférieur ou égal au nombre d'instructions retirées dans un cycle précédent.
4. Procédé de maintien de données d'instruction dans l'ordre d'un programme dans un microprocesseur
capable d'exécuter des instructions en dehors de l'ordre du programme, comprenant
les étapes consistant à :
- attribuer une étiquette à chaque instruction quand elle est délivrée;
- mémoriser des données d'exécution (208) pour chaque instruction dans un fichier
de registres (202) à une position indiquée par ladite étiquette attribuée à cette
instruction;
- maintenir lesdites étiquettes dans un fichier d'étiquettes séquentiel (204) dans
l'ordre dans lequel elles ont été attribuées; et
- appliquer lesdites étiquettes dans ledit fichier d'étiquettes (204) audit fichier
de registres (202) pour lire lesdites données d'exécution (208) dans l'ordre du programme.
5. Procédé selon la revendication 4, comprenant en outre l'étape consistant à délivrer
une instruction en utilisant une unité de prise en charge d'instructions (104).
6. Procédé selon la revendication 4 ou 5, dans laquelle ladite étape consistant à maintenir
lesdites étiquettes comprend les étapes consistant à :
- faire avancer les étiquettes dans ledit fichier d'étiquettes (204) chaque fois qu'une
instruction est retirée; et
- recycler l'étiquette du bas (210) dudit fichier d'étiquettes (204) en haut (212)
dudit fichier d'étiquettes (204) pour rendre l'étiquette disponible pour être attribuée
à une nouvelle instruction.
7. Procédé selon au moins l'une des revendications 4 à 6, comprenant en outre l'étape
consistant à envoyer un signal de demande (238) à une unité de prise en charge d'instructions
pour demander une instruction.
8. Procédé selon au moins l'une des revendications 4 à 6, comprenant en outre l'étape
consistant à demander un nombre d'instructions, dans laquelle ledit nombre est inférieur
ou égal au nombre d'instructions retirées dans un cycle précédent.