15.01.2013 Views

U. Glaeser

U. Glaeser

U. Glaeser

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Look-up<br />

for r7<br />

FIGURE 6.12 Methods for keeping track of the actual mapping of architectural registers to rename buffers. (RB<br />

designates rename buffer.)<br />

mapping within the rename buffers themselves. In the following section we outline these methods,<br />

illustrated in Fig. 6.12.<br />

A mapping table has as many entries as there are architectural registers in the instruction set architecture<br />

(ISA), usually 32. Each entry holds a status bit (called the entry valid bit in the figure), which indicates<br />

whether the associated architectural register is renamed. Each valid entry supplies the index of the rename<br />

buffer, which is allocated to the architectural register belonging to that entry (called the RB-index). For<br />

instance, the left side of Fig. 6.12 shows that the mapping table holds a valid entry for architectural<br />

register r 7, which contains the RB-index of 12, indicating that the architectural register r 7 is actually<br />

renamed to rename buffer number 12. As already indicated, usually each entry is set up during instruction<br />

issue while new rename buffers are allocated to the issued instructions. A valid mapping is updated when<br />

the architectural register belonging to that entry is renamed again, and it will be invalidated when the<br />

instruction associated with the actual renaming completes. In this way, the mapping table continuously<br />

holds the latest allocations. Source registers of issued instructions are renamed by accessing the mapping<br />

table with the register numbers as indices and fetching the associated rename buffer identifiers (RB-indices),<br />

as shown in Fig. 6.12.<br />

We note that for split architectural register files obviously separate FX- and FP-mapping tables are<br />

needed.<br />

Mapping tables should provide one read port for each source operand that may be fetched in any one<br />

cycle, and one write port for each rename buffer that may be allocated in any one cycle (as discussed<br />

earlier in the section on “Number of Read and Write Ports”).<br />

The other fundamentally different alternative for keeping track of the actual register mappings relies<br />

on an associative mechanism (see the right side of Fig. 6.12). In this case no mapping table exists but<br />

each rename buffer holds the identifier of the associated architectural register (usually the register number<br />

of the renamed destination register) and additional status bits as well. These entries are set up usually<br />

during instruction issue when a particular rename buffer is allocated to a specified destination register.<br />

As Fig. 6.12 shows, in this case each rename buffer holds five pieces of information: (1) a status bit, which<br />

indicates that this rename buffer is actually allocated (called the entry valid bit in the figure), (2) the<br />

identifier of the associated architectural register (Dest. reg. no.), (3) a further status bit, called the latest<br />

© 2002 by CRC Press LLC<br />

0<br />

5<br />

6<br />

7<br />

8<br />

Using a<br />

mapping table<br />

Entry<br />

valid<br />

RB<br />

index<br />

Mapping<br />

table<br />

1<br />

0<br />

1<br />

1<br />

7<br />

12<br />

14<br />

"12"<br />

(RB index = 12)<br />

Method for keeping track of the<br />

actual register mapping<br />

Assoc.<br />

look-up<br />

for r7<br />

0<br />

9<br />

10<br />

11<br />

12<br />

Entry<br />

valid<br />

Dest.<br />

reg. nr.<br />

Mapping within<br />

the rename buffers<br />

Latest<br />

bit<br />

Value<br />

Rename buffers<br />

Value<br />

valid<br />

1 8 1<br />

80<br />

1<br />

1 7 0<br />

7<br />

1<br />

1 9 1<br />

-<br />

0<br />

1 7 1 70 1<br />

"12"<br />

(RB index = 12)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!