Intel NETWORK PROCESSOR IXP2800 User Manual

Page 40

Advertising
background image

40

Hardware Reference Manual

Intel

®

IXP2800 Network Processor

Technical Description

As shown in

Example 1

, there is a latency in loading LM_ADDR. Until the new value is loaded,

the old value is still usable.

Example 5

shows the maximum pipelined usage of LM_ADDR.

LM_ADDR can also be used as the base of a 16 32-bit word region of memory, with the instruction

specifying the offset from that base, as shown in

Example 6

. The source and destination can use

different offsets.

Note: Local Memory has 640 32-bit words. The local memory pointers (LM_ADDR) have an addressing

range of up to 1K longwords. However, only 640 longwords are currently populated with RAM.
Therefore:

0 – 639 (0x0 – 0x27F) are addressable as local memory.

640 – 1023 (0x280 – 0x3FF) are addressable, but not populated with RAM.

To the programmer, all instructions using Local Memory act as follows, including

read/modify/write instructions like immed_w0, ld_field, etc.

1. Read LM_ADDR location (if LM_ADDR is specified as source).

2. Execute logic function.

3. Write LM_ADDR location (if LM_ADDR is specified as destination).

4. If specified, increment or decrement LM_ADDR.

5. Proceed to next instruction.

Example 7

is legal because

lm_addr_0[2]

does not post-modify LM_ADDR.

In

Example 7

, the programmer sees:

1. Read Local Memory memory location pointed to by LM_ADDR.

2. Invert the data.

3. Write the data into the address pointed to by LM_ADDR with the value of 2 that is OR’ed into

the lower bits.

4. Increment LM_ADDR.

5. Proceed to next instruction.

Example 5. Maximum Pipelined Usage of LM_ADDR

local_csr_wr[INDIRECT_LM_ADDR_0, gpr_m]

local_csr_wr[INDIRECT_LM_ADDR_0, gpr_n]

local_csr_wr[INDIRECT_LM_ADDR_0, gpr_o]

local_csr_wr[INDIRECT_LM_ADDR_0, gpr_p]

alu[dest_reg1, *l$index0, op, src_reg1] ; uses address from gpr_m

alu[dest_reg2, *l$index0, op, src_reg2] ; uses address from gpr_n

alu[dest_reg3, *l$index0, op, src_reg3] ; uses address from gpr_o

alu[dest_reg4, *l$index0, op, src_reg4] ; uses address from gpr_p

Example 6. LM_ADDR Used as Base of a 16 32-Bit Word Region of Local Memory

alu[*l$index0[3], *l$index0[4], +, 1]

Example 7. LM_ADDR Use as Source and Destination

alu[*l$index0[2], --, ~B, *l$index0]

Advertising