Intel IXP2800 IXP2800_HRM User Manual To The A9aff12d 5366 4b8f B9b6 E7624962e2c6
User Manual: Intel IXP2800 to the manual
Open the PDF directly: View PDF .
Page Count: 430
Download | |
Open PDF In Browser | View PDF |
Intel® IXP2800 Network Processor Hardware Reference Manual August 2004 Order Number: 278882-010 Revision History Date Revision March 2002 001 Description First release for IXP2800 Customer Information Book V 0.4 May 2002 002 Update for the IXA SDK 3.0 release. August 2002 003 Update for the IXA SDK 3.0 Pre-Release 4. November 2002 004 Update for the IXA SDK 3.0 Pre-Release 5. May 2003 005 Update for the IXA SDK 3.1 Alpha Release September 2003 006 Update for the IXA SDK 3.5 Pre-Release 1 October 2003 007 Added information about Receiver and Transmitter Interoperation with Framers and Switch Fabrics. January 2004 008 Updated for new trademark usage: Intel XScale® technology. Updated Sections 6.5.2, 8.5.2.2, 9.2.2.1, 9.3.1, 9.3.3.2, 9.5.1.4, 9.5.3.4, and 10.3.1. May 2004 009 Updated Figure 123 and Timing Diagrams in Figures 43, 44, 46, 47, 50, 51, 54, and 55. August 2004 010 Preparation for web posting. Added Chapter 11, “Performance Monitor Unit”. INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL® PRODUCTS. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY RELATING TO SALE AND/OR USE OF INTEL PRODUCTS, INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT, OR OTHER INTELLECTUAL PROPERTY RIGHT. Intel Corporation may have patents or pending patent applications, trademarks, copyrights, or other intellectual property rights that relate to the presented subject matter. The furnishing of documents and other materials and information does not provide any license, express or implied, by estoppel or otherwise, to any such patents, trademarks, copyrights, or other intellectual property rights. Intel products are not intended for use in medical, life saving, life sustaining, critical control or safety systems, or in nuclear facility applications. Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked “reserved” or “undefined.” Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The IXP2800 Network Processor may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request. Except as permitted by such license, no part of this document may be reproduced, stored in a retrieval system, or transmitted in any form or by any means without the express written consent of Intel Corporation. Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order. Copies of documents which have an ordering number and are referenced in this document, or other Intel literature may be obtained by calling 1-800-548-4725 or by visiting Intel's website at http://www.intel.com. Intel and XScale are registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries. *Other names and brands may be claimed as the property of others. Copyright © 2004, Intel Corporation. 2 Hardware Reference Manual Contents Contents 1 Introduction.................................................................................................................................. 25 1.1 1.2 1.3 2 About This Document .........................................................................................................25 Related Documentation ...................................................................................................... 25 Terminology ........................................................................................................................ 26 Technical Description ................................................................................................................. 27 2.1 2.2 2.3 2.4 2.5 Overview............................................................................................................................. 27 Intel XScale® Core Microarchitecture ................................................................................. 30 2.2.1 ARM* Compatibility ................................................................................................ 30 2.2.2 Features................................................................................................................. 30 2.2.2.1 Multiply/Accumulate (MAC).................................................................... 30 2.2.2.2 Memory Management ............................................................................ 30 2.2.2.3 Instruction Cache ................................................................................... 30 2.2.2.4 Branch Target Buffer.............................................................................. 31 2.2.2.5 Data Cache ............................................................................................ 31 2.2.2.6 Interrupt Controller ................................................................................. 31 2.2.2.7 Address Map .......................................................................................... 32 Microengines ...................................................................................................................... 33 2.3.1 Microengine Bus Arrangement .............................................................................. 35 2.3.2 Control Store.......................................................................................................... 35 2.3.3 Contexts................................................................................................................. 35 2.3.4 Datapath Registers ................................................................................................ 37 2.3.4.1 General-Purpose Registers (GPRs) ...................................................... 37 2.3.4.2 Transfer Registers ................................................................................. 37 2.3.4.3 Next Neighbor Registers ........................................................................ 38 2.3.4.4 Local Memory ....................................................................................... 39 2.3.5 Addressing Modes ................................................................................................. 41 2.3.5.1 Context-Relative Addressing Mode ....................................................... 41 2.3.5.2 Absolute Addressing Mode .................................................................... 42 2.3.5.3 Indexed Addressing Mode ..................................................................... 42 2.3.6 Local CSRs ............................................................................................................ 43 2.3.7 Execution Datapath ............................................................................................... 43 2.3.7.1 Byte Align............................................................................................... 43 2.3.7.2 CAM ....................................................................................................... 45 2.3.8 CRC Unit................................................................................................................ 48 2.3.9 Event Signals ......................................................................................................... 49 DRAM ................................................................................................................................. 50 2.4.1 Size Configuration ................................................................................................. 50 2.4.2 Read and Write Access ......................................................................................... 51 SRAM ................................................................................................................................. 51 2.5.1 QDR Clocking Scheme .......................................................................................... 52 2.5.2 SRAM Controller Configurations............................................................................ 52 2.5.3 SRAM Atomic Operations ...................................................................................... 53 2.5.4 Queue Data Structure Commands ........................................................................ 54 2.5.5 Reference Ordering ............................................................................................... 54 2.5.5.1 Reference Order Tables ........................................................................ 54 2.5.5.2 Microengine Software Restrictions to Maintain Ordering .......................56 Hardware Reference Manual 3 Contents 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 3 Intel XScale® Core ....................................................................................................................... 79 3.1 3.2 4 Scratchpad Memory............................................................................................................ 56 2.6.1 Scratchpad Atomic Operations .............................................................................. 57 2.6.2 Ring Commands .................................................................................................... 57 Media and Switch Fabric Interface ..................................................................................... 59 2.7.1 SPI-4...................................................................................................................... 60 2.7.2 CSIX ...................................................................................................................... 61 2.7.3 Receive.................................................................................................................. 61 2.7.3.1 RBUF ..................................................................................................... 62 2.7.3.1.1 SPI-4 and the RBUF .............................................................. 62 2.7.3.1.2 CSIX and RBUF..................................................................... 63 2.7.3.2 Full Element List .................................................................................... 63 2.7.3.3 RX_THREAD_FREELIST ...................................................................... 63 2.7.3.4 Receive Operation Summary................................................................. 64 2.7.4 Transmit................................................................................................................. 65 2.7.4.1 TBUF...................................................................................................... 65 2.7.4.1.1 SPI-4 and TBUF..................................................................... 66 2.7.4.1.2 CSIX and TBUF ..................................................................... 67 2.7.4.2 Transmit Operation Summary................................................................ 67 2.7.5 The Flow Control Interface .................................................................................... 68 2.7.5.1 SPI-4 ...................................................................................................... 68 2.7.5.2 CSIX....................................................................................................... 68 Hash Unit ............................................................................................................................ 69 PCI Controller ..................................................................................................................... 71 2.9.1 Target Access........................................................................................................ 71 2.9.2 Master Access ....................................................................................................... 71 2.9.3 DMA Channels....................................................................................................... 71 2.9.3.1 DMA Descriptor...................................................................................... 72 2.9.3.2 DMA Channel Operation........................................................................ 73 2.9.3.3 DMA Channel End Operation ................................................................ 74 2.9.3.4 Adding Descriptors to an Unterminated Chain....................................... 74 2.9.4 Mailbox and Message Registers............................................................................ 74 2.9.5 PCI Arbiter ............................................................................................................. 75 Control and Status Register Access Proxy......................................................................... 76 Intel XScale® Core Peripherals .......................................................................................... 76 2.11.1 Interrupt Controller................................................................................................. 76 2.11.2 Timers.................................................................................................................... 77 2.11.3 General Purpose I/O.............................................................................................. 77 2.11.4 Universal Asynchronous Receiver/Transmitter...................................................... 77 2.11.5 Slowport................................................................................................................. 77 I/O Latency ......................................................................................................................... 78 Performance Monitor .......................................................................................................... 78 Introduction ......................................................................................................................... 79 Features.............................................................................................................................. 80 3.2.1 Multiply/ACcumulate (MAC)................................................................................... 80 3.2.2 Memory Management............................................................................................ 80 3.2.3 Instruction Cache................................................................................................... 81 3.2.4 Branch Target Buffer (BTB) ................................................................................... 81 3.2.5 Data Cache............................................................................................................ 81 3.2.6 Performance Monitoring ........................................................................................ 81 Hardware Reference Manual Contents 3.3 3.4 3.5 3.6 3.2.7 Power Management............................................................................................... 81 3.2.8 Debugging ............................................................................................................. 81 3.2.9 JTAG......................................................................................................................81 Memory Management......................................................................................................... 82 3.3.1 Architecture Model ................................................................................................. 82 3.3.1.1 Version 4 versus Version 5 .................................................................... 82 3.3.1.2 Memory Attributes .................................................................................. 82 3.3.1.2.1 Page (P) Attribute Bit ............................................................. 82 3.3.1.2.2 Instruction Cache ................................................................... 83 3.3.1.2.3 Data Cache and Write Buffer ................................................. 83 3.3.1.2.4 Details on Data Cache and Write Buffer Behavior ................. 83 3.3.1.2.5 Memory Operation Ordering .................................................. 84 3.3.2 Exceptions ............................................................................................................. 84 3.3.3 Interaction of the MMU, Instruction Cache, and Data Cache................................. 85 3.3.4 Control ...................................................................................................................85 3.3.4.1 Invalidate (Flush) Operation................................................................... 85 3.3.4.2 Enabling/Disabling ................................................................................. 85 3.3.4.3 Locking Entries ...................................................................................... 86 3.3.4.4 Round-Robin Replacement Algorithm ................................................... 87 Instruction Cache ................................................................................................................ 88 3.4.1 Instruction Cache Operation .................................................................................. 89 3.4.1.1 Operation when Instruction Cache is Enabled ....................................... 89 3.4.1.2 Operation when Instruction Cache is Disabled ...................................... 90 3.4.1.3 Fetch Policy ........................................................................................... 90 3.4.1.4 Round-Robin Replacement Algorithm ................................................... 90 3.4.1.5 Parity Protection..................................................................................... 91 3.4.1.6 Instruction Cache Coherency.................................................................91 3.4.2 Instruction Cache Control ...................................................................................... 92 3.4.2.1 Instruction Cache State at Reset ........................................................... 92 3.4.2.2 Enabling/Disabling ................................................................................. 92 3.4.2.3 Invalidating the Instruction Cache .......................................................... 92 3.4.2.4 Locking Instructions in the Instruction Cache ........................................ 92 3.4.2.5 Unlocking Instructions in the Instruction Cache ..................................... 94 Branch Target Buffer (BTB) ................................................................................................ 94 3.5.1 Branch Target Buffer Operation............................................................................. 94 3.5.1.1 Reset...................................................................................................... 95 3.5.2 Update Policy......................................................................................................... 96 3.5.3 BTB Control ...........................................................................................................96 3.5.3.1 Disabling/Enabling ................................................................................. 96 3.5.3.2 Invalidation ............................................................................................. 96 Data Cache......................................................................................................................... 96 3.6.1 Overviews .............................................................................................................. 97 3.6.1.1 Data Cache Overview ............................................................................ 97 3.6.1.2 Mini-Data Cache Overview .................................................................... 98 3.6.1.3 Write Buffer and Fill Buffer Overview ..................................................... 99 3.6.2 Data Cache and Mini-Data Cache Operation ........................................................ 99 3.6.2.1 Operation when Caching is Enabled...................................................... 99 3.6.2.2 Operation when Data Caching is Disabled ............................................ 99 3.6.2.3 Cache Policies .....................................................................................100 3.6.2.3.1 Cacheability .........................................................................100 3.6.2.3.2 Read Miss Policy .................................................................100 3.6.2.3.3 Write Miss Policy..................................................................101 Hardware Reference Manual 5 Contents 3.7 3.8 3.9 3.10 3.11 6 3.6.2.3.4 Write-Back versus Write-Through........................................ 101 3.6.2.4 Round-Robin Replacement Algorithm ................................................. 102 3.6.2.5 Parity Protection................................................................................... 102 3.6.2.6 Atomic Accesses.................................................................................. 102 3.6.3 Data Cache and Mini-Data Cache Control .......................................................... 103 3.6.3.1 Data Memory State After Reset ........................................................... 103 3.6.3.2 Enabling/Disabling ............................................................................... 103 3.6.3.3 Invalidate and Clean Operations.......................................................... 103 3.6.3.3.1 Global Clean and Invalidate Operation ................................ 104 3.6.4 Reconfiguring the Data Cache as Data RAM ...................................................... 105 3.6.5 Write Buffer/Fill Buffer Operation and Control ..................................................... 106 Configuration .................................................................................................................... 106 Performance Monitoring ................................................................................................... 107 3.8.1 Performance Monitoring Events .......................................................................... 107 3.8.1.1 Instruction Cache Efficiency Mode....................................................... 108 3.8.1.2 Data Cache Efficiency Mode................................................................ 109 3.8.1.3 Instruction Fetch Latency Mode........................................................... 109 3.8.1.4 Data/Bus Request Buffer Full Mode .................................................... 109 3.8.1.5 Stall/Writeback Statistics...................................................................... 110 3.8.1.6 Instruction TLB Efficiency Mode .......................................................... 111 3.8.1.7 Data TLB Efficiency Mode ................................................................... 111 3.8.2 Multiple Performance Monitoring Run Statistics .................................................. 111 Performance Considerations ............................................................................................ 111 3.9.1 Interrupt Latency.................................................................................................. 112 3.9.2 Branch Prediction ................................................................................................ 112 3.9.3 Addressing Modes ............................................................................................... 113 3.9.4 Instruction Latencies............................................................................................ 113 3.9.4.1 Performance Terms ............................................................................. 113 3.9.4.2 Branch Instruction Timings .................................................................. 115 3.9.4.3 Data Processing Instruction Timings ................................................... 115 3.9.4.4 Multiply Instruction Timings.................................................................. 116 3.9.4.5 Saturated Arithmetic Instructions ......................................................... 117 3.9.4.6 Status Register Access Instructions .................................................... 118 3.9.4.7 Load/Store Instructions ........................................................................ 118 3.9.4.8 Semaphore Instructions ....................................................................... 118 3.9.4.9 Coprocessor Instructions ..................................................................... 119 3.9.4.10 Miscellaneous Instruction Timing......................................................... 119 3.9.4.11 Thumb Instructions .............................................................................. 119 Test Features.................................................................................................................... 119 3.10.1 IXP2800 Network Processor Endianness............................................................ 120 3.10.1.1 Read and Write Transactions Initiated by the Intel XScale® Core ...... 121 3.10.1.1.1 Reads Initiated by the Intel XScale® Core ........................ 121 3.10.1.1.2 The Intel XScale® Core Writing to the IXP2800 Network Processor .................................................................. 123 Intel XScale® Core Gasket Unit ....................................................................................... 125 3.11.1 Overview.............................................................................................................. 125 3.11.2 Intel XScale® Core Gasket Functional Description ............................................. 127 3.11.2.1 Command Memory Bus to Command Push/Pull Conversion .............. 127 3.11.3 CAM Operation .................................................................................................... 127 3.11.4 Atomic Operations ............................................................................................... 128 3.11.4.1 Summary of Rules for the Atomic Command Regarding I/O ............... 129 3.11.4.2 Intel XScale® Core Access to SRAM Q-Array..................................... 129 Hardware Reference Manual Contents 3.12 4 3.11.5 I/O Transaction ....................................................................................................130 3.11.6 Hash Access ........................................................................................................130 3.11.7 Gasket Local CSR ...............................................................................................131 3.11.8 Interrupt ...............................................................................................................132 Intel XScale® Core Peripheral Interface...........................................................................134 3.12.1 XPI Overview .......................................................................................................134 3.12.1.1 Data Transfers .....................................................................................135 3.12.1.2 Data Alignment ....................................................................................135 3.12.1.3 Address Spaces for XPI Internal Devices ............................................136 3.12.2 UART Overview ...................................................................................................137 3.12.3 UART Operation ..................................................................................................138 3.12.3.1 UART FIFO OPERATION ....................................................................138 3.12.3.1.1 UART FIFO Interrupt Mode Operation – Receiver Interrupt ....................................................................138 3.12.3.1.2 FIFO Polled Mode Operation .............................................139 3.12.4 Baud Rate Generator...........................................................................................139 3.12.5 General Purpose I/O (GPIO) ...............................................................................140 3.12.6 Timers ..................................................................................................................141 3.12.6.1 Timer Operation ...................................................................................141 3.12.7 Slowport Unit .......................................................................................................142 3.12.7.1 PROM Device Support.........................................................................143 3.12.7.2 Microprocessor Interface Support for the Framer ................................143 3.12.7.3 Slowport Unit Interfaces .......................................................................144 3.12.7.4 Address Space.....................................................................................145 3.12.7.5 Slowport Interfacing Topology .............................................................145 3.12.7.6 Slowport 8-Bit Device Bus Protocols ...................................................146 3.12.7.6.1 Mode 0 Single Write Transfer for Fixed-Timed Device ......147 3.12.7.6.2 Mode 0 Single Write Transfer for Self-Timing Device ........148 3.12.7.6.3 Mode 0 Single Read Transfer for Fixed-Timed Device ......149 3.12.7.6.4 Single Read Transfer for a Self-Timing Device..................150 3.12.7.7 SONET/SDH Microprocessor Access Support ....................................150 3.12.7.7.1 Mode 1: 16-Bit Microprocessor Interface Support with 16-Bit Address Lines................................................................151 3.12.7.7.2 Mode 2: Interface with 8 Data Bits and 11 Address Bits ....155 3.12.7.7.3 Mode 3: Support for the Intel and AMCC* 2488 Mbps SONET/SDH Microprocessor Interface ...................................157 Microengines .............................................................................................................................167 4.1 4.2 4.3 Overview...........................................................................................................................167 4.1.1 Control Store........................................................................................................169 4.1.2 Contexts...............................................................................................................169 4.1.3 Datapath Registers ..............................................................................................171 4.1.3.1 General-Purpose Registers (GPRs) ....................................................171 4.1.3.2 Transfer Registers ...............................................................................171 4.1.3.3 Next Neighbor Registers ......................................................................172 4.1.3.4 Local Memory ......................................................................................172 4.1.4 Addressing Modes ...............................................................................................173 4.1.4.1 Context-Relative Addressing Mode .....................................................173 4.1.4.2 Absolute Addressing Mode ..................................................................174 4.1.4.3 Indexed Addressing Mode ...................................................................174 Local CSRs.......................................................................................................................174 Execution Datapath ..........................................................................................................174 Hardware Reference Manual 7 Contents 4.4 4.5 5 DRAM.......................................................................................................................................... 187 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 6 Overview........................................................................................................................... 187 Size Configuration ............................................................................................................ 188 DRAM Clocking ................................................................................................................ 189 Bank Policy ....................................................................................................................... 190 Interleaving ....................................................................................................................... 191 5.5.1 Three Channels Active (3-Way Interleave).......................................................... 191 5.5.2 Two Channels Active (2-Way Interleave) ............................................................ 193 5.5.3 One Channel Active (No Interleave) .................................................................... 193 5.5.4 Interleaving Across RDRAMs and Banks ............................................................ 194 Parity and ECC ................................................................................................................. 194 5.6.1 Parity and ECC Disabled ..................................................................................... 194 5.6.2 Parity Enabled ..................................................................................................... 195 5.6.3 ECC Enabled ....................................................................................................... 195 5.6.4 ECC Calculation and Syndrome .......................................................................... 196 Timing Configuration......................................................................................................... 196 Microengine Signals ......................................................................................................... 197 Serial Port ......................................................................................................................... 197 RDRAM Controller Block Diagram.................................................................................... 198 5.10.1 Commands .......................................................................................................... 199 5.10.2 DRAM Write......................................................................................................... 199 5.10.2.1 Masked Write ....................................................................................... 199 5.10.3 DRAM Read......................................................................................................... 200 5.10.4 CSR Write............................................................................................................ 200 5.10.5 CSR Read............................................................................................................ 200 5.10.6 Arbitration ............................................................................................................ 201 5.10.7 Reference Ordering ............................................................................................. 201 DRAM Push/Pull Arbiter ................................................................................................... 201 5.11.1 Arbiter Push/Pull Operation ................................................................................. 202 5.11.2 DRAM Push Arbiter Description .......................................................................... 203 DRAM Pull Arbiter Description.......................................................................................... 204 SRAM Interface .......................................................................................................................... 207 6.1 6.2 8 4.3.1 Byte Align............................................................................................................. 174 4.3.2 CAM..................................................................................................................... 176 CRC Unit........................................................................................................................... 179 Event Signals.................................................................................................................... 180 4.5.1 Microengine Endianness ..................................................................................... 181 4.5.1.1 Read from RBUF (64 Bits) ................................................................... 181 4.5.1.2 Write to TBUF ...................................................................................... 182 4.5.1.3 Read/Write from/to SRAM ................................................................... 182 4.5.1.4 Read/Write from/to DRAM ................................................................... 182 4.5.1.5 Read/Write from/to SHaC and Other CSRs......................................... 182 4.5.1.6 Write to Hash Unit................................................................................ 183 4.5.2 Media Access ...................................................................................................... 183 4.5.2.1 Read from RBUF ................................................................................. 184 4.5.2.2 Write to TBUF ...................................................................................... 185 4.5.2.3 TBUF to SPI-4 Transfer ....................................................................... 186 Overview........................................................................................................................... 207 SRAM Interface Configurations ........................................................................................ 208 Hardware Reference Manual Contents 6.3 6.4 6.5 6.6 6.7 6.8 7 SHaC — Unit Expansion ...........................................................................................................225 7.1 8 6.2.1 Internal Interface ..................................................................................................209 6.2.2 Number of Channels ............................................................................................209 6.2.3 Coprocessor and/or SRAMs Attached to a Channel............................................209 SRAM Controller Configurations.......................................................................................209 Command Overview .........................................................................................................211 6.4.1 Basic Read/Write Commands..............................................................................211 6.4.2 Atomic Operations ...............................................................................................211 6.4.3 Queue Data Structure Commands ......................................................................213 6.4.3.1 Read_Q_Descriptor Commands ..........................................................216 6.4.3.2 Write_Q_Descriptor Commands ..........................................................216 6.4.3.3 ENQ and DEQ Commands ..................................................................217 6.4.4 Ring Data Structure Commands ..........................................................................217 6.4.5 Journaling Commands .........................................................................................217 6.4.6 CSR Accesses .....................................................................................................217 Parity.................................................................................................................................217 Address Map.....................................................................................................................218 Reference Ordering ..........................................................................................................219 6.7.1 Reference Order Tables ......................................................................................219 6.7.2 Microcode Restrictions to Maintain Ordering .......................................................220 Coprocessor Mode ...........................................................................................................221 Overview...........................................................................................................................225 7.1.1 SHaC Unit Block Diagram....................................................................................225 7.1.2 Scratchpad...........................................................................................................227 7.1.2.1 Scratchpad Description ........................................................................227 7.1.2.2 Scratchpad Interface............................................................................229 7.1.2.2.1 Command Interface .............................................................229 7.1.2.2.2 Push/Pull Interface ...............................................................229 7.1.2.2.3 CSR Bus Interface ...............................................................229 7.1.2.2.4 Advanced Peripherals Bus Interface (APB) .........................229 7.1.2.3 Scratchpad Block Level Diagram .........................................................229 7.1.2.3.1 Scratchpad Commands .......................................................230 7.1.2.3.2 Ring Commands ..................................................................231 7.1.2.3.3 Clocks and Reset .................................................................235 7.1.2.3.4 Reset Registers ...................................................................235 7.1.3 Hash Unit .............................................................................................................236 7.1.3.1 Hashing Operation ...............................................................................237 7.1.3.2 Hash Algorithm ....................................................................................239 Media and Switch Fabric Interface...........................................................................................241 8.1 8.2 Overview...........................................................................................................................241 8.1.1 SPI-4 ....................................................................................................................243 8.1.2 CSIX ....................................................................................................................246 8.1.3 CSIX/SPI-4 Interleave Mode................................................................................246 Receive.............................................................................................................................247 8.2.1 Receive Pins ........................................................................................................248 8.2.2 RBUF ...................................................................................................................248 8.2.2.1 SPI-4 ....................................................................................................250 8.2.2.2 CSIX.....................................................................................................253 8.2.3 Full Element List ..................................................................................................255 8.2.4 Rx_Thread_Freelist_# .........................................................................................255 Hardware Reference Manual 9 Contents 8.2.5 8.2.6 8.2.7 8.3 8.4 8.5 8.6 8.7 10 Rx_Thread_Freelist_Timeout_# .......................................................................... 256 Receive Operation Summary............................................................................... 256 Receive Flow Control Status ............................................................................... 258 8.2.7.1 SPI-4 .................................................................................................... 258 8.2.7.2 CSIX..................................................................................................... 259 8.2.7.2.1 Link-Level............................................................................. 259 8.2.7.2.2 Virtual Output Queue ........................................................... 260 8.2.8 Parity.................................................................................................................... 260 8.2.8.1 SPI-4 .................................................................................................... 260 8.2.8.2 CSIX..................................................................................................... 261 8.2.8.2.1 Horizontal Parity................................................................... 261 8.2.8.2.2 Vertical Parity....................................................................... 261 8.2.9 Error Cases.......................................................................................................... 261 Transmit............................................................................................................................ 262 8.3.1 Transmit Pins....................................................................................................... 262 8.3.2 TBUF ................................................................................................................... 263 8.3.2.1 SPI-4 .................................................................................................... 266 8.3.2.2 CSIX..................................................................................................... 267 8.3.3 Transmit Operation Summary.............................................................................. 268 8.3.3.1 SPI-4 .................................................................................................... 268 8.3.3.2 CSIX..................................................................................................... 269 8.3.3.3 Transmit Summary............................................................................... 270 8.3.4 Transmit Flow Control Status .............................................................................. 270 8.3.4.1 SPI-4 .................................................................................................... 271 8.3.4.2 CSIX..................................................................................................... 273 8.3.4.2.1 Link-Level............................................................................. 273 8.3.4.2.2 Virtual Output Queue ........................................................... 273 8.3.5 Parity.................................................................................................................... 273 8.3.5.1 SPI-4 .................................................................................................... 273 8.3.5.2 CSIX..................................................................................................... 274 8.3.5.2.1 Horizontal Parity................................................................... 274 8.3.5.2.2 Vertical Parity....................................................................... 274 RBUF and TBUF Summary .............................................................................................. 274 CSIX Flow Control Interface ............................................................................................. 275 8.5.1 TXCSRB and RXCSRB Signals .......................................................................... 275 8.5.2 FCIFIFO and FCEFIFO Buffers ........................................................................... 276 8.5.2.1 Full Duplex CSIX.................................................................................. 277 8.5.2.2 Simplex CSIX....................................................................................... 278 8.5.3 TXCDAT/RXCDAT, TXCSOF/RXCSOF, TXCPAR/RXCPAR, and TXCFC/RXCFC Signals................................................................................ 280 Deskew and Training ........................................................................................................ 280 8.6.1 Data Training Pattern........................................................................................... 282 8.6.2 Flow Control Training Pattern .............................................................................. 282 8.6.3 Use of Dynamic Training ..................................................................................... 283 CSIX Startup Sequence.................................................................................................... 287 8.7.1 CSIX Full Duplex ................................................................................................. 287 8.7.1.1 Ingress IXP2800 Network Processor ................................................... 287 8.7.1.2 Egress IXP2800 Network Processor.................................................... 287 8.7.1.3 Single IXP2800 Network Processor..................................................... 288 8.7.2 CSIX Simplex....................................................................................................... 288 8.7.2.1 Ingress IXP2800 Network Processor ................................................... 288 8.7.2.2 Egress IXP2800 Network Processor.................................................... 289 Hardware Reference Manual Contents 8.8 8.9 8.7.2.3 Single IXP2800 Network Processor .....................................................289 Interface to Command and Push and Pull Buses .............................................................290 8.8.1 RBUF or MSF CSR to Microengine S_TRANSFER_IN Register for Instruction:.291 8.8.2 Microengine S_TRANSFER_OUT Register to TBUF or MSF CSR for Instruction: .....................................................................................291 8.8.3 Microengine to MSF CSR for Instruction: ............................................................291 8.8.4 From RBUF to DRAM for Instruction: ..................................................................291 8.8.5 From DRAM to TBUF for Instruction:...................................................................292 Receiver and Transmitter Interoperation with Framers and Switch Fabrics .....................292 8.9.1 Receiver and Transmitter Configurations ............................................................293 8.9.1.1 Simplex Configuration ..........................................................................293 8.9.1.2 Hybrid Simplex Configuration ..............................................................294 8.9.1.3 Dual Network Processor Full Duplex Configuration .............................295 8.9.1.4 Single Network Processor Full Duplex Configuration (SPI-4.2) ...........296 8.9.1.5 Single Network Processor, Full Duplex Configuration (SPI-4.2 and CSIX-L1) .........................................................................297 8.9.2 System Configurations.........................................................................................297 8.9.2.1 Framer, Single Network Processor Ingress and Egress, and Fabric Interface Chip............................................................................298 8.9.2.2 Framer, Dual Network Processor Ingress, Single Network Processor Egress, and Fabric Interface Chip ........................298 8.9.2.3 Framer, Single Network Processor Ingress and Egress, and CSIX-L1 Chips for Translation and Fabric Interface ............................299 8.9.2.4 CPU Complex, Network Processor, and Fabric Interface Chip ...........299 8.9.2.5 Framer, Single Network Processor, Co-Processor, and Fabric Interface Chip............................................................................300 8.9.3 SPI-4.2 Support ...................................................................................................301 8.9.3.1 SPI-4.2 Receiver ..................................................................................301 8.9.3.2 SPI-4.2 Transmitter ..............................................................................302 8.9.4 CSIX-L1 Protocol Support ...................................................................................303 8.9.4.1 CSIX-L1 Interface Reference Model: Traffic Manager and Fabric Interface Chip.......................................................................................303 8.9.4.2 Intel® IXP2800 Support of the CSIX-L1 Protocol ................................304 8.9.4.2.1 Mapping to 16-Bit Wide DDR LVDS ....................................304 8.9.4.2.2 Support for Dual Chip, Full-Duplex Operation .....................305 8.9.4.2.3 Support for Simplex Operation.............................................306 8.9.4.2.4 Support for Hybrid Simplex Operation .................................307 8.9.4.2.5 Support for Dynamic De-Skew Training...............................308 8.9.4.3 CSIX-L1 Protocol Receiver Support ....................................................309 8.9.4.4 CSIX-L1 Protocol Transmitter Support ................................................310 8.9.4.5 Implementation of a Bridge Chip to CSIX-L1 .......................................311 8.9.5 Dual Protocol (SPI and CSIX-L1) Support ...........................................................312 8.9.5.1 Dual Protocol Receiver Support...........................................................312 8.9.5.2 Dual Protocol Transmitter Support.......................................................312 8.9.5.3 Implementation of a Bridge Chip to CSIX-L1 and SPI-4.2 ...................313 8.9.6 Transmit State Machine .......................................................................................314 8.9.6.1 SPI-4.2 Transmitter State Machine ......................................................314 8.9.6.2 Training Transmitter State Machine .....................................................315 8.9.6.3 CSIX-L1 Transmitter State Machine ....................................................315 8.9.7 Dynamic De-Skew ...............................................................................................316 8.9.8 Summary of Receiver and Transmitter Signals ...................................................317 Hardware Reference Manual 11 Contents 9 PCI Unit....................................................................................................................................... 319 9.1 9.2 9.3 9.4 12 Overview........................................................................................................................... 319 PCI Pin Protocol Interface Block....................................................................................... 321 9.2.1 PCI Commands ................................................................................................... 322 9.2.2 IXP2800 Network Processor Initialization............................................................ 323 9.2.2.1 Initialization by the Intel XScale® Core................................................ 324 9.2.2.2 Initialization by a PCI Host ................................................................... 324 9.2.3 PCI Type 0 Configuration Cycles......................................................................... 325 9.2.3.1 Configuration Write .............................................................................. 325 9.2.3.2 Configuration Read .............................................................................. 325 9.2.4 PCI 64-Bit Bus Extension .................................................................................... 325 9.2.5 PCI Target Cycles................................................................................................ 326 9.2.5.1 PCI Accesses to CSR .......................................................................... 326 9.2.5.2 PCI Accesses to DRAM ....................................................................... 326 9.2.5.3 PCI Accesses to SRAM ....................................................................... 326 9.2.5.4 Target Write Accesses from the PCI Bus ............................................ 326 9.2.5.5 Target Read Accesses from the PCI Bus ............................................ 327 9.2.6 PCI Initiator Transactions .................................................................................... 327 9.2.6.1 PCI Request Operation........................................................................ 327 9.2.6.2 PCI Commands.................................................................................... 328 9.2.6.3 Initiator Write Transactions .................................................................. 328 9.2.6.4 Initiator Read Transactions .................................................................. 328 9.2.6.5 Initiator Latency Timer ......................................................................... 328 9.2.6.6 Special Cycle ....................................................................................... 329 9.2.7 PCI Fast Back-to-Back Cycles............................................................................. 329 9.2.8 PCI Retry ............................................................................................................. 329 9.2.9 PCI Disconnect .................................................................................................... 329 9.2.10 PCI Built-In System Test...................................................................................... 329 9.2.11 PCI Central Functions......................................................................................... 330 9.2.11.1 PCI Interrupt Inputs.............................................................................. 330 9.2.11.2 PCI Reset Output................................................................................. 330 9.2.11.3 PCI Internal Arbiter .............................................................................. 331 Slave Interface Block ........................................................................................................ 332 9.3.1 CSR Interface ...................................................................................................... 332 9.3.2 SRAM Interface ................................................................................................... 333 9.3.2.1 SRAM Slave Writes ............................................................................. 333 9.3.2.2 SRAM Slave Reads ............................................................................. 334 9.3.3 DRAM Interface ................................................................................................... 334 9.3.3.1 DRAM Slave Writes ............................................................................. 334 9.3.3.2 DRAM Slave Reads ............................................................................. 335 9.3.4 Mailbox and Doorbell Registers........................................................................... 336 9.3.5 PCI Interrupt Pin .................................................................................................. 339 Master Interface Block ...................................................................................................... 340 9.4.1 DMA Interface...................................................................................................... 340 9.4.1.1 Allocation of the DMA Channels .......................................................... 341 9.4.1.2 Special Registers for Microengine Channels ....................................... 341 9.4.1.3 DMA Descriptor.................................................................................... 342 9.4.1.4 DMA Channel Operation...................................................................... 343 9.4.1.5 DMA Channel End Operation .............................................................. 344 9.4.1.6 Adding Descriptor to an Unterminated Chain ...................................... 344 9.4.1.7 DRAM to PCI Transfer ......................................................................... 344 9.4.1.8 PCI to DRAM Transfer ......................................................................... 345 Hardware Reference Manual Contents 9.4.2 9.5 9.6 10 Push/Pull Command Bus Target Interface...........................................................345 9.4.2.1 Command Bus Master Access to Local Configuration Registers ........345 9.4.2.2 Command Bus Master Access to Local Control and Status Registers...................................................................................346 9.4.2.3 Command Bus Master Direct Access to PCI Bus ................................346 9.4.2.3.1 PCI Address Generation for IO and MEM Cycles ................346 9.4.2.3.2 PCI Address Generation for Configuration Cycles...............347 9.4.2.3.3 PCI Address Generation for Special and IACK Cycles ........347 9.4.2.3.4 PCI Enables .........................................................................347 9.4.2.3.5 PCI Command .....................................................................347 PCI Unit Error Behavior ....................................................................................................348 9.5.1 PCI Target Error Behavior ...................................................................................348 9.5.1.1 Target Access Has an Address Parity Error ........................................348 9.5.1.2 Initiator Asserts PCI_PERR_L in Response to One of Our Data Phases .................................................................................................348 9.5.1.3 Discard Timer Expires on a Target Read.............................................348 9.5.1.4 Target Access to the PCI_CSR_BAR Space Has Illegal Byte Enables ........................................................................................348 9.5.1.5 Target Write Access Receives Bad Parity PCI_PAR with the Data .....349 9.5.1.6 SRAM Responds with a Memory Error on One or More Data Phases on a Target Read .................................................................................349 9.5.1.7 DRAM Responds with a Memory Error on One or More Data Phases on a Target Read .................................................................................349 9.5.2 As a PCI Initiator During a DMA Transfer ............................................................349 9.5.2.1 DMA Read from DRAM (Memory-to-PCI Transaction) Gets a Memory Error .......................................................................................349 9.5.2.2 DMA Read from SRAM (Descriptor Read) Gets a Memory Error ........350 9.5.2.3 DMA from DRAM Transfer (Write to PCI) Receives PCI_PERR_L on PCI Bus................................................................................................350 9.5.2.4 DMA To DRAM (Read from PCI) Has Bad Data Parity .......................350 9.5.2.5 DMA Transfer Experiences a Master Abort (Time-Out) on PCI ...........351 9.5.2.6 DMA Transfer Receives a Target Abort Response During a Data Phase ..........................................................................................351 9.5.2.7 DMA Descriptor Has a 0x0 Word Count (Not an Error) .......................351 9.5.3 As a PCI Initiator During a Direct Access from the Intel XScale® Core or Microengine .............................................................................351 9.5.3.1 Master Transfer Experiences a Master Abort (Time-Out) on PCI ........351 9.5.3.2 Master Transfer Receives a Target Abort Response During a Data Phase .......................................................................................351 9.5.3.3 Master from the Intel XScale® Core or Microengine Transfer (Write to PCI) Receives PCI_PERR_L on PCI Bus .............................352 9.5.3.4 Master Read from PCI (Read from PCI) Has Bad Data Parity ............352 9.5.3.5 Master Transfer Receives PCI_SERR_L from the PCI Bus ................352 9.5.3.6 Intel XScale® Core Microengine Requests Direct Transfer when the PCI Bus is in Reset ........................................................................352 PCI Data Byte Lane Alignment .........................................................................................352 9.6.1 Endian for Byte Enable ........................................................................................355 Clocks and Reset.......................................................................................................................359 10.1 10.2 10.3 Clocks ...............................................................................................................................359 Synchronization Between Frequency Domains ................................................................363 Reset ................................................................................................................................364 10.3.1 Hardware Reset Using nRESET or PCI_RST_L .................................................364 Hardware Reference Manual 13 Contents 10.4 10.5 11 Performance Monitor Unit ........................................................................................................ 375 11.1 11.2 11.3 11.4 14 10.3.2 PCI-Initiated Reset............................................................................................... 366 10.3.3 Watchdog Timer-Initiated Reset .......................................................................... 366 10.3.3.1 Slave Network Processor (Non-Central Function) ............................... 367 10.3.3.2 Master Network Processor (PCI Host, Central Function) .................... 367 10.3.3.3 Master Network Processor (Central Function)..................................... 367 10.3.4 Software-Initiated Reset ...................................................................................... 367 10.3.5 Reset Removal Operation Based on CFG_PROM_BOOT.................................. 368 10.3.5.1 When CFG_PROM_BOOT is 1 (BOOT_PROM is Present) ................ 368 10.3.5.2 When CFG_PROM_BOOT is 0 (BOOT_PROM is Not Present) ......... 368 10.3.6 Strap Pins ............................................................................................................ 368 10.3.7 Powerup Reset Sequence ................................................................................... 370 Boot Mode ........................................................................................................................ 370 10.4.1 Flash ROM........................................................................................................... 372 10.4.2 PCI Host Download ............................................................................................. 372 Initialization ....................................................................................................................... 373 Introduction ....................................................................................................................... 375 11.1.1 Motivation for Performance Monitors................................................................... 375 11.1.2 Motivation for Choosing CHAP Counters ............................................................ 376 11.1.3 Functional Overview of CHAP Counters.............................................................. 377 11.1.4 Basic Operation of the Performance Monitor Unit ............................................... 378 11.1.5 Definition of CHAP Terminology .......................................................................... 379 11.1.6 Definition of Clock Domains................................................................................. 380 Interface and CSR Description ......................................................................................... 380 11.2.1 APB Peripheral .................................................................................................... 381 11.2.2 CAP Description .................................................................................................. 381 11.2.2.1 Selecting the Access Mode.................................................................. 381 11.2.2.2 PMU CSR ............................................................................................ 381 11.2.2.3 CAP Writes .......................................................................................... 381 11.2.2.4 CAP Reads .......................................................................................... 381 11.2.3 Configuration Registers ....................................................................................... 382 Performance Measurements ............................................................................................ 382 Events Monitored in Hardware ......................................................................................... 385 11.4.1 Queue Statistics Events....................................................................................... 385 11.4.1.1 Queue Latency..................................................................................... 385 11.4.1.2 Queue Utilization.................................................................................. 385 11.4.2 Count Events ....................................................................................................... 385 11.4.2.1 Hardware Block Execution Count ........................................................ 385 11.4.3 Design Block Select Definitions ........................................................................... 386 11.4.4 Null Event ............................................................................................................ 387 11.4.5 Threshold Events................................................................................................. 388 11.4.6 External Input Events........................................................................................... 389 11.4.6.1 XPI Events Target ID(000001) / Design Block #(0100) ....................... 389 11.4.6.2 SHaC Events Target ID(000010) / Design Block #(0101).................... 393 11.4.6.3 IXP2800 Network Processor MSF Events Target ID(000011) / Design Block #(0110)........................................................................... 396 11.4.6.4 Intel XScale® Core Events Target ID(000100) / Design Block #(0111)........................................................................... 402 11.4.6.5 PCI Events Target ID(000101) / Design Block #(1000) ....................... 405 11.4.6.6 ME00 Events Target ID(100000) / Design Block #(1001).................... 409 Hardware Reference Manual Contents 11.4.6.7 ME01 Events Target ID(100001) / Design Block #(1001) ....................410 11.4.6.8 ME02 Events Target ID(100010) / Design Block #(1001) ....................411 11.4.6.9 ME03 Events Target ID(100011) / Design Block #(1001) ....................411 11.4.6.10 ME04 Events Target ID(100100) / Design Block #(1001) ....................412 11.4.6.11 ME05 Events Target ID(100101) / Design Block #(1001) ....................412 11.4.6.12 ME06 Events Target ID(100110) / Design Block #(1001) ....................413 11.4.6.13 ME07 Events Target ID(100111) / Design Block #(1001) ....................413 11.4.6.14 ME10 Events Target ID(110000) / Design Block #(1010) ....................414 11.4.6.15 ME11 Events Target ID(110001) / Design Block #(1010) ....................414 11.4.6.16 ME12 Events Target ID(110010) / Design Block #(1010) ....................415 11.4.6.17 ME13 Events Target ID(110011) / Design Block #(1010) ....................415 11.4.6.18 ME14 Events Target ID(110100) / Design Block #(1010) ....................416 11.4.6.19 ME15 Events Target ID(110101) / Design Block #(1010) ....................416 11.4.6.20 ME16 Events Target ID(100110) / Design Block #(1010) ....................417 11.4.6.21 ME17 Events Target ID(110111) / Design Block #(1010) ....................417 11.4.6.22 SRAM DP1 Events Target ID(001001) / Design Block #(0010) ...........418 11.4.6.23 SRAM DP0 Events Target ID(001010) / Design Block #(0010) ...........418 11.4.6.24 SRAM CH3 Events Target ID(001011) / Design Block #(0010)...........420 11.4.6.25 SRAM CH2 Events Target ID(001100) / Design Block #(0010)...........421 11.4.6.26 SRAM CH1 Events Target ID(001101) / Design Block #(0010)...........421 11.4.6.27 SRAM CH0 Events Target ID(001110) / Design Block #(0010)...........422 11.4.6.28 DRAM DPLA Events Target ID(010010) / Design Block #(0011) ........423 11.4.6.29 DRAM DPSA Events Target ID(010011) / Design Block #(0011) ........424 11.4.6.30 IXP2800 Network Processor DRAM CH2 Events Target ID(010100) / Design Block #(0011)...........................................................................425 11.4.6.31 IXP2800 Network Processor DRAM CH1 Events Target ID(010101) / Design Block #(0011)...........................................................................429 11.4.6.32 IXP2800 Network Processor DRAM CH0 Events Target ID(010110) / Design Block #(0011)...........................................................................429 Hardware Reference Manual 15 Contents Figures 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 16 IXP2800 Network Processor Functional Block Diagram ............................................................ 28 IXP2800 Network Processor Detailed Diagram.......................................................................... 29 Intel XScale® Core 4-GB (32-Bit) Address Space ..................................................................... 32 Microengine Block Diagram........................................................................................................ 34 Context State Transition Diagram .............................................................................................. 36 Byte-Align Block Diagram ........................................................................................................... 44 CAM Block Diagram ................................................................................................................... 46 Echo Clock Configuration ........................................................................................................... 52 Logical View of Rings ................................................................................................................. 57 Example System Block Diagram ................................................................................................ 59 Full-Duplex Block Diagram ......................................................................................................... 60 Simplified MSF Receive Section Block Diagram ........................................................................ 61 Simplified Transmit Section Block Diagram................................................................................ 65 Hash Unit Block Diagram ........................................................................................................... 70 DMA Descriptor Reads............................................................................................................... 72 Intel XScale® Core Architecture Features .................................................................................. 80 Example of Locked Entries in TLB ............................................................................................. 88 Instruction Cache Organization .................................................................................................. 89 Locked Line Effect on Round Robin Replacement..................................................................... 93 BTB Entry ................................................................................................................................... 95 Branch History ............................................................................................................................ 95 Data Cache Organization ........................................................................................................... 97 Mini-Data Cache Organization ................................................................................................... 98 Byte Steering for Read and Byte-Enable Generation by the Intel XScale® Core ..................... 122 Intel XScale® Core-Initiated Write to the IXP2800 Network Processor.................................... 124 Intel XScale® Core-Initiated Write to the IXP2800 Network Processor (Continued)................ 125 Global Buses Connection to the Intel XScale® Core Gasket ................................................... 126 Flow Through the Intel XScale® Core Interrupt Controller........................................................ 132 Interrupt Mask Block Diagram .................................................................................................. 133 XPI Interfaces for IXP2800 Network Processor........................................................................ 135 UART Data Frame .................................................................................................................... 138 GPIO Functional Diagram ........................................................................................................ 140 Timer Control Unit Interfacing Diagram .................................................................................... 141 Timer Internal Logic Diagram ................................................................................................... 142 Slowport Unit Interface Diagram............................................................................................... 144 Address Space Hole Diagram .................................................................................................. 145 Slowport Example Application Topology .................................................................................. 146 Mode 0 Single Write Transfer for a Fixed-Timed Device.......................................................... 147 Mode 0 Single Write Transfer for a Self-Timing Device ........................................................... 148 Mode 0 Single Read Transfer for Fixed-Timed Device ............................................................ 149 Mode 0 Single Read Transfer for a Self-Timing Device ........................................................... 150 An Interface Topology with Lucent* TDAT042G5 SONET/SDH............................................... 152 Mode 1 Single Write Transfer for Lucent* TDAT042G5 Device (B0) ....................................... 153 Mode 1 Single Read Transfer for Lucent* TDAT042G5 Device (B0) ....................................... 154 An Interface Topology with PMC-Sierra* PM5351 S/UNI-TETRA* .......................................... 155 Mode 2 Single Write Transfer for PMC-Sierra* PM5351 Device (B0) ...................................... 156 Mode 2 Single Read Transfer for PMC-Sierra* PM5351 Device (B0) ...................................... 157 Hardware Reference Manual Contents 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 An Interface Topology with Intel / AMCC* SONET/SDH Device ..............................................158 Mode 3 Second Interface Topology with Intel / AMCC* SONET/SDH Device..........................159 Mode 3 Single Write Transfer Followed by Read (B0) .............................................................160 Mode 3 Single Read Transfer Followed by Write (B0) .............................................................161 An Interface Topology with Intel / AMCC* SONET/SDH Device in Motorola* Mode ................162 Second Interface Topology with Intel / AMCC* SONET/SDH Device.......................................163 Mode 4 Single Write Transfer (B0) ...........................................................................................164 Mode 4 Single Read Transfer (B0) ...........................................................................................165 Microengine Block Diagram......................................................................................................168 Context State Transition Diagram.............................................................................................170 Byte Align Block Diagram .........................................................................................................175 CAM Block Diagram .................................................................................................................177 Read from RBUF (64 Bits)........................................................................................................181 Write to TBUF (64 Bits).............................................................................................................182 48-, 64-, and 128-Bit Hash Operand Transfers ........................................................................183 Bit, Byte, and Longword Organization in One RBUF Element..................................................184 Write to TBUF ...........................................................................................................................185 MSF Interface ...........................................................................................................................186 Clock Configuration ..................................................................................................................189 IXP2800 Clocking for RDRAM at 400 MHz ..............................................................................190 IXP2800 Clocking for RDRAM at 508 MHz ..............................................................................190 Address Mapping Flow .............................................................................................................191 RDRAM Controller Block Diagram............................................................................................198 DRAM Push/Pull Arbiter Functional Blocks ..............................................................................202 DRAM Push Arbiter Functional Blocks .....................................................................................204 DRAM Pull Arbiter Functional Blocks .......................................................................................205 SRAM Controller/Chassis Block Diagram.................................................................................208 SRAM Clock Connection on a Channel....................................................................................210 External Pipeline Registers Block Diagram ..............................................................................211 Queue Descriptor with Four Links ............................................................................................213 Enqueueing One Buffer at a Time ............................................................................................213 Previously Linked String of Buffers...........................................................................................214 First Step to Enqueue a String of Buffers to a Queue (ENQ_Tail_and_Link)...........................214 Second Step to Enqueue a String of Buffers to a Queue (ENQ_Tail) ......................................214 Connection to a Coprocessor Though Standard QDR Interface ..............................................221 Coprocessor with Memory Mapped FIFO Ports .......................................................................222 SHaC Top Level Diagram.........................................................................................................226 Scratchpad Block Diagram .......................................................................................................228 Ring Communication Logic Diagram ........................................................................................231 Hash Unit Block Diagram..........................................................................................................236 Example System Block Diagram ..............................................................................................242 Full-Duplex Block Diagram .......................................................................................................243 Receive and Transmit Clock Generation ..................................................................................245 Simplified Receive Section Block Diagram...............................................................................247 RBUF Element State Diagram..................................................................................................257 Extent of DIP-4 Codes ..............................................................................................................260 Simplified Transmit Section Block Diagram..............................................................................262 TBUF State Diagram ................................................................................................................270 Tx Calendar Block Diagram......................................................................................................271 CSIX Flow Control Interface — TXCSRB and RXCSRB ..........................................................275 Hardware Reference Manual 17 Contents 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 18 CSIX Flow Control Interface — FCIFIFO and FCEFIFO in Full Duplex Mode ......................... 277 CSIX Flow Control Interface — FCIFIFO and FCEFIFO in Simplex Mode .............................. 278 MSF to Command and Push and Pull Buses Interface Block Diagram .................................... 290 Basic I/O Capability of the Intel® IXP2800 Network Processor................................................ 292 Simplex Configuration .............................................................................................................. 293 Hybrid Simplex Configuration ................................................................................................... 294 Dual Network Processor, Full Duplex Configuration ................................................................ 295 Single Network Processor, Full Duplex Configuration (SPI-4.2 Protocol) ................................ 296 Single Network Processor, Full Duplex Configuration (SPI-4.2 and CSIX-L1 Protocols) ......... 297 Framer, Single Network Processor Ingress and Egress, and Fabric Interface Chip ................ 298 Framer, Dual Processor Ingress, Single Processor Egress, and Fabric Interface Chip ........... 298 Framer, Single Network Processor Ingress, Single Network Processor Egress, CSIX-L1 Translation Chip and CSIX-L1 Fabric Interface Chip ................................................. 299 CPU Complex, Network Processor, and Fabric Interface Chips .............................................. 299 Framer, Single Network Processor, Co-Processor, and Fabric Interface Chip ........................ 300 SPI-4.2 Interface Reference Model with Receiver and Transmitter Labels Corresponding to Link Layer Device Functions ........................................................................ 301 CSIX-L1 Interface Reference Model with Receiver and Transmitter Labels Corresponding to Fabric Interface Chip Functions ................................................................... 303 Reference Model for IXP2800 Support of the Simplex Configuration Using Independent Ingress and Egress Interfaces............................................................................. 306 Reference Model for Hybrid Simplex Operation ....................................................................... 307 Block Diagram of Dual Protocol (SPI-4.2 and CSIX-L1) Bridge Chip ....................................... 313 Summary of Receiver and Transmitter Signaling ..................................................................... 317 PCI Functional Blocks .............................................................................................................. 320 Data Access Paths ................................................................................................................... 321 PCI Arbiter Configuration Using CFG_PCI_ARB(GPIO[2]) ...................................................... 331 Example of Target Write to SRAM of 68 Bytes ........................................................................ 333 Example of Target Write to DRAM of 68 Bytes ........................................................................ 335 Example of Target Read from DRAM Using 64-Byte Burst ...................................................... 336 Generation of the Doorbell Interrupts to PCI ............................................................................ 337 Generation of the Doorbell Interrupts to the Intel XScale® Core.............................................. 338 PCI Interrupts ........................................................................................................................... 339 DMA Descriptor Reads............................................................................................................. 342 PCI Address Generation for Command Bus Master to PCI...................................................... 346 PCI Address Generation for Command Bus Master to PCI Configuration Cycle ..................... 347 Overall Clock Generation and Distribution ............................................................................... 360 IXP2800 Network Processor Clock Generation........................................................................ 363 Synchronization Between Frequency Domains ........................................................................ 364 Reset Out Behavior .................................................................................................................. 365 Reset Generation ..................................................................................................................... 366 Boot Process ............................................................................................................................ 371 Performance Monitor Interface Block Diagram......................................................................... 376 Block Diagram of a Single CHAP Counter ............................................................................... 378 Basic Block Diagram of IXP2800 Network Processor with PMU .............................................. 379 CAP Interface to the APB ......................................................................................................... 380 Conceptual Diagram of Counter Array ..................................................................................... 382 Hardware Reference Manual Contents Tables 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 Data Terminology ....................................................................................................................... 26 Longword Formats...................................................................................................................... 26 IXP2800 Network Processor Microengine Bus Arrangement ..................................................... 35 Next Neighbor Write as a Function of CTX_ENABLE[NN_MODE] ............................................ 38 Registers Used By Contexts in Context-Relative Addressing Mode .......................................... 41 Align Value and Shift Amount ..................................................................................................... 43 Register Contents for Example 10..............................................................................................44 Register Contents for Example 11..............................................................................................45 RDRAM Sizes............................................................................................................................. 50 SRAM Controller Configurations................................................................................................. 52 Total Memory per Channel ......................................................................................................... 53 Address Reference Order...........................................................................................................55 Q_array Entry Reference Order.................................................................................................. 55 Ring Full Signal Use – Number of Contexts and Length versus Ring Size ................................ 58 TBUF SPI-4 Control Definition.................................................................................................... 66 TBUF CSIX Control Definition .................................................................................................... 67 DMA Descriptor Format .............................................................................................................. 72 Doorbell Interrupt Registers........................................................................................................ 75 I/O Latency ................................................................................................................................. 78 Data Cache and Buffer Behavior when X = 0 ............................................................................. 83 Data Cache and Buffer Behavior when X = 1 ............................................................................. 83 Memory Operations that Impose a Fence .................................................................................. 84 Valid MMU and Data/Mini-Data Cache Combinations................................................................ 85 Performance Monitoring Events ...............................................................................................107 Some Common Uses of the PMU.............................................................................................108 Branch Latency Penalty............................................................................................................112 Latency Example ......................................................................................................................114 Branch Instruction Timings (Predicted by the BTB)..................................................................115 Branch Instruction Timings (Not Predicted by the BTB) ...........................................................115 Data Processing Instruction Timings ........................................................................................115 Multiply Instruction Timings ......................................................................................................116 Multiply Implicit Accumulate Instruction Timings ......................................................................117 Implicit Accumulator Access Instruction Timings......................................................................117 Saturated Data Processing Instruction Timings........................................................................117 Status Register Access Instruction Timings .............................................................................118 Load and Store Instruction Timings ..........................................................................................118 Load and Store Multiple Instruction Timings.............................................................................118 Semaphore Instruction Timings ................................................................................................118 CP15 Register Access Instruction Timings...............................................................................119 CP14 Register Access Instruction Timings...............................................................................119 SWI Instruction Timings............................................................................................................119 Count Leading Zeros Instruction Timings .................................................................................119 Little-Endian Encoding..............................................................................................................120 Big-Endian Encoding ................................................................................................................120 Byte-Enable Generation by the Intel XScale® Core for Byte Transfers in Little- and Big-Endian Systems .................................................................................................................121 46 Byte-Enable Generation by the Intel XScale® Core for 16-Bit Data Transfers in Littleand Big-Endian Systems ..........................................................................................................123 Hardware Reference Manual 19 Contents 47 Byte-Enable Generation by the Intel XScale® Core for Byte Writes in Little- and Big-Endian Systems ................................................................................................................. 123 48 Byte-Enable Generation by the Intel XScale® Core for Word Writes in Little- and Big-Endian Systems ................................................................................................................. 124 49 CMB Write Command to CPP Command Conversion ............................................................. 127 50 IXP2800 Network Processor SRAM Q-Array Access Alias Addresses .................................... 129 51 GCSR Address Map (0xd700 0000) ......................................................................................... 131 52 Data Transaction Alignment ..................................................................................................... 136 53 Address Spaces for XPI Internal Devices................................................................................. 136 54 8-Bit Flash Memory Device Density ......................................................................................... 143 55 SONET/SDH Devices ............................................................................................................... 143 56 Next Neighbor Write as a Function of CTX_Enable[NN_Mode] ............................................... 172 57 Registers Used by Contexts in Context-Relative Addressing Mode......................................... 173 58 Align Value and Shift Amount................................................................................................... 174 59 Register Contents for Example 23............................................................................................ 175 60 Register Contents for Example 24............................................................................................ 176 61 RDRAM Loading....................................................................................................................... 188 62 RDRAM Sizes........................................................................................................................... 188 63 Address Rearrangement for 3-Way Interleave (Sheet 1 of 2) .................................................. 192 64 Address Rearrangement for 3-Way Interleave (Sheet 2 of 2) (Rev B) .................................... 193 65 Address Bank Interleaving........................................................................................................ 194 66 RDRAM Timing Parameter Settings ......................................................................................... 196 67 Ordering of Reads and Writes to the Same Address for DRAM............................................... 201 68 DRAM Push Arbiter Operation ................................................................................................. 203 69 DPLA Description ..................................................................................................................... 204 70 SRAM Controller Configurations .............................................................................................. 209 71 Total Memory per Channel ....................................................................................................... 210 72 Atomic Operations .................................................................................................................... 212 73 Queue Format .......................................................................................................................... 215 74 Ring/Journal Format ................................................................................................................. 216 75 Ring Size Encoding .................................................................................................................. 216 76 Address Map ............................................................................................................................ 218 77 Address Reference Order......................................................................................................... 219 78 Q_array Entry Reference Order ............................................................................................... 220 79 Ring Full Signal Use – Number of Contexts and Length versus Ring Size .............................. 232 80 Head/Tail, Base, and Full Threshold – by Ring Size ................................................................ 233 81 Intel XScale® Core and Microengine Instructions .................................................................... 235 82 S_Transfer Registers Hash Operands ..................................................................................... 237 83 SPI-4 Control Word Format ...................................................................................................... 244 84 Order of Bytes within the SPI-4 Data Burst .............................................................................. 245 85 CFrame Types.......................................................................................................................... 246 86 Receive Pins Usage by Protocol .............................................................................................. 248 87 Order in which Received Data Is Stored in RBUF .................................................................... 248 88 Mapping of Received Data to RBUF Partitions ........................................................................ 249 89 Number of Elements per RBUF Partition.................................................................................. 249 90 RBUF SPIF-4 Status Definition ................................................................................................ 252 91 RBUF CSIX Status Definition ................................................................................................... 254 92 Rx_Thread_Freelist Use........................................................................................................... 255 93 Summary of SPI-4 and CSIX RBUF Operations ...................................................................... 258 94 Transmit Pins Usage by Protocol ............................................................................................. 262 20 Hardware Reference Manual Contents 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 Order in which Data is Transmitted from TBUF........................................................................263 Mapping of TBUF Partitions to Transmit Protocol ....................................................................263 Number of Elements per TBUF Partition ..................................................................................264 TBUF SPI-4 Control Definition..................................................................................................266 TBUF CSIX Control Definition ..................................................................................................267 Transmit SPI-4 Control Word....................................................................................................268 Transmit CSIX Header..............................................................................................................269 Summary of RBUF and TBUF Operations................................................................................274 SRB Definition by Clock Phase Number...................................................................................276 Data Deskew Functions............................................................................................................281 Calendar Deskew Functions.....................................................................................................281 Flow Control Deskew Functions ...............................................................................................281 Data Training Sequence ...........................................................................................................282 Flow Control Training Sequence ..............................................................................................282 Calendar Training Sequence ....................................................................................................283 IXP2800 Network Processor Requires Data Training...............................................................284 Switch Fabric or SPI-4 Framer Requires Data Training ...........................................................285 IXP2800 Network Processor Requires Flow Control Training ..................................................286 Switch Fabric Requires Flow Control Training..........................................................................286 SPI-4.2 Transmitter State Machine Transitions on 16-Bit Bus Transfers .................................314 Training Transmitter State Machine Transitions on 16-Bit Bus Transfers ................................315 CSIX-L1 Transmitter State Machine Transitions on CWord Boundaries ..................................315 PCI Block FIFO Sizes ...............................................................................................................322 Maximum Loading ....................................................................................................................322 PCI Commands ........................................................................................................................322 PCI BAR Programmable Sizes .................................................................................................324 PCI BAR Sizes with PCI Host Initialization ...............................................................................324 Legal Combinations of the Strap Pin Options...........................................................................330 Slave Interface Buffer Sizes .....................................................................................................332 Doorbell Interrupt Registers......................................................................................................337 IRQ Interrupt Options by Stepping............................................................................................339 DMA Descriptor Format ............................................................................................................342 PCI Maximum Burst Size..........................................................................................................345 Command Bus Master Configuration Transactions ..................................................................347 Command Bus Master Address Space Map to PCI..................................................................347 Byte Lane Alignment for 64-Bit PCI Data In (64 Bits PCI Little-Endian to Big-Endian with Swap) ................................................................................................................................353 Byte Lane Alignment for 64-Bit PCI Data In (64 Bits PCI Big-Endian to Big-Endian without Swap) ...........................................................................................................................353 Byte Lane Alignment for 32-Bit PCI Data In (32 Bits PCI Little-Endian to Big-Endian with Swap) ................................................................................................................................353 Byte Lane Alignment for 32-Bit PCI Data In (32 Bits PCI Big-Endian to Big-Endian without Swap) ...........................................................................................................................353 Byte Lane Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Little Endian with Swap) ....................................................................................................................354 Byte Lane Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Big-Endian without Swap) ...........................................................................................................................354 Byte Lane Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Little Endian with Swap) ....................................................................................................................354 Byte Lane Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Big-Endian without Swap) ...........................................................................................................................354 Hardware Reference Manual 21 Contents 138 Byte Enable Alignment for 64-Bit PCI Data In (64 Bits PCI Little-Endian to BigEndian with Swap).................................................................................................................... 355 139 Byte Enable Alignment for 64-Bit PCI Data In (64 Bits PCI Big-Endian to Big-Endian without Swap) ........................................................................................................................... 355 140 Byte Enable Alignment for 32-Bit PCI Data In (32 bits PCI Little-Endian to BigEndian with Swap).................................................................................................................... 355 141 Byte Enable Alignment for 32-Bit PCI Data In (32 Bits PCI Big-Endian to Big-Endian without Swap) ........................................................................................................................... 356 142 Byte Enable Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Little Endian with Swap).................................................................................................................... 356 143 Byte Enable Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Big Endian without Swap) ............................................................................................................... 356 144 Byte Enable Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Little Endian with Swap).................................................................................................................... 356 145 Byte Enable Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Big Endian without Swap) ............................................................................................................... 357 146 PCI I/O Cycles with Data Swap Enable .................................................................................... 358 147 Clock Usage Summary............................................................................................................. 360 148 Clock Rates Examples ............................................................................................................. 362 149 IXP2800 Network Processor Strap Pins................................................................................... 369 150 Supported Strap Combinations ................................................................................................ 370 151 APB Usage ............................................................................................................................... 381 152 Hardware Blocks and Their Performance Measurement Events.............................................. 383 153 PMU Design Unit Selection ...................................................................................................... 386 154 Chap Counter Threshold Events (Design Block # 0001) .......................................................... 388 155 XPI PMU Event List .................................................................................................................. 389 156 SHaC PMU Event List .............................................................................................................. 393 157 IXP2800 Network Processor MSF PMU Event List .................................................................. 396 158 Intel XScale® Core Gasket PMU Event List............................................................................. 402 159 PCI PMU Event List .................................................................................................................. 405 160 ME00 PMU Event List .............................................................................................................. 409 161 ME01 PMU Event List .............................................................................................................. 410 162 ME02 PMU Event List .............................................................................................................. 411 163 ME03 PMU Event List .............................................................................................................. 411 164 ME04 PMU Event List .............................................................................................................. 412 165 ME05 PMU Event List .............................................................................................................. 412 166 ME06 PMU Event List .............................................................................................................. 413 167 ME07 PMU Event List .............................................................................................................. 413 168 ME10 PMU Event List .............................................................................................................. 414 169 ME11 PMU Event List .............................................................................................................. 414 170 ME12 PMU Event List .............................................................................................................. 415 171 ME13 PMU Event List .............................................................................................................. 415 172 ME14 PMU Event List .............................................................................................................. 416 173 ME15 PMU Event List .............................................................................................................. 416 174 ME16 PMU Event List .............................................................................................................. 417 175 ME17 PMU Event List .............................................................................................................. 417 176 SRAM DP1 PMU Event List ..................................................................................................... 418 177 SRAM DP0 PMU Event List ..................................................................................................... 418 178 SRAM CH3 PMU Event List ..................................................................................................... 420 179 SRAM CH3 PMU Event List ..................................................................................................... 421 180 SRAM CH3 PMU Event List ..................................................................................................... 421 22 Hardware Reference Manual Contents 181 182 183 184 185 186 SRAM CH0 PMU Event List .....................................................................................................422 IXP2800 Network Processor Dram DPLA PMU Event List.......................................................423 IXP2800 Network Processor Dram DPSA PMU Event List ......................................................424 IXP2800 Network Processor Dram CH2 PMU Event List.........................................................425 IXP2800 Network Processor Dram CH1 PMU Event List.........................................................429 IXP2800 Network Processor Dram CH0 PMU Event List.........................................................429 Hardware Reference Manual 23 Contents 24 Hardware Reference Manual Intel® IXP2800 Network Processor Introduction Introduction 1.1 1 About This Document This document is the hardware reference manual for the Intel® IXP2800 Network Processor. This information is intended for use by developers and is organized as follows: Section 2, “Technical Description” contains a hardware overview. Section 3, “Intel XScale® Core” describes the embedded core. Section 4, “Microengines” describes Microengine operation. Section 5, “DRAM” describes the DRAM Unit. Section 6, “SRAM Interface” describes the SRAM Unit. Section 7, “SHaC — Unit Expansion” describes the Scratchpad, Hash Unit, and CSRs (SHaC). Section 8, “Media and Switch Fabric Interface” describes the Media and Switch Fabric (MSF) Interface used to connect the network processor to a physical layer device. Section 9, “PCI Unit” describes the PCI Unit. Section 10, “Clocks and Reset” describes the clocks, reset and initialization sequence. Section 11, “Performance Monitor Unit” describes the PMU. 1.2 Related Documentation Further information on the IXP2800 is available in the following documents: IXP2800 Network Processor Datasheet – Contains summary information on the IXP2800 Network Processor including a functional description, signal descriptions, electrical specifications, and mechanical specifications. IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual – Contains detailed programming information for designers. IXP2400/IXP2800 Network Processor Development Tools User’s Guide – Describes the Developer Workbench and the development tools you can access through the use of the Workbench GUI. Hardware Reference Manual 25 Intel® IXP2800 Network Processor Introduction 1.3 Terminology Table 1 and Table 2 list the terminology used in this manual. Table 1. Data Terminology Term Table 2. 26 Words Bytes Bits Byte ½ 1 8 Word 1 2 16 Longword 2 4 32 Quadword 4 8 64 Longword Formats Endian Type 32-Bit 64-Bit Little-Endian (0x12345678) arranged as {12 34 56 78} 64-bit data 0x12345678 9ABCDE56 arranged as {12 34 56 78 9A BC DE 56} Big-Endian (0x12345678) arranged as {78 56 34 12} 64-bit data 0x12345678 9ABCDE56 arranged as {78 56 34 12, 56 DE BC 9A} Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description Technical Description 2.1 2 Overview This section provides a brief overview of the IXP2800 Network Processor internal hardware. This section is intended as an overall hardware introduction to the network processor. The major blocks are: • Intel XScale®core — General purpose 32-bit RISC processor (ARM* Version 5 Architecture compliant) used to initialize and manage the network processor, and can be used for higher layer network processing tasks. • Intel XScale® technology Peripherals (XPI) — Interrupt Controller, Timers, UART, General Purpose I/O (GPIO) and interface to low-speed off chip peripherals (such as maintenance port of network devices) and Flash ROM. • Microengines (MEs) — Sixteen 32-bit programmable engines specialized for Network Processing. Microengines do the main data plane processing per packet. • DRAM Controllers — Three independent controllers for Rambus* DRAM. Typically DRAM is used for data buffer storage. • SRAM Controllers — Four independent controllers for QDR SRAM. Typically SRAM is used for control information storage. • Scratchpad Memory — 16 Kbytes storage for general purpose use. • Hash Unit — Polynomial hash accelerator. The Intel XScale® core and Microengines can use it to offload hash calculations. • Control and Status Register Access Proxy (CAP) — These provide special inter-processor communication features to allow flexible and efficient inter-Microengine and Microengine to Intel XScale® core communication. • Media and Switch Fabric Interface (MSF) — Interface for network framers and/or Switch Fabric. Contains receive and transmit buffers. • PCI Controller — PCI Local Bus Specification, Version 2.2* interface for 64-bit 66-MHz I/O. PCI can be used to either connect to a Host processor, or to attach PCI-compliant peripheral devices. • Performance Monitor — Counters that can be programmed to count selected internal chip hardware events, which can be used to analyze and tune performance. Figure 1 is a simple block diagram of the network processor showing the major internal hardware blocks. Figure 2 is a detailed diagram of the network processor units and buses. Hardware Reference Manual 27 Intel® IXP2800 Network Processor Technical Description Figure 1. IXP2800 Network Processor Functional Block Diagram Media Switch Fabric (MSF) Hash Unit Scratched Memory PCI Controller SRAM Controller 0 CAP SRAM Controller 1 SRAM Controller 2 SRAM Controller 3 DRAM Controller 0 ME 0x1 ME 0x0 ME 0x10 ME 0x11 ME 0x2 ME 0x3 ME 0x13 ME 0x12 ME 0x5 ME 0x4 ME 0x14 ME 0x15 ME 0x6 ME 0x7 ME 0x17 ME 0x16 ME Cluster 0 DRAM Controller 1 DRAM Controller 2 Intel XScale® Core Peripherals (XPI) Intel XScale® Core Performance Monitor ME Cluster 1 A9226-02 28 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description Figure 2. IXP2800 Network Processor Detailed Diagram SRAM SRAM SRAM SRAM Controller Controller DRAM DRAM DRAM DRAM Controller Controller DRAM Controller D_Push_Bus Arbiter SRAM Controller DRAM SHaC Unit Scratch Hash CAP D_Pull_Bus Arbiter SRAM SP14/CSIX Device D_Push D_Pull Media Controller Cmd_1 Cmd_0 RBuf TBuf CSR S_Pull Arb 1 S_Push Arb 1 S_Pull Arb 0 S_Push Arb 0 S_Pull_0 S_Push_0 S_Pull_1 PCI Device S_Push_1 mast/targ CSRs PCI space DMA transfers PCI Controller S in S out D in D out Cmd Cmd S in S out D in D out xfer xfer xfer xfer FIFO FIFO xfer xfer xfer xfer CSRs CSRs ME0x10-0x17 Cluster 1 ME0x0-0x7 Cluster 0 Gasket Intel XScale® Core Cmd_Arb_1 Cmd_Arb_0 (grant/request) (grant/request) Command Bus Arbiter 1 Command Bus Arbiter 0 Notes: Connected to the S_Push/Pull Buses Connected to the S_Push/Pull Buses and D_Push/Pull Buses = Chassis Components A9750-03 Hardware Reference Manual 29 Intel® IXP2800 Network Processor Technical Description 2.2 Intel XScale® Core Microarchitecture The Intel XScale® microarchitecture consists of a 32-bit general purpose RISC processor that incorporates an extensive list of architecture features that allows it to achieve high performance. 2.2.1 ARM* Compatibility The Intel XScale® microarchitecture is ARM* Version 5 (V5) Architecture compliant. It implements the integer instruction set of ARM* V5, but does not provide hardware support of the floating point instructions. The Intel XScale® microarchitecture provides the Thumb instruction set (ARM V5T) and the ARM V5E DSP extensions. Backward compatibility with the first generation of StrongARM* products is maintained for usermode applications. Operating systems may require modifications to match the specific hardware features of the Intel XScale® microarchitecture and to take advantage of the performance enhancements added to the Intel XScale® core. 2.2.2 Features 2.2.2.1 Multiply/Accumulate (MAC) The MAC unit supports early termination of multiplies/accumulates in two cycles and can sustain a throughput of a MAC operation every cycle. Several architectural enhancements were made to the MAC to support audio coding algorithms, which include a 40-bit accumulator and support for 16-bit packed values. 2.2.2.2 Memory Management The Intel XScale® microarchitecture implements the Memory Management Unit (MMU) Architecture specified in the ARM Architecture Reference Manual. The MMU provides access protection and virtual to physical address translation. The MMU Architecture also specifies the caching policies for the instruction cache and data memory. These policies are specified as page attributes and include: • • • • • 2.2.2.3 identifying code as cacheable or non-cacheable selecting between the mini-data cache or data cache write-back or write-through data caching enabling data write allocation policy and enabling the write buffer to coalesce stores to external memory Instruction Cache The Intel XScale® microarchitecture implements a 32-Kbyte, 32-way set associative instruction cache with a line size of 32 bytes. All requests that “miss” the instruction cache generate a 32-byte read request to external memory. A mechanism to lock critical code within the cache is also provided. 30 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.2.2.4 Branch Target Buffer The Intel XScale® microarchitecture provides a Branch Target Buffer (BTB) to predict the outcome of branch type instructions. It provides storage for the target address of branch type instructions and predicts the next address to present to the instruction cache when the current instruction address is that of a branch. The BTB holds 128 entries. 2.2.2.5 Data Cache The Intel XScale® microarchitecture implements a 32-Kbyte, 32-way set associative data cache and a 2-Kbyte, 2-way set associative mini-data cache. Each cache has a line size of 32 bytes, and supports write-through or write-back caching. The data/mini-data cache is controlled by page attributes defined in the MMU Architecture and by coprocessor 15. The Intel XScale® microarchitecture allows applications to reconfigure a portion of the data cache as data RAM. Software may place special tables or frequently used variables in this RAM. 2.2.2.6 Interrupt Controller The Intel XScale® microarchitecture provides two levels of interrupt, IRQ and FIQ. They can be masked via coprocessor 13. Note that there is also a memory-mapped interrupt controller described with the Intel XScale® technology peripherals (see Section 3.12), which is used to mask and steer many chip-wide interrupt sources. Hardware Reference Manual 31 Intel® IXP2800 Network Processor Technical Description 2.2.2.7 Address Map Figure 3 shows the partitioning of the Intel XScale® core microarchitecture 4-Gbyte address space. Figure 3. Intel XScale® Core 4-GB (32-Bit) Address Space 0XFFFF FFF PCI MEM (1/2 Gb) 3.5 Gb 0XE000 0000 0XDFFF FFF PCI Local CSRs PCI Config Regs PCI Spec/IACK PCI CFG (32 Mb) PCI I/O (32 Mb) Intel XScale® Core CSR Other (1/2 Gb) 0XDF00 0000 0XDE00 0000 0XDC00 0000 0XDA00 0000 0XD800 0000 0XD600 0000 RESERVED (32 Mb x 2) 0XC000 0000 0XBFFF FFF DRAM CSR (32 Mb) SRAM Ring (32 Mb) SRAM CSR & Queue Scratch (32 Mb) MSF (32 Mb) SRAM (1 Gb) FLASH ROM (64 Mb) 3.0 Gb RESERVED CAP-CSRs (32 Mb) 0XD000 0000 0XCE00 0000 0XCC00 0000 0XCA00 0000 0XC800 0000 0XC400 0000 0XC200 0000 0XC000 0000 0x8000 0000 0X7FFF FFFF DRAM and Intel XScale® Core FLASH ROM (2 Gb) 0X0000 0000 A9693-02 32 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.3 Microengines The Microengines do most of the programmable pre-packet processing in the IXP2800 Network Processor. There are 16 Microengines, connected as shown in Figure 1. The Microengines have access to all shared resources (SRAM, DRAM, MSF, etc.) as well as private connections between adjacent Microengines (referred to as “next neighbors”). The block diagram in Figure 4 is used in the Microengine description. Note that this block diagram is simplified for clarity; some blocks and connectivity have been omitted to make the diagram more readable. Also, this block diagram does not show any pipeline stages, rather it shows the logical flow of information. Microengines provide support for software-controlled multi-threaded operation. Given the disparity in processor cycle times versus external memory times, a single thread of execution often blocks, waiting for external memory operations to complete. Multiple threads allow for threadinterleave operation, as there is often at least one thread ready to run while others are blocked. Hardware Reference Manual 33 Intel® IXP2800 Network Processor Technical Description Figure 4. Microengine Block Diagram NNData_In (from previous ME) 640 Local Mem d e c o d e S_Push (from SRAM Scratchpad, MSF, Hash, PCI, CAP) D_Push (from DRAM) 128 GPRs (A Bank) 128 GPRs (B Bank) 128 Next Neighbor 128 D XFER In 128 S XFER In Control Store Lm_addr_1 Lm_addr_0 A_Src B_Src T_Index NN_Get CRC_Remainder Immed CRC Unit A_Operand B_Operand Execution Datapath (Shift, Add, Subtract, Multiply Logicals, Find First Bit, CAM) ALU_Out Dest S_Push NN_Data_Out (to next ME) 128 D XFER Out Local CSRs CMD FIFO (4) 128 S XFER Out Command D_Pull Control Data S_Pull B1670-01 34 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.3.1 Microengine Bus Arrangement The IXP2800 Network Processor supports a single D_Push/D_Pull bus, and both Microengine clusters interface to the same bus. Also, it supports two command buses, and two sets of S_Push/S_Pull buses connected as shown in Table 3, which also shows the next neighbor relationship between the Microengine. Table 3. IXP2800 Network Processor Microengine Bus Arrangement Microengine Cluster Microengine Number Next Neighbor Previous Neighbor 0x00 0x01 NA 0x01 0x02 0x00 0x02 0x03 0x01 0x03 0x04 0x02 0x04 0x05 0x03 0x05 0x06 0x04 0x06 0x07 0x05 0x07 0x10 0x06 0x10 0x11 0x07 0x11 0x12 0x10 0x12 0x13 0x11 0x13 0x14 0x12 0x14 0x15 0x13 0x15 0x16 0x14 0x16 0x17 0x15 0x17 NA 0x16 0 1 2.3.2 Command Bus S_Push and S_Pull Bus 0 0 1 1 Control Store The Control Store is a RAM that holds the program that is executed by the Microengine. It holds 8192 instructions, each of which is 40 bits wide. It is initialized by the Intel XScale® core, which writes to USTORE_ADDR and USTORE_DATA Local CSRs. The Control Store is protected by parity against soft errors. Parity checking is enabled by CTX_ENABLE[CONTROL STORE PARITY ENABLE]. A parity error on an instruction read will halt the Microengine and assert an interrupt to the Intel XScale® core. 2.3.3 Contexts There are eight hardware Contexts available in the Microengine. To allow for efficient context swapping, each Context has its own register set, Program Counter, and Context specific Local registers. Having a copy per Context eliminates the need to move Context specific information to/ from shared memory and Microengine registers for each Context swap. Fast context swapping allows a Context to do computation while other Contexts wait for I/O (typically external memory accesses) to complete or for a signal from another Context or hardware unit. (A context swap is similar to a taken branch in timing.) Hardware Reference Manual 35 Intel® IXP2800 Network Processor Technical Description Each of the eight Contexts is in one of four states. 1. Inactive — Some applications may not require all eight contexts. A Context is in the Inactive state when its CTX_ENABLE CSR enable bit is a 0. 2. Executing — A Context is in Executing state when its context number is in ACTIVE_CTX_STS CSR. The executing Context’s PC is used to fetch instructions from the Control Store. A Context will stay in this state until it executes an instruction that causes it to go to Sleep state (there is no hardware interrupt or preemption; Context swapping is completely under software control). At most one Context can be in Executing state at any time. 3. Ready — In this state, a Context is ready to execute, but is not because a different Context is executing. When the Executing Context goes to the Sleep state, the Microengine’s context arbiter selects the next Context to go to the Executing state from among all the Contexts in the Ready state. The arbitration is round robin. 4. Sleep — Context is waiting for external event(s) specified in the INDIRECT_WAKEUP_EVENTS CSR to occur (typically, but not limited to, an I/O access). In this state the Context does not arbitrate to enter the Executing state. The state diagram in Figure 5 illustrates the Context state transitions. Each of the eight Contexts will be in one of these states. At most one Context can be in Executing state at a time; any number of Contexts can be in any of the other states. Figure 5. Context State Transition Diagram CTX_ENABLE bit is set by Intel XScale® Core Reset Inactive CTX_ENABLE bit is cleared Sleep CTX_ENABLE bit is cleared Ex te l rn a en Ev t Si gn Ready s rrive al a Context executes CTX Arbitration instruction Executing Context goes to Sleep state, and this Context is the highest round-robin priority. Executing Note: After reset, the Intel XScale® Core processor must load the starting address of the CTX_PC, load the CTX_WAKEUP_EVENTS to 0x1 (voluntary), and then set the appropriate CTX_ENABLE bits to begin executing Context(s). A9352-03 The Microengine is in Idle state whenever no Context is running (all Contexts are in either Inactive or Sleep states). This state is entered: 1. After reset (CTX_ENABLE Local CSR is clear, putting all Contexts into Inactive states). 2. When a context swap is executed, but no context is ready to wake up. 3. When a ctx_arb[bpt] instruction is executed by the Microengine (this is a special case of condition 2 above, since the ctx_arb[bpt] clears CTX_ENABLE, putting all Contexts into Inactive states). 36 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description The Microengine provides the following functionality during the Idle state: 1. The Microengine continuously checks if a Context is in Ready state. If so, a new Context begins to execute. If no Context is Ready, the Microengine remains in the Idle state. 2. Only the ALU instructions are supported. They are used for debug via special hardware defined in number 3 below. 3. A write to the USTORE_ADDR Local CSR with the USTORE_ADDR[ECS] bit set, causing the Microengine to repeatedly execute the instruction pointed by the address specified in the USTORE_ADDR CSR. Only the ALU instructions are supported in this mode. Also, the result of the execution is written to the ALU_OUT Local CSR rather than a destination register. 4. A write to the USTORE_ADDR Local CSR with the USTORE_ADDR[ECS] bit set, followed by a write to the USTORE_DATA Local CSR loads an instruction into the Control Store. After the Control Store is loaded, execution proceeds as described in number 3 above. 2.3.4 Datapath Registers As shown in the block diagram in Figure 4, each Microengine contains four types of 32-bit datapath registers: 1. 256 General Purpose registers 2. 512 Transfer registers 3. 128 Next Neighbor registers 4. 640 32-bit words of Local Memory 2.3.4.1 General-Purpose Registers (GPRs) GPRs are used for general programming purposes. They are read and written exclusively under program control. GPRs, when used as a source in an instruction, supply operands to the execution datapath. When used as a destination in an instruction, they are written with the result of the execution datapath. The specific GPRs selected are encoded in the instruction. The GPRs are physically and logically contained in two banks, GPR A, and GPR B, defined in Table 5. 2.3.4.2 Transfer Registers Transfer (abbreviated as Xfer) registers are used for transferring data to and from the Microengine and locations external to the Microengine, (for example DRAMs, SRAMs etc.). There are four types of transfer registers. • • • • S_TRANSFER_IN S_TRANSFER_OUT D_TRANSFER_IN D_TRANSFER_OUT TRANSFER_IN registers, when used as a source in an instruction, supply operands to the execution datapath. The specific register selected is either encoded in the instruction, or selected indirectly via T_INDEX. TRANSFER_IN registers are written by external units (A typical case is when the external unit returns data in response to read instructions. However, there are other Hardware Reference Manual 37 Intel® IXP2800 Network Processor Technical Description methods to write TRANSFER_IN registers, for example a read instruction executed by one Microengine may cause the data to be returned to a different Microengine. Details are covered in the instruction set descriptions). TRANSFER_OUT registers, when used as a destination in an instruction, are written with the result from the execution datapath. The specific register selected is encoded in the instruction, or selected indirectly via T_INDEX. TRANSFER_OUT registers supply data to external units (for example, write data for an SRAM write). The S_TRANSFER_IN and S_TRANSFER_OUT registers connect to the S_PUSH and S_PULL buses, respectively. The D_TRANSFER_IN and D_TRANSFER_OUT Transfer registers connect to the D_PUSH and D_PULL buses, respectively. Typically, the external units access the Transfer registers in response to instructions executed by the Microengines. However, it is possible for an external unit to access a given Microengine’s Transfer registers either autonomously, or under control of a different Microengine, or the Intel XScale® core, etc. The Microengine interface signals controlling writing/reading of the TRANSFER_IN and TRANSFER_OUT registers are independent of the operation of the rest of the Microengine, therefore the data movement does not stall or impact other instruction processing (it is the responsibility of software to synchronize usage of read data). 2.3.4.3 Next Neighbor Registers Next Neighbor registers, when used as a source in an instruction, supply operands to the execution datapath. They are written in two different ways: 1. By an adjacent Microengine (the “Previous Neighbor”). 2. By the same Microengine they are in, as controlled by CTX_ENABLE[NN_MODE]. The specific register is selected in one of two ways: 1. Context-relative, the register number is encoded in the instruction. 2. As a Ring, selected via NN_GET and NN_PUT CSR registers. The usage is configured in CTX_ENABLE[NN_MODE]. • When CTX_ENABLE[NN_MODE] is ‘0’ — when Next Neighbor is a destination in an instruction, the result is sent out of the Microengine, to the Next Neighbor Microengine. • When CTX_ENABLE[NN_MODE] is ‘1’ — when Next Neighbor is used as a destination in an instruction, the instruction result data is written to the selected Next Neighbor register in the same Microengine. Note that there is a 5-instruction latency until the newly written data may be read. The data is not sent out of the Microengine as it would be when CTX_ENABLE[NN_MODE] is ‘0’. Table 4. Next Neighbor Write as a Function of CTX_ENABLE[NN_MODE] Where the Write Goes NN_MODE 38 External? NN Register in this Microengine? 0 Yes No 1 No Yes Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.3.4.4 Local Memory Local Memory is addressable storage within the Microengine. Local Memory is read and written exclusively under program control. Local Memory supplies operands to the execution datapath as a source, and receives results as a destination. The specific Local Memory location selected is based on the value in one of the LM_ADDR registers, which are written by local_csr_wr instructions. There are two LM_ADDR registers per Context and a working copy of each. When a Context goes to the Sleep state, the value of the working copies is put into the Context’s copy of LM_ADDR. When the Context goes to the Executing state, the value in its copy of LM_ADDR are put into the working copies. The choice of LM_ADDR_0 or LM_ADDR_1 is selected in the instruction. It is also possible to make use of both or one LM_ADDRs as global by setting CTX_ENABLE[LM_ADDR_0_GLOBAL] and/or CTX_ENABLE[LM_ADDR_1_GLOBAL]. When used globally, all Contexts use the working copy of LM_ADDR in place of their own Context specific one; the Context specific ones are unused. There is a three-instruction latency when writing a new value to the LM_ADDR, as shown in Example 1. Example 1. Three-Cycle Latency when Writing a New Value to LM_ADDR ;some instruction to compute the address into gpr_m local_csr_wr[INDIRECT_LM_ADDR_0, gpr_m]; put gpr_m into lm_addr ;unrelated instruction 1 ;unrelated instruction 2 ;unrelated instruction 3 alu[dest_reg, *l$index0, op, src_reg] ;dest_reg can be used as a source in next instruction LM_ADDR can also be incremented or decremented in parallel with use as a source and/or destination (using the notation *l$index#++ and *l$index#--), as shown in Example 2, where three consecutive Local Memory locations are used in three consecutive instructions. Example 2. Using LM_ADDR in Consecutive Instructions alu[dest_reg1, src_reg1, op, *l$index0++] alu[dest_reg2, src_reg2, op, *l$index0++] alu[dest_reg3, src_reg3, op, *l$index0++] Local Memory is written by selecting it as a destination. Example 3 shows copying a section of Local Memory to another section. Each instruction accesses the next sequential Local Memory location from the previous instruction. Example 3. Copying One Section of Local Memory to Another Section alu[*l$index1++, --, B, *l$index0++] alu[*l$index1++, --, B, *l$index0++] alu[*l$index1++, --, B, *l$index0++] Example 4 shows loading and using both Local Memory addresses. Example 4. Loading and Using Both Local Memory Addresses local_csr_wr[INDIRECT_LM_ADDR_0, gpr_m] local_csr_wr[INDIRECT_LM_ADDR_1, gpr_n] ;unrelated instruction 1 ;unrelated instruction 2 alu[dest_reg1, *l$index0, op, src_reg1] alu[dest_reg2, *l$index1, op, src_reg2] Hardware Reference Manual 39 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. 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] alu[dest_reg2, *l$index0, op, src_reg2] alu[dest_reg3, *l$index0, op, src_reg3] alu[dest_reg4, *l$index0, op, src_reg4] ; ; ; ; uses uses uses uses address address address address from from from from gpr_m gpr_n gpr_o gpr_p 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. 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] 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. Example 7. LM_ADDR Use as Source and Destination alu[*l$index0[2], --, ~B, *l$index0] 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. 40 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description In Example 8, the second instruction will access the Local Memory location one past the source/ destination of the first. Example 8. LM_ADDR Post-Increment alu[*l$index0++, --, ~B, gpr_n] alu[gpr_m, --, ~B, *l$index0] 2.3.5 Addressing Modes GPRs can be accessed in either a context-relative or an absolute addressing mode. Some instructions can specify either mode; other instructions can specify only Context-Relative mode. Transfer and Next Neighbor registers can be accessed in Context-Relative and Indexed modes, and Local Memory is accessed in Indexed mode. The addressing mode in use is encoded directly into each instruction, for each source and destination specifier. 2.3.5.1 Context-Relative Addressing Mode The GPRs are logically subdivided into equal regions such that each Context has relative access to one of the regions. The number of regions is configured in the CTX_ENABLE CSR, and can be either 4 or 8. Thus a Context-Relative register number is actually associated with multiple different physical registers. The actual register to be accessed is determined by the Context making the access request (the Context number is concatenated with the register number specified in the instruction). Context-Relative addressing is a powerful feature that enables eight (or four) different contexts to share the same code image, yet maintain separate data. Table 5 shows how the Context number is used in selecting the register number in relative mode. The register number in Table 5 is the Absolute GPR address, or Transfer or Next Neighbor Index number to use to access the specific Context-Relative register. For example, with eight active Contexts, Context-Relative Register 0 for Context 2 is Absolute Register Number 32. Table 5. Registers Used By Contexts in Context-Relative Addressing Mode Number of Active Contexts Active Context Number GPR Absolute Register Numbers S_Transfer or Neighbor Index Number D_Transfer Index Number 0 – 15 0 – 15 A Port B Port 0 0 – 15 0 – 15 1 16 – 31 16 – 31 16 – 31 16 – 31 8 2 32 – 47 32 – 47 32 – 47 32 – 47 (Instruction always specifies registers in range 0 – 15) 3 48 – 63 48 – 63 48 – 63 48 – 63 4 64 – 79 64 – 79 64 – 79 64 – 79 5 80 – 95 80 – 95 80 – 95 80 – 95 6 96 – 111 96 – 111 96 – 111 96 – 111 7 112 – 127 112 – 127 112 – 127 112 – 127 4 0 0 – 31 0 – 31 0 – 31 0 – 31 (Instruction always specifies registers in range 0 – 31) 2 32 – 63 32 – 63 32 – 63 32 – 63 4 64 – 95 64 – 95 64 – 95 64 – 95 6 96 – 127 96 – 127 96 – 127 96 – 127 Hardware Reference Manual 41 Intel® IXP2800 Network Processor Technical Description 2.3.5.2 Absolute Addressing Mode With Absolute addressing, any GPR can be read or written by any of the eight Contexts in a Microengine. Absolute addressing enables register data to be shared among all of the Contexts, e.g., for global variables or for parameter passing. All 256 GPRs can be read by Absolute address. 2.3.5.3 Indexed Addressing Mode With Indexed addressing, any Transfer or Next Neighbor register can be read or written by any one of the eight Contexts in a Microengine. Indexed addressing enables register data to be shared among all of the Contexts. For indexed addressing the register number comes from the T_INDEX register for Transfer registers or NN_PUT and NN_GET registers (for Next Neighbor registers). Example 9 shows the Index Mode usage. Assume that the numbered bytes have been moved into the S_TRANSFER_IN registers as shown. Example 9. Use of Indexed Addressing Mode Data Transfer Register Number 31:24 23:16 15:8 7:0 0 0x00 0x01 0x02 0x03 1 0x04 0x05 0x06 0x07 2 0x08 0x09 0x0a 0x0b 3 0x0c 0x0d 0x0e 0x0f 4 0x10 0x11 0x12 0x013 5 0x14 0x15 0x16 0x17 6 0x18 0x19 0x1a 0x1b 7 0x1c 0x1d 0x1e 0x1f If the software wants to access a specific byte that is known at compile-time, it will normally use context-relative addressing. For example to access the word in transfer register 3: alu[dest, --, B, $xfer3] ; move the data from s_transfer 3 to gpr dest If the location of the data is found at run-time, indexed mode can be used, e.g., if the start of an encapsulated header depends on an outer header value (the outer header byte is in a fixed location). ; Check byte 2 of transfer 0 ; If value==5 header starts on byte 0x9, else byte 0x14 br=byte[$0, 2, 0x5, L1#], defer_[1] local_csr_wr[t_index_byte_index, 0x09] local_csr_wr[t_index_byte_index, 0x14] nop ; wait for index registers to be loaded L1#: ; Move bytes right justified into destination registers nop ; wait for index registers to be loaded nop ; byte_align_be[dest1, *$index++] byte_align_be[dest2, *$index++] ;etc. ; The t_index and byte_index registers are loaded by the same instruction. 42 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.3.6 Local CSRs Local Control and Status registers (CSRs) are external to the Execution Datapath, and hold specific data. They can be read and written by special instructions (local_csr_rd and local_csr_wr) and are accessed less frequently than datapath registers. Because Local CSRs are not built in the datapath, there is a write-to-use delay of three instructions, and a read-to-consume penalty of two instructions. 2.3.7 Execution Datapath The Execution Datapath can take one or two operands, perform an operation, and optionally write back a result. The sources and destinations can be GPRs, Transfer registers, Next Neighbor registers, and Local Memory. The operations are shifts, add/subtract, logicals, multiply, byte align, and find first one bit. 2.3.7.1 Byte Align The datapath provides a mechanism to move data from source register(s) to any destination register(s) with byte aligning. Byte aligning takes four consecutive bytes from two concatenated values (8 bytes), starting at any of four byte boundaries (0, 1, 2, 3), and based on the endian-type (which is defined in the instruction opcode), as shown in Example 5. The four bytes are taken from two concatenated values. Four bytes are always supplied from a temporary register that always holds the A or B operand from the previous cycle, and the other four bytes from the B or A operand of the Byte Align instruction. The operation is described below, using the block diagram in Figure 6. The alignment is controlled by the two LSBs of the BYTE_INDEX Local CSR. Table 6. Align Value and Shift Amount Align Value (in Byte_Index[1:0]) Right Shift Amount (Number of Bits) (Decimal) Little-Endian Big-Endian 0 0 32 1 8 24 2 16 16 3 24 8 Hardware Reference Manual 43 Intel® IXP2800 Network Processor Technical Description Figure 6. Byte-Align Block Diagram Prev_B Prev_A . . . . . . A_Operand B_Operand Shift Byte_Index Result A9353-01 Example 10 shows a big-endian align sequence of instructions and the value of the various operands. Table 7 shows the data in the registers for this example. The value in BYTE_INDEX[1:0] CSR (which controls the shift amount) for this example is 2. Table 7. Register Contents for Example 10 Register Byte 3 [31:24] Byte 2 [23:16] Byte 1 [15:8] Byte 0 [7:0] 0 0 1 2 3 1 4 5 6 7 2 8 9 A B 3 C D E F Example 10. Big-Endian Align Instruction Prev B A Operand B Operand Result -- -- 0123 -- Byte_align_be[dest1, r1] 0123 0123 4567 2345 Byte_align_be[dest2, r2] 4567 4567 89AB 6789 Byte_align_be[dest3, r3] 89AB 89AB CDEF ABCD Byte_align_be[--, r0] NOTE: A Operand comes from Prev_B register during byte_align_be instructions. 44 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description Example 11 shows a little-endian sequence of instructions and the value of the various operands. Table 8 shows the data in the registers for this example. The value in BYTE_INDEX[1:0] CSR (which controls the shift amount) for this example is 2. Table 8. Register Contents for Example 11 Register Byte 3 [31:24] Byte 2 [23:16] Byte 1 [15:8] Byte 0 [7:0] 0 3 2 1 0 1 7 6 5 4 2 B A 9 8 3 F E D C Example 11. Little-Endian Align Instruction A Operand B Operand Prev A Result Byte_align_le[--, r0] 3210 -- -- -- Byte_align_le[dest1, r1] 7654 3210 3210 5432 Byte_align_le[dest2, r2] BA98 7654 7654 9876 Byte_align_le[dest3, r3] FEDC BA98 BA98 DCBA NOTE: B Operand comes from Prev_A register during byte_align_le instructions. As the examples show, byte aligning “n” words takes “n+1” cycles due to the first instruction needed to start the operation. Another mode of operation is to use the T_INDEX register with post-increment, to select the source registers. T_INDEX operation is described later in this chapter. 2.3.7.2 CAM The block diagram in Figure 7 is used to explain the CAM operation. The CAM has 16 entries. Each entry stores a 32-bit value, which can be compared against a source operand by instruction: CAM_Lookup[dest_reg, source_reg] All entries are compared in parallel, and the result of the lookup is a 9-bit value that is written into the specified destination register in bits 11:3, with all other bits of the register 0 (the choice of bits 11:3 is explained below). The result can also optionally be written into either of the LM_Addr registers (see below in this section for details). The 9-bit result consists of four State bits (dest_reg[11:8]), concatenated with a 1-bit Hit/Miss indication (dest_reg[7]), concatenated with 4-bit entry number (dest_reg[6:3]). All other bits of dest_reg are written with 0. Possible results of the lookup are: • miss (0) — lookup value is not in CAM, entry number is Least Recently Used entry (which can be used as a suggested entry to replace), and State bits are 0000. • hit (1) — lookup value is in CAM, entry number is entry that has matched; State bits are the value from the entry that has matched. Hardware Reference Manual 45 Intel® IXP2800 Network Processor Technical Description Figure 7. CAM Block Diagram Lookup Value (from A port) Tag State Tag State Tag State Tag State Match Match Match Status and LRU Logic Match Lookup Status (to Dest Req) State Status Entry Number 0000 Miss 0 LRU Entry State Hit 1 Hit Entry A9354-01 Note: The State bits are data associated with the entry. The use is only by software. There is no implication of ownership of the entry by any Context. The State bits hardware function is: • the value is set by software (at the time the entry is loaded, or changed in an already loaded entry). • its value is read out on a lookup that hits, and used as part of the status written into the destination register. • its value can be read out separately (normally only used for diagnostic or debug). The LRU (Least Recently Used) Logic maintains a time-ordered list of CAM entry usage. When an entry is loaded, or matches on a lookup, it is marked as MRU (Most Recently Used). Note that a lookup that misses does not modify the LRU list. The CAM is loaded by instruction: CAM_Write[entry_reg, source_reg, state_value] The value in the register specified by source_reg is put into the Tag field of the entry specified by entry_reg. The value for the State bits of the entry is specified in the instruction as state_value. 46 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description The value in the State bits for an entry can be written, without modifying the Tag, by instruction: CAM_Write_State[entry_reg, state_value] Note: CAM_Write_State does not modify the LRU list. One possible way to use the result of a lookup is to dispatch to the proper code using instruction: jump[register, label#],defer [3] where the register holds the result of the lookup. The State bits can be used to differentiate cases where the data associated with the CAM entry is in flight, or is pending a change, etc. Because the lookup result was loaded into bits[11:3] of the destination register, the jump destinations are spaced eight instructions apart. This is a balance between giving enough space for many applications to complete their task without having to jump to another region, versus consuming too much Control Store. Another way to use the lookup result is to branch on just the hit miss bit, and use the entry number as a base pointer into a block of Local Memory. When enabled, the CAM lookup result is loaded into Local_Addr as follows: LM_Addr[5:0] = 0 ([1:0] are read-only bits) LM_Addr[9:6] = lookup result [6:3] (entry number) LM_Addr[11:10] = constant specified in instruction This function is useful when the CAM is used as a cache, and each entry is associated with a block of data in Local Memory. Note that the latency from when CAM_Lookup executes until the LM_Addr is loaded is the same as when LM_Addr is written by a Local_CSR_Wr instruction. The Tag and State bits for a given entry can be read by instructions: CAM_Read_Tag[dest_reg, entry_reg] CAM_Read_State[dest_reg, entry_reg] The Tag value and State bits value for the specified entry is written into the destination register, respectively for the two instructions (the State bits are placed into bits [11:8] of dest_reg, with all other bits 0). Reading the tag is useful in the case where an entry needs to be evicted to make room for a new value—the lookup of the new value results in a miss, with the LRU entry number returned as a result of the miss. The CAM_Read_Tag instruction can then be used to find the value that was stored in that entry. An alternative would be to keep the tag value in a GPR. These two instructions can also be used by debug and diagnostic software. Neither of these modify the state of the LRU pointer. Note: The following rules must be adhered to when using the CAM. • CAM is not reset by Microengine reset. Software must either do a CAM_clear prior to using the CAM to initialize the LRU and clear the tags to 0, or explicitly write all entries with CAM_write. • No two tags can be written to have same value. If this rule is violated, the result of a lookup that matches that value will be unpredictable, and LRU state is unpredictable. The value 0x00000000 can be used as a valid lookup value. However, note that CAM_clear instruction puts 0x00000000 into all tags. To avoid violating rule 2 after doing CAM_clear, it is necessary to write all entries to unique values prior to doing a lookup of 0x00000000. Hardware Reference Manual 47 Intel® IXP2800 Network Processor Technical Description An algorithm for debug software to find out the contents of the CAM is shown in Example 12. Example 12. Algorithm for Debug Software to Find out the Contents of the CAM ; First read each of the tag entries. Note that these reads ; don’t modify the LRU list or any other CAM state. tag[0] = CAM_Read_Tag(entry_0); ...... tag[15] = CAM_Read_Tag(entry_15); ; Now read each of the state bits state[0] = CAM_Read_State(entry_0); ... state[15] = CAM_Read_State(entry_15); ; Knowing what tags are in the CAM makes it possible to ; create a value that is not in any tag, and will therefore ; miss on a lookup. ; Next loop through a sequence of 16 lookups, each of which will ; miss, to obtain the LRU values of the CAM. for (i = 0; i < 16; i++) BEGIN_LOOP ; Do a lookup with a tag not present in the CAM. On a ; miss, the LRU entry will be returned. Since this lookup ; missed the LRU state is not modified. LRU[i] = CAM_Lookup(some_tag_not_in_cam); ; Now do a lookup using the tag of the LRU entry. This ; lookup will hit, which makes that entry MRU. ; This is necessary to allow the next lookup miss to ; see the next LRU entry. junk = CAM_Lookup(tag[LRU[i]]); END_LOOP ; Because all entries were hit in the same order as they were ; LRU, the LRU list is now back to where it started before the ; loop executed. ; LRU[0] through LRU[15] holds the LRU list. The CAM can be cleared with CAM_Clear instruction. This instruction writes 0x00000000 simultaneously to all entries tag, clears all the state bits, and puts the LRU into an initial state (where entry 0 is LRU, ..., entry 15 is MRU). 2.3.8 CRC Unit The CRC Unit operates in parallel with the Execution Datapath. It takes two operands, performs a CRC operation, and writes back a result. CRC-CCITT, CRC-32, CRC-10, CRC-5, and iSCSI polynomials are supported. One of the operands is the CRC_Remainder Local CSR, and the other is a GPR, Transfer_In register, Next Neighbor, or Local Memory, specified in the instruction and passed through the Execution Datapath to the CRC Unit. The instruction specifies the CRC operation type, whether to swap bytes and or bits, and which bytes of the operand to include in the operation. The result of the CRC operation is written back into CRC_Remainder. The source operand can also be written into a destination register (however the byte/bit swapping and masking do not affect the destination register; they only affect the CRC computation). This allows moving data, for example, from S_TRANSFER_IN registers to S_TRANSFER_OUT registers at the same time as computing the CRC. 48 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.3.9 Event Signals Event Signals are used to coordinate a program with completion of external events. For example, when a Microengine executes an instruction to an external unit to read data (which will be written into a Transfer_In register), the program must insure that it does not try to use the data until the external unit has written it. This time is not deterministic due to queuing delays and other uncertainty in the external units (for example, DRAM refresh). There is no hardware mechanism to flag that a register write is pending, and then prevent the program from using it. Instead the coordination is under software control, with hardware support. In the instructions that use external units (i.e., SRAM, DRAM, etc.) there are fields that direct the external unit to supply an indication (called an Event Signal) that the command has been completed. There are 15 Event Signals per Context that can be used, and Local CSRs per Context to track which Event Signals are pending and which have been returned. The Event Signals can be used to move a Context from Sleep state to Ready state, or alternatively, the program can test and branch on the status of Event Signals. Event Signals can be set in nine different ways. 1. When data is written into S_TRANSFER_IN registers 2. When data is written into D_TRANSFER_IN registers 3. When data is taken from S_TRANSFER_OUT registers 4. When data is taken from D_TRANSFER_OUT registers 5. By a write to INTERTHREAD_SIGNAL register 6. By a write from Previous Neighbor Microengine to NEXT_NEIGHBOR_SIGNAL 7. By a write from Next Neighbor Microengine to PREVIOUS_NEIGHBOR_SIGNAL 8. By a write to SAME_ME_SIGNAL Local CSR 9. By Internal Timer Any or all Event Signals can be set by any of the above sources. When a Context goes to the Sleep state (executes a ctx_arb instruction, or an instruction with ctx_swap token), it specifies which Event Signal(s) it requires to be put in Ready state. The ctx_arb instruction also specifies if the logical AND or logical OR of the Event Signal(s) is needed to put the Context into Ready state. When all of the Context’s Event Signals arrive, the Context goes to Ready state, and then eventually to Executing state. In the case where the Event Signal is linked to moving data into or out of Transfer registers (numbers 1 through 4 in the list above), the code can safely use the Transfer register as the first instruction (for example, using a Transfer_In register as a source operand will get the new read data). The same is true when the Event Signal is tested for branches (br_=signal or br_!signal instructions). The ctx_arb instruction, CTX_SIG_EVENTS, and ACTIVE_CTX_WAKEUP_#_EVENTS Local CSR descriptions provide details. Hardware Reference Manual 49 Intel® IXP2800 Network Processor Technical Description 2.4 DRAM The IXP2800 Network Processor has controllers for three Rambus* DRAM (RDRAM) channels. Each of the controllers independently accesses its own RDRAMs, and can operate concurrently with the other controllers (i.e., they are not operating as a single, wider memory). DRAM provides high-density, high-bandwidth storage and is typically used for data buffers. • RDRAM sizes of 64, 128, 256, or 512 Mbytes, and 1 Gbyte are supported; however, each of the channels must have the same number, size, and speed of RDRAMs populated. Refer to Section 5.2 for supported size and loading configurations. • Up to two Gbytes of DRAM is supported. If less than two Gbytes of memory is present, the upper part of the address space is not used. It is also possible, for system cost and area savings, to have Channels 0 and 1 populated with Channel 2 empty, or Channel 0 populated with Channels 1and 2 empty. • Reads and writes to RDRAM are generated by Microengines, The Intel XScale® core, and PCI (external Bus Masters and DMA Channels). The controllers also do refresh and calibration cycles to the RDRAMs, transparently to software. • RDRAM Powerdown and Nap modes are not supported. • Hardware interleaving (also known as striping) of addresses is done to provide balanced access to all populated channels. The interleave size is 128 bytes. Interleaving helps to maintain utilization of available bandwidth by spreading consecutive accesses to multiple channels. The interleaving is done in the hardware in such a way that the three channels appear to software as a single contiguous memory space. • ECC (Error Correcting Code) is supported, but can be disabled. Enabling ECC requires that x18 RDRAMs be used. If ECC is disabled x16 RDRAMs can be used. ECC can detect and correct all single-bit errors, and detect all double-bit errors. When ECC is enabled, partial writes (writes of less than 8 bytes) must be done as read-modify-writes. 2.4.1 Size Configuration Each channel can be populated with anywhere from one-to-four RDRAMs (Short Channel Mode). Refer to Section 5.2 for supported size and loading configurations. The RAM technology used will determine the increment size and maximum memory per channel as shown in Table 9. Table 9. RDRAM Sizes RDRAM Technology1 Increment Size Maximum per Channel 64/72 MB 8 MB 256 MB 128/144 MB 16 MB 512 MB 256/288 MB 32 MB 1 GB2 512/576 MB 64 MB 2 GB2 NOTES: 1. The two numbers shown for each technology indicate x16 parts and x18 parts. 2. The maximum memory that can be addressed across all channels is 2 GB. This limitation is based on the partitioning of the 4-GB address space (32-bit addresses). Therefore, if all three channels are used, each can be populated up to a maximum of 768 MB. Two channels can be populated to a maximum of 1 GB each. A single channel can be populated to a maximum of 2 GB. RDRAMs with 1 x 16 or 2 x 16 dependent banks, and 4 independent banks are supported. 50 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.4.2 Read and Write Access The minimum DRAM physical access length is 16 bytes. Software (and PCI) can read or write as little as a single byte, however the time (and bandwidth) taken at the DRAMs is the same as for an access of 16 bytes. Therefore, the best utilization of DRAM bandwidth will be for accesses that are multiples of 16 bytes. If ECC is enabled, writes of less than 8 bytes must do read-modify-writes, which take two 16-byte time accesses (one for the read and one for the write). 2.5 SRAM The IXP2800 Network Processor has four independent SRAM controllers, which each support pipelined QDR synchronous static RAM (SRAM) and/or a coprocessor that adheres to QDR signaling. Any or all controllers can be left unpopulated if the application does not need to use them. SRAM are accessible by the Microengines, the Intel XScale® core, and the PCI Unit (external bus masters and DMA). The memory is logically four bytes (32-bits) wide; physically the data pins are two bytes wide and are double clocked. Byte parity is supported. Each of the four bytes has a parity bit, which is written when the byte is written and checked when the data is read. There are byte-enables that select which bytes to write for writes of less than 32 bits. Each of the 4 QDR ports are QDR and QDRII compatible. Each port implements the “_K” and “_C” output clocks and “_CQ” as an input and their inversions. (Note: the “_C” and “_CQ” clocks are optional). Extensive work has been performed providing impedance controls within the IXP2800 Network Processor for processor-initiated signals driving to QDR parts. Providing a clean signaling environment is critical to achieving 200 – 250 MHz QDRII data transfers. The configuration assumptions for the IXP2800 Network Processor I/O driver/receiver development includes four QDR loads and the IXP2800 Network Processor. The IXP2800 Network Processor supports bursts of two SRAMs, but does not support bursts of four SRAMs. The SRAM controller can also be configured to interface to an external coprocessor that adheres to the QDR electricals and protocol. Each SRAM controller may also interface to an external coprocessor through its standard QDR interface. This interface enables the cohabitation of both SRAM devices and coprocessors to operate on the same bus. The coprocessor behaves as a memory-mapped device on the SRAM bus. Hardware Reference Manual 51 Intel® IXP2800 Network Processor Technical Description 2.5.1 QDR Clocking Scheme The controller drives out two pairs of K clock (K and K#). It also drives out two pairs of C clock (C and C#). Both C/C# clocks externally return to the controller for reading data. Figure 8 shows the clock diagram if the clocking scheme for QDR interface driving four SRAM chips. Figure 8. Echo Clock Configuration Clam-shelled SRAMS Termination CQ/CQ# Package Balls QDRn_CIN[0] K/K# C/C# Intel® QDRn_K[0] IXP2800 QDRn_C[0] Network Processor QDRn_C[1] QDRn_K[1] C/C# *QDRn_CIN[1] K/K# Package Balls Termination CQ/CQ# *The CIN[1] pin is not used internally to capture the READ data; however, the I/O Pad can be used to terminate the signal. B3664-01 2.5.2 SRAM Controller Configurations Each channel has enough address pins (24) to support up to 64 Mbytes of SRAM. The SRAM controllers can directly generate multiple port enables (up to four pairs) to allow for depth expansion. Two pairs of pins are dedicated for port enables. Smaller RAMs use fewer address signals than the number provided to accommodate the largest RAMs, so some address pins (23:20) are configurable as either address or port enable based on CSR setting as shown in Table 10. Note that all of the SRAMs on a given channel must be the same size. Table 10. SRAM Controller Configurations (Sheet 1 of 2) 52 SRAM Configuration SRAM Size Addresses Needed to Index SRAM Addresses Used as Port Enables Total Number of Port Select Pairs Available 512K x 18 1 MB 17:0 23:22, 21:20 4 1M x 18 2 MB 18:0 23:22, 21:20 4 2M x 18 4 MB 19:0 23:22, 21:20 4 4M x 18 8 MB 20:0 23:22 3 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description Table 10. SRAM Controller Configurations (Sheet 2 of 2) SRAM Configuration SRAM Size Addresses Needed to Index SRAM Addresses Used as Port Enables Total Number of Port Select Pairs Available 8M x 18 16 MB 21:0 23:22 3 16M x 18 32 MB 22:0 None 2 32M x 18 64 MB 23:0 None 2 Each channel can be expanded by depth according to the number of port enables available. If external decoding is used, then the number of SRAMs used is not limited by the number of port enables generated by the SRAM controller. Note: Doing external decoding may require external pipeline registers to account for the decode time, depending on the desired frequency. Maximum SRAM system sizes are shown in Table 11. Shaded entries require external decoding, because they use more port enables than the SRAM controller can supply directly. Table 11. Total Memory per Channel Number of SRAMs on Channel SRAM Size 512K x 18 2.5.3 1 2 3 4 5 6 7 8 1 MB 2 MB 3 MB 4 MB 5 MB 6 MB 7 MB 8 MB 1M x 18 2 MB 4 MB 6 MB 8 MB 10 MB 12 MB 14 MB 16 MB 2M x 18 4 MB 8 MB 12 MB 16 MB 20 MB 24 MB 28 MB 32 MB 4M x 18 8 MB 16 MB 24 MB 32 MB 64 MB NA NA NA 8M x 18 16 MB 32 MB 48 MB 64 MB NA NA NA NA 16M x 18 32 MB 64 MB NA NA NA NA NA NA 32M x 18 64 MB NA NA NA NA NA NA NA SRAM Atomic Operations In addition to normal reads and writes, SRAM supports the following atomic operations. Microengines have specific instructions to do each atomic operation; Intel XScale® microarchitecture uses aliased address regions to do atomic operations. • • • • • • bit set bit clear increment decrement add swap The SRAM does read-modify-writes for the atomic operations, the pre-modified data can also be returned if desired. The atomic operations operate on a single 32-bit word. Hardware Reference Manual 53 Intel® IXP2800 Network Processor Technical Description 2.5.4 Queue Data Structure Commands The ability to enqueue and dequeue data buffers at a fast rate is key to meeting line-rate performance. This is a difficult problem as it involves dependent memory references that must be turned around very quickly. The SRAM controller includes a data structure (called the Q_array) and associated control logic to perform efficient enqueue and dequeue operations. The Q_array has 64 entries, each of which can be used in one of four ways. • • • • Linked-list queue descriptor (resident queues) Cache of recently used linked-list queue descriptors (backing store for the cache is in SRAM) Ring descriptor Journal The commands provided are: For Linked-list queues or Cache of recently used linked-list queue descriptors • • • • • • • • Read_Q_Descriptor_Head(address, length, entry, xfer_addr) Read_Q_Descriptor_Tail(address, length, entry) Read_Q_Descriptor_Other(address, entry) Write_Q_Descriptor(address, entry) Write_Q_Descriptor_Count(address, entry) ENQ(buff_desc_adr, cell_count, EOP, entry) ENQ_tail(buff_desc_adr, entry) DEQ(entry, xfer_addr) For Rings • • Get(entry, length, xfer_addr) Put(entry, length, xfer_addr) For Journals • • Note: 2.5.5 Journal(entry, length, xfer_addr) Fast_journal(entry) The Read_Q_Descriptor_Head, Read_Q_Descriptor_Tail, etc.) are used to initialize the rings and journals but not used to perform the ring and journal function. Reference Ordering This section covers the ordering between accesses to any one SRAM controller. 2.5.5.1 Reference Order Tables Table 12 shows the architectural guarantees of order to access to the SAME SRAM address between a reference of any given type (shown in the column labels) and a subsequent reference of any given type (shown in the row labels). The definition of first and second is defined by the order they are received by the SRAM controller. Note: 54 A given Network Processor version may implement a superset of these order guarantees. However, that superset may not be supported in future implementations. Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description Verification is required to test only the order rules shown in Table 12 and Table 13). Note: A blank entry in Table 12 means that no order is enforced. Table 12. Address Reference Order 1st ref 2nd ref Memory Read CSR Read Memory Read Memory Write CSR Write Memory RMW Queue / Ring / Q_Descr Commands Order CSR Read Order Memory Write Order CSR Write Order Memory RMW Order Queue / Ring / Q_ Descr Commands See Table 13. Table 13 shows the architectural guarantees of order to access to the SAME SRAM Q_array entry between a reference of any given type (shown in the column labels) and a subsequent reference of any given type (shown in the row labels). The definition of first and second is defined by the order they are received by the SRAM controller. The same caveats apply as for Table 12. Table 13. Q_array Entry Reference Order 1st ref 2nd ref Read_Q _Descr head, tail Read_ Q_Des cr other Read_Q_Descr head,tail Read_Q_ Descr other Write_Q _Descr Enqueue Dequeue Put Get Journal Order Order Write_Q_ Descr Enqueue Order Order Dequeue Order Order Put Get Journal Hardware Reference Manual Order Order Order Order Order 55 Intel® IXP2800 Network Processor Technical Description 2.5.5.2 Microengine Software Restrictions to Maintain Ordering It is the Microengine programmer’s job to ensure order where the program flow finds order to be necessary and where the architecture does not guarantee that order. The signaling mechanism can be used to do this. For example, say that microcode needs to update several locations in a table. A location in SRAM is used to “lock” access to the table. Example 13 is the code for the table update. Example 13. Table Update Code IMMED [$xfer0, 1] SRAM [write, $xfer0, ; At this point, the the table updates. SRAM [write, $xfer1, SRAM [write, $xfer3, CTX_ARB [SIG_DONE_3, ; At this point, the flag to allow access IMMED [$xfer0, 0] SRAM [write, $xfer0, flag_address, 0, 1], ctx_swap [SIG_DONE_2] write to flag_address has passed the point of coherency. Do table_base, offset1, 2] , sig_done [SIG_DONE_3] table_base, offset2, 2] , sig_done [SIG_DONE_4] SIG_DONE_4] table writes have passed the point of coherency. Clear the by other threads. flag_address, 0, 1, ctx_swap [SIG_DONE_2] Other rules: • All accesses to atomic variables should be via read-modify-write instructions. • If the flow must know that a write is completed (actually in the SRAM itself), follow the write with a read to the same address. The write is guaranteed to be complete when the read data has been returned to the Microengine. • With the exception of initialization, never do WRITE commands to the first three longwords of a queue_descriptor data structure (these are the longwords that hold head, tail, and count, etc.). All accesses to this data must be via the Q commands. • To initialize the Q_array registers, perform a memory write of at least three longwords, followed by a memory read to the same address (to guarantee that the write completed). Then, for each entry in the Q_array, perform a read_q_descriptor_head followed by a read_q_descriptor_other using the address of the same three longwords. 2.6 Scratchpad Memory The IXP2800 Network Processor contains a 16 Kbytes of Scratchpad Memory, organized as 4K 32-bit words, that is accessible by Microengines and the Intel XScale® core. The Scratchpad Memory provides the following operations: • Normal reads and writes. 1–16 32-bit words can be read/written with a single Microengine instruction. Note that Scratchpad is not byte-writable (each write must write all four bytes). • Atomic read-modify-write operations, bit-set, bit-clear, increment, decrement, add, subtract, and swap. The RMW operations can also optionally return the pre-modified data. • Sixteen Hardware Assisted Rings for interprocess communication. (A ring is a FIFO that uses a head and tail pointer to store/read information in Scratchpad memory.) Scratchpad Memory is provided as a third memory resource (in addition to SRAM and DRAM) that is shared by the Microengines and the Intel XScale® core. The Microengines and the Intel XScale® core can distribute memory accesses between these three types of memory resources to provide a greater number of memory accesses occurring in parallel. 56 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.6.1 Scratchpad Atomic Operations In addition to normal reads and writes, the Scratchpad Memory supports the following atomic operations. Microengines have specific instructions to do each atomic operation; the Intel XScale® microarchitecture uses aliased address regions to do atomic operations. • • • • • • • bit set bit clear increment decrement add subtract swap The Scratchpad Memory does read-modify-writes for the atomic operations, the pre-modified data can also be returned if desired. The atomic operations operate on a single 32-bit word. 2.6.2 Ring Commands The Scratchpad Memory provides sixteen Rings used for interprocess communication. The rings provide two operations. • • Get(ring, length) Put(ring, length) Ring is the number of the ring (0 through 15) to get or put from, and length specifies the number of 32-bit words to transfer. A logical view of one of the rings is shown in Table 9. Figure 9. Logical View of Rings Address Decoder Scratchpad RAM Read / Write / Atomic Addresses 1 of 16 Head Tail Count Size Full A9355-01 Hardware Reference Manual 57 Intel® IXP2800 Network Processor Technical Description Head, Tail, and Size are registers in the Scratchpad Unit. Head and Tail point to the actual ring data, which is stored in the Scratchpad RAM. The count of how many entries are on the Ring is determined by hardware using the Head and Tail. For each Ring in use, a region of Scratchpad RAM must be reserved for the ring data. Note: The reservation is by software convention. The hardware does not prevent other accesses to the region of Scratchpad Memory used by the Ring. Also the regions of Scratchpad Memory allocated to different Rings must not overlap. Head points to the next address to be read on a get, and Tail points to the next address to be written on a put. The size of each Ring is selectable from the following choices: 128, 256, 512, or 1024 32-bit words. Note: The region of Scratchpad used for a Ring is naturally aligned to it size. When the Ring is near full, it asserts an output signal, which is used as a state input to the Microengines. They must use that signal to test (by doing Branch on Input State) for room on the Ring before putting data onto it. There is a lag in time from a put instruction executing to the Full signal being updated to reflect that put. To guarantee that a put will not overfill the ring there is a bound on the number of Contexts and the number of 32-bit words per write based on the size of the ring, as shown in Table 14. Each Context should test the Full signal, then do the put if not Full, and then wait until the Context has been signaled that the data has been pulled before testing the Full signal again. An alternate usage method is to have Contexts allocate and deallocate entries from a shared count variable, using the atomic subtract to allocate and atomic add to deallocate. In this case the Full signal is not used. Table 14. Ring Full Signal Use – Number of Contexts and Length versus Ring Size Number of Contexts Ring Size 128 256 512 1024 1 16 16 16 16 2 16 16 16 16 4 8 16 16 16 8 4 12 16 16 16 2 6 14 16 24 1 4 9 16 32 1 3 7 15 40 Illegal 2 5 12 48 Illegal 2 4 10 64 Illegal 1 3 7 128 Illegal Illegal 1 3 NOTES: 1. Number in each table entry is the largest length that should be put. 16 is the largest length that a single put instruction can generate. 2. Illegal -- With that number of Contexts, even a length of one could cause the Ring to overfill. 58 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.7 Media and Switch Fabric Interface The Media and Switch Fabric (MSF) Interface is used to connect the IXP2800 Network Processor to a physical layer device (PHY) and/or to a Switch Fabric. the MSF consists of separate receive and transmit interfaces. Each of the receive and transmit interfaces can be separately configured for either SPI-4 Phase 2 (System Packet Interface) for PHY devices or CSIX-L1 protocol for Switch Fabric Interfaces. The receive and transmit ports are unidirectional and independent of each other. Each port has 16 data signals, a clock, a control signal, and a parity signal, all of which use LVDS (differential) signaling, and are sampled on both edges of the clock. There is also a flow control port consisting of a clock, data, and ready status bits, and used to communicate between two IXP2800 Network Processors, or the IXP2800 Network Processor chip and a Switch Fabric Interface. These are also LVDS, dual-edge data transfer. All of the high speed LVDS interfaces support dynamic deskew training. The block diagram in Figure 10 shows a typical configuration. Figure 10. Example System Block Diagram Receive protocol is SPI-4 Transmit mode is CSIX Ingress Intel® IXP2800 Network Processor RDAT TDAT Framing/MAC Device (PHY) RSTAT Flow Control SPI-4 Protocol Egress Intel® IXP2800 Network Processor Optional Gasket (Note 1 ) Switch Fabric CSIX Protocol TSTAT RDAT TDAT Receive protocol is CSIX Transmit mode is SPI-4 Notes: 1. Gasket is used to convert 16-bit, dual-data IXP2800 signals to wider single edge CWord signals used by Switch Fabric, if required. 2. Per the CSIX specification, the terms "egress" and ingress" are with respect to the Switch Fabric. So the egress processor handles traffic received from the Switch Fabric and the ingress processor handles traffic sent to the Switch Fabric. A9356-03 Hardware Reference Manual 59 Intel® IXP2800 Network Processor Technical Description An alternate system configuration is shown in the block diagram in Figure 11. In this case, a single IXP2800 Network Processor is used for both Ingress and Egress. The bit rate supported would be less than in Figure 10. A hypothetical Bus Converter chip, external to the IXP2800 Network Processor is used. The block diagram in Figure 11 is only an illustrative example. Figure 11. Full-Duplex Block Diagram Receive and transmit protocol is SPI-4 and CSIX on transferby-transfer basis. Intel® IXP2800 Network Processor RDAT Framing/MAC Device (PHY) TDAT Tx Rx Switch Fabric Bus Converter UTOPIA-3 or IXBUS Protocol Tx Rx CSIX Protocol Notes: The Bus Converter chip receives and transmits both SPI-4 and CSIX protocols from/to Intel IXP2800 Network Processor. It steers the data, based on protocol, to either PHY device or Switch Fabric. PHY interface can be UTOPIA-3, IXBUS, or any other required protocol. A9357-02 2.7.1 SPI-4 SPI-4 is an interface for packet and cell transfer between a physical layer (PHY) device and a link layer device (the IXP2800 Network Processor), for aggregate bandwidths of OC-192 ATM and Packet over SONET/SDH (POS), as well as 10 Gb/s Ethernet applications. The Optical Internetworking Forum (OIF), www.oiforum.com, controls the SPI-4 Implementation Agreement document. SPI-4 protocol transfers data in variable length bursts. Associated with each burst is information such as Port number (for a multi-port device such as a 10 x 1 GbE), SOP, and EOP. This information is collected by the MSF and passed to the Microengines. 60 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.7.2 CSIX CSIX-L1 (Common Switch Interface) defines an interface between a Traffic Manager (TM) and a Switch Fabric (SF) for ATM, IP, MPLS, Ethernet, and similar data communications applications. The Network Processor Forum (NPF) www.npforum.org, controls the CSIX-L1 specification. The basic unit of information transferred between Traffic Managers and Switch Fabrics is called a CFrame. There are three categories of CFrames: • Data • Control • Flow Control Associated with each CFrame is information such as length, type, address. This information is collected by MSF and passed to Microengines. MSF also contains a number of hardware features related to flow control. 2.7.3 Receive Figure 12 is a simplified block diagram of the MSF receive section. Figure 12. Simplified MSF Receive Section Block Diagram Checksum RDAT RCTL RPAR CSIX Protocol Logic - SPI-4 Protocol Logic RCLK RCLK REF Full Element List SPI-4 Flow Control Clock for Receive Functions - 128 - Buffers 32 (to MEs) 64 (to DRAM) Full Indication to Flow Control RPROT RSTAT RBUF - - - - - - - - - - - - - Control Receive Thread Freelists CSR Write CSIX CFrames mapped by RX_Port_Map CSR (normally Flow Control CFrames are mapped here) FCEFIFO - - - - - - - - - - - - - - - - - - - - TXCFC (FCIFIFO full) TXCDAT A9365-01 Hardware Reference Manual 61 Intel® IXP2800 Network Processor Technical Description 2.7.3.1 RBUF RBUF is a RAM that holds received data. It stores received data in sub-blocks (referred to as elements), and is accessed by Microengines or the Intel XScale® core reading the received information. Details of how RBUF elements are allocated and filled is based on the receive data protocol. When data is received, the associated status is put into the FULL_ELEMENT_LIST FIFO and subsequently sent to Microengines to process. FULL_ELEMENT_LIST insures that received elements are sent to Microengines in the order that the data was received. RBUF contains a total of 8 KB of data. The element size is programmable as either 64 bytes, 128 bytes, or 256 bytes per element. In addition, RBUF can be programmed to be split into one, two, or three partitions depending on application. For receiving SPI-4, one partition would be used. For receiving CSIX, two partitions are used (Control CFrames and Data CFrames). When both protocols are being used, the RBUF can be split into three partitions. For both SPI-4 and CSIX, three partitions are used. Microengines can read data from the RBUF to Microengine S_TRANSFER_IN registers using the instruction where they specify the starting byte number (which must be aligned to 4 bytes), and number of 32-bit words to read. The number in the instruction can be either the number of 32-bit words, or number of 32-bit word pairs, using the single and double instruction modifiers, respectively. msf[read] Microengines can move data from RBUF to DRAM using the dram instruction where they specify the starting byte number (which must be aligned to 4 bytes), the number of 32-bit words to read, and the address in DRAM to write the data. For both types of RBUF read, reading an element does not modify any RBUF data, and does not free the element, so buffered data can be read as many times as desired. This allows, for example, a processing pipeline to have different Microengines handle different protocol layers, with each Microengine reading only the specific header information it requires. 2.7.3.1.1 SPI-4 and the RBUF SPI-4 data is placed into RBUF with each SPI-4 burst allocating an element. If a SPI-4 burst is larger than the element size, another element is allocated. The status information for the element contains the following information: 2 3 2 2 Element 6 2 6 1 6 0 5 9 5 8 2 1 2 0 1 9 1 8 1 7 1 6 Byte Count 5 7 5 6 5 5 Reserved 5 4 5 3 5 2 5 1 5 0 4 9 4 8 1 5 1 4 1 3 1 2 4 7 1 1 1 0 4 6 4 5 4 4 9 8 Null 2 4 Type 2 5 Par Err 2 6 Abort Err 2 7 Len Err RPROT 6 3 2 8 Err 2 9 EOP 3 0 SOP 3 1 4 3 4 2 4 1 4 0 7 6 5 4 3 2 1 0 3 4 3 3 3 2 ADR 3 9 3 8 3 7 3 6 3 5 Checksum The definitions of the fields are shown in Table 90, “RBUF SPIF-4 Status Definition” on page 252. 62 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.7.3.1.2 CSIX and RBUF CSIX CFrames are placed into either RBUF with each CFrame allocating an element. Unlike SPI-4, a single CFrame must not spill over into another element. Since CSIX spec specifies a maximum CFrame size of 256 bytes, this can be done by programming the element size to 256 bytes. However, if the Switch Fabric uses a smaller CFrame size, then a smaller RBUF element size can be used. Flow Control CFrames are put into the FCEFIFO, to be sent to the Ingress IXP2800 Network Processor where a Microengine will read them to manage flow control information to the Switch Fabric. The status information for the element contains the following information: 2 6 2 5 2 4 2 3 2 2 6 1 6 0 5 9 5 8 1 9 1 8 1 7 1 6 Payload Length 5 7 5 6 5 5 5 4 5 3 5 2 5 1 5 0 4 9 4 8 1 5 1 4 1 3 1 2 1 1 1 0 9 4 4 4 3 4 2 4 1 P 6 2 2 0 Err Element 2 1 Null 2 7 CR RPROT 6 3 2 8 VP Err 2 9 HP Err 3 0 Len Err 3 1 4 7 4 6 4 5 8 7 6 5 4 3 Reserved 4 0 3 9 3 8 3 7 2 1 0 Type 3 6 3 5 3 4 3 3 3 2 Extension Header The definitions of the fields are shown in Table 91, “RBUF CSIX Status Definition” on page 254. 2.7.3.2 Full Element List Receive control hardware maintains the FULL_ELEMENT_LIST to hold the status of valid RBUF elements, in the order in which they were received. When an RBUF element is filled, its status is added to the tail of the FULL_ELEMENT_LIST. When a Microengine is notified of element arrival (by having the status written to its S_Transfer register), it is removed from the head of the FULL_ELEMENT_LIST. 2.7.3.3 RX_THREAD_FREELIST RX_THREAD_FREELIST is a FIFO that indicates Microengine Contexts that are awaiting an RBUF element to process. This allows the Contexts to indicate their ready status prior to the reception of the data, as a way to eliminate latency. Each entry added to a Freelist also has an associated S_TRANSFER register and signal number. There are three RX_THREAD_FREELISTS that correspond to the RBUF partitions. To be added as ready to receive an element, a Microengine does an msf[write] or an msf[fast_write] to the RX_THREAD_FREELIST address; the write data is the Microengine/ CONTEXT/S_TRANSFER register number to add to the Freelist. When there is valid status at the head of the Full Element List, it will be pushed to a Microengine. The receive control logic pushes the status information (which includes the element number) to the Microengine in the head entry of RX_THREAD_FREELIST, and sends an Event Signal to the Microengine. It then removes that entry from the RX_THREAD_FREELIST, and removes the status from Full Element List. Hardware Reference Manual 63 Intel® IXP2800 Network Processor Technical Description Each RX_THREAD_FREELIST has an associated countdown timer. If the timer expires and no new receive data is available yet, the receive logic will autopush a Null Receive Status Word to the next thread on the RX_THREAD_FREELIST. A Null Receive Status Word has the “Null” bit set, and does not have any data or RBUF entry associated with it. The RX_THREAD_FREELIST timer is useful for certain applications. Its primary purpose is to keep the receive processing pipeline (implemented as code running on the Microengines) moving even when the line has gone idle. It is especially useful if the pipeline is structured to handle mpackets in groups, i.e., eight mpackets at a time. If seven mpackets are received, then the line goes idle, then the timeout will trigger the autopush of a null Receive Status Word, filling the eighth slot and allowing the pipeline to advance. Another example is if one valid mpacket is received before the line goes idle for a long period; seven null Receive Status Words will be autopushed, allowing the pipeline to proceed. Typically the timeout interval is programmed to be slightly larger than the minimum arrival time of the incoming cells or packets. The timer is controlled using the RX_THREAD_FREELIST_TIMEOUT_# CSR. The timer may be enabled or disabled, and the timeout value specified using this CSR. 2.7.3.4 Receive Operation Summary During receive processing, received CFrames, and SPI-4 cells and packets (which in this context are all called mpackets) are placed into the RBUF, and then handed off to a Microengine to process. Normally, by application design, some number of Microengine Contexts will be assigned to receive processing. Those Contexts will have their number added to the proper RX_THREAD_FREELIST (via msf[write]or msf[fast_write]), and then will go to sleep to wait for arrival of an mpacket (or alternatively poll waiting for arrival of an mpacket). When an mpacket arrives, MSF receive control logic will autopush eight bytes of information for the element to the Microengine/CONTEXT/S_TRANSFER registers at the head of RX_THREAD_FREELIST. The information pushed is: • Status Word (SPI-4) or Header Status (CSIX) — see Table 90, “RBUF SPIF-4 Status Definition” on page 252 for more information. • Checksum (SPI-4) or Extension Header (CSIX) — see Table 91, “RBUF CSIX Status Definition” on page 254 for more information. To handle the case where the receive Contexts temporarily fall behind and RX_THREAD_FREELIST is empty, all received element numbers are held in the FULL_ELEMENT_LIST. In that case, as soon as an RX_THREAD_FREELIST entry is entered, the status of the head element of FULL_ELEMENT_LIST will be pushed to it. The Microengines may read part of (or the entire) RBUF element to their S_TRANSFER registers (via an msf[read] instruction) for header processing, etc., and may also move the element data to DRAM (via a dram[rbuf_rd] instruction). When a Context is done with an element, it does an msf[write]or msf[fast_write] to RBUF_ELEMENT_DONE address; the write data is the element number. This marks the element as free and available to be re-used. There is no restriction on the order in which elements are freed; Contexts can do different amounts of processing per element based on the contents of the element — therefore elements can be returned in a different order than they were handed to Contexts. 64 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.7.4 Transmit Figure 13 is a simplified Block Diagram of the MSF transmit section. From ME From DRAM - TBUF - - - - - - - - - - - - - SPI-4 Protocol Logic - CSIX Protocol Logic Byte Align Figure 13. Simplified Transmit Section Block Diagram TDAT TCTL TPAR Control Valid Element Logic ME Reads (S_Push_Bus) From Other CSRs TCLK TCLK REF - RXCFC (FCIFIFO full) 2.7.4.1 FCIFIFO - - - - - - - - - - - - - - - - - Internal Clock for Transmit Logic RXCSRB (Ready Bits) Internal Clock RXCDAT A9366-01 TBUF TBUF is a RAM that holds data and status to be transmitted. The data is written into sub-blocks referred to as elements, by Microengines or the Intel XScale® core. TBUF contains a total of 8 Kbytes of data. The element size is programmable as either 64 bytes, 128 bytes, or 256 bytes per element. In addition, TBUF can be programmed to be split into one, two, or three partitions depending on application. For transmitting SPI-4, one partition would be used. For transmitting CSIX, two partitions are used (Control CFrames and Data CFrames). For both SPI-4 and CSIX, three partitions are used. Microengines can write data from Microengine S_TRANSFER_OUT registers to the TBUF using the msf[write] instruction where they specify the starting byte number (which must be aligned to 4 bytes), and number of 32-bit words to write. The number in the instruction can be either the number of 32-bit words, or number of 32-bit word pairs, using the single and double instruction modifiers, respectively. Microengines can move data from DRAM to TBUF using the dram instruction where they specify the starting byte number (which must be aligned to 4 bytes), the number of 32-bit words to write, and the address in DRAM of the data. Hardware Reference Manual 65 Intel® IXP2800 Network Processor Technical Description All elements within a TBUF partition are transmitted in the order. Control information associated with the element defines which bytes are valid. The data from the TBUF will be shifted and byte aligned as required to be transmitted. 2.7.4.1.1 SPI-4 and TBUF For SPI-4, data is put into the data portion of the element, and information for the SPI-4 Control Word that will precede the data is put into the Element Control Word. When the Element Control Word is written, the information is: 2 6 2 5 2 4 2 3 6 2 6 1 6 0 5 9 5 8 2 1 Prepend Offset Payload Length 6 3 2 2 5 7 5 6 5 5 5 4 5 3 2 0 1 9 1 8 1 7 1 6 1 2 1 1 1 0 9 8 Payload Offset EOP 2 7 SOP 2 8 Res 2 9 Skip 3 0 Res 3 1 1 5 4 7 4 4 4 3 4 2 4 1 4 0 Prepend Length 5 2 5 1 5 0 4 9 4 8 1 4 4 6 1 3 4 5 7 6 5 4 3 2 1 0 3 4 3 3 3 2 ADR 3 9 3 8 3 7 3 6 3 5 Res The definitions of the fields are shown in Table 15. Table 15. TBUF SPI-4 Control Definition Field Payload Length Definition Indicates the number of Payload bytes, from 1 to 256, in the element. The value of 0x00 means 256 bytes. The sum of Prepend Length and Payload Length will be sent. That value will also control the EOPS field (1 or 2 bytes valid indicated) of the Control Word that will succeed the data transfer. Note 1. Prepend Offset Indicates the first valid byte of Prepend, from 0 to 7 Prepend Length Indicates the number of bytes in Prepend, from 0 to 31. Payload Offset Indicates the first valid byte of Payload, from 0 to 7. Skip Allows software to allocate a TBUF element and then not transmit any data from it. 0—transmit data according to other fields of Control Word. 1—free the element without transmitting any data. SOP Indicates if the element is the start of a packet. This field will be sent in the SOPC field of the Control Word that will precede the data transfer. EOP Indicates if the element is the end of a packet. This field will be sent in the EOPS field of the Control Word that will succeed the data transfer. Note 1. ADR The port number to which the data is directed. This field will be sent in the ADR field of the Control Word that will precede the data transfer. NOTE: 1. Normally EOPS is sent on the next Control Word (along with ADR and SOP) to start the next element. If there is no valid element pending at the end of sending the data, the transmit logic will insert an Idle Control Word with the EOPS information. 66 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.7.4.1.2 CSIX and TBUF For CSIX, payload information is put into the data area of the element, and Base and Extension Header information is put into the Element Control Word. When the Element Control Word is written, the information is: 2 6 2 5 2 4 2 3 6 2 6 1 6 0 5 9 5 8 2 1 Prepend Offset Payload Length 6 3 2 2 5 7 5 6 5 5 5 4 5 3 2 0 1 9 1 8 1 7 1 6 Prepend Length 5 2 5 1 5 0 4 9 4 8 1 2 1 1 1 0 9 Payload Offset P 2 7 CR 2 8 Res 2 9 Skip 3 0 Res 3 1 1 5 1 4 4 7 4 4 4 3 4 2 4 1 4 0 4 6 1 3 4 5 8 7 6 5 4 3 Res 3 9 3 8 3 7 2 1 0 Type 3 6 3 5 3 4 3 3 3 2 Extension Header The definitions of the fields are shown in Table 16. Table 16. TBUF CSIX Control Definition Field 2.7.4.2 Definition Payload Length Indicates the number of Payload bytes, from 1 to 256, in the element. The value of 0x00 means 256 bytes. The sum of Prepend Length and Payload Length will be sent, and also put into the CSIX Base Header Payload Length field. Note that this length does not include any padding that may be required. Padding is inserted by transmit hardware as needed. Prepend Offset Indicates the first valid byte of Prepend, from 0 to 7. Prepend Length Indicates the number of bytes in Prepend, from 0 to 31. Payload Offset Indicates the first valid byte of Payload, from 0 to 7. Skip Allows software to allocate a TBUF element and then not transmit any data from it. 0—transmit data according to other fields of Control Word. 1—free the element without transmitting any data. CR CR (CSIX Reserved) bit to put into the CSIX Base Header. P P (Private) bit to put into the CSIX Base Header. Type Type Field to put into the CSIX Base Header. Idle type is not legal here. Extension Header The Extension Header to be sent with the CFrame. The bytes are sent in big-endian order; byte 0 is in bits 63:56, byte 1 is in bits 55:48, byte 2 is in bits 47:40, and byte 3 is in bits 39:32. Transmit Operation Summary During transmit processing data to be transmitted is placed into the TBUF under Microengine control. The Microengine allocates an element in software; the transmit hardware processes TBUF elements within a partition in strict sequential order so the software can track which element to allocate next. Microengines may write directly into an element by an msf[write] instruction, or have data from DRAM written into the element by a dram[tbuf_wr] instruction. Data can be merged into the element by doing both. Hardware Reference Manual 67 Intel® IXP2800 Network Processor Technical Description There is a Transmit Valid bit per element, that marks the element as ready to be transmitted. Microengines move all data into the element, by either or both of msf[write] and dram[tbuf_wr] instructions to the TBUF. Microengines also write the element Transmit Control Word with information about the element. When all of the data movement is complete, the Microengine sets the element valid bit. 1. Move data into TBUF by either or both of msf[write] and dram[tbuf_wr] instructions to the TBUF. 2. Wait for 1 to complete. 3. Write Transmit Control Word at TBUF_ELEMENT_CONTROL_# address. Using this address sets the Transmit Valid bit. 2.7.5 The Flow Control Interface The MSF provides flow control support for SPI-4 and CSIX. 2.7.5.1 SPI-4 SPI-4 uses a FIFO Status Channel to provide flow control information. MSF receives the information from the PHY device and stores it so that Microengines can read the information on a per-port basis. It can then use that information to determine when to transmit data to a given port. The MSF also sends status to the PHY based on the amount of available space in the RBUF — i.e., done by hardware without Microengines. 2.7.5.2 CSIX CSIX provides two types of flow control — link level and per queue. • The link level control is handled by hardware. MSF will stop transmission is response to link level flow control received from the Switch Fabric. MSF will assert link level flow control based on the amount of available space in the RBUF. • Per queue flow control information is put into the FCIFIFO and handled by Microengine software. Also, if required, Microengines can send Flow Control CFrames to the Switch Fabric under software control. In both cases, for a full-duplex configuration, information is passed from the Switch Fabric to the Egress IXP2800 Network Processor, which then passes it to the Ingress IXP2800 Network Processor over a proprietary flow control interface. 68 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.8 Hash Unit The IXP2800 Network Processor contains a Hash Unit that can take 48-, 64-, or 128-bit data and produce a 48-, 64-, or a 128-bit hash index, respectively. The Hash Unit is accessible by the Microengines and the Intel XScale® core, and is useful in doing table searches with large keys, for example L2 addresses. Figure 14 is a block diagram of the Hash Unit. Up to three hash indexes can be created using a single Microengine instruction. This helps to minimize command overhead. The Intel XScale® core can only do a single hash at a time. A Microengine initiates a hash operation by writing the hash operands into a contiguous set of S_TRANSFER_OUT registers and then executing the hash instruction. The Intel XScale® core initiates a hash operation by writing a set of memory-mapped HASH_OP registers, which are built in the Intel XScale® core gasket, with the data to be used to generate the hash index. There are separate registers for 48-, 64-, and 128-bit hashes. The data is written from MSB to LSB, with the write to LSB triggering the Hash Operation. In both cases, the Hash Unit reads the operand into an input buffer, performs the hash operation, and returns the result. The Hash Unit uses a hard-wired polynomial algorithm and a programmable hash multiplier to create hash indexes. Three separate multipliers are supported, one for 48-bit hash operations, one for 64-bit hash operations and one for 128-bit hash operations. The multiplier is programmed through Control registers in the Hash Unit. The multiplicand is shifted into the hash array, 16 bits at a time. The hash array performs a 1’s-complement multiply and polynomial divide, using the multiplier and 16 bits of the multiplicand. The result is placed into an output buffer register and also feeds back into the array. This process is repeated three times for a 48-bit hash (16 bits x 3 = 48), four times for a 64-bit hash (16 bits x 4 = 64), and eight times for a 128-bit hash (16 x 8 = 128). After the multiplicand has been passed through the hash array, the resulting hash index is placed into a two-stage output buffer. After each hash index is completed, the Hash Unit returns the hash index to the Microengines’ S_TRANSFER_IN registers, or the Intel XScale® core HASH_OP registers. For Microengine initiated hash operations, the Microengine is signaled after all the hashes specified in the instruction have been completed. For the Intel XScale® core initiated hash operations, the Intel XScale® core reads the results from the memory-mapped HASH_OP registers. The addresses of Hash Results are the same as the HASH_OP registers. Because of queuing delays at the Hash Unit, the time to complete an operation is not fixed. The Intel XScale® core can do one of two operations to get the hash results. • Poll the HASH_DONE register. This register is cleared when the HASH_OP registers are written. Bit [0] of HASH_DONE register is set when the HASH_OP registers get the return result from the Hash Unit (when the last word of the result is returned). The Intel XScale® core software can poll on HASH_DONE, and read HASH_OP when HASH_DONE is equal to 0x00000001. • Read HASH_OP directly. The interface hardware will acknowledge the read only when the result is valid. This method will result in the Intel XScale® core stalling if the result is not valid when the read happens. The number of clock cycles required to perform a single hash operation equals: two or four cycles through the input buffers, three, four or eight cycles through the hash array, and two or four cycles through the output buffers. Because of the pipeline characteristics of the Hash Unit, performance is improved if multiple hash operations are initiated with a single instruction rather than separate hash instructions for each hash operation. Hardware Reference Manual 69 Intel® IXP2800 Network Processor Technical Description Figure 14. Hash Unit Block Diagram Data Used to Create Hash Index from S_Transfer_Out Multiplicand 3 2-Stage Input Buffer Multiplicand 2 128 Multiplicand 1 16 shift Hash_Multiplier_48 Hash Array Hash_Multiplier_64 128 Hashed Multiplicand 3 Hash_Multiplier_128 48-bit, 64-bit or 128-bit Hash Select 128 Hashed Multiplicand 2 2-Stage Output Buffer Hashed Multiplicand 1 Hash Indexes to S_Transfer_In Registers A9367-02 70 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.9 PCI Controller The PCI Controller provides a 64-bit, 66 MHz capable PCI Local Bus Revision 2.2 interface, and is compatible to 32-bit or 33 MHz PCI devices. The PCI controller provides the following functions: • • • • • Target Access (external Bus Master access to SRAM, DRAM, and CSRs) Master Access (the Intel XScale® core access to PCI Target devices) Two DMA Channels Mailbox and Doorbell registers for the Intel XScale® core to Host communication PCI arbiter The IXP2800 Network Processor can be configured to act as PCI central function (for use in a stand-alone system), where it provides the PCI reset signal, or as an add-in device, where it uses the PCI reset signal as the chip reset input. The choice is made by connecting the cfg_rst_dir input pin low or high. 2.9.1 Target Access There are three Base Address Registers (BARs) to allow PCI Bus Masters to access SRAM, DRAM, and CSRs, respectively. Examples of PCI Bus Masters include a Host Processor (for example a Pentium® processor), or an I/O device such as an Ethernet controller, SCSI controller, or encryption coprocessor. The SRAM BAR can be programmed to sizes of 16, 32, 64, 128, or 256 Mbytes, or no access. The DRAM BAR can be programmed to sizes of 128, 256, or 512 Mbytes or 1 Gbyte, or no access. The CSR BAR is 8 KB. PCI Boot Mode is supported, in which the Host downloads the Intel XScale® core boot image into DRAM, while holding the Intel XScale® core in reset. Once the boot image has been loaded, the Intel XScale® core reset is deasserted. The alternative is to provide the boot image in a Flash ROM attached to the Slowport. 2.9.2 Master Access The Intel XScale® core and Microengines can directly access the PCI bus. The Intel XScale® core can do loads and stores to specific address regions to generate all PCI command types. Microengines use PCI instruction, and also use address regions to generate different PCI commands. 2.9.3 DMA Channels There are two DMA Channels, each of which can move blocks of data from DRAM to the PCI or from the PCI to DRAM. The DMA channels read parameters from a list of descriptors in SRAM, perform the data movement to or from DRAM, and stop when the list is exhausted. The descriptors are loaded from predefined SRAM entries or may be set directly by CSR writes to DMA Channel registers. There is no restriction on byte alignment of the source address or the destination address. Hardware Reference Manual 71 Intel® IXP2800 Network Processor Technical Description For PCI to DRAM transfers, the PCI command is Memory Read, Memory Read line, or Memory Read Multiple. For DRAM to PCI transfers, the PCI command is Memory Write. Memory Write Invalidate is not supported. Up to two DMA channels are running at a time with three descriptors outstanding. Effectively, the active channels interleave bursts to or from the PCI Bus. Interrupts are generated at the end of DMA operation for the Intel XScale® core. However, Microengines do not provide an interrupt mechanism. The DMA Channel will instead use an Event Signal to notify the particular Microengine on completion of DMA. 2.9.3.1 DMA Descriptor Each descriptor uses four 32-bit words in SRAM, aligned on a 16-byte boundary. The DMA channels read the descriptors from SRAM into working registers once the control register has been set to initiate the transaction. This control must be set explicitly; this starts the DMA transfer. Register names for DMA channels are listed in Figure 15 and Table 17 lists the descriptor contents. Figure 15. DMA Descriptor Reads Working Register Local SRAM Last Descriptor 4 Next Descriptor 3 DMA Channel Register Channel Register Name Byte Count Register CHAN_X_BYTE_COUNT PCI Address Register CHAN_X_PCI_ADDR DRAM Address REgister CHAN_X_DRAM_ADDR Descriptor Pointer Register CHAN_X_DESC_PTR (X can be 1, 2, or 3) Control Register 1 2 Prior Descriptor DMA Channel Register Channel Register Name Control Register CHAN_X_CONTROL (X can be 1, 2, or 3) Current Descriptor A9368-01 After a descriptor is processed, the next descriptor is loaded in the working registers. This process repeats until the chain of descriptors is terminated (i.e., the End of Chain bit is set). Table 17. DMA Descriptor Format Offset from Descriptor Pointer 72 Description 0x0 Byte Count 0x4 PCI Address 0x8 DRAM Address 0xC Next Descriptor Address Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.9.3.2 DMA Channel Operation The DMA channel can be set up to read the first descriptor in SRAM, or with the first descriptor written directly to the DMA channel registers. When descriptors and the descriptor list are in SRAM, the procedure is as follows: 1. The DMA channel owner writes the address of the first descriptor into the DMA Channel Descriptor Pointer register (DESC_PTR). 2. The DMA channel owner writes the DMA Channel Control register (CONTROL) with miscellaneous control information and also sets the channel enable bit (bit 0). The channel initial descriptor bit (bit 4) in the CONTROL register must also be cleared to indicate that the first descriptor is in SRAM. 3. Depending on the DMA channel number, the DMA channel reads the descriptor block into the corresponding DMA registers, BYTE_COUNT, PCI_ADDR, DRAM_ADDR, and DESC_PTR. 4. The DMA channel transfers the data until the byte count is exhausted, and then sets the channel transfer done bit in the CONTROL register. 5. If the end of chain bit (bit 31) in the BYTE_COUNT register is clear, the channel checks the Chain Pointer value. If the Chain Pointer value is not equal to 0. it reads the next descriptor and transfers the data (step 3 and 4 above). If the Chain Pointer value is equal to 0, it waits for the Descriptor Added bit of the Channel Control register to be set before reading the next descriptor and transfers the data (step 3 and 4 above). If bit 31 is set, the channel sets the channel chain done bit in the CONTROL register and then stops. 6. Proceed to the Channel End Operation. When single descriptors are written into the DMA channel registers, the procedure is as follows: 1. The DMA channel owner writes the descriptor values directly into the DMA channel registers. The end of chain bit (bit 31) in the BYTE_COUNT register must be set, and the value in the DESC_PTR register is not used. 2. The DMA channel owner writes the base address of the DMA transfer into the PCI_ADDR to specify the PCI starting address. 3. When the first descriptor is in the BYTE_COUNT register, the DRAM_ADDR register must be written with the address of the data to be moved. 4. The DMA channel owner writes the CONTROL register with miscellaneous control information, along with setting the channel enable bit (bit 0). The channel initial descriptor in register bit (bit 4) in the CONTROL register must also be set to indicate that the first descriptor is already in the channel descriptor registers. 5. The DMA channel transfers the data until the byte count is exhausted, and then sets the channel transfer done bit (bit 2) in the CONTROL register. 6. Since the end of the chain bit (bit 31) in the BYTE_CONT register is set, the channel sets the channel chain done bit (bit 7) in the CONTROL register and then stops. 7. Proceed to the Channel End Operation. Hardware Reference Manual 73 Intel® IXP2800 Network Processor Technical Description 2.9.3.3 DMA Channel End Operation 1. Channel owned by PCI: If not masked via the PCI Outbound Interrupt Mask register, the DMA channel interrupts the PCI host after the setting of the DMA done bit in the CHAN_X_CONTROL register, which is readable in the PCI Outbound Interrupt Status register. 2. Channel owned by the Intel XScale® core: If enabled via the Intel XScale® core Interrupt Enable registers, the DMA channel interrupts the Intel XScale® core by setting the DMA channel done bit in the CHAN_X_CONTROL register, which is readable in the Intel XScale® core Interrupt Status register. 3. Channel owned by Microengine: If enabled via the Microengine Auto-Push Enable registers, the DMA channel signals the Microengine after setting the DMA channel done bit in the CHAN_X_CONTROL register, which is readable in the Microengine Auto-Push Status register. 2.9.3.4 Adding Descriptors to an Unterminated Chain It is possible to add a descriptor to a chain while a channel is running. To do so, the chain should be left unterminated, i.e., the last descriptor should have End of Chain clear, and the Chain Pointer value equal to 0. A new descriptor (or linked list of descriptors) can be added to the chain by overwriting the Chain Pointer value of the unterminated descriptor (in SRAM) with the Local Memory address of the (first) added descriptor (the added descriptor must actually be valid in Local Memory prior to that). After updating the Chain Pointer field, the software must write a 1 to the Descriptor Added bit of the Channel Control register. This is necessary for the case where the channel was paused to reactivate the channel. However, software need not check the state of the channel before writing that bit; there is no side-effect of writing that bit in the case where the channel had not yet read the unlinked descriptor. If the channel was paused or had read an unlinked Pointer, it will re-read the last descriptor processed (i.e., the one that originally had the 0 value for Chain Pointer) to get the address of the newly added descriptor. A descriptor cannot be added to a descriptor that has End of Chain set. 2.9.4 Mailbox and Message Registers Mailbox and Doorbell registers provide hardware support for communication between the Intel XScale® core and a device on the PCI Bus. Four 32-bit mailbox registers are provided so that messages can be passed between the Intel XScale® core and a PCI device. All four registers can be read and written with byte resolution from both the Intel XScale® core and PCI. How the registers are used is application dependent and the messages are not used internally by the PCI Unit in any way. The mailbox registers are often used with the Doorbell interrupts. Doorbell interrupts provide an efficient method of generating an interrupt as well as encoding the purpose of the interrupt. The PCI Unit supports a 32-bit the Intel XScale® core DOORBELL register that is used by a PCI device to generate an the Intel XScale® core interrupt, and a separate 32-bit PCI DOORBELL register that is used by the Intel XScale® core to generate a PCI interrupt. A source generating the Doorbell interrupt can write a software defined bitmap to the register to indicate a specific purpose. This bitmap is translated into a single interrupt signal to the destination 74 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description (either a PCI interrupt or an Intel XScale® core interrupt). When an interrupt is received, the DOORBELL registers can be read and the bit mask can be interpreted. If a larger bit mask is required than that is provided by the DOORBELL register, the MAILBOX registers can be used to pass up to 16 bytes of data. The doorbell interrupts are controlled through the registers shown in Table 18. Table 18. Doorbell Interrupt Registers Register Name 2.9.5 Description XScale® XSCALE DOORBELL Used to generate the Intel XSCALE DOORBELL SETUP Used to initialize the Intel XScale® core Doorbell register and for diagnostics. PCI DOORBELL Used to generate the PCI Doorbell interrupts. PCI DOORBELL SETUP Used to initialize the PCI Doorbell register and for diagnostics. core Doorbell interrupts. PCI Arbiter The PCI unit contains a PCI bus arbiter that supports two external masters in addition to the PCI Unit’s initiator interface. If more than two external masters are used in the system, the aribter can be disabled and an external (to the IXP2800 Network Processor used. In that case, the IXP2800 Network Processor will provide its PCI request signal to the external aribter, and use that arbiters grant signal. The arbiter uses a simple round-robin priority algorithm; it asserts the grant signal corresponding to the next request in the round-robin during the current executing transaction on the PCI bus (this is also called hidden arbitration). If the arbiter detects that an initiator has failed to assert frame_l after 16 cycles of both grant assertion and PCI bus idle condition, the arbiter deasserts the grant. That master does not receive any more grants until it deasserts its request for at least one PCI clock cycle. Bus parking is implemented in that the last bus grant will stay asserted if no request is pending. To prevent bus contention, if the PCI bus is idle, the arbiter never asserts one grant signal in the same PCI cycle in which it deasserts another, It deasserts one grant, and then asserts the next grant after one full PCI clock cycle has elapsed to provide for bus driver turnaround. Hardware Reference Manual 75 Intel® IXP2800 Network Processor Technical Description 2.10 Control and Status Register Access Proxy The Control and Status Register Access Proxy (CAP) contains a number of chip-wide control and status registers. Some provide miscellaneous control and status, while others are used for interMicroengine or Microengine to the Intel XScale® core communication (note that rings in Scratchpad Memory and SRAM can also be used for inter-process communication). These include: • INTERTHREAD SIGNAL — Each thread (or context) on a Microengine can send a signal to any other thread by writing to InterThread_Signal register. This allows a thread to go to sleep waiting completion of a task by a different thread. • THREAD MESSAGE — Each thread has a message register where it can post a software- specific message. Other Microengine threads, or the Intel XScale® core, can poll for availability of messages by reading theTHREAD_MESSAGE_SUMMARY register. Both the THREAD_MESSAGE and corresponding THREAD_MESSAGE_SUMMARY clear upon a read of the message; this eliminates a race condition when there are multiple message readers. Only one reader will get the message. • SELF DESTRUCT — This register provides another type of communication. Microengine software can atomically set individual bits in the SELF_DESTRUCT registers; the registers clear upon read. The meaning of each bit is software-specific. Clearing the register upon read eliminates a race condition when there are multiple readers. • THREAD INTERRUPT — Each thread can interrupt the Intel XScale® core on two different interrupts; the usage is software-specific. Having two interrupts allows for flexibility, for example, one can be assigned to normal service requests and one can be assigned to error conditions. If more information needs to be associated with the interrupt, mailboxes or Rings in Scratchpad Memory or SRAM could be used. • REFLECTOR — CAP provides a function (called “reflector”) where any Microengine thread can move data between its registers and those of any other thread. In response to a single write or read instruction (with the address in the specific reflector range) CAP will get data from the source Microengine and put it into the destination Microengine. Both the sending and receiving threads can optionally be signaled upon completion of the data movement. 2.11 Intel XScale® Core Peripherals 2.11.1 Interrupt Controller The Interrupt Controller provides the ability to enable or mask interrupts from a number of chip wide sources, for example: • • • • Timers (normally used by Real-Time Operating System). Interrupts generated by Microengine software to request services from the Intel XScale® core. External agents such as PCI devices. Error conditions, such as DRAM ECC error, or SPI-4 parity error. Interrupt status is read as memory mapped registers; the state of an interrupt signal can be read even if it is masked from interrupting. Enabling and masking of interrupts is done as writes to memory mapped registers. 76 Hardware Reference Manual Intel® IXP2800 Network Processor Technical Description 2.11.2 Timers The IXP2800 Network Processor contains four programmable 32-bit timers, which can be used for software support. Each timer can be clocked by the internal clock, by a divided version of the clock, or by a signal on an external GPIO pin. Each timer can be programmed to generate a periodic interrupt after a programmed number of clocks. The range is from several ns to several minutes depending on the clock frequency. In addition, timer 4 can be used as a watchdog timer. In this use, software must periodically reload the timer value; if it fails to do so and the timer counts to 0, it will reset the chip. This can be used to detect if software “hangs” or for some other reason fails to reload the timer. 2.11.3 General Purpose I/O The IXP2800 Network Processor contains eight General Purpose I/O (GPIO) pins. These can be programmed as either input or output and can be used for slow speed I/O such as LEDs or input switches. They can also be used as interrupts to the Intel XScale® core, or to clock the programmable timers. 2.11.4 Universal Asynchronous Receiver/Transmitter The IXP2800 Network Processor contains a standard RS-232 compatible Universal Asynchronous Receiver/Transmitter (UART), which can be used for communication with a debugger or maintenance console. Modem controls are not supported; if they are needed, GPIO pins can be used for that purpose. The UART performs serial-to-parallel conversion on data characters received from a peripheral device and parallel-to-serial conversion on data characters received from the processor. The processor can read the complete status of the UART at any time during operation. Available status information includes the type and condition of the transfer operations being performed by the UART and any error conditions (parity, overrun, framing or break interrupt). The serial ports can operate in either FIFO or non-FIFO mode. In FIFO mode, a 64-byte transmit FIFO holds data from the processor to be transmitted on the serial link and a 64-byte receive FIFO buffers data from the serial link until read by the processor. The UART includes a programmable baud rate generator that is capable of dividing the internal clock input by divisors of 1 to 216 - 1 and produces a 16X clock to drive the internal transmitter logic. It also drives the receive logic. The UART can be operated in polled or in interrupt driven mode as selected by software. 2.11.5 Slowport The Slowport is an external interface to the IXP2800 Network Processor, used for Flash ROM access and 8, 16, or 32-bit asynchronous device access. It allows the Intel XScale® core do read/ write data transfers to these slave devices. The address bus and data bus are multiplexed to reduce the pin count. In addition, 24 bits of address are shifted out on three clock cycles. Therefore, an external set of buffers is needed to latch the address. Two chip selects are provided. Hardware Reference Manual 77 Intel® IXP2800 Network Processor Technical Description The access is asynchronous. Insertion of delay cycles for both data setup and hold time is programmable via internal Control registers. The transfer can also wait for a handshake acknowledge signal from the external device. 2.12 I/O Latency Table 19 shows the latencies for transferring data between the Microengine and the other subsystem components. The latency is measured in 1.4 GHz cycles. Table 19. I/O Latency Sub-system DRAM (RDR) Transfer Size Average Read Latency Average Write Latency SRAM (QDR) Scratch MSF 4 bytes 4 bytes 8 bytes 100 (light load) – 160 (heavy load) ~ 100 cycles (range 53 – 152) range 53 – 120 (note 3) ~ 53 cycles ~ 53 cycles ~ 40 cycles 8 bytes – 16 bytes (note 2) ~ 295 cycles (RBUF) ~ 48 cycles (TBUF) Note1: RDR, QDR, MSF, and Scratch values are extracted from a simulation model. Note 2: Minimum DRAM burst size on pins is 16 bytes. Transfers less than 16 bytes incur the same as a 16-byte transfer. Note 3: At 1016 MHz, read latency should be ~ 240 cycles. 2.13 Performance Monitor The Intel XScale® core hardware provides two 32-bit performance counters that allow two unique events to be monitored simultaneously. In addition, the Intel XScale® core implements a 32-bit clock counter that can be used in conjunction with the performance counters; its sole purpose is to count the number of core clock cycles, which is useful in measuring total execution time. 78 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Intel XScale® Core 3 This section contains information describing the Intel XScale® core, Intel XScale® core gasket, and Intel XScale® core Peripherals (XPI). For additional information about the Intel XScale® architecture refer to the Intel XScale® Core Developers Manual available on Intel’s Developers web site (http://www.developer.intel.com). 3.1 Introduction The Intel XScale® core is an ARM* V5TE compliant microprocessor. It has been designed for high performance and low-power; leading the industry in mW/MIPs. The Intel XScale® core incorporates an extensive list of architecture features that allows it to achieve high performance. Many of the architectural features added to the Intel XScale® core help hide memory latency that often is a serious impediment to high performance processors. This includes: • The ability to continue instruction execution even while the data cache is retrieving data from external memory. • • • • A write buffer. Write-back caching. Various data cache allocation policies that can be configured different for each application. Cache locking. All these features improve the efficiency of the memory bus external to the core. ARM* Version 5 (V5) Architecture added floating point instructions to ARM* Version 4. The Intel XScale® core implements the integer instruction set architecture of ARM* V5, but does not provide hardware support of the floating point instructions. The Intel XScale® core provides the Thumb instruction set (ARM* V5T) and the ARM* V5E DSP extensions. Hardware Reference Manual 79 Intel® IXP2800 Network Processor Intel XScale® Core 3.2 Features Figure 16 shows the major functional blocks of the Intel XScale® core. Figure 16. Intel XScale® Core Architecture Features Data Cache Instruction Cache Max 32 Kbytes 32 ways wr-back or wr-through Hit under Data RAM miss Max 28 Kbytes Re-map of data cache 32 Kbytes 32 ways Lockable by line Branch Target Buffer 128 entries Performance Monitoring Debug Hardware Breakpoint Branch History Table IMMU DMMU 32 entry TLB Fully associative Lockable by entry Power Management 2 Kbytes 2 ways Fill Buffer 32 entry TLB Fully associative Lockable by entry 4 - 8 entries Write Buffer MAC Idle Drowsy Sleep Mini-Data Cache Single Cycle Throughput (16*32) 16-bit SIMD 40-bit Accumulator 8 entries Full coalescing JTAG A9642-01 3.2.1 Multiply/ACcumulate (MAC) The MAC unit supports early termination of multiplies/accumulates in two cycles and can sustain a throughput of a MAC operation every cycle. Architectural enhancements to the MAC support audio coding algorithms, including a 40-bit accumulator and support for 16-bit packed data. 3.2.2 Memory Management The Intel XScale® core implements the Memory Management Unit (MMU) Architecture specified in the ARM* Architecture Reference Manual (see the ARM* website at http://www.arm.com). The MMU provides access protection and virtual to physical address translation. The MMU Architecture also specifies the caching policies for the instruction cache and data memory. These policies are specified as page attributes and include: • • • • • 80 identifying code as cacheable or non-cacheable selecting between the mini-data cache or data cache write-back or write-through data caching enabling data write allocation policy and enabling the write buffer to coalesce stores to external memory Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.2.3 Instruction Cache The Intel XScale® core implements a 32-Kbyte, 32-way set associative instruction cache with a line size of 32 bytes. All requests that “miss” the instruction cache generate a 32-byte read request to external memory. A mechanism to lock critical code within the cache is also provided. 3.2.4 Branch Target Buffer (BTB) The Intel XScale® core provides a Branch Target Buffer to predict the outcome of branch type instructions. It provides storage for the target address of branch type instructions and predicts the next address to present to the instruction cache when the current instruction address is that of a branch. The BTB holds 128 entries. 3.2.5 Data Cache The Intel XScale® core implements a 32-Kbyte, a 32-way set associative data cache and a 2-Kbyte, 2-way set associative mini-data cache. Each cache has a line size of 32 bytes, and supports writethrough or write-back caching. The data/mini-data cache is controlled by page attributes defined in the MMU Architecture and by coprocessor 15. The Intel XScale® core allows applications to reconfigure a portion of the data cache as data RAM. Software may place special tables or frequently used variables in this RAM. 3.2.6 Performance Monitoring Two performance monitoring counters have been added to the Intel XScale® core that can be configured to monitor various events. These events allow a software developer to measure cache efficiency, detect system bottlenecks, and reduce the overall latency of programs. 3.2.7 Power Management The Intel XScale® core incorporates a power and clock management unit that can assist in controlling clocking and managing power. 3.2.8 Debugging The Intel XScale® core supports software debugging through two instruction address breakpoint registers, one data-address breakpoint register, one data-address/mask breakpoint register, and a trace buffer. 3.2.9 JTAG Testability is supported on the Intel XScale® core through the Test Access Port (TAP) Controller implementation, which is based on IEEE 1149.1 (JTAG) Standard Test Access Port and BoundaryScan Architecture. The purpose of the TAP controller is to support test logic internal and external to the Intel XScale® core such as built-in self-test, boundary-scan, and scan. Hardware Reference Manual 81 Intel® IXP2800 Network Processor Intel XScale® Core 3.3 Memory Management The Intel XScale® core implements the Memory Management Unit (MMU) Architecture specified in the ARM Architecture Reference Manual. To accelerate virtual to physical address translation, the Intel XScale® core uses both an instruction Translation Look-aside Buffer (TLB) and a data TLB to cache the latest translations. Each TLB holds 32 entries and is fully-associative. Not only do the TLBs contain the translated addresses, but also the access rights for memory references. If an instruction or data TLB miss occurs, a hardware translation-table-walking mechanism is invoked to translate the virtual address to a physical address. Once translated, the physical address is placed in the TLB along with the access rights and attributes of the page or section. These translations can also be locked down in either TLB to guarantee the performance of critical routines. The Intel XScale® core allows system software to associate various attributes with regions of memory: • • • • • • • • Note: cacheable bufferable line allocate policy write policy I/O mini Data Cache Coalescing P bit The virtual address with which the TLBs are accessed may be remapped by the PID register. 3.3.1 Architecture Model 3.3.1.1 Version 4 versus Version 5 ARM* MMU Version 5 Architecture introduces the support of tiny pages, which are 1 Kbyte in size. The reserved field in the first-level descriptor (encoding 0b11) is used as the fine page table base address. 3.3.1.2 Memory Attributes The attributes associated with a particular region of memory are configured in the memory management page table and control the behavior of accesses to the instruction cache, data cache, mini-data cache and the write buffer. These attributes are ignored when the MMU is disabled. To allow compatibility with older system software, the new Intel XScale® core attributes take advantage of encoding space in the descriptors that was formerly reserved. 3.3.1.2.1 Page (P) Attribute Bit The P bit assigns a page attribute to a memory region. Refer to the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual for details about the P bit. 82 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.3.1.2.2 Instruction Cache When examining these bits in a descriptor, the Instruction Cache only utilizes the C bit. If the C bit is clear, the Instruction Cache considers a code fetch from that memory to be non-cacheable, and will not fill a cache entry. If the C bit is set, then fetches from the associated memory region will be cached. 3.3.1.2.3 Data Cache and Write Buffer All of these descriptor bits affect the behavior of the Data Cache and the Write Buffer. If the X bit for a descriptor is 0 (see Table 20), the C and B bits operate as mandated by the ARM* architecture. If the X bit for a descriptor is one, the C and B bits’ meaning is extended, as detailed in Table 21. Table 20. Data Cache and Buffer Behavior when X = 0 Cacheable? Bufferable? Write Policy Line Allocation Policy 00 N N — — 01 N Y — — 10 Y Y Write Through Read Allocate 11 Y Y Write Back Read Allocate CB 1. Notes Stall until complete1 Normally, the processor will continue executing after a data access if no dependency on that access is encountered. With this setting, the processor will stall execution until the data access completes. This guarantees to software that the data access has taken effect by the time execution of the data access instruction completes. External data aborts from such accesses will be imprecise. Table 21. Data Cache and Buffer Behavior when X = 1 Cacheable? Bufferable? Write Policy Line Allocation Policy 00 — — — — Unpredictable; do not use 01 N Y — — Writes will not coalesce into buffers1 10 (Mini Data Cache) — — — Cache policy is determined by MD field of Auxiliary Control register 11 Y Y Write Back Read/Write Allocate CB 1. 3.3.1.2.4 Notes Normally, bufferable writes can coalesce with previously buffered data in the same address range Details on Data Cache and Write Buffer Behavior If the MMU is disabled all data accesses will be non-cacheable and non-bufferable. This is the same behavior as when the MMU is enabled, and a data access uses a descriptor with X, C, and B all set to 0. The X, C, and B bits determine when the processor should place new data into the Data Cache. The cache places data into the cache in lines (also called blocks). Thus, the basis for making a decision about placing new data into the cache is a called a “Line Allocation Policy.” Hardware Reference Manual 83 Intel® IXP2800 Network Processor Intel XScale® Core If the Line Allocation Policy is read-allocate, all load operations that miss the cache request a 32-byte cache line from external memory and allocate it into either the data cache or mini-data cache (this is assuming the cache is enabled). Store operations that miss the cache will not cause a line to be allocated. If read/write-allocate is in effect, load or store operations that miss the cache will request a 32-byte cache line from external memory if the cache is enabled. The other policy determined by the X, C, and B bits is the Write Policy. A write-through policy instructs the Data Cache to keep external memory coherent by performing stores to both external memory and the cache. A write-back policy only updates external memory when a line in the cache is cleaned or needs to be replaced with a new line. Generally, write-back provides higher performance because it generates less data traffic to external memory. 3.3.1.2.5 Memory Operation Ordering A fence memory operation (memop) is one that guarantees all memops issued prior to the fence will execute before any memop issued after the fence. Thus software may issue a fence to impose a partial ordering on memory accesses. Table 22 shows the circumstances in which memops act as fences. Any swap (SWP or SWPB) to a page that would create a fence on a load or store is a fence. Table 22. Memory Operations that Impose a Fence 3.3.2 operation X C B load — 0 — store 1 0 1 load or store 0 0 0 Exceptions The MMU may generate prefetch aborts for instruction accesses and data aborts for data memory accesses. Data address alignment checking is enabled by setting bit 1 of the Control register (CP15, register 1). Alignment faults are still reported even if the MMU is disabled. All other MMU exceptions are disabled when the MMU is disabled. 84 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.3.3 Interaction of the MMU, Instruction Cache, and Data Cache The MMU, instruction cache, and data/mini-data cache may be enabled/disabled independently. The instruction cache can be enabled with the MMU enabled or disabled. However, the data cache can only be enabled when the MMU is enabled. Therefore only three of the four combinations of the MMU and data/mini-data cache enables are valid (see Table 23). The invalid combination will cause undefined results. Table 23. Valid MMU and Data/Mini-Data Cache Combinations MMU Data/Mini-data Cache Off Off On Off On On 3.3.4 Control 3.3.4.1 Invalidate (Flush) Operation The entire instruction and data TLB can be invalidated at the same time with one command or they can be invalidated separately. An individual entry in the data or instruction TLB can also be invalidated. Globally invalidating a TLB will not affect locked TLB entries. However, the invalidate-entry operations can invalidate individual locked entries. In this case, the locked remains in the TLB, but will never “hit” on an address translation. Effectively, a hole is in the TLB. This situation may be rectified by unlocking the TLB. 3.3.4.2 Enabling/Disabling The MMU is enabled by setting bit 0 in coprocessor 15, register 1 (Control register). When the MMU is disabled, accesses to the instruction cache default to cacheable and all accesses to data memory are made non-cacheable. A recommended code sequence for enabling the MMU is shown in Example 14. Example 14. Enabling the MMU ; ; ; ; ; ; ; ; This routine provides software with a predictable way of enabling the MMU. After the CPWAIT, the MMU is guaranteed to be enabled. Be aware that the MMU will be enabled sometime after MCR and before the instruction that executes after the CPWAIT. Programming Note: This code sequence requires a one-to-one virtual to physical address mapping on this code since the MMU may be enabled part way through. This would allow the instructions after MCR to execute properly regardless the state of the MMU. MRC P15,0,R0,C1,C0,0; Read CP15, register 1 ORR R0, R0, #0x1; Turn on the MMU MCR P15,0,R0,C1,C0,0; Write to CP15, register 1 ; The MMU is guaranteed to be enabled at this point; the next instruction or ; data address will be translated. Hardware Reference Manual 85 Intel® IXP2800 Network Processor Intel XScale® Core 3.3.4.3 Locking Entries Individual entries can be locked into the instruction and data TLBs. If a lock operation finds the virtual address translation already resident in the TLB, the results are unpredictable. An invalidate by entry command before the lock command will ensure proper operation. Software can also accomplish this by invalidating all entries, as shown in Example 15. Locking entries into either the instruction TLB or data TLB reduces the available number of entries (by the number that was locked down) for hardware to cache other virtual to physical address translations. A procedure for locking entries into the instruction TLB is shown in Example 15. If a MMU abort is generated during an instruction or data TLB lock operation, the Fault Status register is updated to indicate a Lock Abort, and the exception is reported as a data abort. Example 15. Locking Entries into the Instruction TLB ; R1, R2 and R3 contain the virtual addresses to translate and lock into ; the instruction TLB. ; The value in R0 is ignored in the following instruction. ; Hardware guarantees that accesses to CP15 occur in program order MCR P15,0,R0,C8,C5,0 ; Invalidate the entire instruction TLB MCR P15,0,R1,C10,C4,0 ; ; MCR P15,0,R2,C10,C4,0 ; ; MCR P15,0,R3,C10,C4,0 ; ; Translate virtual address (R1) and lock into instruction TLB Translate virtual address (R2) and lock into instruction TLB Translate virtual address (R3) and lock into instruction TLB CPWAIT ; The MMU is guaranteed to be updated at this point; the next instruction will ; see the locked instruction TLB entries. Note: If exceptions are allowed to occur in the middle of this routine, the TLB may end up caching a translation that is about to be locked. For example, if R1 is the virtual address of an interrupt service routine and that interrupt occurs immediately after the TLB has been invalidated, the lock operation will be ignored when the interrupt service routine returns back to this code sequence. Software should disable interrupts (FIQ or IRQ) in this case. As a general rule, software should avoid locking in all other exception types. 86 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core The proper procedure for locking entries into the data TLB is shown in Example 16. Example 16. Locking Entries into the Data TLB ; R1, and R2 contain the virtual addresses to translate and lock into the data TLB MCR P15,0,R1,C8,C6,1 MCR P15,0,R1,C10,C8,0 ; ; ; ; Invalidate the data TLB entry specified by the virtual address in R1 Translate virtual address (R1) and lock into data TLB ; Repeat sequence for virtual address in R2 MCR P15,0,R2,C8,C6,1 ; Invalidate the data TLB entry specified by the ; virtual address in R2 MCR P15,0,R2,C10,C8,0 ; Translate virtual address (R2) and lock into ; data TLB CPWAIT ; wait for locks to complete ; The MMU is guaranteed to be updated at this point; the next instruction will ; see the locked data TLB entries. Note: 3.3.4.4 Care must be exercised here when allowing exceptions to occur during this routine whose handlers may have data that lies in a page that is trying to be locked into the TLB. Round-Robin Replacement Algorithm The line replacement algorithm for the TLBs is round-robin; there is a round-robin pointer that keeps track of the next entry to replace. The next entry to replace is the one sequentially after the last entry that was written. For example, if the last virtual to physical address translation was written into entry 5, the next entry to replace is entry 6. At reset, the round-robin pointer is set to entry 31. Once a translation is written into entry 31, the round-robin pointer gets set to the next available entry, beginning with entry 0 if no entries have been locked down. Subsequent translations move the round-robin pointer to the next sequential entry until entry 31 is reached, where it will wrap back to entry 0 upon the next translation. A lock pointer is used for locking entries into the TLB and is set to entry 0 at reset. A TLB lock operation places the specified translation at the entry designated by the lock pointer, moves the lock pointer to the next sequential entry, and resets the round-robin pointer to entry 31. Locking entries into either TLB effectively reduces the available entries for updating. For example, if the first three entries were locked down, the round-robin pointer would be entry 3 after it rolled over from entry 31. Only entries 0 through 30 can be locked in either TLB; entry 31can never be locked. If the lock pointer is at entry 31, a lock operation will update the TLB entry with the translation and ignore the lock. In this case, the round-robin pointer will stay at entry 31. Hardware Reference Manual 87 Intel® IXP2800 Network Processor Intel XScale® Core Figure 17 illustrates locked entries in TLB. entry 0 entry 1 Locked Figure 17. Example of Locked Entries in TLB entry 7 entry 8 entry 22 entry 23 entry 30 entry 31 Note: 8 entries locked, 24 entries available for round robin replacement A9684-01 3.4 Instruction Cache The Intel XScale® core instruction cache enhances performance by reducing the number of instruction fetches from external memory. The cache provides fast execution of cached code. Code can also be locked down when guaranteed or fast access time is required. Figure 18 shows the cache organization and how the instruction address is used to access the cache. The instruction cache is a 32-Kbyte, 32-way set associative cache; this means there are 32 sets with each set containing 32 ways. Each way of a set contains eight 32-bit words and one valid bit, which is referred to as a line. The replacement policy is a round-robin algorithm and the cache also supports the ability to lock code in at a line granularity. 88 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 18. Instruction Cache Organization Set 31 way 0 way 1 Set Index 8 Words (cache line) CAM Set 0 way 0 way 1 This example shows Set 0 being selected by the Set Index Set 1 way 0 way 1 Data 8 Words (cache line) 8 Words (cache line) CAM CAM Data Data way 31 Tag Word Select Instruction Word (4 bytes) Instruction Address (Virtual) 31 10 9 Tag 54 21 0 Set Index Word Note: CAM = Content Addressable Memory A9685-01 The instruction cache is virtually addressed and virtually tagged. The virtual address presented to the instruction cache may be remapped by the PID register. 3.4.1 Instruction Cache Operation 3.4.1.1 Operation when Instruction Cache is Enabled When the cache is enabled, it compares every instruction request address to the addresses of instructions that it is holding in cache. If the requested instruction is found, the access “hits” the cache, which returns the requested instruction. If the instruction is not found, the access “misses” the cache, which requests a fetch from external memory of the 8-word line (32 bytes) that contains the instruction (using the fetch policy). As the fetch returns instructions to the cache, they are put in one of two fetch buffers and the requested instruction is delivered to the instruction decoder. A fetched line is written into the cache if it is cacheable (code is cacheable if the MMU is disabled or if the MMU is enabled and the cacheable (C) bit is set to 1 in its corresponding page). Note: An instruction fetch may “miss” the cache but “hit” one of the fetch buffers. If this happens, the requested instruction is delivered to the instruction decoder in the same manner as a cache “hit.” Hardware Reference Manual 89 Intel® IXP2800 Network Processor Intel XScale® Core 3.4.1.2 Operation when Instruction Cache is Disabled Disabling the cache prevents any lines from being written into the instruction cache. Although the cache is disabled, it is still accessed and may generate a “hit” if the data is already in the cache. Disabling the instruction cache does not disable instruction buffering that may occur within the instruction fetch buffers. Two 8-word instruction fetch buffers will always be enabled in the cache disabled mode. As instruction fetches continue to “hit” within either buffer (even in the presence of forward and backward branches), no external fetches for instructions are generated. A miss causes one or the other buffer to be filled from external memory using the fill policy. 3.4.1.3 Fetch Policy An instruction-cache “miss” occurs when the requested instruction is not found in the instruction fetch buffers or instruction cache; a fetch request is then made to external memory. The instruction cache can handle up to two “misses.” Each external fetch request uses a fetch buffer that holds 32-bytes and eight valid bits, one for each word. A miss causes the following: 1. A fetch buffer is allocated. 2. The instruction cache sends a fetch request to the external bus. This request is for a 32-byte line. 3. Instructions words are returned back from the external bus, at a maximum rate of 1 word per core cycle. As each word returns, the corresponding valid bit is set for the word in the fetch buffer. 4. As soon as the fetch buffer receives the requested instruction, it forwards the instruction to the instruction decoder for execution. 5. When all words have returned, the fetched line will be written into the instruction cache if it is cacheable and if the instruction cache is enabled. The line chosen for update in the cache is controlled by the round-robin replacement algorithm. This update may evict a valid line at that location. 6. Once the cache is updated, the eight valid bits of the fetch buffer are invalidated. 3.4.1.4 Round-Robin Replacement Algorithm The line replacement algorithm for the instruction cache is round-robin. Each set in the instruction cache has a round-robin pointer that keeps track of the next line (in that set) to replace. The next line to replace in a set is the one after the last line that was written. For example, if the line for the last external instruction fetch was written into way 5-set 2, the next line to replace for that set would be way 6. None of the other round-robin pointers for the other sets are affected in this case. After reset, way 31 is pointed to by the round-robin pointer for all the sets. Once a line is written into way 31, the round-robin pointer points to the first available way of a set, beginning with way0 if no lines have been locked into that particular set. Locking lines into the instruction cache effectively reduces the available lines for cache updating. For example, if the first three lines of a set were locked down, the round-robin pointer would point to the line at way 3 after it rolled over from way 31. 90 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.4.1.5 Parity Protection The instruction cache is protected by parity to ensure data integrity. Each instruction cache word has 1 parity bit. (The instruction cache tag is not parity protected.) When a parity error is detected on an instruction cache access, a prefetch abort exception occurs if the Intel XScale® core attempts to execute the instruction. Before servicing the exception, hardware place a notification of the error in the Fault Status register (Coprocessor 15, register 5). A software exception handler can recover from an instruction cache parity error. This can be accomplished by invalidating the instruction cache and the branch target buffer and then returning to the instruction that caused the prefetch abort exception. A simplified code example is shown in Example 17. A more complex handler might choose to invalidate the specific line that caused the exception and then invalidate the BTB. Example 17. Recovering from an Instruction Cache Parity Error ; Prefetch abort handler MCR P15,0,R0,C7,C5,0 ; Invalidate the instruction cache and branch target ; buffer CPWAIT ; wait for effect ; SUBS PC,R14,#4 ; Returns to the instruction that generated the ; parity error ; The Instruction Cache is guaranteed to be invalidated at this point If a parity error occurs on an instruction that is locked in the cache, the software exception handler needs to unlock the instruction cache, invalidate the cache and then re-lock the code in before it returns to the faulting instruction. 3.4.1.6 Instruction Cache Coherency The instruction cache does not detect modification to program memory by loads, stores or actions of other bus masters. Several situations may require program memory modification, such as uploading code from disk. The application program is responsible for synchronizing code modification and invalidating the cache. In general, software must ensure that modified code space is not accessed until modification and invalidating are completed. To achieve cache coherence, instruction cache contents can be invalidated after code modification in external memory is complete. If the instruction cache is not enabled, or code is being written to a non-cacheable region, software must still invalidate the instruction cache before using the newly-written code. This precaution ensures that state associated with the new code is not buffered elsewhere in the processor, such as the fetch buffers or the BTB. Naturally, when writing code as data, care must be taken to force it completely out of the processor into external memory before attempting to execute it. If writing into a non-cacheable region, flushing the write buffers is sufficient precaution. If writing to a cacheable region, then the data cache should be submitted to a Clean/Invalidate operation to ensure coherency. Hardware Reference Manual 91 Intel® IXP2800 Network Processor Intel XScale® Core 3.4.2 Instruction Cache Control 3.4.2.1 Instruction Cache State at Reset After reset, the instruction cache is always disabled, unlocked, and invalidated (flushed). 3.4.2.2 Enabling/Disabling The instruction cache is enabled by setting bit 12 in coprocessor 15, register 1 (Control register). This process is illustrated in Example 18. Example 18. Enabling the Instruction Cache ; Enable the ICache MRC P15, 0, R0, C1, C0, 0 ORR R0, R0, #0x1000 MCR P15, 0, R0, C1, C0, 0 ; Get the control register ; set bit 12 -- the I bit ; Set the control register CPWAIT 3.4.2.3 Invalidating the Instruction Cache The entire instruction cache along with the fetch buffers are invalidated by writing to coprocessor 15, register 7. This command does not unlock any lines that were locked in the instruction cache nor does it invalidate those locked lines. To invalidate the entire cache including locked lines, the unlock instruction cache command needs to be executed before the invalidate command. There is an inherent delay from the execution of the instruction cache invalidate command to where the next instruction will see the result of the invalidate. The routine in Example 19 can be used to guarantee proper synchronization. Example 19. Invalidating the Instruction Cache MCR P15,0,R1,C7,C5,0 ; Invalidate the instruction cache and branch ; target buffer CPWAIT ; The instruction cache is guaranteed to be invalidated at this point; the next ; instruction sees the result of the invalidate command. The Intel XScale® core also supports invalidating an individual line from the instruction cache. 3.4.2.4 Locking Instructions in the Instruction Cache Software has the ability to lock performance critical routines into the instruction cache. Up to 28 lines in each set can be locked; hardware will ignore the lock command if software is trying to lock all the lines in a particular set (i.e., ways 28 – 31can never be locked). When this happens, the line is still allocated into the cache, but the lock will be ignored. The round-robin pointer will stay at way 31 for that set. Lines can be locked into the instruction cache by initiating a write to coprocessor 15. Register Rd contains the virtual address of the line to be locked into the cache. 92 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core There are several requirements for locking down code: 1. The routine used to lock lines down in the cache must be placed in non-cacheable memory, which means the MMU is enabled. As a corollary: no fetches of cacheable code should occur while locking instructions into the cache. 2. The code being locked into the cache must be cacheable. 3. The instruction cache must be enabled and invalidated prior to locking down lines. Failure to follow these requirements will produce unpredictable results when accessing the instruction cache. System programmers should ensure that the code to lock instructions into the cache does not reside closer than 128 bytes to a non-cacheable/cacheable page boundary. If the processor fetches ahead into a cacheable page, then the first requirement noted above could be violated. Lines are locked into a set starting at way 0 and may progress up to way 27; which set a line gets locked into depends on the set index of the virtual address. Figure 19 is an example of where lines of code may be locked into the cache along with how the round-robin pointer is affected. Figure 19. Locked Line Effect on Round Robin Replacement set 2 set 31 Locked set 1 Locked way 7 way 8 Locked set 0 way 0 way 1 way 22 way 23 way 30 way 31 Notes: set 0: 8 ways locked, 24 ways available for round robin replacement set 1: 23 ways locked, 9 ways available for round robin replacement set 2: 28 ways locked, only way 28-31 available for replacement set 31: all 32 ways available for round robin replacement A9686-01 Software can lock down several different routines located at different memory locations. This may cause some sets to have more locked lines than others as shown in Figure 19. Hardware Reference Manual 93 Intel® IXP2800 Network Processor Intel XScale® Core Example 20 shows how a routine, called “lockMe” in this example, might be locked into the instruction cache. Note that it is possible to receive an exception while locking code. Example 20. Locking Code into the Cache lockMe: ; This is the code that will be locked into the cache mov r0, #5 add r5, r1, r2 . . . lockMeEnd: . . . codeLock: ; here is the code to lock the “lockMe” routine ldr r0, =(lockMe AND NOT 31); r0 gets a pointer to the first line we should lock ldr r1, =(lockMeEnd AND NOT 31); r1 contains a pointer to the last line we should lock lockLoop: mcr cmp add bne 3.4.2.5 p15, 0, r0, c9, c1, 0; lock next line of code into ICache r0, r1 ; are we done yet? r0, r0, #32 ; advance pointer to next line lockLoop ; if not done, do the next line Unlocking Instructions in the Instruction Cache The Intel XScale® core provides a global unlock command for the instruction cache. Writing to coprocessor 15, register 9 unlocks all the locked lines in the instruction cache and leaves them valid. These lines then become available for the round-robin replacement algorithm. 3.5 Branch Target Buffer (BTB) The Intel XScale® core uses dynamic branch prediction to reduce the penalties associated with changing the flow of program execution. The Intel XScale® core features a branch target buffer that provides the instruction cache with the target address of branch type instructions. The branch target buffer is implemented as a 128-entry, direct mapped cache. 3.5.1 Branch Target Buffer Operation The BTB stores the history of branches that have executed along with their targets. Figure 20 shows an entry in the BTB, where the tag is the instruction address of a previously executed branch and the data contains the target address of the previously executed branch along with two bits of history information. 94 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 20. BTB Entry TAG DATA Branch Address[31:9,1] History Bits[1:0] Target Address[31:1] A9687-01 The BTB takes the current instruction address and checks to see if this address is a branch that was previously seen. It uses bits [8:2] of the current address to read out the tag and then compares this tag to bits [31:9,1] of the current instruction address. If the current instruction address matches the tag in the cache and the history bits indicate that this branch is usually taken in the past, the BTB uses the data (target address) as the next instruction address to send to the instruction cache. Bit[1] of the instruction address is included in the tag comparison to support Thumb execution. This organization means that two consecutive Thumb branch (B) instructions, with instruction address bits[8:2] the same, will contend for the same BTB entry. Thumb also requires 31 bits for the branch target address. In ARM* mode, bit[1] is 0. The history bits represent four possible prediction states for a branch entry in the BTB. Figure 21 shows these states along with the possible transitions. The initial state for branches stored in the BTB is Weakly-Taken (WT). Every time a branch that exists in the BTB is executed, the history bits are updated to reflect the latest outcome of the branch, either taken or not-taken. The BTB does not have to be managed explicitly by software; it is disabled by default after reset and is invalidated when the instruction cache is invalidated. Figure 21. Branch History T aken Taken Taken Tak Not Ta en ken SN WN WT ST N ot N ot T aken N ot Ta T aken ken Notes: SN: Strongly Not Take WN: Weakly Not Taken ST: Strongly Taken WT: Weakly Taken A9688-01 3.5.1.1 Reset After Processor Reset, the BTB is disabled and all entries are invalidated. Hardware Reference Manual 95 Intel® IXP2800 Network Processor Intel XScale® Core 3.5.2 Update Policy A new entry is stored into the BTB when the following conditions are met: • The branch instruction has executed • The branch was taken • The branch is not currently in the BTB The entry is then marked valid and the history bits are set to WT. If another valid branch exists at the same entry in the BTB, it will be evicted by the new branch. Once a branch is stored in the BTB, the history bits are updated upon every execution of the branch as shown in Figure 21. 3.5.3 BTB Control 3.5.3.1 Disabling/Enabling The BTB is always disabled with Reset. Software can enable the BTB through a bit in a coprocessor register. Before enabling or disabling the BTB, software must invalidate it (described in the following section). This action will ensure correct operation in case stale data is in the BTB. Software should not place any branch instruction between the code that invalidates the BTB and the code that enables/disables it. 3.5.3.2 Invalidation There are four ways the contents of the BTB can be invalidated. 1. Reset. 2. Software can directly invalidate the BTB via a CP15, register 7 function. 3. The BTB is invalidated when the Process ID register is written. 4. The BTB is invalidated when the instruction cache is invalidated via CP15, register 7 functions. 3.6 Data Cache The Intel XScale® core data cache enhances performance by reducing the number of data accesses to and from external memory. There are two data cache structures in the Intel XScale® core, a 32Kbyte data cache and a 2-Kbyte mini-data cache. An eight entry write buffer and a four entry fill buffer are also implemented to decouple the Intel XScale® core instruction execution from external memory accesses, which increases overall system performance. 96 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.6.1 Overviews 3.6.1.1 Data Cache Overview The data cache is a 32-Kbyte, 32-way set associative cache, i.e., there are 32 sets and each set has 32 ways. Each way of a set contains 32 bytes (one cache line) and one valid bit. There also exist two dirty bits for every line, one for the lower 16 bytes and the other one for the upper 16 bytes. When a store hits the cache, the dirty bit associated with it is set. The replacement policy is a round-robin algorithm and the cache also supports the ability to reconfigure each line as data RAM. Figure 22 shows the cache organization and how the data address is used to access the cache. Cache policies may be adjusted for particular regions of memory by altering page attribute bits in the MMU descriptor that controls that memory. The data cache is virtually addressed and virtually tagged. It supports write-back and write-through caching policies. The data cache always allocates a line in the cache when a cacheable read miss occurs and will allocate a line into the cache on a cacheable write miss when write allocate is specified by its page attribute. Page attribute bits determine whether a line gets allocated into the data cache or mini-data cache. Figure 22. Data Cache Organization Set 31 way 0 way 1 Set Index 32 bytes (cache line) CAM Set 0 way 0 way 1 This example shows Set 0 being selected by the Set Index Set 1 way 0 way 1 CAM Data 32 bytes (cache line) 32 bytes (cache line) CAM Data Data way 31 Tag Word Select Byte Alignment Sign Extension Byte Select Data Word (4 bytes to Destination Register) Data Address (Virtual) 31 Tag 10 9 54 21 0 Set Index Word Byte Note: CAM = Content Addressable Memory A9689-01 Hardware Reference Manual 97 Intel® IXP2800 Network Processor Intel XScale® Core 3.6.1.2 Mini-Data Cache Overview The mini-data cache is a 2-Kbyte, 2-way set associative cache; this means there are 32 sets with each set containing 2 ways. Each way of a set contains 32 bytes (one cache line) and one valid bit. There also exist 2 dirty bits for every line, one for the lower 16 bytes and the other one for the upper 16 bytes. When a store hits the cache, the dirty bit associated with it is set. The replacement policy is a round-robin algorithm. Figure 23 shows the cache organization and how the data address is used to access the cache. The mini-data cache is virtually addressed and virtually tagged and supports the same caching policies as the data cache. However, lines cannot be locked into the mini-data cache. Figure 23. Mini-Data Cache Organization Set 31 way 0 way 1 This example shows Set 0 being selected by the Set Index 32 bytes (cache line) Set 1 way 0 way 1 Set 0 way 0 way 1 32 bytes (cache line) 32 bytes (cache line) Tag Word Select Byte Alignment Sign Extension Byte Select Data Word (4 bytes to Destination Register) Data Address (Virtual) 31 Tag 10 9 54 21 0 Set Index Word Byte Note: CAM = Content Addressable Memory A9692-01 98 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.6.1.3 Write Buffer and Fill Buffer Overview The Intel XScale® core employs an eight entry write buffer, each entry containing 16 bytes. Stores to external memory are first placed in the write buffer and subsequently taken out when the bus is available. The write buffer supports the coalescing of multiple store requests to external memory. An incoming store may coalesce with any of the eight entries. The fill buffer holds the external memory request information for a data cache or mini-data cache fill or non-cacheable read request. Up to four 32-byte read request operations can be outstanding in the fill buffer before the Intel XScale® core needs to stall. The fill buffer has been augmented with a four-entry pend buffer that captures data memory requests to outstanding fill operations. Each entry in the pend buffer contains enough data storage to hold one 32-bit word, specifically for store operations. Cacheable load or store operations that hit an entry in the fill buffer get placed in the pend buffer and are completed when the associated fill completes. Any entry in the pend buffer can be pended against any of the entries in the fill buffer; multiple entries in the pend buffer can be pended against a single entry in the fill buffer. Pended operations complete in program order. 3.6.2 Data Cache and Mini-Data Cache Operation The following discussions refer to the data cache and mini-data cache as one cache (data/minidata) since their behavior is the same when accessed. 3.6.2.1 Operation when Caching is Enabled When the data/mini-data cache is enabled for an access, the data/mini-data cache compares the address of the request against the addresses of data that it is currently holding. If the line containing the address of the request is resident in the cache, the access “hits’ the cache. For a load operation the cache returns the requested data to the destination register and for a store operation the data is stored into the cache. The data associated with the store may also be written to external memory if write-through caching is specified for that area of memory. If the cache does not contain the requested data, the access ‘misses’ the cache, and the sequence of events that follows depends on the configuration of the cache, the configuration of the MMU and the page attributes. 3.6.2.2 Operation when Data Caching is Disabled The data/mini-data cache is still accessed even though it is disabled. If a load hits the cache it will return the requested data to the destination register. If a store hits the cache, the data is written into the cache. Any access that misses the cache will not allocate a line in the cache when it’s disabled, even if the MMU is enabled and the memory region’s cacheability attribute is set. Hardware Reference Manual 99 Intel® IXP2800 Network Processor Intel XScale® Core 3.6.2.3 3.6.2.3.1 Cache Policies Cacheability Data at a specified address is cacheable given the following: • The MMU is enabled • The cacheable attribute is set in the descriptor for the accessed address • The data/mini-data cache is enabled 3.6.2.3.2 Read Miss Policy The following sequence of events occurs when a cacheable load operation misses the cache: 1. The fill buffer is checked to see if an outstanding fill request already exists for that line. — If so, the current request is placed in the pending buffer and waits until the previously requested fill completes, after which it accesses the cache again, to obtain the request data and returns it to the destination register. — If there is no outstanding fill request for that line, the current load request is placed in the fill buffer and a 32-byte external memory read request is made. If the pending buffer or fill buffer is full, the Intel XScale® core will stall until an entry is available. 2. A line is allocated in the cache to receive the 32 bytes of fill data. The line selected is determined by the round-robin pointer (see Section 3.6.2.4). The line chosen may contain a valid line previously allocated in the cache. In this case both dirty bits are examined and if set, the four words associated with a dirty bit that’s asserted will be written back to external memory as a 4-word burst operation. 3. When the data requested by the load is returned from external memory, it is immediately sent to the destination register specified by the load. A system that returns the requested data back first, with respect to the other bytes of the line, will obtain the best performance. 4. As data returns from external memory, it is written into the cache in the previously allocated line. A load operation that misses the cache and is not cacheable makes a request from external memory for the exact data size of the original load request. For example, LDRH requests exactly two bytes from external memory, LDR requests four bytes from external memory, etc. This request is placed in the fill buffer until, the data is returned from external memory, which is then forwarded back to the destination register(s). 100 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.6.2.3.3 Write Miss Policy A write operation that misses the cache, requests a 32-byte cache line from external memory if the access is cacheable and write allocation is specified in the page; then, the following events occur: 1. The fill buffer is checked to see if an outstanding fill request already exists for that line. — If so, the current request is placed in the pending buffer and waits until the previously requested fill completes, after which it writes its data into the recently allocated cache line. — If there is no outstanding fill request for that line, the current store request is placed in the fill buffer and a 32-byte external memory read request is made. If the pending buffer or fill buffer is full, the Intel XScale® core will stall until an entry is available. 2. The 32 bytes of data can be returned back to the Intel XScale® core in any word order, i.e, the eight words in the line can be returned in any order. Note that it does not matter, for performance reasons, which order the data is returned to the Intel XScale® core since the store operation has to wait until the entire line is written into the cache before it can complete. 3. When the entire 32-byte line has returned from external memory, a line is allocated in the cache, selected by the round-robin pointer (see Section 3.6.2.4). The line to be written into the cache may replace a valid line previously allocated in the cache. In this case both dirty bits are examined and if any are set, the four words associated with a dirty bit that’s asserted will be written back to external memory as a 4-word burst operation. This write operation will be placed in the write buffer. 4. The line is written into the cache along with the data associated with the store operation. If the above condition for requesting a 32-byte cache line is not met, a write miss will cause a write request to external memory for the exact data size specified by the store operation, assuming the write request does not coalesce with another write operation in the write buffer. 3.6.2.3.4 Write-Back versus Write-Through The Intel XScale® core supports write-back caching or write-through caching, controlled through the MMU page attributes. When write-through caching is specified, all store operations are written to external memory even if the access hits the cache. This feature keeps the external memory coherent with the cache, i.e., no dirty bits are set for this region of memory in the data/mini-data cache. This however does not guarantee that the data/mini-data cache is coherent with external memory, which is dependent on the system level configuration, specifically if the external memory is shared by another master. When write-back caching is specified, a store operation that hits the cache will not generate a write to external memory, thus reducing external memory traffic. Hardware Reference Manual 101 Intel® IXP2800 Network Processor Intel XScale® Core 3.6.2.4 Round-Robin Replacement Algorithm The line replacement algorithm for the data cache is round-robin. Each set in the data cache has a round-robin pointer that keeps track of the next line (in that set) to replace. The next line to replace in a set is the next sequential line after the last one that was just filled. For example, if the line for the last fill was written into way 5-set 2, the next line to replace for that set would be way 6. None of the other round-robin pointers for the other sets are affected in this case. After reset, way 31 is pointed to by the round-robin pointer for all the sets. Once a line is written into way 31, the round-robin pointer points to the first available way of a set, beginning with way 0 if no lines have been reconfigured as data RAM in that particular set. Reconfiguring lines as data RAM effectively reduces the available lines for cache updating. For example, if the first three lines of a set were reconfigured, the round-robin pointer would point to the line at way 3 after it rolled over from way 31. Refer to Section 3.6.4 for more details on data RAM. The mini-data cache follows the same round-robin replacement algorithm as the data cache except that there are only two lines the round-robin pointer can point to such that the round-robin pointer always points to the least recently filled line. A least recently used replacement algorithm is not supported because the purpose of the mini-data cache is to cache data that exhibits low temporal locality, i.e., data that is placed into the mini-data cache is typically modified once and then written back out to external memory. 3.6.2.5 Parity Protection The data cache and mini-data cache are protected by parity to ensure data integrity; there is one parity bit per byte of data. (The tags are not parity protected.) When a parity error is detected on a data/mini-data cache access, a data abort exception occurs. Before servicing the exception, hardware will set bit 10 of the Fault Status register. A data/mini-data cache parity error is an imprecise data abort, meaning R14_ABORT (+8) may not point to the instruction that caused the parity error. If the parity error occurred during a load, the targeted register may be updated with incorrect data. A data abort due to a data/mini-data cache parity error may not be recoverable if the data address that caused the abort occurred on a line in the cache that has a write-back caching policy. Prior updates to this line may be lost; in this case the software exception handler should perform a “clean and clear” operation on the data cache, ignoring subsequent parity errors, and restart the offending process. This operation is shown in Section 3.6.3.3.1. 3.6.2.6 Atomic Accesses The SWP and SWPB instructions generate an atomic load and store operation allowing a memory semaphore to be loaded and altered without interruption. These accesses may hit or miss the data/ mini-data cache depending on configuration of the cache, configuration of the MMU, and the page attributes. Refer to Section 3.11.4 for more information. 102 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.6.3 Data Cache and Mini-Data Cache Control 3.6.3.1 Data Memory State After Reset After processor reset, both the data cache and mini-data cache are disabled, all valid bits are set to 0 (invalid), and the round-robin bit points to way 31. Any lines in the data cache that were configured as data RAM before reset are changed back to cacheable lines after reset, i.e., there are 32 KBytes of data cache and 0 bytes of data RAM. 3.6.3.2 Enabling/Disabling The data cache and mini-data cache are enabled by setting bit 2 in coprocessor 15, register 1 (Control register). Example 21 shows code that enables the data and mini-data caches. Note that the MMU must be enabled to use the data cache. Example 21. Enabling the Data Cache enableDCache: MCR p15, 0, r0, c7, c10, 4; Drain pending data operations... ; MRC p15, 0, r0, c1, c0, 0; Get current control register ORR r0, r0, #4 ; Enable DCache by setting ‘C’ (bit 2) MCR p15, 0, r0, c1, c0, 0; And update the Control register 3.6.3.3 Invalidate and Clean Operations Individual entries can be invalidated and cleaned in the data cache and mini-data cache via coprocessor 15, register 7. Note that a line locked into the data cache remains locked even after it has been subjected to an invalidate-entry operation. This will leave an unusable line in the cache until a global unlock has occurred. For this reason, do not use these commands on locked lines. This same register also provides the command to invalidate the entire data cache and mini-data cache. These global invalidate commands have no effect on lines locked in the data cache. Locked lines must be unlocked before they can be invalidated. This is accomplished by the Unlock Data Cache command. Hardware Reference Manual 103 Intel® IXP2800 Network Processor Intel XScale® Core 3.6.3.3.1 Global Clean and Invalidate Operation A simple software routine is used to globally clean the data cache. It takes advantage of the lineallocate data cache operation, which allocates a line into the data cache. This allocation evicts any cache dirty data back to external memory. Example 22 shows how data cache can be cleaned. Example 22. Global Clean Operation ; ; ; ; ; Global Clean/Invalidate THE DATA CACHE R1 contains the virtual address of a region of cacheable memory reserved for this clean operation R0 is the loop count; Iterate 1024 times which is the number of lines in the data cache ;; Macro ALLOCATE performs the line-allocation cache operation on the ;; address specified in register Rx. ;; MACRO ALLOCATE Rx MCR P15, 0, Rx, C7, C2, 5 ENDM MOV R0, #1024 LOOP1: ALLOCATE R1 ; ; ; ; Allocate a line at the virtual address specified by R1. Increment the address in R1 to the next cache line Decrement loop count ADD R1, R1, #32 SUBS R0, R0, #1 BNE LOOP1 ; ;Clean the Mini-data Cache ; Can’t use line-allocate command, so cycle 2KB of unused data through. ; R2 contains the virtual address of a region of cacheable memory reserved for ; cleaning the Mini-data Cache ; R0 is the loop count; Iterate 64 times which is the number of lines in the ; Mini-data Cache. MOV R0, #64 LOOP2: LDR R3,[R2],#32 ; Load and increment to next cache line SUBS R0, R0, #1 ; Decrement loop count BNE LOOP2 ; ; Invalidate the data cache and mini-data cache MCR P15, 0, R0, C7, C6, 0 ; The line-allocate operation does not require physical memory to exist at the virtual address specified by the instruction, since it does not generate a load/fill request to external memory. Also, the line-allocate operation does not set the 32 bytes of data associated with the line to any known value. Reading this data will produce unpredictable results. The line-allocate command will not operate on the mini Data Cache, so system software must clean this cache by reading two Kbytes of contiguous unused data into it. This data must be unused and reserved for this purpose so that it will not already be in the cache. It must reside in a page that is marked as mini Data Cache cacheable. The time it takes to execute a global clean operation depends on the number of dirty lines in cache. 104 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.6.4 Reconfiguring the Data Cache as Data RAM Software has the ability to lock tags associated with 32-byte lines in the data cache, thus creating the appearance of data RAM. Any subsequent access to this line will always hit the cache unless it is invalidated. Once a line is locked into the data cache it is no longer available for cache allocation on a line fill. Up to 28 lines in each set can be reconfigured as data RAM, such that the maximum data RAM size is 28 Kbytes. Hardware does not support locking lines into the mini-data cache; any attempt to do this will produce unpredictable results. There are two methods for locking tags into the data cache; the method of choice depends on the application. One method is used to lock data that resides in external memory into the data cache and the other method is used to reconfigure lines in the data cache as data RAM. Locking data from external memory into the data cache is useful for lookup tables, constants, and any other data that is frequently accessed. Reconfiguring a portion of the data cache as data RAM is useful when an application needs scratch memory (bigger than the register file can provide) for frequently used variables. These variables may be strewn across memory, making it advantageous for software to pack them into data RAM memory. Refer to the Intel XScale® Core Developers Manual for code examples. Tags can be locked into the data cache by enabling the data cache lock mode bit located in coprocessor 15, register 9. Once enabled, any new lines allocated into the data cache will be locked down. Note that the PLD instruction will not affect the cache contents if it encounters an error while executing. For this reason, system software should ensure the memory address used in the PLD is correct. If this cannot be ascertained, replace the PLD with a LDR instruction that targets a scratch register. Lines are locked into a set starting at way 0 and may progress up to way 27; which set a line gets locked into depends on the set index of the virtual address of the request. Figure 19 is an example of where lines of code may be locked into the cache along with how the round-robin pointer is affected. Software can lock down data located at different memory locations. This may cause some sets to have more locked lines than others as shown in Figure 19. Lines are unlocked in the data cache by performing an unlock operation. Before locking, the programmer must ensure that no part of the target data range is already resident in the cache. The Intel XScale® core will not refetch such data, which will result in it not being locked into the cache. If there is any doubt as to the location of the targeted memory data, the cache should be cleaned and invalidated to prevent this scenario. If the cache contains a locked region that the programmer wishes to lock again, then the cache must be unlocked before being cleaned and invalidated. Hardware Reference Manual 105 Intel® IXP2800 Network Processor Intel XScale® Core 3.6.5 Write Buffer/Fill Buffer Operation and Control The write buffer is always enabled, which means stores to external memory will be buffered. The K bit in the Auxiliary Control register (CP15, register 1) is a global enable/disable for allowing coalescing in the write buffer. When this bit disables coalescing, no coalescing will occur regardless the value of the page attributes. If this bit enables coalescing, the page attributes X, C, and B are examined to see if coalescing is enabled for each region of memory. All reads and writes to external memory occur in program order when coalescing is disabled in the write buffer. If coalescing is enabled in the write buffer, writes may occur out of program order to external memory. Program correctness is maintained in this case by comparing all store requests with all the valid entries in the fill buffer. The write buffer and fill buffer support a drain operation, such that before the next instruction executes, all the Intel XScale® core data requests to external memory have completed. Writes to a region marked non-cacheable/non-bufferable (page attributes C, B, and X all 0) will cause execution to stall until the write completes. If software is running in a privileged mode, it can explicitly drain all buffered writes. 3.7 Configuration The System Control Coprocessor (CP15) configures the MMU, caches, buffers and other system attributes. Where possible, the definition of CP15 follows the definition of the StrongARM* products. Coprocessor 14 (CP14) contains the performance monitor registers and the trace buffer registers. CP15 is accessed through MRC and MCR coprocessor instructions and allowed only in privileged mode. Any access to CP15 in user mode or with LDC or STC coprocessor instructions will cause an undefined instruction exception. CP14 registers can be accessed through MRC, MCR, LDC, and STC coprocessor instructions and allowed only in privileged mode. Any access to CP14 in user mode will cause an undefined instruction exception. The Intel XScale® core Coprocessors, CP15 and CP14, do not support access via CDP, MRRC, or MCRR instructions. An attempt to access these coprocessors with these instructions will result in an Undefined Instruction exception. Many of the MCR commands available in CP15 modify hardware state sometime after execution. A software sequence is available for those wishing to determine when this update occurs. Like certain other ARM* architecture products, the Intel XScale® core includes an extra level of virtual address translation in the form of a PID (Process ID) register and associated logic. Privileged code needs to be aware of this facility because, when interacting with CP15, some addresses are modified by the PID and others are not. An address that has yet to be modified by the PID (“PIDified”) is known as a virtual address (VA). An address that has been through the PID logic, but not translated into a physical address, is a modified virtual address (MVA). Non-privileged code always deals with VAs, while privileged code that programs CP15 occasionally needs to use MVAs. For details refer to the Intel XScale® Core Developers Manual. 106 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.8 Performance Monitoring The Intel XScale® core hardware provides two 32-bit performance counters that allow two unique events to be monitored simultaneously. In addition, the Intel XScale® core implements a 32-bit clock counter that can be used in conjunction with the performance counters; its sole purpose is to count the number of core clock cycles, which is useful in measuring total execution time. The Intel XScale® core can monitor either occurrence events or duration events. When counting occurrence events, a counter is incremented each time a specified event takes place and when measuring duration, a counter counts the number of processor clocks that occur while a specified condition is true. If any of the three counters overflow, an IRQ or FIQ will be generated if it’s enabled. Each counter has its own interrupt enable. The counters continue to monitor events even after an overflow occurs, until disabled by software. Refer to the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual for more detail. Each of these counters can be programmed to monitor any one of various events. To further augment performance monitoring, the Intel XScale® core clock counter can be used to measure the executing time of an application. This information combined with a duration event can feedback a percentage of time the event occurred with respect to overall execution time. Each of the three counters and the performance monitoring control register are accessible through Coprocessor 14 (CP14), registers 0-3. Access is allowed in privileged mode only. The following are a few notes about controlling the performance monitoring mechanism: • An interrupt will be reported when a counter’s overflow flag is set and its associated interrupt enable bit is set in the PMNC register. The interrupt will remain asserted until software clears the overflow flag by writing a one to the flag that is set. Note: the product specific interrupt unit and the CPSR must have enabled the interrupt in order for software to receive it. • The counters continue to record events even after they overflow. 3.8.1 Performance Monitoring Events Table 24 lists events that may be monitored by the PMU. Each of the Performance Monitor Count registers (PMN0 and PMN1) can count any listed event. Software selects which event is counted by each PMNx register by programming the evtCountx fields of the PMNC register. Table 24. Performance Monitoring Events (Sheet 1 of 2) Event Number (evtCount0 or evtCount1) Event Definition 0x0 Instruction cache miss requires fetch from external memory. 0x1 Instruction cache cannot deliver an instruction. This could indicate an ICache miss or an ITLB miss. This event will occur every cycle in which the condition is present. 0x2 Stall due to a data dependency. This event will occur every cycle in which the condition is present. 0x3 Instruction TLB miss. 0x4 Data TLB miss. 0x5 Branch instruction executed, branch may or may not have changed program flow. 0x6 Branch mispredicted. (B and BL instructions only.) Hardware Reference Manual 107 Intel® IXP2800 Network Processor Intel XScale® Core Table 24. Performance Monitoring Events (Sheet 2 of 2) Event Number (evtCount0 or evtCount1) Event Definition 0x7 Instruction executed. 0x8 Stall because the data cache buffers are full. This event will occur every cycle in which the condition is present. 0x9 Stall because the data cache buffers are full. This event will occur once for each contiguous sequence of this type of stall. 0xA Data cache access, not including Cache Operations 0xB Data cache miss, not including Cache Operations 0xC Data cache write-back. This event occurs once for each ½ line (four words) that are written back from the cache. 0xD Software changed the PC. This event occurs any time the PC is changed by software and there is not a mode change. For example, a mov instruction with PC as the destination will trigger this event. Executing a swi from User mode will not trigger this event, because it will incur a mode change. 0x10 — 0x17 all others Refer to the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual for more details. Reserved, unpredictable results Some typical combination of counted events are listed in this section and summarized in Table 25. In this section, we call such an event combination a mode. Table 25. Some Common Uses of the PMU Mode 3.8.1.1 PMNC.evtCount0 PMNC.evtCount1 Instruction Cache Efficiency 0x7 (instruction count) 0x0 (ICache miss) Data Cache Efficiency 0xA (Dcache access) 0xB (DCache miss) Instruction Fetch Latency 0x1 (ICache cannot deliver) 0x0 (ICache miss) Data/Bus Request Buffer Full 0x8 (DBuffer stall duration) 0x9 (DBuffer stall) Stall/Writeback Statistics 0x2 (data stall) 0xC (DCache writeback) Instruction TLB Efficiency 0x7 (instruction count) 0x3 (ITLB miss) Data TLB Efficiency 0xA (Dcache access) 0x4 (DTLB miss) Instruction Cache Efficiency Mode PMN0 totals the number of instructions that were executed, which does not include instructions fetched from the instruction cache that were never executed. This can happen if a branch instruction changes the program flow; the instruction cache may retrieve the next sequential instructions after the branch, before it receives the target address of the branch. PMN1 counts the number of instruction fetch requests to external memory. Each of these requests loads 32 bytes at a time. Statistics derived from these two events: • Instruction cache miss-rate. This is derived by dividing PMN1 by PMN0. • The average number of cycles it took to execute an instruction or commonly referred to as cycles-per-instruction (CPI). CPI can be derived by dividing CCNT by PMN0, where CCNT was used to measure total execution time. 108 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.8.1.2 Data Cache Efficiency Mode PMN0 totals the number of data cache accesses, which includes cacheable and non-cacheable accesses, mini-data cache access and accesses made to locations configured as data RAM. Note that STM and LDM will each count as several accesses to the data cache depending on the number of registers specified in the register list. LDRD will register two accesses. PMN1 counts the number of data cache and mini-data cache misses. Cache operations do not contribute to this count. The statistic derived from these two events is: • Data cache miss-rate. This is derived by dividing PMN1 by PMN0. 3.8.1.3 Instruction Fetch Latency Mode PMN0 accumulates the number of cycles when the instruction-cache is not able to deliver an instruction to the Intel XScale® core due to an instruction-cache miss or instruction-TLB miss. This event means that the processor core is stalled. PMN1 counts the number of instruction fetch requests to external memory. Each of these requests loads 32 bytes at a time. This is the same event as measured in instruction cache efficiency mode and is included in this mode for convenience so that only one performance monitoring run is need. Statistics derived from these two events: • The average number of cycles the processor stalled waiting for an instruction fetch from external memory to return. This is calculated by dividing PMN0 by PMN1. If the average is high then the Intel XScale® core may be starved of the bus external to the Intel XScale® core. • The percentage of total execution cycles the processor stalled waiting on an instruction fetch from external memory to return. This is calculated by dividing PMN0 by CCNT, which was used to measure total execution time. 3.8.1.4 Data/Bus Request Buffer Full Mode The Data Cache has buffers available to service cache misses or uncacheable accesses. For every memory request that the Data Cache receives from the processor core, a buffer is speculatively allocated in case an external memory request is required or temporary storage is needed for an unaligned access. If no buffers are available, the Data Cache will stall the processor core. The frequency of Data Cache stalls depends on the performance of the bus external to the Intel XScale® core and what the memory access latency is for Data Cache miss requests to external memory. If the Intel XScale® core memory access latency is high (possibly due to starvation) these Data Cache buffers will become full. This performance monitoring mode is provided to determine whether the Intel XScale® core is being starved of the bus external to the Intel XScale® core — which affects the performance of the application running on the Intel XScale® core. PMN0 accumulates the number of clock cycles by which the processor is stalled due to this condition and PMN1 monitors the number of times this condition occurs. Hardware Reference Manual 109 Intel® IXP2800 Network Processor Intel XScale® Core Statistics derived from these two events: • The average number of cycles the processor stalled on a data-cache access that may overflow the data-cache buffers. This is calculated by dividing PMN0 by PMN1. This statistic lets you know if the duration event cycles are due to many requests or are attributed to just a few requests. If the average is high, the Intel XScale® core may be starved of the bus external to the Intel XScale® core. • The percentage of total execution cycles the processor stalled because a Data Cache request buffer was not available. This is calculated by dividing PMN0 by CCNT, which was used to measure total execution time. 3.8.1.5 Stall/Writeback Statistics When an instruction requires the result of a previous instruction and that result is not yet available, the Intel XScale® core stalls, to preserve the correct data dependencies. PMN0 counts the number of stall cycles due to data dependencies. Not all data dependencies cause a stall; only the following dependencies cause such a stall penalty: • Load-use penalty: attempting to use the result of a load before the load completes. To avoid the penalty, software should delay using the result of a load until it’s available. This penalty shows the latency effect of data-cache access. • Multiply/Accumulate-use penalty: attempting to use the result of a multiply or multiply- accumulate operation before the operation completes. Again, to avoid the penalty, software should delay using the result until it’s available. • ALU use penalty: there are a few isolated cases where back-to-back ALU operations may result in one cycle delay in the execution. PMN1 counts the number of writeback operations emitted by the data cache. These writebacks occur when the data cache evicts a dirty line of data to make room for a newly requested line or as the result of clean operation (CP15, register 7). Statistics derived from these two events: • The percentage of total execution cycles the processor stalled because of a data dependency. This is calculated by dividing PMN0 by CCNT, which was used to measure total execution time. Often, a compiler can reschedule code to avoid these penalties when given the right optimization switches. • Total number of data writeback requests to external memory can be derived solely with PMN1. 110 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.8.1.6 Instruction TLB Efficiency Mode PMN0 totals the number of instructions that were executed, which does not include instructions that were translated by the instruction TLB and never executed. This can happen if a branch instruction changes the program flow; the instruction TLB may translate the next sequential instructions after the branch, before it receives the target address of the branch. PMN1 counts the number of instruction TLB table-walks that occurs when there is a TLB miss. If the instruction TLB is disabled, PMN1 will not increment. Statistics derived from these two events: • Instruction TLB miss-rate. This is derived by dividing PMN1 by PMN0. • The average number of cycles it took to execute an instruction or commonly referred to as cycles-per-instruction (CPI). CPI can be derived by dividing CCNT by PMN0, where CCNT was used to measure total execution time. 3.8.1.7 Data TLB Efficiency Mode PMN0 totals the number of data cache accesses, which includes cacheable and non-cacheable accesses, mini-data cache access and accesses made to locations configured as data RAM. Note that STM and LDM will each count as several accesses to the data TLB depending on the number of registers specified in the register list. LDRD will register two accesses. PMN1 counts the number of data TLB table-walks, which occurs when there is a TLB miss. If the data TLB is disabled PMN1 will not increment. The statistic derived from these two events is: • Data TLB miss-rate. This is derived by dividing PMN1 by PMN0. 3.8.2 Multiple Performance Monitoring Run Statistics Even though only two events can be monitored at any given time, multiple performance monitoring runs can be done, capturing different events from different modes. For example, the first run could monitor the number of writeback operations (PMN1 of mode, Stall/Writeback) and the second run could monitor the total number of data cache accesses (PMN0 of mode, Data Cache Efficiency). From the results, a percentage of writeback operations to the total number of data accesses can be derived. 3.9 Performance Considerations This section describes relevant performance considerations that compiler writers, application programmers, and system designers need to be aware of to efficiently use the Intel XScale® core. Performance numbers discussed here include interrupt latency, branch prediction, and instruction latencies. Hardware Reference Manual 111 Intel® IXP2800 Network Processor Intel XScale® Core 3.9.1 Interrupt Latency Minimum Interrupt Latency is defined as the minimum number of cycles from the assertion of any interrupt signal (IRQ or FIQ) to the execution of the instruction at the vector for that interrupt. The point at which the assertion begins is TBD. This number assumes best case conditions exist when the interrupt is asserted, e.g., the system isn’t waiting on the completion of some other operation. A useful number to work with is the Maximum Interrupt Latency. This is typically a complex calculation that depends on what else is going on in the system at the time the interrupt is asserted. Some examples that can adversely affect interrupt latency are: • • • • The instruction currently executing could be a 16-register LDM. The processor could fault just when the interrupt arrives. The processor could be waiting for data from a load, doing a page table walk, etc. There are high core-to-system (bus) clock ratios. Maximum Interrupt Latency can be reduced by: • Ensuring that the interrupt vector and interrupt service routine are resident in the instruction cache. This can be accomplished by locking them down into the cache. • Removing or reducing the occurrences of hardware page table walks. This also can be accomplished by locking down the application’s page table entries into the TLBs, along with the page table entry for the interrupt service routine. 3.9.2 Branch Prediction The Intel XScale® core implements dynamic branch prediction for the ARM* instructions B and BL and for the Thumb instruction B. Any instruction that specifies the PC as the destination is predicted as not taken. For example, an LDR or a MOV that loads or moves directly to the PC will be predicted not taken and incur a branch latency penalty. These instructions -- ARM B, ARM BL and Thumb B -- enter into the branch target buffer when they are “taken” for the first time. (A “taken” branch refers to when they are evaluated to be true.) Once in the branch target buffer, the Intel XScale® core dynamically predicts the outcome of these instructions based on previous outcomes. Table 26 shows the branch latency penalty when these instructions are correctly predicted and when they are not. A penalty of 0 for correct prediction means that the Intel XScale® core can execute the next instruction in the program flow in the cycle following the branch. Table 26. Branch Latency Penalty Core Clock Cycles Description ARM* Thumb +0 +0 Predicted Correctly. The instruction is in the branch target cache and is correctly predicted. +5 Mispredicted. There are three occurrences of branch misprediction, all of which incur a 4-cycle branch delay penalty. 1. The instruction is in the branch target buffer and is predicted not-taken, but is actually taken. 2. The instruction is not in the branch target buffer and is a taken branch. 3. The instruction is in the branch target buffer and is predicted taken, but is actually not-taken +4 112 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.9.3 Addressing Modes All load and store addressing modes implemented in the Intel XScale® core do not add to the instruction latencies numbers. 3.9.4 Instruction Latencies The latencies for all the instructions are shown in the following sections with respect to their functional groups: branch, data processing, multiply, status register access, load/store, semaphore, and coprocessor. The following section explains how to read these tables. 3.9.4.1 Performance Terms • Issue Clock (cycle 0) The first cycle when an instruction is decoded and allowed to proceed to further stages in the execution pipeline (i.e., when the instruction is actually issued). • Cycle Distance from A to B The cycle distance from cycle A to cycle B is (B-A) – that is, the number of cycles from the start of cycle A to the start of cycle B. Example: the cycle distance from cycle 3 to cycle 4 is one cycle. • Issue Latency The cycle distance from the first issue clock of the current instruction to the issue clock of the next instruction. The actual number of cycles can be influenced by cache-misses, resourcedependency stalls, and resource availability conflicts. • Result Latency The cycle distance from the first issue clock of the current instruction to the issue clock of the first instruction that can use the result without incurring a resource dependency stall. The actual number of cycles can be influenced by cache-misses, resource-dependency stalls, and resource availability conflicts • Minimum Issue Latency (without Branch Misprediction) The minimum cycle distance from the issue clock of the current instruction to the first possible issue clock of the next instruction assuming best case conditions (i.e., that the issuing of the next instruction is not stalled due to a resource dependency stall; the next instruction is immediately available from the cache or memory interface; the current instruction does not incur resource dependency stalls during execution that cannot be detected at issue time; and if the instruction uses dynamic branch prediction, correct prediction is assumed). • Minimum Result Latency The required minimum cycle distance from the issue clock of the current instruction to the issue clock of the first instruction that can use the result without incurring a resource dependency stall assuming best case conditions (i.e., that the issuing of the next instruction is not stalled due to a resource dependency stall; the next instruction is immediately available from the cache or memory interface; and the current instruction does not incur resource dependency stalls during execution that cannot be detected at issue time). • Minimum Issue Latency (with Branch Misprediction) The minimum cycle distance from the issue clock of the current branching instruction to the first possible issue clock of the next instruction. This definition is identical to Minimum Issue Latency except that the branching instruction has been mispredicted. It is calculated by adding Hardware Reference Manual 113 Intel® IXP2800 Network Processor Intel XScale® Core Minimum Issue Latency (without Branch Misprediction) to the minimum branch latency penalty number from Table 26, which is four cycles. • Minimum Resource Latency The minimum cycle distance from the issue clock of the current multiply instruction to the issue clock of the next multiply instruction assuming the second multiply does not incur a data dependency and is immediately available from the instruction cache or memory interface. Example 23 contains a code fragment and an example of computing latencies. Example 23. Computing Latencies UMLALr6,r8,r0,r1 ADD r9,r10,r11 SUB r2,r8,r9 MOV r0,r1 Table 27 shows how to calculate Issue Latency and Result Latency for each instruction. Looking at the issue column, the UMLAL instruction starts to issue on cycle 0 and the next instruction, ADD, issues on cycle 2, so the Issue Latency for UMLAL is two. From the code fragment, there is a result dependency between the UMLAL instruction and the SUB instruction. In Table 27, UMLAL starts to issue at cycle 0 and the SUB issues at cycle 5; so the Result Latency is 5. Table 27. Latency Example Cycle 114 Issue Executing 0 umlal (1st cycle) -- 1 umlal (2nd cycle) umlal 2 add umlal 3 sub (stalled) umlal & add 4 sub (stalled) umlal 5 sub umlal 6 mov sub 7 -- mov Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.9.4.2 Branch Instruction Timings Table 28. Branch Instruction Timings (Predicted by the BTB) Mnemonic Minimum Issue Latency when Correctly Predicted by the BTB Minimum Issue Latency with Branch Misprediction B 1 5 BL 1 5 ( Table 29. Branch Instruction Timings (Not Predicted by the BTB) 1. 3.9.4.3 Mnemonic Minimum Issue Latency when the branch is not taken Minimum Issue Latency when the branch is taken BLX(1) N/A 5 BLX(2) 1 5 BX 1 5 Data Processing Instruction with PC as the destination Same as Table 30 4 + numbers in Table 30 LDR PC,<> 2 8 LDM with PC in register list 3 + numreg1 10 + max (0, numreg-3) numreg is the number of registers in the register list including the PC. Data Processing Instruction Timings Table 30. Data Processing Instruction Timings Mnemonic 1.is not a Shift/Rotate by Register is a Shift/Rotate by Register or is RRX Minimum Issue Latency Minimum Result Latency1 Minimum Issue Latency Minimum Result Latency1 ADC 1 1 2 2 ADD 1 1 2 2 AND 1 1 2 2 BIC 1 1 2 2 CMN 1 1 2 2 CMP 1 1 2 2 EOR 1 1 2 2 MOV 1 1 2 2 MVN 1 1 2 2 ORR 1 1 2 2 RSB 1 1 2 2 RSC 1 1 2 2 SBC 1 1 2 2 SUB 1 1 2 2 TEQ 1 1 2 2 TST 1 1 2 2 If the next instruction needs to use the result of the data processing for a shift by immediate or as Rn in a QDADD or QDSUB, one extra cycle of result latency is added to the number listed. Hardware Reference Manual 115 Intel® IXP2800 Network Processor Intel XScale® Core 3.9.4.4 Multiply Instruction Timings Table 31. Multiply Instruction Timings (Sheet 1 of 2) Mnemonic MLA Rs Value (Early Termination) S-Bit Value Minimum Issue Latency Minimum Result Latency1 Minimum Resource Latency (Throughput) Rs[31:15] = 0x00000 or Rs[31:15] = 0x1FFFF 0 1 2 1 1 2 2 2 Rs[31:27] = 0x00 or Rs[31:27] = 0x1F 0 1 3 2 1 3 3 3 0 1 4 3 1 4 4 4 Rs[31:15] = 0x00000 or Rs[31:15] = 0x1FFFF 0 1 2 1 1 2 2 2 Rs[31:27] = 0x00 or Rs[31:27] = 0x1F 0 1 3 2 1 3 3 3 0 1 4 3 1 4 4 4 Rs[31:15] = 0x00000 or Rs[31:15] = 0x1FFFF 0 2 RdLo = 2; RdHi = 3 2 1 3 3 3 Rs[31:27] = 0x00 or Rs[31:27] = 0x1F 0 2 RdLo = 3; RdHi = 4 3 1 4 4 4 0 2 RdLo = 4; RdHi = 5 4 1 5 5 5 all others MUL all others SMLAL all others SMLALxy N/A N/A 2 RdLo = 2; RdHi = 3 2 SMLAWy N/A N/A 1 3 2 SMLAxy N/A N/A 1 2 1 Rs[31:15] = 0x00000 or Rs[31:15] = 0x1FFFF 0 1 RdLo = 2; RdHi = 3 2 1 3 3 3 Rs[31:27] = 0x00 or Rs[31:27] = 0x1F 0 1 RdLo = 3; RdHi = 4 3 1 4 4 4 0 1 RdLo = 4; RdHi = 5 4 1 5 5 5 SMULL all others SMULWy N/A N/A 1 3 2 SMULxy N/A N/A 1 2 1 0 2 RdLo = 2; RdHi = 3 2 1 3 3 3 0 2 RdLo = 3; RdHi = 4 3 1 4 4 4 0 2 RdLo = 4; RdHi = 5 4 1 5 5 5 Rs[31:15] = 0x00000 UMLAL Rs[31:27] = 0x00 all others 116 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Table 31. Multiply Instruction Timings (Sheet 2 of 2) Rs Value (Early Termination) Mnemonic Minimum Issue Latency Minimum Result Latency1 0 1 RdLo = 2; RdHi = 3 2 1 3 3 3 0 1 RdLo = 3; RdHi = 4 3 1 4 4 4 0 1 RdLo = 4; RdHi = 5 4 1 5 5 5 Rs[31:15] = 0x00000 UMULL Rs[31:27] = 0x00 all others 1. Minimum Resource Latency (Throughput) S-Bit Value If the next instruction needs to use the result of the multiply for a shift by immediate or as Rn in a QDADD or QDSUB, one extra cycle of result latency is added to the number listed. Table 32. Multiply Implicit Accumulate Instruction Timings Rs Value (Early Termination) Minimum Issue Latency Minimum Result Latency Minimum Resource Latency (Throughput) Rs[31:16] = 0x0000 or Rs[31:16] = 0xFFFF 1 1 1 Rs[31:28] = 0x0 or Rs[31:28] = 0xF 1 2 2 all others 1 3 3 MIAxy N/A 1 1 1 MIAPH N/A 1 2 2 Mnemonic MIA Table 33. Implicit Accumulator Access Instruction Timings Mnemonic MAR MRA 1. 3.9.4.5 Minimum Issue Latency Minimum Result Latency Minimum Resource Latency (Throughput) 2 2 2 1 (RdLo = 2; RdHi = 3)1 2 If the next instruction needs to use the result of the MRA for a shift by immediate or as Rn in a QDADD or QDSUB, one extra cycle of result latency is added to the number listed. Saturated Arithmetic Instructions h Table 34. Saturated Data Processing Instruction Timings Minimum Issue Latency Minimum Result Latency QADD Mnemonic 1 2 QSUB 1 2 QDADD 1 2 QDSUB 1 2 Hardware Reference Manual 117 Intel® IXP2800 Network Processor Intel XScale® Core 3.9.4.6 Status Register Access Instructions Table 35. Status Register Access Instruction Timings Mnemonic 3.9.4.7 Minimum Issue Latency Minimum Result Latency MRS 1 2 MSR 2 (6 if updating mode bits) 1 Load/Store Instructions Table 36. Load and Store Instruction Timings Mnemonic Minimum Issue Latency Minimum Result Latency LDR 1 3 for load data; 1 for writeback of base LDRB 1 3 for load data; 1 for writeback of base LDRBT 1 3 for load data; 1 for writeback of base LDRD 1 (+1 if Rd is R12) 3 for Rd; 4 for Rd+1; 2 for writeback of base LDRH 1 3 for load data; 1 for writeback of base LDRSB 1 3 for load data; 1 for writeback of base LDRSH 1 3 for load data; 1 for writeback of base LDRT 1 3 for load data; 1 for writeback of base PLD 1 N/A STR 1 1 for writeback of base STRB 1 1 for writeback of base STRBT 1 1 for writeback of base STRD 2 1 for writeback of base STRH 1 1 for writeback of base STRT 1 1 for writeback of base Table 37. Load and Store Multiple Instruction Timings Minimum Issue Latency1 Minimum Result Latency LDM 3 – 23 1 – 3 for load data; 1 for writeback of base STM 3 – 18 1 for writeback of base Mnemonic 1. 3.9.4.8 LDM issue latency is 7 + N if R15 is in the register list and 2 + N if it is not. STM issue latency is calculated as 2 + N. N is the number of registers to load or store. Semaphore Instructions Table 38. Semaphore Instruction Timings Mnemonic 118 Minimum Issue Latency Minimum Result Latency SWP 5 5 SWPB 5 5 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.9.4.9 Coprocessor Instructions Table 39. CP15 Register Access Instruction Timings Mnemonic Minimum Issue Latency Minimum Result Latency MRC 4 4 MCR 2 N/A Table 40. CP14 Register Access Instruction Timings Mnemonic 3.9.4.10 Minimum Issue Latency Minimum Result Latency MRC 7 7 MCR 7 N/A LDC 10 N/A STC 7 N/A Miscellaneous Instruction Timing Table 41. SWI Instruction Timings Mnemonic Minimum latency to first instruction of SWI exception handler SWI 6 Table 42. Count Leading Zeros Instruction Timings Mnemonic Minimum Issue Latency Minimum Result Latency 1 1 CLZ 3.9.4.11 Thumb Instructions The timing of Thumb instructions are the same as their equivalent ARM* instructions. This mapping can be found in the ARM* Architecture Reference Manual. The only exception is the Thumb BL instruction when H = 0; the timing in this case would be the same as an ARM* data processing instruction. 3.10 Test Features This section gives a brief overview of the Intel XScale® core JTAG features. The Intel XScale® core provides test features compatible with the IEEE Standard Test Access Port and Boundary Scan Architecture (IEEE Std. 1149.1). These features include a TAP controller, a 5-bit instruction register, and test data registers to support software debug. The Intel XScale® core also provides support for a boundary-scan register, device ID register, and other data test registers. A full description of these features can be found in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Hardware Reference Manual 119 Intel® IXP2800 Network Processor Intel XScale® Core 3.10.1 IXP2800 Network Processor Endianness Endianness defines the way bytes are addressed within a word. A little-endian system is one in which byte 0 is the least significant byte (LSB) in the word and byte 3 is the most significant byte (MSB). A big-endian system is one in which byte 0 is the MSB and byte 3 is the LSB. For example, the value of 0x12345678 at address 0x0 in a 32-bit little-endian system looks like this: Table 43. Little-Endian Encoding Address/Byte Lane 0x0/ByteLane 3 0x0/ByteLane 2 0x0/ByteLane 1 0x0/ByteLane 0 Byte Value 0x12 0x34 0x56 0x78 The same value stored in a big-endian system is shown in Table 44: Table 44. Big-Endian Encoding Address/Byte Lane 0x0/ByteLane 3 0x0/ByteLane 2 0x0/ByteLane 1 0x0/ByteLane 0 Byte Value 0x78 0x56 0x34 0x12 Bits within a byte are always in little-endian order. The least significant bit resides at bit location 0 and the most significant bit resides at bit location 7 (7:0). The following conventions are used in this document: 1 Byte: 8-bit data 1 Word: 16-bit data 1 Longword: 32-bit data Longword Little-Endian Format (LWLE) 32-bit data (0x12345678) arranged as {12 34 56 78} 64-bit data 0x12345678 9ABCDE56 arranged as {12 34 56 78 9A BC DE 56} Longword Big-Endian format (LWBE): 32-bit data (0x12345678) arranged as {78 56 34 12} 64-bit data 0x12345678 9ABCDE56 arranged as {78 56 34 12, 56 DE BC 9A} Endianness for the IXP2800 network processor can be divided into three major categories: • Read and write transactions initiated by the Intel XScale® core: — Reads initiated by the Intel XScale® core — Writes initiated by the Intel XScale® core • SRAM and DRAM access: — 64-bit Data transfer between DRAM and the Intel XScale® core — Byte, word, or longword transfer between SRAM/DRAM and the Intel XScale® core — Data transfer between SRAM/DRAM and PCI — Microengine-initiated access to SRAM and DRAM • PCI Accesses — Intel XScale® core generated reads/writes to PCI in memory space — Intel XScale® core generated read/write of external/internal PCI configuration registers 120 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.10.1.1 Read and Write Transactions Initiated by the Intel XScale® Core The Intel XScale® core may be used in either a little-endian or big-endian configuration. The configuration affects the entire system in which the Intel XScale® core microarchitecture exists. Software and hardware must agree on the byte ordering to be used. In software, a system’s byte order is configured with CP15 register 1, the control register. Bit 7 of this register, the B bit, informs the processor of the byte order in use by the system. Note that this bit takes effect even if the MMU is not otherwise in use or enabled. The state of this bit is reflected in the cbiBigEndian signal. Although it is the responsibility of system hardware to assign correct byte lanes to each byte field in the data bus, in the IXP2800 network processor, it is left to the software to interpret byte lanes in accordance with the endianness of the system. As shown in Figure 24, system byte lanes 0 – 3 are connected directly to the Intel XScale® core byte lanes 0 – 3. This means that byte lane 0 (M[7:0]) of the system is connected to byte lane 0 (X[7:0]) of the Intel XScale® core, byte lane 1 (M[15:8]) of the system is connected to byte lane 1 (X[15:8]) of the Intel XScale® core, etc. Interface operation of the Intel XScale® core and the rest of the IXP2800 network processor can be divided into two parts: • Intel XScale® core reading from the IXP2800 network processor • Intel XScale® core writing to the IXP2800 network processor 3.10.1.1.1 Reads Initiated by the Intel XScale® Core Intel XScale® core reads can be one of the following three types: • Byte read • 16-bits (word) read • 32-bits (longword) read Byte Read When reading a byte, the Intel XScale® core generates the byte_enable that corresponds to the proper byte lane as defined by the endianness setting. Table 45 summarizes byte-enable generation for this mode. Table 45. Byte-Enable Generation by the Intel XScale® Core for Byte Transfers in Little- and Big-Endian Systems Byte Number to be Read Byte-Enables for Little-Endian System Byte-Enables for Big-Endian System X_BE[0] X_BE[1] X_BE[2] X_BE[3] X_BE[0] X_BE[1] X_BE[2] X_BE[3] Byte 0 1 0 0 0 0 0 0 1 Byte 1 0 1 0 0 0 0 1 0 Byte 2 0 0 1 0 0 1 0 0 Byte 3 0 0 0 1 1 0 0 0 The 4-to-1 multiplexer steers the byte read into the byte lane 0 location of the read register inside the Intel XScale® core. Select signals for the multiplexer are generated based on endian setting and ByteEnable generated by the Intel XScale® core as defined in Figure 24. Hardware Reference Manual 121 Intel® IXP2800 Network Processor Intel XScale® Core 16-Bit (Word) Read When reading a word, the Intel XScale® core generates the byte_enable that corresponds to the proper byte lane as defined by the endianness setting. Figure 25 summarizes byte enable generation for this mode. The 4-to-1 multiplexer steers byte lane 0 or byte lane 2 into the byte 0 location of the read register inside the Intel XScale® core. The 2-to-1 multiplexer steers byte lane 1 or byte lane 3 into the byte 1 location of the read register inside the Intel XScale® core. The Intel XScale® core does not allow word access to an odd-byte address. Select signals for the multiplexer are generated based on endian setting and ByteEnable generated by the Intel XScale® core, as defined in Figure 24. Table 46 summarizes byte-enable generation for this mode. Figure 24. Byte Steering for Read and Byte-Enable Generation by the Intel XScale® Core Intel XScale® Core D[7:0] X[7:0] Byte 0 0 S0 1 2 3 D[15:8] M[7:0] X[15:8] Byte 1 S1 0 1 BE1 BE2 BE3 M[23:16] X[31:24] Byte 3 D[31:24] BE0 M[15:8] X[23:16] Byte 2 D[23:16] Intel® IXP2800 Core Gasket M[31:24] 0 1 X_BE[0] 0 1 X_BE[1] 0 1 X_BE[2] 0 1 X_BE[3] Big Endian =0 Little Endian = 1 Notes: For 32-bit Operation S0[3:0] = 0001; S1[1:0] = 01 Otherwise: S0[3:0] = X_BE[3:0]; S1[1:0] = X_BE[1:2] A9694-03 122 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Table 46. Byte-Enable Generation by the Intel XScale® Core for 16-Bit Data Transfers in Littleand Big-Endian Systems Word to be Read Byte-Enables for Little-Endian System Byte-Enables for Big-Endian System X_BE[0] X_BE[1] X_BE[2] X_BE[3] X_BE[0] X_BE[1] X_BE[2] X_BE[3] Byte 0, Byte 1 1 1 0 0 0 0 1 1 Byte 2, Byte 3 0 0 1 1 1 1 0 0 32-Bit (Longword) Read 32-bit (longword) reads are independent of endianness. Byte lane 0 from the Intel XScale® core’s data bus gets into the byte 0 location of the read register inside the Intel XScale® core, byte lane 1 from the Intel XScale® core’s data bus gets into the byte 1 location of the read register inside the Intel XScale® core, etc. The software determines byte location, based on the endian setting. 3.10.1.1.2 The Intel XScale® Core Writing to the IXP2800 Network Processor Writes by the Intel XScale® core can also be divided into the following three categories: • Byte Write • Word Write (16 bits) • Longword write (32 bits) Byte Write When the Intel XScale® core writes a single byte to external memory, it puts the byte in the byte lane where it intends to write it, along with the byte enable for that byte turned ON, based on the endian setting of the system. Intel XScale® core register bits [7:0] always contain the byte to be written, regardless of the B-bit setting. For example, if the Intel XScale® core wants to write to byte 0 in the little-endian system, it puts the byte in byte lane 0 and turns X_BE[0] to ON. If the system is big-endian, the Intel XScale® core puts byte 0 in byte lane 3 and turns X_BE[3] to ON. Other possible combinations of byte lanes and byte enables are shown in the Table 47. Byte lanes other than the one currently being driven by the Intel XScale® core, contain undefined data. Table 47. Byte-Enable Generation by the Intel XScale® Core for Byte Writes in Little- and Big-Endian Systems Byte Number to be Written Byte-Enables for Little-Endian Systems Byte-Enables for Big-Endian Systems X_BE[0] X_BE[1] X_BE[2] X_BE[3] X_BE[0] X_BE[1] X_BE[2] X_BE[3] Byte 0 1 0 0 0 0 0 0 1 Byte 1 0 1 0 0 0 0 1 0 Byte 2 0 0 1 0 0 1 0 0 Byte 3 0 0 0 1 1 0 0 0 Hardware Reference Manual 123 Intel® IXP2800 Network Processor Intel XScale® Core Word Write (16-Bits Write) When the Intel XScale® core writes a 16-bit word to external memory, it puts the bytes in the byte lanes where it intends to write them along with the byte enables for those bytes turned ON based on the endian setting of the system. The Intel XScale® core does not allow a word write on an odd-byte address. The Intel XScale® core register bits [15:0] always contain the word to be written regardless of the B-bit setting. For example, if the Intel XScale® core wants to write one word to a little-endian system at address 0x0002, it will copy byte 0 to byte lane 2 and byte 1 to byte lane 3 along with X_BE[2] and X_BE[3] turned ON. If the Intel XScale® core wants to write one word to a big-endian system at address 0x0002, it will copy byte 0 to byte lane 0 and byte 1 to byte lane 1 along with X_BE[0] and X_BE[1] turned ON. Table 48 shows other possible combinations of byte lanes and byte enables. Byte lanes other than those currently driven by the Intel XScale® core contain undefined data. Table 48. Byte-Enable Generation by the Intel XScale® Core for Word Writes in Little- and Big-Endian Systems Word to be Written Byte-Enables for Little-Endian Systems Byte-Enables for Big-Endian Systems X_BE[0] X_BE[1] X_BE[2] X_BE[3] X_BE[0] X_BE[1] X_BE[2] X_BE[3] Byte 0, Byte 1 1 1 0 0 0 0 1 1 Byte 2, Byte 3 0 0 1 1 1 1 0 0 Longword (32-Bits) Write The longword to be written is put on the Intel XScale® core’s data bus with byte 0 on X[7:0], byte 1 on X[15:8], byte 2 on X[23:16], and byte 4 on X[31:24] (see Figure 25). All of the byte enables are turned ON. A 32-bit longword write (0x12345678) by the Intel XScale® core to address 0x0000 regardless of endianness, causes byte 0 (0x78) to be written to address 0x0000, byte 1 (0x56) to address 0x0001, byte 2 (0x34) to address 0x0002, and byte 3 (0x12) to address 0x0003. Figure 25. Intel XScale® Core-Initiated Write to the IXP2800 Network Processor Byte Write by Intel XScale® Core Byte Write X [7:0] M[7:0] Intel® IXP2800 Core Gasket X_BE [0] X [15:8] M[15:8] X_BE [1] X [23:18] M[23:16] X_BE [2] X [31:24] M[31:24] X_BE [3] A9695-03 124 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 26. Intel XScale® Core-Initiated Write to the IXP2800 Network Processor (Continued) Word Write by Intel XScale® Core Intel® IXP2800 Network Processor X [7:0] Byte 0 Write Word 0 M[7:0] Byte 1 Write X_BE [0] X [15:8] M[15:8] X_BE [1] X [23:18] Word 1 M[23:16] X_BE [2] X [31:24] M[31:24] X_BE [3] Long Word (32 bits)Write by Intel XScale® Core Intel® IXP2800 Network Processor Byte 0 Write X [7:0] M[7:0] X_BE [0] Byte 1 Write X [15:8] M[15:8] X_BE [1] Byte 2 Write X [23:18] M[23:16] X_BE [2] Byte 3 Write X [31:24] M[31:24] X_BE [3] A9696-03 3.11 Intel XScale® Core Gasket Unit 3.11.1 Overview The Intel XScale® core uses the Core Memory Bus (CMB) to communicate with the functional blocks. The rest of the IXP2800 Network Processor functional blocks use the Command Push Pull (CPP) as the global bus to pass data. Therefore, the gasket is needed to translate Core Memory Bus commands to Command Push Pull commands. This gasket has a set of local CSRs, including interrupt registers. These registers can be accessed by the Intel XScale® core via the gasket internal bus.The CSR Access Proxy (CAP) is only allowed to do a set on these interrupt registers. Hardware Reference Manual 125 Intel® IXP2800 Network Processor Intel XScale® Core The Intel XScale® core coprocessor bus is not used in the IXP2800 Network Processors, therefore all accesses are only through the Command Memory Bus. Figure 27 shows the block diagram of the global bus connections to the gasket. The gasket unit has the following features: • Interrupts are sent to the Intel XScale® core via the gasket, with the interrupt controller registers used for masking the interrupts. • The gasket converts CMB reads and writes to CPP format. • All the atomic operations are applied on SRAM and SCRATCH only, not DRAM. • There is a stepping-stone sitting between the Intel XScale® core and the gasket. The Intel XScale® core runs at 600 – 700 MHz. The gasket currently supports a 1:1 (IXP2800 Network Processor) clock ratio. For a 2:1 ratio, the Command Push Pull bus will be running at ½ of the frequency of the Intel XScale® core. • In IXP2800 memory controllers, read after write ordering is enforced. There is no write after read enforcement for the Intel XScale® core. The gasket will perform enforcement by employing Content Addressable Memory (CAM) to detect a write to an address with read pending. This only applies for writes to SRAM. • The gasket CPP interface contains one command bus, one D_Push bus, one D_Pull bus, one S_Push bus, and one S_Pull bus, each with a 32-bit data width. A maximum four outstanding reads and four outstanding writes from the Intel XScale® core are allowed. Figure 27. Global Buses Connection to the Intel XScale® Core Gasket Intel XScale® Core Gasket Local CSR Req CAP CSR CMD_BUS SRAM_PULL_BUS SRAM_PUSH_BUS DRAM_PULL_BUS DRAM_PUSH_BUS A9697-03 126 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.11.2 Intel XScale® Core Gasket Functional Description 3.11.2.1 Command Memory Bus to Command Push/Pull Conversion The primary function of the Intel XScale® core gasket unit is to translate commands initiated from the Intel XScale® core in the Intel XScale® core command bus format, into the IXP2800 internal command format (Command Push/Pull format). Table 49 shows how many CPP commands are generated by the gasket from each CMB command. Write data is guaranteed to be 32-bit (longword) aligned. Table 49 shows only the Store command. In the Load case, the gasket simply converts it to the CPP format. No command splitting is required. A Load can only be a byte (8 bits), a word (16 bits), longword (32 bits), or eight longwords (8x32). Table 49. CMB Write Command to CPP Command Conversion Store Length CPP SRAM Cmd Count CPP DRAM Cmd Count Byte, word, longword 1 1 2 longwords 1 or 2 1 or 2 3 longwords 1 or 3 2 Remark SRAM uses 4-bit mask, and DRAM uses an 8-bit mask. SRAM: If there is any mask bit detected as ‘0’,two commands will be generated. DRAM: If it starts with odd word address, two commands will be generated. SRAM: If there is a mask bit of ‘0’ detected, Three SRAM commands will be generated. DRAM: always two DRAM commands. 4 longwords 1 or 4 1 or 2 8 longwords 3.11.3 SRAM: If there is a mask bit of ‘0’ detected, four commands will be generated. DRAM: If there is a mask bit of ‘0’ detected, two commands will be generated. Not allowed in a write. CAM Operation In the SRAM controller, access ordering is guaranteed only for a read coming after a write. The gasket enforces order rules in the following two cases. 1. Write coming after a read. 2. Read-Modify-Write coming after read. The address CAMing is on 8-word boundaries. The SRAM effective address is 28 bits. Deduct five bits (two bits for the word address and three bits for eight words), and the tag width for the CAM is 23 bits wide. The CAM only operates on SRAM accesses. Hardware Reference Manual 127 Intel® IXP2800 Network Processor Intel XScale® Core 3.11.4 Atomic Operations The Intel XScale® core has Swap (SWP) and Swap Byte (SWPB) instructions that generate an atomic read-write pair to a single address. These instructions are supported for the SRAM and Scratch space, and also to any other address space if it is done by a Read command followed by Write command. cbiIO is asserted when a data cache request is initiated to a memory region with cacheable and bufferable bits in the translation table first-level descriptor set to 0. Also, if cbiIO is asserted during the CMB read portion of the SWP, then it also does a Read Command followed by Write Command, regardless of address. In those cases, the SWP/SWPB is atomic with respect to processes running on the Intel XScale® core, but not with respect to the Microengines. The following summarizes the Atomic operation. Address Space cbiIO Operation SRAM/Scratch 0 RMW Command Not SRAM/Scratch x Read Command followed by Write Command Any 1 Read Command followed by Write Command When the Intel XScale® core presents the read command portion of the SWP, it will assert the cbiLock signal. The gasket will “ack” the read and save the BufID in the push_ff. It will not arbitrate for the command bus at that time; rather it will wait for the corresponding write of the SWP (which will also have cbiLock asserted). At that time the gasket will arbitrate for the command bus to send a command with the atomic operation in the command field (the command is based on the address space chosen for the SRAM/Scratch, which has multiple aliased address ranges). The SRAM or Scratch controller will pull the data, do the atomic read-modify-write, and then push the read data back. The gasket will use the saved BufID when returning the data to CMB. Note: Unrelated reads, such as instruction and Page Table fetches, can come in the interval between the read-lock and write-unlock, and will be handled by the gasket. No other data reads or writes will come in that interval. Also, the Intel XScale® core will not wait for the SWP read data before presenting the write data. The gasket uses address aliases to generate the following atomic operations. • • • • • Bit Set Bit Clear Add Subtract Swap For the alias address type of atomic operation, the Intel XScale® core will issue a SWP command with an alias address if it needs data return. The Intel XScale® core will use the write command with an alias address if it does not need data return. Xscale_IF will not check the second address, as long as it detects one write after one read, both with cbiLock enabled. It will take the write address and put it in the command. 128 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.11.4.1 Summary of Rules for the Atomic Command Regarding I/O The following rules summarize the Atomic command, regarding I/O. • SWP to SRAM/Scratch and Not cbiIO, Xscale_IF generates an Atomic operation command. • SWP to all other Addresses that are not SRAM/Scratch, will be treated as separate read and write commands. No Atomic command is generated. • SWP to SRAM/Scratch and cbiIO, will be treated as separate read and write commands. No Atomic command is generated. 3.11.4.2 Intel XScale® Core Access to SRAM Q-Array The Intel XScale® core can access the SRAM controllers queue function to do buffer allocation and freeing. Allocation does a SRAM dequeue (deq) operation, and freeing does a SRAM enqueue (enq) operation. Alias addresses are used as shown in Table 50 to access the freelist. Each SRAM channel supports up to 64 lists, so there are 64 addresses per channel. Table 50. IXP2800 Network Processor SRAM Q-Array Access Alias Addresses Channel Address Range 0 0xCC00 0100 – 0xCC00 01FC 1 0xCC40 0100 – 0xCC40 01FC 2 0xCC80 0100 – 0xCC80 01FC 3 0xCCC0 0100 – 0xCCC0 01FC Address 7:2 selects which Queue_Array entry within the SRAM channel is used. Doing a load to an address in the table will do a deq, and the SRAM controller returns the dequeued information (i.e., the buffer pointer) as the load data; a store to an address in the table will do an enq, and the data to be enqueued is taken from the Intel XScale® core store data. The gasket generates command fields as follows, based on address and cbiLd: Target_ID = SRAM (00 0010) Command = deq (1011) if cbiLd, enq (1100) if ~cbiLd Token[1:0] = 0x0 Byte_Mask = 0xFF Length = 0x1 Address = {XScale_Address[23:22], XScale_Address[7:2], XScale_Write_Data[25:2]} Note: On the command bus, address[31:30] selects the SRAM channel, address[29:24] is the Q_Array number, and address[23:0] is the SRAM longword address. For Dequeue, the SRAM controller ignores address[23:0]. Hardware Reference Manual 129 Intel® IXP2800 Network Processor Intel XScale® Core 3.11.5 I/O Transaction The Intel XScale® core can request an I/O transaction by asserting xsoCBI_IO concurrently with xsoCBI_Req. The value of xsoCBI_IO is undefined when xsoCBI_Req is not asserted. When the gasket sees an I/O request with xsoCBI_IO asserted, it will raise xsiCBR_Ack but will not acknowledge future requests until the IO transaction is complete. The gasket will check if all of the command FIFOs and write data FIFOs are empty or not. It will also check if the command counters (SRAM and DRAM) are equal to 0. All of these checks are to guarantee that: • Writes are issued to the target, and targets have pulled the data. • Pending reads have their data all back to the gasket. When the gasket sees that all of the conditions are satisfied, it will assert xsiCBR_SynchDone to the Intel XScale® core. XsiCBR_SynchDone is one cycle long and does not need to coincide with xsiCBR_DataValid. 3.11.6 Hash Access Hash accesses are accomplished by the gasket Local_CSR accesses from the Intel XScale® core. There are two sets of registers in the gasket that are involved in Hash accesses. • Four 32-bit XG_GCSR_Hash[3:0] registers for holding the data to be hashed and index returned as well. • A XG_GCSR_CTR0(valid) register to hold the status of the Hash Access. The procedure for the Intel XScale® core to setup a Hash access is as follows. 1. The Intel XScale® core writes data to XG_GCSR_Hash by Local_CSR access, using address [X:yy:zz]. X selects Hash register set, yy selects hash_48, hash_64, or hash_128 mode, and zz selects one of four Hash_Data registers. 2. The data write order is 3-2-1-0 (for hash_128) and 1-0 (for hash_48 or hash_64). When the data write to Hash_Data[0] is performed, it triggers the Hash request to go out on the CPP bus. At the same time, XG_GCSR_Hash(valid) is cleared by hardware. 3. The Intel XScale® core starts to poll Hash_Result_Valid periodically by Local_CSR read. 4. After a period of time, the Hash_Result is returned to XG_GCSR_Hash, and XG_GCSR_CTR0(valid) is set to indicate that Hash_Result is ready to be retrieved. 5. The Intel XScale® core issues a Local_CSR read to read back the Hash_Result. Note: Each Hash command requests only one index returned. The Hash CSR is in the gasket local CSR space. See Section 3.11.7. 130 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.11.7 Gasket Local CSR There are two sets of Control and Status registers residing in the gasket Local CSR space. ICSR refers to the Interrupt CSR. The ICSR address range is 0xd600_0000 – 0xd6ff_ffff. The Gasket CSR (GCSR) refers to the Hash CSRs and debug CSR. It has a range of 0xd700_0000 – 0xd7ff_ffff. GCSR is shown in Table 51. Note: The Gasket registers are defined in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Table 51. GCSR Address Map (0xd700 0000) Bits Name R/W Description Hash word 0 [31:0] XG_GCSR_HASH0 R/W Write from Intel XScale® core. Rd/Wr from CPP. Hash word 1 [31:0] XG_GCSR_HASH1 R/W Write from Intel XScale® core. Rd/Wr from CPP. Address Offset 0x00—for 48-bit Hash 0x10—for 64-bit Hash 0x20—for 128-bit Hash 0x04—for 48-bit Hash 0x14—for 64-bit Hash 0x24—for 128-bit Hash Hash word 2 [31:0] XG_GCSR_HASH2 R/W Write from Intel XScale® core. 0x28—for 128-bit Hash Rd/Wr from CPP. Hash word 3 [31:0] XG_GCSR_HASH3 R/W Write from Intel XScale® core. 0x2c—for 128-bit Hash Rd/Wr from CPP. [31:1] reserved. [0] hash valid flag. [31:0] XG_GCSR_CTR0 R Read from Intel XScale® core. 0x30 Set by LCSR control. [31:1] reserved. [0] Break_Function [31:0] XG_GCSR_CTR1 R/W When set to 1, the debug break signal is used to stop the clocks. 0x3c When set to 0, the debug break signal is used to cause an Intel XScale® core debug breakpoint Hardware Reference Manual 131 Intel® IXP2800 Network Processor Intel XScale® Core 3.11.8 Interrupt The Intel XScale® core CSR controller contains local CSR(s) and interrupts inputs from multiple sources. The diagram in Figure 28 shows the flow through the controller. Within the Interrupt/CSR register block there are raw status registers, enable registers, and local CSR(s). The raw status registers are the un-masked interrupt status. These interrupt status are masked or steered to theIntel XScale® core’s IRQ or FIQ inputs by multiple levels of enable registers. Refer to Figure 29. • {IRQ,FIQ}Status = (RawStatus & {IRQ,FIQ}Enable) • {IRQ,FIQ}ErrorStatus = (ErrorRawStatus & {IRQ,FIQ}ErrorEnable) • {IRQ,FIQ}ThreadStatus_$_# = ({IRQ,FIQ}ThreadRawStatus_$_# & {IRQ,FIQ}ThreadEnable_$_#) Each interrupt input is visible in the RawStatus register and is masked or steered by two level of interrupt enable registers. The error and thread status are masked by one level of enable registers. Their combination along with other interrupt sources contributes to the RawStatusReg. The RawStatus is masked via IRQEnable/FIQEnable to trigger the IRQ and FIQ interrupt to the Intel XScale® core. The enable register’s bits are set and cleared through EnableSet and EnableClear registers. The Status, RawStatus, and Enable registers are read-only, and EnableSet and EnableClear are write-only. Also, Enable and EnableSet share the same address for reads and writes respectively. Note that software needs to take into account the delay between the clearing of an interrupt condition and having its status updated in the RawStatus registers. Also in the case of simultaneous writes to the same registers, the value of the last write is recorded. Figure 28. Flow Through the Intel XScale® Core Interrupt Controller IRQ FIQ CAP_CSR_WR_ADDR CAP_CSR_WR CSR Decode Interrupt/ CSR Registers cbrData From cbiAdr CAP_CSR_WR_DATA From cbiData A9698-01 132 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 29. Interrupt Mask Block Diagram {Error,Thread}RawStatusReg {Error,Thread}RawStatus {Error,Thread}RQEnReg IRQ{Error,Thread}Status {Error,Thread}FIQEnReg FIQ{Error,Thread}Status RawStatusReg Interrupt{Error,Thread}RawStatus Interrupts,IRQ{Error,Thread}Status IRQEnReg To IRQ Interrupts,FIQ{Error,Thread}Status FIQEnReg Other Enabled Interrupts To FIQ A9699-01 Hardware Reference Manual 133 Intel® IXP2800 Network Processor Intel XScale® Core 3.12 Intel XScale® Core Peripheral Interface This section describes the Intel XScale® core Peripheral Interface unit (XPI). The XPI is the block that connects to all the slow and serial interfaces that communicate with the Intel XScale® core through the APB. These can also be accessed by the Microengines and PCI unit. This section does not describe the Intel XScale® core interface protocol, only how to interface with the peripheral devices connected to the core. The I/O units described are: • • • • UART Watchdog timers GPIO Slowport All the peripheral units are memory mapped from the Intel XScale® core point of view. 3.12.1 XPI Overview Figure 30 shows the XPI location in the IXP2800 Network Processor. The XPI receives read and write commands from the Command Push Pull bus to addresses the memory has mapped to I/O devices. The SHaC (Scratchpad, Hash Unit, and CSRs) acts like a bridge to control the access from the Intel XScale® core or other host (like the PCI Unit). The extended APB is used to communicate between the XPI and the SHaC. The extended APB has only one signal, APB_RDY, added. This signal is used to tell the SHaC when the transaction should be terminated. The XPI is responsible for passing the data between the extended APB and the internal blocks, like the UART, GPIO, Timer, and Slowport, which will in turn pass these data to an external peripheral device with a corresponding bus format. The XPI is always a master on the Slowport bus and all the Slowport devices act like slaves. On the other side, the SHaC is always the master and the XPI is the slave with respect to the APB. 134 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 30. XPI Interfaces for IXP2800 Network Processor Intel® IXP2400/2800 Network Processor XPI [7:0]/[15:0]/[31:0] UART Intel XScale® Core Reset Sequential Logic [31:0] GPIO APB Bus CPP Bus PCI SlowPort rx,tx SONET/SDH Microprocessor Interface [7:0] Demultiplexor SHaC [3:0] [7:0] PROM Timer watchdog_reset B1740-02 3.12.1.1 Data Transfers The current rate for data transfers is four bytes, except for the Slowport. The 8-bit and 16-bit accesses are only available in the Slowport bus. The devices connected to the Slowport dictate this data width. The user has to configure the data width register resident in the Slowport to run a different type of data transaction. There is no burst to Slowport. 3.12.1.2 Data Alignment For all the CSR accesses, a 32-bit data bus is assumed. Therefore, the lower two bits of the address bus are ignored. For the Slowport accesses, 8-, 16-, or 32-bit data access is dictated by the external device connected to the Slowport. The APB Bus should be able to match the data width according to which devices it is talking to. SeeTable 52 for additional details on data alignment. Hardware Reference Manual 135 Intel® IXP2800 Network Processor Intel XScale® Core Table 52. Data Transaction Alignment Interface Units APB Bus Read Write GRegs 32 bits 32 bits 32 bits UART 32 bits 32 bits 32 bits GPIO 32 bits 32 bits 32 bits Timer 32 bits 32 bits 32 bits Slowport Microprocessor Access Slowport 1 Flash Memory Access CSR Access 1. 3.12.1.3 8 bits 8 bits 8 bits 16 bits 16 bits 16 bits 32 bits 32 bits 32 bits Assemble 8 bits into 32-bit data for 32-bit read mode; 8 bits for register read mode (8-bit read mode). 8 bits 32 bits 32 bits 32 bits for 32-bit read mode, 8 bits for register read mode; 8 bits for write; 32 bits The flash memory interface only supports 8-bit wide flash devices. APB write transactions are assumed to be 8-bits wide, and correspond to one write cycle at the flash interface. APB read transactions are assumed to be 32-bits wide, and correspond to four flash read cycles for the 32-bit read mode set in the SP_FRM register. However, for the flash register read mode (8-bit read mode), it only needs one flash read cycle of 8-bit data and passes it back to APB directly. By default, the 32-bit read mode is set. It is advisable to stay in this mode most of the time and not change them dynamically during accesses. Address Spaces for XPI Internal Devices Table 53 shows the address space assignment for XPI devices. Table 53. Address Spaces for XPI Internal Devices 136 Units Starting Address Ending Address GPIO 0xC0010000 0xC0010040 TIMER 0xC0020000 0xC0020040 UART 0xC0030000 0xC003001C PMU 0xC0050000 0xC0050E00 Slowport CSR 0xC0080000 0xC0080028 Slowport Device 0xC4000000 0xC7FFFFFF Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.2 UART Overview The UART performs serial-to-parallel conversion on data characters received from a peripheral device and parallel-to-serial conversion on data characters received from the network processor. The processor can read the complete status of the UART at any time during the functional operation. Available status information includes the type and condition of the transfer operations being performed by the UART and any error conditions (parity, overrun, framing, or break interrupt). The serial ports can operate in either FIFO or non-FIFO mode. In FIFO mode, a 64-byte transmit FIFO holds data from the processor to be transmitted on the serial link and a 64-byte receive FIFO buffers data from the serial link until read by the processor. The UART includes a programmable baud rate generator that is capable of dividing the clock input by divisors of 1 to 216 - 1 and produces a 16X clock to drive the internal transmitter logic. It also drives the receive logic. The UART has a processor interrupt system. The UART can be operated in polled or in interrupt driven mode as selected by software. The UART has the following features • Functionally compatible with National Semiconductor*’s PC16550D for basic receive and transmit. • Adds or deletes standard asynchronous communications bits (start, stop, and parity) to or from the serial data • Independently controlled transmit, receive, line status • Programmable baud rate generator allows division of clock by 1 to (216 - 1) and generates an internal 16X clock • • • • • • • • • 5-, 6-, 7-, or 8-bit characters Even, odd, or no parity detection 1, 1½, or 2 stop bit generation Baud rate generation False start bit detection 64-byte Transmit FIFO 64-byte Receive FIFO Complete status reporting capability Internal diagnostic capabilities include: — Break — Parity — Overrun — Framing error simulation • Fully prioritized interrupt system controls Hardware Reference Manual 137 Intel® IXP2800 Network Processor Intel XScale® Core 3.12.3 UART Operation The format of a UART data frame is shown in Figure 31. Figure 31. UART Data Frame Start Bit Data <0> Data <1> Data <2> Data <3> Data <4> Data <5> Data <6> Data <7> Parity Bit Stop Bit 1 Stop Bit 2 TXD or RXD pin LSB MSB Notes: Receive data sample counter frequency = 16x bit frequency, each bit is sampled three times in the middle. Shaded bits are optional and can be proammed by users. B1741-02 Each data frame is between 7 bits and 12 bits long depending on the size of data programmed, if parity is enabled and if two stop bits is selected. The frame begins with a start bit that is represented by a high to low transition. Next, either 5 to 8 bits of data are transmitted, beginning with the least significant bit. An optional parity bit follows, which is set if even parity is enabled and an odd number of ones exist within the data byte, or if odd parity is enabled and the data byte contains an even number of ones. The data frame ends with one, one and a half, or two stop bits as programmed by the user, which is represented by one or two successive bit periods of a logic one. 3.12.3.1 UART FIFO OPERATION The UART has one transmit FIFO and one receive FIFO. The transmit FIFO is 64 bytes deep and eight bits wide. The receive FIFO is 64 bytes deep and 11 bits wide. 3.12.3.1.1 UART FIFO Interrupt Mode Operation – Receiver Interrupt When the Receive FIFO and receiver interrupts are enabled (UART_FCR[0]=1 and UART_IER[0]=1), receiver interrupts occur as follows: • The receive data available interrupt is invoked when the FIFO has reached its programmed trigger level. The interrupt is cleared when the FIFO drops below the programmed trigger level. • The UART_IIR receive data available indication also occurs when the FIFO trigger level is reached, and like the interrupt, the bits are cleared when the FIFO drops below the trigger level. • The receiver line status interrupt (UART_IIR = C6H), as before, has the highest priority. The receiver data available interrupt (UART_IIR=C4H) is lower. The line status interrupt occurs only when the character at the top of the FIFO has errors. • The data ready bit (DR in UART_LSR register) is set to 1 as soon as a character is transferred from the shift register to the Receive FIFO. This bit is reset to 0 when the FIFO is empty. 138 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Character Time-out Interrupt When the receiver FIFO and receiver time-out interrupt are enabled, a character time-out interrupt occurs when all of the following conditions exist: • At least one character is in the FIFO. • The last received character was longer than four continuous character times ago (if two stop bits are programmed the second one is included in this time delay). • The most recent processor read of the FIFO was longer than four continuous character times ago. The maximum time between a received character and a time-out interrupt is 160 ms at 300 baud with a 12-bit receive character (i.e., 1 start, 8 data, 1 parity, and 2 stop bits). When a time-out interrupt occurs, it is cleared and the timer is reset when the processor reads one character from the receiver FIFO. If a time-out interrupt has not occurred, the time-out timer is reset after a new character is received or after the processor reads the receiver FIFO. Transmit Interrupt When the transmitter FIFO and transmitter interrupt are enabled (UART_FCR[0]=1, UART_IER[1]=1), transmit interrupts occur as follows: • The Transmit Data Request interrupt occurs when the transmit FIFO is half empty or more than half empty. The interrupt is cleared as soon as the Transmit Holding register is written (1 to 64 characters may be written to the transmit FIFO while servicing the interrupt) or the IIR is read. 3.12.3.1.2 FIFO Polled Mode Operation With the FIFOs enabled (TRFIFOE bit of UART_FCR set to 1), setting UART_IER[4:0] to all 0s puts the serial port in the FIFO polled mode of operation. Since the receiver and the transmitter are controlled separately, either one or both can be in the polled mode of operation. In this mode, software checks receiver and transmitter status via the UART_LSR. As stated in the register description: • UART_LSR[0] is set as long as there is one byte in the receiver FIFO. • UART_LSR[1] through UART_LSR[4] specify which error(s) has occurred for the character at the top of the FIFO. Character error status is handled the same way as interrupt mode. The UART_IIR is not affected since UART_IER[2] = 0. • UART_LSR[5] indicates when the transmitter FIFO needs data. • UART_LSR[6] indicates that both the transmitter FIFO and shift register are empty. • UART_LSR[7] indicates whether there are any errors in the receiver FIFO. 3.12.4 Baud Rate Generator The baud rate generator is a programmable block and generates a clock used in the transmit block. The output frequency of the baud rate generator is 16X the baud rate; baud rate is calculated as: BaudRate = APB Clock / (16 X Divisor) The Divisor ranges from 1 to 216 - 1. For example, for an APB clock of 1 MHz and a baud rate of 300 bps, the divisor is 209. Hardware Reference Manual 139 Intel® IXP2800 Network Processor Intel XScale® Core 3.12.5 General Purpose I/O (GPIO) The IXP2800 Network Processor has eight General Purpose Input/Output (GPIO) port pins for use in generating and capturing application-specific input and output signals. Each pin is programmable as an input or output or as an interrupt signal sourcing from an external device. The GPIO can be used with appropriate software in I2C application. Each GPIO pin can be configured as a input or an output by programming the corresponding GPIO pin direction register. When programmed as an input, the current state of the GPIO can be read through the corresponding GPIO pin level register. The register can be read at any time and can be used to confirm the state of the pin when it is configured as an output. In addition, each GPIO pin can be programmed to detect a rising or a falling edge by setting the corresponding GPIO rising/ falling edge detect registers. When configured as an output, the pin can be controlled by writing to the GPIO set register to write a 1 and by writing to the GPIO clear register to write a 0. These registers can be written regardless of whether the pin is configured as an input or a output. Each of the GPIO pins is designed the same and instantiated to the number of GPIO port pins. Figure 32 shows a GPIO functional diagram. The GPIO pin as seen can be programmed based on the configuration registers. Figure 32. GPIO Functional Diagram Pin direction set/clear/prog register Decode Logic Pin set/clear/ prog register APB Bus GPIO Pin Edge detect status register Pin Level Register Edge detect logic Rising/Falling edge detect enable register A9701-01 140 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.6 Timers The IXP2800 Network Processor supports four timers. These timers are clocked by the Advanced Peripheral/Bus Clock (APB-CLK), which runs at 50 MHz to produce the PLPL_APB_CLK, PLPL_APB_CLK/16, or PLPL_APB_CLK/256 signals. The counters are loaded with an initial value, count down to 0, and raise an interrupt (if interrupts are not masked). In addition, timer 4 can be used as a watchdog timer when the watchdog enable bits are configured to 1. When used as a watchdog timer, and when a count of 0 is encountered, it will initiate the reset sequence. Figure 33 shows the timer control unit interfacing with other functional blocks. Figure 33. Timer Control Unit Interfacing Diagram CPP ME SHaC APB bus Intel XScale® Core Timer1,2,3,4 Timers gpio[3:0] GPIO Watchdog Reset * Intel® IXP2800 Network Processor A9702-04 3.12.6.1 Timer Operation Each timer consists of a 32-bit counter. By default, the timer counter load register (TCLD) is set to 0xFFFFFFFF. The timer will count down from 0xFFFFFFFF to 0x00000000, then wrap back to 0xFFFFFFFF and continue to decrement if the TCLD is not programmed to any value. If a different value is programmed in the TCLD, then the counter will load this value every time it counts down to 0. An interrupt is issued to the Intel XScale® core whenever the counter reaches 0. The interrupt signals can be enabled or disabled by the IRQEnable/FIQEnable registers. The interrupt remains asserted until it is cleared by writing a 1 to the corresponding timer clear register (TCLR). The counter can be advanced by the clock, clock divided by 16, clock divided by 256, and the GPIO signals. The clock rate is controlled by the TCTL value programmed into the TCTL registers. There are four gpio signals, GPIO[3:0] that correspond to Timer 1, 2, 3, and 4, respectively. These signal are synchronized within the timer-clock domain before driving the counter. Hardware Reference Manual 141 Intel® IXP2800 Network Processor Intel XScale® Core Figure 34 shows the Timer Internal logic. Figure 34. Timer Internal Logic Diagram Timer Registers Block TCTL TCLD WRITE_DATA Timer Control Logic TCLR TWDE TCSR READ_DATA APB_SEL APB_WR ADDRESS Decoder & Control Logic Watchdog Watchdog Logic Reset ENABLE CLK Divided by 16 Counter Logic Interrupts Divided by 16 GP_TM[3:0] A9703-01 3.12.7 Slowport Unit The IXP2800 Network Processor Slowport Unit supports basic PROM access and 8-, 16-, and 32-bit microprocessor device access. It allows a master, (Intel XScale® core or Microengine), to do a read/ write data transfer to these slave devices. The address bus and data bus are multiplexed to reduce the pin count. In addition, the address bus is also compressed from A[25:0] down to A[7:0] and shifted out with three clock cycles. Therefore, an external set of buffers is needed for address storage and latch. The access can be asynchronous. Insertion of delay cycles is possible for both setup and hold data. A programmable timing control mechanism is provided for this purpose. There are two types of interfaces supported in the Slowport Unit: • Flash memory interface • Microprocessor interface. 142 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core The Flash memory interface is used for the PROM device. The microprocessor interface can be used for SONET/SDH Framer microprocessor access. There are two ports in the Slowport unit. The first is dedicated to the flash memory device while the second to the microprocessor device. 3.12.7.1 PROM Device Support For all the Flash Memory access, only 8-bit devices are supported. APB write transactions are assumed to be 8-bits wide, and correspond to one write cycle at the flash interface. The extended APB read transactions are assumed to be 32-bits wide, and correspond to four read cycles at the flash memory interface for all the flash memory data read. However, for the flash register read inside the flash memory, like the flash status register, the returned data is one byte and placed in the lower order byte location. In this case, only one external transaction cycle is involved. To accomplish this, a register (SP_FRM) is installed to allow to configure between 8-bit read mode and 32-bit read mode. By default, it goes to 32-bit read mode. For the 8-bit read mode, one read cycle is involved. No packing process is needed. The data will be directly placed onto the lower order byte, [7:0] and passed to APB. For the 32-bit read mode, it needs four read cycles. All 4 bytes are packed into a 32-bit data and passed to the APB. 16-bit mode is not supported for read. Write always accesses the flash with one 8-bit cycle. Therefore, no unpacking process is needed. The PROM devices supported are listed in Figure 54: Table 54. 8-Bit Flash Memory Device Density 3.12.7.2 Vendor Part Number Size Intel 28F128J3A 16 MB Intel 28F640J3A 8 MB Intel 28F320J3A 4 MB Microprocessor Interface Support for the Framer The Slowport Unit also supports a microprocessor interface with Framer components. Some supported devices are listed in Table 55: Table 55. SONET/SDH Devices (Sheet 1 of 2) Vendor Part Number Microprocessor Interface SP_PCR register Setting DW Setting in SP_ADC register PMC-Sierra* PM3386 16 bits 0x3 0x1 PMC-Sierra* PM5345 8 bits 0x2 0x0 PMC-Sierra* PM5346 8 bits 0x2 0x0 PMC-Sierra* PM5347 8 bits 0x2 0x0 PMC-Sierra* PM5348 8 bits 0x2 0x0 PMC-Sierra* PM5349 8 bits 0x2 0x0 PMC-Sierra* PM5350 8 bits 0x2 0x0 PMC-Sierra* PM5351 8 bits 0x2 0x0 PMC-Sierra* PM5352 8 bits 0x2 0x0 Hardware Reference Manual 143 Intel® IXP2800 Network Processor Intel XScale® Core Table 55. SONET/SDH Devices (Sheet 2 of 2) Vendor Part Number Microprocessor Interface SP_PCR register Setting DW Setting in SP_ADC register PMC-Sierra* PM5355 8 bits 0x2 0x0 PMC-Sierra* PM5356 8 bits 0x2 0x0 PMC-Sierra* PM5357 8 bits 0x2 0x0 PMC-Sierra* PM5358 16 bits 0x2 0x1 PMC-Sierra* PM5381 16 bits 0x2 0x1 PMC-Sierra* PM5382 8 bits 0x2 0x0 PMC-Sierra* PM5386 16 bits 0x2 0x1 AMCC* S4801 (AMAZON) 8 bits 0x0 0x0 AMCC* S4803 (YUKON) 8 bits 0x0 0x0 AMCC* S4804 (RHINE) 8/16 bits 0x0/0x3 0x0/0x1 Intel IXF6012 (Volga) 16 bits 0x3/0x41 0x1 16 bits 0x3/0x4 1 0x1 0x3/0x4 1 — Intel IXF6048 (Amazon-A) Intel 1. 3.12.7.3 Centaur — 1 Intel IXF6501 — 0x3/0x4 — Intel Ben Nevis 32 bits 0x3/0x41 0x2 Lucent* TDAT042G5 16 bits 0x1/ 0x1 Lucent* TDAT04622 16 bits 0x1 0x1 Lucent* TDAT021G2 16 bits 0x1 0x1 Usually there are two different protocols, Intel or Motorola*, of microprocessor interface in the Intel framer; the setting in the PCR should match with protocols activated in the framer. Slowport Unit Interfaces Figure 35 shows the Slowport unit interface diagram. Figure 35. Slowport Unit Interface Diagram SHaC Intel XScale® Core PROM/ FLASH APB bus CPP PCI SP_INT SlowPort SlowPort Address/ Data Convertor Peripherals A9704-02 144 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.4 Address Space The total address space is defined as 64 Mbytes, which is further divided into two segments of 32 Mbytes each. Two devices can be connect to this bus. If these peripheral devices have a density of 256 Mbits (32 Mbytes) each, all the address space is going to be filled like a contiguous address space. However, if a small capacity device is used (like a device of 4, 8, or 16 MBytes), there will be a memory hole left in between these two devices. Figure 36 is a 4-Mbyte memory example. Trying to read the space in between, you will get the repeating value for each 4-Mbyte location Figure 36. Address Space Hole Diagram 3FFFFFFh 23FFFFFh 2000000h 4 MB 03FFFFFh 0000000h 4 MB A9705-01 3.12.7.5 Slowport Interfacing Topology Figure 37 demonstrates one of the topologies used to connect to an 8-bit device. From the diagram, we can observe that address is shifted out eight bits at a time and buffered into three 74F377 or equivalent tri-state buffer devices in three consecutive clock cycles. These buffers also output separately to form a 25-bit wide address bus to address the 8-bit devices. The data are expected to be driven out after the address has been placed into the buffers. There are two devices shown in Figure 37. The top one is the fix-timed device, while the lower one, self-timing device. For the self-timing device, the access latency depends on the SP_ACK_L responded back from this device. Three extra signals, SP_CP, SP_OE_L, and SP_DIR, are added to pack and unpack the data when a 16-bit or 32-bit device is hooked up to Slowport. They are used for special application only as described below. Hardware Reference Manual 145 Intel® IXP2800 Network Processor Intel XScale® Core Figure 37. Slowport Example Application Topology SP_RD_L OE_L SP_WR_L WE_L SP_CS_L[0] CS_L SP_CS_L[1] SP_A[1:0] A[1:0] SP_AD[7:0] D[7:0] A[24:2] SP_ALE_L SP_CLK Intel® IXP2800 Network Processor Clock Driver CY2305 CE# D[7:0] CP Q[7:0] CE# D[7:0] CP Q[7:0] 74f377 A[24:18] A[24:2] 74f377 OE_L WE_L A[17:10] CE# D[7:0] CP Q[7:0] 74f377 CS_L A[1:0] D[7:0] A[9:2] SP_ACK_L ACK_L A9318-02 3.12.7.6 Slowport 8-Bit Device Bus Protocols The write/read transfer protocols are discussed in the following sections. The burst transfers are going to be broken down into single mode transfer. For each single write/read transaction, it can be either fixed-timed transaction or self-timing transaction. The fixed-timed transaction has the response fixed in a certain period, that can be controlled by the timing control registers. For the self-timing transaction, the response timing is dictated by the peripheral device. Hence, wait states can be inserted during the transaction. All the back-to-back transactions are intervened with one clock cycle. The Slowport clock, SP_CLK, shown in the following waveform diagrams, is generated by dividing the PLPL_APB_CLK. The divisor used is specified in the clock control register, SP_CCR. 146 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.6.1 Mode 0 Single Write Transfer for Fixed-Timed Device Figure 38, shows the single write transfer for a fixed-timed device with the CSR programmed to a value of setup=4, pulse width=0, and hold=2, followed by another read transfer. Figure 38. Mode 0 Single Write Transfer for a Fixed-Timed Device 0 2 4 6 8 10 12 14 16 18 20 SP_CLK SP_ALE_L SP_CS_L [1:0] SP_WR_L SP_RD_L SP_A[1:0] SP_AD[7:0] A[1:0] 9:2 17:10 24:18 D[7:0] 9:2 17:10 24:18 A9706-02 The transaction is initiated with SP_ALE_L asserted. It latches the address from the SP_AD[7:0] bus into the external buffer, using three clock cycles. After that, it should deassert the SP_ALE_L to disable latching the address into the buffers. The SP_A[1:0] signals span the whole transaction cycle. For the write, it drives the data onto the SP_AD[7:0]. Meanwhile, it asserts the SP_CS_L[1:0] signals. Depending on the timing control setup parameter, for this case, the SP_WR_L is not asserted until four clock cycles have elapsed. The SP_CS_L[1:0] signals are deasserted two clocks after the SP_WR_L is deasserted. Hardware Reference Manual 147 Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.6.2 Mode 0 Single Write Transfer for Self-Timing Device Figure 39 depicts the single write transfer for a self-timing device with the CSR programmed to setup=4, pulse width=0, and hold=3. Similarly, a read transaction is attached behind. Figure 39. Mode 0 Single Write Transfer for a Self-Timing Device 0 2 4 6 8 10 12 14 16 18 20 SP_CLK SP_ALE_L SP_CS_L [1:0] SP_WR_L SP_RD_L SP_A[1:0] SP_AD[7:0] A[1:0] 9:2 17:10 24:18 D[7:0] 9:2 17:10 24:18 SP_ACK_L A9707-03 Similar to the single write for fixed-timed device, the ALE_L, CS_L[1:0], AD[7:0], and A[1:0] follow the same pattern, and the timing is controlled by the timing control register — except for the WR_L, which is terminated depending on the SP_ACK_L returned from the self-timing device. The time-out counter will be set to 255. If no SP_ACK_L responds back when the time-out counter reaches 0, the transaction is terminated with a time-out. An interrupt signal is issued to the bus master simultaneously with the time-out register update. 148 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.6.3 Mode 0 Single Read Transfer for Fixed-Timed Device Figure 40 demonstrates the single read transfer issued to a fixed-timed PROM device followed by another write transaction. The CSR is assumed to be configured to the value setup=2, pulse width=10, and hold=1. Figure 40. Mode 0 Single Read Transfer for Fixed-Timed Device 0 2 4 6 8 10 12 14 16 18 20 SP_CLK SP_ALE_L SP_CS_L [1:0] SP_WR_L SP_RD_L SP_A[1:0] SP_AD[7:0] A[1:0] A9:2 A A 17:10 24:18 D[7:0] A9708-02 The address is loaded onto the external buffer in three clock cycles with the ALE_L asserted. Then, a clock cycle is inserted to tri-state all the AD[7:0] signals. The CS_L[1:0] signals come asserted on the fourth clock cycle. Now, the values stored in the timing control registers take effect. The RD_L is asserted after two clock cycles. It keeps asserted for ten clock cycles. The CS_L[1:0] should be de-asserted one clock cycle after RD_L is de-asserted. The data will be valid at clock cycle 16 as shown in the diagram. Since the hold delay has two cycles, and the transaction is terminated at clock cycle 16. Hardware Reference Manual 149 Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.6.4 Single Read Transfer for a Self-Timing Device Figure 41 demonstrates the single read transfer issued to a self-timing PROM device followed by another write transaction. The CSR assumed to be programmed to the value of setup=4, pulse width=0, and hold=2. Figure 41. Mode 0 Single Read Transfer for a Self-Timing Device 0 2 4 6 8 10 12 14 16 18 20 SP_CLK SP_ALE_L SP_CS_L [1:0] SP_WR_L SP_RD_L SP_A[1:0] SP_AD[7:0] A[1:0] 9:2 17:10 24:18 D[7:0] 9:2 17:10 24:18 D[7:0] SP_ACK_L A9709-01 The only difference for self-timed mode is in the SP_ACK_L signal. It has a dominant effect on the length of the transaction cycle or it overrides the value in the timing control register. A time-out counter is set to 256. The SP_ACK_L should arrive before the time-out counter counts down to 0. Similarly to the single write for self-timing device, an interrupt is launched for the time-out event and the time-out register is updated. In this case, the data will be sampled at clock cycle 12. 3.12.7.7 SONET/SDH Microprocessor Access Support To support the SONET/SDH Microprocessor Interface, extra logic is added into this unit. Here we consider three SONET/SDH available components, including the Lucent* TDAT042G5, PMC-Sierra* PM5351, Intel, and AMCC* SONET/SDH devices. However, because these microprocessor interfaces are not standardized, we treat them separately and a configuration register is installed to activate the bus to work with different interface protocol at a time. Extra pins are also added to accomplish this task. A microprocessor interface type register is used to provide these kinds of solutions. The user is allowed to configure the interface to the following four different modes. The pin functionality and the interface protocol will be changed accordingly. By default, it activates the mode 0 with 8-bit generic PROM device support as mentioned above. 150 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.7.1 Mode 1: 16-Bit Microprocessor Interface Support with 16-Bit Address Lines The address size control register is programmed to 16-bit address space for this case. This mode is designated for the devices with the similar protocol with the Lucent* TDAT042G5 SONET/SDH device. 16-Bit Microprocessor Interfacing Topology with 16-Bit address lines Figure 42 shows a solution for the 16-bit microprocessor interface. This solution bridges the Lucent* TDAT042G5 SONET/SDH 16-bit interface. From Figure 42, we observe that the control pins SP_RD_L and SP_WR_L are converted to R/W and ADS. The CS and DT are still compactible with SP_CS_L[1] and SP_ACK_L protocol. Extra pins are added to accomplish the task of multiplexing and demultiplexing the data bus. The total pin count is 18. During the write cycle, 8-bit data are stacked into 16-bit data. They are first shifted into two tri-state buffers, 74F646 or equivalent by SP_CP, using two consecutive clock cycle; then the SP_CS_L is used for output of the 16-bit data, which is shared with the CS. During the read cycle, the 16-bit data are unpacked into 8-bit data by SP_CP. Two 74F646 or equivalent tri-state buffers are used. First, the 16-bit data are stored into these buffers. Then they are shifted out by SP_DIR, using two consecutive clock cycles. Hardware Reference Manual 151 Intel® IXP2800 Network Processor Intel XScale® Core Figure 42. An Interface Topology with Lucent* TDAT042G5 SONET/SDH SP_RD_L R/W# SP_WR_L ADS# SP_CS_L[1] CS# SP_ACK_L DT# SP_AD[7:0] SP_ALE_L CE# D[7:0] CP SP_CLK Clock Driver CY2305 ADDR[16:0] ADDR[16] CE# D[7:0] 74F377 Q[7:0] CP Intel® IXP2000 Network Processor 74F377 Q[7:0] ADDR[15:8] CE# D[7:0] CP 74F377 Q[7:0] Lucent TDAT042G5* ADDR[7:1] 74F646 D[7:0] SP_CP CPAB VCC SAB SBA DATA[15:0] CPBA SP_OE_L OE# DATA[15:8] O[7:0] DIR 74F646 D[7:0] CPAB CPBA SP_DIR OE# DIR VCC SAB SBA DATA[7:8] O[7:0] * Other names and brands may be claimed as property of others. A9370-03 152 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 16-Bit Microprocessor Write Interface Protocol Figure 43 uses the Lucent* TDAT042G5 device. In this case, the user should program the P_PCR register to mode 1 and also program the write timing control register to setup=7, pulse width=5, and hold=1, which represent seven clock cycles for CS, five clock cycles for DT delay, and one clock cycle for ADS. They are intervened with two idle cycles. From Figure 43, we observe that there are a total of twelve clock cycles used for write access, (i.e., 240 ns), not including an intervened turnaround cycle after the write transaction. The throughput is 8.3 Mbytes per second. Figure 43. Mode 1 Single Write Transfer for Lucent* TDAT042G5 Device (B0) T0 0 2 4 6 T1 T2 T3 T4 8 10 T5 T6 12 T0 14 T1 16 T2 T3 T4 18 20 SP_CLK SP_ALE_L SP_CS_L[1] /CS# SP_WR_L/ADS# SP_RD_L/R/W# SP_AD[7:0] A A A D [7:0] [15:8] [23:16] [7:0] D[15:8] A [7:0] A A [15:8] [23:16] A [7:0] A [15:0] SP_ACK_L /DT# SP_CP SP_OE_L SP_DIR ADDR[15:0] DATA[15:0] A [7:0] A [15:0] A[23:0] D [7:0] A[23:0] D[15:0] B1742-04 Hardware Reference Manual 153 Intel® IXP2800 Network Processor Intel XScale® Core 16-Bit Microprocessor Read Interface Protocol Figure 44, likewise depicts a single read transaction launched from the IXP2800 Network Processor to the Lucent* TDAT042G5 device followed by a single read transaction. However, in this case the read timing control register has to be programmed to setup=0, pulse width=7, and hold =0. In Figure 44, we can count twelve clock cycles used for the read transaction in total, (i.e., 240 ns) for a clock cycle of 10 ns, excluding a turnaround cycle after that. It has the throughput of 7.7 Mbytes per second. Figure 44. Mode 1 Single Read Transfer for Lucent* TDAT042G5 Device (B0) T0 0 2 T1 4 T2 T3 T4 T5 6 8 T6 T7 10 12 14 16 18 20 22 24 SP_CLK SP_ALE_L SP_CS_L[1] /CS# SP_WR_L/ADS# SP_RD_L/R/W# SP_AD[7:0] A A A [7:0] [15:8] [23:16] D[15:8] D[7:0] A A A D [7:0] [15:8] [23:16] [7:0] D[7:0] SP_ACK_L /DT# SP_CP SP_OE_L SP_DIR ADDR[15:0] DATA[15:0] A [7:0] A [15:0] A [7:0] A[23:0] D[15:0] D[15:0] 2x[15:8] A [15:0] A[23:0] D[7:0] D[15:0] B1746-04 154 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core 3.12.7.7.2 Mode 2: Interface with 8 Data Bits and 11 Address Bits This application is designed for the PMC-Sierra* PM5351 S/UNI-TETRA* device. For the PMC-Sierra* PM5351, the address space is programmed to 11 bits; otherwise, other address space should be specified. 8-Bit PMC-Sierra* PM5351 S/UNI-TETRA* Interfacing Topology Figure 45 displays one of the topologies used to connect to the Slowport with the PMC-Sierra* PM5351 S/UNI-TETRA* device. From Figure 45, because the protocols are very close to the generic Slowport protocol, the pin counts and the functionality is quite compatible. We do not need to use any more pins in this case. The only difference is in the INTB signal, which will be connected to the SP_ACK_L. Therefore, the SP_ACK_L needs to be converted to an interrupt signal. Also because the address contains only 11bits, two 74F377 or equivalent buffers are needed. The AS field in the SP_ADC register should be programmed to a 16-bit addressing space with the upper five address bits unconnected. The timing controls are similar to the generic case. Figure 45. An Interface Topology with PMC-Sierra* PM5351 S/UNI-TETRA* VCC ALE SP_RD_L RDB SP_WR_L WRB SP_CS_L[1] CSB SP_ACK_L INTB SP_AD[7:0] DATA[7:0] SP_ALE_L SP_CLK Intel® IXP2800 Network Processor Clock Driver CY2305 CE# D[7:0] CP Q[7:0] CE# D[7:0] CP Q[7:0] 74F377 ADDR[10:8] 74F377 ADDR[10:0] PMC-Sierra* PM5351 ADDR[7:0] A9369-04 Hardware Reference Manual 155 Intel® IXP2800 Network Processor Intel XScale® Core PMC-Sierra* PM5351 S/UNI-TETRA* Write Interface Protocol Figure 46 depicts a single write transaction launched from the IXP2800 to the PMC-Sierra* PM5351 device followed by single read transaction. The write transaction for the PMC-Sierra* component has six clock cycles or a 120-ns access time for a 50-MHz Slowport clock. In this case, no intervening cycle is added after the transaction. The I/O throughput is 8.3 Mbytes per second. The SP_PCR should be programmed to mode 2 and the fields of SU, PW, and HD in the SP_WTC2 should be set to 1, 2, and 1, respectively. Here, SU, PW, and HD represent the SP_CS_L[1] pulse width, the SP_WR_L pulse width, and the SP_CP pulse width, respectively. Figure 46. Mode 2 Single Write Transfer for PMC-Sierra* PM5351 Device (B0) 0 2 4 6 8 10 12 14 16 18 20 SP_CLK SP_ALE_L SP_CS_L[1]/CSB SP_WR_L/WRB SP_RD_L/RDB SP_AD[7:0] A A [7:0] [10:8] D[7:0] A A [7:0] [10:8] D[7:0] SP_ACK_L/INTB SP_CP SP_OE_L SP_DIR ADDR[15:0] A [7:0] A [10:8] DATA[7:0] A [7:0] A [10:8] A [15:8] A[10:0] D[7:0] A [7:0] A [10:8] A[10:0] D[7:0] B1747-04 PMC-Sierra* PM5351 S/UNI-TETRA* Read Interface Protocol 156 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 47, depicts a single read transaction launched from the IXP2800 Network Processor to the PMC-Sierra* PM5351 device, followed by a single write transaction. In this case, there are ten clock cycles of access time, or 200 ns in total, with three turnaround cycles attached at the back. The I/O throughput is 11.2 Mbytes per second. Figure 47. Mode 2 Single Read Transfer for PMC-Sierra* PM5351 Device (B0) 0 2 4 6 8 10 12 14 16 18 20 22 24 SP_CLK SP_ALE_L SP_CS_L[1]/CSB SP_WR_L/WRB SP_RD_L/RDB SP_AD[7:0] A A [7:0] [10:8] D[7:0] A A [7:0] [10:8] D[7:0] A A [7:0] [10:8] SP_ACK_L/INTB SP_CP SP_OE_L SP_DIR A [15:8] ADDR[15:0] DATA[7:0] A [7:0] A [10:8] A[10:0] D[7:0] A [7:0] A [10:8] A [7:0] A [10:8] A[10:0] D[7:0] A [7:0] A A [10:0] [10:0] A [7:0] A [10:8] B1748-03 3.12.7.7.3 Mode 3: Support for the Intel and AMCC* 2488 Mbps SONET/SDH Microprocessor Interface The user has to configure the address bus to 10 bits. Mode 3 Interfacing Topology Figure 48 demonstrates one of the topologies used to connect the Slowport to the Intel and AMCC* 2488-Mbps SONET/SDH device. Similar to the Lucent* TDAT042G5 interface, the address and the data need demultiplexing. Totally, it requires four buffers to accomplish this task. The SP_RD_L, SP_WR_L, and SP_CS_L[1] entirely match the RDB, WRB, and CSB pins in the Intel and AMCC* component. However, the INT has to be connected to the SP_ACK_L as the PMC-Sierra* Interface does. The ALE pin shares the SP_CP signal. If the timing does not meet specification, then ALE can be tied high as shown in Figure 49. It employs the same method as Lucent*’s TDAT042G5’s topology to pack and unpack the data between the IXP2800 Slowport interface and the Intel and AMCC* microprocessor interface. Hardware Reference Manual 157 Intel® IXP2800 Network Processor Intel XScale® Core For a write, SP_CP loads the data onto the 74F646 (or equivalent) tri-state buffers, using two clock cycles. To reduce the pin count, the 16-bit data is latched with the same pin (SP_CS_L[1]), assuming that a turnaround cycle is inserted between the transaction cycles. For a read, data are shifted out of two 74F646 or equivalent tri-state buffers by SP_CP, using two consecutive clock cycles. Figure 48. An Interface Topology with Intel / AMCC* SONET/SDH Device VCC SP_RD_L RDB SP_WR_L WRB SP_CS_L[1] CSB SP_ACK_L INT MCUTYPE SP_AD[7:0] ALE ADDR[9:0] SP_ALE_L CE# D[7:0] CP SP_CLK Intel® IXP2800 Network Processor Clock Driver CY2305 ADDR[10:8] CE# D[7:0] CP Intel® or AMCC* SONET/SDH ADDR[7:1] VCC 74F646 DATA[15:0] SAB SBA CPAB CPBA SP_OE_L 74F377 Q[7:0] D[7:0] SP_CP 74F377 Q[7:0] OE# DIR DATA[15:8] O[7:0] VCC 74F646 D[7:0] CPAB SAB SBA CPBA SP_DIR OE# DIR DATA[7:0] O[7:0] * Other names and brands may be claimed as property of others. A9714-02 158 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 49. Mode 3 Second Interface Topology with Intel / AMCC* SONET/SDH Device VCC SP_RD_L E SP_WR_L RWB SP_CS_L[1] CSB MCUTYPE INT SP_ACK_L VCC SP_AD[7:0] ALE ADDR[9:0] SP_ALE_L SP_CLK Intel® IXP2800 Network Processor Clock Driver CY2305 CE# D[7:0] CP Q[7:0] 74F377 ADDR[10:8] CE# D[7:0] CP Q[7:0] 74F377 ADDR[7:1] VCC 74F646 DATA[15:0] D[7:0] SP_CP SP_OE_L CPAB CPBA OE# DIR SAB SBA DATA[15:8] O[7:0] VCC 74F646 D[7:0] SP_DIR Intel® or AMCC* SONET/SDH CPAB CPBA OE# DIR SAB SBA DATA[7:0] O[7:0] * Other names and brands may be claimed as property of others. A9715-02 Hardware Reference Manual 159 Intel® IXP2800 Network Processor Intel XScale® Core Mode 3 Write Interface Protocol Figure 50 depicts a single write transaction launched from the IXP2800 Network Processor to the Intel and AMCC* SONET/SDH device, followed by two consecutive reads. Compared with the Lucent* TDAT042G5, this device has a shorter access time, about eight clock cycles (i.e., 160 ns). In this case, an intervening cycle may not be needed for the write transactions. Therefore, the throughput is about 12.5 Mbytes per second. Figure 50. Mode 3 Single Write Transfer Followed by Read (B0) 0 2 4 6 8 10 12 14 16 18 20 SP_CLK SP_ALE_L SP_CS_L[1]/CSB SP_WR_L/WRB SP_RD_L/RDB SP_AD[7:0] A A [7:0] [15:8] D [7:0] D[15:8] A [7:0] A [15:8] D[15:8] D[7:0] SP_ACK_L/INT SP_CP SP_OE_L SP_DIR ADDR[15:0] DATA[15:0] A [7:0] A [10:8] A[10:1] D [15:8] D[15:0] A [7:0] A[10:1] D[15:0] D[15:0] 2xD[15:8] B1749-04 160 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Mode 3 Read Interface Protocol Figure 51 depicts a single read transaction launched from the IXP2800 to the Intel and AMCC* SONET/SDH device, followed by two consecutive writes. Similarly, the access time is much better than the Lucent* TDAT042G5. The access time is eight clock cycles or 160 ns for a 50-MHz Slowport clock. Here, there are three intervening cycles between transactions. Therefore, the throughput is 11.1 Mbytes per second. Figure 51. Mode 3 Single Read Transfer Followed by Write (B0) 0 2 4 6 8 10 12 14 16 18 20 22 24 SP_CLK SP_ALE_L SP_CS_L[1] /CSB SP_WR_L/WRB SP_RD_L/RDB SP_AD[7:0] A [7:0] A [15:8] D[15:8] D[7:0] A [7:0] A [15:8] A [7:0] A [10:8] D [7:0] D[15:8] A [7:0] A[15:8] A[10:1] A [10:8] SP_ACK_L /INT SP_CP SP_OE_L SP_DIR ADDR[15:0] A [7:0] DATA[15:0] A[10:1] D[15:0] D[15:0] 2xD[15:8] D[15:0] D[15:0] B1752-07 Mode 4 Interfacing Topology Figure 52 demonstrates one of the topologies used to connect Slowport to the Intel and AMCC* SONET/SDH device. Similar to the Lucent* TDAT042G5 interface, the address and the data need demultiplexing. It requires a total of six buffers. The RD_L, WR_L, and CS_L[1] entirely match the E, RWB, and CSB pins respectively, in the Intel framer configured to Motorola* mode. However, the INT has to be connected to the SP_ACK_L as the PMC-Sierra* Interface does. The ALE pin can share the SP_CP. However, if it does not meet the timing, the ALE pin can be tied high as shown in Figure 53. Hardware Reference Manual 161 Intel® IXP2800 Network Processor Intel XScale® Core It employs the same way to pack and unpack the data between the IXP2800 Network Processor Slowport interface and the Intel and AMCC* microprocessor interface. For a write, W2B loads the data onto the 74F646 or equivalent tri-state buffers, using two clock cycles. To reduce the pin count, the 16-bit data are latched with the same pin (CS_L[1]), assuming that a turnaround cycle is inserted between the transaction cycles. For a read, data are pipelined out of two 74F646 or equivalent tri-state buffers by B2S, using two consecutive clock cycles. Figure 52. An Interface Topology with Intel / AMCC* SONET/SDH Device in Motorola* Mode SP_RD_L E SP_WR_L RWB SP_CS_L[1] CSB SP_ACK_L INT MCUTYPE SP_AD[7:0] ALE ADDR[9:0] SP_ALE_L SP_CLK Intel® IXP2800 Network Processor Clock Driver CY2305 CE# D[7:0] CP Q[7:0] ADDR[10.8] CE# D[7:0] CP Q[7:0] VCC DATA[15:0] D[7:0] SP_OE_L 74F377 Intel® or AMCC* SONET/SDH ADDR[7:1] 74F646 SP_CP 74F377 SAB SBA CPAB CPBA DATA[15:8] OE# DIR O[7:0] VCC 74F646 D[7:0] CPAB SAB SBA CPBA SP_DIR OE# DIR DATA[7:0] O[7:0] * Other names and brands may be claimed as property of others. A9718-02 162 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Figure 53. Second Interface Topology with Intel / AMCC* SONET/SDH Device SP_RD_L E SP_WR_L RWB SP_CS_L[1] CSB MCUTYPE INT SP_ACK_L VCC SP_AD[7:0] ALE ADDR[9:0] SP_ALE_L SP_CLK Intel® IXP2800 Network Processor Clock Driver CY2305 CE# D[7:0] CP Q[7:0] ADDR[10:8] CE# D[7:0] CP Q[7:0] VCC 74F646 SP_OE_L DATA[15:0] CPAB CPBA OE# DIR SAB SBA DATA[15:8] O[7:0] VCC 74F646 D[7:0] SP_DIR 74F377 Intel® or AMCC* SONET/SDH ADDR[7:1] D[7:0] SP_CP 74F377 CPAB CPBA OE# DIR SAB SBA DATA[7:0] O[7:0] * Other names and brands may be claimed as property of others. A9719-02 Hardware Reference Manual 163 Intel® IXP2800 Network Processor Intel XScale® Core Mode 4 Write Interface Protocol Figure 54 depicts a single write transaction launched from the IXP2800 Network Processor to the Intel and AMCC* SONET/SDH device, followed by two consecutive reads. Compared with the Lucent* TDAT042G5, this device has a shorter access time, about eight clock cycles (i.e., 120 ns). In this case, an intervened cycle may not be needed; therefore, the throughput is about 12.5 Mbytes per second. Figure 54. Mode 4 Single Write Transfer (B0) 0 2 4 6 8 10 12 14 16 18 SP_CLK SP_ALE_L SP_CS_L[1]/CSB SP_WR_L/RWB SP_RD_L/E SP_AD[7:0] A [7:0] A [15:8] D [7:0] D[15:8] A [7:0] A [15:8] D[15:8] D[7:0] SP_ACK_L/INT SP_CP SP_OE_L SP_DIR ADDR[15:0] DATA[15:0] A [7:0] A[10:1] D [7:0] D[15:0] A [7:0] A[10:1] D[15:0] D[15:0] 2xD[15:8] B1756-04 164 Hardware Reference Manual Intel® IXP2800 Network Processor Intel XScale® Core Mode 4 Read Interface Protocol Figure 55 shows a single read transaction launched from the IXP2800 Network Processor to the Intel and AMCC* SONET/SDH device, followed by two consecutive writes. Similarly, the access time is much better than the Lucent* TDAT042G5. The access time is about eight clock cycles or 160 ns. Here, we need an intervened cycle at the back. Therefore, the throughput is 11.2 Mbytes per second. Figure 55. Mode 4 Single Read Transfer (B0) 0 2 4 6 8 10 12 14 16 18 20 22 24 26 SP_CLK SP_ALE_L SP_CS_L[1]/CSB SP_WR_L/RWB SP_RD_L/E SP_AD[7:0] A [7:0] A [15:8] D[15:8] D[7:0] A [7:0] A [15:8] D [7:0] D[15:8] A [7:0] SP_ACK_L/INT SP_CP SP_OE_L SP_DIR ADDR[15:0] A [7:0] DATA[15:0] A[10:1] D[15:0] D[15:0] 2xD[15:8] A [7:0] A[10:1] D [7:0] D[15:0] B1757-07 Hardware Reference Manual 165 Intel® IXP2800 Network Processor Intel XScale® Core 166 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines Microengines 4 This section defines the Network Processor Microengine (ME). This is the second version of the Microengine, and is often referred to as the MEv2 (Microengine Version 2). 4.1 Overview The following sections describe the programmer’s view of the Microengine. The block diagram in Figure 56 is used in the description. Note that this block diagram is simplified for clarity, not all interface signals are shown, and some blocks and connectivity have been omitted to make the diagram more readable. This block diagram does not show any pipeline stages, rather it shows the logical flow of information. The Microengine provides support for software controlled multi-threaded operation. Given the disparity in processor cycle times versus external memory times, a single thread of execution will often block waiting for external memory operations to complete. Having multiple threads available allows for threads to interleave operation—there is often at least one thread ready to run while others are blocked. Hardware Reference Manual 167 Intel® IXP2800 Network Processor Microengines Figure 56. Microengine Block Diagram NNData_In (from previous ME) 640 Local Mem d e c o d e S_Push (from SRAM Scratchpad, MSF, Hash, PCI, CAP) D_Push (from DRAM) 128 GPRs (A Bank) 128 GPRs (B Bank) 128 Next Neighbor 128 D XFER In 128 S XFER In Control Store Lm_addr_1 Lm_addr_0 A_Src B_Src T_Index NN_Get CRC_Remainder Immed CRC Unit B_Operand A_Operand Execution Datapath (Shift, Add, Subtract, Multiply Logicals, Find First Bit, CAM) ALU_Out Dest S_Push NN_Data_Out (to next ME) 128 D XFER Out Local CSRs CMD FIFO (4) 128 S XFER Out Command D_Pull Control Data S_Pull B1670-01 168 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines 4.1.1 Control Store The Control Store is a static RAM that holds the program that the Microengine executes. It holds 8192 instructions, each of which is 40 bits wide. It is initialized by an external device that writes to Ustore_Addr and Ustore_Data Local CSRs. The Control Store can optionally be protected by parity against soft errors. The parity protection is optional, so that it can be disabled for implementations that don’t need or want to pay the cost for it. Parity checking is enabled by CTX_Enable[Control Store Parity Enable]. A parity error on an instruction read will halt the Microengine and assert an output signal that can be used as an interrupt. 4.1.2 Contexts There are eight hardware Contexts available in the Microengine. To allow for efficient context swapping, each Context has its own register set, Program Counter, and Context specific Local registers. Having a separate copy per Context eliminates the need to move Context specific information to/from shared memory and Microengine registers for each Context swap. Fast context swapping allows a Context to do computation while other Contexts wait for IO (typically external memory accesses) to complete or for a signal from another Context or hardware unit. Note: a context swap is similar to a taken branch in timing. Each of the eight Contexts is always in one of four states. 1. Inactive — Some applications may not require all eight contexts. A Context is in the Inactive state when its CTX_Enable CSR enable bit is a 0. 2. Executing — A Context is in Executing state when its context number is in Active_CTX_Status CSR. The executing Context’s PC is used to fetch instructions from the Control Store. A Context will stay in this state until it executes an instruction that causes it to go to Sleep state (there is no hardware interrupt or preemption; Context swapping is completely under software control). At most one Context can be in Executing state at any time. 3. Ready — In this state, a Context is ready to execute, but is not because a different Context is executing. When the Executing Context goes to Sleep state, the Microengine’s context arbiter selects the next Context to go to the Executing state from among all the Contexts in the Ready state. The arbitration is round robin. 4. Sleep — Context is waiting for external event(s) specified in the CTX_#_Wakeup_Events CSR to occur (typically, but not limited to, an IO access). In this state the Context does not arbitrate to enter the Executing state. The state diagram in Figure 57 illustrates the Context state transitions. Each of the eight Contexts will be in one of these states. At most one Context can be in Executing state at a time; any number of Contexts can be in any of the other states. Hardware Reference Manual 169 Intel® IXP2800 Network Processor Microengines Figure 57. Context State Transition Diagram CTX_ENABLE bit is set by Intel XScale® Core Reset Inactive CTX_ENABLE bit is cleared Sleep Ready CTX_ENABLE bit is cleared Ex te lE rn a ve ig nt S n al es arriv Context executes CTX Arbitration instruction Executing Context goes to Sleep state, and this Context is the highest round-robin priority. Executing Note: After reset, the Intel XScale® Core processor must load the starting address of the CTX_PC, load the CTX_WAKEUP_EVENTS to 0x1 (voluntary), and then set the appropriate CTX_ENABLE bits to begin executing Context(s). A9352-03 The Microengine is in Idle state whenever no Context is running (all Contexts are in either Inactive or Sleep states). This state is entered: 1. After reset (because CTX_Enable Local CSR is clear, putting all Contexts into Inactive states). 2. When a context swap is executed, but no context is ready to wakeup. 3. When a ctx_arb[bpt] instruction is executed by the Microengine (this is a special case of condition 2 above, since the ctx_arb[bpt] clears CTX_Enable, putting all Contexts into Inactive states). The Microengine provides the following functionality during Idle state: 1. The Microengine continuously checks if a Context is in Ready state. If so, a new Context begins to execute. If no Context is Ready, the Microengine remains in the Idle state. 2. Only the ALU instructions are supported. They are used for debug via special hardware defined in number 3 below. 3. A write to the Ustore_Addr Local CSR with the Ustore_Addr[ECS] bit set, causing the Microengine to repeatedly execute the instruction pointed by the address specified in the Ustore_Addr CSR. Only the ALU instructions are supported in this mode. Also, the result of the execution is written to the ALU_Out Local CSR rather than a destination register. 4. A write to the Ustore_Addr Local CSR with the Ustore_Addr[ECS] bit set, followed by a write to the Ustore_Data Local CSR loads an instruction into the Control Store. After the Control Store is loaded, execution proceeds as described in number 3 above. Note that the write to Ustore_Data causes Ustore_Addr to increment, so it must be written back to the address of the desired instruction. 170 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines 4.1.3 Datapath Registers As shown in the block diagram in Figure 56, each Microengine contains four types of 32-bit datapath registers: • • • • 4.1.3.1 256 General Purpose registers 512 Transfer registers 128 Next Neighbor registers 640 32-bit words of Local Memory General-Purpose Registers (GPRs) GPRs are used for general programming purposes. They are read and written exclusively under program control. GPRs, when used as a source in an instruction, supply operands to the execution datapath. When used as a destination in an instruction, they are written with the result of the execution datapath. The specific GPRs selected are encoded in the instruction. The GPRs are physically and logically contained in two banks, GPR A and GPR B, defined in Table 57. Note: 4.1.3.2 The Microengine registers are defined in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Transfer Registers There are four types of transfer (abbreviated as Xfer) registers used for transferring data to and from the Microengine and locations external to the Microengine (DRAMs, SRAMs, etc.). • • • • S_TRANSFER_IN S_TRANSFER_OUT D_TRANSFER_IN D_TRANSFER_OUT Transfer_In registers, when used as a source in an instruction, supply operands to the execution datapath. The specific register selected is either encoded in the instruction or selected indirectly using T_Index. Transfer_In registers are written by external units based on the Push_ID input to the Microengine. Transfer_Out registers, when used as a destination in an instruction, are written with the result from the execution datapath. The specific register selected is encoded in the instruction, or selected indirectly via T_Index. Transfer_Out registers supply data to external units based on the Pull_ID input to the Microengine. As shown in Figure 56, the S_TRANSFER_IN and D_TRANSFER_IN registers connect to both the S_Push and D_Push buses via a multiplexor internal to the Microengine. Additionally, the S_TRANSFER_OUT and D_TRANSFER_OUT Transfer registers connect to both the S_Pull and D_Pull buses. This feature enables a programmer to use the either type of transfer register regardless of the source or destination of the transfer. Hardware Reference Manual 171 Intel® IXP2800 Network Processor Microengines Typically, the external units access the Transfer registers in response to commands sent by the Microengines. The commands are sent in response to instructions executed by the Microengine (for example, the command instructs a SRAM controller to read from external SRAM, and place the data into a S_TRANSFER_IN register). However, it is possible for an external unit to access a given Microengine’s Transfer registers either autonomously, or under control of a different Microengine, or the Intel XScale® core, etc. The Microengine interface signals controlling writing/ reading of the Transfer_In/Transfer_Out registers are independent of the operation of the rest of the Microengine. 4.1.3.3 Next Neighbor Registers A new feature added for the Microengine Version 2 are 128 Next Neighbor registers that provide a dedicated datapath for transferring data from the previous/next neighbor Microengine. Next Neighbor registers, when used as a source in an instruction, supply operands to the execution datapath. They are written in two different ways: (1) by an external entity, typically, but not limited to, another adjacent Microengine, or (2) by the same Microengine they are in, as controlled by CTX_Enable[NN_Mode]. The specific register is selected in one of two ways: (1) Contextrelative, the register number is encoded in the instruction, or (2) as a Ring, selected via NN_Get and NN_Put CSR registers. When CTX_Enable[NN_Mode] is ‘0’ – When Next Neighbor is used as a destination in an instruction, the instruction result data is sent out of the Microengine, typically to another, adjacent Microengine. When CTX_Enable[NN_Mode] is ‘1’– When Next Neighbor is used as a destination in an instruction, the instruction result data is written to the selected Next Neighbor register in the Microengine. Note that there is a 5-instruction latency until the newly written data can be read. The data is not sent out of the Microengine as it would be when CTX_Enable[NN_Mode] is ‘0’. Table 56. Next Neighbor Write as a Function of CTX_Enable[NN_Mode] Where the Write Goes NN_Mode 4.1.3.4 External? NN Register in this Microengine? 0 Yes No 1 No Yes Local Memory Local Memory is addressable storage located in the Microengine, organized as 640 32-bit words. Local Memory is read and written exclusively under program control. Local Memory supplies operands to the execution datapath as a source, and receives results as a destination. The specific Local Memory location selected is based on the value in one of the Local Memory_Addr registers, which are written by local_CSR_wr instructions. There are two LM_Addr registers per Context and a working copy of each. When a Context goes to the Sleep state, the value of the working copies is put into the Context’s copy of LM_Addr. When the Context goes to the Executing state, the value in its copy of LM_Addr is put into the working copies. The choice of LM_Addr_0 or LM_Addr_1 is selected in the instruction. 172 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines It is also possible to make use of both or one LM_Addrs as global by setting CTX_Enable[LM_Addr_0_Global] and/or CTX_Enable[LM_Addr_1_Global]. When used globally, all Contexts use the working copy of LM_Addr in place of their own Context specific one; the Context specific ones are unused. 4.1.4 Addressing Modes GPRs can be accessed in two different addressing modes: Context-Relative and Absolute. Some instructions can specify either mode; other instructions can specify only Context-Relative mode. • Transfer and Next Neighbor registers can be accessed in Context-Relative and Indexed modes. • Local Memory is accessed in Indexed mode. • The addressing mode in use is encoded directly into each instruction, for each source and destination specifier. 4.1.4.1 Context-Relative Addressing Mode The GPRs are logically subdivided into equal regions such that each Context has exclusive access to one of the regions. The number of regions (four or eight) is configured in the CTX_Enable CSR. Thus, a Context-Relative register name is actually associated with multiple different physical registers. The actual register to be accessed is determined by the Context making the access request (the Context number is concatenated with the register number specified in the instruction — see Table 57). Context-Relative addressing is a powerful feature that enables eight different contexts to share the same microcode, yet maintain separate data. Table 57 shows how the Context number is used in selecting the register number in relative mode. The register number in Table 57 is the Absolute GPR address, or Transfer or Next Neighbor Index number to use to access the specific Context-Relative register. For example, with eight active Contexts, Context-Relative Register 0 for Context 2 is Absolute Register Number 32. Table 57. Registers Used by Contexts in Context-Relative Addressing Mode Number of Active Contexts 8 4 Hardware Reference Manual Active Context Number GPR Absolute Register Numbers S_Transfer or Neighbor Index Number D_Transfer Index Number A Port B Port 0 0 – 15 0 – 15 0 – 15 0 – 15 1 16 – 31 16 – 31 16 – 31 16 – 31 2 32 – 47 32 – 47 32 – 47 32 – 47 3 48 – 63 48 – 63 48 – 63 48 – 63 4 64 – 79 64 – 79 64 – 79 64 – 79 5 80 – 95 80 – 95 80 – 95 80 – 95 6 96 – 111 96 – 111 96 – 111 96 – 111 7 112 – 127 112 – 127 112 – 127 112 – 127 0 0 – 31 0 – 31 0 – 31 0 – 31 2 32 – 63 32 – 63 32 – 63 32 – 63 4 64 – 95 64 – 95 64 – 95 64 – 95 6 96 – 127 96 – 127 96 – 127 96 – 127 173 Intel® IXP2800 Network Processor Microengines 4.1.4.2 Absolute Addressing Mode With Absolute addressing, any GPR can be read or written by any one of the eight Contexts in a Microengine. Absolute addressing enables register data to be shared among all of the Contexts, e.g., for global variables or for parameter passing. All 256 GPRs can be read by Absolute address. 4.1.4.3 Indexed Addressing Mode With Indexed addressing, any Transfer or Next Neighbor register can be read or written by any one of the eight Contexts in an Microengine. Indexed addressing enables register data to be shared among all of the Contexts. For indexed addressing the register number comes from the T_Index register for Transfer registers or NN_Put and NN_Get registers (for Next Neighbor registers). 4.2 Local CSRs Local Control and Status registers (CSRs) are external to the Execution Datapath, and hold specific purpose information. They can be read and written by special instructions (local_csr_rd and local_csr_wr) and are typically accessed less frequently than datapath registers. Because Local CSRs are not built in the datapath, there is a write to use delay of either three or four cycles, and a read to consume penalty of one cycle. 4.3 Execution Datapath The Execution Datapath can take one or two operands, perform an operation, and optionally write back a result. The sources and destinations can be GPRs, Transfer registers, Next Neighbor registers, and Local Memory. The operations are shifts, addition, subtraction, logicals, multiplication, byte-align, and “find first bit set”. 4.3.1 Byte Align The datapath provides a mechanism to move data from source register(s) to any destination register(s) with byte aligning. Byte aligning takes four consecutive bytes from two concatenated values (eight bytes), starting at any of four byte boundaries (0, 1, 2, 3), and based on the endian type (which is defined in the instruction opcode), as shown in Table 58. The four bytes are taken from two concatenated values. Four bytes are always supplied from a temporary register that always holds the A or B operand from the previous cycle, and the other four bytes from the B or A operand of the Byte Align instruction. The operation is described below using the block diagram Figure 58. The alignment is controlled by the two LSBs of the Byte_Index Local CSR. Table 58. Align Value and Shift Amount Align Value (in Byte_Index[1:0]) 174 Right Shift Amount (Number of Bits in Decimal) Little-Endian Big-Endian 0 0 32 1 8 24 2 16 16 3 24 8 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines Figure 58. Byte Align Block Diagram Prev_B Prev_A . . . . . . A_Operand B_Operand Shift Byte_Index Result A9353-01 Example 24 shows an align sequence of instructions and the value of the various operands. Table 59 shows the data in the registers for this example. The value in Byte_Index[1:0] CSR (which controls the shift amount) for this example is 2. Table 59. Register Contents for Example 23 Register Byte 3 [31:24] Byte 2 [23:16] Byte 1 [15:8] Byte 0 [7:0] 0 0 1 2 3 1 4 5 6 7 2 8 9 A B 3 C D E F Example 24. Big-Endian Align Instruction Byte_align_be[--, r0] Byte_align_be[dest1, r1] Prev B A Operand B Operand Result -- -- 0123 -- 0123 0123 4567 2345 Byte_align_be[dest2, r2] 4567 4567 89AB 6789 Byte_align_be[dest3, r3] 89AB 89AB CDEF ABCD NOTE: A Operand comes from Prev_B register during byte_align_be instructions. Hardware Reference Manual 175 Intel® IXP2800 Network Processor Microengines Example 25 shows another sequence of instructions and the value of the various operands. Table 60, shows the data in the registers for this example. The value in Byte_Index[1:0] CSR (which controls the shift amount) for this example is 2. Table 60. Register Contents for Example 24 Register Byte 3 [31:24] Byte 2 [23:16] Byte 1 [15:8] Byte 0 [7:0] 0 3 2 1 0 1 7 6 5 4 2 B A 9 8 3 F E D C Example 25. Little-Endian Align Instruction Byte_align_le[--, r0] A Operand B Operand Prev A Result 3210 -- -- -- Byte_align_le[dest1, r1] 7654 3210 3210 5432 Byte_align_le[dest2, r2] BA98 7654 7654 9876 Byte_align_le[dest3, r3] FEDC BA98 BA98 DCBA NOTE: B Operand comes from Prev_A register during byte_align_le instructions. As the examples show, byte aligning “n” words takes “n+1” cycles due to the first instruction needed to start the operation. Another mode of operation is to use the T_Index register with post-increment, to select the source registers. T_Index operation is described later in this chapter. 4.3.2 CAM The block diagram in Figure 59 is used to explain the CAM operation. The CAM has 16 entries. Each entry stores a 32-bit value, which can be compared against a source operand by instruction: CAM_Lookup[dest_reg, source_reg]. All entries are compared in parallel, and the result of the lookup is a 9-bit value that is written into the specified destination register in bits 11:3, with all other bits of the register set to 0 (the choice of bits 11:3 is explained below). The result can also optionally be written into either of the LM_Addr registers (see below in this section for details). The 9-bit result consists of four State bits (dest_reg[11:8]), concatenated with a 1-bit Hit/Miss indication (dest_reg[7]), concatenated with 4-bit entry number (dest_reg[6:3]). All other bits of dest_reg are written with 0. Possible results of the lookup are: • miss (0) — lookup value is not in CAM, entry number is Least Recently Used entry (which can be used as a suggested entry to replace), and State bits are 0000. • hit (1) — lookup value is in CAM, entry number is entry that has matched; State bits are the value from the entry that has matched. 176 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines Note: The State bits are data associated with the entry. State bits are only used by software. There is no implication of ownership of the entry by any Context. The State bits hardware function is: • the value is set by software (when the entry is loaded or changed in an already-loaded entry). • its value is read out on a lookup that hits, and used as part of the status written into the destination register. • its value can be read out separately (normally only used for diagnostic or debug). The LRU (Least Recently Used) Logic maintains a time-ordered list of CAM entry usage. When an entry is loaded, or matches on a lookup, it is marked as MRU (Most Recently Used). Note that a lookup that misses does not modify the LRU list. The CAM is loaded by instruction: CAM_Write[entry_reg, source_reg, state_value]. The value in the register specified by source_reg is put into the Tag field of the entry specified by entry_reg. The value for the State bits of the entry is specified in the instruction as state_value. The value in the State bits for an entry can be written, without modifying the Tag, by instruction: CAM_Write_State[entry_reg, state_value]. Note: CAM_Write_State does not modify the LRU list. Figure 59. CAM Block Diagram Lookup Value (from A port) Tag State Tag State Tag State Tag State Match Match Match Status and LRU Logic Match Lookup Status (to Dest Req) State Status Entry Number 0000 Miss 0 LRU Entry State Hit 1 Hit Entry A9354-01 Hardware Reference Manual 177 Intel® IXP2800 Network Processor Microengines One possible way to use the result of a lookup is to dispatch to the proper code using instruction: jump[register, label#],defer [3] where the register holds the result of the lookup. The State bits can be used to differentiate cases where the data associated with the CAM entry is in flight, or is pending a change, etc. Because the lookup result was loaded into bits[11:3] of the destination register, the jump destinations are spaced eight instructions apart. This is a balance between giving enough space for many applications to complete their task without having to jump to another region, versus consuming too much Control Store. Another way to use the lookup result is to branch on just the hit miss bit, and use the entry number as a base pointer into a block of Local Memory. When enabled, the CAM lookup result is loaded into Local_Addr as follows: LM_Addr[5:0] = 0 ([1:0] are read-only bits) LM_Addr[9:6] = lookup result [6:3] (entry number) LM_Addr[11:10] = constant specified in instruction This function is useful when the CAM is used as a cache, and each entry is associated with a block of data in Local Memory. Note that the latency from when CAM_Lookup executes until the LM_Addr is loaded is the same as when LM_Addr is written by a Local_CSR_Wr instruction. The Tag and State bits for a given entry can be read by instructions: CAM_Read_Tag[dest_reg, entry_reg] CAM_Read_State[dest_reg, entry_reg] The Tag value and State bits value for the specified entry is written into the destination register, respectively for the two instructions (the State bits are placed into bits [11:8] of dest_reg, with all other bits 0). Reading the tag is useful in the case where an entry needs to be evicted to make room for a new value — the lookup of the new value results in a miss, with the LRU entry number returned as a result of the miss. The CAM_Read_Tag instruction can then be used to find the value that was stored in that entry. An alternative would be to keep the tag value in a GPR. These two instructions can also be used by debug and diagnostic software. Neither of these modify the state of the LRU pointer. Note: The following rules must be adhered to when using the CAM. • CAM is not reset by Microengine reset. Software must either do a CAM_clear prior to using the CAM to initialize the LRU and clear the tags to 0, or explicitly write all entries with CAM_write. • No two tags can be written to have the same value. If this rule is violated, the result of a lookup that matches that value will be unpredictable, and LRU state is unpredictable. The value, 0x00000000 can be used as a valid lookup value. However, note that the CAM_clear instruction puts 0x00000000 into all tags.To avoid violating rule 2 after doing CAM_clear, it is necessary to write all entries to unique values prior to doing a lookup of 0x00000000. An algorithm for debug software to determine the contents of the CAM is shown in Example 26. 178 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines Example 26. Algorithm for Debug Software to Determine the Contents of the CAM ; First read each of the tag entries. Note that these reads ; don’t modify the LRU list or any other CAM state. tag[0] = CAM_Read_Tag(entry_0); ...... tag[15] = CAM_Read_Tag(entry_15); ; Now read each of the state bits state[0] = CAM_Read_State(entry_0); ... state[15] = CAM_Read_State(entry_15); ; Knowing what tags are in the CAM makes it possible to ; create a value that is not in any tag, and will therefore ; miss on a lookup. ; Next loop through a sequence of 16 lookups, each of which will ; miss, to obtain the LRU values of the CAM. for (i = 0; i < 16; i++) BEGIN_LOOP ; Do a lookup with a tag not present in the CAM. On a ; miss, the LRU entry will be returned. Since this lookup ; missed the LRU state is not modified. LRU[i] = CAM_Lookup(some_tag_not_in_cam); ; Now do a lookup using the tag of the LRU entry. This ; lookup will hit, which makes that entry MRU. ; This is necessary to allow the next lookup miss to ; see the next LRU entry. junk = CAM_Lookup(tag[LRU[i]]); END_LOOP ; Because all entries were hit in the same order as they were ; LRU, the LRU list is now back to where it started before the ; loop executed. ; LRU[0] through LRU[15] holds the LRU list. The CAM can be cleared with CAM_Clear instruction. This instruction writes 0x00000000 simultaneously to all entries tag, clears all the state bits, and puts the LRU into an initial state (where entry 0 is LRU, ..., entry 15 is MRU). 4.4 CRC Unit The CRC Unit operates in parallel with the Execution Datapath. It takes two operands, performs a CRC operation, and writes back a result. CRC-CCITT, CRC-32, CRC-10, CRC-5, and iSCSI polynomials are supported. One of the operands is the CRC_Remainder Local CSR, and the other is a GPR, Transfer_In register, Next Neighbor, or Local Memory, specified in the instruction and passed through the Execution Datapath to the CRC Unit. The instruction specifies the CRC operation type, whether to swap bytes and or bits, and the bytes of the operand to be included in the operation. The result of the CRC operation is written back into CRC_Remainder. The source operand can also be written into a destination register (however the byte/bit swapping and masking do not affect the destination register; they only affect the CRC computation). This allows moving data, for example, from S_TRANSFER_IN registers to S_TRANSFER_OUT registers at the same time as computing the CRC. Hardware Reference Manual 179 Intel® IXP2800 Network Processor Microengines 4.5 Event Signals Event Signals are used to coordinate a program with completion of external events. For example, when a Microengine issues a command to an external unit to read data (which will be written into a Transfer_In register), the program must insure that it does not try to use the data until the external unit has written it. There is no hardware mechanism to flag that a register write is pending, and then prevent the program from using it. Instead the coordination is under software control, with hardware support. When the program issues the command to the external event, it can request that the external unit supply an indication (called an Event Signal) that the command has been completed. There are 15 Event Signals per Context that can be used, and Local CSRs per Context to track which Event Signals are pending and which have been returned. The Event Signals can be used to move a Context from Sleep state to Ready state, or alternatively, the program can test and branch on the status of Event Signals. Event Signals can be set in nine different ways. 1. When data is written into S_TRANSFER_IN registers (part of S_Push_ID input) 2. When data is written into D_TRANSFER_IN registers (part of D_Push_ID input) 3. When data is taken from S_TRANSFER_OUT registers (part of S_Pull_ID input) 4. When data is taken from D_TRANSFER_OUT registers (part of D_Pull_ID input) 5. On InterThread_Sig_In input 6. On NN_Sig_In input 7. On Prev_Sig_In input 8. On write to Same_ME_Signal Local CSR 9. By Internal Timer Any or all Event Signals can be set by any of the above sources. When a Context goes to the Sleep state (executes a ctx_arb instruction, or a Command instruction with ctx_swap token), it specifies which Event Signal(s) it requires to be put in the Ready state. The ctx_arb instruction also specifies whether the logical AND or logical OR of the Event Signal(s) is needed to put the Context into the Ready state. When a Context Event Signals arrive, it goes to the Ready state, and then to the Executing state. In the case where the Event Signal is linked to moving data into or out of Transfer registers (numbers 1 through 4 in the list above), the code can safely use the Transfer register as the first instruction (for example, using a Transfer_In register as a source operand will get the new read data). The same is true when the Event Signal is tested for branches (br_=signal or br_!signal instructions). The ctx_arb instruction, CTX_Sig_Events, and CTX_Wakeup_#_Events Local CSR descriptions provide details. 180 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines 4.5.1 Microengine Endianness Microengine operation from an “endian” point of view can be divided into following categories: • • • • • • 4.5.1.1 Read from RBUF (64 bits) Write to TBUF (64 bits) Read/write from/to SRAM Read/write from/to DRAM Read/write from/to SHaC and other CSRs Write to Hash Read from RBUF (64 Bits) Data in RBUF is arranged in LWBE order. Whenever the Microengine reads from RBUF, the low order longword (LDW0) is transferred into Microengine transfer register 0 (treg0), the high order longword (LDW1) is transferred into treg1, etc. This is explained in Figure 60. Figure 60. Read from RBUF (64 Bits) MicroEngine 0123 4567 8 9 10 11 12 13 14 15 treg0 treg1 treg2 treg3 LDW1 LDW0 4567 12 13 14 15 0123 8 9 10 11 RBUF A8941-01 Hardware Reference Manual 181 Intel® IXP2800 Network Processor Microengines 4.5.1.2 Write to TBUF Data in TBUF is arranged in LWBE order. When writing from the Microengine transfer registers to TBUF, treg0 goes into LDW0, treg1 goes into LDW1, etc. See Figure 61. Figure 61. Write to TBUF (64 Bits) TBUF 0123 8 9 10 11 MicroEngine 4567 12 13 14 15 0123 4567 8 9 10 11 12 13 14 15 treg0 treg1 treg2 treg3 A8942-01 4.5.1.3 Read/Write from/to SRAM Data inside SRAM is in big-endian order. While transferring data from SRAM to a Microengine, no endianness is involved and first read data goes into the first transfer register specified, the next read data into the second, etc. 4.5.1.4 Read/Write from/to DRAM Data inside DRAM is in LWBE order. When a Microengine reads from DRAM, LDW0 goes into the first transfer register specified in the instruction, LDW1 goes into the next, and so on. While writing to DRAM, treg0 goes first, then followed by treg1, and both are combined in the DRAM controller as {LDW1, LDW0} and written as a 64-bit quantity into DRAM. 4.5.1.5 Read/Write from/to SHaC and Other CSRs Read and write from SHaC and other CSRs happen as 32-bit operations only and are endianindependent. The low byte goes into the low byte of the transfer register and the high byte goes into the high byte of the transfer register. 182 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines 4.5.1.6 Write to Hash Unit Figure 62 explains 48-, 64-, and 128-bit hash operations. When the Microengine transfers a 48-bit hash operand to the hash unit, the operand resides in two transfer registers and is transferred, as shown in Figure 62. In the second longword transfer, only the lower half is valid. Hash unit concatenates the two longwords as shown in Figure 62. Similarly, 64-bit and 128-bit hash operand transfers from the Microengine to the hash unit happen as shown in Figure 62. Figure 62. 48-, 64-, and 128-Bit Hash Operand Transfers 48-bit Hash 63 64-bit Hash 32 31 11 10 9 8 0 63 76543210 0 76543210 15 14 13 12 11 10 9 8 S-Push / S-Pull Bus MicroEngine Transfer Registers 32 31 S-Push / S-Pull Bus 76543210 treg0 11 10 9 8 treg1 MicroEngine Transfer Registers treg0 76543210 15 14 13 12 11 10 9 8 treg1 128-bit Hash 127 96 95 64 63 32 31 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 0 76543210 S-Push / S-Pull Bus MicroEngine Transfer Registers 76543210 treg0 15 14 13 12 11 10 9 8 treg1 23 22 21 20 19 18 17 16 treg2 31 30 29 28 27 26 25 24 treg3 A8943-01 4.5.2 Media Access Media operation can be divided in two parts: • Read from RBUF (Section 4.5.2.1) • Write to TBUF (Section 4.5.2.2) Hardware Reference Manual 183 Intel® IXP2800 Network Processor Microengines 4.5.2.1 Read from RBUF To analyze the endianness on the media-receive interface and the way in which bytes are arranged inside RBUF, a brief introduction of how bytes are generated from the serial interface is provided here. Pipe A denotes the serial stream of data received at the serial interface (SERDES). Bit 0 of byte 0 comes first, followed by bit 1, etc. Pipe B converts this bit stream into byte stream byte 0 — byte 7, etc. So, byte 0 currently is the least significant byte received. In Pipe C, before being transmitted to the SPI-4 interface, these bytes are organized in 16-bit words in big-endian order where byte 0 is at B[15:8] and byte 1 is at B[7:0]. When the SPI-4 interface inside the IXP2800 received these 16-bit words, they are put into RBUF in LWBE order where longwords inside one RBUF entry are organized in little-endian order as shown in one RBUF element in Figure 63. In the least-significant-longword, byte 0 is at a higher address than byte 3 (therefore, big-endian). Similarly, in the most-significant-longword, byte4 is at a higher address than byte 7 (therefore, big-endian). While transferring from RBUF to Microengine, the least significant longword from one RBUF element is transferred first, followed by the most significant longword into the Microengine transfer registers. . Figure 63. Bit, Byte, and Longword Organization in One RBUF Element B63 B32 B31 B0 byte byte byte byte byte byte byte byte 4 5 6 7 0 1 2 3 RBUF Element Offset n SPI-4 Bus addr15 addr8 addr7 addr0 byte 0 byte 2 byte 4 byte 1 byte 3 byte 5 byte 6 byte 7 Pipe C {7 6 5 4 3 2 1 0} byte 0 {15 14 13 12 11 10 9 8} byte 1 {23 22 21 20 19 18 17 16} byte 2 {31 30 29 28 27 26 25 24} byte 3 {63 62 61 60 59 58 57 56} byte 7 Pipe B byte 0 0 1 2 3 4 5 6 7 8 57 58 59 60 61 62 63 Pipe A A9725-01 184 Hardware Reference Manual Intel® IXP2800 Network Processor Microengines 4.5.2.2 Write to TBUF For writing to TBUF, the header comes from the Microengine and data comes from RBUF or DRAM. Since the Microengine to TBUF header transfer happened in 8-byte chunks, it is possible that the first longword that is inside tr0 may not contain any data if the valid header begins in transfer register tr1. Since data in tr0 goes to the LW1 location at offset 0 and data in tr2 goes to the LW0 location at offset 0, there are some invalid bytes at the beginning of the header, at offset 0. These invalid bytes are removed by the aligner on the way out of TBUF, based on the control word for this TBUF element. The data from tr2, tr3, ... tr6 is placed in TBUF, as shown in Figure 64 in big-endian order. Figure 64. Write to TBUF To SPI-4 Remove the empty bytes based on the control word LW1 X X X X X h1 h4 h5 h6 h7 h8 h9 h10 h11 offset 1 h12 h13 X X X X X X offset 2 3 4 5 6 7 offset 3 X tr0 X X X X tr1 X h1 h2 h3 tr2 h4 h5 h6 h7 tr3 h8 h9 h10 h11 LW0 X X h2 8 9 10 11 12 13 14 15 offset 4 16 17 18 19 20 21 22 23 offset 5 X X X 3 4 5 6 7 A63 tr4 h12 h13 X X tr5 X X X X MicroEngine Transfer Registers h3 offset 0 4 64-bit Read from addr 1 by MicroEngine treg 0 gets 0123 treg 1 gets 4567 addr0 5 6 7 0 12 13 14 15 8 1 2 3 addr 0000_0000 9 10 11 addr 0001_0000 20 21 22 23 16 17 18 19 RBUF or DRAM A8945-01 Hardware Reference Manual 185 Intel® IXP2800 Network Processor Microengines Since data in RBUF or DRAM is arranged in LWBE order, it is swapped on the way into the TBUF to make it truly big-endian, as shown in Figure 64. Again, the invalid bytes at the beginning of the payload that starts at offset 3 and at the end-of-header at offset 2 is removed by the aligner on the way out of TBUF. 4.5.2.3 TBUF to SPI-4 Transfer Figure 65 shows how the MSF interface removes invalid bytes from TBUF data and transfers them onto the SPI-4 interface in 16-bit (2-byte) chunks. Figure 65. MSF Interface To SPI-4 Interface A15 A8 A7 4 A0 h1 h2 h3 h4 h5 h7 h9 h6 h8 h10 h11 h12 h13 4 6 8 3 5 7 9 10 11 12 13 14 15 LW1 LW0 X X X X h1 h5 h6 h7 h8 h9 h10 h11 offset 1 h12 h13 X X X X X X offset 2 3 4 5 6 7 offset 3 X Byte to bit-stream conversion To Serial Link After removing the invalid bytes, data is packed in two byte chunks. X X h3 h2 h1 Word to Byte conversion h4 X 3 h2 h3 offset 0 8 9 10 11 12 13 14 15 offset 4 16 17 18 19 20 21 22 23 offset 5 A8946-01 186 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM DRAM 5 This section describes Rambus* DRAM operation. 5.1 Overview The IXP2800 Network Processor has controllers for three Rambus* DRAM (RDRAM) channels. Either one, two, or three channels can be enabled. When more than one channel is enabled, the channels are interleaved (also known as striping) on 128-byte boundaries to provide balanced access to all populated channels. Interleaving is performed in hardware and is transparent to the programmer. The programmer views the DRAM memory space as a contiguous block of memory. The total address space of two Gbytes is supported by the DRAM interface regardless of the number of channels that are enabled. The controllers support 64-, 128-, 256-, and 512-Mbyte, and 1-Gbyte devices; however, with interleaving, each of the channels must have the same number, size, and speed of RDRAMs populated. Each channel can be populated with up to 32 RDRAM devices. While each channel must have the same size and speed RDRAMs, it is possible for each individual channel to have different size and speed RDRAMs, as long as the total amount of memory is the same for all of the channels. ECC (Error Correcting Code) is supported. Enabling ECC requires that x18 RDRAMs be used. If ECC is disabled, x16 RDRAMs can be used. The Microengines (MEs), Intel XScale® core, and PCI (external Bus Masters and DMA Channels) have access to the DRAM memory space. The controllers also automatically perform refresh as well as IO driver calibration to account for variations in operating conditions due to process, temperature, voltage, and board layout. RDRAM Powerdown and nap modes are not supported. Hardware Reference Manual 187 Intel® IXP2800 Network Processor DRAM 5.2 Size Configuration Each channel can be populated with 1 – 4 RDRAMs (Short Channel Mode). For supported loading configurations, refer to Table 61. The RAM technology used determines the increment size and maximum memory per channel as shown in Table 62. Note: One or two channels can be left unpopulated if desired. Table 61. RDRAM Loading Bus Interface Maximum Number of Loads Trace Length (inches) Short Channel: 400 and 533 MHz 4 devices per channel. 201 Long Channel: 400 MHz 2 RIMMs per channel – a maximum of 32 devices in both RIMMs. 201 Long Channel: 533 MHz 1 RIMM and 1 C-RIMM per channel – a maximum of 16 devices. 201 1. For termination, the DRAMs should be located as close as possible to the IXP2800 Network Processor. Table 62. RDRAM Sizes RDRAM Technology1 Increment Size Maximum per Channel 64/72 MB 8 MBs 256 MB 128/144 MB 16 MB 512 MB 256/288 MB 32 MB 1 GB2 512/576 MB 64 MB 2 GB2 NOTES: 1. The two numbers shown for each technology indicate x16 parts and x18 parts. 2. The maximum memory that can be addressed across all channels is 2 Gbytes. This limitation is based on the partitioning of the 4-Gbyte address space (32-bit addresses). Therefore, if all three channels are used, each can be populated up to a maximum of 768 Mbytes. Two channels can be populated to a maximum of 1 Gbyte each. A single channel could be populated to a maximum of 1 Gbyte. RDRAMs with 1 x 16 dependent banks, 2 x 16 dependent banks, and four independent banks are supported. 188 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.3 DRAM Clocking Figure 66 shows the clock generation for one channel (this description is just for reference; for more information, refer to Rambus* design literature). The other channels use the same configuration. Note: Refer to Section 10 for additional information on clocking. Figure 66. Clock Configuration RDRAM Intel® IXP2800 Network Processor CTM, nCTM CFM, nCFM PCLKM RDRAM Direct Rambus* Clock Generator (DRCG) SYNCLKN CLK_PHASE_REF REF_CLK A9726-02 The RDRAM Controller receives two clocks, both generated internal to the IXP2800 Network Processor. The internal clock, is used to control all logic associated with communication with other on-chip Units. This clock is ½ of the Microengine frequency, and is in the range of 500 – 700 MHz. The other clock, the Rambus* Memory Controller (RMC) clock, is internally divided by two and brought out on the CLK_PHASE_REF pin, which is then used as the reference clock for the DRCG (see Figure 67 and Figure 68). The reason for this is that our internal RMC clock is derived from the Microengine clock (supported programmable divide range is from 8 – 15 for the A stepping and 6 – 15 for the B stepping) at a Microengine frequency of 1.4 GHz (the available RMC clock frequencies are 100 MHz and 127 MHz). In the RMC implementation, we have a fixed 1:1 clock relationship between the RMC clock and the SYNCLK (SYNCLK = Clock-to-Master(CTM)/4); to maintain this relationship, we provide the clock to the DRCG. The CTM is received by the DRAM controller which it drives back out as Clock-from-Master (CFM). Additionally, the controller creates PCLKM and SYNCLKN, which are also driven to the DRCG. Hardware Reference Manual 189 Intel® IXP2800 Network Processor DRAM Figure 67. IXP2800 Clocking for RDRAM at 400 MHz DRCG 50 MHz Bus CLK = 400 MHz x8 Phase Detector 25 MHz CLK_PHASE_REF /2 System 100 MHz Ref_Clk 25 MHz /4 /4 PLL PCLK = 100 MHz SYNCLK = 100 MHz RMC /4 RAC A9727-01 Figure 68. IXP2800 Clocking for RDRAM at 508 MHz DRCG 63.5 MHz Bus CLK = 508 MHz x8 Phase Detector 31.75 MHz CLK_PHASE_REF /2 System 100 MHz Ref_Clk /4 31.75 MHz /4 PLL PCLK = 127 MHz RMC SYNCLK = 127 MHz /4 RAC A9728-01 5.4 Bank Policy The RDRAM Controller uses a “closed bank” policy. Banks are activated long enough to do an access and then closed and precharged. They are not left open in anticipation of another access to the same page. This is unlike many CPU applications, where there is a high degree of locality. Since that locality does not exist in the typical applications in which the IXP2800 Network Processor uses RDRAM, the “closed bank” policy is used. 190 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.5 Interleaving The RDRAM channels are interleaved on 128-byte boundaries in hardware to improve concurrency and bandwidth utilization. Contiguous addresses are directed to different channels by rearranging the physical address bits in a programmable manner described in Section 5.5.1 through Section 5.5.3 and then remapped as described in Section 5.5.4. The block diagram in Figure 69 illustrates the flow. Figure 69. Address Mapping Flow Bank 0 CMD FIFO Microengine, Intel XScale® core, PCIinitiated address Channel Selection In-Channel Address Address Remapping Bank 1 CMD FIFO Bank 2 CMD FIFO RDRAM_CONTROL[NO_CHAN] RDRAM_CONTROL[BANK_REMAP] Bank 3 CMD FIFO The mapping of addresses to channels is completely transparent to software. Software deals with physical addresses in RDRAM space; the mapping is done completely by hardware. Note: 5.5.1 Accessing an address above the amount of RDRAM populated will cause unpredictable results. Three Channels Active (3-Way Interleave) When all three channels are active, the interleave scheme selects the channel for each block, using modulo-3 reduction (address bits [31:7] are summed as modulo-3, and the remainder is the selected channel number). The algorithm ensures that adjacent blocks are mapped to different channels. The address within the DRAM is then selected by rearranging the received address, as shown in Table 63. In this case, the number of DRAMs on a channel must be either 1, 2, 4, 8, 16, or 32. For Rev. B, the address within the DRAM is selected by adding the received address to the contents of one of the CSRs (K0 – K11), or 0, as shown in Table 64. The values to load into K0 – K11 are a function of the amount of memory on the channel, and are specified in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. For memory sizes of 32, 64, or 128 Mbytes, etc., the specified constants give the same remapping as was done in a previous revision. Hardware Reference Manual 191 Intel® IXP2800 Network Processor DRAM Table 63. Address Rearrangement for 3-Way Interleave (Sheet 1 of 2) When these bits of address are all “1”s…1 Shift 30:7 right by this many bits 30:7 Add this amount to shifted 30:7 (based on amount of memory on the channel) Address within channel is {30:7+table_value), 6:0} 8 MB3 16 MB 32 MB3 64 MB 128 MB3 256 MB 512 MB3 1 GB 26 N/A2 N/A N/A N/A N/A N/A N/A 8388607 28:7 24 N/A N/A N/A N/A N/A 2097151 4194303 8388606 26:7 22 N/A N/A N/A 524287 1048575 2097150 4194300 8388600 24:7 20 N/A 131071 262143 524286 1048572 2097144 4194288 8388576 22:7 18 65535 131070 262140 524280 1048560 2097120 4194240 8388480 20:7 16 65532 131064 262128 524256 1048512 2097024 4194048 8388096 18:7 14 65520 131040 262080 524160 1048320 2096640 4193280 8386560 16:7 12 65472 130944 261888 523776 1047552 2095104 4190208 8380416 14:7 10 65280 130560 261120 522240 1044480 2088960 4177920 8355840 12:7 8 64512 129024 258048 516096 1032192 2064384 4128768 8257536 10:7 6 61440 122880 245760 491520 983040 1966080 3932160 7864320 8:7 4 49152 98304 196608 393216 786432 1572864 3145728 6291456 None 2 0 0 0 0 0 0 0 0 NOTES: 1. This is a priority encoder; when multiple lines satisfy the condition, the line with the largest number of ones is used. 2. N/A means not applicable. 3. For these cases, the top 3 blocks (each block is 128 bytes) of the logical address space is not accessible. For example if each channel has 8 Mbytes, only (24 Mbytes - 384) total bytes are usable. This is an artifact of the remapping method. 4. The numbers in the table are derived as follows: For the first pair of ones (8:7) value is 3/4 the number of blocks. For each subsequent pair of ones, the value is the previous value, plus another 3/4 the remaining blocks. • [8:7]==11 - 3/4 * blocks • [10:7]==1111 - (3/4 + 3/16) * blocks • [12:7]==111111 - (3/4 + 3/16 + 3/64) * blocks • etc. 192 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM Table 64. Address Rearrangement for 3-Way Interleave (Sheet 2 of 2) (Rev B) When these bits of address are all “1”s…1 Add the value in this CSR to the address 30:7 K11 28:7 K10 26:7 K9 24:7 K8 22:7 K7 20:7 K6 18:7 K5 16:7 K4 14:7 K3 12:7 K2 10:7 K1 8:7 K0 None Value 0 added. NOTES: 1. This is a priority encoder; when multiple lines satisfy the condition, the line with the largest number of ones is used. 5.5.2 Two Channels Active (2-Way Interleave) It is possible to have only two channels populated for system cost and area savings. If only two channels are desired, than channels 0 and 1 should be populated and channel 2 should be left empty. In the Two Channel Mode, the address interleaving is designed with the goal of spreading adjacent accesses across the 2 channels. When two channels are active, address bit 7 is used as the channel select. Addresses that have address 7 equal to 0 are mapped to channel 0 while those with address 7 equal to 1 are mapped to channel 1. The address within the channel is {[31:8], [6:0]}. 5.5.3 One Channel Active (No Interleave) When only one channel is active, all accesses go to that channel. In this case, it is possible for an access to split across two DRAM banks (which could be in different RDRAMs). Hardware Reference Manual 193 Intel® IXP2800 Network Processor DRAM 5.5.4 Interleaving Across RDRAMs and Banks In addition to interleaving across the different RDRAM channels, addresses are also interleaved across RDRAM chips and internal banks. This improves utilization since certain operations to different banks can be performed concurrently. The interleaving is done based on rearranging the remapped address derived from Section 5.5.1, Section 5.5.2, and Section 5.5.3 as a function of the memory size as shown in Table 65. The two MSBs of the rearranged address are used to select which Bank Command FIFO the command is place in. The rearranged address is also partitioned to choose RDRAM chip, bank within RDRAM, and page within bank. Table 65. Address Bank Interleaving Remapped Address Based on RDRAM_Control[Bank_Remap] Memory Size on Channel (MB)3 00 01 10 11 8 7:14, 22:15 9:14, 7:8, 22:15 11:14, 7:10, 22:15 13:14, 7:12, 22:15 16 7:14, 23:15 9:14, 7:8, 23:15 11:14, 7:10, 23:15 13:14, 7:12, 23:15 32 7:14, 24:15 9:14, 7:8, 24:15 11:14, 7:10, 24:15 13:14, 7:12, 24:15 64 7:14, 25:15 9:14, 7:8, 25:15 11:14, 7:10, 25:15 13:14, 7:12, 25:15 128 7:14, 26:15 9:14, 7:8, 26:15 11:14, 7:10, 2615 13:14, 7:12, 26:15 256 7:14, 27:15 9:14, 7:8, 27:15 11:14, 7:10, 27:15 13:14, 7:12, 27:15 512 7:14, 28:15 9:14, 7:8, 28:15 11:14, 7:10, 28:15 13:14, 7:12, 28:15 1024 7:14, 29:15 9:14, 7:8, 29:15 11:14, 7:10, 29:15 13:14, 7:12, 29:15 Bits used to select Bank Command FIFO 7:8 9:10 11:12 13:14 NOTES: 1. Table shows device/bank sorting of the channel remapped block address, which is in address 31:7. LSBs of the address are always 6:0 (byte within the block), which are not remapped. 2. Unused MSBs of address have value of 0. 3. Size is programmed in RDRAM_Control[Size]. 5.6 Parity and ECC DRAM can be optionally protected by byte parity or by an 8-bit error detecting and correcting code (ECC). RDRAMn_Control[ECC] for each channel selects whether or not that channel should use Parity, ECC, or no protection. When parity or ECC is enabled x18 RDRAMs must be used with the extra bits connected to the dqa[8] and dqb[8] signals. Eight bits of ECC code cover eight bytes of data (aligned to an 8-byte boundary). 5.6.1 Parity and ECC Disabled • On reads, the data is delivered to the originator of the read; no error is possible. • Partial writes (writes of less than eight bytes) are done as masked writes. 194 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.6.2 Parity Enabled On writes, odd byte parity is computed for each byte and written into the corresponding parity bit. Partial writes (writes of less than eight bytes) are done as masked writes. On reads, odd byte parity is computed on each byte of data and compared to the corresponding parity bit. If there is an error RDRAMn_Error_Status_1[Uncorr_Err] bit is set, which can interrupt the Intel XScale® core if enabled. The Data Error signal will be asserted when the read data is delivered on D_Push_Data. The address of the error, along with other information, is logged in RDRAMn_Error_Status_1[ADDR] and RDRAMn_Error_Status_2. Once the error bit is set, those registers are locked. That is, the information relating to subsequent errors is not loaded until the error status bit is cleared by the Intel XScale® core write. 5.6.3 ECC Enabled On writes, eight ECC check bits are computed based on 64 bits of data, and are written into the check bits. Partial writes (writes of less than eight bytes) cause the channel controller to do a read-modify-write. Any single-bit error detected during the read portion is corrected prior to merging with the write data. An uncorrectable error detected during the read does not modify the data. Either type of error will set the appropriate error status bit, as described below. On reads, the correct value for the check bits is computed from the data and is compared to the ECC check bits. If there is no error, data is delivered to the originator of the read, because it came from the RDRAMs. If there is a single-bit error, it is corrected before being delivered (the correction is done automatically, the reader is given the correct data). The error is also logged by setting the RDRAMn_Error_Status_1[Corr_Err] bit, which can interrupt the Intel XScale® core if enabled. If there is an uncorrectable error, the RDRAMn_Error_Status_1[Uncorr_Err] bit is set, which can interrupt the Intel XScale® core if enabled. The Data Error signal is asserted when the read data is delivered on D_Push_Data, unless the token, Ignore Data Error, was asserted in the command. In that case, the RDRAM controller does not assert Data Error and does not assert a Signal (it will use 0xF, which is a null signal, in place of the requested signal number). In both correctable and uncorrectable cases, the address of the error, along with other information, is logged in RDRAMn_Error_Status_1[ADDR] and RDRAMn_Error_Status_2. Once either of the error bits is set, those registers are locked. That is, the information relating to subsequent errors is not loaded until both error status bits are clear. That does not prevent the correction of single-bit errors, only the logging. Note: When a single-bit error is corrected, the corrected data is not written back into memory (scrubbed) by hardware; this can be done by software if desired, because all of the information pertaining to the error is logged. Hardware Reference Manual 195 Intel® IXP2800 Network Processor DRAM To avoid the detection of false ECC errors, the RDRAM ECC mode must be initialized using the procedure described below: 1. Ensure that parity/ECC is not enabled: program DRAM_CTRL[15:14] = 00 2. Write all zeros (0x00000000) to all the memory locations. By default, this initializes the memory with odd parity and in this case (data all 0), it coincides with ECC and does not require any read-modify-writes because ECC is not enabled. 3. Ensure that all of the writes are completed prior to enabling ECC. This is done by performing a read operation to 1000 locations. 4. Enable ECC mode: program DRAM_CTRL[15:14] accordingly. 5.6.4 ECC Calculation and Syndrome The ECC check bits are calculated by forming parity checks on groups of data bits. The check bits are stored in memory during writes via the dqa[8] and dqb[8] signals. Note that memory initialization code must put good ECC into all of memory by writing each location before it can be read. Writing any arbitrary data into memory – for example 0, will accomplish this. This will take several milliseconds per Mbyte of memory. On reads, the expected code is calculated from the data, and then compared to (XORed) the ECC that was read. The result of the comparison is called the syndrome. If the syndrome is equal to 0, then there was no error. There are eight syndromes that are calculated based on the read data and its corresponding ECC bit. When ECC is enabled, upon detecting a single-bit error, the syndrome is used to determine which bit needs to be flipped to correct the error. 5.7 Timing Configuration Table 66 shows the example timing settings for RDRAMs of various speeds. The parameters are programmed in the RDRAM_Config CSRs (refer to the PRM for register descriptions) . Table 66. RDRAM Timing Parameter Settings Parameter Name 196 -40800 -45800 -50800 -45711 -50711 -45600 -53600 CfgTrcd 7 9 11 7 9 5 7 CfgTrasSyn 5 5 6 5 5 4 5 CfgTrp 8 8 10 8 8 6 8 CfgToffpSyn 4 4 4 4 4 4 4 CfgTrasrefSyn 5 5 6 5 5 4 5 CfgTprefSyn 2 2 2 2 2 2 2 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.8 Microengine Signals Upon completion of a read or write, the RDRAM controller can signal a Microengine context, when enabled. It does so using the sig_done token; see Example 27. Example 27. RDRAM Controller Signaling a Microengine Context dram [read,$xfer6,addr_a,0,1], sig_done_4 dram [read,$xfer7,addr_b,0,1], sig_done_6 ctx_arb[4, 5, 6, 7] Because the RDRAM address space is interleaved, consecutive accesses can go to different RDRAM channels. There is no ordering guaranteed among different channels, so a separate signal is needed for each. In addition, because accesses start at any address, and can specify up to 16 64-bit words (128 bytes), they can also split across two channels (refer to Section 5.5). The ctx_arb instruction must set two Wakeup_Events (an odd/even pair) per access. The RDRAM controllers coordinate as follows: • If the access split across two channels, the channel handling the low part of the split delivers the even-numbered Event Signal, and the channel handling the upper part of the split delivers the odd-numbered Event Signal. • If the access does not split, the channel delivers both Event Signals (by coordinating with the D_Push or D_Pull arbiter for read and writes respectively). • In all cases, the channel delivers the Event Signal with the last data Push or Pull of a burst. Using the above rules, the Microengine will be put into the Ready State (ready to resume executing) only when all accesses have completed. 5.9 Serial Port The RDRAM chips are configured through a serial port, which consists of signals D_SIO, D_CMD, and D_SCK. Access to the serial port is via the RDRAM_Serial_Command and RDRAM_Serial_Data CSRs (refer to the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual for the register descriptions). All serial commands are initiated by a write to RDRAM_Serial_Command. Because the serial port is slow, RDRAM_Serial_Command has a Busy bit, which indicates that a serial port command is in progress. Software must test this bit before initiating a command. This ensures that software will not lose a command, while eliminating the need for a hardware FIFO for serial commands. Serial writes are done by the following steps: 1. Read RDRAM_Serial_Command; test Busy bit until its a 0. 2. Write RDRAM_Serial_Data. 3. Write RDRAM_Serial_Command to start the write. Hardware Reference Manual 197 Intel® IXP2800 Network Processor DRAM Serial reads are done by the following steps: 1. Read RDRAM_Serial_Command; test Busy bit until it is a 0. 2. Write RDRAM_Serial_Command to start the read. 3. Read RDRAM_Serial_Command; test Busy bit until it is a 0. 4. Read RDRAM_Serial_Data to collect the serial read data. 5.10 RDRAM Controller Block Diagram The RDRAM controller consists of three pieces. Figure 70 is a simplified block diagram. Figure 70. RDRAM Controller Block Diagram Pre_RMC RMC RAC CMD Bus RQ Intel® IXP2800 Network Processor RDRAMs D_Push Bus DQ D_Pull Bus A9729-02 Pre_RMC — has the queues for commands, data (both in and out), and interfaces to internal buses. It checks incoming commands and addresses to determine if they are targeted to the channel, and if so, enqueues them (if a command splits across two channels, the channel must enqueue the portion of the command that it owns). It sorts the enqueued commands to RDRAM banks, selects the command to be executed based on policy to get good bank utilization, and then hands off that command to RMC. It also arbitrates for refresh and calibration, which it requests RMC to perform. Pre_RMC also contains the ECC logic, and the CSRs that set size, timing, ECC, etc. RMC — Rambus* Memory Controller, that handles the pin protocol. It controls all timing dependencies, pin turnaround, RAS-CAS, RAS-RAS, etc., including bank interactions. RMC handles all commands in the order that it receives them. RMC is based on the Rambus* RMC. RAC — Rambus* ASIC Cell, a high-speed parallel-to-serial and serial-to-parallel interface. This is a hard macro that contains the I/O pads and drivers, DLL, and associated pin interface logic. The following is a brief explanation of command operation: Pre_RMC enqueues commands and sends them to RMC. It is responsible for initiating Pull operations to get Microengine/RBUF/Intel XScale® core/PCI data into the Pull_Data FIFO. A write is not eligible to go to RMC until Pre_RMC has all the data in the Pull Data FIFO. Pre_RMC provides the Full signal to the Command Arbiter to inform it stop allowing RDRAM commands. 198 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.10.1 Commands When a valid command is placed on the command bus, the control logic checks to see if the address matches the channel’s address range, based on interleaving as described in Section 5.5. The command, address, length, etc. are enqueued into the command Inlet FIFO. If the command Inlet FIFO becomes full, the channel sends a signal to the command arbiter, which will prevent it from sending further DRAM commands. The full signal must be asserted while there is still enough room in the FIFOs to hold the worst case number of in-flight commands. 5.10.2 DRAM Write When a write (or RBUF_RD, which does a DRAM write) command is at the head of the Command Inlet FIFO, it is moved to the proper Bank CMD FIFO, and the Pull_ID is sent to the Pull arbiter. This can only be done if there is room for the command in the Bank’s CMD FIFO and for the pull data in the Bank’s Pull Data FIFO (which must take into account all pull data in flight). If there is not enough room in the Bank’s CMD FIFO or the Bank’s Pull Data FIFO, the write command waits at the head of the Command Inlet FIFO. When the Pull_ID is sent to the Pull Arbiter, the Bank number is put into the PP (Pull in Progress) FIFO; this allows the channel to sort the Pull Data into the proper Bank Pull Data FIFO when it arrives. The source of the Pull Data can be either RBUF, PCI, Microengine, or the Intel XScale® core, and is specified in the Pull_ID. When the source is RBUF or PCI, data will be supplied to the Pull Data FIFO, at 64 bits per cycle. When the source is Microengine or the Intel XScale® core, data will be supplied at 32 bits per cycle, justified to the low 32 bits of Pull Data. The Pull Arbiter must merge and pack data as required. In addition, the data must be aligned according to the start address, which has longword resolution; this is done in Pre_RMC. The Length field of the command at the head of the Bank CMD FIFO is compared to the number of 64-bit words in the Bank Pull_Data FIFO. When the number of 64-bit words in Pull_Data FIFO is greater or equal to the length, the write arbitrates for the RMC. When it wins arbitration, it sends the address and command to RMC, which requests the write data from Pull_Data FIFO at the proper time to send it to the RDRAMs. Note: 5.10.2.1 The Microengine is signaled when the last data is pulled. Masked Write Masked writes (write of less than eight bytes) are done as either Read-Modify-Writes when ECC is enabled, or as Rambus*-masked writes (using COLM packets), when ECC is not enabled. In both cases, the masked write will modify seven or fewer bytes because the command bus limits a masked write to a ref_count of 1. If a RMW is used, no commands from that Bank’s CMD FIFO are started between the read and the write; other Bank commands can be done during that time. Hardware Reference Manual 199 Intel® IXP2800 Network Processor DRAM 5.10.3 DRAM Read When a read (or TBUF_WR, which does a DRAM read) command is at the head of the Command Inlet FIFO, it is moved to the proper Bank CMD FIFO if there is room. If there is not enough room in the Bank’s CMD FIFO, the read command waits at the head of the Command Inlet FIFO. When a read command is at the head of the Bank CMD FIFO, and there is room for the read data in the Push Data FIFO (including all reads in flight at the RDRAM), it will arbitrate for RMC. When it wins arbitration, it sends the address and command to RMC. The Push_ID is put into the RP FIFO (Read in Progress) to coordinate it with read data from RMC. When read data is returned from RMC, it is placed into the Push_Data FIFO. Each Push_Data is sent to the Push Arbiter with a Push_ID; the RDRAM controller increments the Push_ID for each data phase. If Push Arbiter asserts the full signal, Push Data is stopped and held in the Push Data skid FIFO. The Push Data is sent to the read destination under control of the Push Arbiter. The destination of the Push Data can be either Intel XScale® core, PCI, TBUF, or Microengine, and is specified in the Push_ID. When the destination is TBUF or PCI, data is taken at 64 bits per cycle. When the destination is the Microengine or the Intel XScale® core, data is taken at 32 bits per cycle. The Push Arbiter justifies the data to the low 32 bits of Push Data. The Microengine is signaled when the last data is pushed. 5.10.4 CSR Write When a CSR write command is at the head of the Command Inlet FIFO, it is moved to the CSR CMD register, and the Pull_ID is sent to the Pull arbiter. This can only be done if the CSR CMD register is not currently occupied. If it is, the CSR write command waits at the head of the Command Inlet FIFO. When the Pull_ID is sent to the Pull Arbiter, a tag is put into the PP FIFO (Pull in Progress); this allows the channel to identify the Pull Data as CSR data when it arrives. When the CSR pull data arrives, it is put into the addressed CSR, and the CSR CMD register is marked as empty. 5.10.5 CSR Read When a CSR read command is at the head of the Command Inlet FIFO, it is moved to the CSR CMD register. This can only be done if the CSR CMD register is not currently occupied. If it is, the CSR read command waits at the head of the Command Inlet FIFO. On the first available cycle in which RDRAM data from RMC is not being put into the Push Data FIFO, the CSR data will be put into the Push Data FIFO. If it is convenient to guarantee a slot by putting a bubble on the RMC input, then that will be done. 200 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.10.6 Arbitration The channel needs to arbitrate among several different operations at RMC. Arbitration rules are given here for those cases: from highest to lowest priority: • Refresh RDRAM. • Current calibrate RDRAM. • Bank operations. When there are multiple bank operations ready, the rules are: (1) round robin among banks to avoid bank collisions, and (2) skip a bank to avoid DQ bus turnarounds. No bank can be skipped more than twice. Commands are given to RMC in the order in which they will be executed. 5.10.7 Reference Ordering Table 67 lists the ordering of reads and writes to the same address for DRAM. The definition of first and second is defined by the time the command is valid on the command bus. Table 67. Ordering of Reads and Writes to the Same Address for DRAM 5.11 First Access Second Access Ordering Rules Read Read None. If there are no side-effects on reads, both readers get the same data. Read Write Reader must get the pre-modified data. This is not enforced in hardware. The write instruction must not be executed until after the Microengine receives the signal of read completion (i.e., program must use sig_done on the read). Write Read Reader must get the post-modified data. This is not enforced in hardware. The read instruction must not be executed until after the Microengine receives the signal of write completion (i.e., program must use sig_done token on the write instruction and wait for the signal before executing the read instruction). Write Write The hardware guarantees that the writes complete in the order in which they are issued. DRAM Push/Pull Arbiter The DRAM Push/Pull Arbiter contains the push and pull arbiters for the D-Cluster (DRAM Cluster). Both the PUSH and PULL data buses have multiple masters and multiple targets. The DRAM Push/Pull Arbiter determines which master gets to drive the data bus for a given transaction and makes sure that the data is delivered correctly. This unit has the following features: • • • • • Up to three DX Unit (DRAM Unit) masters. 64-bit wide push and pull data buses. Round-robin arbitration scheme. Peak delivery of 64 bits per cycle. Supports third-party data transfers; the Microengine’s can command data movements between the MSF (Media) and either the DX Units or the CR Units. Hardware Reference Manual 201 Intel® IXP2800 Network Processor DRAM • Supports chaining for burst DRAM push operations to tell the arbiter to grant consecutive push requests. • Supports data error bit handling and delivery. Figure 71 shows the functional blocks for the DRAM Push/Pull Arbiter. Figure 71. DRAM Push/Pull Arbiter Functional Blocks D0-Unit D1-Unit D2-Unit DP-Unit DPSA-FUB PCI TC0-Cluster DPLA-FUB TC1-Cluster Intel XScale® Core TBUF/ RBUF A9731-02 5.11.1 Arbiter Push/Pull Operation Within the arbiter there are two functional units: the push arbiter and the pull arbiter. Push and pull always refer to the way data is flowing from the bus master, i.e., a Microengine makes a read request, the DRAM channel does the read, and then “pushes” the data back to the Microengine. For a push transaction, a push master drives the command and data to the DRAM push arbiter (DPSA) and into a dedicated request FIFO. When that command is at the head of the FIFO, and it is either the requesting unit’s turn to go based on the round-robin arbitration policy, or there are no other requesters, then the arbiter will “grant” the request. This grant means that the arbiter delivers the push data to the correct target with all the correct handshakes and retires the request (a data transaction is always eight bytes). The DRAM pull arbiter (DPLA) is slightly different because it functions on bursts of data transactions instead of single transactions. For a pull transaction, a pull master drives a command to the pull arbiter and into a dedicated request FIFO. When the command gets to the head of the FIFO it is evaluated, s was done for the push arbiter. The difference is that each command may reference bursts of data movements (always in multiples of eight bytes). The arbiter grants the command, and keeps it granted until it increments through all of the data movements required by the command. As the data is read from its source, the command is modified to address the next data address, and a handshake to the requesting unit is driven when the data is valid. 202 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM 5.11.2 DRAM Push Arbiter Description The general data flow for a push operation is as shown in Table 68. The DRAM Push Arbiter functional blocks are shown in Figure 72. Table 68. DRAM Push Arbiter Operation Push Bus Master/Requestor Data Source Data Destination IXP2800 Network Processor TC0 Cluster (ME 0 – 7) D0 Unit D1 Unit D2 Unit Current Master TC1 Cluster (ME 10 – 17) Intel XScale® core PCI Unit MSF Unit The push arbiter takes push requests from any requestors. Each requestor has a dedicated request FIFO. A request comes in the form of a PUSH_ID, and is accompanied by the data to be pushed, a data error bit, and a chain bit. All of this information is enqueued in the correct FIFO for each request, i.e., for each eight bytes of data. The push arbiter must drive a full signal to the requestor if the FIFO reaches a predefined “full” level to apply backpressure and stop requests from coming. The FIFO is 64 entries deep and goes full at 40 entries. The long skid allows for burst reads in flight to finish before stalling the DRAM controller. If the FIFO is not full, the push arbiter can enqueue a new request from each requestor on every cycle. The push arbiter monitors the heads of each FIFO, and does a round robin arbitration between any available requestors. If the chain bit is asserted, it indicates that once the head request of a queue is granted, the arbiter should continue to grant that queue until the chain bit de-asserts. It is expected that the requestor will assert the chain bit for no longer than a full burst length. The push arbiter must also take special notice of requests destined for the receive buffer in the Media Switch Fabric (MSF). Finally, the push arbiter must manage the delivery of data at different rates, depending on how wide the bus is going into a given target. The Microengines, PCI, and the Intel XScale® core all have 32-bit data buses. For these targets, the push arbiter takes two clock cycles to deliver 64 bits of data by first delivering bits 31:0 in the first cycle, and then putting bits 63:32 onto the low 32 bits of the PUSH_DATA in the second cycle. Hardware Reference Manual 203 Intel® IXP2800 Network Processor DRAM Figure 72. DRAM Push Arbiter Functional Blocks Round Robin D0_PUSH_ID D0_PUSH_REQ D0_PUSH_DATA D1_PUSH_ID D1_PUSH_REQ D1_PUSH_DATA D2_PUSH_REQ D2_PUSH_ID DPXX_PUSH_ID A R B I T E R DPXX_PUSH_DATA D2_PUSH_DATA A9732-01 The DRM Push Arbiter boundary conditions are: • Make sure each of the push_request queues assert the full signal and back pressure the requesting unit. • Maintain 100% bus utilization, i.e., no holes. 5.12 DRAM Pull Arbiter Description The general data flow for a push operation is as shown in Table 69. The DRAM Pull Arbiter functional blocks are shown in Figure 73. Table 69. DPLA Description Pull Bus Master/Requestor Data Source Data Destination IXP2800 Network Processor TC0 Cluster (Microengine 0 – 7) D0 Unit D1 Unit D2 Unit TC1 Cluster (Microengine 8 – 15) Intel XScale® core PCI Unit Current Master MSF Unit The pull arbiter is very similar to the push arbiter, except that it gathers the data from a data source ID and delivers it to the requesting unit where it is written to DRAM memory. 204 Hardware Reference Manual Intel® IXP2800 Network Processor DRAM When a requestor gets a pull command on the CMD_BUS, the requestor sends the command to the pull arbiter. This is enqueued into a requestor-dedicated FIFO. The pull request FIFOs are much smaller than the push request FIFOs because pull requests can request up to 128 bytes of data. It is eight entries deep and asserts full when it has six entries to account for in-flight requests. The pull arbiter monitors the heads of each of the three FIFOs. A round robin arbitration scheme is applied to all valid requests. When a request is granted, the request is completed regardless of how many data transfers are required. Therefore, one request can take as many as 16 – 32 DRAM cycles. The push data bus can only use 32 bits when delivering data to the Microengines, PCI, and the Intel XScale® core. For these data sources, it takes two cycles to pull every eight bytes requested; otherwise, it takes only one cycle per eight bytes. On four byte cycles, data is delivered as pulled. Figure 73. DRAM Pull Arbiter Functional Blocks Round Robin D0_PUSH_REQ D0_PULL_ID DPXX_PUSH_ID D1_PUSH_REQ D1_PULL_ID D2_PUSH_REQ A R B I T E R DPXX_TAKE D2_PULL_ID ME_CLUSTER_0_DATA ME_CLUSTER_1_DATA XSCALE*_DATA DPXX_PULL_DATA[63:0] PCI_PULL_DATA MSF_PULL_DATA * Intel XScale® Microarchitecture A9733-02 Hardware Reference Manual 205 Intel® IXP2800 Network Processor DRAM 206 Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface SRAM Interface 6.1 6 Overview The IXP2800 Network Processor contains four independent SRAM controllers. SRAM controllers support pipelined QDR synchronous static RAM (SRAM) and a coprocessor that adheres to QDR signaling. Any or all controllers can be left unpopulated if the application does not need them. Reads and writes to SRAM are generated by Microengines (MEs), the Intel XScale® core, and PCI Bus masters. They are connected to the controllers through Command Buses and Push and Pull Buses. Each of the SRAM controllers takes commands from the command bus and enqueues them. The commands are de-queued according to priority, and successive accesses to the SRAMs are performed. Each SRAM controller receives commands using two Command Buses, one of which may be tied off as inactive, depending on the chip implementation. The SRAM Controller can enqueue a command from each Command Bus in each cycle. Data movement between the SRAM controllers and the Microengines is through the S_Push bus and S_Pull bus. The overall structure of the SRAM controllers is shown in Figure 74. Hardware Reference Manual 207 Intel® IXP2800 Network Processor SRAM Interface Figure 74. SRAM Controller/Chassis Block Diagram Command Bus from ME Cluster 0 SRAM chips and/or co-processor Command Bus from ME Cluster 1 SRAM Controller Push Bus / ID to ME Cluster 0 Push Arb Push Bus / ID to ME Cluster 1 Push Arb Pulll ID to ME Cluster 0 Pull Arb Pulll ID to ME Cluster 1 Pull Arb Pull Data from ME Cluster 0 SRAM Controller SRAM Controller SRAM Controller Pull Data from ME Cluster 1 A8951-01 6.2 SRAM Interface Configurations Memory is logically four bytes (one longword) wide while physically, the data pins are two bytes wide and double-clocked. Byte parity is supported. Each of the four bytes has a parity bit, which is written when the byte is written and checked when the longword is read. There are byte-enables that select the bytes to write, for lengths of less than a longword. The QDR controller implements a big-endian ordering scheme at the interface pins. For write operations, bytes 0/1, (data bits [31:16]), and associated parity and byte-enables are written on the rising edge of the K clock while bytes 2/3, (data bits [15:0]), and associated parity and byte-enables are written on the rising edge of the K_n clock. For read operations, bytes 0/1, (data bits [31:16]), and associated parity and byte-enables are captured on the rising edge of CIN0 clock while bytes 2/3, (data bits [15:0]), and associated parity and byte-enables are captured on the rising edge of CIN0_n clock. 208 Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface In general, QDR and QDR II bursts of two SRAMs are supported at speeds up to 233 MHz. As other (larger) QDR SRAMs are introduced, they will also be supported. The SRAM controller can also be configured to interface to an external coprocessor that adheres to the QDR or QDR II electrical and functional specification. 6.2.1 Internal Interface Each SRAM channel receives commands through the command bus mechanism and transfers data to and from the Microengines, the Intel XScale® core, and PCI, using SRAM push and SRAM pull buses. 6.2.2 Number of Channels The IXP2800 Network Processor supports four channels. 6.2.3 Coprocessor and/or SRAMs Attached to a Channel Each channel supports the attachment of QDR SRAMs, a co-processor, or both, depending on the module level signal integrity and loading. 6.3 SRAM Controller Configurations There are enough address pins (24) to support up to 64 Mbytes of SRAM. The SRAM controllers can directly generate multiple port enables (up to five pairs) to allow for depth expansion. Two pairs of pins are dedicated for port enables. Smaller RAMs use fewer address signals than the number provided to accommodate the largest RAMs, so some address pins (23:18) are configurable as either address or port-enable based on CSR SRAM_Control[Port_Control] as shown in Table 70. Note: All of the SRAMs on a given channel must be the same size. Note: Table 70 shows the capability of the logic — 1, 2, or 4 loads are supported as shown in the table, but this is subject to change. Table 70. SRAM Controller Configurations SRAM Configuration SRAM Size Addresses Needed to Index SRAM Addresses Used as Port Enables Total Number of Port Select Pairs Available 512K x 18 1 Mbyte 17:0 23:22, 21:20 4 1M x 18 2 Mbytes 18:0 23:22, 21:20 4 2M x 18 4 Mbytes 19:0 23:22, 21:20 4 4M x 18 8 Mbytes 20:0 23:22 3 8M x 18 16 Mbytes 21:0 23:22 3 16M x 18 32 Mbytes 22:0 None 2 32M x 18 64 Mbytes 23:0 None 1 Hardware Reference Manual 209 Intel® IXP2800 Network Processor SRAM Interface Each channel can be expanded in depth according to the number of port enables available. If external decoding is used, then the number of SRAMs is not limited by the number of port enables generated by the SRAM controller. Note: External decoding may require external pipeline registers to account for the decode time, depending on the desired frequency. Maximum SRAM system sizes are shown in Table 71. Shaded entries require external decoding, because they use more port-enables than the SRAM controller can directly supply. Table 71. Total Memory per Channel Number of SRAMs on Channel SRAM Size 1 2 3 4 5 6 7 8 512K x 18 1 MB 2 MB 3 MB 4 MB 5 MB 6 MB 7 MB 8 MB 1M x 18 2 MB 4 MB 6 MB 8 MB 10 MB 12 MB 14 MB 16 MB 2M x 18 4 MB 8 MB 12 MB 16 MB 20 MB 24 MB 28 MB 32 MB 4M x 18 8 MB 16 MB 24 MB 32 MB 64 MB NA NA NA 8M x 18 16 MB 32 MB 48 MB 64 MB NA NA NA NA 16M x 18 32 MB 64 MB NA NA NA NA NA NA 32M x 18 64 MB NA NA NA NA NA NA NA Figure 75 shows how the SRAM clocks on a channel are connected. For receiving data from the SRAMs, the clock path and data path are matched to meet hold time requirements. Figure 75. SRAM Clock Connection on a Channel SRAM SRAM Intel® IXP2800 Network Processor C, C_n K, K_n A9734-02 It is also possible to pipeline the SRAM signals with external registers. This is useful for the case when there is considerable loading on the address and data signals, which would slow down the cycle time. The pipeline stages make it possible to keep the cycle time fast by fanning out the address, byte write, and data signals. The RAM read data may also be put through a pipeline register, depending on configuration. External decoding of port selects can also be done to expand the number of SRAMs supported. Figure 76 is a block diagram that shows the concept of external pipelining. 210 Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface A side-effect of the pipeline registers is to add latency to reads, and the SRAM controller must account for that delay by waiting extra cycles (relative to no external pipeline registers) before it registers the read data. The number of extra pipeline delays is programmed in SRAM_Control[Pipeline]. Figure 76. External Pipeline Registers Block Diagram SRAM SRAM Intel® IXP2800 Network Processor Q Register Addr, BWE, etc. Register A9735-01 6.4 Command Overview This section will give an overview of the SRAM commands and their operation. The details will be given later in the document. Memory reference ordering will be specified along with the detailed command operation. 6.4.1 Basic Read/Write Commands The basic read and write commands will transfer from 1 – 16 longwords of data to or from the QDR SRAM external to the IXP2800 Network Processor. For a read command, the SRAM is read and the data placed on the Push bus, one longword at a time. The command source (for example, the Microengine) is signaled that the command is complete during the last data phase of the push bus transfer. For a write command, the data is first pulled from the source, then written to the SRAM in consecutive SRAM cycles. The command source is signaled that the command is complete during the last data phase of the pull bus transfer. If a read operation stalls due to the pull-data FIFO filling, any concurrent write operation that is in progress to the same address is temporarily stopped. This technique results in atomic data reads. 6.4.2 Atomic Operations The SRAM Controller does read-modify-writes for the atomic operations, and the pre-modified data can be returned if desired. Other (non-atomic) readers and writers can access the addressed location between the read and write portions of the read-modify-write. Table 72 describes the atomic operations supported by the SRAM Controller. Hardware Reference Manual 211 Intel® IXP2800 Network Processor SRAM Interface Table 72. Atomic Operations Instruction Pull Operand Value Written to SRAM Set_bits Optional1 SRAM_Read_Data or Pull_Data Clear_bits Optional SRAM_Read_Data and not Pull_Data Increment No SRAM_Read_Data + 0x00000001 Decrement No SRAM_Read_Data - 0x00000001 Add Optional SRAM_Read_Data + Pull_Data Swap Optional Pull_Data 1. There are two versions of the Set, Clear, Add, and Swap instructions. One version pulls operand data from the Microengine transfer registers, and the second version passes the operand data to the SRAM unit as part of the command. Up to two Microengine signals are assigned to each read-modify-write reference. Microcode should always tag the read-modify-write reference with an even-numbered signal. If the operation requires a pull, the requested signal is sent on the pull. If the pre-modified data is to be returned to the Microengine, then the Microengine is sent (requested signal OR 1) when that data is pushed. In Example 28, the version of Test_and_Set requires both a pull and a push: Example 28. SRAM Test_and_Set with Pull Data immed [$xfer0, 0x1] SRAM[test_and_set, $xfer0, test_address, 0, 1], sig_done_2 // SIGNAL_2 is set when $xfer0 is pulled from this ME. SIGNAL_3 is // set when $xfer0 is written with the test value. Sleep until both // SIGNALS have arrived. CTX_ARB[signal_2, signal_3] In Example 29, the version of Test_and_Set does not require a pull, but does issue a push. A signal is generated when the push is complete. Example 29. SRAM Test_and_Set with Optional No-Pull Data #define #define #define #define no_pull_mode_bit 24 byte_mask_override_bit 20 no_pull_data_bit 12 upper_part_bit 21 // This constant can be created once at init time ALU[no_pull_constant, --, b, 0x3, < ) in the link longword. A ring is an ordered list of data words stored in a fixed block of contiguous addresses. A ring is described by a head pointer and a tail pointer. Data is written, using the put command, to a ring at the address contained in the tail pointer and the tail pointer is incremented. Data is read, using the get command, from a ring at the address contained in the head pointer and the head pointer is incremented. Whenever either pointer reaches the end of the ring, the pointer is wrapped back to the address of the start of the ring. A journal is similar to a ring. It is generally used for debugging. Journal commands only write to the data structure. New data overwrites the oldest data. Microcode can choose to tag the journal data with the Microengine number and CTX number of the journal writer. The Q_array to support queuing, rings and journals contains 64 registers per SRAM channel. For a design with a large number of queues, the queue descriptors cannot all be stored on the chip, and thus a subset of the queue descriptors (16) is cached in the Q_array. (To implement the cache, 16 contiguous Q_array registers must be allocated.) The cache tag (the mapping of queue number to Q_array registers) for the Q_array is maintained by microcode in the CAM of a Microengine. The writeback and load of the cached registers in the Q_array is under the control of that microcode. Note: The size of the Q_array does not set a limit on the number of queues supported. For other queues (free buffer pools, for example), rings, and journals, the information does not need to be subsetted and thus can be loaded into the Q_array at initialization time and left there to be updated solely by the SRAM controller. The sum total of the cached queue descriptors plus the number of rings, journals, and static queues must be less than or equal to 64 for a given SRAM channel. The fields and sizes of the Q_array registers are shown in Table 73 and Table 74. All addresses are of type longword, and are 32 bits in length. Table 73. Queue Format Name Longword Number Bit Number1 Definition EOP 0 31 End of Packet — decrement Q_count on dequeue SOP 0 30 Start of Packet — used by the programmer Cell Count 0 29:24 Number of cells in the buffer Head 0 23:0 Head pointer Tail 1 23:0 Tail pointer Q_count 2 23:0 Number of packets on the queue or number of buffers on the queue SW_Private 2 31:24 Ignored by hardware, returned to Microengine Head Valid N/A Cached head pointer valid — maintained by hardware Tail Valid N/A Cached tail pointer valid — maintained by hardware 1. Bits 31:24 of longword number 2 are available for use by microcode. Hardware Reference Manual 215 Intel® IXP2800 Network Processor SRAM Interface Table 74. Ring/Journal Format Longword Number Name Note: Ring Size 0 Bit Number 31:29 Definition See Table 75 for size encoding. Head 0 23:0 Get pointer Tail 1 23:0 Put pointer Ring Count 2 23:0 Number of longwords on the ring For a Ring or Journal, Head and Tail must be initialized to the same address. Journals/Rings can be configured to be one of eight sizes, as shown in Table 75. Table 75. Ring Size Encoding Ring Size Encoding Size of Journal/Ring Area Head/Tail Field Base Head and Tail Field Increment 000 512 longwords 23:9 8:0 001 1K 23:10 9:0 010 2K 23:11 10:0 011 4K 23:12 11:0 100 8K 23:13 12:0 101 16K 23:14 13:0 110 32K 23:15 14:0 111 64K 23:16 15:0 The following sections contain pseudo-code to describe the operation of the various queue and ring instructions. Note: 6.4.3.1 For these examples, NIL is the value 0. Read_Q_Descriptor Commands These commands are used to bring the queue descriptor data from QDR SRAM memory into the Q_array. Only portions of the Q_descriptor are read with each variant of the command, to minimize QDR SRAM bandwidth utilization. It is assumed that microcode has previously evicted the Q_descriptor data for the entry prior to overwriting the entry data with the new Q_descriptor data. Refer to the section, “SRAM (Read Queue Descriptor)”, in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual, for more information. . 6.4.3.2 Write_Q_Descriptor Commands The write_Q_descriptor commands are used to evict an entry in the Q_array and return its contents to QDR SRAM memory. Only the valid fields of the Q_descriptor are written, to minimize QDR SRAM bandwidth utilization. Refer to the section, “SRAM (Write Queue Descriptor)”, in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual, for more information. 216 Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface 6.4.3.3 ENQ and DEQ Commands These commands add or remove elements from the queue structure while updating the Q_array registers. Refer to the sections, “SRAM (Enqueue)” and “SRAM (Dequeue)”, in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual, for more information. 6.4.4 Ring Data Structure Commands The ring structure commands use the Q_array registers to hold the head tail and count data for a ring data structure, which is a fixed-size array of data with insert and remove pointers. Refer to the section, “SRAM (Ring Operations)” in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual, for more information. 6.4.5 Journaling Commands Journaling commands use the Q_array registers to index into an array of memory in the QDR SRAM that will be periodically written with information to help debug applications running on the IXP2400 and IXP2800 processors. Once the array has been completely written once, subsequent journal writes overwrite the previously written data — only the most recent data will be present in the data structure. Refer to the section, “SRAM (Journal Operations)”, in the IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual, for more information. 6.4.6 CSR Accesses CSR accesses will write or read CSRs within each controller. The upper address bits will determine which channel will respond, while the CSR address within a channel are given in the lower address bits. 6.5 Parity SRAM can be optionally protected by byte parity. Even parity is used — the combination of eight data bits and the corresponding parity bit will have an even number of ‘1s’. The SRAM controller generates parity on all SRAM writes. When parity is enabled (SRAM_Control[Par_Enable]), the SRAM controller checks for correct parity on all reads. Upon detection of a parity error on a read, or the read portion of an atomic read-modify-write, the SRAM controller records the address of the location with bad parity in SRAM_Parity[Address] and sets the appropriate SRAM_Parity[Error] bit(s). Those bit(s) interrupt the Intel XScale® core when enabled in IRQ_Enable[SRAM_Parity] or FIQ_Enable[SRAM_Parity]. The Data Error signal in the Push_CMD is asserted when the data to be read is delivered (unless the token Ignore Data Error was asserted in the command; in that case, the SRAM controller does not assert Data Error). When Data Error is asserted, the Push Arbiter suppresses the Microengine signal if the read was originated by a Microengine (it uses 0x0, which is a null signal, in place of the requested signal number). Hardware Reference Manual 217 Intel® IXP2800 Network Processor SRAM Interface Note: If incorrect parity is detected on the read portion of an atomic read-modify-write, the incorrect parity is preserved after the write (that is, the byte(s) with bad parity during the read will have incorrect parity written during the write). When parity is used, the Intel XScale® core software must initialize the SRAMs by: 1. Enabling parity (write a 1 to SRAM_Control[Par_Enable]). 2. Writing to every SRAM address. SRAM should not be read prior to doing the above initialization; otherwise, parity errors are likely to be recorded. 6.6 Address Map Each SRAM channel occupies a 1-Gbyte region of addresses. Channel 0 starts at 0, Channel 1 at 1 Gbyte, etc. Each SRAM controller receives commands from the command buses. It compares the target ID to the SRAM target ID, and address bits 31:30 to the channel number. If they both match, then the controller processes the command. See Table 76. Table 76. Address Map Note: Start Address End Address Responder 0x0000 0000 0x3FFF FFFF Channel 0 0x4000 0000 0x7FFF FFFF Channel 1 0x8000 0000 0xBFFF FFFF Channel 2 0xc000 0000 0xFFFF FFFF Channel 3 If an access addresses a non-existent address within an SRAM controller’s address space, the results are unpredictable.For example the result of accessing address 0x0100 0000 when there is only one Mbyte of SRAM populated on the channel, produces unpredictable results. For SRAM (memory or CSR) references from the Intel XScale® core, the channel select is in address bits 29:28. The Gasket shifts those bits to 31:30 to match addresses generated by the Microengines. Thus, the SRAM channel select logic is the same whether the command source is a Microengine or the Intel XScale® core. The same channel start and end addresses are used both for SRAM memory and CSR references. CSR references are distinguished from memory references through the CSR encoding in the command field. Note: Reads and writes to undefined CSR addresses yield unpredictable results. The IXP2800 addresses are byte addresses. The fundamental unit of operation of the SRAM controller is longword access, so the SRAM controller ignores the two low-order address bits in all cases and utilizes the byte mask field on memory address space writes to determine the bytes to write into the SRAM. Any combination of the four bytes can be masked. The operation of byte writes with a length other than 1 are unpredictable. That is, microcode should not use a ref_count greater than one longword when a byte_mask is active. CSRs are not bytewritable. 218 Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface 6.7 Reference Ordering This section describes the ordering between accesses to any one SRAM controller. Various mechanisms are used to guarantee order — for example, references that always go to the same FIFOs remain in order. There is a CAM associated with write addresses that is used to order reads behind writes. Lastly, several counter pairs are used to implement “fences”. The input counter is tagged to a command and the command is not permitted to execute until the output counter matches the fence tag. All of this will be discussed in more detail in this section. 6.7.1 Reference Order Tables Table 77 shows the architectural guarantees of order of accesses to the same SRAM address between a reference of any given type (shown in the column labels) and a subsequent reference of any given type (shown in the row labels). The definition of first and second is defined by the time the command is valid on the command bus. Verification requires testing only the order rules shown in Table 77 and Table 78. Note that a blank entry means no order is enforced. Table 77. Address Reference Order 1st ref 2nd ref Memory Read Memory Read CSR Read Memory Write Order CSR Read Memory Write Queue / Ring / Q_ Descr Commands Atomics Order Order Order CSR Write Atomics CSR Write Queue / Ring / Q_Descr Commands Order Order Order Order See Table 78. Table 78 shows the architectural guarantees of order to access to the same SRAM Q_array entry between a reference of any given type (shown in the column labels) and a subsequent reference of any given type (shown in the row labels). The terms first and second are defined with reference to the time the command is valid on the command bus. The same caveats that apply to Table 77 apply to Table 78. Hardware Reference Manual 219 Intel® IXP2800 Network Processor SRAM Interface Table 78. Q_array Entry Reference Order 1st ref 2nd ref Read_Q _Descr head, tail Read_ Q_Des cr other Read_Q_Descr head,tail Read_Q_ Descr other Write_Q _Descr Enqueue Dequeue Put Get Journal Order1 Order Write_Q_ Descr2 Enqueue Order Order Order Order3 Dequeue Order Order Order3 Order Put Order Get Order Journal 1. 2. 3. 6.7.2 Order The order of Read_Q_Descr_head/tail after Write_Q_Descr to the same element will be guaranteed only if it is to a different descriptor SRAM address. The order of Read_Q_Descr_head/tail after Write_Q_Descr to the same element with the same descriptor SRAM address is not guaranteed and should be handled by the Microengine code. Write_Q_Descr reference order is not guaranteed after any of the other references. The Queue array hardware assumes that the Microengine managing the cached entries will flush an element ONLY when it becomes the LRU in the Microengine CAM. Using this scheme, the time between the last use of this element and the write reference is sufficient to guarantee the order. Order between Enqueue references and Dequeue references are guaranteed only when the Queue is empty or near empty. Microcode Restrictions to Maintain Ordering The microcode programmer must ensure order where the program flow requires order and where the architecture does not guarantee that order. One mechanism that can be used to do this is signaling. For example, if the microcode needs to update several locations in a table, a location in SRAM can be used to lock access to the table. Example 31 is the microcode for this table update. Example 31. Table Update Microcode IMMED [$xfer0, 1] SRAM [write, $xfer0, ; At this point, the the table updates. SRAM [write, $xfer1, SRAM [write, $xfer3, CTX_ARB [SIG_DONE_3, ; At this point, the flag to allow access IMMED [$xfer0, 0] SRAM [write, $xfer0, 220 flag_address, 0, 1, ctx_swap [SIG_DONE_2] write to flag_address has passed the point of coherency. Do table_base, offset1, 2] , sig_done [SIG_DONE_3] table_base, offset2, 2] , sig_done [SIG_DONE_4] SIG_DONE_4] table writes have passed the point of coherency. Clear the by other threads. flag_address, 0, 1, ctx_swap [SIG_DONE_2] Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface Other microcode rules: • All access to atomic variables should be through read-modify-write instructions. • If the flow must know that a write is completed (actually in the SRAM itself), follow the write with a read to the same address. The write is guaranteed to be complete when the read data has been returned to the Microengine. • With the exception of initialization, never do write commands to the first three longwords of a queue_descriptor data structure (these are the longwords that hold head, tail, and count). All accesses to this data must be through the Q commands. • To initialize the Q_array registers, perform a memory write of at least three longwords, followed by a memory read to the same address (to guarantee that the write completed). Then, for each entry in the Q_array, perform a read_q_descriptor_head followed by a read_q_descriptor_other using the address of the same three longwords. 6.8 Coprocessor Mode Each SRAM controller may interface to an external coprocessor through its standard QDR interface. This interface allows for the cohabitation of both SRAM devices and coprocessors operating on the same bus, and the coprocessor behaves as a memory-mapped device on the SRAM bus. Figure 82 is a simplified block diagram of the SRAM controller. Figure 82 shows the connection to a coprocessor through a standard QDR interface. Note: Most coprocessors do not need a large number of address bits — connect as many bits of An as required by the coprocessor. Figure 82. Connection to a Coprocessor Though Standard QDR Interface SRAM_Control Coproessor SRAM Push Bus Internal Bus Control State Mechanics Push Data FIFO Read Cmd FIFO Read Data Read Address SRAM Cmd Bus Qn[17:0] RPE_Ln[1:0] An[x:0] Write Cmd FIFO SRAM Pull Bus Pin Control State Mechanics Coprocessor Pull Data FIFO Write Address BWEn[1:0] Write Data WPE_Ln[1:0] Dn[17:0] A9746-01 Hardware Reference Manual 221 Intel® IXP2800 Network Processor SRAM Interface The external coprocessor interface is based on FIFO communication. A thread can send parameters to the coprocessor by doing a normal SRAM write instruction: sram[write, $sram_xfer_reg, src1, src2, ref_count], optional_token The number of parameters (longwords) passed is specified by ref_count. The address can be used to support multiple coprocessor FIFO ports. The coprocessor performs some operation using the parameters, and then will later pass back some number of results values (the number of parameters and results will be known by the coprocessor designers). The time between the input parameter and return values is not fixed; it is determined by the amount of time the coprocessor requires to do its processing and can be variable. When the coprocessor is ready to return the results, it signals back to the SRAM controller through a mailbox-valid bit that the data in the read FIFO is valid. A thread can get the return values by doing a normal SRAM read instruction: sram[read, $sram_xfer_reg, src1, src2, ref_count], optional_token Figure 83 shows the coprocessor with 1-to-n memory-mapped FIFO ports. Figure 83. Coprocessor with Memory Mapped FIFO Ports Coprocessor RPE_Ln[0] Read Control Logic Port 1 Mail Box Valid Port 2 Mail Box Valid Network Processor FIFO An[x:0] Port n Mail Box FIFO … Qn[17:0] FIFO Valid BWEn[1:0] Write Control Logic Port 1 Mail Box FIFO Port 2 Mail Box FIFO Port n Mail Box FIFO … WPE_Ln[0] Dn[17:0] A9749-01 If the read instruction executes before the return values are ready, the coprocessor signals data-invalid through the mailbox register on the read data bus (Qn[17:0]). Signaling a thread upon pushing its read data works exactly as in a normal SRAM read. 222 Hardware Reference Manual Intel® IXP2800 Network Processor SRAM Interface There can be multiple operations in progress in the coprocessor. The SRAM controller sends parameters to the coprocessor in response to each SRAM write instruction without waiting for return results of previous writes. If the coprocessor is capable of re-ordering operations — i.e., returning the results for a given operation before returning the results of an earlier arriving operation — Microengine code must manage matching results to operations. Tagging the operation by putting a sequence value into the parameters, and having the coprocessor copy that value into the results is one way to accomplish this requirement. Flow control is under the Network Processor’s Microengine control. A Microengine thread accessing a coprocessor port maintains a count of the number of entries in that coprocessor’s writeFIFO port. Each time an entry is written to that coprocessor port, the count is incremented. When a valid entry is read from that coprocessor read-port, the count is decremented by the thread. Hardware Reference Manual 223 Intel® IXP2800 Network Processor SRAM Interface 224 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion SHaC — Unit Expansion 7 This section covers the operation of the Scratchpad, Hash Unit, and CSRs (SHaC). 7.1 Overview The SHaC unit is a multifunction block containing Scratchpad memory and logic blocks used to perform hashing operations and interface with the Intel XScale® core peripherals and control status registers (CSRs) through the Advanced Peripheral Bus (APB) and CSR buses, respectively. The SHaC also houses the global registers, as well as Reset logic. The SHaC unit has the following features: • Communication to Intel XScale® core peripherals, such as GPIOs and timers, through the APB. • • • • • Creation of hash indices of 48-, 64-, or 128-bit widths. Communication ring used by Microengines for interprocess communication. Third-option memory storage usable by Intel XScale® core and Microengines. CSR bus interface to permit fast writes to CSRs, as well as standard read and writes. Push/Pull Reflector to transfer data from the Pull bus to the Push bus. The CSR and ΑRM* Advanced Peripheral Bus (APB) bus interfaces are controlled by the Scratchpad state machine and will be addressed in the Scratchpad design detail section. (See Section 7.1.2.) Note: 7.1.1 Detailed information about CSRs is contained in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. SHaC Unit Block Diagram The SHaC unit contains two functional units: the Scratchpad and Hash Unit. Each will be described in greater detail in the following sections. The CAP and APB interfaces are described as part of the Scratchpad description. Hardware Reference Manual 225 Intel® IXP2800 Network Processor SHaC — Unit Expansion Figure 84. SHaC Top Level Diagram SH_APB_CTL Command Arbiters TAXX_CMD_BUS_B SH_CMDQ_FULL Scratch/CAP SH_APB_WR_DATA Control XP_RD_DATA Logic XP_RDY SP0_PULL_DATA Intel XScale® Core SH_CSR_CTL SP1_PULL_DATA Pull Arbiters SH_CSR_WR_DATA SP0_PULLQ_FULL CSR_RD_DATA SP1_PULLQ_FULL CSRs CSR_RDY SP0_TAKE_DATA SP1_TAKE_DATA SH_PULL_CMD SP0_PUSHQ_FULL Push Arbiters SP1_PUSHQ_FULL SH_PUSH_ID SH_PUSH_DE SH_PUSH_DATA SCR_HASH_TAKE_PULL1_DATA SCR_HASH_TAKE_PULL0_DATA Scratch RAM (4 K x 32) SCR_SEND_HASH_DATA SCR_HASH_CMD Hash Control Logic HASH_PUSH_DATA_REQ HASH_PUSH_DATA HASH_PUSH_CMD A9751-03 226 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion 7.1.2 Scratchpad 7.1.2.1 Scratchpad Description The SHaC Unit contains a 16-Kbyte Scratchpad memory, organized as 4K 32-bit words, that is accessible by the Intel XScale® core and Microengines. The Scratchpad connects to the internal Command, S_Push and S_Pull, CSR, and APB buses, as shown in Figure 85. The Scratchpad memory provides the following operations: • Normal reads and writes. 1 — 16 longwords (32 bits) can be read/written with a single command. Note that Scratchpad is not byte-writable. Each write must write all four bytes. • Atomic read-modify-write operations, bit-set, bit-clear, increment, decrement, add, subtract, and swap. The Read-Modify-Write (RMW) operations can also optionally return the premodified data. • 16 Hardware Assisted Rings for interprocess communication.1 • Standard support of APB peripherals such as UART, Timers, and GPIOs through the ARM* Advanced Peripheral Bus (APB). • Fast write and standard read and write operations to CSRs through the CSR Bus. For a fast write, the write data is supplied with the command, rather than pulled from the source. • Push/Pull Reflector Mode that supports reading from a device on the pull bus and writing the data to a device on the push bus (reflecting the data from one bus to the other). A typical implementation of this mode is to allow a Microengine to read or write the transfer registers or CSRs in another Microengine. Note that the Push/Pull Reflector Mode only connects to a single Push/Pull bus. If a chassis implements more than one Push/Pull bus, it can only connect one specific bus to the CAP. Scratchpad memory is provided as a third memory resource (in addition to SRAM and DRAM) that is shared by the Microengines and Intel XScale® core. The Microengines and Intel XScale® core can distribute memory accesses between these three types of memory resources to provide a greater number of memory accesses occurring in parallel. 1. A ring is a FIFO that uses a head and tail pointer to store/read information in Scratchpad memory. Hardware Reference Manual 227 Intel® IXP2800 Network Processor SHaC — Unit Expansion Figure 85. Scratchpad Block Diagram CSR_FAST_WR_DATA Scratchpad State Machine SH_PULL_ID APB_CONTROL_SIGNALS To XPI SH_PUSH_ID SH_PUSH_DE PULL_CMD GENERATOR SP1_PULLQ_FULL SCR_HASH_CMD CMD_PIPE_FULL From PULL1 Arb SP0_TAKE_DATA HASH_TAKE_ PULL0_DATA HASH_PUSH_DATA_REQ HASH_TAKE_ PULL1_DATA SP0_PULL_DATA SP1_PULL_DATA HASH_PUSH_CMD TAKE_DATA CONTROL SCR_TAKE_PULL1_DATA SP1_TAKE_DATA SCR_TAKE_PULL0_DATA From PULL0 Arb To Hash From Pull ArbS SCR_SEND_HASH_DATA SCR_READ_DATA_SEL SCR_ADDR SCR_RD SCR_WR To Hash SP0_PULLQ_FULL To CSRs From Hash SH_PULL_LEN CSR_CONTROL_SIGNALS To Push Arb CMD_INLET_ QUEUE SCR_PUSH_DATA_SEL APB_READ_DATA (from Intel XScale® Core PULL0 FIFO (16 x 32 bit) CSR_READ_DATA (from CSRs) PULL1 FIFO (16 x 32 bit) HASH_PUSH_DATA (from Hash Unit) Scratchpad RAM SCR_READ_DATA PUSH_ DATA To Push Arb From CMD Arb 8-Stage CMD Pipe TA_CMD_ BUS_B (4 K x 32) SH_CSR_WR_DATA SCR_PULL_DATA SCR_RMW_DATA SH_APB_WR_DATA A9756-02 228 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion 7.1.2.2 Note: Scratchpad Interface The Scratchpad command and S_Push and S_Pull bus interfaces actually are shared with the Hash Unit. Only one command, to either of those units, can be accepted per cycle. The CSR and APB buses are described in detail in the following sections. 7.1.2.2.1 Command Interface The Scratchpad accepts commands from the Command Bus and can accept one command every cycle. For Push/Pull reflector write and read commands, the command bus is rearranged before being sent to the Scratchpad state machine to allow a single state (REFLECT_PP) to be used to handle both commands. 7.1.2.2.2 Push/Pull Interface The Scratchpad has the capability to interface to either one or two pairs of push/pull (PP) bus pairs. The interface from the Scratchpad to the PP bus pair is through the Push/Pull Arbiters. Each PP bus has a separate Push and Pull arbiter through which access to the Push bus and Pull bus, respectively, is regulated. Refer to the SRAM Push Arbiter and SRAM Pull Arbiter chapters for more information. When the Scratchpad is used in a chip that only utilizes one pair of PP buses, the other interface is unused. 7.1.2.2.3 CSR Bus Interface The CSR Bus provides fast write and standard read and write operations from the Scratchpad to the CSRs in the CSR block. 7.1.2.2.4 Advanced Peripherals Bus Interface (APB) The Advanced Peripheral Bus (APB) is part of the Advanced Microcontroller Bus Architecture (AMBA) hierarchy of buses that are optimized for minimal power consumption and reduced design complexity. Note: 7.1.2.3 The SHaC Unit uses a modified APB interface in which the APB peripheral is required to generate an acknowledge signal (APB_RDY_H) during read operations. This is done to indicate that valid data is on the bus. The addition of the acknowledge signal is an enhancement added specifically for the IXP2800 Network Processor architecture. (For more details refer to the ARM* AMBA Specification 1.6.1.3.) Scratchpad Block Level Diagram Scratchpad Command Overview This section describes the operations performed for each Scratchpad command. Command order is preserved because all commands go through a single command inlet FIFO. When a valid command is placed on the command bus, the control logic checks the instruction field for the Scratchpad or CAP ID. The command, address, length, etc., are enqueued into the Command Inlet FIFO. If the command requires pull data, signals are generated and immediately sent to the Pull Arbiter. The command is pushed from the Inlet FIFO to the command pipe where it is serviced according to the command type. Hardware Reference Manual 229 Intel® IXP2800 Network Processor SHaC — Unit Expansion If the Command Inlet FIFO becomes full, the Scratchpad controller sends a full signal to the command arbiter that prevents it from sending further Scratchpad commands. 7.1.2.3.1 Scratchpad Commands The basic read and write commands transfer from 1 – 16 longwords of data to/from the Scratchpad. Reads When a read command is at the head of the Command queue, the Push Arbiter is checked to see if it has enough room for the data. If so, the Scratchpad RAM is read, and the data is sent to the Push Arbiter one 32-bit word at a time (the Push_ID is updated for each word pushed). The Push Data is sent to the specified destination. The read data is placed on the S_Push bus, one 32-bit word at a time. If the master is a Microengine, it is signaled that the command is complete during the last phase of the push bus transfer. Other masters (Intel XScale® core and PCI) must count the number of data pushes to know when the transfer is complete. Writes When a write command is at the head of the Command Inlet FIFO, signals are sent to the Pull Arbiter. If there is room in the queue, the command is sent to the Command pipe. When a write command is at the head of the Command pipe, the command waits for a signal from the Pull Data FIFO, indicating that the data to be written is valid. Once the first longword is received, the data is written on consecutive cycles to the Scratchpad RAM until the burst (up to 16 longwords) is completed. If the master is a Microengine, it is signaled that the command is complete during the last pull bus transfer. Other masters (Intel XScale® core and PCI) must count the number of data pulls to know when the transfer is complete. Atomic Operations The Scratchpad supports the following atomic operations. • • • • • • • bit set bit clear increment decrement add subtract swap The Scratchpad does read-modify-writes for the atomic operations, and the pre-modified data also can be returned, if desired. The atomic operations operate on a single longword. There is one cycle between the read and write while the modification is done. In that cycle, no operation is done, so an access cycle is lost. When a read-modify-write command requiring pull data from a source is at the head of the Command Inlet FIFO, a signal is generated and sent to the Pull Arbiter (if there is room). 230 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion When the RMW command reaches the head of the Command pipe, the Scratchpad reads the memory location in the RAM. If the source requests the pre-modified data (Token[0] set), it is sent to the Push Arbiter at the time of the read. If the RMW requires pull data, the command waits for the data to be placed into the Pull Data FIFO before performing the operation; otherwise the operation is performed immediately. Once the operation has been performed, the modified data is written back to the Scratchpad RAM. Up to two Microengine signals are assigned to each read-modify-write reference. Microcode should always tag the read-modify-write reference with an even-numbered signal. If the operation requires a pull, then the requested signal is sent on the pull. If the read data is to be returned to the Microengine, then the Microengine is sent (requested signal OR 1) when that data is pushed. For all atomic operations, whether or not the read data is returned, is determined by Command bus Token[0]. Note: 7.1.2.3.2 The Intel XScale® core can do atomic commands using aliased addresses in Scratchpad. An Intel XScale® core Store instruction to an atomic command address will do the RMW without returning the read data, and an Intel XScale® core Swap instruction (SWP) to an atomic command address will do the RMW and return the read data to Intel XScale® core. Ring Commands The Scratchpad provides 16 Rings used for interprocess communication. The rings provide two operations. • Get(ring, length) • Put(ring, length) Ring is the number of the ring (0 — 15) to get from or put to, and length specifies the number of longwords to transfer. A logical view of one of the rings is shown in Figure 86. Figure 86. Ring Communication Logic Diagram Address Decoder Scratchpad RAM Read/Write/Atomic Addresses 1 of 16 Head Tail Base Size Full A9757-01 Hardware Reference Manual 231 Intel® IXP2800 Network Processor SHaC — Unit Expansion Head, Tail, Base, and Size are registers in the Scratchpad Unit. Head and Tail point to the actual ring data, which is stored in the Scratchpad RAM. For each ring in use, a region of Scratchpad RAM must be reserved for the ring data. The reservation is by software convention. The hardware does not prevent other accesses to the region of Scratchpad used by the ring. Also, the regions of Scratchpad memory allocated to different rings must not overlap. Head points to the next address to be read on a get, and Tail points to the next address to be written on a put. The size of each ring is selectable from the following choices: 128, 256, 512, or 1,024 32-bit words. The size is specified in the Ring_Base register. Note: The above rule stating that rings must not overlap implies that many configurations are not legal. For example, programming five rings to a size of 1024 words would exceed the total size of Scratchpad memory, and therefore is not legal. Note: The region of Scratchpad used for a ring is naturally aligned to its size. Each ring asserts an output signal that is used as a state input to the Microengines. The software configures whether the Scratchpad asserts the signal if a ring becomes empty or if the ring is nearly full. If configured to assert status when the rings are nearly full, Microengines must test the input state (by doing Branch on Input Signal) before putting data onto a ring. There is a lag in time from a put instruction executing to the Full signal being updated to reflect that put. To be guaranteed that a put does not overfill the ring, there is a limit on the number of Contexts and the number of 32-bit words per write, based on the size of the ring, as shown in Table 79. Each Context should test the Full signal, then do the put if not Full, and then wait until the Context has been signaled that the data has been pulled, before testing the Full signal again. Table 79. Ring Full Signal Use – Number of Contexts and Length versus Ring Size Number of Contexts Ring Size 128 256 512 1024 1 16 16 16 16 2 16 16 16 16 4 8 16 16 16 8 4 12 16 16 16 2 6 14 16 24 1 4 9 16 32 1 3 7 15 40 Illegal 2 5 12 48 Illegal 2 4 10 64 Illegal 1 3 7 128 Illegal Illegal 1 3 NOTE: 1. Number in each table entry is the largest length that should be put. 16 is the largest length that a single put instruction can generate. 2. Illegal - With that number of Contexts, even a length of 1 could cause the ring to overfill. 232 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion The ring commands operate as outlined in the pseudo-code in Example 32. The operations are atomic, meaning that multi-word “Gets” and “Puts” do all the reads and writes, with no other intervening Scratchpad accesses. Example 32. Ring Command Pseudo-Code GET Command Get(ring, length) If count[ring] >= length //enough data in the ring? ME <-- Scratchpad[head[ring]] // each data phase head[ring]+= length % ringSize count[ring] -= length else ME <--nil // 1 data phase signals read off empty list NOTE: The Microengine signal is delivered with last data. In the case of nil, the signal is delivered with the 1 data phase. PUT Command Before issuing a PUT command, it is the responsibility of the Microengine thread issuing the command to make sure the Ring has enough room. Put(ring, length) SRAM[tail[ring]] <-- ME pull data // each data phase tail[ring]+= length % ringSize Count[ring] += length Table 80. Head/Tail, Base, and Full Threshold – by Ring Size Size (Number of 32-Bit Words) Base Address Head/Tail Offset Full Threshold (Entries) 128 13:9 8:2 32 256 13:10 9:2 64 512 13:11 10:2 128 1024 13:12 11:2 256 NOTE: Note that bits [1:0] of the address are assumed to be 00. Prior to using the Scratchpad rings, software must initialize the Ring registers (by CSR writes). The Base address of the ring must be written, and also the size field that determines the number of 32-bit words for the Ring. Note: Detailed information about CSRs is provided in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Writes For an APB or CAP CSR write, the Scratchpad arbitrates for the S_Pull_Bus, pulls the write data from the source identified in the instruction (either a Microengine transfer register or an Intel XScale® core write buffer), and puts it into one of the Pull Data FIFOs. It then drives the address and writes data onto the appropriate bus. CAP CSRs locally decode the address to match their own. The Scratchpad generates a separate APB device select signal for each peripheral device (up to 15 devices). If the write is to an APB CSR, the control logic maintains valid signaling until the APB_RDY_H signal is returned (the APB RDY signal is an extension to the APB bus specification, specifically added for the Network Processor). Upon receiving the APB_RDY_H signal, the APB select signal is deasserted and the state machine returns to the idle state between commands. The CAP CSR bus does not support a similar acknowledge signal on writes since the Fast Write functionality requires that a write operation be retired on each cycle. Hardware Reference Manual 233 Intel® IXP2800 Network Processor SHaC — Unit Expansion For writes using the Reflector mode, Scratchpad arbitrates for the S_Pull_Bus, pulls the write data from the source identified in the instruction (either a Microengine transfer register or an Intel XScale® core write buffer), and puts it into one of the Pull Data FIFOs (same as for APB and CAP CSR writes). The data is then removed from the Pull Data FIFO and sent to the Push Arbiter. For CSR Fast Writes, the command bypasses the Inlet Command FIFO and is acted on at first opportunity. The CSR control logic has an arbiter that gives highest priority to fast writes. If an APB write is in progress when a fast write arrives, both write operations will complete simultaneously. For a CSR fast write, the Scratchpad extracts the write data from the command, instead of pulling the data from a source over the Pull bus. It then drives the address and writes data to all CSRs on the CAP CSR bus, using the same method used for the CAP CSR write. The Scratchpad unit supports CAP write operations with burst counts greater than 1, except for fast writes, which only support a burst count of 1. Burst support is required primarily for Reflector mode and software must ensure that burst is performed to a non-contiguous set of registers. CAP looks at the length field on the command bus and breaks each count into a separate APB write cycle, incrementing the CSR number for each bus access. Reads For an APB read, the Scratchpad drives the address, write, select, and enable signals, and then waits for the acknowledge signal (APB_RDY_H) from the APB device. For a CAP CSR read, the address is driven, which controls a tree of multiplexers to select the appropriate CSR. CAP then waits for the acknowledge signal (CAP_CSR_RD_RDY). Note: The CSR bus can support an acknowledge signal since the read operations occur on a separate read bus and will not interfere with Fast Write operations. In both cases, when the data is returned, the data is sent to the Push Arbiter and the Push Arbiter pushes the data to the destination. For reads using the Reflector mode, the write data is pulled from the source identified in ADDRESS (either a Microengine transfer register or an Intel XScale® core write buffer), and put into one of the Scratchpad Pull Data FIFOs. The data is then sent to the Push Arbiter. The arbiter then moves the data to the destination specified in the command. Note that this is the same as a Reflector mode write, except that the source and destination are identified using opposite fields. The Scratchpad performs one read operation at a time. In other words, CAP does not begin an APB read until a CSR read has completed, or vice versa. This simplifies the design by ensuring that, when lengths are greater than 1, the data is sent to the Push Arbiter in a contiguous order and not interleaved with data from a read on the other bus. Signal Done CAP can provide a signal to a Microengine upon completion of a command. For APB and CAP CSR operations, CAP signals the Microengine using the same method as any other target. For Reflector mode reads and writes, CAP uses the TOKEN field of the Command to determine whether to signal the command initiator, the Microengine that is the target of the reflection, both, or neither. 234 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion 7.1.2.3.3 Clocks and Reset Clock generation and distribution is handled outside of CAP and is dependent on the specific chip implementation. Separate clock rates are required for CAP CSRs/Push/Pull Buses and ARB since APB devices tend to run slower. CAP provides reset signals for the CAP CSR block and APB devices. These resets are based on the system reset signal and synchronized to the appropriate bus clock. Table 81 shows the Intel XScale® core and Microengine instructions used to access devices on these buses and it shows the buses that are used during the operation. For example, to read an APB peripheral such as a UART CSR, a Microengine would execute a csr[read] instruction and the Intel XScale® core would execute a Load (ld) instruction. Data is then moved between the CSR and the Intel XScale® core/Microengine by first reading the CSR via the APB bus and then writing the result to the Intel XScale® core/Microengine via the Push Bus. Table 81. Intel XScale® Core and Microengine Instructions Accessing Read Operation Access Method: APB Peripheral Write Operation Access Method: Microengine: csr[read] Microengine: csr[write] Intel XScale® core: ld Intel XScale® core: st Bus Usages: Bus Usages: Read source: APB bus Read source: Pull Bus Write dest: Push bus Write dest: APB bus Access Method: Microengine: csr[read] Intel XScale® core: ld Access Method: Microengine: csr[write], fast_wr Intel XScale® core: st Bus Usages: CAP CSR Bus Usages: Read source: CSR bus Write dest: Push bus csr[write] and st Read source: Pull Bus Write dest: CSR bus fast_wr Write dest: CSR bus Access Method: Microengine CSR or Xfer register (Reflector Mode) 7.1.2.3.4 Access Method: Microengine: csr[read] Microengine: csr[write] Intel XScale® core: ld Intel XScale® core: st Bus Usages: Bus Usages: Read source: Pull bus (Address) Reads: Pull Bus (PP_ID) Write dest: Push bus(PP_ID) Write dest: Push bus (Address) Reset Registers The reset registers reside in the SHaC. For more information on chip reset, refer to Section 10, “Clocks and Reset”. Strapping pins are used to select the reset count (currently 140 cycles after deassert). Options for reset count will be 64 (default), 128, 512, and 2048. Hardware Reference Manual 235 Intel® IXP2800 Network Processor SHaC — Unit Expansion 7.1.3 Hash Unit The SHaC unit contains a Hash Unit that can take 48-, 64-, or 128-bit data and produce a 48-, 64-, or a 128-bit hash index, respectively. The Hash Unit is accessible by the Microengines and the Intel XScale® core. Figure 87 is a block diagram of the Hash Unit. Figure 87. Hash Unit Block Diagram 3-Stage Command Pipe HASH_ PUSH_CMD From SCR HASH_CMD Hash State Machine SCR_HASH_CMD To SCR . HASH_PUSH_ DATA_REQ From From PULL1 SCR Arb SP0_PULL_DATA SCR_HASH_TAKE_ PULL0_DATA HASH_DATA 1 Hash Multiplier PULL0 FIFO (32 x 32 bit) HASH_ PULL_DATA Hash Select 2 HASH_ RESULT 128 Bit To SCR HASH_PULL_ DATA_SEL Hash Algorithm From From PULL0 SCR Arb HASH_REMINDER HASH_RESULT HASH_CMD_VALID 3-Stage Output Buffer SP1_PULL_DATA SCR_HASH_TAKE_ PULL_DATA PULL1 FIFO (32 x 32 bit) Notes: 1. 128 bits, shifted 16 bits per CLK. 2. 128 bit, 64-bit, or 4-bit A9758-01 236 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion 7.1.3.1 Hashing Operation Up to three hash indexes (see Example 33) can be created by using one Microengine instruction. Example 33. Microengine Hash Instructions hash1_48[$xfer], optional_token hash2_48[$xfer], optional_token hash3_48[$xfer], optional_token hash1_64[$xfer], optional_token hash2_64[$xfer], optional_token hash3_64[$xfer], optional_token hash1_128[$xfer], optional_token hash2_128[$xfer], optional_token hash3_128[$xfer], optional_token Where: $xfer The beginning of a contiguous set of registers that supply the data used to create the hash input and receive the hash index upon completion of the hash operation. optional_token sig_done, ctx_swap, defer [1] A Microengine initiates a hash operation by writing a contiguous set of SRAM Transfer registers and then executing the hash instruction. The SRAM Transfer registers can be specified as either Context-Relative or Indirect; Indirect allows any of the SRAM Transfer registers to be used. Two SRAM Transfer registers are required to create hash indexes for 48-bit and 64-bit, and four SRAM Transfer registers to create 128-bit hash indexes, as shown in Table 82. In the case of the 48-bit hash, the Hash Unit ignores the upper two bytes of the second Transfer register. Table 82. S_Transfer Registers Hash Operands (Sheet 1 of 2) Register Address 48-Bit Hash Operations Don't care hash 3[47:32] hash 3 [31:0] Don't care $xfer n+4 hash 2[47:32] hash 2 [31:0] Don't care $xfer n+5 $xfer n+3 $xfer n+2 hash 1[47:32] hash 1 [31:0] $xfer n+1 $xfer n 64-Bit Hash Operations Hardware Reference Manual hash 3 [63:32] $xfer n+5 hash 3 [31:0] $xfer n+4 hash 2 [63:32] $xfer n+3 hash 2 [31:0] $xfer n+2 hash 1 [63:32] $xfer n+1 hash 1 [31:0] $xfer n 237 Intel® IXP2800 Network Processor SHaC — Unit Expansion Table 82. S_Transfer Registers Hash Operands (Sheet 2 of 2) Register Address 128-Bit Hash Operations hash 3 [127:96] $xfer n+11 hash 3 [95:64] $xfer n+10 hash 3 [63:32] $xfer n+9 hash 3 [31:0] $xfer n+8 hash 2 [127:96] $xfer n+7 hash 2 [95:64] $xfer n+6 hash 2 [63:32] $xfer n+5 hash 2 [31:0] $xfer n+4 hash 1 [127:96] $xfer n+3 hash 1 [64:95] $xfer n+2 hash 1 [63:32] $xfer n+1 hash 1 [31:0] $xfer n The Intel XScale® core initiates a hash operation by writing a set of memory-mapped Hash Operand registers (which are built into the Intel XScale® core gasket) with the data to be used to generate the hash index. There are separate registers for 48-, 64-, and 128-bit hashes. Only one hash operation of each type can be done at a time. Writing to the last register in each group informs the gasket logic that it has all of the operands for that operation, and it will then arbitrate for the Command bus to send the command to the Hash Unit. Note: Detailed information about CSRs is contained in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. For Microengine-generated commands and those generated by the Intel XScale® core, the command enters the Command Inlet FIFO. As with the Scratchpad write and RMW operations, signals are generated and sent to the Pull Arbiter. The Hash unit Pull Data FIFO allows the data for up to three hash operations to be read into the Hash Unit in a single burst. When the command is serviced, the first data to be hashed enters the hash array while the next two wait in the FIFO. The Hash Unit uses a hard-wired polynomial algorithm and a programmable hash multiplier to create hash indexes. Three separate multipliers are supported — one each, for 48-, 64-, and 128-bit hash operations. The multiplier is programmed through the registers, HASH_MULTIPLIER_64_1, HASH_MULTIPLIER_64_2, HASH_MULTIPLIER_48_1, HASH_MULTIPLIER_48_2, HASH_MULTIPLIER_128_1, HASH_MULTIPLIER_128_2, HASH_MULTIPLIER_128_3, and HASH_MULTIPLIER_128_4. The multiplicand is shifted into the hash array 16 bits at a time. The hash array performs a 1’s-complement multiply and polynomial divide, calculated by using the multiplier and 16 bits of the multiplicand. The result is placed into an output register and is also fed back into the array. This process is repeated three times for a 48-bit hash (16 bits x 3 = 48), four times for a 64-bit hash (16 bits x 4 = 64), and eight times for a 128-bit hash (16 x 8 = 128). After an entire multiplicand has been passed through the hash array, the resulting hash index is placed into a two-stage output pipeline and the next hash is immediately started. 238 Hardware Reference Manual Intel® IXP2800 Network Processor SHaC — Unit Expansion The Hash Unit shares the Scratchpad’s Push Data FIFO. After each hash index is completed, the index is placed into a three-stage output pipe and the Hash Unit sends a PUSH_DATA_REQ to the Scratchpad to indicate that it has a valid hash index to put into the Push Data FIFO for transfer. The Scratchpad issues a SEND_HASH_DATA signal, transfers the hash index to the Push Data FIFO, and sends the data to the Arbiter. For hash operations initiated by the Intel XScale® core, the core reads the results from its memorymapped Hash Result registers. The addresses of Hash Results are the same as the Hash Operand registers. Because of queuing delays at the Hash Unit, the time to complete an operation is not fixed. The Intel XScale® core can do one of two operations to get the hash results: • Poll the Hash Done register. This register is cleared when the Hash Operand registers are written. Bit [0] of the Hash Done register is set when the Hash Result registers get the result from the Hash Unit (when the last word of the result is returned). The Intel XScale® core software can poll on Hash Done, and read Hash Result when Hash Done equals 0x00000001. • Read Hash Result directly. The gasket logic acknowledges the read only when the result is valid. The Intel XScale® core stalls if the result is not valid when the read happens. The number of clock cycles required to perform a single hash operation equals: two or four cycles through the input buffers, three, four, or eight cycles through the hash array, and two or four cycles through the output buffers. With the pipeline characteristics of the Hash Unit, performance is improved if multiple hash operations are initiated with a single instruction, rather than with separate hash instructions for each hash operation. 7.1.3.2 Hash Algorithm The hashing algorithm allows flexibility and uniqueness since it can be programmed to provide different results for a given input. The algorithm uses binary polynomial multiplication and division under modulo-2 addition. The input to the algorithm is a 48-, 64-, or 128-bit value. The data used to generate the hash index is considered to represent the coefficients of an order-47, order-63, or order-127 polynomial in x. The input polynomial (designated as A(x)) has the form: 2 46 47 (48-bit hash operation) 2 62 63 (64-bit hash operation) Equation 1. A 48 ( x ) = a 0 + a 1 x + a 2 x + … + a 46 x + a 47 x Equation 2. A 64 ( x ) = a 0 + a 1 x + a 2 x + … + a 62 x + a 63 x 2 Equation 3. A 128 ( x ) = a 0 + a 1 x + a2 x + … + a 126 x 126 + a 127 x 127 (128-bit hash operation) This polynomial is multiplied by a programmable hash multiplier using a modulo-2 addition. The hash multiplier, M(x) is stored in Hash Unit CSRs and represents the polynomial. 2 46 47 2 62 63 Equation 4. M 48 ( x ) = m 0 + m 1 x + m 2 x + … + m46 x + m 47 x Equation 5. M 64 ( x ) = m 0 + m 1 x + m 2 x + … + m 62 x + m 63 x 2 Equation 6. M 128 ( x ) = m 0 + m 1 x + m 2 x + … + m 126 x 126 (48-bit hash operation) (64-bit hash operation) + m 127 x 127 (128-bit hash operation) Since multiplication is performed using modulo-2 addition, the result is an order-94 polynomial, an order-126 polynomial, or an order-254 polynomial with coefficients that are also 1 or 0. This product is divided by a fixed generator polynomial given by: Hardware Reference Manual 239 Intel® IXP2800 Network Processor SHaC — Unit Expansion 10 25 36 48 (48-bit hash operation) 17 35 54 64 (64-bit hash operation) Equation 7. G 48 ( x ) = 1 + x + x + x + x Equation 8. G 64 ( x ) = 1 + x + x + x + x 33 69 98 Equation 9. G 128 ( x ) = 1 + x + x + x + x 128 (128-bit hash operation) The division results in a quotient Q(x), a polynomial of order-46, order-62, or order-126, and a remainder R(x), and a polynomial of order-47, order-63, or order-127. The operands are related by the equation: Equation 10. A ( x )M ( x ) = Q ( x )G ( x ) + R ( x ) The generator polynomial has the property of irreducibility. As a result, for a fixed multiplier M(x), there is a unique remainder R(x) for every input A(x). The quotient Q(x), can then be discarded, since input A(x) can be derived from its corresponding remainder R(x). A given bounded set of input values A(x) — for example, 8K or 16K table entries — with bit weights of an arbitrary density function can be mapped one-to-one into a set of remainders R(x) such that the bit weights of the resulting Hashed Arguments (a subset of all values of R(x) polynomials) are all approximately equal. In other words, there is a high likelihood that the low-order set of bits from the Hash Arguments are unique, so they can be used to build an index into the table. If the hash algorithm does not provide a uniform hash distribution for a given set of data, the programmable hash multiplier (M(x)) may be modified to provide better results. 240 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Media and Switch Fabric Interface 8.1 8 Overview The Media and Switch Fabric (MSF) Interface connects the IXP2800 Network Processor to a physical layer device (PHY) and/or to a Switch Fabric. The MSF consists of separate receive and transmit interfaces, each of which can be separately configured for either SPI-4 Phase 2 (System Packet Interface), for PHY devices or for the CSIX-L1 protocol, for Switch Fabric Interfaces. The receive and transmit ports are unidirectional and independent of each other. Each port has 16 data signals, a clock, a control signal, and a parity signal, all of which use LVDS (differential) signaling, and are sampled on both edges of the clock. There is also a flow control port consisting of a clock, data, and ready status bits, for communicating between two IXP2800 Network Processors, or a IXP2800 Network Processor and a Switch Fabric Interface; these are also LVDS, dual-edge data transfer. Signal usage and the receive and transmit functions, are illustrated in Figure 88, and described in the sections that follow. Note: Detailed information about CSRs is contained in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Hardware Reference Manual 241 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Figure 88. Example System Block Diagram Receive protocol is SPI-4 Transmit mode is CSIX Ingress Intel® IXP2800 Network Processor RDAT TDAT Framing/MAC Device (PHY) RSTAT Flow Control SPI-4 Protocol Egress Intel IXP2800 Network Processor Optional Gasket (Note 1 ) Switch Fabric CSIX Protocol TSTAT RDAT TDAT Receive protocol is CSIX Transmit mode is SPI-4 Notes: 1. Gasket is used to convert 16-bit, dual-data Intel IXP2800 Network Processor signals to wider single edge CWord signals used by Switch Fabric, if required. 2. Per the CSIX specification, the terms "egress" and ingress" are with respect to the Switch Fabric. So the egress processor handles traffic received from the Switch Fabric and the ingress processor handles traffic sent to the Switch Fabric. A9759-01 The use of some of the receive and transmit pins is based on protocol, SPI-4 or CSIX. For the LVDS pins, only the active high name is given (for LVDS, there are two pins per signal). The definitions of the pins can be found in the SPI-4 and CSIX specs, referenced below. An alternate system configuration is shown in the block diagram in Figure 89. In this case, a single IXP2800 Network Processor is used for both Ingress and Egress. The bit-rate supported would be less than in Figure 88. A hypothetical Bus Converter chip, external to the IXP2800 Network Processor, is used. The block diagram in Figure 89 is only an illustrative example. 242 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Figure 89. Full-Duplex Block Diagram Receive and transmit protocol is SPI-4 and CSIX on transferby-transfer basis. Intel® IXP2800 Network Processor RDAT Framing/MAC Device (PHY) TDAT Tx Rx Switch Fabric Bus Converter UTOPIA-3 or IXBUS Protocol Tx Rx CSIX Protocol Notes: The Bus Converter chip receives and transmits both SPI-4 and CSIX protocols from/to Intel IXP2800 Network Processor. It steers the data, based on protocol, to either PHY device or Switch Fabric. PHY interface can be UTOPIA-3, IXBUS, or any other required protocol. A9357-02 8.1.1 SPI-4 SPI-4 is an interface for packet and cell transfer between a physical layer (PHY) device and a link layer device (the IXP2800 Network Processor), for aggregate bandwidths of OC-192 ATM and Packet over SONET/SDH (POS), as well as 10 Gb/s Ethernet applications. The Optical Internetworking Forum (OIF), www.oiforum.com, controls the SPI-4 Implementation Agreement document. SPI-4 has two types of transfers — Data when the RCTL signal is deasserted; Control when the RCTL signal is asserted. The Control Word format is shown in Table 83 (this information is from the SPI-4 specification, shown here for convenience). Hardware Reference Manual 243 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 83. SPI-4 Control Word Format Bit Position Label 15 Type Description Control Word Type. • 1—payload control word (payload transfer will immediately follow the control word). • 0—idle or training control word. End-of-Packet (EOP) Status. Set to the following values below according to the status of the immediately preceding payload transfer. • 00—Not an EOP. 14:13 EOPS • 01—EOP Abort (application-specific error condition). • 10—EOP Normal termination, 2 bytes valid. • 11—EOP Normal termination, 1 byte valid. EOPS is valid in the first Control Word following a burst transfer. It is ignored and set to 00 otherwise. Start-of-Packet (SOP). 12 SOP • Set to 1 if the payload transfer immediately following the Control Word corresponds to the start of a packet; set to 0 otherwise. • Set to 0 in all idle and training control words. Port Address. 11:4 ADR 8-bit port address of the payload data transfer immediately following the Control Word. None of the addresses are reserved (all are available for payload transfer). • Set to all zeros in all idle Control Words. • Set to all ones in all training Control Words. 4-bit Diagonal Interleaved Parity. 3:0 DIP-4 4-bit odd parity computed over the current Control Word and the immediately preceding data words (if any) following the last Control Word. Control words are inserted only between burst transfers; once a transfer has begun, data words are sent uninterrupted until either End of Packet or a multiple of 16 bytes is reached. The order of bytes within the SPI-4 data burst is shown in Table 84. The most significant bits of the bytes correspond to bits 15 and 7. On data transfers that do not end on an even byte-boundary, the unused byte on bits [7:0] is set to all zeros. 244 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 84 shows the order of bytes on SPI-4; this example shows a 43-byte packet. Table 84. Order of Bytes1 within the SPI-4 Data Burst Bit 15 1. 2. Bit 8 Bit 7 Bit 0 Data Word 1 Byte 1 Byte 2 Data Word 2 Byte 3 Byte 4 Data Word 3 Byte 5 Byte 5 Data Word 4 Byte 7 Byte 6 … … … … … … … … … Data Word 21 Byte 41 Byte 42 Data Word 22 Byte 432 00 These bytes are valid only if EOP is set. All transfers on the SPI-4 bus must be in multiples of 16 bytes if it is not associated with an End of Packet (EOP) transfer, to comply with the protocol. Hence, this 43-byte example would only be valid for an EOP transfer. Figure 90 shows two ways in which the SPI-4 clocking can be done. Note that it is also possible to use an internally-supplied clock and leave TCLK_REF unused. Figure 90. Receive and Transmit Clock Generation PHY chip generates RDCLK internally and supplies it to Ingress Intel® IXP2800 Network Processor. Ingress IXP2800 Network Processor Oscillator supplies TCLK_REF to Egress Intel IXP2800 Network Processor, used to generate TDCLK. Ingress IXP2800 Network Processor RDCLK RDCLK PHY PHY RCLK_REF RCLK_REF Osc TCLK_REF TDCLK TCLK_REF TDCLK Egress IXP2800 Network Processor Ingress IXP2800 Network Processor supplies RCLK_REF to TCLK_REF, so TDCLK is same frequency as RDCLK. Egress IXP2800 Network Processor PHY uses TDCLK to generate RDCLK to Ingress IXP2800 Network Processor. RCLK_REF is not used. A9760-01 Hardware Reference Manual 245 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.1.2 CSIX CSIX_L1 (Common Switch Interface) defines an interface between a Traffic Manager (TM) and a Switch Fabric (SF) for ATM, IP, MPLS, Ethernet, and similar data communications applications. The Network Processor Forum (NPF) www.npforum.org, controls the CSIX_L1 specification. The basic unit of information transferred between TMs and SFs is called a CFrame. There are a number of CFrame types defined as shown in Table 85. Table 85. CFrame Types Type Encoding CFrame Type 0 Idle 1 Unicast 2 Multicast Mask 3 Multicast ID 4 Multicast Binary Copy 5 Broadcast 6 Flow Control 7 Command and Status 8-F CSIX Reserved For transmission from the IXP2800 Network Processor, CFrames are constructed for transmission under Microengine software control, and written into the Transmit Buffer (TBUF). On receive to the IXP2800 Network Processor, CFrames are either discarded, placed into Receive Buffer (RBUF), or placed into Flow Control Egress FIFO (FCEFIFO), according to mapping defined in the CSIX_Type_Map CSR. CFrames put into RBUF are passed to a Microengine to be parsed by software. CFrames put into FCEFIFO are sent to the Ingress IXP2800 Network Processor over the Flow Control bus. Link-level Flow Control information (CSIX Ready field) in the Base Header of all CFrames (including Idle) is handled by hardware. 8.1.3 CSIX/SPI-4 Interleave Mode SPI-4 packets and CSIX CFrames are interleaved when the RBUF and TBUF are configured in 3-partition mode. When the protocol signal RPROT or TPROT is high, the data bus is transferring CSIX CFRAMES or IDLE cycles. When protocol is low, the data bus is transferring SPI-4 packets or idle cycles. When operating in interleave mode, RPROT must be driven high (logic 1) for the entire CSIX CFRAME or low (logic 0) for the entire SPI-4 burst. When in 3-partition mode, the SPI-4 interval should be padded using SPI-4 idle cycles so that it ends on a 32-bit boundary or a complete RCLK or TCLK clock cycle. The actual SPI-4 data length can be any size. However, the SPI-4 interval, which includes the SPI-4 control words and payload data, must end on a 32-bit boundary. 246 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2 Receive The receive section consists of: • • • • • • Receive Pins (Section 8.2.1) Checksum (Section 8.2.2) Receive Buffer (RBUF) (Section 8.2.2) Full Element List (Section 8.2.3) Rx_Thread_Freelist (Section 8.2.4) Flow Control Status (Section 8.2.7) Figure 91 is a simplified block diagram of the receive section. Figure 91. Simplified Receive Section Block Diagram Checksum RDAT RCTL RPAR CSIX Protocol Logic - SPI-4 Protocol Logic RCLK RCLK REF Full Element List SPI-4 Flow Control Clock for Receive Functions - 128 - Buffers 32 S_Push_Data (to MEs) 64 D_Pull_Data (to DRAM) Full Indication to Flow Control RPROT RSTAT RBUF - - - - - - - - - - - - - Control Receive Thread Freelists CSR Write CSIX CFrames mapped by RX_Port_Map CSR (normally Flow Control CFrames are mapped here) FCEFIFO - - - - - - - - - - - - - - - - - - - - TXCFC (FCIFIFO full) TXCDAT A9339-01 Hardware Reference Manual 247 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2.1 Receive Pins The use of the receive pins is a function of RPROT input, as shown in Table 86. Table 86. Receive Pins Usage by Protocol Name Direction SPI-4 Use CSIX Use RCLK Input RDCLK TxClk RDAT[15:0] Input RDAT[15:0] TxData[15:0] RCTL Input RCTL TxSOF RPAR Input Not Used TxPar RSCLK Output RSCLK Not Used RSTAT[1:0] Output RSTAT[1:0] Not Used In general, hardware does framing, parity checking, and flow control message handling. Interpretation of frame header and payload data is done by Microengine software. The internal clock used is taken from the RCLK pin. RCLK_Ref output is a buffered version of the clock. It can be used to supply TCLK_Ref of the Egress IXP2800 Network Processor if desired. The receive pins RDAT[15:0], RCTL, RPAR are sampled relative to RCLK. To work at high frequencies, each of those pins has de-skewing logic as described in Section 8.6. 8.2.2 RBUF RBUF is a RAM that holds received data. It stores received data in sub-blocks (referred to as elements), and is accessed by a Microengine or the Intel XScale® core reading the received information. Details of how RBUF elements are allocated and filled is based on the receive data protocol, and is described in Section 8.2.2.1 – Section 8.2.2.2. When data is received, the associated status is put into the Full_Element_List FIFO and subsequently sent to a Microengine for processing. Full_Element_List insures that received elements are sent to a Microengine in the order in which the data was received. RBUF contains a total of eight Kbytes of data. Table 87 shows the order in which received data is stored in RBUF. Each number represents a byte, in order of arrival from the receiver interface. Table 87. Order in which Received Data Is Stored in RBUF Data/Payload 4 5 6 7 0 Address Offset (Hex) 1 2 3 0 C D E F 8 9 A B 8 14 15 16 17 10 11 12 13 10 The mapping of elements to address offset in RBUF is based on the RBUF partition and element size, as programmed in the MSF_Rx_Control CSR. RBUF can be partitioned into one, two, or three partitions based on MSF_Rx_Control[RBUF_Partition]. The mapping of received data to partitions is shown in Table 88. 248 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 88. Mapping of Received Data to RBUF Partitions Data Use by Partition, Fraction of RBUF Used, Start Byte Offset (Hex) Number of Partitions in Use Receive Data Protocol Partition Number 0 1 2 n/a n/a SPI-4 1 SPI-4 only All Byte 0 CSIX Data 2 CSIX only Both SPI-4 and CSIX 3 CSIX Control 3/4 of RBUF 1/4 of RBUF Byte 0 Byte 0x1800 n/a CSIX Data SPI-4 1/2 of RBUF 3/8 of RBUF 1/8 of RBUF Byte 0 Byte 0x1000 Byte 0x1C00 CSIX Control The data in each partition is further broken up into elements, based on MSF_Rx_Control[RBUF_Element_Size_#] (n = 0, 1, 2). There are three choices of element size – 64, 128, or 256 bytes. Table 89 shows the RBUF partition options. Note that the choice of element size is independent for each partition. Table 89. Number of Elements per RBUF Partition Partition Number RBUF_Partition Field RBUF_Element_Size_# Field 0 00 (1 partition) 01 (2 partitions) 10 (3 partitions) 00 (64 bytes) 128 01 (128 bytes) 64 10 (256 bytes) 32 1 2 Unused Unused 00 (64 bytes) 96 32 01 (128 bytes) 48 16 10 (256 bytes) 24 8 00 (64 bytes) 64 48 16 01 (128 bytes) 32 24 8 10 (256 bytes) 16 12 4 Unused The Microengine can read data from the RBUF to Microengine S_TRANSFER_IN registers using the msf[read] instruction, where the starting byte number is specified (which must be aligned to 4-byte units), and also the number of 32-bit words to read. The number in the instruction can be either the number of 32-bit words, or the number of 32-bit word pairs, using the single- and doubleinstruction modifiers, respectively. The data is pushed to the Microengine on the S_Push_Bus by RBUF control logic: msf[read, $s_xfer_reg, src_op_1, src_op_2, ref_cnt], optional_token Hardware Reference Manual 249 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The src_op_1 and src_op_2 operands are added together to form the address in RBUF (note that the base address of the RBUF is 0x2000). The ref_cnt operand is the number of 32-bit words or word pairs, that are pushed into two sequential S_TRANSFER_IN registers, starting with $s_xfer_reg. Using the data in RBUF in Table 87 above, reading eight bytes from offset 0 into transfer registers 0 and 1 would yield the result in Example 34. Example 34. Data from RBUF Moved to Microengine Transfer Registers Transfer Register Number Bit Number within Transfer Register 31 24 23 16 15 8 7 0 0 0 1 2 3 1 4 5 6 7 Microengine can move data from RBUF to DRAM using the instruction: dram[rbuf_rd, --, src_op1, src_op2, ref_cnt], indirect_ref The src_op_1 and src_op_2 operands are added together to form the address in DRAM, so the dram instruction must use the indirect_ref modifier to specify the RBUF address (refer to the IXP2800 Network Processor chassis chapter for details). The ref_cnt operand is the number of 64-bit words that are read from RBUF. Using the data in RBUF in Table 87 above, reading 16 bytes from offset 0 in RBUF into DRAM would yield the result in Example 35 in DRAM (addresses in DRAM must be aligned to 8-byte units. The data from lower-offset RBUF offsets goes into lower addresses in DRAM.) Example 35. Data from RBUF Moved to DRAM 63 56 55 48 47 40 39 32 31 24 23 16 15 8 7 0 4 5 6 7 0 1 2 3 C D E F 8 9 A B For both types of RBUF read, reading an element does not modify any RBUF data, and does not free the element, so buffered data can be read as many times as desired. 8.2.2.1 SPI-4 SPI-4 data is placed into RBUF as follows: • At chip reset all elements are marked invalid (available). • When a SPI-4 Control Word is received (i.e., when RCTL is asserted) it is placed in a temporary holding register. The Checksum accumulator is cleared. The subsequent action is based on the Type field. — If Type is Idle or Training, the Control Word is discarded. — If Type is not Idle or Training: An available RBUF element is allocated by receive control logic.(If there is no available element, the data is discarded and MSF_Interrupt_Status[RBUF_Overflow is set.) Note that this normally should not happen because, when the number of RBUF elements falls below a programmed limit, the flow control status is sent back to the PHY device (refer to 250 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Section 8.2.7.1). The SPI-4 Control Word Type, EOPS, SOP, and ADR fields are placed into a temporary status register. The Byte_Count field of the element status is set to 0x0. As each Data Word is received, the data is written into the element, starting at offset 0x0 in the element, and Byte_Count is updated. Subsequent Data transfers are placed at higher offsets (0x2, 0x4, etc.). The 16-bit Checksum Accumulator is also updated with the 1’scomplement addition of each byte pair. (Note that, if the data transfer has an odd number of bytes, a byte of zeros is appended as the more significant byte, before the checksum addition is done.) • If a Control Word is received before the element is full — the element is marked valid. EOP for the element is taken from the value of the EOPS field (see Table 83) from the just-received Control Word. If the EOPS field from the just-received Control Word indicates that EOP is asserted, then the Byte_Count for the element is decremented by 0 or 1, according to the EOPS field (i.e., decrement by 0 if two bytes are valid, and by 1 if one byte is valid). If the EOPS field indicates Abort, Byte_Count is rounded up to the next multiple of 4. The temporary status register value is put into Full_Element_List. • If the element becomes full before receipt of another Control Word — the element is marked as pre-valid. The eventual status is based on the next SPI-4 transfer(s). • If the next transfer is a Data Word — the previous element is changed from pre-valid to valid. The EOP for the element is 0. The temporary status register value is put into Full_Element_List. Another available RBUF element is allocated, and the new data is written into it. The temporary status for the new element gets the same ADR field of the previous element, and SOP is set to 0. The Status word Byte_Count field is set to 0x2, and will be incremented as more Data Words arrive. The Checksum Accumulator is cleared. • If the next transfer is a Control Word — the previous element is changed from pre-valid to valid. EOP for the element is taken from the value of the EOPS field from the just-received Control Word. If the EOPS field from the just-received Control Word indicates that EOP is asserted, then the Byte_Count for the element is decremented by 0 or 1, according to the EOPS field (i.e., decrement by 0 if two bytes valid, and by 1 if one byte is valid). The temporary status register value is put into Full_Element_List. Data received from the bus is placed into the element lowest offset first, in big-endian order (i.e., with the first byte received in the most significant byte of the 32-bit word, etc.). Hardware Reference Manual 251 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The status contains the following information: 2 3 2 2 Element 6 2 6 1 6 0 5 9 5 8 2 1 2 0 1 9 1 8 1 7 1 6 Byte Count 5 7 5 6 5 5 5 4 5 3 5 2 5 1 5 0 4 9 4 8 1 5 1 4 1 3 1 2 4 7 1 1 1 0 4 6 4 5 4 4 9 8 Null 2 4 Type 2 5 Par Err 2 6 Abort Err 2 7 Len Err RPROT 6 3 2 8 Err 2 9 EOP 3 0 SOP 3 1 4 3 4 2 4 1 4 0 Reserved 7 6 5 4 3 2 1 0 3 4 3 3 3 2 ADR 3 9 3 8 3 7 3 6 3 5 Checksum The definitions of the fields are shown in Table 90. Table 90. RBUF SPIF-4 Status Definition Field 252 Definition RPROT This bit is a 0, indicating that the Status is for SPI-4. It is derived from the RPROT input signal. Element The element number in the RBUF that holds the data. This is equal to the offset in RBUF of the first byte in the element, shifted right by six places Byte_Count Indicates the number of Data bytes, from 1 to 256, in the element (value 0x00 means 256). This field is derived from the number of data transfers that fill the element, and also the EOPS field of the Control Word that most recently succeeded the data transfer. SOP Indicates whether the element is the start of a packet. This field is taken from the SOP field of the Control Word that most recently preceded the data transfer for the first element allocated after a Control Word. For subsequent elements (i.e., if more than one element worth of data follow the Control Word) this value is 0. EOP Indicates whether the element is the end of a packet. This field is taken from the EOPS field of the Control Word that most recently succeeded the data transfer. Err Error. This is the logical OR of Par Err, Len Err, and Abort Err. Len Err A non-EOP burst occurred that was not a multiple of 16 bytes. Par Err Parity Error was detected in the DIP-4 parity field. See the description in Section 8.2.8.1. Abort Err An EOP with Abort was received on bits [14:13] of the Control Word that most recently succeeded the data transfer. Null Null receive. If this bit is set, it means that the Rx_Thread_Freelist timeout expired before any more data was received, and that a null Receive Status Word is being pushed, to keep the receive pipeline flowing. The rest of the fields in the Receive Status Word must be ignored; there is no data or RBUF entry associated with a null Receive Status Word. Type This field is taken from the Type field of the Control Word that most recently preceded the data transfer. ADR The port number to which the data is directed. This field is taken from the ADR field of the Control Word that most recently preceded the data transfer. Checksum Checksum calculated over the Data Words in the element. This can be used for TCP. Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2.2.2 CSIX CSIX CFrames are placed into either RBUF or FCEFIFO as follows: At chip reset, all RBUF elements are marked invalid (available) and FCEFIFO is empty. When a Base Header is sent (i.e., when RxSof is asserted) it is placed in a temporary holding register. The Ready Field is extracted and held to be put into FC_Egress_Status CSR when (and if) the entire CFrame is received without error. The Type field is extracted and used to index into CSIX_Type_Map CSR to determine one of four actions. • • • • Note: Discard (except for the Ready Field as described in Section 8.2.7.2.1). Place into RBUF Control CFrame partition. Place into RBUF Data CFrame partition. Place into FCEFIFO. Normally Idle CFrames (Type 0x0) will be discarded, Command and Status CFrames (Type 0x7) will be placed into Control Partition, Flow Control CFrames (Type 0x6) will be placed into FCEFIFO, and all others will be placed into Data Partition (see Table 87). The remapping done through the CSIX_Type_Map CSR allows for more flexibility in usage, if desired. If the action is Discard, the CFrame is discarded (except for the Ready Field as described in Section 8.2.7.2.1). The Base Header, as well as Extension Header and Payload (if any) are discarded. If the destination is FCEFIFO: The Payload is placed into the FCEFIFO, to be sent to the Ingress IXP2800 Network Processor over the TXCDAT pins. If there is not enough room in FCEFIFO for the entire CFrame, based on the Payload Size in the Base Header, the entire CFrame is discarded and MSF_Interrupt_Status[FCEFIFO_Overflow] is set. If the destination is RBUF (either Control or Data): An available RBUF element of the corresponding type is allocated by receive control logic. If there is not an available element, the CFrame is discarded and MSF_Interrupt_Status[RBUF_Overflow] is set. Note that this normally should not happen because, when the number of RBUF elements falls below a programmed limit, backpressure is sent to the Switch Fabric. (Refer to Section 8.2.7.2.) The Type, Payload Length, CR (CSIX Reserved), and P (Private) bits, and (subsequently arriving) Extension Header are placed into a temporary status register. As the Payload (including padding if any) is received, it is placed into the allocated RBUF element, starting at offset 0x0. (Note that it is more exact to state that the first four bytes after the Base Header are placed into the status register as Extension Header. For Flow Control CFrames, there is no Extension Header; the first four bytes are part of the Payload. They would be found in the Extension Header field of the Status — no bytes are lost.) When all of the Payload data (including padding if any), as indicated by the Payload Length field, and Vertical Parity has been received, the element is marked valid. If another RxSof is received prior to receiving the entire Payload, the element is also marked valid, and the Length Error status bit is set. If the Payload Length field of the Base Header is greater than the element size (as configured in MSF_Rx_Control[RBUF_Element_Size], then the Length Error bit in the status will be set, and all payload bytes above the element size will be discarded. The temporary status register value is put into Full_Element_List. Hardware Reference Manual 253 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Note: In CSIX protocol, an RBUF element is allocated only on RxSof assertion. Therefore, the element size must be programmed based on the Switch Fabric usage. For example, if the switch never sends a payload greater than 128 bytes, then 128-byte elements can be selected. Otherwise, 256-byte elements must be selected. Data received from the bus is placed into the element lowest-offset first in big-endian order (that is, with the first byte received in the most significant byte of the 32-bit word, etc.). The status contains the following information: 2 6 2 5 2 4 2 3 2 2 6 1 6 0 5 9 5 8 1 9 1 8 1 7 1 6 Payload Length 5 7 5 6 5 5 5 4 5 3 5 2 5 1 5 0 4 9 4 8 1 5 1 4 1 3 1 2 1 1 1 0 9 4 4 4 3 4 2 4 1 P 6 2 2 0 Err Element 2 1 Null 2 7 CR RPROT 6 3 2 8 VP Err 2 9 HP Err 3 0 Len Err 3 1 4 7 4 6 4 5 8 7 6 5 4 3 Reserved 4 0 3 9 3 8 3 7 2 1 0 Type 3 6 3 5 3 4 3 3 3 2 Extension Header The definitions of the fields are shown in Table 91. Table 91. RBUF CSIX Status Definition Field Definition RPROT This bit is a 1, indicating that the Status is for CSIX-L1. It is derived from the RPROT input signal. Element The element number in the RBUF that holds the data. This is equal to the offset in RBUF of the first byte in the element, shifted right by six places. Payload Length Payload Length Field from the CSIX Base Header. A value of 0x0 indicates 256 bytes. CR CR (CSIX Reserved) bit from the CSIX Base Header. P P (Private) bit from the CSIX Base Header. Err Error. This is the logical OR of VP Err, HP Err, and Len Err. Length Error; either Len Err amount of Payload received (before receipt of next Base Header) did not match value indicated in Base Header Payload Length field) or Payload Length field was greater than size of RBUF element. 254 HP Err Horizontal Parity Error was detected on the CFrame. See description in Section 8.2.8.2.1. VP Err Vertical Parity Error was detected on the CFrame. See description in Section 8.2.8.2.2. Null Null receive. If this bit is set, it means that the Rx_Thread_Freelist timeout expired before any more data was received, and that a null Receive Status Word is being pushed, to keep the receive pipeline flowing. The rest of the fields in the Receive Status Word must be ignored; there is no data or RBUF entry associated with a null Receive Status Word. Type Type Field from the CSIX Base Header. Extension Header The Extension Header from the CFrame. The bytes are received in big-endian order; byte 0 is in bits 63:56, byte 1 is in bits 55:48, byte 2 is in bits 47:40, and byte 3 is in bits 39:32. Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2.3 Full Element List Receive control hardware maintains the Full Element List to hold the status of valid RBUF elements, in the order in which they were received. When an element is marked valid (as described in Section 8.2.2.1 for SPI-4 and Section 8.2.2.2 for CSIX), its status is added to the tail of the Full Element List. When a Microengine is notified of element arrival (by having the status written to its S_Transfer register; see Section 8.2.4), it is removed from the head of the Full Element List. 8.2.4 Rx_Thread_Freelist_# Each Rx_Thread_Freelist_# is a FIFO that indicates Microengine Contexts that are awaiting an RBUF element to process. This allows the Contexts to indicate their ready-status prior to the reception of the data, as a way to eliminate latency. Each entry added to a Freelist also has an associated S_Transfer register and signal number. The receive logic maintains either one, two, or three separate lists based on MSF_Rx_Control[RBUF_Partition], MSF_Rx_Control[CSIX_Freelist], and Rx_Port_Map as shown in Table 92. Table 92. Rx_Thread_Freelist Use Number of Partitions1 Use 1 SPI-4 only 2 CSIX only 3 Both SPI-4 and CSIX Rx_Thread_Freelist_# Used CSIX_Freelist2 0 1 2 n/a SPI-4 Ports equal to or below Rx_Port_Map SPI-4 Ports above Rx_Port_Map Not Used 0 CSIX Data CSIX Control Not Used 1 CSIX Data and CSIX Control Not Used Not Used 0 CSIX Data SPI-4 CSIX Control 1 CSIX Data and CSIX Control SPI-4 Not Used 1. Programmed in MSF_Rx_Control[RBUF_Partition]. 2. Programmed in MSF_Rx_Control[CSIX_Freelist]. To be added as ready to receive an element, an Microengine does an msf[write] or msf[fast_write] to the Rx_Thread_Freelist_# address; the write data is the Microengine/ Context/S_Transfer register number to add to the Freelist. Note that using the data (rather than the command bus ID) permits a Context to add either itself or other Contexts as ready. When there is valid status at the head of the Full Element List, it will be pushed to a Microengine. The receive control logic pushes the status information (which includes the element number) to the Microengine in the head entry of Rx_Thread_Freelist_#, and sends an Event Signal to the Microengine. It then removes that entry from the Rx_Thread_Freelist_#, and removes the status from Full Element List. (Note that this implies the restriction — a Context waiting on status must not read the S_Transfer register until it has been signaled.) See Section 8.2.6 for more information. In the event that Rx_Thread_Freelist_# is empty, the valid status will be held in Full Element List until an entry is put into Rx_Thread_Freelist_#. Hardware Reference Manual 255 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2.5 Rx_Thread_Freelist_Timeout_# Each Rx_Thread_Freelist_# has an associated countdown timer. If the timer expires and no new receive data is available yet, the receive logic will autopush a Null Receive Status Word to the next thread on the Rx_Thread_Freelist_#. A Null Receive Status Word has the “Null” bit set, and does not have any data or RBUF entry associated with it. The Rx_Thread_Freelist_# timer is useful for certain applications. Its primary purpose is to keep the receive processing pipeline (implemented as microcode running on the Microengine) moving even when the line has gone idle. It is especially useful if the pipeline is structured to handle mpackets in groups, i.e., eight mpackets at a time. If seven mpackets are received, the line goes idle, and the timeout triggers the autopush of a null Receive Status Word, filling the eighth slot and allowing the pipeline to advance. Another example is if one valid mpacket is received before the line goes idle for a long period; seven null Receive Status Words will be autopushed, allowing the pipeline to proceed. Typically, the timeout interval is programmed to be slightly larger than the minimum arrival time of the incoming cells or packets. The timer is controlled by using the Rx_Thread_Freelist_Timeout_# CSR. The timer may be enabled or disabled, and the timeout value specified using this CSR. The following rules define the operation of the Rx_Thread_Freelist timer. 1. Writing a non-zero value to the Rx_Thread_Freelist_Timeout_# CSR both resets the timer and enables it. Writing a zero value to this CSR resets the timer and disables it. 2. If the timer is disabled, then only valid (non-null) Receive Status Words are autopushed to the receive threads; null Receive Status Words are never pushed. 3. If the timer expires and the Rx_Thread_Freelist_# is non-empty, but there is no mpacket available, this will trigger the autopush of a null Receive Status Word. 4. If the timer expires and the Rx_Thread_Freelist_# is empty, the timer stays in the EXPIRED state and is not restarted. A null Receive Status Word cannot be autopushed, since the logic has no destination to push anything to. 5. An expired timer is reset and restarted if and only if an autopush, null or non-null, is performed. 6. Whenever there is a choice, the autopush of a non-null Receive Status Word takes precedence over a null Receive Status Word. 8.2.6 Receive Operation Summary During receive processing, received CFrames, cells, and packets (which in this context are all called mpackets) are placed into the RBUF, and then, when marked valid, are immediately handed off to a Microengine for processing. Normally, by application design, some number of Microengine Contexts will be assigned to receive processing. Those Contexts will have their number added to the proper Rx_Thread_Freelist_# (via msf[write]or msf[fast_write]), and then will go to sleep to wait for arrival of an mpacket (or alternatively poll waiting for arrival of an mpacket). 256 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface When an mpacket becomes valid as described in Section 8.2.2.1 for SPI-4 and Section 8.2.2.2 for CSIX, receive control logic will autopush eight bytes of information for the element to the Microengine/Context/S_Transfer registers at the head of Rx_Thread_Freelist_#. The information pushed is (see Table 90 and Table 91 for detailed definitions): • Status Word (SPI-4) or Header Status (CSIX) to Transfer register n (n is the Transfer register programmed to the Rx_Thread _Freelist_#) • Checksum (SPI-4) or Extension Header (CSIX) to Transfer register n+1 To handle the case where the receive Contexts temporarily fall behind and Rx_Thread_Freelist_# is empty, all received element numbers are held in the Full Element List. In that case, as soon as an Rx_Thread_Freelist_# entry is entered, the status of the head element of Full Element List will be pushed to it. The Microengine may read part of (or the entire) RBUF element to their S_Transfer registers (via msf[read] instruction) for header processing, etc., and may also move the element data to DRAM (via dram[rbuf_rd] instruction). When a Context is done with an element, it does an msf[write]or msf[fast_write] to the RBUF_Element_Done address; the write data is the element number. This marks the element as free and available to be re-used. There is no restriction on the order in which elements are freed; Contexts can do different amounts of processing per element based on the contents of the element — therefore, elements can be returned in a different order than they were handed to Contexts. The states that an RBUF element goes through are shown in Figure 92. Figure 92. RBUF Element State Diagram Reset Free. Element is empty and available to be allocated to received information from the rx pins Allocate new element (Done by Rx control logic) Set valid (done by Rx control logic) msf[write]or msf[fast_write]to RBUF_Element_Done Processing. Element status has been pushed to an ME context. ME is processing the data. Allocated. Element is being filled with data from rx pins. Autopush Status to ME Valid. Element has been set valid. Status has not yet been pushed to an ME context. A9340-01 Hardware Reference Manual 257 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 93 summarizes the differences in RBUF operation between the SPI-4 and CSIX protocols. Table 93. Summary of SPI-4 and CSIX RBUF Operations Operation SPI-4 CSIX When is RBUF Element Allocated? Upon receipt of Payload Control Word or when Element data section fills and more Data Words arrive. The Payload Control Word allocates an element for data that will be received subsequent to it. Start of Frame and Base Header Type is mapped to RBUF (in the CSIX_Type_Map CSR). How Much Data is Put into Element? All Data Words received between two Payload Control Words, or number of bytes in the element, whichever is less. Number of bytes specified in Payload Length field of Base Header. How is RBUF Element Set Valid? Upon receipt of Payload Control Word or when Element data section fills. The Payload Control Word validates the element holding data received prior to it. All Payload is received (or if premature SOF, which will set an error bit in Element Status). How is RBUF Element Handed to Microengine? Element Status is pushed to Microengine at the head of the appropriate Rx_Thread_Freelist_# (based on the protocol). Status is pushed to two consecutive Transfer registers; bits[31:0] of Element Status to the first Transfer register and bits[63:32] to the next higher numbered Transfer register. How is RBUF Element returned to free list? CSR write to RBUF_Element_Done. 8.2.7 Receive Flow Control Status Flow control is handled in hardware. There are specific functions for SPI-4 and CSIX. 8.2.7.1 SPI-4 SPI-4, FIFO status information is sent periodically over the RSTAT signals from the Link Layer device (which is the IXP2800 Network Processor) to the PHY device. (Note that TXCDAT pins can act as RSTAT based on the MSF_Rx_Control[RSTAT_Select] bit.) The information to be sent is based on the number of RBUF elements available to receive SPI-4. The FIFO status of each port is encoded in a 2-bit data structure — code 0x3 is used for framing the data, and the other three codes are valid status values. The FIFO status words are sent according to a repeating calendar sequence. Each sequence begins with the framing code to indicate the start of a sequence, followed by the status codes, followed by a parity code covering the preceding frame. The length of the calendar is defined in Rx_Calendar_Length, which is a CSR field that is initialized with the length of the calendar, since in many cases fewer than 256 ports are in use. When TRAIN_DATA[RSTAT_En] is disabled, RSTAT is held at 0x3. The IXP2800 Network Processor transmits FIFO status only if TRAIN_DATA[RSTAT_En] is set. The logic sends “Satisfied,” Hungry,” or “Starving” based on either the upper limit of the RBUF, a global override value set in MSF_Rx_Control[RSTAT_OV_VALUE], or a port-specific override value set in RX_PORT_CALENDAR_STATUS_#. The choice is controlled by MSF_RX_CONTROL[RX_Calendar_Mode]. When set to Conservative_Value, the status value sent for each port is the most conservative of: • The RBUF upper limit • MSF_RX_CONTROL[RSTAT_OV_VALUE] • RX_PORT_CALENDAR_STATUS_# “Satisfied” is more conservative than “Hungry,” which is more conservative than “Starving.” 258 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface When MSF_RX_CONTROL[RX_Calendar_Mode] is set to Force_Override, the value of RX_PORT_CALENDAR_STATUS_# is used to determine which status value is sent. If RX_PORT_CALENDAR_STATUS_# is set to 0x3, then the global status value set in MSF_RX_CONTROL[RSTAT_OV_VALUE] is sent; otherwise, the port-specific status value set in RX_PORT_CALENDAR_STATUS_# is sent. The RBUF upper limit is based on the MSF_RX_CONTROL register and is defined in Table 89. The upper limit is programmed in HWM_Control[RBUF_S_HWM]. Note that either RBUF partition 0 or partition 1 will be used for SPI-4 (Table 88). 8.2.7.2 CSIX There are two types of CSIX flow control: • Link-level • Virtual Output Queue (VOQ) Information received from the Switch Fabric by the Egress IXP2800 Network Processor, must be communicated to the Ingress IXP2800 Network Processor, which is sending data to the Switch Fabric. 8.2.7.2.1 Link-Level Link-level flow control can be used to stop all transmission. Separate Link-level flow control is provided for Data CFrames and Control CFrames. CSIX protocol provides link-level flow control as follows. Every CFrame Base Header contains a Ready Field, which contains two bits; one for Control traffic (bit 6 of byte 1) and one for Data traffic (bit 7 of byte 1). The CSIX requirement for response is: From the tick that the Ready Field leaves a component the maximum response time for a pause operation is defined as: n*T, n=C+L where: • T is the clock period of the interface • n is the maximum number of ticks for the response • C is a constant for propagating the field within the “other” component (or chipset as the case may be) to the interface logic controlthe reverse direction data flow. C is defined to be 32 ticks. • L is the maximum number of ticks to transport the maximum fabric CFrame size. As each CFrame is received, the value of these bits is copied (by receive hardware) into the FC_Egress_Status[SF_CReady] and FC_Egress_Status[SF_DReady] respectively. The value of these two bits is sent from the Egress to the Ingress IXP2800 Network Processor on the TXCSRB signal, and can be used to stop transmission to the Switch Fabric, as described in Section 8.3.4.2. The TXCSRB signal is described in Section 8.5.1. Hardware Reference Manual 259 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2.7.2.2 Virtual Output Queue CSIX protocol provides Virtual Output Queue Flow Control via Flow Control CFrames. CFrames that were mapped to FCEFIFO (via the CSIX_Type_Map CSR) are parsed by the receive control logic and placed into FCEFIFO, which provides buffering while they are sent from the Egress IXP2800 Network Processor to the Ingress IXP2800 Network Processor over the TXCDAT signals (normally Flow Control CFrames would be mapped to FCEFIFO). The entire CFrame is sent over TXCDAT, including the Base Header and Vertical Parity field. The 32-bit CWord is sent four bits at a time, most significant bits first. The CFrames are forwarded in a “cut-through” manner, meaning that the Egress IXP2800 Network Processor does not wait for the entire CFrame to be received before forwarding (each CWord can be forwarded as it is received). If FCEFIFO gets full, as defined by HWM_Control[FCEFIFO_HWM], then the FC_Egress_Status[TM_CReady] bit will be deasserted (to inform the Ingress IXP2800 Network Processor to deassert Control Ready in CFrames sent to the Switch Fabric). Section 8.3.4.2 describes how Flow Control information is used in the Ingress IXP2800 Network Processor. 8.2.8 Parity 8.2.8.1 SPI-4 The receive logic computes 4-bit Diagonal Interleaved Parity (DIP-4) as specified in the SPI-4 specification. The DIP-4 field received in a control word contains odd parity computed over the current Control Word and the immediately preceding data words (if any) following the last Control Word. Figure 93 shows the extent of the DIP-4 codes. Figure 93. Extent of DIP-4 Codes Payload Control Control Control Payload Control DIP-4 Extent (between arrows) A9342-01 There is a DIP-4 Error Flag and a 4-bit DIP-4 Accumulator register. After each Control Word is received, the Flag is conditionally reset (see Note below this paragraph) and the Accumulator register is cleared. As each Data Word (if any), and the first succeeding Control Word is received, DIP-4 parity is accumulated in the register, as defined in the SPI-4 spec. The accumulated parity is compared to the value received in the DIP-4 field of that first Control Word. If it does not match, the DIP-4 Error Flag is set. The value of the flag becomes the element status Par Err bit. Note: 260 An error in the DIP-4 code invalidates the transfers before and after the Control Word, since the control information is assumed to be in error. Therefore the DIP-4 Error Flag is not reset after a Control Word with bad DIP-4 parity. It is only reset after a Control Word with correct DIP-4 parity. Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.2.8.2 8.2.8.2.1 CSIX Horizontal Parity The receive logic computes Horizontal Parity on each 16 bits of each received Cword (there is a separate parity for data received on rising and falling edge of the clock). There is an internal HP Error Flag. At the end of each CFrame, the flag is reset. As each 16 bits of each Cword is received, the expected odd-parity value is computed from the data, and compared to the value received on RxPar. If there is a mismatch, the flag is set. The value of the flag becomes the element status HP Err bit. If the HP Error Flag is set: • the FC_Egress_Status[SF_CReady] and FC_Egress_Status[SF_DReady] bits are cleared • the MSF_Interrupt_Status[HP_Error] bit is set (which can interrupt the Intel XScale® core if enabled) 8.2.8.2.2 Vertical Parity The receive logic computes Vertical Parity on CFrames. There is a VP Error Flag and a 16-bit VP Accumulator register. At the end of each CFrame, the flag is reset and the register is cleared. As each Cword is received, odd parity is accumulated in the register as defined in the CSIX specification (16 bits of vertical parity are formed on 32 bits of received data by treating the data as words; i.e., bit 0 and bit 16 of the data are accumulated into parity bit 0, bit 1, and bit 17 of the data are accumulated into parity bit 1, etc.). After the entire CFrame has been received (including the Vertical Parity field; the two bytes following the Payload) the accumulated value should be 0xFFFF. If it is not, the VP Error Flag is set. The value of the flag becomes the element status VP Err bit. Note: The Vertical Parity always follows the Payload, which may include padding to the CWord width if the Payload Length field is not an integral number of CWords. The CWord width is programmed in MSF_Rx_Control[Rx_CWord_Size]. If the VP Error Flag is set: • the FC_Egress_Status[SF_CReady] and FC_Egress_Status[SF_DReady] bits are cleared • the MSF_Interrupt_Status[VP_Error] bit is set (which can interrupt the Intel XScale® core) 8.2.9 Error Cases Receive errors are specific to the protocol, SPI-4 or CSIX. The element status, described in Table 90 and Table 91, has appropriate error bits defined. Also, there are some IXP2800 Network Processor specific error cases — for example, when an mpacket arrives with no free elements — that are logged in the MSF_Interrupt_Status register, which can interrupt the Intel XScale® core if enabled. Hardware Reference Manual 261 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3 Transmit The transmit section consists of: • Transmit Pins (Section 8.3.1) • Transmit Buffer (Section 8.3.2) • Byte Aligner (Section 8.3.2) Each of these is described below. Figure 94 is a simplified block diagram of the MSF transmit block. S_Pull_Data (32-bits from ME) - D_Push_Data (64-bits from DRAM) TBUF - - - - - - - - - - - - - SPI-4 Protocol Logic - CSIX Protocol Logic Byte Align Figure 94. Simplified Transmit Section Block Diagram TDAT TCTL TPAR Control Valid Element Logic ME Reads (S_Push_Bus) From Other CSRs TCLK TCLK REF - RXCSRB (Ready Bits) Internal Clock RXCDAT RXCFC (FCIFIFO full) 8.3.1 Internal Clock for Transmit Logic FCIFIFO - - - - - - - - - - - - - - - - - A9343-01 Transmit Pins The use of the transmit pins is a function of the protocol (which is determined by TBUF partition in MSF_Tx_Control CSR) as shown in Table 94. Table 94. Transmit Pins Usage by Protocol (Sheet 1 of 2) Name TCLK 262 Direction Output SPI-4 Use CSIX Use TDCLK RxClk TDAT[15:0] Output TDAT[15:0] RxData[15:0] TCTL Output TCTL RxSOF Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 94. Transmit Pins Usage by Protocol (Sheet 2 of 2) Name 8.3.2 Direction SPI-4 Use CSIX Use TPAR Output Not Used RTxPar TSCLK Input TSCLK Not Used TSTAT[1:0] Input TSTAT[1:0] Not Used TBUF The TBUF is a RAM that holds data and status to be transmitted. The data is written into subblocks referred to as elements, by Microengine or the Intel XScale® core. TBUF contains a total of 8 Kbytes of data, and associated control. Table 95 shows the order in which data is written into TBUF. Each number represents a byte, in order of transmission onto the tx interface. Note that this is reversed on a 32-bit basis relative to RBUF — the swap of 4 low bytes and 4 high bytes is done in hardware to facilitate the transmission of bytes. Table 95. Order in which Data is Transmitted from TBUF Data/Payload 0 1 2 3 4 Address Offset (Hex) 5 6 7 0 8 9 A B C D E F 8 10 11 12 13 14 15 16 17 10 The mapping of elements to address offset in TBUF is based on the TBUF partition and element size, as programmed in MSF_Tx_Control CSR. TBUF can be partitioned into one, two, or three partitions based on MSF_Tx_Control[TBUF_Partition]. The mapping of partitions to transmit data is shown in Table 96. Table 96. Mapping of TBUF Partitions to Transmit Protocol Data Use by Partition, Fraction of TBUF Used, Start Byte Offset (Hex) Number of Partitions in Use Transmit Data Protocol Partition Number 0 1 2 n/a n/a SPI-4 1 SPI-4 only All Byte 0 CSIX Data 2 3 CSIX only Both SPI-4 and CSIX CSIX Control 3/4 of TBUF 1/4 of TBUF Byte 0 Byte 0x1800 n/a CSIX Data SPI-4 1/2 of TBUF 3/8 of TBUF 1/8 of TBUF Byte 0 Byte 0x1000 Byte 0x1C00 CSIX Control The data in each segment is further broken up into elements, based on MSF_Tx_Control[TBUF_Element_Size_#] (n = 0,1,2). There are three choices of element size: 64, 128, or 256 bytes. Hardware Reference Manual 263 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 97 shows the TBUF partition options. Note that the choice of element size is independent for each partition. Table 97. Number of Elements per TBUF Partition Partition Number TBUF_Partition Field TBUF_Element_Size_# Field 0 00 (1 partition) 01 (2 partitions) 10 (3 partitions) 1 2 Unused Unused 00 (64 bytes) 128 01 (128 bytes) 64 10 (256 bytes) 32 00 (64 bytes) 96 32 01 (128 bytes) 48 16 Unused 10 (256 bytes 24 8 00 (64 bytes) 64 48 16 01 (128 bytes) 32 24 8 10 (256 bytes) 16 12 4 The Microengine can write data from Microengine S_TRANSFER_OUT registers to the TBUF using the msf[write] instruction, where they specify the starting byte number (which must be aligned to four bytes), and number of 32-bit words to write. The number in the instruction can be either the number of 32-bit words, or number of 32-bit word pairs, using the single and double instruction modifiers, respectively. Data is pulled from the Microengine to TBUF via S_Pull_Bus. msf[write, $s_xfer_reg, src_op_1, src_op_2, ref_cnt], optional_token The src_op_1 and src_op_2 operands are added together to form the address in TBUF (note that the base address of the TBUF is 0x2000). The ref_cnt operand is the number of 32-bit words or word pairs, which are pulled from sequential S_TRANSFER_OUT registers, starting with $s_xfer_reg. The Microengine can move data from DRAM to TBUF using the instruction dram[tbuf_wr, --, src_op1, src_op2, ref_cnt], indirect_ref The src_op_1 and src_op_2 operands are added together to form the address in DRAM, so the dram instruction must use indirect mode to specify the TBUF address. The ref_cnt operand is the number of 64-bit words that are written into TBUF. Data is stored in big-endian order. The most significant (lowest numbered) byte of each 32-bit word is transmitted first. All elements within a TBUF partition are transmitted in the order. Control information associated with the element (Section 98 and Section 99) defines which bytes are valid. The data from the TBUF will be shifted and byte-aligned to the TDAT pins as required. Four parameters are defined. Prepend Offset — Number of the first byte to send. This is information that is prepended onto the payload, for example as a header. It need not start at offset 0 in the element. Prepend Length — Number of bytes of prepended information. This can be 0 to 31 bytes. If it is 0, then the Prepend Offset must also be 0. 264 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Payload Offset — Number of bytes to skip from the last 64-bit word of the Prepend to the start of Payload. The absolute byte number of the first byte of Payload in the element is: ((Prepend Offset + Prepend Length + 0x7) && 0xF8) + Payload Offset. Payload Length — Number of bytes of Payload. The sum of Prepend Length, Payload length, and any gaps in between them (((prepend_offset + prepend_length + 7) & 0xF8) + payload_offset + payload_length) must be no greater than the number of bytes in the element. Typically, the Prepend is computed by a Microengine and written into the TBUF by msf[write] and the Payload will be written by dram[tbuf_wr]. These two operations can be done in either order; the microcode is responsible for making sure the element is not marked valid to transmit until all data is in the element (see Section 8.3.3). Example 36 illustrates the usage of the parameters. The element in Example 36 is shown as 8 bytes wide because the smallest unit that can be moved into the element is 8 bytes. In Example 36, bytes to be transmitted are shown in black (the offsets are byte numbers); bytes in gray are written into TBUF (because the writes always write 8 bytes), but are not transmitted. Prepend Offset = 6 (bytes 0x0 — 0x5 are not transmitted). Prepend Length = 16 (bytes 0x6 — 0x15 are transmitted). Payload Offset = 7 (bytes 0x16 — 0x1E are not transmitted). The Payload starts in the next 8-byte row (i.e., the next “empty” row above where the Prepend stops), even if there is room in the last row containing Prepend information. This is done because the TBUF does not have byte write capability, and therefore would not merge the msf[write] and dram[tbuf_wr]. The software computing the Payload Offset only needs to know how many bytes of the payload that were put into DRAM need to be removed. Payload Length = 33 (bytes 0x1F through 0x3F are transmitted). Example 36. TBUF Prepend and Payload 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F The transmit logic will send the valid bytes onto TDAT correctly aligned and with no gaps. The protocol transmitted, SPI-4 or CSIX (and the value of the TPROT output) are based on which partition of TBUF the data was placed (see Table 95). Hardware Reference Manual 265 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3.2.1 SPI-4 For SPI-4, data is put into the data portion of the element, and information for the SPI-4 Control Word that will precede the data is put into the Element Control Word. When the Element Control Word is written the information is (the data comes from two consecutive Transfer registers; bits [31:0] from the lower numbered and bits[63:32] from the higher numbered): 2 9 2 8 2 7 2 6 2 5 2 4 2 3 5 9 5 8 5 7 5 6 5 5 5 4 5 3 1 8 1 7 1 6 1 5 5 1 5 0 4 9 4 8 1 3 1 2 1 1 1 0 9 8 4 1 4 0 Payload Offset 4 7 4 4 4 3 4 2 Prepend Length 5 2 1 4 Skip 6 0 1 9 Abort 6 1 2 0 Res 6 2 2 1 Prepend Offset Payload Length 6 3 2 2 EOP 3 0 SOP 3 1 4 6 4 5 7 6 5 4 3 2 1 0 3 4 3 3 3 2 ADR 3 9 3 8 3 7 3 6 3 5 Res The definitions of the fields are shown in Table 98. Table 98. TBUF SPI-4 Control Definition Field Definition Payload Length Indicates the number of Payload bytes, from 1 to 256, in the element. The value of 0x00 means 256 bytes. The sum of Prepend Length and Payload Length will be sent. That value will also control the EOPS field (1 or 2 bytes valid indicated) of the Control Word that will succeed the data transfer. Note 1. Prepend Offset Indicates the first valid byte of Prepend, from 0 to 7, as defined in Section 8.3.2. Prepend Length Indicates the number of bytes in Prepend, from 0 to 31. Payload Offset Indicates the first valid byte of Payload, from 0 to 7, as defined in Section 8.3.2. Skip Allows software to allocate a TBUF element and then not transmit any data from it. 0—transmit data according to other fields of Control Word. 1—free the element without transmitting any data. Abort Indicates if the element is the end of a packet that should be aborted. If this bit is set, the status code of EOP Abort will be sent in the EOPS field of the Control Word that will succeed the data transfer. Note 1. SOP Indicates if the element is the start of a packet. This field will be sent in the SOPC field of the Control Word that will precede the data transfer. EOP Indicates if the element is the end of a packet. This field will be sent in the EOPS field of the Control Word that will succeed the data transfer. Note 1. ADR The port number to which the data is directed. This field will be sent in the ADR field of the Control Word that will precede the data transfer. NOTE: 1. Normally EOPS is sent on the next Control Word (along with ADR and SOP) to start the next element. If there is no valid element pending at the end of sending the data, the transmit logic will insert an Idle Control Word with the EOPS information. 266 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3.2.2 CSIX For CSIX protocol, the TBUF should be set to two partitions in MSF_Tx_Control[TBUF_Partition], one for Data traffic and one for Control traffic. Payload information is put into the Payload area of the element, and Base and Extension Header information is put into the Element Control Word. Data is stored in big-endian order. The most significant byte of each 32-bit word is transmitted first. When the Element Control Word is written the information is (note that the data comes from two consecutive Transfer registers; bits [31:0] from the lower numbered and bits[63:32] from the higher numbered): 2 6 2 5 2 4 2 3 6 2 6 1 6 0 5 9 5 8 2 1 Prepend Offset Payload Length 6 3 2 2 5 7 5 6 5 5 5 4 5 3 2 0 1 9 1 8 1 7 1 6 Prepend Length 5 2 5 1 5 0 4 9 4 8 1 2 1 1 1 0 9 Payload Offset P 2 7 CR 2 8 Res 2 9 Skip 3 0 Res 3 1 1 5 1 4 4 7 4 4 4 3 4 2 4 1 4 0 4 6 1 3 4 5 8 7 6 5 4 3 2 Res 3 9 3 8 3 7 1 0 Type 3 6 3 5 3 4 3 3 3 2 Extension Header The definitions of the fields are shown in Table 99. Table 99. TBUF CSIX Control Definition Field Definition Payload Length Indicates the number of Payload bytes, from 1 to 256, in the element. The value of 0x00 means 256 bytes. The sum of Prepend Length and Payload Length will be sent, and also put into the CSIX Base Header Payload Length field. Note that this length does not include any padding that may be required. Padding is inserted by transmit hardware as needed. Prepend Offset Indicates the first valid byte of Prepend, from 0 to 7, as defined in Section 8.3.2. Prepend Length Indicates the number of bytes in Prepend, from 0 to 31. Payload Offset Indicates the first valid byte of Payload, from 0 to 7, as defined in Section 8.3.2. Skip Allows software to allocate a TBUF element and then not transmit any data from it. 0—transmit data according to other fields of Control Word 1—free the element without transmitting any data. CR CR (CSIX Reserved) bit to put into the CSIX Base Header. P P (Private) bit to put into the CSIX Base Header. Type Type Field to put into the CSIX Base Header. Idle type is not legal here. Extension Header The Extension Header to be sent with the CFrame. The bytes are sent in big-endian order; byte 0 is in bits 63:56, byte 1 is in bits 55:48, byte 2 is in bits 47:40, and byte 3 is in bits 39:32. Hardware Reference Manual 267 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3.3 Transmit Operation Summary During transmit processing data to be transmitted is placed into the TBUF under Microengine control, which allocates an element in software. The transmit hardware processes TBUF elements within a partition, in strict sequential order so the software can track the element to allocate next. Microengines may write directly into an element by the msf[write] instruction, or have data from DRAM written into the element by the dram[tbuf_wr] instruction. Data can be merged into the element by doing both. There is a Transmit Valid bits per element, which marks the element as ready to be transmitted. Microengines move all data into the element, by either or both of the msf[write] and dram[tbuf_wr] instructions to the TBUF. The Microengines also write the element Transmit Control Word with information about the element. The Microengines should use a single operation to perform the TCW write, i.e., a single msf[write] with a ref_count of 2. When all of the data movement is complete, the Microengine sets the element valid bit as shown in the following steps. 1. Move data into TBUF by either or both of msf[write] and dram[tbuf_wr] instructions to the TBUF. 2. Wait for 1 to complete. 3. Write Transmit Control Word at TBUF_Element_Control_# address. Using this address sets the Transmit Valid bit. Note: When moving data from DRAM to TBUF using dram[tbuf_wr], it is possible that there could be an uncorrectable error on the data read from DRAM (if ECC is enabled). In that case, the Microengine does not get an Event Signal, to prevent use of the corrupt data. The error is recorded in the DRAM controller (including the number of the Microengine that issued the TBUF_Wr command — refer to the DRAM chapter for details), and will interrupt the Intel XScale® core, if enabled, so that it can take appropriate action. Such action is beyond the scope of this document. However, it must include recovering the TBUF element by setting it valid with the Skip bit set in the Control Word. The transmit pipeline will be stalled since all TBUF elements must be transmitted in order; it will be un-stalled when the element is skipped. 8.3.3.1 SPI-4 Transmit control logic sends valid elements on the transmit pins in element order. First, a Control Word is sent — it is formed as shown in Table 100. After the Control Word, the data is sent; the number of bytes to send is the total of Element Control Word Prepend Length field plus the Element Control Word Payload Length. Table 100. Transmit SPI-4 Control Word SPI-4 Control Word Field 268 Derived from: Type Type Bit of Element Control Word EOPS EOP Bit, Prepend Length, Payload Length of previous element’s Element Control Word SOP SOP Bit of Element Control Word ADR ADR field of Element Control Word DIP-4 Parity accumulated on previous element’s data and this Control Word Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface If the next sequential element is not valid when its turn comes up: 1. Send an idle Control Word with SOP set to 0, and EOPS set to the values determined from the most recently sent element, ADR field 0x00, correct parity. 2. Until an element becomes valid, send idle Control Words with SOP set to 0, EOPS set to 00, ADR field 0x00, and correct parity. Note: Sequential elements with same ADR are not “merged”, a Control Word is sent for each element. Note: SPI-4 requires that all data transfers, except the last fragment (with EOP), be multiples of 16 bytes. It is up to the software loading the TBUF element to enforce this rule. After an element has been sent on the transmit pins, the valid bit for that element is cleared. The Tx_Sequence register is incremented when the element has been transmitted; by also maintaining a sequence number of elements that have been allocated (in software), the microcode can determine how many elements are in-flight. 8.3.3.2 CSIX Transmit control logic sends valid elements on the transmit pins in element order. Each element sends a single CFrame. First the Base Header is sent — it is formed as shown in Table 101. Next, the Extension Header is sent. Finally, the data is sent; the number of bytes to send is the total of Element Control Word Prepend Length field plus the Element Control Word Payload Length, plus padding to fill the final CWord if required (the CWord Size is programmed in MSF_Tx_Control[Tx_CWord_Size]). Both Horizontal Parity and Vertical Parity are transmitted, as described in Section 8.3.5.2.1 and Section 8.3.5.2.2. Note: When transmitting a Flow Control CFrame, the entire payload must be written into the TBUF entry. The extension header field of the Transmit Control Word is not used for Flow Control CFrames. Table 101. Transmit CSIX Header CSIX Header Field Derived From Type Type field of Element Control Word Data Ready FC_Ingress_Status[TM_DReady] Control Ready FC_Ingress_Status[TM_CReady] Payload Length Element Control Word Prepend Length + Element Control Word Payload Length P P Bit of Element Control Word CR CR Bit of Element Control Word Extension Header Extension Header field of Element Control Word Control elements and Data elements share use of the transmit pins. Each will alternately transmit a valid element, if present. If the next sequential element is not valid when its turn comes up, or if transmission is disabled by FC_Ingress_Status[SF_CReady] or FC_Ingress_Status[SF_DReady], then transmit logic will alternate sending Idle CFrames with Dead Cycles; it will continue to do so until a valid element is ready. Idle CFrames get the value for the Ready Field from FC_Ingress_Status[TM_Cready] and FC_Ingress_Status[TM_DReady], the Payload Length is set to 0. Hardware Reference Manual 269 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Note: A Dead Cycle is any cycle after the end of a CFrame, and prior to the start of another CFrame (i.e., SOF is not asserted). The end of a CFrame is defined as after the Vertical Parity has been transmitted. This in turn is found by counting the Payload Bytes specified in the Base Header and rounding up to CWord size. After an element has been sent on the transmit pins, the valid bit for that element is cleared. The Tx_Sequence register is incremented when the element has been transmitted; by also maintaining a sequence number of elements that have been allocated (in software), the microcode can determine how many elements are in-flight. 8.3.3.3 Transmit Summary The states that a TBUF element goes through (Free, Allocated, Transmitting, and Valid) are shown in Figure 95. Figure 95. TBUF State Diagram Reset Free. Element is empty and available to be allocated to be filled. Allocate new element (Next element is kept by ME software) All data in element transmitted Transmitting. Data in element is being sent out on Tx pins. Allocated. Element is being filled with data under ME control. There is no limit to how many elements may be in this state. Set valid by msf[write] All previous elements transmitted Valid. Element has been set valid by ME code using one of two methods. In this state, it will wait to be transmitted (FIFO order is maintained). A9344-02 8.3.4 Transmit Flow Control Status Transmit Flow Control is handled partly by hardware and partly by software. Information from the Egress IXP2800 Network Processor can be transmitted to the Ingress IXP2800 Network Processor (as described in Section 8.2.7 on Receive Flow Control); how it is used is described in the remainder of this section. 270 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3.4.1 SPI-4 FIFO status information is sent periodically over the TSTAT signals from the PHY to the Link Layer device, which is the IXP2800 Network Processor. (The RXCDAT pins can act as TSTAT based on the MSF_Tx_Control[TSTAT_Select] bit.) The FIFO status of each port is encoded in a 2-bit data structure — code 0x3 is used for framing the data, and the other three codes are valid status values, which are interpreted by Microengine software. The FIFO status words are received according to a repeating calendar sequence. Each sequence begins with the framing code to indicate the start of a sequence, followed by the status codes, followed by a DIP-2 parity code covering the preceding frame. The length of the calendar, as well as the port values, are defined in this section, and shown in Figure 96. Figure 96. Tx Calendar Block Diagram Tx_Calendar_Length 2 Calendar Counter 32 8 Tx Port Status To MSF_Interrupt_Status and MSF_Tx_Control Registers 256 Tx Multiple 16 Port Status Tx_Calendar 256 Frame Pattern Counter Start of Frame Detect CSR Reads CSR Reads Parity TSTAT A9761-02 Tx_Port_Status_# is a register file containing 256 registers, one for each of the SPI-4.2 ports. The port status is updated each time a new calendar status is received for each port, according to the mode programmed in MSF_Tx_Control[Tx_Status_Update_Mode]. The Tx_Port_Status_# register file holds the latest received status for each port, and can be read by CSR reads. There are 16 Tx_Multiple_Port_Status_# registers. Each aggregates the status for each group of 16 ports. These registers provide an alternative method for reading the FIFO status of multiple ports with a single CSR read. For example, Tx_Multiple_Port_Status_0 contains the 2-bit status for ports 0 – 16, and provides the same status as reading the individual registers, Tx_Port_Status_0 through Tx_Port_Status_15. Hardware Reference Manual 271 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The TX_Port_Status_# or the TX_Multiple_Port_Status_# registers must be read by the software to determine the status of each port and send data to them accordingly. The MSF hardware does not check these registers for port status before sending data out to a particular port. The MSF_Tx_Control[Tx_Status_Update_Mode] field is used to select one of two methods for updating the port status. The first method updates the port status with the new status value, regardless of the value received. The second method updates the port status only when a value is received that is equal to or less than the current value. Note: Detailed information about the status update modes is contained in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Reading a port status causes its value to be changed. This provides a way to avoid reading stale status bits. The MSF_Tx_Control[Tx_Status_Read_Mode] field is used to select the method for changing the bits after they are read. Tx_Calendar is a RAM with 256 entries of eight bits each. It is initialized with the calendar information by software (the calendar is a list that indicates the sequence of port status that will be sent — the PHY and the IXP2800 Network Processor must be initialized with the same calendar). Tx_Calendar_Length is a CSR field that is initialized with the length of the calendar, since in many cases, not all 256 entries of Tx_Calendar are used. When the start of a Status frame pattern is detected (by a value of 0x3 on TSTAT) the Calendar Counter is initialized to 0. On each data cycle, the Calendar Counter is used to index into Tx_Calendar to read a port number. The port number is used as an index to Tx_Port_Status, and the information received on TSTAT is put into that location in Tx_Port_Status. The count is incremented each cycle. DIP-2 Parity is also accumulated on TSTAT. At the start of the frame, parity is cleared. When the count reaches Tx_Calendar_Length, the next value on TSTAT is used to compare to the accumulated parity. The control logic then looks for the next frame start. If the received parity does not match the expected value, the MSF_Interrupt_Status[TSTAT_Par_Err] bit is set, which can interrupt the Intel XScale® core if enabled. Note: An internal status flag records whether or not the most recently received DIP-2 was correct. When that flag is set (indicating bad DIP-2 parity) all reads to Tx_Port_Status return a status of “Satisfied” instead of the value in the Tx_Port_Status RAM. The flag is re-loaded at the next parity sample; so the implication is that all ports will return “Satisfied” status for at least one calendar. SPI-4 protocol uses a continuous stream of repeated frame patterns to indicate a disabled status link. The IXP2800 Network Processor flow control status block has a Frame Pattern Counter that counts up each time a frame pattern is received on TSTAT, and is cleared when any other pattern is received. When the Frame Pattern Counter reaches 32, MSF_Interrupt_Status[Detect_No_Calendar] is set and Train_Data[Detect_No_Calendar] is asserted (MSF_Interrupt_Status[Detect_No_Calendar] must be cleared by a write to the MSF_Interrupt_Status register; Train_Data[Detect_No_Calendar] will reflect the current status and will deassert when the frame pattern stops). The transmit logic will generate training sequence on transmit pins while both Train_Data[Detect_No_Calendar] and Train_Data[Train_Enable_TSTAT] are asserted. 272 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3.4.2 CSIX There are two types of CSIX flow control: • Link-level • Virtual Output Queue (VOQ) 8.3.4.2.1 Link-Level The Link-level flow control function is done via hardware and consists of two parts: 1. Enable/disable transmission of valid TBUF elements. 2. Ready field to be sent in CFrames sent to the Switch Fabric. As described in Section 8.2.7, the Ready Field of received CFrames is placed into FC_Egress_Status[SF_CReady] and FC_Egress_Status[SF_DReady]. The value in those bits is sent to the Ingress IXP2800 Network Processor on TXCSRB. In Full Duplex Mode, the information is received on RXCSRB by the Ingress IXP2800 Network Processor and put into FC_Ingress_Status[SF_CReady] and FC_Ingress_Status[SF_DReady]. Those bits allow or stop transmission of Control and Data elements, respectively. When one of those bits transitions from allowing transmission to stopping transmission, the current CFrame in progress (if any) is completed, and the next CFrame of that type is prevented from starting. As described in Section 8.2.7, if the Egress IXP2800 Network Processor RBUF gets near full, or if the Egress IXP2800 Network Processor FCEFIFO gets near full, it will send that information on TXCSRB. Those bits are put into FC_Ingress_Status[TM_CReady] and FC_Ingress_Status[TM_DReady], and are used as the value in CFrame Base Header Control Ready and Data Ready, respectively. 8.3.4.2.2 Virtual Output Queue The Virtual Output Queue flow control function is done by software, with hardware support. As described in Section 8.2.7, the CSIX Flow Control CFrames received on the Egress IXP2800 Network Processor are passed to the Ingress IXP2800 Network Processor over TXCDAT. The information is received on RXCDAT and placed into the FCIFIFO. A Microengine reads that information by msf[read], and uses it to maintain per-VOQ information. The way in which that information is used is application-dependent and is done in software. The hardware mechanism is described in Section 8.5.3. 8.3.5 Parity 8.3.5.1 SPI-4 DIP-4 parity is computed by Transmit hardware placed into the Control Word sent at the beginning of transmission of a TBUF element, and also on Idle Control Words sent when no TBUF element is valid. The value to place into the DIP-4 field is computed on the preceding Data Words (if any), and the current Control Word. Hardware Reference Manual 273 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.3.5.2 CSIX 8.3.5.2.1 Horizontal Parity The transmit logic computes odd Horizontal Parity for each transmitted 16-bits of each Cword, and transmits it on TxPar. 8.3.5.2.2 Vertical Parity The transmit logic computes Vertical Parity on CFrames. There is a 16-bit VP Accumulator register. At the beginning of each CFrame, the register is cleared. As each Cword is transmitted, odd parity is accumulated in the register as defined in the CSIX specification (16 bits of vertical parity are formed on 32 bits of transmitted data by treating the data as words; i.e., bit 0 and bit 16 of the data are accumulated into parity bit 0, bit 1, and bit 17 of the data are accumulated into parity bit 1, etc.). The accumulated value is transmitted in the Cword along with the last byte of Payload and any padding, if required. 8.4 RBUF and TBUF Summary Table 102 summarizes and contrasts the RBUF and TBUF operations. Table 102. Summary of RBUF and TBUF Operations (Sheet 1 of 2) Operation RBUF TBUF SPI-4 Allocate element Hardware allocates an element upon receipt of a non-idle Control Word, or when a previous element becomes full and another Data Word arrives with no intervening Control Word. Any available element in the SPI-4 partition may be allocated, however, elements are guaranteed to be handed to threads in the order in which they arrive. CSIX Hardware allocates an element upon receipt of RxSof asserted. Any available element in the CSIX Control or CSIX Data partition may be allocated (according to the type), however, elements are guaranteed to be handed to threads in the order in which they arrive. SPI-4 Fill element Hardware fills the element with Data Words. CSIX Hardware fills the element with Payload. Microengine allocates an element. Because the elements are transmitted in FIFO order (within each TBUF partition), the Microengine can keep the number of the next element in software. Microcode fills the element from DRAM using the dram[tbuf_wr] instruction and from Microengine registers using msf[write] instruction. SPI-4 Set element valid Set valid by hardware when either it becomes full or when a Control Word is received. CSIX Set valid by hardware when the number of bytes in Payload Length have been received. 274 The element’s Transmit Valid bit is set. This is done by a write to the TBUF_Element_Control_$_# CSR ($is A or B, # is the element number). Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 102. Summary of RBUF and TBUF Operations (Sheet 2 of 2) Operation RBUF Remove data from element Return element to Free List 8.5 TBUF Microcode moves data from the element to DRAM using the dram[rbuf_rd] instruction and to Microengine registers using the msf[read] instruction. Microcode writes to Rx_Element_Done with the number of the element to free. Hardware transmits information from the element to the Tx pins. Transmission of elements is in FIFO order within each partition; that is an element will be transmitted only when all preceding elements in that partition have been transmitted. Choice of element to transmit among partitions is round-robin. Microengine software uses the TX_Sequence_n CSRs to track elements that have been transmitted. CSIX Flow Control Interface This section describes the Flow Control Interface. Section 8.2 and Section 8.3 of this chapter also contain descriptions of how those functions interact with Flow Control. There are two modes — Full Duplex, where flow control information goes from Egress IXP2800 Network Processor to the Ingress IXP2800 Network Processor, and Simplex mode, where the information from the Switch Fabric is sent directly to the Ingress IXP2800 Network Processor, and from the Egress IXP2800 Network Processor to the Switch Fabric. 8.5.1 TXCSRB and RXCSRB Signals TXCSRB and RXCSRB are used only in Full Duplex mode. (See Figure 97.) They send information from the Egress to the Ingress IXP2800 Network Processor for two reasons: 1. Pass the CSIX Ready Field (link-level flow control) from the Switch Fabric to the Ingress IXP2800. The information is used by the Ingress IXP2800’s transmit control logic to stop transmission of CFrames to the Switch Fabric. 2. Set the value of the Ready field sent from the Ingress IXP2800 to the Switch Fabric. This is to inform the Switch Fabric to stop transmitting CFrames to the Egress IXP2800, based on receive buffer resource availability in the Egress IXP2800. Figure 97. CSIX Flow Control Interface — TXCSRB and RXCSRB Ingress Intel® IXP2800 Network Processor msf[read] TBUF FC_Ingress_Status CSR Egress Intel IXP2800 Network Processor msf[read] FC_Egress_Status CSR TDAT Link Level Flow Control RXCSRB Switch Fabric TXCSRB RDAT A9762-01 Hardware Reference Manual 275 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The information transmitted on TXCSRB can be read in FC_Egress_Status CSR, and the information received on RXCSRB can be read in FC_Ingress_Status CSR. The TXCSRB or RXCSRB signals carry the Ready information in a serial stream. Four bits of data are carried in 10 clock phases, LSB first, as shown in Table 103. Table 103. SRB Definition by Clock Phase Number Clock Cycle Number 0–5 6 7 Description Source of bit on Egress IXP2800 Network Processor (TXCSRB) Framing information. Data is 000001; this pattern allows the Ingress IXP2800 Network Processor to get synchronized to the serial stream regardless of the data values. Most recently received Control Ready from a CFrame Base Header. Also visible in FC_Egress_Status[SF_CReady]. Most recently received Data Ready from a CFrame Base Header. Also visible in FC_Egress_Status[SF_DReady] RBUF or FCEFIFO are above high water mark. 8 9 Use of bit on Ingress IXP2800 Network Processor (RXCSRB) Also visible in FC_Egress_Status[TM_CReady]. RBUF is above high water mark. Also visible in FC_Egress_Status[TM_DReady]. When 0—Stop sending Control CFrames to the Switch Fabric. When 1—OK to send Control CFrames to the Switch Fabric. Also visible in FC_Ingress_Status[SF_CReady]. When 0—Stop sending Data CFrames to the Switch Fabric. When 1—OK to send Data CFrames to the Switch Fabric. Also visible in FC_Ingress_Status[SF_DReady]. Place this bit in the Control Ready bit of all outgoing CSIX Base Headers. Also visible in FC_Ingress_Status[TM_CReady]. Place this bit in the Data Ready bit of all outgoing CSIX Base Headers. Also visible in FC_Ingress_Status[TM_DReady]. The Transmit Data Ready bit sent from Egress to Ingress IXP2800 Network Processor will be deasserted if the following condition is met. • RBUF CSIX Data partition is full, based on HWM_Control[RBUF_D_HWM]. The Transmit Control Ready bit sent from the Egress to the Ingress IXP2800 Network Processor will be deasserted if either of the following conditions is met. • RBUF CSIX Control partition is full, based on HWM_Control[RBUF_C_HWM]. • FCEFIFO full, based on HWM_Control[FCEFIFO_HWM]. 8.5.2 FCIFIFO and FCEFIFO Buffers FCIFIFO and FCEFIFO are 1-Kbyte (256 entry x 32-bit) buffers for the flow control information. FCEFIFO holds data while it is being transmitted off of the Egress IXP2800 Network Processor. FCIFIFO holds data received into the Ingress IXP2800 Network Processor until Microengines can read it. There are two usage models for the FIFOs — Full Duplex Mode and Simplex Mode, selected by MSF_Rx_Control[Duplex_Mode]. 276 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.5.2.1 Full Duplex CSIX In Full Duplex Mode, the information from the Switch Fabric is sent to the Egress IXP2800 Network Processor and must be communicated to the Ingress IXP2800 Network Processor via TXCSRB or RXCSRB. CSIX CFrames received from the Switch Fabric on the Egress IXP2800 Network Processor are put into FCEFIFO, based on the mapping in the CSIX_Type_Map CSR (normally they will be the Flow Control CFrames). The entire CFrame is put in, including the Base Header and Vertical Parity field. The CFrames are forwarded in a “cut-through” manner, meaning the Egress IXP2800 Network Processor does not wait for the entire CFrame to be received before forwarding. The Egress processor will corrupt the Vertical Parity of the CFrame being forwarded if either a Horizontal or Vertical Parity is detected during receive, to inform the Ingress processor that an error occured.The Ingress IXP2800 Network Processor checks both Horizontal Parity and Vertical Parity and will discard the entire CFrame if bad parity is detected. The signal protocol details of how the information is sent from the Egress IXP2800 Network Processor to the Ingress IXP2800 Network Processor is described in Section 8.5.3. (See Figure 98.) Figure 98. CSIX Flow Control Interface — FCIFIFO and FCEFIFO in Full Duplex Mode Ingress Intel® IXP2800 Network Processor msf[read] TDAT FCI_Not_Empty To MEs Switch Fabric FCI_Full FCIFIFO RXCSRB TXCSRB Egress Intel® IXP2800 Network Processor RXCFC TXCFC RXCDAT, RXCPAR, RXCSOF TXCDAT, TXCPAR, TXCSOF FCEFIFO MSF_Rx_Control[Duplex_Mode] From MEs RDAT A9763-01 The Ingress IXP2800 Network Processor puts the CFrames into the FCIFIFO, including the Base Header and Vertical Parity fields. It does not make a CFrame visible in the FCIFIFO until the entire CFrame has been received without errors. If there is an error, the entire CFrame is discarded and MSF_Interrupt_Status[FCIFIFO_Error] is set. CFrames in the FCIFIFO of the Ingress IXP2800 Network Processor are read by Microengines, which use them to keep current VOQ Flow Control information. (The application software determines how and where that information is stored and used.) Hardware Reference Manual 277 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The FCIFIFO supplies two signals to Microengines, which can be tested using the BR_STATE instruction: 1. FCI_Not_Empty — indicates that there is at least one CWord in the FCIFIFO. This signal stays asserted until all CWords have been read. (Note that when FCIFIFO is empty, this signal will not assert until a full CFrame has been received into FCIFIFO; as that CFrame is removed by the Microengine, this signal will stay asserted until all CWords have been removed, including any subsequently received CFrames.) 2. FCI_Full — indicates that FCIFIFO is above the upper limit defined in HWM_Control[FCIFIFO_Int_HWM]. The Microengine that has been assigned to handle FCIFIFO must read the CFrame, 32 bits at a time, from the FCIFIFO by using the msf[read] instruction to the FCIFIFO address; the length of the read can be anywhere from 1 to 16. The FCIFIFO handler thread must examine the Base Header to determine how long the CFrame is and perform the necessary number of reads from the FCIFIFO to dequeue the entire CFrame. If a read is issued to FCIFIFO when it is empty, an Idle CFrame will be read back (0x0000FFFF). Note that when FCIFIFO is receiving a CFrame, it does not make it visible until the entire CFrame has been received without errors. The nearly-full signal is based on the upper limit programmed into HWM_Control[FCIFIFO_Int_HWM]. When asserted, this means that higher priority needs to be given to draining the FCIFIFO to prevent flow control from being asserted to the Egress IXP2800 Network Processor (by assertion of RXCFC). 8.5.2.2 Simplex CSIX In Simplex Mode, the Flow Control signals are connected directly to the Switch Fabric; flow control information is sent directly from the Egress IXP2800 Network Processor to the Switch Fabric, and directly from the Switch Fabric to the Ingress IXP2800 Network Processor. (See Figure 99.) Figure 99. CSIX Flow Control Interface — FCIFIFO and FCEFIFO in Simplex Mode Ingress Intel® IXP2800 Network Processor msf[read] TDAT FCI_Not_Empty To MEs Switch Fabric FCI_Full FCIFIFO RXCSRB TXCSRB Egress Intel® IXP2800 Network Processor RXCFC TXCFC RXCDAT, RXCPAR, RXCSOF TXCDAT, TXCPAR, TXCSOF FCEFIFO MSF_Rx_Control[Duplex_Mode] From MEs RDAT A9764-01 278 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface The TXCSRB and RXCSRB pins are not used in Simplex Mode. The RXCFC and TXCFC pins are used for flow control in both Simplex and Duplex Modes. The Egress IXP2800 Network Processor uses the TXCSOF, TXCDAT, and TXCPAR pins to send CFrames to the Switch Fabric. The Ingress IXP2800 Network Processor uses the RXCSOF, RXCDAT, and RXCPAR pins to receive CFrames from the Switch Fabric (the Switch Fabric is expected to send Flow Control CFrames on these pins instead of the RDAT pins in Simplex Mode). The FC_Ingress_Status[SF_CReady] and FC_Ingress_Status[SF_DReady] bits are set are from the “Ready bits” received in all incoming CFrames received on this interface. Transmit hardware in the Ingress IXP2800 Network Processor uses the FC_Ingress_Status[SF_CReady] and FC_Ingress_Status[SF_DReady] bits to flow control the data and control transmit on TDAT. CFrames in the FCIFIFO of the Ingress IXP2800 Network Processor are read by Microengines, which use them to keep current VOQ Flow Control information (this is the same as for Full Duplex Mode). The FCI_Not_Empty and FCI_Full status flags, as described in Section 8.5.2.1 let the Microengine know if the FCIFIFO has any CWords in it. When FCI_Full is asserted, FC_Ingress_Status[TM_CReady] will be deasserted; that bit is put into the Ready field of CFrames going to the Switch Fabric, to inform it to stop sending Control CFrames. Flow Control CFrames to the Switch Fabric are put into FCEFIFO, instead of TBUF, as in the Full Duplex Mode case. In this mode, the Microengines create CFrames and write them into FCEFIFO using the msf[write] instruction to the FCEFIFO address; the length of the write can be from 1 – 16. The Microengine creating the CFrame must put a header (conforming to CSIX Base Header format) in front of the message, indicating to the hardware how many bytes to send. The Microengine first tests if there is room in FCEFIFO by reading the FC_Egress_Status[FCEFIFO_Full] status bit. After the CFrame has been written to FCEFIFO, the Microengine writes to the FCEFIFO_Validate register, indicating that the CFrame should be sent out on TXCDAT; this prevents underflow by ensuring that the entire CFrame is in FCEFIFO before it can be transmitted. A validated CFrame at the head of FCEFIFO is started on TXCDAT if FC_Egress_Status[SF_CReady] is asserted, and held off, if it is deasserted. However, once started, the entire CFrame is sent, regardless of changes in FC_Egress_Status[SF_CReady]. The FC_Egress_Status[SF_DReady] is ignored in controlling FCEFIFO. FC_Egress_Status[TM_CReady] and FC_Egress_Status[TM_DReady] are placed by hardware into the Base Header of outgoing CFrames. Horizontal and Vertical parity are created by hardware. If there is no valid CFrame in FCEFIFO, or if FC_Egress_Status[SF_CReady] is deasserted, then idle CFrames are sent on TXCDAT. The idle CFrames also carry (in the Base Header Ready Field), both FC_Egress_Status[TM_CReady] and FC_Egress_Status[TM_DReady]. In all cases, the Switch Fabric must honor the “ready bits” to prevent overflowing RBUF. Note: For simplex mode, there is a condition in which the Flow Control Bus may take too long to properly control incoming traffic on CSIX. This condition may occur when large packets are transmitted on the Flow Control Bus and small packets are transmitted on CSIX. For example, this condition may occur if the Switch Fabric’s CSIX Receive FIFO is full, and the FIFO wants to deassert the x_RDY bit, but a maximum-sized flow control CFrame just went out. The Flow Control Bus is a 4-bit wide LVDS interface that sends data on both the rising and falling edges of the clock. As such, it takes 260 clock cycles to transmit a maximum-sized CFrame, which consists of 256 bytes, plus a 4-byte base header/vertical parity (i.e, 260 bytes total). The interface does not see the transition of the X_RDY bit until this CFrame has been transmitted or until 260 cycles later. Hardware Reference Manual 279 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.5.3 TXCDAT/RXCDAT, TXCSOF/RXCSOF, TXCPAR/RXCPAR, and TXCFC/RXCFC Signals TXCDAT and RXCDAT, along with TXCSOF/RXCSOF and TXCPAR/RXCPAR are used to send CSIX Flow Control information from the Egress IXP2800 Network Processor to the Ingress IXP2800 Network Processor. The protocol is basically the same as CSIX-LI, but with only four data signals. TXCSOF is asserted to indicate start of a new CFrame. The format is the same as any normal CFrame — Base Header, followed by Payload and Vertical Parity; the only difference is that each CWord is sent on TXCDAT in four cycles, with the most significant bits first. TXCPAR carries odd parity for each four bits of data. The transmit logic also creates valid Vertical Parity at the end of the CFrame, with one exception. If the Egress IXP2800 Network Processor detected an error on the CFrame, it will create bad Vertical parity so that the Ingress IXP2800 Network Processor will detect that and discard it. The Egress IXP2800 Network Processor sends CFrames from FCEFIFO in cut-though manner. If there is no data in FCEFIFO, then the Egress IXP2800 Network Processor alternates sending Idle CFrames and Dead Cycles. (Note that FCIFIFO never enqueues Idle CFrames in either Full Duplex or Simplex Modes. The transmitted Idle CFrames are injected by the control state machine, not taken from the FCEFIFO.) The Ingress IXP2800 Network Processor asserts RXCFC to indicate that FCIFIFO is full, as defined by HWM_Control[FCIFIFO_Ext_HWM]. The Egress IXP2800 Network Processor, upon receiving that signal asserted, will complete the current CFrame, and then transmit Idle CFrames until RXCFC deasserts. During that time, the Egress IXP2800 Network Processor can continue to buffer Flow Control CFrames in FCEFIFO; however, if that fills, the further CFrames mapped to FCEFIFO will be discarded. Note: 8.6 If there is no Switch Fabric present, this port could be used for interchip message communication. FC pins must connect between network processors as in Full Duplex Mode. Set MSF_RX_CONTROL[DUPLEX_MODE] = 0 and MSF_TX_CONTROL[DUPLEX_MODE] = 0 (Simplex) and FC_STATUS_OVERRIDE=0x3ff. Microengines write CFrames to the FCEFIFO CSR as in Simplex Mode. The RXCFC and TXCFC pins must be connected between network processors to provide flow control. Deskew and Training There are three methods of operation that can be used, based on the application requirements. 1. Static Alignment — the receiver latches all data and control signals at a fixed point in time, relative to clock. 2. Static Deskew — the receiver latches each data and control signal at a programmable point in time, relative to clock. The programming value for each signal is characterized for a given system design and loaded into deskew control registers at system boot time. 3. Dynamic Deskew — the transmitter periodically sends a training pattern that the receiver uses to automatically select the optimal timing point for each data and control signal. The timing values are loaded into the deskew control registers by the training hardware. 280 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface The IXP2800 Network Processor supports all three methods. There are three groups of high-speed pins to which this applies, as shown in Table 104, Table 105, and Table 106. The groups are defined by the clock signal that is used. Table 104. Data Deskew Functions Clock Signals RDAT RCLK RCTL IXP2800 Network Processor Operation 1. Sample point for each pin is programmed in Rx_Deskew. 2. Deskew values set automatically when training pattern (Section 8.6.1) is received and is enabled in Train_Data[Ignore_Training]. RPAR RPROT TCLK TDAT 1. Send training pattern TCTL • under software control (write to Train_Data[Continuous_Train] or Train_Data[Single_Train]) TPAR • when TSTAT input has framing pattern for more than 32 cycles and enabled in Train_Data[Train_Enable]. TPROT Table 105. Calendar Deskew Functions Clock Signals IXP2800 Network Processor Operation RSCLK RSTAT 1. Used to indicate need for data training on receive pins by forcing to continual framing pattern (write to Train_Data[RSTAT_En]). 2. Send training pattern under software control (write to Train_Calendar[Continuous_Train] or Train_Calendar[Single_Train]). TSTAT 1. Sample point for each pin is set in Rx_Deskew, either by manual programming or automatically. 2. Deskew values set automatically when training pattern (Section ) is received and is enabled in Train_Calendar[Ignore_Training]. 3. Received continuous framing pattern can be used to initiate data training (Train_Data[Detect_No_Calendar]), and/or interrupt the Intel XScale® core. TSCLK Table 106. Flow Control Deskew Functions Clock Signals RXCSOF RXCCLK RXCDAT RXCPAR IXP2800 Network Processor Operation 1. Sample point for each pin is programmed in Rx_Deskew. 2. Deskew values set automatically when training pattern (Section 8.6.2) is received and is enabled in Train_Flow_Control[Ignore_Training]. Note 1, 2 RXCSRB TXCCLK TXCSOF 1. Send training pattern TXCDAT • under software control (write to Train_Flow_Control[Continuous_Train] or Train_Flow_Control[Single_Train]) TXCPAR • when TXCFC input has been asserted for more than 32 cycles and enabled in Train_Flow_Control[Train_Enable]. TXCSRB Notes 1, 2 NOTES: 1. TXCFC is not trained. RXCFC is driven out relative to RXCCLK; TXCFC is received relative to TXCCLK, but is treated as asynchronous. 2. RXCFC can be forced asserted by write to Train_Flow_Control[RXCFC_En]. Hardware Reference Manual 281 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.6.1 Data Training Pattern The data pin training sequence is shown in Table 107. This is a superset of SPI-4 training sequence, because it includes the TPAR/RPAR and TPROT/RPOT pins, which are not included in SPI-4. Table 107. Data Training Sequence 0 2 to 11 0 12 to 21 CTL PROT 1 (Note 5) DATA PAR Cycle (Note 4) 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 x 1 0 x x 0 0 0 0 0 0 0 0 0 a b c d 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 20α-18 to 20α-9 0 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 20α-8 to 20α+1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 NOTES: 1. In cycle 1, x and abcd depend on the contents of the interval after the last preceding control word. This is an Idle Control Word. 2. α represents the number of repeats, as specified in SPI-4 specification. When the IXP2800 Network Processor is transmitting training sequences the value is in Train_Data[Alpha]. 3. On receive, the IXP2800 Network Processor will do dynamic deskew when Train_Data[Ignore_Training] is 0, and RCTL = 1 and RDATA = 0x0FFF for three consecutive samples. Note that RPROT and RPAR are ignored when recognizing the start of training sequence. 4. These are really phases (i.e.,each edge of the clock is counted as one sample). 5. This cycle is valid for SPI-4, it is not used in CSIX training. 8.6.2 Flow Control Training Pattern This section defines training for the flow control pins (Table 108). These pins are normally used for CSIX flow control (Section 8.5), but can be programmed for use as SPI-4 Status Channel. The training pattern used is based on the usage. The flow control pin training sequence when the pins are used for CSIX flow control is shown in Table 108. Table 108. Flow Control Training Sequence 3 2 1 0 XCPAR XCSRB 1 to 10 XCDAT XCSOF Cycle (Note 3) 1 1 1 0 0 0 0 11 to 20 0 0 0 1 1 1 1 20α-19 to 20α-10 1 1 1 0 0 0 0 20α-9 to 20α 0 0 0 1 1 1 1 NOTE: 1. α represents the number of repeats, as specified in SPI-4 specification. When the IXP2800 Network Processor is transmitting training sequences the value is in Train_Flow_Control[Alpha]. 2. On receive, the IXP2800 Network Processor will do dynamic deskew when Train_Flow_Control[Ignore_Training] is 0, and RXCSOF = 1, RXCDATA = 0xC, RXCPAR =0, and RXCSRB = 0 for three consecutive samples. 3. These are really phases (i.e.,each edge of the clock is counted as one sample). 282 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface The training sequence when the pins are used for SPI-4 Status Channel is shown in Table 109. This is compatible to SPI-4 training sequence. Table 109. Calendar Training Sequence Cycle (Note 3) 1 to 10 XCDAT 1 0 0 0 11 to 20 1 1 20α-19 to 20α-10 0 0 20α-9 to 20α 1 1 NOTE: 1. α represents the number of repeats, as specified in SPI-4 specification. When the IXP2800 Network Processor is transmitting training sequences the value is in Train_Calendar[Alpha]. 2. On receive, the IXP2800 Network Processor will do dynamic deskew when Train_Calendar[Ignore_Training] is 0, and TCDAT= 0x0 for ten consecutive samples. 3. These are really phases (i.e.,each edge of the clock is counted as one sample). 4. Only XCDAT[1:0] are included in training. 8.6.3 Use of Dynamic Training Dynamic training is done by cooperation of hardware and software as defined in this section. The IXP2800 Network Processor will need training at reset or it loses training. Loss of training will typically be detected by parity errors on received data. Table 110 lists the steps to initiate the training. SPI-4, CSIX Full Duplex, and CSIX Simplex cases follow similar but slightly different sequences. The SPI-4 protocol uses the calendar status pins, TSTAT/RSTAT (or RXCDAT/ TXCDAT if those are used for calendar status), as an indicator that data training is required. For CSIX use, the IXP2800 Network Processor uses a proprietary method of in-band signaling using Idle CFrames and Dead Cycles to indicate the need for training. Until the LVDS IOs are deskewed correctly, DIP-4 errors will occur. At startup, the receiver should request training followed by the transmitting device being sent training. The receiver should initially see received_training set and DIP-4 parity errors. The receiver should then clear the parity errors, wait for receive_training set and dip4_error cleared and check that all of the applicable RX_PHASEMON registers indicate no training errors. Then the LVDS IOs are properly trained. Hardware Reference Manual 283 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 110. IXP2800 Network Processor Requires Data Training Step SPI-4 (IXP2800 Network Processor is Ingress Device) CSIX (IXP2800 Network Processor is Egress Device) Full Duplex Simplex 1 Detect need for training (for example, reset or excessive parity errors). 2 Force RSTAT (when using LVTTL status channel) to continuous framing pattern (Write a 0 to Train_Data[RSTAT_En]), or force RXCDAT (when using LVDS status channel) to continuous training (Write a 1 to Train_Calendar [Continuous_Train]). Force Transmission of Idle CFrames on Flow Control (Write a 1 to Train_Flow_Control [Force_FCIdle]). 3 Framer device detects RSTAT in continuous framing (when using LVTTL status channel, or RXCDAT in continuos training (when using LVDS status channel). Ingress IXP2800 Flow Control port detects Idle CFrames and sets Train_Flow_Control [Detect_FCIdle]. 4 5 Framer device transmits Training Sequence (IXP2800 receives on RDAT). 6 Ingress IXP2800 sends Dead Cycles on TDAT (if Train_Data [Dead_Enable_FCIdle] is set). Force Transmission of Dead Cycles on Flow Control (Write a 1 to Train_Flow_Control [Force_FCDead]). Switch Fabric detects Dead Cycles on Flow Control. Switch Fabric detects Dead Cycles on Data. Switch Fabric transmits Training Sequence on Data. When MSF_Interrupt_Status[Received_Training_Data] interrupt indicates training happened, and all of the applicable RX_PHASEMON registers indicate no training errors. Write MSF_Interrupt_Status[DIP4_ERR] to clear previous errors. 7 Write a 1 to Train_Data[RSTAT_En] or Write a 0 to Train_Calendar [Continuous_Train]. Write a 0 to Train_Flow_Control [Force_FCIdle]. Write a 0 to Train_Flow_Control [Force_FCDead]. The second case is when the Switch Fabric or SPI-4 framing device indicates it needs Data training. Table 111 lists that sequence. 284 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 111. Switch Fabric or SPI-4 Framer Requires Data Training CSIX Step SPI-4 Full Duplex Simplex 1 Framer sends continuous framing code on IXP2800 calendar status pins TSTAT (when using LVTTL status channel) or sends continuos training on IXP2800 calendar status pins RXCDAT (when using LVDS status channel). Switch Fabric sends continuous Dead Cycles on Data. Switch Fabric sends continuous Dead Cycles on Flow Control. 2 IXP2800 detects no calendar on TSTAT (when using LVTTL status channel) or detects continuos training on RXCDAT (when using LVDS status channel), and sets Train_Data [Detect_No_Calendar]. Egress IXP2800 detects Dead Cycles and sets Train_Data[Detect_CDead]. Egress IXP2800 Flow Control port sends continuous Dead Cycles if Train_Flow_Control [TD_Enable_CDead]. 3 4 IXP2800 transmits Training Pattern (if Train_Data [Train_Enable_TDAT] is set). Ingress IXP2800 detects Dead Cycles and sets Train_Flow_Control [Detect_FCDead]. Ingress IXP2800 Flow Control port detects continuous Dead Cycles and set Train_Flow_Control [Detect_FCDead]. Ingress IXP2800 transmits continuous Training Sequence on data if Train_Data[Train_EN_FCDead]. 5 When Framer/Switch Fabric is trained it indicates that fact by reverting to normal operation. 6 Framer stops continuous framing code on calendar status pins. Switch Fabric stops continuous Dead Cycles on Data. Switch Fabric stops continuous Dead Cycles on Flow Control. The IXP2800 Network Processor needs training at reset, or whenever it loses training. Loss of training is typically detected by parity errors on received flow control information. Hardware Reference Manual 285 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 112 lists the steps to initiate the training. CSIX Full Duplex and CSIX Simplex cases follow similar, but slightly different sequences. Table 112. IXP2800 Network Processor Requires Flow Control Training Step CSIX (IXP2800 Network Processor is Ingress Device) Full Duplex Simplex 1 Force TXCFC pin asserted (Write a 0 to Train_Flow_Control [RXCFC_En]). Force Data pins to continuos Dead Cycles (Write a 1 to Train_Data[Force_CDead]). 2 Egress IXP2800 Network Processor Flow Control port detects RXCFC sustained assertion and sets Train_Flow_Control [Detect_TXCFC_Sustained]. Switch Fabric detects Dead Cycles on Data. 3 Ingress IXP2800 Network Processor transmits Training Sequence on Flow Control pins (if Train_Flow_Control [Train_Enable_CFC] is set). Switch Fabric transmits Training Sequence on Flow Control pins. 4 When MSF_Interrupt_Status[Received_Training_FC] interrupt indicates training happened and all of the applicable RX_PHASEMON registers indicate no training errors, write CSR bits set in Step 1 to inactive value. Write a 1 to Train_Flow_Control [RXCFC_En]. Write a 1 to Train_Data[Force_CDead]. The last case is when the Switch Fabric indicates it needs Flow Control training. Table 113 lists that sequence. Table 113. Switch Fabric Requires Flow Control Training Step 286 Simplex (IXP2800 Network Processor is Egress Device) 1 Switch Fabric sends continuous Dead Cycles on Data. 2 Egress IXP2800 Network Processor detects Dead Cycles and sets Train_Data [Detect_CDead]. 3 Egress IXP2800 Network Processor transmits Training Sequence on Flow Control pins (if Train_Flow_Control [Train_Enable_CDead] is set). 4 Switch Fabric, upon getting trained stops continuous Dead Cycles on Data. Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.7 CSIX Startup Sequence This section defines the sequence required to startup the CSIX interface. 8.7.1 CSIX Full Duplex 8.7.1.1 Ingress IXP2800 Network Processor 1. On reset, FC_STATUS_OVERRIDE[Egress_Force_En] is set to force the Ingress IXP2800 to send Idle CFrames with low CReady and DReady bits to the Egress IXP2800 over TXCSRB. 2. The Microengine or the Intel XScale® core writes a 1 to MSF_Rx_Control[RX_En_C] so that Idle CFrames can be received. 3. The Microengine or the Intel XScale® core polls on MSF_Interrupt_Status[Detected_CSIX_Idle] to see when the first Idle CFrame is received. The Intel XScale® core may use the Detected_CSIX_Idle Interrupt if MSF_Interrupt_Enable[Detected_CSIX_Idle] is set. 4. When the first Idle CFrame is received, the Microengine or the Intel XScale® core writes a 0 to FC_STATUS_OVERRIDE[Egress_Force_En] to deactivate SRB Override or writes 2'b11 to FC_STATUS_OVERRIDE[7:6] ([TM_CReady] and [TM_DReady]). This will inform the Egress IXP2800 that the Switch Fabric has sent an Idle CFrame and the Ingress IXP2800 has detected it. 8.7.1.2 Egress IXP2800 Network Processor 1. On reset, FC_STATUS_OVERRIDE[Ingress_Force_En] is set. 2. The Microengine or the Intel XScale® core writes a 1 to MSF_Tx_Control[Transmit_Idle] and MSF_Tx_Control[Transmit_Enable] so that Idle CFrames with low CReady and Dready bits are sent over TDAT. 3. The Microengine or the Intel XScale® core writes a 0 to FC_STATUS_OVERRIDE[Ingress_Force_En]. The Egress IXP2800 will then be sending Idle CFrames with CReady and DReady according to what is received on RXCSRB from the Ingress IXP2800. If the Egress IXP2800 has not detected an Idle CFrame, low TM_CReady and TM_DReady bits will be transmitted over its TXCSRB pin. If it has detected an Idle CFrame, the TM_CReady and TM_DReady bits are high. The TM_CReady and TM_DReady bits received on RXCSRB by the Ingress IXP2800 are used in the Base Headers of CFrames transmitted over TDAT. 4. The Microengine or the Intel XScale® core polls on FC_Ingress_Status[TM_CReady] and FC_Ingress_Status[TM_DReady]. When they are seen active, the Microengine or the Intel XScale® core writes a 1 to MSF_Tx_Control[TX_En_CC] and MSF_Tx_Control[TX_En_CD]. Egress IXP2800 then resumes normal operation. Likewise, when the Switch Fabric recognizes Idle CFrames with “ready bits” high, it will assume normal operation. Hardware Reference Manual 287 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.7.1.3 Single IXP2800 Network Processor 1. The Microengine or the Intel XScale® core writes a 1 to MSF_Tx_Control[Transmit_Idle] and MSF_Tx_Control[Transmit_Enable] so that Idle CFrames with low CReady and DReady bits are sent over TDAT. 2. The Microengine or the Intel XScale® core writes a 1 to MSF_Rx_Control[RX_En_C] so that Idle CFrames can be received. 3. The Microengine or the Intel XScale® core writes a 0 to FC_STATUS_OVERRIDE[Ingress_Force_En]. 4. The Microengine or the Intel XScale® core polls on MSF_Interrupt_Status[Detected_CSIX_Idle] to see when the first Idle CFrame is received. The Intel XScale® core may use the Detected_CSIX_Idle Interrupt if MSF_Interrupt_Enable[Detected_CSIX_Idle] is set. 5. When the first Idle CFrame is received, the Microengine or the Intel XScale® core writes a 0 to FC_STATUS_OVERRIDE[Egress_Force_En] to deactivate SRB Override or writes 2'b11 to FC_STATUS_OVERRIDE[7:6] ([TM_CReady and TM_DReady]). 6. The Microengine or the Intel XScale® core writes a 1 to MSF_Tx_Control[TX_En_CC] and MSF_Tx_Control[TX_En_CD]. IXP2800 resumes normal operation. 8.7.2 CSIX Simplex 8.7.2.1 Ingress IXP2800 Network Processor 1. On reset, FC_STATUS_OVERRIDE[Egress_Force_En] is set to force Ingress IXP2800 to send Idle CFrames with low CReady and DReady bits to Switch Fabric over TXCDAT. 2. The Microengine or the Intel XScale® core writes a 1 to MSF_Rx_Control[RX_En_C] so that Idle CFrames can be received. 3. The Microengine or the Intel XScale® core polls on MSF_Interrupt_Status[Detected_CSIX_Idle] to see when the first Idle CFrame is received. The Intel XScale® core may use the Detected_CSIX_Idle Interrupt if MSF_Interrupt_Enable[Detected_CSIX_Idle] is set. 4. When the first Idle CFrame is received, the Microengine or the Intel XScale® core writes a 0 to FC_STATUS_OVERRIDE[Egress_Force_En]. Idle CFrames with “ready bits” high will be transmitted over TXCDAT. Ingress IXP2800 may resume normal operation. 288 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.7.2.2 Egress IXP2800 Network Processor 1. On reset, FC_STATUS_OVERRIDE[Ingress_Force_En] is set. 2. The Microengine or the Intel XScale® core writes a 1 to MSF_Tx_Control[Transmit_Idle] and MSF_Tx_Control[Transmit_Enable] so that Idle CFrames with low CReady and DReady bits are sent over TDAT. 3. The Microengine or the Intel XScale® core polls on MSF_Interrupt_Status[Detected_CSIX_FC_Idle] to see when the first Idle CFrame is received. The Intel XScale® core may use the Detected_CSIX_FC_Idle Interrupt if MSF_Interrupt_Enable[Detected_CSIX_FC_Idle] is set. 4. When the first Idle CFrame is received, the Microengine or the Intel XScale® core writes a 0 to FC_STATUS_OVERRIDE[Ingress_Force_En] to deactivate SRB Override. 5. The Microengine or the Intel XScale® core polls on FC_Ingress_Status[TM_CReady] and FC_Ingress_Status[TM_DReady]. When they are seen active, the Microengine or the Intel XScale® core writes a 1 to MSF_Tx_Control[TX_En_CC] and MSF_Tx_Control[TX_En_CD]. Egress IXP2800 then resumes normal operation. Likewise, when the Switch Fabric recognizes Idle CFrames with “ready bits” high, it will assume normal operation. 8.7.2.3 Single IXP2800 Network Processor Both CSIX startup routines described above will be needed to complete the CSIX startup sequence. Using Simplex mode on a single IXP2800 with RDAT, TDAT and RXCDAT, TXCDAT using CSIX, there are essentially two independent CSIX receive and transmit buses. Hardware Reference Manual 289 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.8 Interface to Command and Push and Pull Buses Figure 100 shows the interface of the MSF to the command and push and pull buses. Data transfers to and from the TBUF/RBUF are done in the following cases (refer to section): • • • • • RBUF or MSF CSR to Microengine S_TRANSFER_IN Register for Instruction: Microengine S_TRANSFER_OUT Register to TBUF or MSF CSR for Instruction: Microengine to MSF CSR for Instruction: From RBUF to DRAM for Instruction: From RBUF to DRAM for Instruction: Figure 100. MSF to Command and Push and Pull Buses Interface Block Diagram TBUF Write Data *Data 128 S0_Pull_Bus S1_Pull_Bus 32 SPull Data FIFO 32 SPull Data FIFO To MSF CSRs (Goes to both Push Arbiters) To Transmit Pins Control* Address Decode D_Push_ID U_S_Pull_ID Byte Align TBUF DPush Data Req 64 D_Push_Bus TBUF Address Pull_ID Buffer Write CMD FIFO To MSF CSRs fast_wr_CMD CMD B Bus Command Inlet FIFO ME, Intel XScale® Core Commands Read CMD FIFO To MSF CSRs U_S_Push_ID RBUF Address (Goes to both Push Arbiters) D_Pull_ID From Receive Pins U_D_Pull_Bus U_S_Push-ID (Goes to both Push Arbiters) 64 32 DPull Data Req SPush Data Req RBUF Address Decode *Data Read Data 128 MSF CSR Data * The RBUF, TBUF, TBUF Control can be addressed on 32-bit work boundaries. B1630-02 290 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.8.1 RBUF or MSF CSR to Microengine S_TRANSFER_IN Register for Instruction: msf[read, $s_xfer_reg, src_op_1, src_op_2, ref_cnt], optional_token For transfers to a Microengine, the MSF acts as a target. Commands from Microengines and the Intel XScale® core are received on the command bus. The commands are checked to see if they are targeted to the MSF. If so, they are enqueued into the Command Inlet FIFO, and then moved to the Read Cmd FIFO. When the Command Inlet FIFO is nearly full, it asserts a signal to the command arbiters. The command arbiters prevent further commands to the MSF until after the full signal is asserted. The RBUF element or CSR specified in the address field of the command is read and the data is registered in the SPUSH_DATA register. The control logic then arbitrates for S_PUSH_BUS, and when granted, it drives the data. 8.8.2 Microengine S_TRANSFER_OUT Register to TBUF or MSF CSR for Instruction: msf[write, $s_xfer_reg, src_op_1, src_op_2, ref_cnt], optional_token For transfers from a Microengine, the MSF acts as a target. Commands from Microengines are received on the two command buses. The commands are checked to see if they are targeted to the MSF. If so, they are enqueued into the Command Inlet FIFO, and then moved to the Write Cmd FIFO. When the Command Inlet FIFO is nearly full, it asserts a signal to the command arbiters. The command arbiters prevent further commands to the MSF until after the full signal is asserted. The control logic then arbitrates for S_PULL_BUS, and when granted, it receives and registers the data from the Microengine into the S_PULL_DATA register. It then writes that data into the TBUF element or CSR specified in the address field of the command. 8.8.3 Microengine to MSF CSR for Instruction: msf[fast_write, src_op_1, src_op_2] For fast write transfers from the Microengine, the MSF acts as a target. Commands from Microengines are received on the two command buses. The commands are checked to see if they are targeted to the MSF. If so, they are enqueued into the Command Inlet FIFO, and then moved to the Write Cmd FIFO. When the Command Inlet FIFO is nearly full, it asserts a signal to the command arbiters. The command arbiters prevent further commands to the MSF until after the full signal is asserted. The control logic uses the address and data, both found in the address field of the command. It then writes the data into the CSR specified. 8.8.4 From RBUF to DRAM for Instruction: dram[rbuf_rd, --, src_op1, src_op2, ref_cnt], indirect_ref For the transfers to DRAM, the RBUF acts like a slave. The address of the data to be read is given in D_PULL_ID. The data is read from RBUF and registered in the D_PULL_DATA register. It is then multiplexed and driven to the DRAM channel on D_PULL_BUS. Hardware Reference Manual 291 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.8.5 From DRAM to TBUF for Instruction: dram[tbuf_wr, --, src_op1, src_op2, ref_cnt], indirect_ref For the transfers from DRAM, the TBUF acts like a slave. The address of the data to be written is given in D_PUSH_ID. The data is registered and assembled from D_PUSH_BUS, and then written into TBUF. 8.9 Receiver and Transmitter Interoperation with Framers and Switch Fabrics The Intel® IXP2800 Network Processor can process data received at a peak rate of 16 Gb/s and transmit data at a peak rate of 16 Gb/s. In addition, data may be received and transmitted via the PCI bus at an aggregate peak rate of 4.2 Gb/s, as shown in Figure 101. Intel® IXP2800 Network Processor Transmitter 16 Gb/s Peak Receiver Figure 101. Basic I/O Capability of the Intel® IXP2800 Network Processor 16 Gb/s Peak PCI 4.2 Gb/s Peak B2734-01 The network processor’s receiver and transmitter can be independently configured to support either an SPI-4.2 framer interface or a fabric interface consisting of DDR LVDS signaling and the CSIXL1 protocol. The dynamic training sequence of SPI-4.2, used for de-skewing the signals, has been optionally incorporated into the fabric interface. “SPI-4.2 is an interface for packet and cell transfer between a physical layer (PHY) device and a link layer device, for aggregate bandwidths of OC-192 ATM and Packet over SONET/SDH (POS), as well as 10 Gb/s Ethernet applications.”1 “CSIX-L1 is the Common Switch Interface. It defines a physical interface for transferring information between a traffic manager (Network Processor) and a switching fabric…”2 The network processor adopts the protocol of CSIX-L1, but uses a DDR LVDS physical interface rather than an LVCMOS or HSTL physical interface. 1. 2. 292 “System Packet Interface Level 4 (SPI-4) Phase 2: OC-192 System Interface for Physical and Link Layer Devices,” Implementation Agreement: OIF-SPI4-02.0, Optical Internetworking Forum “CSIX-L1: Common Switch Interface Specification-L1,” CSIX Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface SPI-4.2 supports up to 256 port addresses, with independent flow control for each. For data received by the PHY and passed to the link layer device, flow control is optional. The flow control mechanism is based upon independent pools of credits, corresponding to 16-byte blocks, for each port. The CSIX-L1 protocol supports 4096 ports and 256 unicast classes of traffic. It supports various forms of multicast and 256 multicast queues of traffic. The protocol supports independent linklevel flow control for data and control traffic and supports virtual output queue (VOQ) flow control for data traffic. 8.9.1 Receiver and Transmitter Configurations The network processor receiver and transmitter independently support three different configurations: • Simplex (SPI-4.2 or CSIX-L1 protocol), described in Section 8.9.1.1. • Hybrid simplex (transmitter only, SPI-4.2 data path, and CSIX-L1 protocol flow control), described in Section 8.9.1.2. • Dual Network Processor, full duplex (CSIX-L1 protocol), described in Figure 8.9.1.3. Additionally, the combined receiver and transmitter support a single Network Processor, fullduplex configuration using two different protocols: • Multiplexed SPI-4.2 protocol, described in Section 8.9.1.4. • CSIX-L1 protocol, described in Section 8.9.1.5. In both the simplex and hybrid simplex configurations, the path receiving from a framer, fabric, or Network Processor is independent of the path transmitting to a framer, fabric, or Network Processor. In a full duplex configuration, the receiving path forwards CSIX-L1 control information for the transmit path and vice versa. 8.9.1.1 Simplex Configuration In the simplex configuration, as shown in Figure 102, the reverse path provides control information to the transmitter. This control information may include flow control information and requests for dynamic training sequences. Figure 102. Simplex Configuration Reverse Path (3 to 7 Signals) Receiver Transmitter Forward Path (18 to 20 Signals) B2735-01 Hardware Reference Manual 293 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The SPI-4.2 mode of the simplex configuration supports an LVTTL reverse path or status interface clocked at up to 125 MHz or a DDR LVDS reverse path or status interface clocked at up to 500 MHz. The SPI-4.2 mode status interface consists of a clock signal and two data signals. The CSIX-L1 protocol mode of the simplex configuration supports a full-duplex implementation of the CSIX-L1 protocol, but no Data CFrames are transferred on the reverse path and the reverse path is a quarter of the width of the forward path. The CSIX-L1 protocol mode supports a DDR LVDS reverse path interface clocked at up to 500 MHz. The CSIX-L1 protocol mode reverse path control interface consists of a clock signal, four data signals, a parity signal, and a start-of-frame signal. 8.9.1.2 Hybrid Simplex Configuration In the hybrid simplex configuration, data transfers and link-level flow control is supported via the SPI-4.2 modes of the receiver and transmitter, as shown in Figure 103. Only the LVTTL SPI-4.2 status interface is supported in this configuration. Figure 103. Hybrid Simplex Configuration Network Processor Transmitter SPI-4.2 LVTTL Reverse Path DDR LVDS Flow Control Fabric Receiver SPI-4.2 Forward Path CSIX Protocol DDR LVDS Reverse Path B2736-02 Virtual output queue flow control information (or other information) is delivered to the transmitter via the CSIX-L1 protocol via an interface similar to the reverse path of the CSIX-L1 protocol mode of the simplex configuration. Flow control for the CSIX-L1 CFrames is provided by an asynchronous LVDS signal back to the fabric and not by the “ready bits” of the CSIX-L1 protocol. The hybrid simplex configuration for a fabric interface may be especially useful to implementers when an SPI-4.2 interface implementation is readily available. The CSIX-L1 protocol reverse path may not need to operate at a clock rate as aggressive as the SPI-4.2 interface and, as such, may be easier to implement than a full-rate data interface. 294 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.1.3 Dual Network Processor Full Duplex Configuration In the dual Network Processor, full duplex configuration, an ingress Network Processor and an egress Network Processor are integrated to offer a single full duplex interface to a fabric, similar to the CSIX-L1 interface, as shown in Figure 104. This configuration provides an interface that is closest to the standard CSIX-L1 interface. It is easiest to bridge between this configuration and an actual CSIX-L1 interface. Fabric Interface Chip Transmitter Receiver Egress Network Processor Flow Control Serial CSIX Ready Bits PCI CSIX Flow Control CFramers Transmitter Ingress Network Processor Receiver Figure 104. Dual Network Processor, Full Duplex Configuration B2737-02 Flow control CFrames are forwarded by the egress Network Processor to the ingress Network Processor over a separate flow control interface. The bandwidth of this interface is a quarter of the primary interface offered to the fabric. A signal from ingress Network Processor to egress Network Processor provides flow control for this interface. (This interface is the same interface that was used in the hybrid simplex configuration.) A separate signal from egress Network Processor to ingress Network Processor provides the state of the CSIX-L1 “ready bits” that were received from the fabric, conveying the state of the fabric receiver, and those that should be sent to the fabric, conveying the state of the egress Network Processor receiver. The PCI may be used to convey additional information between the egress Network Processor and ingress Network Processor. Hardware Reference Manual 295 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.1.4 Single Network Processor Full Duplex Configuration (SPI-4.2) The single Network Processor, full duplex configuration (SPI-4.2 only) allows a single Network Processor to interface to multiple discrete devices, processing both the receiver and transmitter data for each, as shown in Figure 105 (where N=255). Up to 256 devices can be addressed by the SPI4.2 implementation. The bridge chip implements the specific interfaces for each of those devices. Figure 105. Single Network Processor, Full Duplex Configuration (SPI-4.2 Protocol) Intel® IXP2800 Network Processor Full Duplex SPI-4.2 Interface Device 0 Bridge Chip (Provides multiple interfaces to other devices.) Device 1 Device N Device N-1 B2743-01 296 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.1.5 Single Network Processor, Full Duplex Configuration (SPI-4.2 and CSIX-L1) The Single Network Processor, Full Duplex Configuration (SPI-4.2 and CSIX-L1 Protocol) allows a single Network Processor to interface to a fabric via a CSIX-L1 interface and to multiple other discrete devices, as shown in Figure 106. The CSIX-L1 and SPI-4.2 protocols are multiplexed on the network processor receiver and transmitter interface. Independent processing and buffering resources are allocated to each protocol. Figure 106. Single Network Processor, Full Duplex Configuration (SPI-4.2 and CSIX-L1 Protocols) Intel® IXP2800 Network Processor Multiplexed Full Duplex SPI-4.2 and CSIX Protocols Bridge Chip Device 0 (A single CSIX protocol instance is bridged to the CSIX-L1 interface. The SPI-4.2 port addresses are mapped to other devices.) Device 1 CSIX-L1 Interface Fabric Interface Chip Device N B2744-01 8.9.2 System Configurations The receiver and transmitter configurations in the preceding Section 8.9.1 enable several system designs, as shown in Figure 107 through Figure 111. Hardware Reference Manual 297 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.2.1 Framer, Single Network Processor Ingress and Egress, and Fabric Interface Chip Figure 107 illustrates the baseline system configuration consisting of the dual chip, full-duplex fabric configuration of network processors with a framer chip and a fabric interface chip Figure 107. Framer, Single Network Processor Ingress and Egress, and Fabric Interface Chip Ingress Intel® IXP2800 Network Processor Framer Flow Control PCI Fabric Interface Chip Egress Intel IXP2800 Network Processor B2745-01 8.9.2.2 Framer, Dual Network Processor Ingress, Single Network Processor Egress, and Fabric Interface Chip If additional processing capacity is required in the ingress path, an additional network processor can be added to the configuration, as shown in Figure 108. The configuration of the interface between the two ingress network processors can use either the SPI-4.2 or CSIX-L1 protocol. Figure 108. Framer, Dual Processor Ingress, Single Processor Egress, and Fabric Interface Chip Ingress Intel® IXP2800 Network Processor 0 Framer Ingress Intel IXP2800 Network Processor 1 PCI Flow Control Fabric Interface Chip Egress Intel IXP2800 Network Processor B2746-01 298 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.2.3 Framer, Single Network Processor Ingress and Egress, and CSIX-L1 Chips for Translation and Fabric Interface To interface to existing standard CSIX-L1 fabric interface chips, a translation bridge can be employed, as shown in Figure 109. Translation between the network processor interface and standard CSIX-L1 is very simple by design. Figure 109. Framer, Single Network Processor Ingress, Single Network Processor Egress, CSIX-L1 Translation Chip and CSIX-L1 Fabric Interface Chip Ingress Intel® IXP2800 Network Processor Framer Flow Control PCI Egress Intel IXP2800 Network Processor Translation Chip DDR LVDS to CSIX-L1 HSTL CSIX-L1 Fabric Interface Chip B2747-01 8.9.2.4 CPU Complex, Network Processor, and Fabric Interface Chip If a processor card requires access to the fabric, a single network processor can provide both ingress and egress access to the fabric for the processor via the PCI interface, as shown in Figure 110. In many cases the available aggregate peak bandwidth of 4.2 Gb/s is sufficient for the processor’s capacity. Figure 110. CPU Complex, Network Processor, and Fabric Interface Chips CPU Memory Controller PCI Ingress Intel® IXP2800 Network Processor Fabric Interface Chip Memory B2748-01 Hardware Reference Manual 299 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.2.5 Framer, Single Network Processor, Co-Processor, and Fabric Interface Chip The network processor supports multiplexing the SPI-4.2 and CSIX-L1 protocols over its physical interface via a protocol signal. This capability enables using a bridge chip to allow a single network processor to support the ingress and egress paths between a framer and a fabric, provided the aggregate system bandwidth does not exceed the capabilities of that single network processor, as shown in Figure 111. Figure 111. Framer, Single Network Processor, Co-Processor, and Fabric Interface Chip Intel® IXP2800 Network Processor Framer Bridge Chip CSIX-L1 Fabric Interface Chip Co-Processor B2749-01 300 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.3 SPI-4.2 Support Data is transferred across the SPI-4.2 interface in variously-sized bursts and encapsulated with a leading and trailing control word. The control words provide annotation of the data with port address (0-255) information, start-of-packet and end-of-packet markers, and an error detection code (DIP-4). Data must be transferred in 16-byte integer multiples, except for the final burst of a packet. Figure 112. SPI-4.2 Interface Reference Model with Receiver and Transmitter Labels Corresponding to Link Layer Device Functions Receiver Signals PHY Device SPI-4.2 Interface Transmitter Signals Ingress Intel® IXP2800 Network Processor Link Layer Device Egress Intel IXP2800 Network Processor B2750-01 The status interface transfers state as an array of state or calendar, two bits per port, for all of the supported ports. The status information provides for reporting one of three status states for each port (satisfied, hungry, and starving) corresponding to credit availability for the port. The mapping of calendar offset to port is flexible. Individual ports may be repeated multiple times for greater frequency of update. 8.9.3.1 SPI-4.2 Receiver The network processor receiver stores received SPI-4.2 bursts into receiver buffers. The buffers may be configured as 128 buffers of 64 bytes, 64 buffers of 128 bytes, or 32 buffers of 256 bytes. Information from the control words, the length of the burst, and the TCP checksum of the data are stored in an additional eight bytes of control storage. The buffers support storage of bursts containing an amount of data that is less than or equal to the buffer size. A burst that is greater than the configured size of the buffers is stored in multiple buffers. Each buffer is made available to software as it becomes filled. As the filling of each buffer completes, the buffer is dispatched to a thread of a Microengine that has been registered in a free list of threads, and the eight bytes of control information are forwarded to the register context of the thread. If no thread is currently available, the receiver waits for a new thread to become available as other buffers are also filled (and then also have “waiting queues”). Hardware Reference Manual 301 Intel® IXP2800 Network Processor Media and Switch Fabric Interface As threads complete processing of the data in a buffer, the buffer is returned to a free list. Subsequently, the thread also returns to a separate free list. The return of buffers and threads to the free lists may occur in a different order than the order of their removal. All SPI-4.2 ports sharing the interface have equal access to the buffering resources. Flow control can transition to a non-starving state when 25%, 50%, 75%, or 87.5% of the buffers are consumed, as configured by HWM_Control[RBUF_S_HWM]. At this point, the remaining buffers are available and, additionally, 2K bytes of packed FIFO (corresponding to 128 SPI-4.2 credits) are available for incoming data storage. If receiver flow control is expected to be asserted and for a sufficiently large number of ports and values of MaxBurst1 or MaxBurst2, it may be necessary for the PHY device to discard credits already granted if a state of Satisfied is reported by the network processor to the device, treating the Satisfied state more as an XOFF state. Otherwise, excessive credits may be outstanding for the storage available and receiver overruns may occur. For more information about the SPI-4.2 receiver, see Section 8.2.7. 8.9.3.2 SPI-4.2 Transmitter The network processor transmitter transfers SPI-4.2 bursts from transmitter buffers. The buffers may be configured as 128 buffers of 64 bytes, 64 buffers of 128 bytes, or 32 buffers of 256 bytes. The control word information and other control information for the burst are stored in additional control storage. The buffers are always transmitted in a fixed order. Software can determine the index of the last buffer transmitted, and keep track of the last buffer committed to the transmitter. The transmitter buffers are used as a ring, with the “get index” updated by the transmitter and the “put index” updated due to committing a buffer element to transmission. Each transmit buffer supports a limited gather capability to stitch together a protocol header and a payload. The buffer supports independent prefix (or prepended) data and payload data. The prefix data can begin at any offset from 0 to 7 and have a length of from 0 to 31 bytes. The payload begins at an offset of 0 to 7 bytes from the next octal-byte boundary following the prefix and can fill out the remainder of the buffer. For more complicated merging or shifting of data within a burst, the data should be passed through a Microengine to perform any arbitrary merging and/or shifting. Buffers may be statically allocated to different ports in an inter-leaved fashion so that bandwidth availability is balanced for each of the ports. Transmit buffers may be flagged to be skipped if no data is available for a particular port. The transmitter scheduler, implemented on a Microengine, is responsible for reacting to the status information provided by the PHY device. The status information can be read via registers. The status information is available in two formats: a single status per register and status for 16 ports in a single register. For more information, see Section 8.3.4, “Transmit Flow Control Status” on page 270. 302 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.4 CSIX-L1 Protocol Support 8.9.4.1 CSIX-L1 Interface Reference Model: Traffic Manager and Fabric Interface Chip The CSIX-L1 protocol operates between a Traffic Manger and a Fabric Interface Chip(s) across a full-duplex interface. It supports mechanisms to interface to a fabric that avoid congestion using virtual output queue (VOQ) flow control and enables a fabric that offers lossless, non-blocking transfer of data from ingress port to egress ports. Both data and control information pass over the receiver and transmitter interfaces. Figure 113. CSIX-L1 Interface Reference Model with Receiver and Transmitter Labels Corresponding to Fabric Interface Chip Functions Ingress Network Processor Traffic Manager Egress Network Processor Receiver Signals CSIX-L1 Interface Fabric Interface Chip(s) Transmitter Signals Printed Circuit Card B2751-01 The Traffic Manger on fabric ingress is responsible for segmentation of packet data and scheduling the transmission of data segments into the fabric. The fabric on ingress is responsible for influencing the scheduling of data transmission through link-level flow control and Virtual Output Queue (VOQ) flow control so that the fabric does not experience blocking or data loss due to congestion. The fabric on egress is responsible for scheduling the transfer of data to the Traffic Manager according to the flow control indications from the Traffic Manager. The CSIX-L1 protocol supports addressing up to 4096 fabric ports and identifies up to 256 classes of unicast traffic. It optionally supports multicast and broadcast traffic, supporting identification of up to 256 queues of such traffic. Virtual output queue flow control is supported at the ingress to the fabric and the egress from the fabric. The standard CSIX-L1 interface supports interface widths of 32, 64, 94, and 128 bits. A single clocked transfer of information across the interface is called a CWord. The CWord size is the width of the interface. Hardware Reference Manual 303 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Information is passed across the interface in CFrames. CFrames are padded out to an integer multiple of CWords. CFrames consist of a 2-byte base header, an optional 4-byte extension header, a payload of 1 to 256 bytes, padding, and a 2-byte vertical parity. Transfers across the interface are protected by a horizontal parity. When there is no information to pass over the interface, an alternating sequence of Idle CFrames and Dead Cycles are passed across the interface. There are 16 possible codes for CFrame types. Each CFrame type is either a data CFrame or a control CFrame. Data CFrame types include Unicast, Multicast Mask, Multicast ID, Multicast Binary Copy, and Broadcast. Control CFrames include Flow Control. CSIX-L1 supports independent link-layer flow control for data CFrames and control CFrames by using “ready bits” (CRdy and DRdy) in the base header. The response time for link-level flow control is specified to be 32 interface clock ticks, but allows for additional time to complete transmission of any CFrame already in progress at the end of that interval. 8.9.4.2 Intel® IXP2800 Support of the CSIX-L1 Protocol The adaptation of the CSIX-L1 protocol to the network processor physical interface has been accomplished in a straightforward manner. 8.9.4.2.1 Mapping to 16-Bit Wide DDR LVDS The CSIX-L1 interface is built in units of 32 data bits. For each group of 32 data signals, there is a clock signal (RxClk, TxClk), a start-of-frame signal (RxSOF, TxSOF) and a horizontal-parity signal (RxPar, TxPar). If the CWord or interface width is greater than 32 bits, the assertion of the Start-of-Frame signal associated with each group of 32 data bits is used to synchronize the transfers across the independently clocked individual 32-bit interfaces. The network processor supports 32-bit data transfers across two transfers or clock edges of the SPI-4.2 16-bit DDR LVDS data interface. The CSIX-L1 RxSOF and TxSOF signals are mapped to the SPI-4.2 TCTL and RCTL signals. For the transfer of CFrames, the start-of-frame signal is asserted on only the first edge of the 32-bit transfer. (Assertion of the start-of-frame signal for multiple contiguous clock edges denotes the start of a de-skew training sequence as described below.) Receiver logic for the interface should align the start of 32-bit transfers to the assertion of the startof-frame signal. The network processor always transmits the high order bits of a 32-bit transfer on the rising edge of the transmit clock, but a receiver may de-skew the signals and align the received data with the falling edge of the clock. The network processor receiver always aligns the received data according to the assertion of the start-of-frame signal. The network processor supports CWord widths of 32, 64, 96, and 128 bits. It will pad out CFrames (including Idle CFrames) and Dead Cycles according to this CWord width. The physical interface remains just 16 data bits. The start-of-frame signal is only asserted for the high order 16 bits of the first 32-bit transfer; it is not asserted for each 32-bit transfer. Support for multiple CWord widths is intended to facilitate implementation of IXP2800-to-CSIX-L1 translator chips and to facilitate implementation of chips with native network processor interfaces, but with wider internal transfer widths. The network processor supports a horizontal parity signal (RPAR, TPAR). The horizontal parity signal covers the 16 data bits that are transferred on each edge of the clock. It does not cover 32 bits as in CSIX-L1. Support for horizontal-parity requires an additional physical signal beyond that required for SPI-4.2. Checking of the horizontal parity can be optionally disabled on reception. If a fabric interface chip does not support TPAR, then the checking of RPAR should be disabled. 304 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface The network processor supports a variation of the standard CSIX-L1 vertical parity. Instead of a single vertical XOR for the calculation of the vertical parity, the network processor can be configured to calculate as DIP-16 code, as documented within the SPI-4.2 specification. If horizontal parity is not enabled for the interface, the use of the DIP-16 code is recommended to provide for better error coverage than that provided by a vertical parity. 8.9.4.2.2 Support for Dual Chip, Full-Duplex Operation A dual-chip configuration of network processors consisting of an ingress and egress network processor, can present a full-duplex interface to a fabric interface chip, consistent with the expectations of the CSIX-L1 protocol. A flow control interface is supported between the ingress and egress chips to forward necessary flow control information from the egress network processor to the ingress network processor. Additional information can be transferred between the ingress and egress network processors through the PCI bus. The flow control interface consists of a data transfer signal group, a serial signal for conveying the state of the CSIX-L1 “ready bits” (TXCSRB, RXCSRB), and a backpressure signal (TXCFC, RXCFC) to avoid overrunning the receiver in the ingress network processor. (The orientation of the signal names is consistent with the egress network processor, receiving CFrames from the fabric, and forwarding flow control information out through the transmit flow control pins.) The data transfer signal group consists of: • • • • Four data signals (TXCDAT[0..3], RXCDAT[0..3]) A clock (TXCCLK, RXCCLK) A start-of-frame signal (TXCSOF, RXCSOF) A horizontal-parity signal (TXCPAR, RXCPAR) The network processor receiver forwards Flow Control CFrames from the fabric in a cut-through fashion over the flow control interface. The flow control interface has one-fourth of the bandwidth of the network processor fabric data interface. The Crdy bit in the base header of the CSIX-L1 protocol (link-level flow control) prevents overflowing of the FIFO for transmitting out the flow control interface from the egress network processor. The fabric can implement a rate limit on the transmission of Flow Control CFrames to the egress network processor, consistent with the bandwidth available on the flow control interface. With a rate limit, the fabric can detect congestion of Flow Control CFrames earlier, instead of waiting for the assertion of cascaded backpressure signals. The CRdy and DRdy bits of CFrames sent across the flow control interface are set to 0 on transmission and ignored upon reception at the ingress network processor. If no CFrames are available to send from the egress network processor to the ingress network processor, an alternating sequence of Idle CFrames and Dead Cycles is sent from the egress to the ingress network processor, consistent with the CSIX-L1 protocol. The state of the CRdy and DRdy bits sent to the egress network processor by the fabric and the state of the CRdy and DRdy bits that should be sent to the fabric by the ingress network processor, reflecting the state of the egress network processor buffering, are sent through the TXCSRB signal and received through the RXCSRB signal. A new set of bits are conveyed every 10 clock edges or five clock cycles, of the interface. A de-assertion of a “ready bit” is forwarded immediately upon processing the “ready bit”. An assertion of a “ready bit” is forwarded only after all of the horizontal parities and the vertical parity of the CFrame are checked. A configuration of ingress and egress network processors is expected to respond to the de-assertion of a CRdy or DRdy bit within 32 clock cycles (RCLK), consistent with the formulation described for CSIX-L1. Hardware Reference Manual 305 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The backpressure signal (TXCFC, RXCFC) is an asynchronous signal and is asserted by the ingress network processor to prevent overflow of the ingress network processor ingress flow control FIFO. If the egress network processor is so optionally configured, it will react to assertion of the backpressure signal for 32 clock cycles (64 edges) as a request for a de-skew training sequence to be transmitted on the flow control interface. The flow control interface only supports a 32-bit CWord. Flow Control CFrames that are received by the egress network processor are stripped of any padding associated with large CWord widths and forwarded to the flow control interface. The various options for parity calculation and checking supported on the data interface are supported on the flow control interface. Horizontal parity checking may be optionally disabled. The standard calculation of vertical parity may be replaced with a DIP-16 calculation. 8.9.4.2.3 Support for Simplex Operation The network processor supports a mode of operation that supports the CSIX-L1 protocol, but offers an independent interface for the ingress and egress network processors. In this mode, the ingress and egress network processors each offer an independent full-duplex CSIX-L1 flavor of interface to the fabric, but the network processor-to-fabric interface on the egress network processor and the fabric-to-network processor interface of the ingress network processor are of reduced width, consisting of four (instead of 16) data signals. These narrow interfaces are referred to as Reverse Path Control Interfaces and use the same physical interface as the flow control interface in the dual-chip, full duplex configuration. They support the transfer of Flow Control CFrames and the CRdy and DRdy “ready” bits, but are not intended to support the transfer of data CFrames. Figure 114. Reference Model for IXP2800 Support of the Simplex Configuration Using Independent Ingress and Egress Interfaces Ingress Network Processor Primary Interface RPCI Egress Network Processor Fabric Interface Chip(s) RPCI Primary Interface Printed Circuit Card B2752-01 The Reverse Path Control Interfaces (RPCI) support only the 32-bit CWord width of the dual chip, full duplex flow control interface. The variations of parity support provided by the data interface and the flow control interface are supported by the RPCI. 306 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface The transfer time of CFrames across the RPCI is four times that of the data interface. The latency of link-level flow control notifications depends on the frequency of sending new CFrame base headers. As such, the maximum size of CFrames supported on the RPCI should be limited to provide sufficient link-level flow control responsiveness. The behavior of state machines for a full-duplex interface regarding interface initialization, linklevel flow control, and requests to send a de-skew training sequence is supported by the data interface in combination with its reverse path control interface as if the two interfaces were equivalent to a full-duplex interface. The simplex mode of interfacing to the ingress and egress network processor is an alternative to the dual chip full-duplex configuration. It provides earlier notification of Flow Control CFrame congestion within the ingress network processor and marginally less latency for delivery of Flow Control CFrames to the ingress network processor. It allows more of the bandwidth on the data interface to be used for the transfer of data CFrames as Flow Control CFrames are transferred on the RPCI. The simplex configuration provides a straightforward mechanism for the egress network processor to send VOQ flow control to the fabric if the fabric supports such functionality. In the dual chip, full-duplex configuration, the egress network processor sends a request across the PCI to the ingress network processor, requesting that a Flow Control CFrame be sent to the fabric. 8.9.4.2.4 Support for Hybrid Simplex Operation The SPI-4.2 interface may be used to transfer data to and from a fabric, although there is no standard protocol for such conveyance. The necessary addressing information for the fabric and egress network processor may be encoded within the address bits of the preceding control word or stored in the initial data words of the SPI-4.2 burst. The LVTTL status interface may be used to provide link-level flow control for the data bursts. (The SPI-4.2 LVDS status interface cannot be used, because it shares the same pins with the fabric flow control interface.) Figure 115. Reference Model for Hybrid Simplex Operation SPI-4.2 Data Interface Ingress Network Processor SPI-4.2 Status Interface Back Pressure Fabric Interface Chip(s) Flow Control Interface Egress Network Processor SPI-4.2 Status Interface SPI-4.2 Data Interface Printed Circuit Card B2753-01 Hardware Reference Manual 307 Intel® IXP2800 Network Processor Media and Switch Fabric Interface The SPI-4.2 interface does not support a virtual output queue (VOQ) flow control mechanism. The Intel® IXP2800 Network Processor supports use of the CSIX-L1 protocol-based flow control interface (as used in the dual chip, full-duplex configuration) on the ingress network processor, while SPI-4.2 is operational on the data interface. This interface can provide VOQ flow control information from the fabric and allow the transmitter scheduler, implemented in a Microengine within the ingress network processor, to avoid sending data bursts to congested destinations. The fabric should send alternating Idle CFrames and Dead Cycles when there are no Flow Control CFrames to transmit. The CRdy and DRdy “ready bits” should be set to 0 on transmission and are ignored on reception. The fabric should respond to the RXCFC backpressure signal. In this mode of operation, the RXCSRB signal that would normally receive the state of the CRdy and DRdy “ready bits” is not used. If dynamic de-skew is configured on the interface, and the backpressure signal is asserted for 32 clock cycles, the fabric sends a (de-skew) training sequence on the flow control interface. It may be acceptable in this configuration to operate the flow control interface at a sufficiently low clock rate that dynamic de-skew is not required. Operation in the hybrid simplex mode for the ingress network processor is slightly more taxing on the transmit scheduler computation than the homogenous CSIX-L1 protocol configurations. The status reported for the data interface must be polled by the transmit scheduler. In this configuration, the response to link-level flow control is performed in software and is slower than in the homogenous CSIX-L1 protocol configurations where it is accomplished in hardware. 8.9.4.2.5 Support for Dynamic De-Skew Training The SPI-4.2 interface incorporates a training sequence for dynamic de-skew of its signals relative to the source synchronous clock. This training sequence has been extended and incorporated into the CSIX-L1 protocol support of the Intel® IXP2800 Network Processor. The training pattern for the 16-bit data interface consists of 20 words, 10 repetitions of 0x0fff followed by 10 repetitions of 0xf000. The CTL and PAR signals are asserted for the first 10 words and de-asserted for the second 10 words. The PROT signal (see below) is de-asserted for the first 10 words and asserted for the second 10 words. A training sequence consists of “alpha” repetitions of the training pattern. The idle control word that precedes a training sequence in SPI-4.2 is not used in conjunction with the CSIX-L1 protocol. See Section 8.6.1 for more information. A receiver should detect a training sequence in the context of the CSIX-L1 protocol implementation by the assertion of the start-of-frame signal for three adjacent clock edges and the correct value on the data signals for those three adjacent clock edges. A receiver may request a training sequence to be sent by transmitting continuous Dead Cycles on the interface. Reception of two adjacent Dead Cycles triggers the transmission of a training sequence in the opposite direction. If an interface is sending Dead Cycles and a training sequence becomes pending, the interface must send the training sequence at a higher priority than the Dead Cycles. Otherwise, a deadlocked situation may arise. In the simplex configuration, the request for training, and the response to it, occur between a primary interface and its associated reverse path control interface. In the dual chip, full-duplex configuration, requests for training and Dead Cycles are encoded across the flow control interface as either continuous Dead Cycles or continuous Idle CFrames, both of which violate the standard CSIX-L1 protocol. 308 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface The training pattern for the flow control data signals consists of 10 nibbles of 0xc followed by 10 nibbles of 0x3. The parity and serial “ready bits” signal is de-asserted for the first 10 nibbles and asserted for the second 10 nibbles. The start-of-frame signal is asserted for the first 10 nibbles and de-asserted for the second 10 nibbles. See Section 8.6.2 for more information. When a training sequence is received, the receiver should update the state of the received CRdy and DRdy “ready bits” to a de-asserted state until they are updated by a subsequent CFrame. 8.9.4.3 CSIX-L1 Protocol Receiver Support The Intel® IXP2800 Network Processor receiver support for the CSIX-L1 protocol is similar to that for SPI-4.2. CFrames are stored in the receiver data buffers. The buffers are configured to be of a size of 64, 128, or 256 bytes. The contents of the CFrame base header and extension header are stored in separate storage with the reception status of the CFrame. Unlike SPI-4.2 data bursts, the entire CFrame must fit into a single buffer. The receiver does not progress to the next buffer to store subsequent parts of a single CFrame. (The buffer is required only to be sufficiently large to accommodate the payload, not the header, the padding, or the vertical parity.) Designated CFrame types, typically Flow Control CFrames, are forwarded in cut-through mode directly to the flow control egress FIFO and not stored in the receiver buffers. The receiver resources are separately allocated to the processing of data and control CFrames. Separate free lists of buffers and Microengine threads for each category of CFrame type are maintained. The size of the buffers in each resource pool is separately configurable. The mapping of CFrame type to data or control category is completely configurable via the CSIX_Type_Map register. This register also allows for any types to be designated for cut-through forwarding to the flow control egress FIFO. Typically, only the Flow Control CFrame type is configured in this way. The receiver buffers are partitioned into two pools via MSF_Rx_Control[RBUF_Partition], providing 75% of the buffer memory (6 Kbytes) for data CFrames and 25% of the buffer memory (2 Kbytes) for control CFrames. The number of buffers available per pool depends on the configured buffer size. For 64-byte buffers, there are 96 and 32 buffers, respectively. For 128-byte buffers, there are 48 and 16 buffers, respectively. For 256-byte buffers, there are 24 and 8 buffers, respectively. As with SPI-4.2, link-level flow control for a buffer pool can be asserted by configuration when buffer consumption reaches 25%, 50%, 75%, or 87.5% within that pool. The receiver has an additional 1024 bytes of packed FIFO storage for each traffic category to accept additional CFrames after link-level flow control (CRdy or DRdy) is asserted. Link-level flow control for control CFrames (CRdy) is also asserted if the flow-control egress FIFO contents exceeds a threshold as configured by HWM_Control[FCEFIFO_HWM]. The threshold may be set to 16, 32, 64, or 128 32-bit words. The total capacity of the FIFO is 512 32-bit words. Within the base header, the receiver hardware processes the CRdy bit, the DRdy bit, the Type field, and the Payload Length. Only the Flow Control Frame CFrame is expected to lack the 32-bit extension header. The receiver hardware validates the vertical parity of the CFrame and only writes it to the receiver buffer if the write operation also includes payload data. The hardware supports configuration options for processing all 16 CFrame types. In all other respects, processing of the CFrame contents is done entirely by software. Variations in the CSIX-L1 protocol are supported that only affect the software processing. These variations might include address swapping (egress port address swapping with ingress port address) and use of reserve bits to encode start and end of packets. When the network processor is configured to forward Flow Control Frame CFrames to the flow control egress FIFO, software does not process those CFrames. Processor interrupts occur if there are reception errors, but the actual CFrames are not made available for further processing. Hardware Reference Manual 309 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.4.4 CSIX-L1 Protocol Transmitter Support The Intel® IXP2800 Network Processor transmitter support for the CSIX-L1 protocol is similar to that for SPI-4.2. The transmitter fetches CFrames from transmitter buffers. An entire CFrame must fit within a single buffer. In the case of SPI-4.2, the array of transmitter buffers operates as a single ring. In the case of CSIX-L1 protocol support, the array of buffers operates as two rings, one for data CFrames and another for control CFrames. The partitioning of the transmitter buffers is configured via MSF_Tx_Control[TBUF_Partition]. The portion of the aggregate transmitter buffer storage (8 Kbytes) allocated to data CFrames is 75% (6 Kbytes), with the remainder (2 Kbytes) allocated to control CFrames. The size of the buffers within each partition is independently configurable to a size of 64, 128, or 256 bytes. The payload size of CFrames sent from the buffers may vary from 1 to the size of the buffer. The CSIX-L1 protocol link-level flow control operates directly upon the hardware that processes the two (control and data) transmitter rings. The transmitter services the two rings in round-robin order when allowed by link-level flow control. The transmitter transmits Idle CFrames and Dead Cycles according to the CSIX-L1 protocol if there are no CFrames to transmit. Virtual output queue flow control is accommodated by a transmit scheduler implemented on a Microengine. In all three network processor ingress configurations, Flow Control CFrames are loaded by hardware into the flow control ingress FIFO. Two state bits associated with this FIFO are distributed to all of the Microengines: (1) the FIFO is non-empty, and (2) the FIFO contains more than a threshold amount of CFrame 32-bit words (HWM_Control[FCIFIFO_Int_HWM]) Any Microengine can perform transmitter scheduling by sensing the state associated with the flow control ingress FIFO, using the branch-on-state instruction. If the FIFO is not empty, the transmit scheduler processes some of the FIFO by performing a read of the FCIFIFO registers. A single Microengine instruction can perform a block read of up to 16 32-bit words. The data for the read is likely to arrive after several subsequent scheduling decisions. The scheduler should incorporate the new information from the newly-read Flow Control CFrame(s) in its later scheduling decisions. If the FIFO state indicates that the threshold capacity has been exceeded, the scheduler should suspend further scheduling decisions until the FIFO is sufficiently processed, otherwise it risks making scheduling decisions with information that is stale. The responsiveness of the network processor to VOQ flow control depends on the transmit pipeline length, from transmit scheduler to CFrames on the interface signals. For rates at or above 10 Gb/s, the pipeline length is likely to be 32 – 64 CFrames, assuming four pipeline stages (schedule, dequeue, data movement, and transmit) and 8 – 16 CFrames concurrently processed per stage. In the simplex configuration, the egress network processor can send CFrames over the Reverse Path Control Interface. The CFrames are loaded into the flow control egress FIFO by performing writes of 32-bit words to the FCEFIFO registers. The base header, the extension header, the payload, the padding, and a dummy vertical parity must be written to the FIFO. The transmitter hardware calculates the actual vertical parity as the CFrame is transmitted. Note: The transmitter hardware for the transmitter buffers and the flow control egress FIFO expect that only the Flow Control CFrame type does not have an extension header of 32 bits (all other types have this header). The hardware disregards the contents of the extension header or the payload. The limited gather capability described for SPI-4.2 also is available for CFrames. A prefix header of up to 31 bytes and a disjoint payload is supported. The prefix header may start at an offset of 0 to 7 bytes. The payload may start at an offset of 0 to 7 bytes from the octal-byte boundary following the end of the prefix header. For more complicated merging or shifting of data within a CFrame, the data should be passed through a Microengine to perform any arbitrary merging and/or shifting. 310 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.4.5 Implementation of a Bridge Chip to CSIX-L1 The Intel® IXP2800 Network Processor support for the CSIX-L1 protocol in the dual chip, fullduplex configuration minimizes the difficulty in implementing a bridge chip to a standard CSIX-L1 interface. If dynamic de-skew training is not employed, the bridge chip can directly pass through the different CSIX-L1 protocol elements, CFrames, and Dead Cycles. The horizontal parity must be recalculated on each side of the bridge chip. If the standard CSIX-L1 interface implements a CWord width that is greater than 32 bits, it must implement a synchronization mechanism for aligning the received 32-bit portions of the CWord before passing the CWord to the network processor. For transmitting the standard CSIX-L1 interface, the bridge chip must assert the start-of-frame signal for each 32-bit portion of the CWord, as the network processor only asserts it for the first 32-bit portion. If the bridge chip requires clock frequencies on the network processor interface and the standard CSIX-L1 interface to be appropriate, exact multiples of each other (2x for 32-bit CWord, 4x for 64-bit CWord, 6x for 96-bit CWord, and 8x for 128-bit CWord), then the bridge chip requires only minimal buffering and does not need to implement any flow control mechanisms. A slightly more complicated bridge allows incorporating dynamic de-skew training and/or independent clock frequencies for the network processor and standard CSIX-L1 interfaces. The bridge chip must implement a control and data FIFO for each direction and the link-level flow control mechanisms specified in the protocol using CRdy and DRdy. The FIFOs must be large enough to accommodate the response latency of the link-level flow control mechanisms. Idle CFrames and Dead Cycles are not directly passed through this more complicated bridge chip, but are discarded on reception and generated on transmission. The network processor interface of this bridge chip can support the dynamic de-skew training protocol extensions implemented on the network processor because it can send a training sequence to the network processor between CFrames without regard to CFrames arriving over the standard CSIX-L1 interface. (In the simpler bridge design, these CFrames must be forwarded immediately to the network processor.) Hardware Reference Manual 311 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.5 Dual Protocol (SPI and CSIX-L1) Support In many system designs that are less bandwidth-intensive, a single network processor can forward and process data from the framer to the fabric and from the fabric to the framer. A bridge chip must pass data between the network processor and multiple physical devices. The network processor supports multiplexing SPI-4.2 and CSIX-L1 protocol elements over the same transmitter and receiver physical interfaces, differentiated by a protocol signal that is de-asserted for SPI-4.2 protocol elements and asserted for CSIX-L1 protocol elements. In the dual protocol configuration, the CSIX-L1 configuration of the network processor corresponds to the dual chip, full duplex configuration. The flow control transmitter interface is looped back to the flow control receiver interface, either externally or internally. Only the LVTTL status interface is available for the SPI-4.2 interface. 8.9.5.1 Dual Protocol Receiver Support When the network processor receiver is configured for dual protocol support, the aggregate receiver buffer is partitioned in three ways: 50% for data CFrames (4 Kbytes), 37.5% for SPI-4.2 bursts (3 Kbytes) and 12.5% for control CFrames (1 Kbyte). The buffer sizes within each partition are independently configurable. Link-level flow control can be independently configured for assertion at thresholds of 25%, 50%, 75%, or 87.5%. For the traffic associated with each partition, an additional 680 bytes of packed FIFO storage is available to accommodate received traffic after assertion of link-level flow control. 8.9.5.2 Dual Protocol Transmitter Support When the network processor transmitter is configured for dual protocol support, the aggregate transmitter buffer is partitioned three ways, in the same proportions as the receiver. Each partition operates as a separate ring. The transmitter services each ring in round-robin order. If no CFrames are pending, an Idle CFrame is transmitted to update link-level flow control. If no SPI-4.2 bursts are pending, idle control words are not sent. 312 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.5.3 Implementation of a Bridge Chip to CSIX-L1 and SPI-4.2 A bridge chip can provide support for both standard CSIX-L1 and standard physical layer device interfaces such as SPI-3 or UTOPIA Level 3. The bridge chip must implement the functionality of the less trivial CSIX-L1 bridge chip described previously and additionally, implement bridge functionality between SPI-4.2 and the other physical device interfaces. The size of the FIFOs must be in accordance with the response times of the flow control mechanisms. Figure 116 is a block diagram of a dual protocol (SPI-4.2 and CSIX-L1) bridge chip. Figure 116. Block Diagram of Dual Protocol (SPI-4.2 and CSIX-L1) Bridge Chip DE-MUX CSIX-L1 Control SPI ARB Data DE-MUX SPI/ UTOPIA-3 SPI/ UTOPIA-3 Control ARB ARB DE-MUX Dual-Protocol Intel® IXP2800 Network Processor Interface Data SPI/ UTOPIA-3 SPI B2754-01 Hardware Reference Manual 313 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.6 Transmit State Machine Table 114 describes the transmitter state machine by providing guidance in interfacing to the network processor. The state machine is described as three separate state machines for SPI-4.2, training, and CSIX-L1. When each machine is inactive, it tracks the states of the other two state machines. 8.9.6.1 SPI-4.2 Transmitter State Machine The SPI-4.2 Transmit State Machine makes state transitions on each bus transfer of 16 bits, as described in Table 114. Table 114. SPI-4.2 Transmitter State Machine Transitions on 16-Bit Bus Transfers Current State Next State Conditions Idle Control No data pending and no training sequence pending, CSIX-L1 mode disabled. Payload Control Data pending and no training sequence pending, CSIX-L1 mode disabled. Training Training sequence pending, CSIX-L1 mode disabled. CSIX CSIX-L1 mode enabled. Payload Control Data Burst Always Data Burst Data Burst Until end of burst as programmed by software. Payload Control Data pending and no training sequence pending and CSIX-L1 mode not enabled. Idle Control No data to send or training sequence pending or CSIXL1 mode enabled. Idle Control Tracking Other State Machine States Training CSIX 314 Training Training SM not entering CSIX-L1 or SPI state. CSIX Training SM entering CSIX-L1 state. Payload Control Training SM entering SPI state and data pending. Idle Control Training SM entering SPI state and no data pending. CSIX CSIX-L1 SM not entering Training or SPI state. Training CSIX-L1 SM entering Training state. Payload Control CSIX-L1 SM entering SPI state and data pending. Idle Control CSIX-L1 SM entering SPI state and no data pending. Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.6.2 Training Transmitter State Machine The Training State Machine makes state transitions on each bus transfer of 16 bits, as described in Table 115. Table 115. Training Transmitter State Machine Transitions on 16-Bit Bus Transfers Current State Training Control Training Data Next State Conditions Training Control Until 10 control cycles. Training Data After 10 control cycles. Training Data Until 10 data cycles. Training Control After 10 data cycles and repetitions of training sequence or new training sequence pending. CSIX After 10 data cycles and no training sequence pending and CSIX-L1 mode enabled. SPI After 10 data cycles and No training sequence pending and CSIX-L1 mode disabled. Tracking Other State Machine States CSIX SPI 8.9.6.3 CSIX CSIX-L1 SM not entering SPI or Training state. SPI CSIX-L1 SM entering SPI state. Training Control CSIX-L1 SM entering Training state. SPI SPI SM not entering CSIX-L1 or Training state. CSIX SPI SM entering CSIX-L1 state. Training Control SPI SM entering Training state. CSIX-L1 Transmitter State Machine The CSIX-L1 Transmit State Machine makes state transitions on CWord boundaries. CWords can be configured to consist of 32, 64, 96, or 128 bits, corresponding to 2, 4, 6, or 8 bus transfers, as described in Table 116. Table 116. CSIX-L1 Transmitter State Machine Transitions on CWord Boundaries (Sheet 1 of 2) Current State Next State Conditions SoF CWord CFrame CWord Dead Cycle CFrame fits in a CWord. CFrame CWord CFrame CWord CFrame remainder pending. SoF CWord Un-flow-controlled CFrame pending, no training sequence pending, and SPI mode not enabled. Dead Cycle No un-flow-controlled CFrame pending or training sequence pending or requesting training sequence or SPI mode enabled and data pending. SoF CWord Un-flow-controlled CFrame pending and no training sequence pending and no SPI data pending and not requesting training sequence. Idle CFrame No un-flow-controlled CFrame pending and no training sequence pending and no SPI data pending and not requesting training sequence. Dead Cycle Hardware Reference Manual CFrame longer than a CWord. 315 Intel® IXP2800 Network Processor Media and Switch Fabric Interface Table 116. CSIX-L1 Transmitter State Machine Transitions on CWord Boundaries (Sheet 2 of 2) Current State Next State Dead Cycle Idle CFrame Conditions Requesting reception of training sequence and no training sequence pending. Training Training sequence pending. SPI Training sequence not pending and SPI data pending and not requesting training sequence. Dead Cycle Always. Tracking Other State Machine States SPI Training 8.9.7 SPI SPI SM not entering CSIX-L1 or Training state. SoF CWord SPI SM entering CSIX-L1 state and un-flow-controlled CFrame pending. Idle CFrame SPI SM entering CSIX-L1 state and un-flow-controlled CFrame not pending. Training SPI SM entering Training state. Training Training SM not entering CSIX-L1 or Training state. SoF CWord Training SM entering CSIX-L1 state and un-flowcontrolled CFrame pending. Idle CFrame Training SM entering CSIX-L1 state and un-flowcontrolled CFrame not pending. SPI Training SM entering SPI state. Dynamic De-Skew The Intel® IXP2800 Network Processor supports optional dynamic de-skew for the signals of the 16-bit data interface and the signals of the 4-bit flow control interface or the signals of the 2-bit SPI-4.2 LVDS status interface. (The flow control interface and the LVDS status interface are alternate configurations of the same signal balls and pads. They share the same de-skew circuits.) In both cases, eight evenly-spaced phases of the received clock are generated for each bit time. As the transition occurs during training a pattern, the best pair of clock phases is identified for sampling each received signal. An interpolated clock is generated from a pair of clock phases for each signal and that clock is used as a reference for sampling the data. This provides maximum quantization error in the sampling of the signals of 6.25%. 316 Hardware Reference Manual Intel® IXP2800 Network Processor Media and Switch Fabric Interface 8.9.8 Summary of Receiver and Transmitter Signals Figure 117 summarizes the Receiver and Transmitter Signals. Figure 117. Summary of Receiver and Transmitter Signaling RDAT (CSIX:TxData) [15:0] TDAT (CSIX:RxData) [15:0] DDR LVDS SPI-4.2 Data Path and Interface for CSIX Protocol RCTL (CSIX:TxSOF) RCLK (CSIX:TxClk) RPAR (CSIX:TxPar) TCTL (CSIX:RxSOF) TCLK (CSIX:RxClk) TPAR (CSIX:RxPar) RPROT TPROT RSTAT[1:0] LVTTL SPI-4.2 Status Interface TXCCLK or RSCLK TXCSOF TSCLK TSTAT[1:0] RXCCLK or TSCLK TXCDAT[1:0] or RSTAT[1:0] TXCDAT[3:2] Transmitter RSCLK Reciever TCLK_REF RXCDAT[1:0] or TSTAT[1:0] DDR LVDS SPI-4.2 Status Interface and Inter-Chip CSIX Flow Control RXCDAT[3:2] RXCSOF TXCPAR RXCPAR TXCFC RXCFC TXCSRB RXCSRB Intel® IXP2800 Network Processor B2755-01 Hardware Reference Manual 317 Intel® IXP2800 Network Processor Media and Switch Fabric Interface 318 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit PCI Unit 9 This section contains information on the IXP2800 Network Processor PCI Unit. 9.1 Overview The PCI Unit allows PCI target transactions to internal registers, SRAM, and DRAM. It also generates PCI initiator transactions from the DMA Engine, Intel XScale® core, and Microengines. The PCI Unit main functional blocks are shown in Figure 118 and include: • • • • • • • PCI Core Logic PCI Bus Arbiter DRAM Interface Logic SRAM Interface Logic Mailbox and Message registers DMA Engine Intel XScale® core Direct Access to PCI The main function of the PCI Unit is to transfer data between the PCI Bus and the internal devices, which are the Intel XScale® core, the internal registers, and memories. These are the data transfer paths supported as shown in Figure 119: • PCI Slave read and write between PCI and internal buses — CSRs (PCI_CSR_BAR) — SRAM (PCI_SRAM_BAR) — DRAM (PCI_DRAM_BAR) • Push/Pull Master (Intel XScale® core, Microengine, or PCI) accesses to internal registers within PCI unit • DMA — Descriptor read from SRAM — Data transfers between PCI and DRAM • Push/Pull Master (Intel XScale® core and Microengines) direct read and write to PCI Bus Note: Detailed information about CSRs is contained in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Hardware Reference Manual 319 Intel® IXP2800 Network Processor PCI Unit Figure 118. PCI Functional Blocks 64-bit PCI Bus (@ 33 / 66 MHz) PCI UNIT Core Interface Initiator Address FIFO PCI Bus Host Functions Initiator Read FIFO Initiator Write FIFO PCI Configuration Target Read FIFO Target Write FIFO Target Address FIFO Slave Write Buffer Slave Address Register FIFO Bus (FBUS) Master Address Register PCI CSRs DMA Rad/Write Buffer DMA DRAM Interface DMA SRAM Interface Direct Buffer Direct Interface Slave Interface Slave Interface DRAM Data Interface SRAM Data Interface Address Interace Master Interface Command Bus Slave 32 Pull SRAM 32 Push Bus 91 Command Bus Command Bus Master 91 Command Bus 32 32 Pull Push SRAM BUS 64 64 Pull Push DRAM BUS A9765-01 320 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit Figure 119. Data Access Paths PCI UNIT TGT CSR R/W CSRs (via SRAM Push/Pull Buses) TGT DRAM R/W DRAM (via DRAM Push/Pull Buses) TGT SRAM R/W SRAM (via SRAM Push/Pull Buses) Target FIFO PCI Bus Slave Buffer CSR & Conf Registers Local Internal Reg R/W Descriptor Registers DMA Buffer Master FIFO/ Register Note: Command Master Intel XScale® Core Register Intel XScale® Core, MIcroengines, and PCI (via SRAM Push/Pull Buses) Unit Descriptor Read SRAM (via SRAM Push/Pull Buses) DMA Memory R/W DRAM (via DRAM Push/Pull Buses) Push/Pull Bus to PCI R/W Push/Pull Command Master (via SRAM Push/Pull Buses) Command Slave A9766-03 9.2 PCI Pin Protocol Interface Block This block generates the PCI compliant protocol logic. It operates either as an initiator or a target device on the PCI Bus. As an initiator, all bus cycles are generated by the core. As a PCI target, the core responds to bus cycles that have been directed towards it. On the PCI Bus, the interface supports interrupts, 64-bit data path, 32-bit addressing, and single configuration space. The local configuration registers are accessible from the PCI Bus or from the Intel XScale® core through an internal path. The PCI block interfaces with the other sub-blocks with a FIFO bus called FBus. The FBus speed is the same as the internal Push/Pull bus speed. The FIFOs are implemented with clock synchronization logic between the PCI speed and the internal Push/Pull bus speed. There are four data FIFOs and two address FIFOs in the core. The separate slave and master data FIFOs allows simultaneous operations and multiple outstanding PCI bus transfers. Table 117 lists the FIFO sizes. The target address FIFO latches up to four PCI read or write addresses. Hardware Reference Manual 321 Intel® IXP2800 Network Processor PCI Unit If a read address is latched, the subsequent cycles will be retried and no address will be latched until the read completes. The initiator address FIFO can accumulate up to four addresses that can be PCI reads or writes. These FIFOs are inside the PCI Core, which stores data received from the PCI Bus or data to be sent out to the PCI Bus. There are additional buffers implemented in other sub-blocks that buffers data to and from the internal push/pull buses. Table 117. PCI Block FIFO Sizes Location Depth Target Address 4 Target Write Data 8 Target Read Data 8 Initiator Address 4 Initiator Write Data 8 Initiator Read Data 8 Table 118 lists the maximum PCI Interface loading. Table 118. Maximum Loading Bus Interface PCI 9.2.1 Maximum Number of Loads Four loads at 66-MHz bus frequency Eight loads at 33-MHz bus frequency Trace Length (inches) 5 to 7 PCI Commands Table 119 lists the supported PCI commands and identifies them as either a target or initiator. Table 119. PCI Commands (Sheet 1 of 2) Support C_BE_L Target Initiator Interrupt Acknowledge Not Supported Supported 0x1 Special Cycle Not Supported Supported 0x2 IO Read cycle Not Supported Supported 0x3 IO Write cycle Not Supported Supported 0x4 Reserved – – 0x0 322 Command 0x5 Reserved – – 0x6 Memory Read Supported Supported 0x7 Memory Write Supported Supported 0x8 Reserved – – 0x9 Reserved – – 0xA Configuration Read Supported Supported 0xB Configuration Write Supported Supported Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit Table 119. PCI Commands (Sheet 2 of 2) Support C_BE_L Command Target Initiator 0xC Memory Read Multiple Aliased as Memory Read except SRAM accesses where the number of Dwords to read is given by the cache line size. Supported 0xD Reserved — — 0xE Memory read line Aliased as Memory Read except SRAM accesses where the number of Dwords to read is given by the cache line size. Supported 0xF Memory Write and Invalidate Aliased as Memory Write. Not Supported PCI functions not supported by the PCI Unit include: • • • • • • 9.2.2 IO Space response as a target Cacheable memory VGA palette snooping PCI Lock Cycle Multi-function devices Dual Address cycle IXP2800 Network Processor Initialization When the IXP2800 Network Processor is a target, the internal CSR, DRAM, or SRAM address is generated when the PCI address matches the appropriate base address register. The window sizes to the SRAM and DRAM Base Address Registers (BARs) can be optionally set by PCI_SWIN and PCI_DWIN strap pins or mask registers depending on the state of the PROM_BOOT signal. There are two initialization modes supported. They are determined by the PROM_BOOT signal sampled on the de-assertion edge of Chip Reset. If PROM_BOOT is asserted, then there is a boot prom in the system. The Intel XScale® core will boot from the prom and be able to program the BAR space mask registers. If PROM_BOOT is not asserted, the Intel XScale® core is held in reset and the BAR sizes are determined by strap pins. Hardware Reference Manual 323 Intel® IXP2800 Network Processor PCI Unit 9.2.2.1 Initialization by the Intel XScale® Core The PCI unit is initialized to an inactive, disabled state until the Intel XScale® core has set the Initialize Complete bit in the Control register. This bit is set after the Intel XScale® core has initialized the various PCI base address and mask registers (which should occur within 1 ms of the end of PCI_RESET). The mask registers are used to initialize the PCI base address registers to values other than the default power-up values, which includes the base address visible to the PCI host and the prefetchable bit in the base registers (see Table 120). Table 120. PCI BAR Programmable Sizes Base Address Register Address Space Sizes PCI_CSR_BAR CSR 1 Mbyte PCI_SRAM_BAR SRAM 0 Bytes; 128, 256, or 512 Kbytes; 1, 2, 4, 8, 16, 32, 64, 128, or 256 Mbytes PCI_DRAM_BAR DRAM 0 Bytes; 1, 2, 4, 8, 16, 32, 64, 128, 256, or 512 Mbytes; 1 Gbyte When the PCI unit is in the inactive state, it returns retry responses as the target of PCI configuration cycles if the PCI Unit is not configured as the PCI host. In the case of PCI Unit being configured as the PCI host, the PCI bus will be held in reset until the Intel XScale® core completes the PCI Bus configurations and clears the PCI Reset (as described in Section 9.2.11). Note: 9.2.2.2 During PCI bus enumeration initiated by the Intel XScale® core, reading a non-existent address (an address for which no target asserts DEVSEL) results in a Master Abort. The Master Abort then results in an Intel XScale® Core Data Abort Exception that must be handled by the enumeration software. When this occurs, the RMA bit in the PCI_CONTROL register and the RX_MA bit in the PCI_CMD_STAT register is set. The enumeration software must then clear these bits before continuing with the enumeration process. Initialization by a PCI Host In this mode, the PCI Unit is not hosting the PCI Bus regardless of the PCI_CFG[0] signal. The host processor is allowed to configure the internal CSRs while the Intel XScale® core is held in reset. The host processor configures the PCI address space, the memory controllers, and other interfaces. Also, the program code for the Intel XScale® core may be downloaded into local memory. The host processor then clears the Intel XScale® core reset bit in the PCI Reset register. This deasserts the internal reset signal to the Intel XScale® core and the core begins its initialization process. The PCI_SWIN and PCI_DWIN strap signals are used to select the window sizes to SRAM BAR and DRAM BAR (see Table 121). Table 121. PCI BAR Sizes with PCI Host Initialization Base Address Register 324 Address Space Sizes PCI_CSR_BAR CSR 1 Mbyte PCI_SRAM_BAR SRAM 32, 64, 128, or 256 Mbytes PCI_DRAM_BAR DRAM 128, 256, or 512 Mbytes; 1 Gbyte Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.2.3 PCI Type 0 Configuration Cycles A PCI access to a configuration register occurs when the following conditions are satisfied: • PCI_IDSEL is asserted. (PCI_IDSEL only supports PCI_AD[23:16] bits). • The PCI command is a configuration write or read. • The PCI_AD [1:0] are 00. A configuration register is selected by PCI_AD[7:2]. If the PCI master attempts to do a burst longer than one 32-bit Dword, the PCI unit signals a target disconnect. PCI unit does not issue PCI_ACK64 for configuration cycle. 9.2.3.1 Configuration Write A write occurs if the PCI command is a Configuration Write. The PCI byte-enables determine which bytes are written.If a nonexistent configuration register is selected within the configuration register address range, the data is discarded and no error action is taken. 9.2.3.2 Configuration Read A read occurs if the PCI command is a Configuration Read. The data from the configuration register selected by PCI_AD[7:2] is returned on PCI_AD[31:0]. If a nonexistent configuration register is selected within the configuration register address range, the data returned are zeros and no error action is taken. 9.2.4 PCI 64-Bit Bus Extension The PCI Unit is in 64-bit mode when PCI_REQ64_L is sampled active on the de-assertion edge of PCI Reset. These are the general rules in assertions of PCI_REQ64_L and PCI_ACK64_L: As a target: 1. PCI Unit asserts PCI_ACK64_L only in 64-bit mode. 2. PCI Unit asserts PCI_ACK64_L only to target cycles that matches the PCI_SRAM_BAR and PCI_DRAM_BAR and a 64-bit transaction is negotiated. 3. PCI Unit does not assert PCI_ACK64_L target cycles that matches the PCI_CSR_BAR even a 64-bit transaction is negotiated. As an initiator: 1. PCI Unit asserts PCI_REQ64_L only in 64-bit mode. 2. PCI Unit asserts PCI_REQ64_L to negotiate a 64-bit transaction only if the address is double Dword aligned (PCI_AD[2] must be 0 during the address phase). 3. If the target responses to PCI_REQ64_L with PCI_ACK64_L de-asserted, PCI Unit will complete the transaction acting as a 32-bit master by not asserting PCI_REQ64_L on subsequent cycle. 4. If the target responses to PCI_REQ64_L with PCI_ACK64_L de-asserted and PCI STOP_L asserted, PCI Unit will complete the transaction by not asserting PCI_REQ64_L on subsequent cycles. Hardware Reference Manual 325 Intel® IXP2800 Network Processor PCI Unit 9.2.5 PCI Target Cycles The following PCI transactions are not supported by the PCI Unit as a target: • • • • • • • 9.2.5.1 IO read or write Type 1 configuration read or write Special cycle IACK cycle PCI Lock cycle Multi-function devices Dual Address cycle PCI Accesses to CSR A PCI access to a CSR occurs if the PCI address matches the CSR base address register (PCI_CSR_BAR).The PCI Bus will be disconnected after the first data-phase if the data is more than one data phase. For 64-bit CSR accesses, the PCI Unit will not assert PCI_ACK64_L on the PCI bus. 9.2.5.2 PCI Accesses to DRAM A PCI access to DRAM occurs if the PCI address matches the DRAM base address register (PCI_DRAM_BAR). 9.2.5.3 PCI Accesses to SRAM A PCI access to SRAM occurs if the PCI address matches the SRAM base address register (PCI_SRAM_BAR). The SRAM is organized as three distinct channel and the address is not contiguous. The PCI_SRAM_BAR programmed window size will be used as the total memory space. The upper two bits of the address will be used as channel number in addressing the particular channel and the remaining address bits will be used as the memory address. 9.2.5.4 Target Write Accesses from the PCI Bus A PCI write occurs if the PCI address matches one of the base address registers and the PCI command is either a Memory Write or Memory Write and Invalidate. The core will store up to four write addresses into the target address FIFO along with the BAR IDs of the transaction. The write data will be stored into the target write FIFO.When either the address FIFO or data FIFO is full, a retry is forced on the PCI Bus in response to write accesses. The FIFO data is forwarded to an internal slave buffer before being written into SRAM or DRAM. If the FIFO fills during the write, the address is crossing the 64-byte address boundary, or in the case of the command being a burst to the CSR space, the PCI unit signals target disconnect to the PCI master. 326 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.2.5.5 Target Read Accesses from the PCI Bus A PCI read occurs if the PCI address matches one of the base address registers and the PCI command is either a Memory Read, Memory Read Line, or Memory Read Multiple. The read is completed as a PCI delayed read. That is, on the first occurrence of the read, the PCI unit signals a retry to the PCI master,. If there is no prior read pending, the PCI unit latches the address and command and places it into the target address FIFO. When the address reaches the head of the FIFO, the PCI unit reads the DRAM. Subsequent reads will also get retry responses until data is available. When the read data is returned into the PCI Read FIFO, the PCI unit begins to decrement its discard timer. If the PCI bus master has not repeated the read by the time the timer reaches 0, the PCI unit discards the read data, invalidates the delayed read address and sets Discard Timer Expired (bit 16) in the Control register (PCI_CONTROL). If enabled, the PCI unit interrupts the Intel XScale® core. The discard timer counts 215 (32,768) PCI clocks. When the master repeats the read command, the PCI unit compares the address and checks that the command is a Memory Read, a Memory Read Line, or a Memory Read Multiple. If there is a match, the response is as follows: • If the read data has not yet been read, the response is retry. • If the read data has been read, assert trdy_l and deliver the data. If the master attempts to continue the burst past the amount of data read, the PCI unit signals a target disconnect. • CSR reads are always 32-bit reads. • If the discard timer has expired for a read, the subsequent read will be treated as a new read. 9.2.6 PCI Initiator Transactions PCI master transactions are caused by either the Intel XScale® core loads and stores that fall into the various PCI address spaces, Microengine read and write commands, or by the DMA engine. The command register (PCI_COMMAND) bus master bit (BUS_MASTER) must be set for the PCI unit to perform any of the initiator transactions. The PCI cycle is initiated when there is an entry in the PCI Core Interface initiator address FIFO. The core handshakes with the master interface with the FBus FIFO status signals. The PCI core supports both burst and non-burst master read transfers by the burst count inputs (FB_BstCntr[7:0]), driven by Master Interface to inform the core the burst size. For a Master write, FB_WBstonN indicates to the PCI core whether the transfers are burst or non-burst, on a 64-bit double Dword basis. The PCI core supports read and write memory cycles as an initiator while taking care of all disconnect/retry situations on the PCI Bus. 9.2.6.1 PCI Request Operation If an external arbiter is used (PCI_CFG_ARB[1] is not active), the reql[0] and gnt[0] are connected to the PCI_REQ_L and PCI_GNT_L pins. Otherwise, they are connected to the internal arbiter. The PCI unit asserts req_l[0] to act as a bus master on the PCI. If gnt_l[0] is asserted, the PCI unit can start a PCI transaction regardless of the state of req_l[0]. When the PCI unit requests the PCI bus, it performs a PCI transaction when gnt_l[0] is received. Once req_l[0] is asserted, the PCI unit Hardware Reference Manual 327 Intel® IXP2800 Network Processor PCI Unit never de-asserts it prior to receiving gnt_l[0] or de-asserts it after receiving gnt_l[0] without doing a transaction. PCI Unit de-asserts req_l[0] for two cycles when it receives a retry or disconnect response from the target. 9.2.6.2 PCI Commands The following PCI transactions are not generated by PCI Unit as an initiator: • PCI Lock Cycle • Dual Address cycle • Memory Write and Invalidate 9.2.6.3 Initiator Write Transactions The following general rules apply to the write command transactions: • If the PCI unit receives either a target retry response or a target disconnect response before all of the write data has been delivered, it resumes the transaction at the first opportunity, using the address of the first undeliverable data. • If the PCI unit receives a master abort, it discards all of the write data from that transaction and sets the status register (PCI_STATUS) received master abort bit, which, if enabled, interrupts the Intel XScale® core. • If the PCI unit receives a target abort, it discards all of the remaining write data from that transaction, if any, and sets the status registers (PCI_STATUS) received target abort bit, which, if enabled, interrupts the Intel XScale® core. • The PCI unit can dessert frame_l prior to delivering all data due to the master latency timer, If this occurs, it resumes the write at the first opportunity, using the address of the first undeliverable data. 9.2.6.4 Initiator Read Transactions The following general rules apply to the read command transactions: • If the PCI unit receives a target retry, it repeats the transaction at the first opportunity until the whole transaction is completed. • If the PCI unit receives a master abort, it substitutes 0xFFFF FFFF for the read data and sets the status register (PCI_STATUS) received master abort bit, which, if enabled, interrupts the Intel XScale® core. • If the PCI unit receives a target abort, it sets the status registers (PCI_STATUS) received target abort bit, which, if enabled, interrupts the Intel XScale® core and does not try to get any more read data. PCI unit will substitute 0xFFFF FFFF for the data which are not read and complete the cycle. 9.2.6.5 Initiator Latency Timer When the PCI unit begins PCI transaction as an initiator, asserting frame_l, it begins to decrement its master latency timer. When the timer value reaches 0, the PCI unit checks the value of gnt_l[0]. If gnt_l[0] is de-asserted, the PCI unit de-asserts frame_l (if it is still asserted) at the earliest opportunity. This is normally the next data phase for all transactions. 328 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.2.6.6 Special Cycle As an initiator, special cycles are broadcast to all PCI agents, so DEVSEL_L is not asserted and no error can be received. 9.2.7 PCI Fast Back-to-Back Cycles The core supports fast back-to-back target cycles on the PCI Bus. The core does not generate initiator fast back-to-back cycles on the PCI Bus regardless of the value in the fast back-to-back enable bit of the Status and Command register in the PCI configuration space. 9.2.8 PCI Retry As a slave, the PCI Unit generates retry on: • A slave write when the Data write FIFO is full. • When address FIFO is full • Data read is handled as delay transactions. If the HOG_MODE bit is set in the PCI_CONTROL register, the bus will be held for 16 PCI clocks before asserting retry. As an initiator, the core supports retry by maintaining an internal counter of the current address. On receiving a retry, the core de-asserts PciFrameN and then re-assert PciFrameN with the current address from the counter. 9.2.9 PCI Disconnect As a slave, it disconnects for the following conditions: • • • • Bursted PCI configuration cycle. Bursted access to PCI_CSR_BAR. PCI reads past the amount of data in the read FIFO. PCI burst cycles that cross 1K PCI address boundary which includes PCI burst cycles that cross memory decodes from the core as a target to decodes that are outside the core (e.g., started inside a BAR and ends outside of that BAR). As an initiator, the core supports retry and disconnect by maintaining an internal counter of the current address. On receiving a retry or disconnect, the core de-asserts PciFrameN and then reassert PciFrameN with the current address + “current transfer byte size” from the counter. 9.2.10 PCI Built-In System Test The IXP2800 Network Processor supports BIST when there is an external PCI host. The PCI host will set the STRT bit in the PCI_CACHE_LAT_HDR_BIST configuration register. An interrupt is generated to the Intel XScale® core if it is enabled by the Intel XScale® core Interrupt Enable register. The Intel XScale® core software can respond to the interrupt by running an applicationspecific test. Upon successful completion of the test, the Intel XScale® core will reset the STRT bit. If this bit is not reset two seconds after the PCI host sets the STRT bit, the host will indicate that the Network Processor failed the test. Hardware Reference Manual 329 Intel® IXP2800 Network Processor PCI Unit 9.2.11 PCI Central Functions The CFG_RSTDIR pin is active high for enabling the PCI Unit central function. The CFG_PCI_ARB(GPIO[2]) pin is the strap pin for the internal arbiter. When this strap pin is high during reset then the XPI Unit owns the arbitration. The CFG_PCI_BOOT_HOST(GPIO[1]) pin is the strap pin for the PCI host.When PCI_BOOT_HOST is asserted during reset then PCI Unit will support as a PCI host. Table 122. Legal Combinations of the Strap Pin Options CFG_PCI_BOOT_HOST (GPIO[1]) CFG_PCI_ARB (GPIO[2]) CFG_PCI_RSTDIR (Central function) CFG_PROM_BOOT (GPIO[0]) OK 0 0 0 0 OK 0 0 0 1 OK 0 0 1 1 Not supported 0 1 0 x OK 0 1 1 1 Not supported 1 0 0 x OK 1 0 1 1 Not supported 1 1 0 x OK 1 1 1 1 Note 9.2.11.1 * CFG_PCI_RSTDIR = 1 then central function. * CFG_PCI_BOOT_HOST must be central function. * CFG_PCI_ARB must be central function. PCI Interrupt Inputs The PCI Unit supports two interrupt lines from the PCI Bus as host. One of the interrupt lines will be open-drain output and input. The other interrupt line will be selected as PCI interrupt input. Both the interrupt lines can be enabled in the Intel XScale® core Interrupt Enable register. 9.2.11.2 PCI Reset Output If the IXP2800 Network Processor is central function (CFG_RSTDIR =1), PCI Unit will be asserting the PCI_RST_L after the system power-on. The Intel XScale® core has to write to the PCI External Reset bit in the IXP2800 Network Processor’s Reset register to de-assert the PCI_RST_L. In this case, chip reset CLK_NRESET) is driven by a signal other than PCI_RST_L. When the PCI Unit is not configured as the central function (CFG_RSTDIR =0), PCI_RST_L is used as a chip reset input. 330 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.2.11.3 PCI Internal Arbiter The PCI unit contains a PCI bus arbiter that supports two external masters in addition to the PCI Unit’s initiator interface. To enable the PCI arbiter, the CFG_PCI_ARB(GPIO[2]) strapping pin must be 1 during reset. As shown in Figure 120, the local bus request and grant pair become externally not visible. These signals will be made available to external debug pins for debug purpose. Figure 120. PCI Arbiter Configuration Using CFG_PCI_ARB(GPIO[2]) Pin CFG_PCI_ARB(GPIO[2]) = 0 (during reset) CFG_PCI_ARB(GPIO[2]) = 1(during reset) GNT_L[0] PCI Bus Grant Input to IXP2800 Network Processor PCI Bus Grant Output to Master 1 GNT_L[1] Not Used, Float PCI Bus Grant Output to Master 2 REQ_L[0] PCI Bus Request Output from IXP2800 Network Processor PCI Bus Request Input from Master 1 REQ_L[1] Not Used, Tied High PCI Bus Request Input from Master 1 PCI UNIT PCI Arbiter GNT_L[1] REQ_L[2:0] GNT_L[0] GNT_L[2:0] 1 PCI Master State Machine 0 CFG_PCI_ARB GNT_L REQ_L REQ_L[0] REQ_L[1] A9767-03 The arbiter uses a simple round-robin priority algorithm, The arbiter asserts the grant signal corresponding to the next request in the round-robin during the current executing transaction on the PCI bus (this is also called hidden arbitration). If the arbiter detects that an initiator has failed to assert frame_l after 16 cycles of both grant assertion and PCI bus idle condition, the arbiter deasserts the grant. That master does not receive any more grants until it de-asserts its request for at least one PCI clock cycle. Bus parking is implemented in that the last bus grant will stay asserted if no request is pending. To prevent bus contention, if the PCI bus is idle, the arbiter never asserts one grant signal in the same PCI cycle in which it de-asserts another. It de-asserts one grant, and then asserts the next grant after one full PCI clock cycle has elapsed to provide for bus driver turnaround. Hardware Reference Manual 331 Intel® IXP2800 Network Processor PCI Unit 9.3 Slave Interface Block The slave interface logic supports internal slave devices interfacing to the target port of the FBus. • CSR — register access cycles to local CSRs. • DRAM — memory access cycles to the DRAM push/pull Bus. • SRAM — memory access cycles to the SRAM push/pull Bus. The slave port of the FBus is connected to a 64-byte write buffer to support bursts of up to 64 bytes to the memory interfaces. The slave read data are directly downloaded into the FBus read FIFO. See Table 123. Table 123. Slave Interface Buffer Sizes Location Slave Address Slave Write Slave Read Buffer Depth 1 64 Byte 0 Usage CSR, SRAM, DRAM SRAM, DRAM None As a push/pull command bus master, the PCI Unit translates these accesses into different types of push/pull command. As the push/pull data bus target, the write data is sent through the pull data bus and the read data is received on the push data bus. 9.3.1 CSR Interface The internal Control and Status registers data is directed to or from the Slave FIFO port of the PCI core FBus when the BAR id matches PCI_CSR_BAR (BAR0). The CSR accesses from the PCI Bus directed towards CSRs not in PCI Unit is translated into a push/pull CSR type command. PCI local CSRs are handled within the PCI Unit. For writes, the data is sent when the pull bus is valid and the ID matches. The address is unloaded from the FBus target address FIFO as indication to the PCI core logic that the cycle is completed. The slave write buffer is not used for CSR access. For reads, the data is loaded into the target receive FIFO as soon as the push bus is valid and the ID matches. The address is unloaded from the FBus address FIFO. Note: Target reads to the Scratch unit must always be in multiples of 32-bit (PCI_CBE_L[3:0] =0x0) as the Scratch unit only supports 32-bit accesses. One example of a PCI host access to internal registers is the initialization of internal registers and memory to enable the Intel XScale® core to boot off the DRAM in the absence of a boot up PROM. The accesses to the CSRs inside the PCI Unit are completed internally without sending the transaction out to the push pull bus, just like the other internal register accesses. 332 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.3.2 SRAM Interface The SRAM interface connects the FBus to the internal push/pull command bus and the SRAM push/pull data buses. Request to memory is sent on the command bus. Data request is received as valid push/pull ID sent by the SRAM push/pull data bus. If the PCI_SRAM_BAR is used, the target state machine generates a request to the command bus for SRAM access. Once the grant is received, the address, then data is directed between the slave FIFOs of the PCI core and the SRAM push/pull bus. 9.3.2.1 SRAM Slave Writes The slave write buffer is used to support memory burst accesses. The buffer is added to guarantee data transfer for each clock and burst size can be determined before memory request is issued. Data is assembled in the buffers before being sent to memory for SRAM write. On the push/pull bus, AM access can start at any address and have length up to 16 Dwords as shown in Figure 121. For masked writes, only size 1 is supported to transfer up to four bytes. Figure 121. Example of Target Write to SRAM of 68 Bytes Memory Transfer Address Byte Enables Size 0011 2 bytes 1111 64 bytes 0x0 PCI Bus Byte Enables Internal Bus Data 0x8 00111111 Byte Lane 00000000 1111 00000000 1111 00000000 1111 00000000 1111 00000000 1111 00000000 1111 00000000 1111 00000000 1111 11111100 1111 1111 1111 1111 1111 1111 1111 Slave Write Burst to memory Starting address = 0x4 0x48 1100 2 bytes A9768-01 The slave interface also has to make sure there is enough data in the slave write buffer to complete the memory data transfer before making a memory request. Hardware Reference Manual 333 Intel® IXP2800 Network Processor PCI Unit 9.3.2.2 SRAM Slave Reads For a slave read from SRAM, a 32-bit DWORD is fetched from the memory for memory read command, one cache line is fetched for memory read line command, and two cache lines are read for memory read multiple command. Cache line size is programmable in the CACHE_LINE field of the PCI_CACHE_LAT_HDR_BIST configuration register. If the computed read size is greater than 64 bytes, the PCI SRAM read will default to the maximum of 64 bytes. No pre-fetch is supported in that the PCI Unit will not read beyond the computed read size. The PCI core resets the target read FIFO before issuing a memory read data request on FBus. The maximum size of SRAM data read is 64 bytes. The PCI core will disconnect at the 64-byte address boundary. 9.3.3 DRAM Interface The memory is accessed using the push/pull mechanism. Request to memory is sent on the command bus. If the PCI_DRAM_BAR is used, the target state machine generates a request to the command bus for DRAM access with the address in the slave address FIFO. Once the push/pull request is received. The data is directed between the Slave FIFOs of the PCI core and DRAM push/ pull bus. 9.3.3.1 DRAM Slave Writes The slave write buffer is used to support memory burst accesses. The buffer is added to guarantee data transfer for each clock and burst size can be determined before memory request is issued. Data is assembled in the buffers before being sent to memory for memory write. DRAM target write access is only required to be 8-byte address aligned and the address does not wrap around the 64-byte address boundary on a DRAM burst. Each 8-byte access that is a partial write to the memory, is treated as single write. Remaining writes of the 64-byte segment is written as one single burst. Transfers that cross a 64 -byte segment are split into separate transfers. Figure 123 splits the 68-byte transfers into two partial 8-byte transfers to address 06 and address 48 and one 56-byte burst transfer in the first 64-byte segment from address 08 to 38 and one 8-byte transfer to address 40. For write to DRAM on the push/pull bus, the burst must be broken down into address aligned smaller transfer sizes (see Figure 122). The Target interface also must make sure there is enough data in the target write buffer to complete the memory data transfer before making a memory request. 334 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit Figure 122. Example of Target Write to DRAM of 68 Bytes Memory Transfer Address Byte Enables Size 0x0 PCI Bus Byte Enables 00111111 00000000 Internal Bus Data 00000011 1 64-bit double Dword 0x08 11111111 11111111 Byte Lane 11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000 11111111 00000000 00000000 11111100 6 64-bit double Dwords 0x48 11000000 1 64-bit double Dword Slave Write Burst to memory Starting address = 0x6 A9769-02 9.3.3.2 DRAM Slave Reads For target reads from IXP2800 Network Processor memory, the entire 64-byte block is fetched from DRAM. For target reads from IXP2800/IXP2850 Network Processor memory, the block size is 16 bytes. Depending on the address for the target request, extra data is discarded at the beginning until the target address is reached. Also, extra data is discarded at the end of the transfer also when the burst ends in the middle of a data block. No pre-fetch is supported for DRAM access. See Figure 123. Hardware Reference Manual 335 Intel® IXP2800 Network Processor PCI Unit Note: The IXP2800/IXP2850 always disconnects after transferring 16-bytes for DRAM target reads. The PCI core will also disconnect at a 64-byte address boundary. Figure 123. Example of Target Read from DRAM Using 64-Byte Burst Memory Transfer Address Byte Enables Size 11111111 16 Byte Internal Bus Data PCI Bus Address Byte Enables 0x00 0x0 00000000 00000000 11111111 0x10 Disconnect 11111111 11111111 11111111 0x10 Byte Lane Swap 00000000 00000000 11111111 11111111 11111111 Slave Read Burst from memory Starting address = 0x0 Transfer Size - 32 bytes A9770-02 The PCI core resets the read FIFO before issuing a memory read data request on FBus. The PCI core will disconnect at the 64-byte address boundary. 9.3.4 Mailbox and Doorbell Registers Mailbox and Doorbell registers provide hardware support for communication between the Intel XScale® core and a device on the PCI Bus. Four mailbox registers are provided so that messages can be passed between the Intel XScale® core and a PCI device. All four registers are 32 bits and can be read and written with byte resolution from both the Intel XScale® core and PCI. How the registers are used is application dependent and the messages are not used internally by the PCI Unit in any way. The mailbox registers are often used with the Doorbell interrupts. Doorbell interrupts provide an efficient method of generating an interrupt as well as encoding the purpose of the interrupt. The PCI Unit supports an Intel XScale® core Doorbell register that is used by a PCI device to generate an Intel XScale® core FIQ and a separate PCI Doorbell register that is used by the Intel XScale® core to generate a PCI interrupt. A source generating the Doorbell interrupt can write a software defined bitmap to the register to indicate a specific purpose. This bitmap is translated into a single interrupt signal to the destination (either a PCI interrupt or a IXP2800 Network Processor interrupt). When an interrupt is received, the Doorbell registers can be read and the bit mask can be interpreted. If a larger bit mask is required than that is provided by the Doorbell register, the Mailbox registers can be used to pass up to four 32-bit blocks of data. 336 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit The doorbell interrupts are controlled through the registers shown in Table 124. Table 124. Doorbell Interrupt Registers Register Name Description Intel XScale® core Doorbell Used to generate the Intel XScale® core Doorbell interrupts. Intel XScale® core Doorbell Setup Used to initialize the Intel XScale® core Doorbell register and for diagnostics. PCI Doorbell Used to generate the PCI Doorbell interrupts. PCI Doorbell Setup Used to initialize the PCI Doorbell register and for diagnostics. The Intel XScale® core and PCI devices write to the corresponding DOORBELL register to generate up to 32 doorbell interrupts. Each bit in the DOORBELL register is implemented as an SR flip-flop. The Intel XScale® core writes a 1 to set the flip-flop and the PCI device writes a 1 to clear the flip-flop. Writing a 0 has no effect on the registers. The PCI interrupt signal is the output of an NOR functions of all the PCI DOORBELL register bits (outputs of the SR flip-flops). The Intel XScale® core interrupt signal is the output of an NAND function of all the Intel XScale® core DOORBELL register bits (outputs of the SR flip-flops). To assert an interrupt (i.e., to “push a doorbell”): • A write of 1 to the corresponding bit of the DOORBELL register generates an interrupt. This is the case for either PCI device or the Intel XScale® core, since writing 1 changes the doorbell bit to the proper asserted state (i.e., 0 for an Intel XScale® core interrupt and 1 for a PCI interrupt). To dismiss an interrupt: • A write of 1 to the corresponding bit of the DOORBELL register clears an interrupt. This is the case for either PCI device or the Intel XScale® core, since writing 1 changes the doorbell bit to the proper de-asserted state (i.e., 1 for an Intel XScale® core interrupt and 0 for a PCI interrupt). Figure 124 and Figure 125 illustrate how a Doorbell interrupt is asserted and cleared by both the Intel XScale® core and a PCI device. Figure 124. Generation of the Doorbell Interrupts to PCI PCI_INT# Q 1. Write 1 to set bit and Generate a PCI interrupt. S DOORBELL R Register D 2. PCI Reads PCI_DOORBELL to determine the Mailbox interrupt (e.g., reads 0x8000 0300). 3. PCI Writes back read value to clear interrupt. (e.g., write 0x8000 03000). A9771-01 Hardware Reference Manual 337 Intel® IXP2800 Network Processor PCI Unit Figure 125. Generation of the Doorbell Interrupts to the Intel XScale® Core FIQ or IRQ 2. Intel XScale® Core Reads XSCALE_DOORBELL to determine the Doorbell interrupt (e.g.; reads 0x0030 F2F1). Q R Intel XScale® Core DOORBELL Register D S 1. PCI device write 1 to clear bit and generate a FIZ/IRQ. 3. Intel XScale® Core inverts the read value and write back the results to clear interrupt (e.g., write 0x0030 F2F1 ^ 0xFFFF FFFF = 0xFFCF 0C0E). A9772-02 The Doorbell Setup register allows the Intel XScale® core and a PCI device to perform two functions that are not possible using the Doorbell register. This register is used during setup and diagnostics and is not used during normal operations. First, it allows the Intel XScale® core and PCI device to clear an interrupt that it has generated to the other device. If the Intel XScale® core sets an interrupt to PCI device using the Doorbell register, the PCI device is the only one that can use the Doorbell register to clear the interrupt by writing one. With the Doorbell setup register, the Intel XScale® core can clear the interrupt by write 0 to it. Second, it allows the Intel XScale® core and PCI device to generate a doorbell interrupt to itself. This can be used for diagnostic testing. Each bit in the Doorbell Setup register is mapped directly to the data input of the Doorbell register such that the data is directly written into the Doorbell register. During system initialization, the doorbell registers must be initialized by clearing the interrupt bits in the Doorbell register using the Doorbell Setup register. This is done by writing zeros to the PCI Doorbell setup register and ones to the Intel XScale® core Doorbell setup register. 338 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.3.5 PCI Interrupt Pin An external PCI interrupt can be generated in the following way: The Intel XScale® core initiates a Doorbell interrupt XSCALE_INT_ENABLE. • • • • One or more of the DMA channels have completed the DMA transfers. The PNI bit is cleared by the Intel XScale® core to generate a PCI interrupt An internal functional unit generates either an interrupt or an error directly to the PCI host. Table 125 describes how IRQ are generated for each silicon stepping. Table 125. IRQ Interrupt Options by Stepping Stepping Description A stepping IRQ interrupts can be handled only by the Intel XScale® core. B Stepping IRQ interrupts can be handled by either the Intel XScale® core or a PCI host. Refer to the description of the PCI_OUT_INT_MASK and PCI_OUT_INT_STATUS registers in the Intel® IXP2400 and IXP2800 Network Processor Programmer’s Reference Manual. Figure 126 shows how PCI interrupts are managed via the PCI and the Intel XScale® core. Figure 126. PCI Interrupts Intel XScale® Core writes PNI bit to set PCI interrupt PCI_CONTROL Other interrupts Read Intel XScale® Core PCI interrupt to determine interrupt source {FIQ,IRQ} RAW_INT_STATUS Enable PCI interrupt from all doorbell bits PCI_OUT_INT_MASK Intel XScale® Core sets Doorbells bits to generate an interrupt to the PCI Tells whether or not PCI interrupt was from Doorbell PCI_INTA# PCI_OUT_INT_STATUS PCI_DOORBELL {FIQ,IRQ} _INT_ENABLE Intel XScale® Core interrupt Registers accessed by Intel® XScale® Core DMA Channels (done) PCI sets Doorbells bits to generate an interrupt to the Intel XScale® Core XSCALE_DOORBELL Bitwise AND XSCALE_INT_ENABLE XSCALE_INT_STATUS PCI_INTB# A9773-02 Hardware Reference Manual 339 Intel® IXP2800 Network Processor PCI Unit 9.4 Master Interface Block The Master Interface consists of the DMA engine and the Push/pull target interface. Both can generate initiator PCI transactions. 9.4.1 DMA Interface There are two DMA channels, each of which can move blocks of data from DRAM to the PCI or from the PCI to DRAM. The DMA channels read parameters from a list of descriptors in SRAM, perform the data movement to or from DRAM, and stop when the list is exhausted. The descriptors are loaded from predefined SRAM entries or may be set directly by CSR writes to DMA registers. There is no restriction on byte alignment of the source address or the destination address. For PCI to DRAM transfers, the PCI command is Memory Read, Memory Read line, or Memory Read Multiple. For DRAM to PCI transfers, the PCI command is Memory Write. Memory Write Invalidate is not supported. DMA reads are unmasked reads (all byte enables asserted) from DRAM. After each transfer, the byte count is decremented by the number of bytes read, and the source address is incremental by one 64-bit double Dword. The whole data block is fetched from the DRAM. For a system using RDRAM (like the IXP2800 Network Processor), the block size is 16 bytes. DMA reads are masked reads from the PCI and writes are masked for both the PCI and DRAM. When moving a block of data, the internal hardware adjusts the byte enables so that the data is aligned properly on block boundaries and that only the correct bytes are transferred if the initial and final data requires masking. For DMA data, the DMA FIFO consists of two separate FBus initiator read FIFOs and two initiator write FIFOs, which are inside the PCI Core and three DMA buffers (corresponding to the DMA channels), which buffer data to and from the DRAM. Since there is no simultaneous DMA read and write outstanding, one shared 64-byte buffer is used for both read and write DRAM data Up to two DMA channels are running at a time with three descriptors outstanding. The two DMA channels and the direct access channel to PCI Bus from Command Bus Master are contending to use the address, read and write FIFOs inside the Core. Effectively, the active channels interleave bursts to or from the PCI Bus. Each channel is required to arbitrate for the PCI FIFOs after each PCI burst request. 340 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.4.1.1 Allocation of the DMA Channels Static allocation are employed such that the DMA resources are controlled exclusively by a single device for each channel. The Intel XScale® core, a Microengine and the external PCI host can access the two DMA channels. The first two channels can function in one of the following modes, as determined by the DMA_INF_MODE register: • • • • The Intel XScale® core owns both DMA channel 1 and channel 2. The Microengines owns both DMA channel 1 and channel 2. PCI host owns both DMA channel 1 and channel 2. The Intel XScale® core owns both DMA channel 1 and channel 2. The third channel can be allocated to either the Intel XScale® core, PCI host, or Microengines. The DMA mode can be changed only by the Intel XScale® core under software control. The software should signal to suspend DMA transactions and wait until all DMA channels are free before changing the mode. Software should determine when all DMA channels are free either by polling XSCALE_INT_STATUS register bits DMA1 and DMA3 until both DMA channels are done. 9.4.1.2 Special Registers for Microengine Channels Interrupts are generated at the end of DMA operation for the Intel XScale® core and PCI-initiated DMA. However, the Microengine does not provide the interrupt mechanism. The PCI Unit will instead use an “Auto-Push” mechanism to signal the particular Microengine on completion of DMA. When the Microengine sets up the DMA channel, it would also write the CHAN_X_ME_PARAM with Microengine number, Context number, Register number, and Signal number. When the DMA channel completes, it writes some status information (Error or OK status) to the Microengine/ Context/Register/Signal. PCI Unit will arbitrate for the SRAM Push bus. The Push ID is from the parameters in the register. The ME_PUSH_STATUS reflects the DMA Done bit in each of the CHAN_X_CONTROL registers. The Auto-Push operation will proceed after the DMA is done for the particular DMA channel if the corresponding enable bit in the ME_PUSH_ENABLE is set. Hardware Reference Manual 341 Intel® IXP2800 Network Processor PCI Unit 9.4.1.3 DMA Descriptor Each descriptor occupies four 32-bit Dwords and is aligned on a 16-byte boundary. The DMA channels read the descriptors from local SRAM into the four DMA working registers once the control register has been set to initiate the transaction. This control must be set explicitly. This starts the DMA transfer. The register names for the DMA channels are listed in Figure 127. Figure 127. DMA Descriptor Reads Local SRAM Last Descriptor 4 Next Descriptor 3 Prior Descriptor Current Descriptor 1 2 Working Register DMA Channel Register Byte Count Register PCI Address Register DRAM Address Register Descriptor Pointer Register Channel Register Name (X can be 1, 2, or 3) CHAN_X_BYTE_COUNT CHAN_X_PCI_ADDR CHAN_X_DRAM_ADDR CHAN_S_DESC_PTR Control Register DMA Channel Register Control Register Channel Register Name (X can be 1, 2, or 3) CHAN_X_CONTROL A9774-01 After a descriptor is processed, the next descriptor is loaded in the working registers. This process repeats until the chain of descriptors is terminated (i.e., the End of Chain bit is set). See Table 126. Table 126. DMA Descriptor Format 342 Offset from Descriptor Pointer Description 0x0 Byte Count 0x4 PCI Address 0x8 DRAM Address 0xC Next Descriptor Address Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.4.1.4 DMA Channel Operation Since a PCI device, Microengine, or the Intel XScale® core can access the internal CSRs and memory in a similar way, the DMA channel operation description that follows will apply to all channels. CHAN_1_, CHAN_2_, or CHAN_3_ can be placed before the name for the DMA registers. The DMA channel owner can either set up the descriptors in SRAM or it can write the first descriptor directly to the DMA channel registers. When descriptors and the descriptor list are in SRAM, the procedure is as follows: 1. The DMA channel owner writes the address of the first descriptor into the DMA Channel Descriptor Pointer register (DESC_PTR). 2. The DMA channel owner writes the DMA Channel Control register (CONTROL) with miscellaneous control information and also sets the channel enable bit (bit 0). The channel initial descriptor bit (bit 4) in the CONTROL register must also be cleared to indicate that the first descriptor is in SRAM. 3. Depending on the DMA channel number, the DMA channel reads the descriptor block into the corresponding DMA registers, BYTE_COUNT, PCI_ADDR, DRAM_ADDR, and DESC_PTR. 4. The DMA channel transfers the data until the byte count is exhausted, and then sets the channel transfer done (bit 2) in the CONTROL register. 5. If the end of chain bit (bit 31) in the BYTE_COUNT register is clear, the channel checks the Chain Pointer value. If the Chain Pointer value is not equal to 0. it reads the next descriptor and transfers the data (step 3 and 4 above). IF the Chain Pointer value is equal to 0, it waits for the Descriptor Added bit of the Channel Control register to be set before reading the next descriptor and transfers the data (step 3 and 4 above). If bit 31 is set, the channel sets the channel chain done bit (bit 7) in the CONTROL register and then stops. 6. Proceed to the Channel End Operation. (See Section 9.4.1.5.) When single descriptors are written directly into the DMA channel registers, the procedure is as follows: 1. The DMA channel owner writes the descriptor values directly into the DMA channel registers. The end of chain bit (bit 31) in the BYTE_COUNT register must be set, and the value in the DESC_PTR register is not used. 2. The DMA channel owner writes the base address of the DMA transfer into the PCI_ADDR to specify the PCI starting address. 3. When the first descriptor is in the BYTE_COUNT register, the DRAM_ADDR register must be written with the address of the data to be moved. 4. The DMA channel owner writes the CONTROL register with miscellaneous control information, along with setting the channel enable bit (bit 0). The channel initial descriptor in register bit (bit 4) in the CONTROL register must also be set to indicate that the first descriptor is already in the channel descriptor registers. 5. The DMA channel transfers the data until the byte count is exhausted, and then sets the channel transfer done bit (bit 2) in the CONTROL register. 6. Since the end of the chain bit (bit 31) in the BYTE_CONT register is set, the channel sets the channel chain done bit (bit 7) in the CONTROL register and then stops. 7. Proceed to the Channel End Operation. (See Section 9.4.1.5.) Hardware Reference Manual 343 Intel® IXP2800 Network Processor PCI Unit 9.4.1.5 DMA Channel End Operation 1. Channel owned by PCI: If not masked via the PCI Outbound Interrupt Mask register, the DMA channel interrupts the PCI host after the setting of the DMA done bit in the CHAN_X_CONTROL register, which is readable in the PCI Outbound Interrupt Status register. 2. Channel owned by the Intel XScale® core: If enabled via the Intel XScale® core Interrupt Enable registers, the DMA channel interrupts the Intel XScale® core by setting the DMA channel done bit in the CHAN_X_CONTROL register, which is readable in the Intel XScale® core Interrupt Status register. 3. Channel owned by Microengine: If enabled via the Microengine Auto-Push Enable registers, the DMA channel signals the Microengine after setting the DMA channel done bit in the CHAN_X_CONTROL register, which is readable in the Microengine Auto-Push Status register. 9.4.1.6 Adding Descriptor to an Unterminated Chain It is possible to add a descriptor to a chain while a channel is running. To do so the chain should be left un-terminated, that is the last descriptor should have End of Chain clear, and the Chain Pointer value equal to 0. A new descriptor (descriptors) can be added to the chain by overwriting the Chain Pointer value of the un-terminated descriptor (in SRAM) with the Local Memory address of the (first) added descriptor (Note that the added descriptor must actually be valid in Local Memory prior to that). After updating the Chain Pointer field, the software must write a 1 to the Descriptor Added bit of the Channel Control register. This is necessary for the case where the channel was paused to reactivate the channel. However, software need not check the state of the channel before writing that bit; there is no side-effect of writing that bit in the case where the channel had not yet read the unlinked descriptor. If the channel was paused or had read an unlinked Pointer, it will re-read the last descriptor processed (i.e., the one that originally had the 0 value for Chain Pointer) to get the address of the newly added descriptor. A descriptor cannot be added to a descriptor that has End of Chain set. 9.4.1.7 DRAM to PCI Transfer For a DRAM-to-PCI transfer, the DMA channel reads data from DRAM and places it into the DMA buffer for transfer to the FBus FIFO when the following conditions are met: • There is at least free space for a read block in the buffer. • The DRAM controller issues data valid on DRAM push data bus to the DMA engine. • DMA transfer is not done. Before data is stored into the DMA buffer, the DRAM starting address is evaluated. Extra data will be discarded in case the DRAM starting address does not start at aligned addresses. The lower address bits determine the byte enables for the first data double Dword. At the end of the DMA transfer, extra data will be discarded and byte enables are calculated for the last 64-bit double Dword. After the data is loaded into the buffer, the PCI starting address is evaluated and the buffer is shifted byte wise to align the starting DRAM data with the starting PCI starting address. 344 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit A 64-bit double Dword with byte enables is pushed into the FBus FIFO from the DMA buffers as soon as there is data available in the buffer and there is space in the FBus FIFO. The Core logic will transfer the exact number of bytes to the PCI Bus. The maximum burst size on the PCI bus varies according to the stepping and is described in Table 127 Table 127. PCI Maximum Burst Size Stepping A Stepping Description The maximum burst size is 64 bytes. The maximum burst size can be greater than 64 bytes for certain operations. The register PCI_IXP_PARAM configures the burst length for target write operations. B Stepping The register CHAN_#_CONTROL configures the burst length for DMA read and write operations. The register PCI_CONTROL configures the atomic feature for target write operations of 64 bytes or fewer. Note: Bursts longer than 64 bytes are not supported for PCI target read operations. 9.4.1.8 PCI to DRAM Transfer The DMA channel issues a sequence of PCI read request commands through the FBus address FIFO to read the precise byte count from PCI. The DMA engine will continue to load the DMA write buffer with FBus FIFO data as soon as data is available. The DMA engine determines the largest size of memory request possible with the current DRAM address and remaining byte count. It also has to make sure there is enough data in the write buffer before sending the memory request. 9.4.2 Push/Pull Command Bus Target Interface Through the command bus target interface, the command bus masters (PCI, Intel XScale® core, and Microengines) can access the PCI Unit internal registers including the local PCI configuration registers and the local PCI Unit CSRs. Also, the Microengine and the Intel XScale® core can issue transactions on the PCI bus. The requests are generated from the command master to the command bus arbiter. The arbiter selects a master and sends it a grant. That master then sends a command, which is passed through by the arbiter. PCI Unit will issue the push and pull data responses to the SRAM push/pull data buses. When the read command is received, the PCI Unit will issue the push data request on the SRAM push data bus. When the write command is received, PCI Unit will issue the pull command on the SRAM pull data bus. 9.4.2.1 Command Bus Master Access to Local Configuration Registers The configuration register within the PCI unit can be accessed by push/pull command bus access to configuration space through the FBus interface of the PCI core. When the IXP2800 Network Processor is a PCI host, these registers have to be accessed through this internal path and no PCI bus cycle will be generated. Hardware Reference Manual 345 Intel® IXP2800 Network Processor PCI Unit 9.4.2.2 Command Bus Master Access to Local Control and Status Registers These are CSRs within the PCI Unit that are accessible from push/pull bus masters. The masters include the Intel XScale® core, Microengines. There is no PCI bus cycles generated. The CSRs within the PCI Unit can be accessed internally by external PCI devices. 9.4.2.3 Command Bus Master Direct Access to PCI Bus The Intel XScale® core and Microengines are the only command bus masters that have direct access to the PCI bus as a PCI Bus initiator. The PCI Bus can be accessed by push/pull command bus access to PCI bus address space. The PCI Unit will share the internal SRAM push/pull data bus with SRAM for the data transfers. Data from the SRAM push/pull data bus is transferred through the master data port of the FBus interface of the PCI core. The PCI Core handles all of the PCI Bus protocol handshakes. The SRAM pull data received for a write command will be transferred to the Master write FIFO for PCI writes. For PCI reads, data is transferred from the read FIFO to the SRAM push data bus. A 32byte Direct buffer is used to support up to 32 bytes of data responses to the direct access to PCI Bus. The Command Bus Master access to the PCI bus will require internal arbitration to gain access to the data FIFOs inside the core, which are shared between the DMA engine and direct access to PCI. 9.4.2.3.1 PCI Address Generation for IO and MEM Cycles When the push/pull command bus master is accessing the PCI Bus, the PCI address is generated based on the PCI address extension register (PCI_ADDR_EXT). Figure 128 shows how the address is generated from a Command Bus Master address. Figure 128. PCI Address Generation for Command Bus Master to PCI 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 PIOADD 8 PMSA 7 6 5 4 3 2 1 PCI Address for PCI Memory Accesses RES 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 PMSA PIOADD 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 PIOADD 0 8 7 6 RES 5 4 3 Intel XScale® Core Address[15:2] 2 1 5 4 3 2 1 0 PCI Extension Register 0 00 PCI Address for PCI I/O Accesses A9775-02 346 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.4.2.3.2 PCI Address Generation for Configuration Cycles When a push/pull command bus master is accessing the PCI Bus to generate a configuration cycle, the PCI address is generated based on the a Command Bus Master address as shown in Table 128 and Figure 129: Table 128. Command Bus Master Configuration Transactions Cycle Result Type 1 Configuration Cycle Command Bus address bits [31:24] are equal to 0xDA Type 0 Configuration Cycle Command Bus address bits [31:24] are equal to 0xDB. Figure 129. PCI Address Generation for Command Bus Master to PCI Configuration Cycle 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 0000 0000 8 7 6 5 4 Intel XScale® Core Address[23:2] 3 2 1 0 00 A9776-02 9.4.2.3.3 PCI Address Generation for Special and IACK Cycles The PCI address is undefined for special and IACK PCI cycles. 9.4.2.3.4 PCI Enables The PCI byte-enables are generated based on the Command Bus Master instruction, and the PCI unit does not change the states of the enables. 9.4.2.3.5 PCI Command The PCI command is derived from the Command Bus Master address space map. The different spaces supported are listed in Table 129: Table 129. Command Bus Master Address Space Map to PCI PCI Command Intel XScale® Core Address Space PCI Memory 0xE000 0000 – 0xFFFF FFFF Local CSR 0xDF00 0000 – 0xDFFF FFFF Local Configuration Register 0xDE00 0000 – 0xDEFF FFFF PCI Special Cycle/PCI IACK Read 0xDC00 0000 – 0xDDFF FFFF PCI Type 1 Configuration Cycle 0xDB00 0000 – 0xDBFF FFFF PCI Type 0 Configuration Cycle 0xDA00 0000 – 0xDAFF FFFF PCI I/O 0xD800 0000 – 0xD8FF FFFF Hardware Reference Manual 347 Intel® IXP2800 Network Processor PCI Unit 9.5 PCI Unit Error Behavior 9.5.1 PCI Target Error Behavior 9.5.1.1 Target Access Has an Address Parity Error 1. If PCI_CMD_STAT[PERR_RESP] is not set, PCI Unit will ignore the parity error. 2. If PCI_CMD_STAT[PERR_RESP] is set: a. PCI core will not claim the cycle regardless of internal device select signal. b. PCI core will let the cycle terminate with master abort. c. PCI core will not assert PCI_SERR_L. d. Slave Interface sets PCI_CONTROL[TGT_ADR_ERR], which will interrupt the Intel XScale® core if enabled. 9.5.1.2 Initiator Asserts PCI_PERR_L in Response to One of Our Data Phases 1. Core does nothing. 2. Responsibility lies with the initiator to discard data, report this to the system, etc. 9.5.1.3 Discard Timer Expires on a Target Read 1. PCI unit discards the read data. 2. PCI Unit invalidates the delayed read address 3. PCI Unit sets Discard Timer Expired bit (DTX) in the PCI_CONTROL. 4. If enabled (XSCALE_INT_ENABLE [DTE]), the PCI unit interrupts the Intel XScale® core. 9.5.1.4 Note: Target Access to the PCI_CSR_BAR Space Has Illegal Byte Enables The acceptable byte enables are: 1. PCI local CSRs - PCI_BE[3:0] = 0x0or 0xF. 2. CSRs not in the PCI Unit - PCI_BE[3:0] = 0x0, 0xE, 0xD, 0xB, 0x7, 0xC, 0x3, or 0xF. When byte-enables are detected, the hardware asserts the following error conditions: 1. Slave Interface will set PCI_CONTROL[TGT_CSR_BE]. 2. Slave Interface will issue target abort for target read and drop the transaction for target write. 348 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.5.1.5 Target Write Access Receives Bad Parity PCI_PAR with the Data 1. If PCI_CMD_STAT[PERR_RESP] is not set, PCI Unit will ignore the parity error. 2. If PCI_CMD_STAT[PERR_RESP] is set: a. core asserts PCI_PERR_L and sets PCI_CMD_STAT[PERR]. b. Slave Interface sets PCI_CONTROL[TGT_WR_PAR], which will interrupt the Intel XScale® core if enabled. c. Data is discarded. 9.5.1.6 SRAM Responds with a Memory Error on One or More Data Phases on a Target Read 1. Slave Interface sets PCI_CONTROL[TGT_SRAM_ERR], which will interrupt the Intel XScale® core if enabled. 2. Assert PCI Target Abort at or before the data in question is driven on PCI. 9.5.1.7 DRAM Responds with a Memory Error on One or More Data Phases on a Target Read 1. Slave Interface sets PCI_CONTROL[TGT_DRAM_ERR], which will interrupt the Intel XScale® core if enabled. 2. Slave Interface asserts PCI Target Abort at or before the data in question is driven on PCI. 9.5.2 As a PCI Initiator During a DMA Transfer 9.5.2.1 DMA Read from DRAM (Memory-to-PCI Transaction) Gets a Memory Error 1. Set PCI_CONTROL[DMA_DRAM_ERR] which will interrupt the Intel XScale® core if enabled. 2. Master Interface terminates transaction before bad data is transferred (okay to terminate earlier). 3. Master Interface clears the Channel Enable bit in CHAN_X_CONTROL. 4. Master Interface sets DMA channel error bit in CHAN_X_CONTROL. 5. Master Interface does not reset the DMA CSRs; This leaves the descriptor pointer pointing to the DMA descriptor of the failed transfer. 6. Master Interface resets the state machines and DMA buffers. Hardware Reference Manual 349 Intel® IXP2800 Network Processor PCI Unit 9.5.2.2 DMA Read from SRAM (Descriptor Read) Gets a Memory Error 1. Set PCI_CONTROL[DMA_SRAM_ERR] which will interrupt the Intel XScale® core if enabled. 2. Master Interface clears the Channel Enable bit in CHAN_X_CONTROL. 3. Master Interface sets DMA channel error bit in CHAN_X_CONTROL. 4. Master Interface does not reset the DMA CSRs; This leaves the descriptor pointer pointing to the DMA descriptor of the failed transfer. 5. Master Interface resets the state machines and DMA buffers. 9.5.2.3 DMA from DRAM Transfer (Write to PCI) Receives PCI_PERR_L on PCI Bus 1. If PCI_CMD_STAT[PERR_RESP] is not set, PCI Unit will ignore the parity error. 2. If PCI_CMD_STAT[PERR_RESP] is set: a. Master Interface sets PCI_CONTROL[DPE] which will interrupt the Intel XScale® core if enabled. b. Master Interface clears the Channel Enable bit in CHAN_X_CONTROL. c. Master Interface sets DMA channel error bit in CHAN_X_CONTROL. d. Master Interface does not reset the DMA CSRs; This leaves the descriptor pointer pointing to the DMA descriptor of the failed transfer. e. Master Interface resets the state machines and DMA buffers. f. Core sets PCI_CMD_STAT[PERR] if properly enabled. 9.5.2.4 DMA To DRAM (Read from PCI) Has Bad Data Parity 1. If PCI_CMD_STAT[PERR_RESP] is not set, PCI Unit will ignore the parity error. 2. If PCI_CMD_STAT[PERR_RESP] is set: a. Core asserts PCI_PERR_L on PCI if PCI_CMD_STAT[PERR_RESP] is set. b. Master Interface sets PCI_CONTROL[DPED] which can interrupt the Intel XScale® core if enabled. c. Master Interface clears the Channel Enable bit in CHAN_X_CONTROL. d. Master Interface sets DMA channel error bit in CHAN_X_CONTROL. e. Master Interface does not reset the DMA CSRs; This leaves the descriptor pointer pointing to the DMA descriptor of the failed transfer. f. Master Interface resets the state machines and DMA buffers. 350 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit 9.5.2.5 Note: DMA Transfer Experiences a Master Abort (Time-Out) on PCI That is, nobody asserts DEVSEL during the DEVSEL window. 1. Master Interface sets PCI_CONTROL[RMA] which will interrupt the Intel XScale® core if enabled. 2. Master Interface clears the Channel Enable bit in CHAN_X_CONTROL. 3. Master Interface sets DMA channel error bit in CHAN_X_CONTROL. 4. Master Interface does not reset the DMA CSRs; This leaves the descriptor pointer pointing to the DMA descriptor of the failed transfer. 5. Master Interface resets the state machines and DMA buffers 9.5.2.6 DMA Transfer Receives a Target Abort Response During a Data Phase 1. Core terminates the transaction. 2. Master Interface sets PCI_CONTROL[RTA] which can interrupt the Intel XScale® core if enabled. 3. Master Interface clears the Channel Enable bit in CHAN_X_CONTROL. 4. Master Interface sets DMA channel error bit in CHAN_X_CONTROL. 5. Master Interface does not reset the DMA CSRs; This leaves the descriptor pointer pointing to the DMA descriptor of the failed transfer. 6. Master Interface resets the state machines and DMA buffers. 9.5.2.7 DMA Descriptor Has a 0x0 Word Count (Not an Error) 1. No data is transferred. 2. Descriptor is retired normally. 9.5.3 As a PCI Initiator During a Direct Access from the Intel XScale® Core or Microengine 9.5.3.1 Master Transfer Experiences a Master Abort (Time-Out) on PCI 1. Core aborts the transaction. 2. Master Interface sets PCI_CONTROL[RMA] which will interrupt the Intel XScale® core if enabled. 9.5.3.2 Master Transfer Receives a Target Abort Response During a Data Phase 1. Core aborts the transaction. 2. Master Interface sets PCI_CONTROL[RTA] which will interrupt the Intel XScale® core if enabled. Hardware Reference Manual 351 Intel® IXP2800 Network Processor PCI Unit 9.5.3.3 Master from the Intel XScale® Core or Microengine Transfer (Write to PCI) Receives PCI_PERR_L on PCI Bus 1. If PCI_CMD_STAT[PERR_RESP] is not set, PCI Unit will ignore the parity error. 2. If PCI_CMD_STAT[PERR_RESP] is set: a. Core sets PCI_CMD_STAT[PERR]. b. Master Interface sets PCI_CONTROL[DPE] which will interrupt the Intel XScale® core if enabled. 9.5.3.4 Master Read from PCI (Read from PCI) Has Bad Data Parity 1. If PCI_CMD_STAT[PERR_RESP] is not set, PCI Unit will ignore the parity error. 2. If PCI_CMD_STAT[PERR_RESP] is set: a. Core asserts PCI_PERR_L on PCI. b. Master Interface sets PCI_CONTROL[DPED] which will interrupt the Intel XScale® core if enabled. c. Data that has been read from PCI is sent to the Intel XScale® core or Microengine with a data error indication. 9.5.3.5 Master Transfer Receives PCI_SERR_L from the PCI Bus Master Interface sets PCI_CONTROL[RSERR] which will interrupt the Intel XScale® core if enabled. 9.5.3.6 Intel XScale® Core Microengine Requests Direct Transfer when the PCI Bus is in Reset Master Interface will complete the transfer and drop the write data and return all ones on the read data. 9.6 PCI Data Byte Lane Alignment During any endian conversion, PCI does not need to do any longword swapping between two 32-bit longwords (LW1, LW0). But PCI may need to do byte swapping within the 32-bit longwords. Because of the different endian convention between PCI Bus and the memory, all data going between the PCI core FIFO and memory data bus passes through the byte lane reversal as shown in Table 130 through Table 137. PCI allows byte-enable swapping only without the data swapping or allow data swapping only without byte enable swapping. When PCI handle the mis align data in above two cases, PCI will only care about valid data. So PCI will drive any data values for those mis-aligned invalid data portions. 352 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit -- Table 130. Byte Lane Alignment for 64-Bit PCI Data In (64 Bits PCI Little-Endian to Big-Endian with Swap) PCI Data IN[63:56] IN[55:48] IN[47:40] IN[39:32] IN[31:24] IN[23:16] IN[15:8] IN[7:0] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] SRAM Data Longword1 (32 bits) LW1 drive after LW0 DRAM Data OUT[39:32] OUT[47:40] Longword0 (32 bits) LW0 drive first OUT[55:48] OUT[63:56] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Table 131. Byte Lane Alignment for 64-Bit PCI Data In (64 Bits PCI Big-Endian to Big-Endian without Swap) PCI Data SRAM Data DRAM Data IN[39:32] IN[47:40] OUT[7:0] OUT[15:8] IN[55:48] IN[63:56] OUT[23:16] OUT[31:24] IN[7:0] IN[15:8] IN[23:16] IN[31:24] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Longword1 (32 bits) LW1 drive after LW0 OUT[39:32] Longword0 (32 bits) LW0 drive first OUT[47:40] OUT[55:48] OUT[63:56] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Table 132. Byte Lane Alignment for 32-Bit PCI Data In (32 Bits PCI Little-Endian to Big-Endian with Swap) PCI Add[2]=1 PCI Add[2]=0 Longword1 (32 bits) LW1 drive after LW0 PCI Data SRAM Data Longword0 ((32 bits) LW0 drive first IN[31:24] IN[23:16] IN[15:8] IN[7:0] IN[31:24] IN[23:16] IN[15:8] IN[7:0] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Longword1 (32 bits) LW1 drive after LW0 DRAM Data OUT[39:32] OUT[47:40] Longword0 ((32 bits) LW0 drive first OUT[55:48] OUT[63:56] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Table 133. Byte Lane Alignment for 32-Bit PCI Data In (32 Bits PCI Big-Endian to Big-Endian without Swap) PCI Add[2]=1 PCI Add[2]=0 Longword1 (32 bits) LW1 drive after LW0 PCI Data SRAM Data Longword0 ((32 bits) LW0 drive first IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] IN[23:16] IN[31:24] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Longword1 (32 bits) LW1 drive after LW0 Longword0 ((32 bits) LW0 drive first direct map pci to dram IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] IN[23:16] IN[31:24] DRAM Data OUT[39:32] OUT[47:40] OUT[55:48] OUT[63:56] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Hardware Reference Manual 353 Intel® IXP2800 Network Processor PCI Unit Table 134. Byte Lane Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Little Endian with Swap) IN[7:0] IN[15:8] SRAM Data DRAM Data PCI Side IN[23:16] IN[31:24] IN[7:0] IN[15:8] Longword1 (32 bits) LW1 drive after LW0 IN[39:32] IN[47:40] IN[55:48] IN[23:16] IN[31:24] Longword0 ((32 bits) LW0 drive first IN[63:56] IN[7:0] IN[15:8] OUT[63:56] OUT[55:48] OUT[47:40] OUT[39:32] OUT[31:24] OUT[23:16] IN[23:16] IN[31:24] OUT[15:8] OUT[7:0] Table 135. Byte Lane Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Big-Endian without Swap) SRAM Data IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] Longword1 (32 bits) LW1 drive after LW0 DRAM Data direct map pci to dram PCI Side IN[23:16] IN[31:24] Longword0 ((32 bits) LW0 drive first IN[39:32] IN[47:40] IN[55:48] IN[63:56] IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] IN[23:16] IN[31:24] OUT[39:32] OUT[47:40] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] OUT[55:48] OUT[63:56] Table 136. Byte Lane Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Little Endian with Swap) SRAM Data IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] Longword1 (32 bits) LW1 drive after LW0 DRAM Data PCI Data IN[23:16] IN[31:24] Longword0 ((32 bits) LW0 drive first IN[39:32] IN[47:40] IN[55:48] IN[63:56] IN[7:0] IN[15:8] IN[23:16] IN[31:24] OUT[31:24] OUT[23:16] OUT[15:8] OUT[7:0] OUT[31:24] OUT[23:16] OUT[15:8] OUT[7:0] Longword1 (32 bits) LW1 drive after LW0 Longword0 ((32 bits) LW0 drive first PCI Add[2]=1 PCI Add[2]=0 Table 137. Byte Lane Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Big-Endian without Swap) SRAM Data IN[7:0] IN[15:8] IN[23:16] IN[31:24] IN[7:0] IN[15:8] Longword1 (32 bits) LW1 drive after LW0 IN[31:24] Longword0 ((32 bits) LW0 drive first DRAM Data IN[39:32] IN[47:40] IN[55:48] IN[63:56] IN[7:0] IN[15:8] IN[23:16] IN[31:24] PCI Data OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] OUT[7:0] OUT[15:8] OUT[23:16] OUT[31:24] Longword1 (32 bits) LW1 drive after LW0 PCI Add[2]=1 354 IN[23:16] Longword0 ((32 bits) LW0 drive first PCI Add[2]=0 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit The BE_DEMI bit of the PCI_CONTROL register can be set to enable big-endian on the incoming data from the PCI Bus to both the SRAM and DRAM. The BE_DEMO bit of the PCI_CONTROL register can be set to enable big-endian on the outgoing data to the PCI Bus from both the SRAM and DRAM. 9.6.1 Endian for Byte Enable During any endian conversion, PCI does not need to do any longword byte enable swapping between two 32-bit longwords (LW1, LW0). But PCI may need to do byte enable swapping within the 32-bit longword byte enable. Because of the different endian convention between PCI Bus and the memory, all data going between the PCI core FIFO and memory data bus passes through the byte lane reversal as shown in Table 138 through Table 145: Table 138. Byte Enable Alignment for 64-Bit PCI Data In (64 Bits PCI Little-Endian to BigEndian with Swap) PCI Data SRAM Data IN_BE[7] IN_BE[6] IN_BE[5] IN_BE[4] IN_BE[3] IN_BE[2] IN_BE[1] IN_BE[0] OUT_BE[3] OUT_BE[2] OUT_BE[1] OUT_BE[0] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Longword1byte enable LW1 byte enable drive after LW0 byte enable DRAM Data OUT_BE[4] OUT_BE[5] OUT_BE[6] OUT_BE[7] Longword0 byte enable LW0 byte enable drive first OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Table 139. Byte Enable Alignment for 64-Bit PCI Data In (64 Bits PCI Big-Endian to Big-Endian without Swap) PCI Data SRAM Data DRAM Data IN_BE[4] IN_BE[5] IN_BE[6] IN_BE[7] IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Longword1byte enable LW1 byte enable drive after LW0 byte enable OUT_BE[4] OUT_BE[5] OUT_BE[6] OUT_BE[7] Longword0 byte enable LW0 byte enable drive first OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Table 140. Byte Enable Alignment for 32-Bit PCI Data In (32 bits PCI Little-Endian to BigEndian with Swap) PCI Add[2]=1 PCI Add[2]=0 Longword1byte enable LW1 byte enable drive after LW0 byte enable PCI Data SRAM Data DRAM Data Longword0 byte enable LW0 byte enable drive first IN_BE[3] IN_BE[2] IN_BE[1] IN_BE[0] IN_BE[3] IN_BE[2] IN_BE[1] IN_BE[0] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Longword1byte enable LW1 byte enable drive after LW0 byte enable OUT_BE[4] Hardware Reference Manual OUT_BE[5] OUT_BE[6] OUT_BE[7] Longword0 byte enable LW0 byte enable drive first OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] 355 Intel® IXP2800 Network Processor PCI Unit Table 141. Byte Enable Alignment for 32-Bit PCI Data In (32 Bits PCI Big-Endian to Big-Endian without Swap) PCI Add[2]=1 PCI Add[2]=0 Longword1byte enable LW1 byte enable drive after LW0 byte enable PCI Data SRAM Data Longword0 byte enable LW0 byte enable drive first IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Longword1byte enable LW1 byte enable drive after LW0 byte enable Longword0 byte enable LW0 byte enable drive first direct map pci to dram IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] DRAM Data OUT_BE[4] OUT_BE[5] OUT_BE[6] OUT_BE[7] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Table 142. Byte Enable Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Little Endian with Swap) IN_BE[0] SRAM Data DRAM Data PCI Side IN_BE[1] IN_BE[2] IN_BE[3] IN_BE[0] Longword1byte enable LW1 byte enable drive after LW0 byte enable IN_BE[1] IN_BE[2] IN_BE[3] Longword0 byte enable LW0 byte enable drive first IN_BE[4] IN_BE[5] IN_BE[6] IN_BE[7] IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] OUT_BE[7] OUT_BE[6] OUT_BE[5] OUT_BE[4] OUT_BE[3] OUT_BE[2] OUT_BE[1] OUT_BE[0] Table 143. Byte Enable Alignment for 64-Bit PCI Data Out (Big-Endian to 64 Bits PCI Big Endian without Swap) SRAM Data IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] IN_BE[0] Longword1byte enable LW1 byte enable drive after LW0 byte enable DRAM Data PCI Side IN_BE[1] IN_BE[2] IN_BE[3] Longword0 byte enable LW0 byte enable drive first IN_BE[4] IN_BE[5] IN_BE[6] IN_BE[7] IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] OUT_BE[4] OUT_BE[5] OUT_BE[6] OUT_BE[7] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Table 144. Byte Enable Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Little Endian with Swap) SRAM Data IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] IN_BE[0] Longword1byte enable LW1 byte enable drive after LW0 byte enable DRAM Data PCI Data IN_BE[2] IN_BE[3] Longword0 byte enable LW0 byte enable drive first IN_BE[4] IN_BE[5] IN_BE[6] IN_BE[7] IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] OUT_BE[3] OUT_BE[2] OUT_BE[1] OUT_BE[0] OUT_BE[3] OUT_BE[2] OUT_BE[1] OUT_BE[0] Longword1byte enable LW1 byte enable drive after LW0 byte enable PCI Add[2]=1 356 IN_BE[1] Longword0 byte enable LW0 byte enable drive first PCI Add[2]=0 Hardware Reference Manual Intel® IXP2800 Network Processor PCI Unit Table 145. Byte Enable Alignment for 32-Bit PCI Data Out (Big-Endian to 32 Bits PCI Big Endian without Swap) SRAM Data IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] IN_BE[0] Longword1byte enable LW1 byte enable drive after LW0 byte enable DRAM Data PCI Data IN_BE[4] IN_BE[5] IN_BE[6] IN_BE[7] IN_BE[1] IN_BE[2] IN_BE[3] Longword0 byte enable LW0 byte enable drive first IN_BE[0] IN_BE[1] IN_BE[2] IN_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] OUT_BE[0] OUT_BE[1] OUT_BE[2] OUT_BE[3] Longword1byte enable LW1 byte enable drive after LW0 byte enable PCI Add[2]=1 Longword0 byte enable LW0 byte enable drive first PCI Add[2]=0 The BE_BEMI bit of the PCI_CONTROL register can be set to enable big-endian on the incoming byte enable from the PCI Bus to both the SRAM and DRAM. The BE_BEMO bit of the PCI_CONTROL register can be set to enable big-endian on the outgoing byte enable to the PCI Bus from both the SRAM and DRAM. The B-stepping silicon provides a mechanism to enable byte swapping for PCI I/O operations as described in Table 146. Hardware Reference Manual 357 Intel® IXP2800 Network Processor PCI Unit Table 146. PCI I/O Cycles with Data Swap Enable Stepping Description A Stepping A PCI IO cycle is treated like CSR where the data bytes are not swapped. It is sent in the same byte order whether the PCI bus is configured in Big-Endian or Little-Endian mode. When PCI_CONTROL[IEE] is 0, PCI data is sent in the same byte order whether the PCI bus is configured in Big-Endian or Little-Endian mode. When PCI_CONTROL[IEE] is 1, PCI IO data will follow the same memory space swapping rule. The address always follows the physical location, Example: BEs not Swapped (1 byte access) ad[1:0] BE3 BE2 BE1 BE0 BE3 BE2 BE1 BE0 1 1 1 0 11 0 1 1 1 01 1 1 0 1 1 0 1 0 1 1 10 1 0 1 1 0 1 1 1 0 1 11 0 1 1 1 0 0 1 1 1 0 ad[1:0] BE3 BE2 BE1 BE0 BEs Swapped (2 byte access) ad[1:0] BE3 BE2 BE1 BE0 00 1 1 0 0 1 0 0 0 1 1 01 1 0 0 1 0 1 1 0 0 1 10 0 0 1 1 0 0 1 1 0 0 BEs not Swapped (3 byte access) ad[1:0] BE3 BE2 BE1 BE0 BEs Swapped (3 byte access) ad[1:0] BE3 BE2 BE1 BE0 00 1 0 0 0 0 1 0 0 0 1 01 0 0 0 1 0 0 1 0 0 0 BEs not Swapped (4 byte access) ad[1:0] 00 358 ad[1:0] 00 BEs not Swapped (2 byte access) B Stepping BEs Swapped (1 byte access) BE3 BE2 BE1 BE0 0 0 0 0 BEs Swapped (4 byte access) ad[1:0] 0 0 BE3 BE2 BE1 BE0 0 0 0 0 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset Clocks and Reset 10 This section describes the IXP2800 Network Processor clocks and reset. Refer to the Intel® IXP2800 Network Processor Hardware Initialization Reference Manual for information about the initialization of all units of the IXP2800 Network Processor. 10.1 Clocks The block diagram in Figure 130 shows how the IXP2800 Network Processor implements an onboard clock generator to generate the internal clocks used by the various functional units in the device. It takes an external reference frequency and multiplies it to a higher frequency clock using a PLL. That clock is then divided down by a set of programmable dividers to provide clocks to SRAM and DRAM controllers. The Intel XScale® core and Microengines get clocks using fixed divide ratios. The Media and Switch Fabric Interface clock is selected based on the strap pin (CFG_MSF_FREQ_SEL) so that when CFG_MSF_FREQ_SEL is high, an internally-generated clock using the programmable divider is used and when CFG_MSF_FREQ_SEL is low, an externally-received clock on the MSF interface is used. The PCI controller uses external clocks. Each of the units also interfaces to internal buses, which run at ½ the Microengine frequency. Figure 130 shows the overall clock generation and distribution and Table 147 summarizes the clock usage. Hardware Reference Manual 359 Intel® IXP2800 Network Processor Clocks and Reset Figure 130. Overall Clock Generation and Distribution Slow Port Devices, i.e., Flash, ROM Slow Port Control S_clk1 S_clk2 S_clk3 SRAM0 SRAM1 SRAM2 SRAM3 Media and Switch Fabric Interface Scratch, Hash, CSR Intel XScale® Core External Oscillator S_clk0 tdclk rdclk tclk_ref Gasket ref_clk_l Clock Unit with PLL ref_clk_h Constant (Multiplier) Peripherals (Timers, UART, etc.) PCI DRAM0 DRAM1 DRAM2 D_clk0 D_clk1 D_clk2 PCI_clk Intel® IXP2800 Network Processor MEs Key: Fast Clock ½ Fast Clock Divided Clock A9777-02 Table 147. Clock Usage Summary (Sheet 1 of 2) Unit Name Microengine 360 Description Comment Microengines internal. Internal Buses Command/Push/Pull interface of DRAM, SRAM, Intel XScale® core, Peripheral, MSF, and PCI Units. 1/2 Microengine frequency. Intel XScale® core Intel XScale® core microprocessor, caches, microprocessor side of Gasket. 1/2 of Microengine frequency. DRAM DRAM pins and control logic (all of DRAM unit except Internal Bus interface). Divide of Microengine frequency. All DRAM channels use the same frequency. Clocks are driven by the IXP2800 Network Processor to external DRAMs. Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset Table 147. Clock Usage Summary (Sheet 2 of 2) Unit Name SRAM Scratch, Hash, CSR Description Comment SRAM pins and control logic (all of the SRAM unit except Internal Bus interface). Divide of Microengine frequency. Each SRAM channel has its own frequency selection. Clocks are driven by the IXP2800 Network Processor to external SRAMs and/or Coprocessors. Scratch RAM, Hash Unit, CSR access block 1/2 of Microengine frequency. Note that Slowport has no clock. Timing for Slowport accesses is defined in Slowport registers. The transmit clock for the Media and Switch interface can be derived in two different ways. MSF Receive and Transmit pins and control logic. • From TCLK input signal (supplied by PHY device). • Divided from internal clock. For details please refer to Chapter 8, “Media and Switch Fabric Interface”. APB APB logic Divide of Microengine frequency. PCI PCI pins and control logic. External reference. Either from Host system or onboard oscillator. The fast frequency on the IXP2800 Network Processor is generated by an on-chip PLL that multiplies a reference frequency provided by an on-board LVDS oscillator (frequency 100 MHz) by a selectable multiplier. The multiplier is selected by using external strap pins SP_AD[5:0] and can be viewed by software via the STRAP_OPTIONS[CFG_PLL_MULT] CAP CSR register bits. The multiplier range is even multiples between 16 and 48, so the PLL can generate a 1.6 GHz to 4.8 GHz clock (with a 100-Mhz reference frequency). The PLL output frequency is divided by 2 to get the Microengine clock and by 4 to get the Intel XScale® core and the internal Command/Push/Pull bus frequency. An additional division (after the divide by 2) is used to generate the clock frequencies for the other internal units. The divisors are programmable via the CLOCK_CONTROL CSR. APB divisor specified in the CLOCK_CONTROL CSR clock is scaled by 4 (i.e., a value of 2 in the CSR selects a divisor of 8). Table 148 shows the frequencies that are available based on a 100-Mhz oscillator and various values of PLL multipliers, for the supported divisor values of 3 to 15. Hardware Reference Manual 361 Intel® IXP2800 Network Processor Clocks and Reset Table 148. Clock Rates Examples Input Oscillator Frequency (MHz) 100 2000 [20] 2200 [22] 2400 [24] 2600 [26] 2800 [28] 4000 [40] 4800 [48] Microengine Frequency2 1000 1100 1200 1300 1400 2000 2400 Intel XScale® core & Command/Push/Pull Bus Frequency 3 500 550 600 650 700 1000 1200 26 500 550 600 650 700 1000 1200 3 333 367 400 433 467 666 800 4 250 275 300 325 350 500 600 5 200 220 240 260 280 400 480 6 167 183 200 217 233 334 400 7 143 157 171 186 200 286 342 8 125 138 150 163 175 250 300 9 111 122 133 144 156 222 266 10 100 110 120 130 140 200 240 Divide Ratio for other Units (except APB)4 1. 2. 3. 4. 5. 6. Divisor5 PLL Output Frequency (MHz) [PLL Multiplier]1 11 91 100 109 118 127 182 218 12 83 92 100 108 117 166 200 13 77 85 92 100 107 154 184 14 71 79 86 93 100 142 172 15 67 73 80 87 93 134 160 This multiplier is selected via SP_AD[5:0] strap pins. This frequency is the PLL output frequency divided by 2. This frequency is the PLL output frequency divided by 4. The ABP divisor specified in the CLOCK_CONTROL CAP CSR is scaled by an additional x4. This divisor is selected via the CLOCK_CONTROL CAP CSR. The Base Frequency is the PLL output frequency divided by 2 This divide ratio is only used by test logic. In the normal functional mode, this ratio is reserved for Push/Pull clocks only. Figure 131 shows the clocks generation circuitry for the IXP2800 Network Processor. When the chip is powered up, bypass clock will be sent to all the units. After the PLL is locked, clock unit will switch all units from bypass clock to a fixed frequency clock which is generated by dividing PLL OUTPUT FREQUENCY by 16. Once Clock Control CSR is written, clock unit will replace fixed frequency clock with the defined clocks for different units. 362 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset Figure 131. IXP2800 Network Processor Clock Generation PLL Divide by 4 Bypass Clk Divide by 2 Internal Buses (CPP), Intel XScale® Core ME DFT TBD Divide by N (reset value: 15) DRAMs Divide by N (reset value: 15) SRAM0 Divide by N (reset value: 15) SRAM1 Divide by N (reset value: 15) SRAM2 Divide by N (reset value: 15) SRAM3 Divide by N (reset value: 15) MEDIA Divide by Nx4 (reset value: 15) APB A9778-04 10.2 Synchronization Between Frequency Domains Due to the internal design architecture of the IXP2800 Network Processor, it is guaranteed that one of the clock domains of an asynchronous transfer will be the Push/Pull domain (PLL/4). Additionally, all other clocks are derived by further dividing the Microengine clock (PLL/2n where n is 3 or more); refer to Figure 132. Note: The exception is the PCI unit where the PCI clock is fully asynchronous with the PP clock. Therefore in the PCI unit, data is synchronized using the usual 3-flop synchronization method. Therefore, the clock A and clock B relationship will always be apart by at least two PLL clocks. To solve hold problem between clock A and clock B, a delay is added anytime data is transferred from clock A to clock B. The characteristic of this delay element is such that it is high enough to resolve any hold issue in fast environment but in the slow environment its delay is still less than two PLL clocks. Hardware Reference Manual 363 Intel® IXP2800 Network Processor Clocks and Reset Figure 132. Synchronization Between Frequency Domains Clock A domain Delay Element Clock B domain Data_out Data_in Clock A Clock B Clock A and Clock B are guaranteed to be at least two PLL clocks apart; therefore, if the delay element is such that it is more than the hold time required by clock B but less than the setup required by Clock B, data should transfer glitch-free from the Clock A to Clock B domain. 10.3 Reset The IXP2800 Network Processor can be reset four ways. • • • • 10.3.1 Hardware Reset Using nRESET or PCI_RST_L. PCI-Initiated Reset. Watchdog Timer Initiated Reset. Software Initiated Reset. Hardware Reset Using nRESET or PCI_RST_L The IXP2800 Network Processor provides the nRESET pin so that it can be reset by an external device. Asserting this pin resets the internal functions and generates an external reset via the nRESET_OUT pin. Upon power-up, nRESET (or PCI_RST_L) must remain asserted for 1ms after VDD is stable to properly reset the IXP2800 Network Processor and ensure that the external clocks are stable. While nRESET is asserted, the processor is held in reset. When nRESET is released, the Intel XScale® core begins executing from address 0x0. If PCI_RST_L is input to the chip, nRESET should be removed before or at the same time as PCI_RST_L. All the strap options are latched with nRESET except for PCI strap option BOARD_IS_64 which is latched with PCI_RST_L only (by latching the status of REQ64_L at the trailing edge of PCI_RST_L). If nRESET is asserted, while the Intel XScale® core is executing, the current instruction is terminated abnormally and the reset sequence is initiated. The nRESET_OUT signal de-assertion depends upon settings of reset_out_strap and IXP_RESET_0[22] also called the EXTRST_EN bit. During power up, IXP_RESET_0[22] is reset to 0; therefore the value to be driven on nRESET_OUT is defined by reset_out_strap. When 364 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset “reset_out_strap” is sampled as 0 on the trailing edge of reset, nRESET_OUT is de-asserted based on the value of IXP_RESET_0[15] which is written by software. If “reset_out_strap” is sampled as 1 on the trailing edge of reset, nRESET_OUT is de-asserted after PLL locks. During normal function mode, if software wants to pull nRESET_OUT high, it should set IXP_RESET_0[22] = 1 and then set IXP_RESET_0[15] = 1. To pull nRESET_OUT low, software should set the IXP_RESET_0[15] bit back to 0. Figure 133. Reset Out Behavior IXP_RESET0 Register RESET_OUT 0 1 EXTRST [15] EXTRST_EN [22] 1 0 PLL Lock Signal RESET_OUT_STRAP A9780-01 Hardware Reference Manual 365 Intel® IXP2800 Network Processor Clocks and Reset Figure 134. Reset Generation Watchdog History Register (WHR) Watchdog Event D SOFTWARE RESET Reset nRESET# PLL_RST PLL CORE_RST Logic PCI_RST# CFG_PCI_RST_DIR (1: Output, 0:Input) Counter to guarantee minimum assertion time WATCHDOG_RESET Notes: When Watchdog event happens the register gets set. This register gets reset when WHR_Reset gets asserted or software reads it. A9781-01 10.3.2 PCI-Initiated Reset CFG_RST_DIR is not asserted and PCI_RST_L is asserted. When the CFG_RST_DIR strap pin is not asserted (sampled 0), PCI_RST_L is input to the IXP2800 Network Processor and is used to reset all the internal functions. Its behavior is the same as a hardware reset using nRESET pin. 10.3.3 Watchdog Timer-Initiated Reset The IXP2800 Network Processor provides a watchdog timer that can cause a reset if the Watchdog timer expires and the Watchdog enable bit WDE in the Timer Watchdog Enable register is also set. The Intel XScale® core should be programmed to reset the watch dog timer periodically to ensure that it does not expire. If a watchdog timer expires, it is assumed that the Intel XScale® core has ceased executing instructions properly. When the timer expires, the Watchdog History register bit[0] is set which can be read by the software later on. The following sections define IXP2800 Network Processor behavior for the watchdog event. 366 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset 10.3.3.1 Slave Network Processor (Non-Central Function) • If the Watchdog timer reset enable bit set to 1, Watchdog reset will trigger the soft reset • If the Watchdog timer reset enable bit set to 0, Watchdog reset will trigger the PCI interrupt to external PCI host (if interrupt is enabled by PCI Outbound Interrupt Mask Register[3]). External PCI host can check the IXP2800 error status and log the error then reset the Slave IXP2800 Network Processor only or reset all the PCI devices (assert the PCI_RST_L). • If the Watchdog history bit is already set when a new watchdog event happens, the Watchdog timer reset enable bit is disregarded and a soft reset is generated. 10.3.3.2 Master Network Processor (PCI Host, Central Function) • If the Watchdog timer reset enable bit is set to 1, Watchdog reset will trigger the soft reset and set the watchdog history bit. • If the Watchdog timer reset enable bit is set to 0, check the watchdog history bit. If is already set, generate soft reset. If the watchdog history bit is not set already, watchdog reset will just set the watchdog history bit and no further action is taken. 10.3.3.3 Master Network Processor (Central Function) • If the Watchdog timer reset enable bit is set to 0, Watchdog reset will trigger the PCI interrupt to external PCI host (if interrupt is enabled by PCI Outbound Interrupt Mask Register[3]). • If the Watchdog history bit is already set when a new watchdog event happens, the Watchdog timer reset enable bit is disregarded, and a soft reset is generated. • If the Watchdog timer reset enable bit is set to 1, Watchdog reset will trigger the soft reset. 10.3.4 Software-Initiated Reset The Intel XScale® core or external PCI bus master can reset specific functions in the IXP2800 Network Processor by writing to the IXP_RESET0 and IXP_RESET1 registers. All the individual microengines and specific units can be reset individually in this fashion. Software reset initiated by the Reset All bit in the IXP_RESET0 register behaves almost the same as hardware resets in the sense that PLL and rest of the core gets reset. The only difference between soft reset and hard reset is that a 512-cycle counter is added at the output of the RESET_ALL bit going to the PLL unit for chip reset generation. The PCI unit in the meantime detects the bus idle condition and generates a local reset. This local reset is removed once chip reset is generated and chip reset then takes over the reset function of PCI unit. Both hardware and software resets (software reset after 512 cycles delay) combined generate PLL_RST for the PLL logic. During the assertion of PLL_RST, PLL block remains in the bypass mode and passes the incoming clock directly to the core logic. At this time everyone inside the core gets the same basic clock. The Clock Control register is reset to 0x0FFF_FFFF using the same signal. Once the PLL_RST signal goes away, the PLL starts generating divide_by_2 clock for the Microengines, divide_by_4 clock for the Intel XScale® core and divide_by_16 clock for the rest of the chip (not using divide_by_4 clock) after inserting 16 – 32 idle clocks. Once the clock control CSR is written by software, the PLL block detects it by finding a change in value of this register. Hardware Reference Manual 367 Intel® IXP2800 Network Processor Clocks and Reset Once in operation, if the watchdog timer expires with watchdog timer enable bit WDE from Timer Watchdog Enable register set, a reset pulse from the watchdog timer logic goes to PLL unit after passing through a counter to guarantee minimum assertion time, which in turn resets the IXP_RESETn registers that cause the entire chip to be reset. Figure 134 explains the reset generation for the PLL logic and for the rest of the core. CORE_RST is used inside the IXP2800 to reset everything; PLL_RST can be disabled. 10.3.5 Reset Removal Operation Based on CFG_PROM_BOOT Reset removal based on the CFG_PROM_BOOT strap option (BOOT_PROM) can be divided into two parts: 1. When CFG_PROM_BOOT is 1 (BOOT_PROM is present). 2. When CFG_PROM_BOOT is 0 (BOOT_PROM is not present). 10.3.5.1 When CFG_PROM_BOOT is 1 (BOOT_PROM is Present) After CORE_RST is de-asserted, reset from the Intel XScale® core, SHaC, and CMDARB is removed. Once the Intel XScale® core reset is removed, the Intel XScale® core starts initializing the chip. The Intel XScale® core writes the ‘clock control CSR’ to define the operating frequencies of different units. The Intel XScale® core writes IXP_RESET0[21] to allow the PCI logic to start accepting transactions on the PCI bus as part of initialization process. 10.3.5.2 When CFG_PROM_BOOT is 0 (BOOT_PROM is Not Present) After CORE_RST is de-asserted, IXP_RESET0[21] is set, allowing the PCI unit to start accepting transactions on the PCI bus. In this mode, the Intel XScale® core is kept in reset. Reset from DRAM logic is removed by the PCI host by writing 0 to specific bits in the IXP_RESET0 register. 10.3.6 Strap Pins The IXP2800 Strap pins for reset and initialization operation are described in Table 149. 368 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset Table 149. IXP2800 Network Processor Strap Pins Signal Name Description PCI_RST direction pin: (Also called PCI_HOST) Need to be a dedicated pin. CFG_RST_DIR RST_DIR 1—IXP2800 Network Processor is the host supporting central function. PCI_RST_L is output. 0—IXP2800 Network Processor is not central function. PCI_RST_L is input. This pin is stored at XSC[31] (XScale_Control register) at the trailing edge of reset. PCI PROM BOOT Pin: 1—IXP2800 Network Processor will boot from PROM: Whether Intel XScale® core will configure the system or not will be defined by CFG_PCI_BOOT_HOST strap option. CFG_PROM_BOOT GPIO[0] 0—IXP2800 Network Processor will not boot from PROM. So after host has downloaded image od boot code into DRAM, Intel XScale® core will boot from DRAM address 0. This pin is stored at XSC[29] (XScale_Control register) at the trailing edge of reset. PCI BOOT HOST Pin: 1—IXP2800 Network Processor will configure the PCI system. CFG_PCI_BOOT_HOST GPIO[1] 0—IXP2800 Network Processor will not configure the PCI system. This pin is stored at XSC[28] (XScale_Control register) at the trailing edge of reset. PCI Arbiter Pin: CFG_PCI_ARB GPIO[2] 1—IXP2800 Network Processor is the arbiter on the PCI bus. 0—IXP2800 Network Processor is not the arbiter on the PCI bus. PLL Multiplier PLL_MULT[5:0] SP_AD[5:0] RESET_OUT_STRAP SP_AD[7] Valid values are 010000-110000 for a multiplier range of 16 – 48. Other values will result in undefined behavior by PLL. When 1: nRESET_OUT is removed after PLL locks. When 0: nRESET_OUT is removed by software using bit IXP_RESET0[17]. SRAM Bar Window: 11—SRAM BAR size of 256 Mbytes CFG_PCI_SWIN[1:0] GPIO[6:5] 10—SRAM BAR size of 128 Mbytes 01—SRAM BAR size of 64 Mbytes 00—SRAM BAR size of 32 Mbytes DRAM BAR Window: 11—DRAM BAR size of 1024 Mbytes CFG_PCI_DWIN[1:0] GPIO[4:3] 10—DRAM BAR size of 512 Mbytes 01—DRAM BAR size of 256 Mbytes 00—DRAM BAR size of 128 Mbytes Select source of MSF Tx Clock: CFG_MSF_FREQ_SEL SP_AD[6] 0—TCLK_Ref input pin 1—Internally generated clock Hardware Reference Manual 369 Intel® IXP2800 Network Processor Clocks and Reset Table 150 lists the supported Strap combinations of CFG_PROM_BOOT, CFG_RST_DIR, and CFG_PCI_BOOT_HIST. Table 150. Supported Strap Combinations CFG_PROM_BOOT, CFG_RST_DIR, CFG_PCI_BOOT_HOST Result 000 Allowed 001 Allowed 010 Not allowed 011 Not allowed 100 Allowed 101 Allowed 110 Allowed 111 Allowed One more restriction in the PCI unit is that, if the IXP2800 Network Processor is a PCI_HOST or PCI_ARBITER, it should also be PCI_CENTRAL_FUNCTION. 10.3.7 Powerup Reset Sequence When the system is powered up, bypass clock is sent to all the units as the chip begins to power up. It will merely be used to allow a gradual power up and to begin clocking state elements to remove possible circuit contention. When PLL gets locked after nRESET is de-asserted, it will start generating divide_by_16 clocks for all the units. Reset from the IXP_RESET register is also removed at the same time. When software updates the clock count register, clocks are again stopped for 32 cycles and then start again. The reset sequence described above is the same in the case when reset happens through the PCI_RST_L signal and CFG_RST_DIR is asserted. Once in operation, if watchdog timer expires with watchdog timer enable bit (bit [0] in the Timer Watchdog Enable register ON, a reset pulse from the watchdog timer logic resets the IXP_RESETn registers and in turn causes the entire network processor to be reset. 10.4 Boot Mode The IXP2800 can boot in following two modes: • Flash ROM • PCI Host Download Figure 135 shows the IXP2800 Network Processor Boot process. 370 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset Figure 135. Boot Process START Reset Signal asserted (hardware, software, PCI or Watchdog) Reset Signal deasserted. If CFG_RST_DIR is 1, the Network Processor drives PCI RST# signal. If CFG_RST_DIR is 0, PCI_RST# is input. No CFG_PROM_BOOTBoot From Present 1. Intel XScale® Core is held in reset. 2. PCI BAR window sizes are configured by strap options. 3. External PCI host configures PCI registers and DRAM registers. 4. External PCI host loads boot image in DRAM. 5. Release Intel XScale® Core from reset and Intel XScale® Core starts code fetch from DRAM at 0x0. Yes 1. Intel XScale® Core boots off PROM. 2. Configures SRAM, DRAM, Media, etc. 3. If CFG_RST# signal after 1 ms timeout once PCI clock active is detected. 4. Retries PCI config cycles. 5. Programs PCI BAR window size. 6. Intel XScale® Core writes the IXP_RESET0[21] register to enable PCI bus. Yes CFG_PROM_ BOOT_HOST No Intel XScale® Core initializes the system by initiating PCI config cycles. END A9782-03 Hardware Reference Manual 371 Intel® IXP2800 Network Processor Clocks and Reset 10.4.1 Flash ROM At power up, if FLASH_ROM is present, strap pin CFG_PROM_BOOT should be sampled 1 (should be pulled up). Therefore after reset being removed by the PLL logic from the IXP_RESET0 register, the Intel XScale® core reset is automatically removed. Flash Alias Disable (bit [8] of Misc Control register) information is used by the Intel XScale® core gasket to decide where to forward address 0 from the Intel XScale® core when the Intel XScale® core wakes up and starts accessing the code from address 0. In this mode, since “flash alias disable” bit is reset to 0, the Intel XScale® core gasket will convert access to address 0 to PROM access from address 0 using the CAP command. Based on the code residing inside PROM, the Intel XScale® core starts removing reset from SRAM, PCI, DRAM, Microengines etc. by writing 0 in their corresponding bit location of IXP_RESETn register and then initializing their configuration registers. Boot code in PROM can change flash alias disable bit to 1 anytime to map DRAM at address 0 and therefore block further accesses to PROM at address 0. This change should be done before putting any data in DRAM at address 0. The Intel XScale® core also sets different BARs inside PCI unit to define memory requirements for different windows. The Intel XScale® core behavior as a host is controlled by CFG_PCI_BOOT_HOST strap option. If CFG_PCI_BOOT_HOST is sampled asserted in the de-asserting edge of reset, the Intel XScale® core will behave as boot host and configure the PCI system. 10.4.2 PCI Host Download At power up, if FLASH_ROM is not present, strap pin CFG_PROM_BOOT should be sampled 0 (should be pulled down). In this mode CFG_RST_DIR pin should be 0 at power up signaling PCI_RST_L pin is an input that behaves as global chip reset. 1. Even after reset is removed by the PLL logic from IXP_RESET0 register (after PCI_RST_L reset is de-asserted), the Intel XScale® core reset is not removed. 2. PCI Reset through IXP_RESET0 [16] is removed automatically after being set and reset being removed. 3. IXP_RESET0[21] is set after PCI_RST_L has been removed and PLL_LOCK is sampled asserted. 4. Once IXP_RESET0[21] is set, PCI unit starts responding to transactions. 5. PCI Host first configures CSR, SRAM and DRAM base address registers after reading size requirements for these BARs. The size for CSR, SRAM and DRAM is defined by the use of Strap pins. Pre-fetchability for the window is defined by bit [3] of the respective BAR registers; therefore when host reads these registers, bit [3] is returned as 0 for CSR, SRAM and DRAM defining CSRs and also if SRAM and DRAM are to be non-prefetchable. Type Bits [2:0] are always Read-Only and return the value of 0x0 when read for CSR, SRAM and DRAM BAR registers. 6. PCI Host also programs Clock Control CSR, for PLL unit to generate proper clocks for SRAM, DRAM and other units. Once these base address registers have been programmed, PCI host programs DRAM channels by initializing SDRAM_CSR, SDRAM_MEMCTL0, SDRAM_MEMCTL1 and SDRAM_MEMINIT registers. Once these registers have been programmed, PCI host writes the BOOT Code in DRAM starting at DRAM address 0. PCI Host can also program other registers if required. Once the boot 372 Hardware Reference Manual Intel® IXP2800 Network Processor Clocks and Reset code is written in DRAM, PCI host writes 1 at bit [8] of Misc_Control register called Flash Alias Disable (Reset value 0). The Alias Disable bit can be wired to the Intel XScale® core gasket directly so that gasket knows how to transform address 0 from the Intel XScale® core. After writing 1 at Flash Alias Disable bit, host removes reset from the Intel XScale® core by writing 0 in bit [0] of IXP_RESET0 register. The Intel XScale® core starts booting from address 0, which is now directed by the gasket to DRAM. 10.5 Initialization Refer to the Intel® IXP2800 Network Processor Hardware Initialization Reference Manual for information about the initialization of all units of the IXP2800 Network Processor. Hardware Reference Manual 373 Intel® IXP2800 Network Processor Clocks and Reset 374 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Performance Monitor Unit 11.1 11 Introduction The Performance Monitor Unit (PMU) is a hardware block consisting of counters and comparators that can be programmed and controlled by using a set of configured registers to monitor and to fine tune performance of different hardware units in the IXP2800 Network Processor. The total number of such counters needed is determined based on the different events and functions that must be monitored concurrently. Observation of such events on the chip is used for statistical analysis, uncovering bottlenecks, and to tune the software to fit the hardware resources. 11.1.1 Motivation for Performance Monitors For a given set of functionality, a measure of performance is very important in making decisions on feature sets to be supported, and to tune the embedded software on the chip. An accurate estimate of latency and speed in hardware blocks enables firmware and software designers to understand the limitations of the chip and to make prudent judgments about its software architecture. The current generation does not provide any performance monitor hooks. Since IXP2800 Network Processors are targeted for high performance segments (OC-48 and above), the need for tuning the software to get the most out of the hardware resources becomes extremely critical. The performance monitors provide valuable insight into the chip by providing real-time data on latency and utilization of various resources. See Figure 136 for the Performance Monitor Interface Block Diagram. Hardware Reference Manual 375 Intel® IXP2800 Network Processor Performance Monitor Unit Figure 136. Performance Monitor Interface Block Diagram APB Bus for Read/Write of CHAP Registers Event Multiplexer Control to Hardware Blocks Events from Hardware Block A Status Conditions for Interrupts from CHAP Counter 0 Events from Hardware Block B Performance Monitoring Unit Events from Hardware Block C Status Conditions for Interrupts from CHAP Counter 1 Status Conditions for Interrupts from CHAP Counter N-2 Events from Hardware Block D 11.1.2 Status Conditions for Interrupts from CHAP Counter N-1 Motivation for Choosing CHAP Counters The Chipset Hardware Architecture Performance (CHAP) counters enable statistics gathering of internal hardware events in real-time. This implementation provides users with direct event counting and timing for performance monitoring purposes, and provides enough visibility into the internal architecture to perform utilization studies and workload characterization. This implementation can also be used for chipset validation, higher-performing future chipsets, and applications tuned to the current chipset. The goal is that this will benefit both internal and external hardware and software development. The primary motivation for selecting the CHAP architecture for use in the IXP2800 Network Processor product family is that it has been designed and validated in several Intel desktop chipsets and the framework also provides a software suite that may be reused with little modification. 376 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.1.3 Functional Overview of CHAP Counters At the heart of the CHAP counter’s functionality are counters, each with associated registers. Each counter has a corresponding command, event, status, and data register. The smallest implementation has two counters, but if justified for a particular product, this architecture can support many more counters. The primary consideration is available silicon area. The memorymapped space currently defined can accommodate registers for 256 counters. It can be configured for more, but that is beyond what is currently practical. Signals that represent events from throughout the chip are routed to the CHAP unit. Software can select events that are recorded during a measurement session. The number of counters in an implementation defines the number of events that can be recorded simultaneously. Software and hardware events can control the starting, stopping, and sampling of the counters. This can be done in a time-based (polling) or an event-based fashion. Each counter can be incremented or decremented by different events. In addition to simple counting of events, the unit can provide data for histograms, queue analysis, and conditional event counting (for example, the number of times that event A happens before the first event B takes place). When a counter is sampled, the current value of the counter is latched into the corresponding data register. The command, event, status, and data registers are accessible via standard Advanced Peripheral Bus (APB) memory-mapped registers, to facilitate high-speed sampling. Two optional external pins allow for external visibility and control of the counters. The output pin signals that one of the following conditions generated an interrupt from any one of the counters: • A programmable threshold condition was true. • A command was triggered to begin. • A counter overflow or underflow occurred. The input pin allows an external source to control when a CHAP command is executed. Figure 137 represents a single counter block. The multiplexers, registers, and all other logic are repeated for each counter that is present. There is a threshold event from each counter block that feeds into each multiplexer. Hardware Reference Manual 377 Intel® IXP2800 Network Processor Performance Monitor Unit Figure 137. Block Diagram of a Single CHAP Counter 11.1.4 Command Trigger Data Register Increment Event Counter Decrement Event Signals from Internal Units Command, Status, & Event Registers & control logic >=< Event Preconditioning External Input Event 32b Register Access Bus Basic Operation of the Performance Monitor Unit At power-up, the Intel XScale® core invokes the performance monitoring software code. The PMU software has the application code to generate different types of data, such as histograms and graphs. It also has a device driver to configure and read data from the PMU in the IXP2800 Network Processor. This software programs the configuration registers in the PMU block to perform a certain set of monitoring and data collection. PMU CHAP counters execute the commands programmed by the Intel XScale® core and they collect various types of data such as latency and counts. Upon collection, it triggers an interrupt to the Intel XScale® core to indicate the completion of monitoring. The Intel XScale® core either periodically monitors the PMU registers or waits for an interrupt to collect the observed data. The Intel XScale® core uses the APB to communicate with the PMU configuration registers. Figure 138 represents a block diagram of the IXP2800 Network Processor and Performance Monitor Unit’s (PMU) in relation to other hardware blocks in the chip. 378 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Figure 138. Basic Block Diagram of IXP2800 Network Processor with PMU Config Registers MEDIA I/F PCI I/F APB Bus SHaC ME1 ME2 ME3 ME4 ME8 CHAP Counters Intel XScale® Core Push-pull Bus QDR Control DDRAM Control MUX Control from PMU Hardware Events PMU 11.1.5 Definition of CHAP Terminology Duration Count The counter is incremented for each clock for which the event signal is asserted as logic high. MMR Memory Mapped register. OA Observation Architecture. The predecessor to CHAP counters that facilitates the counting of hardware events. Occurrence Count The counter is incremented each time a rising edge of the event signal is detected. Preconditioning Altering a design block signal that represents an event such that it can be counted by the CHAP unit. The most common preconditioning is likely to be a ‘one-shot’ to count occurrences. RO (register) Read Only. If a register is read-only, writes to this register have no effect. R/W (register) Read/Write. A register with this attribute can be read and written. WO (register) Write Once. Once written, a register with this attribute becomes Read Only. This register can only be cleared by a Reset. WC (register) Write Clear. A register bit with this attribute can be read and written. However, a write of 1 clears (sets to 0) the corresponding bit and a write of 0 has no effect. Hardware Reference Manual 379 Intel® IXP2800 Network Processor Performance Monitor Unit 11.1.6 Definition of Clock Domains The following abbreviations are used in the events table under clock domain. The Command Push/Pull Clock also known as the Chassis clock. This clock is derived from the Microengine (ME) Clock. It is one-half of the Microengine clock. P_CLK 11.2 T_CLK Microengine Clock. MTS_CLK MSF Flow Control Status LVTTL Clock TS_CLK. MRX_CLK MSF Flow Control Receive LVDS Clock RX_CLK. MR_CLK MSF Receive Data Clock R_CLK. MT_CLK MSF Transmit Data Clock T_CLK. MTX_CLK MSF Flow Control Transmit LVDS Clock TX_CLK. D_CLK DRAM Clock. S_CLK SRAM Clock. APB_CLK Advance Peripheral Bus Clock. Interface and CSR Description CAP is a standard logic block provided as part of the Network Processor that provides a method of interfacing to the ARM APB. This bus supports standard APB peripherals such as PMU, UART, Timers, and GPIO as well as CSRs that do not need to be accessed by the Microengines. As shown in Figure 139, CAP uses three bus interfaces to support these modes. CAP supports a target ID of 0101, which Microengine assemblers should identify as a CSR instruction. Figure 139. CAP Interface to the APB Source/Target Interfaces CSR Command Bus Masters (e.g. ME) APB Bus CAP APB Peripheral CAP CSR Bus CSRs (std or fast) Intel XScale® Gasket Core Push/Pull Bus Table 151 shows the Intel XScale® core and Microengine instructions used to access devices on these buses and it shows which buses are used during the operation. For example, to read an APB peripheral such as a UART CSR, a Microengine would execute a csr[read] instruction and the Intel XScale® core would execute a Load (ld) instruction. Data is then moved between the CSR and the Intel XScale® core/Microengine by first reading the CSR via the APB and then writing the result to the Intel XScale® core/Microengine via the Push Bus. 380 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 151. APB Usage Accessing Read Operation Access Method: • Microengine: csr[read] APB Peripheral 11.2.1 • Intel XScale® core: ld Bus Usages: Write Operation Access Method: • Microengine: csr[write] • Intel XScale® core: st Bus Usages: • Read source: APB • Read source: Pull Bus • Write destination: Push bus • Write destination: APB APB Peripheral The APB is part of the AMD* controller Bus Architecture (AMBA) hierarchy of buses that is optimized for minimal power consumption and reduced design complexity. The PMU needs to operate as an APB peripheral, interfacing with rest of the chip via the APB. The PMU needs to have an APB interface unit, which can perform a APB reads and writes to enable data transfer to and from the PMU registers. 11.2.2 CAP Description 11.2.2.1 Selecting the Access Mode The CAP selects the appropriate access mode based on the COMMAND and ADDRESS fields from the Command Bus. 11.2.2.2 PMU CSR Please refer to Intel IXP2400 and IXP2800 Network Processor Programmer's Reference Manual. 11.2.2.3 CAP Writes For an APB write, CAP arbitrates for the S_Pull_Bus, pulls the write data from the source identified in PP_ID (either a Microengine transfer register or Intel XScale® core write buffer), and puts it into the CAP Pull Data FIFO. It then drives the address and writes data onto the appropriate bus. CAP CSRs locally decode the address to match their own. CAP generates a separate APB — devices select signal for each CAP device (up to 15 devices). If the write is to an APB CSR, the Control Logic maintains valid signaling until the APB_RDY_H signal is returned. (The APB RDY signal is an extension to the APB specification specifically added for the Network Processor). CAP supports write operations with burst counts greater than 1. CAP looks at the length field on the command bus and breaks each count into a separate APB write cycle, incrementing the CSR number for each bus access. 11.2.2.4 CAP Reads For an APB read, CAP drives the address, write, select, and enable signals, and waits for the acknowledge signal (APB_RDY_H) from the APB device. For a CAP CSR read, CAP drives the address, which controls a tree of multiplexers to select the appropriate CSR. CAP then waits for the Hardware Reference Manual 381 Intel® IXP2800 Network Processor Performance Monitor Unit acknowledge signal (CAP_CSR_RD_RDY). When the data is returned, CAP puts the read data into the Push Data FIFO, arbitrates for the S_Push_Bus, and then the Push/Pull Arbiter pushes the data to the destination identified in PP_ID. 11.2.3 Configuration Registers Because the CHAP unit resides on the APB, the offset associated with each of these registers is relative to the Memory Base Address that the configuration software sets in the PMUADR register. Each counter has one command, one event, one status, and one data register associated with it. Each counter is “packaged” with these four registers in a “counter block”. Each implementation selects the number of counters it will implement, and therefore how many counter blocks (or slices) it will have. These registers are numbered 0 through N - 1 where N represents the number of counters - 1. See Figure 140. Figure 140. Conceptual Diagram of Counter Array Event Signals Counter Block 0 Counter Block 1 Counter Block 2 Counter Counter Counter Command Register Command Register Command Register Events Register Events Register Events Register Status Register Status Register Status Register Data Register Data Register Data Register Register Interface 11.3 Performance Measurements There are several measurements that can be made on each of the hardware blocks. These measurements together would enable improvements in hardware and software implementation and architectural issues. Table 152 describes the different blocks and their associated performance measurement events. 382 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 152. Hardware Blocks and Their Performance Measurement Events (Sheet 1 of 2) Hardware Block Performance Measurement Event Description Intel XScale® Core DRAM Read Head of Queue Latency Histogram The Intel XScale® core generates a read or write command to the DRAM primarily to either push or pull data of the DDRAM. These commands are scheduled to the DRAM through the push-pull arbiter through a command FIFO in the gasket. The DRAM-read head of queue enables the PMU to monitor when the read and write commands posted by the Intel XScale® core in the gasket gets fetched and delivered to DDRAM. SRAM Read Head of Queue Latency Histogram The Intel XScale® core generates a read or write command to the SRAM primarily to either push or pull data of the SRAM. These commands are scheduled to the SRAM through the push-pull arbiter through a command FIFO in the gasket. The SRAM-read head of queue enables the PMU to monitor when the read and write commands posted by the Intel XScale® core in the gasket gets fetched and delivered to SRAM. Interrupts Number of interrupts seen. Histogram of time between interrupts. Microengines Command FIFO Number of Commands Control Store Measures These statistics give the number of the commands issued by the Microengine in a particular period of time. It also can count each different thread. Count time between two microstore locations (locations can be set by instrumentation software). Histogram time between two microstore locations (locations can be set by instrumentation software) Execution Unit Status Histogram of stall time. Histogram of aborted time. Histogram of swapped out time. Histogram of idle time. Command FIFO Head of Queue Wait Time Histogram (Latency) This is to measure the latency of a command, which is at the head of the queue and is waiting to be sent out to the destination over the chassis. SRAM Commands A count of SRAM commands received. These are maskable by command type such as Put and Get. SRAM Bytes, Cycles Busy This measurement describes the number of bytes transferred and the SRAM busy time. Queue Depth Histogram This measurement analyzes the different queues such as ordered, priority, push queue, pull queue, read lock fail, and HW queues, and provides information about utilization. DRAM Commands This measurement lists the total commands issued to the DRAM, and they can be counted based on command type and error type. DRAM Bytes, Cycles Busy This measurement indicates the DRAM busy time and bytes transferred. Maskable by Read/Write, Microengine, PCI, or the Intel XScale® Core This measurement indicates the different accesses that are initiated to the DRAM. These measurements could be for all the accesses to the memory or can be masked using a specific source such as PCI, the Intel XScale® core, or Microengine. This can further be measured based on read or write cycles. SRAM DRAM Hardware Reference Manual 383 Intel® IXP2800 Network Processor Performance Monitor Unit Table 152. Hardware Blocks and Their Performance Measurement Events (Sheet 2 of 2) Hardware Block Performance Measurement Event Description Chassis/Push-Pull Command Bus Utilization These statistics give the number of the command requests issued by the different Masters in a particular period of time. This measurement also indicates how long it takes to issue the grant from the request being issued by the different Masters. Push and Pull Bus Utilization This measurement keeps track of the number of accesses issued and how long it takes to send the data to its destination. Number of Accesses by Command Type This measurement indicates the number of hash accesses issued; this count is maskable, based on command type. Latency of Histogram This monitors the latency through each of the HASH queues. Number of Accesses by Command Type This measurement indicates the number of Scratch accesses issued and this count is maskable, based on command type. Number of Bytes Transfer This measurement indicates total number of bytes transferred to or from Scratch. Latency of Histogram This measurement indicates the latency of performing read or write from the Scratch. Latency in command executions may also be measured. Master Accesses These statistics give the number of Master accesses that were generated by the PCI blocks. This measurement can be counted based on individual command type. Slave Accesses These statistics give the number of Slave accesses that were generated by the PCI blocks. This measurement can be counted based on individual command type. Master/Slave Read Byte Count This statistics give the total number of bytes of data that were generated by the PCI Master/Slave reads access. This measurement can be counted based on individual command type. Master/Slave Write Byte Count These statistics give the total number of bytes of data that were generated by the PCI Master/Slave write accesses. This measurement can be counted based on individual command type. Burst Size Histogram These statistics give a histogram of the number of various burst sizes. TBUF Occupancy Histogram This measurement shows the occupancy rate at different depths of the FIFO. This can help in better utilization of TBUF. RBUF Occupancy Histogram This measurement shows the occupancy rate at different depths of the FIFO. This can help in better utilization of RBUF. Packet/Cell/Frame Count on a PerPort Basis This measurement gives the count of number of packets or cells or frames transferred in Transmitting mode. This measurement gives the count of number of packets or cells or frames transferred in the receiving mode. This may be measured using a per-port basis. Inter-arrival Time for Packets on a Per-Port Basis This measurement can provide information on gaps between packets, thereby indicating effective line rate. Burst Size Histogram This measurement gives the various burst sizes of packets being transmitted and received. Hash Scratch PCI Media Interface 384 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4 Events Monitored in Hardware Tables in this section describe the events that can be measured, including the name of the event and the Event Selection Code (ESC). Refer to Section 11.4 for tables showing event selection codes. The acronyms in the event names typically represent unit names.The guidelines for which events a particular component must implement are provided in the following sections. 11.4.1 Queue Statistics Events 11.4.1.1 Queue Latency Latency of Queue is an indicator of the control logic performance in terms of effective execution of the commands in the Control/Command queue or, the control logic’s ability to effectively transfer data from the Data Queue. This kind of monitoring needs observation of specific events such as: • Enqueue into the Queue This event indicates when an entry was made to the queue. • Dequeue into the Queue This event indicates when an entry was removed from the queue. The time period between when a particular entry was made into the queue and when the entry was removed from the queue indicates the latency of the queue for that entry. • Queue Full Event This event indicates when the queue has no room for additional entries. • Queue Empty Event This event indicates when the queue has no entries. Queue Full and Queue Empty events can be used to determine Queue Utilization and bandwidth available in the queue to determine how to handle more traffic. 11.4.1.2 Queue Utilization Utilization of Queue is determined by observing the percentage of time each queue is operating at a particular threshold level. Based on Queue size, multiple threshold values can be predetermined and monitored. The result of these observations can be used to provide histograms for Queue utilization. This kind of observation helps us better utilize the available resources in the queue. 11.4.2 Count Events 11.4.2.1 Hardware Block Execution Count On each of the hardware blocks, events of importance such as number of commands executed, number of bytes transferred, total amount of clock-blocks that are free, and the total amount of time all of the contexts in the Microengine were idle can be counted as statistics, for managing the available resources. Hardware Reference Manual 385 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.3 Design Block Select Definitions Once an event is defined, its definition must remain consistent between products. If the definition changes, it should have a new event selection code. This document contains the master list of all ESCs in all CHAP-enabled products. Not all of the ESCs in this document are listed in numerical order. The recommendation is to group similar events within the following ESC ranges. See Table 153. Table 153. PMU Design Unit Selection (Sheet 1 of 2) Target Device Target ID PMU Design Group Block # Null xxx xxx 0000 Description Null (False) Event CHAP Counters Internal Threshold Events Event bit 0 CHAP Counter 0 PMU_Counter xxx xxx 0001 (PMU) Event bit 1 CHAP Counter 1 Event bit 2 CHAP Counter 2 Event bit 3 CHAP Counter 3 Event bit 4 CHAP Counter 4 Event bit 5 CHAP Counter 5 SRAM Group SRAM_DP1 001 001 SRAM_DP0 001 010 SRAM_CH3 001 011 SRAM_CH2 001 100 SRAM_CH1 001 101 SRAM_CH0 001 110 SRAM channel 0 0010 SRAM channel 1 (SRAM Group) SRAM channel 2 one and only one will be selected from same group SRAM channel 3 SRAM d-push SRAM d-pull DRAM Group 386 DRAM_CR1 010 000 DRAM_CR0 010 001 DRAM_DPLA 010 010 DRAM_DPSA 010 011 DRAM_CH2 010 100 DRAM_CH1 010 101 DRAM_CH0 010 110 XPI 000 001 SHaC 000 010 0101 MSF 000 011 0110 0011 (DRAM) one and only one will be selected from same group 0100 (XPI) DRAM channel 0 DRAM channel 1 DRAM channel 2 DRAM d-push DRAM d-pull XPI Media Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 153. PMU Design Unit Selection (Sheet 2 of 2) Target Device Target ID PMU Design Group Block # Description Intel XScale® core 000 100 0111 Intel XScale® core PCI 000 101 1000 PCI ME Cluster 0 Group ME07 100 111 ME06 100 110 ME05 100 101 ME04 100 100 ME03 100 011 ME02 100 010 ME01 100 001 ME00 100 000 ME17 110 111 ME16 110 110 ME15 110 101 ME14 110 100 ME13 110 011 ME12 110 010 ME11 110 001 ME10 110 000 1001 (MEC0) one and only one will be selected from same group ME Channel 0 ME00 ME01 ME02 ME03 ME04 ME05 ME06 ME07 ME Cluster 1 Group 1010 (MEC1) one and only one will be selected from same group 1011-1111 11.4.4 ME Channel 1 ME10 ME11 ME12 ME13 ME14 ME15 ME16 ME17 Reserved Null Event Not an actual event. When used as an increment or decrement event, no action takes place. When used as a Command Trigger, it causes the command to be triggered immediately after the command register is written to by the software. Also called False Event. Not reserved. Hardware Reference Manual 387 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.5 Threshold Events These are the outputs of the threshold comparators. When the value in a data register is compared to its corresponding counter value and the condition is true, a threshold event is generated. This results in: • A pulse on the signal lines that are routed to the event’s input port (one signal line from each comparator). • One piece of functionality this enables is to allow for CHAP commands to be completed only when a Threshold Event occurs. In other words, a Threshold Event can be used as a Command Trigger to control the execution of any CHAP command (start, stop, sample, etc.). See Table 154. Table 154. Chap Counter Threshold Events (Design Block # 0001) 388 Clock Domain Single pulse/ Long pulse Burst Multiplexer # Event Name Description 000 Counter 0 Threshold P_CLK single separate Threshold Condition True on Event Counter 0 001 Counter 1 Threshold P_CLK single separate Threshold Condition True on Event Counter 1 010 Counter 2 Threshold P_CLK single separate Threshold Condition True on Event Counter 2 011 Counter 3 Threshold P_CLK single separate Threshold Condition True on Event Counter 3 100 Counter 4 Threshold P_CLK single separate Threshold Condition True on Event Counter 4 101 Counter 5 Threshold P_CLK single separate Threshold Condition True on Event Counter 5 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6 External Input Events 11.4.6.1 XPI Events Target ID(000001) / Design Block #(0100) Table 155. XPI PMU Event List (Sheet 1 of 4) Event Number Event Name Clock Domain Single pulse/ Long pulse Burst Description 0 XPI_RD_P APB_CLK single separate It includes all the read accesses, PMU, timer, GPIO, UART, and Slowport. 1 XPI_WR_P APB_CLK single separate It includes all the write accesses, PMU, timer, GPIO, UART, and Slowport. 2 PMU_RD_P APB_CLK single separate It executes the read access to the PMU unit. 3 PMU_WR_P APB_CLK single separate It executes the write access to the PMU unit. 4 UART_RD_P APB_CLK single separate It executes the read access to the UART unit. 5 UART_WR_P APB_CLK single separate It executes the write access to the UART unit. 6 GPIO_RD_P APB_CLK single separate It executes the read access to the GPIO unit. 7 GPIO_WR_P APB_CLK single separate It executes the write access to the GPIO unit. 8 TIMER_RD_P APB_CLK single separate It executes the read access to the Timer unit. 9 TIMER_WR_P APB_CLK single separate It executes the write access to the Timer unit. 10 SPDEV_RD_P APB_CLK single separate It executes the read access to the Slowport Device. 11 SPDEV_WR_P APB_CLK single separate It executes the write access to the Slowport Device. 12 SPCSR_RD_P APB_CLK single separate It executes the read access to the Slowport CSR. 13 SPCSR_WR_P APB_CLK single separate It executes the write access to the Slowport CSR. 14 TM0_UF_P APB_CLK single separate It shows the occurrence of timer 1 counter underflow. 15 TM1_UF_P APB_CLK single separate It shows the occurrence of timer 2 counter underflow. 16 TM2_UF_P APB_CLK single separate It shows the occurrence of timer 3 counter underflow. 17 TM3_UF_P APB_CLK single separate It shows the occurrence of timer 4 counter underflow. 18 IDLE0_0_P APB_CLK single separate It displays the idle state of the state machine 0 for the mode 0 of Slowport. 19 START0_1_P APB_CLK single separate It enters the start state of the state machine 0 for the mode 0 of Slowport. 20 ADDR10_3_P APB_CLK single separate It enters the first address state, AD[9:2], of the state machine 0 for the mode 0 of Slowport. 21 ADDR20_2_P APB_CLK single separate It enters the second address state, AD[17:10], of the state machine 0 for the mode 0 of Slowport. 22 ADDR30_6_P APB_CLK single separate It enters the third address state, AD[24:18], of the state machine 0 for the mode 0 of Slowport. 23 SETUP0_4_P APB_CLK single separate It enters data setup state of the state machine 0 for the mode 0 of Slowport. 24 PULW0_5_P APB_CLK single separate It enters data duration state of the state machine 0 for the mode 0 of Slowport. 25 HOLD0_D_P APB_CLK single separate It enters data hold state of the state machine 0 for the mode 0 of Slowport. Hardware Reference Manual 389 Intel® IXP2800 Network Processor Performance Monitor Unit Table 155. XPI PMU Event List (Sheet 2 of 4) 390 26 TURNA0_C_P APB_CLK single separate It enters the termination state of the state machine 0 for the mode 0 of Slowport. 27 IDLE1_0_P APB_CLK single separate It displays the idle state of the state machine 1 for the mode 1 of Slowport. 28 START1_1_P APB_CLK single separate It enters the start state of the state machine 1 for the mode 1 of Slowport. 29 ADDR11_3_P APB_CLK single separate It enters the first address state, AD[7:0], of the state machine 1 for the mode 1 of Slowport. 30 ADDR21_2_P APB_CLK single separate It enters the second address state, AD[15:8], of the state machine 1 for the mode 1 of Slowport. 31 ADDR31_6_P APB_CLK single separate It enters the second address state, AD[23:16], of the state machine 1 for the mode 1 of Slowport. 32 ADDR41_7_P APB_CLK single separate It enters the second address state, AD[24], of the state machine 1 for the mode 1 of Slowport. 33 WRDATA1_5_P APB_CLK single separate It unpacks the data from the APB onto the Slowport bus for the state machine 1 for the mode 1 of Slowport. 34 PULW1_4_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 1 for the mode 1 of Slowport. 35 CHPSEL1_C_P APB_CLK single separate It enters the chip select assertion pulse width when the state machine 1 is active for the mode 1 of Slowport. 36 OUTEN1_E_P APB_CLK single separate It enters the cycle when the OE is asserted during running on the state machine 1 for the mode 1 of Slowport. 37 PKDATA1_F_P APB_CLK single separate It enters the read data packing state when the state machine 1 is active for the mode 1 of Slowport. 38 LADATA1_D_P APB_CLK single separate It enters the data capturing cycle when the state machine 1 is active for the mode 1 of Slowport. 39 READY1_9_P APB_CLK single separate It enters the acknowledge state to terminate the read cycle when the state machine 1 is active for the mode 1 of Slowport. 40 TURNA1_8_P APB_CLK single separate It enters the turnaround state of the transaction when the state machine 1 is active for the mode 1 of Slowport. 41 IDLE2_0_P APB_CLK single separate It displays the idle state of the state machine 2 for the mode 2 of Slowport. 42 START2_1_P APB_CLK single separate It enters the start state of the state machine 2 for the mode 2 of Slowport. 43 ADDR12_3_P APB_CLK single separate It enters the first address state, AD[7:0], of the state machine 2 for the mode 2 of Slowport. 44 ADDR22_2_P APB_CLK single separate It enters the second address state, AD[15:8], of the state machine 2 for the mode 2 of Slowport. 45 ADDR32_6_P APB_CLK single separate It enters the second address state, AD[23:16], of the state machine 2 for the mode 2 of Slowport. 46 ADDR42_7_P APB_CLK single separate It enters the second address state, AD[24], of the state machine 2 for the mode 2 of Slowport. 47 WRDATA2_5_P APB_CLK single separate It unpacks the data from the APB onto the Slowport bus for the state machine 2 for the mode 2 of Slowport. Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 155. XPI PMU Event List (Sheet 3 of 4) 48 SETUP2_4_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 2 for the mode 2 of Slowport. 49 PULW2_C_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 2 for the mode 2 of Slowport. 50 HOLD2_E_P APB_CLK single separate It enters the data hold period for the state machine 2 for the mode 2 of Slowport. 51 OUTEN2_F_P APB_CLK single separate It starts to assert the OE when the state machine 2 is active for the mode 2 of Slowport. 52 PKDATA2_D_P APB_CLK single separate It enters the read data packing state during the active state machine 2 for the mode 2 of Slowport. 53 LADATA2_9_P APB_CLK single separate It enters the data capturing cycle during the active state machine 2 for the mode 2 of Slowport. 54 READY2_B_P APB_CLK single separate It enters the acknowledge state to terminate the read cycle when the state machine 2 is active for the mode 2 of Slowport. 55 TURNA2_8_P APB_CLK single separate It enters the turnaround state of the transaction when the state machine 2 is active for the mode 2 of Slowport. 56 IDLE3_0_P APB_CLK single separate It displays the idle state of the state machine 3 for the mode 3 of Slowport. 57 START3_1_P APB_CLK single separate It enters the start state of the state machine 3 for the mode 3 of Slowport. 58 ADDR13_3_P APB_CLK single separate It enters the first address state, AD[7:0], of the state machine 3 for the mode 3 of Slowport. 59 ADDR23_2_P APB_CLK single separate It enters the second address state, AD[15:8], of the state machine 3 for the mode 3 of Slowport. 60 ADDR33_6_P APB_CLK single separate It enters the second address state, AD[23:16], of the state machine 3 for the mode 3 of Slowport. 61 ADDR43_7_P APB_CLK single separate It enters the second address state, AD[24], of the state machine 3 for the mode 3 of Slowport. 62 WRDATA3_5_P APB_CLK single separate It unpacks the data from the APB onto the Slowport bus for the state machine 3 for the mode 3 of Slowport. 63 SETUP3_4_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 3 for the mode 3 of Slowport. 64 PULW3_C_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 3 for the mode 3 of Slowport. 65 HOLD3_E_P APB_CLK single separate It enters the data hold period for the state machine 3 for the mode 3 of Slowport. 66 OUTEN3_F_P APB_CLK single separate It starts to assert the OE when the state machine 3 is active for the mode 3 of Slowport. 67 PKDATA3_D_P APB_CLK single separate It enters the read data packing state during the active state machine 3 for the mode 3 of Slowport. 68 LADATA3_B_P APB_CLK single separate It enters the data capturing cycle during the active state machine 3 for the mode 3 of Slowport. 69 READY3_9_P APB_CLK single separate It enters the acknowledge state to terminate the read cycle when the state machine 3 is active for the mode 3 of Slowport. Hardware Reference Manual 391 Intel® IXP2800 Network Processor Performance Monitor Unit Table 155. XPI PMU Event List (Sheet 4 of 4) 392 70 TURNA3_8_P APB_CLK single separate It enters the turnaround state of the transaction when the state machine 3 is active for the mode 3 of Slowport. 71 IDLE4_0_P APB_CLK single separate It displays the idle state of the state machine 4 for the mode 4 of Slowport. 72 START4_1_P APB_CLK single separate It enters the start state of the state machine 4 for the mode 4 of Slowport. 73 ADDR14_3_P APB_CLK single separate It enters the first address state, AD[7:0], of the state machine 4 for the mode 4 of Slowport. 74 ADDR24_2_P APB_CLK single separate It enters the second address state, AD[15:8], of the state machine 4 for the mode 4 of Slowport. 75 ADDR34_6_P APB_CLK single separate It enters the second address state, AD[23:16], of the state machine 4 for the mode 4 of Slowport. 76 ADDR44_7_P APB_CLK single separate It enters the second address state, AD[24], of the state machine 4 for the mode 4 of Slowport. 77 WRDATA4_5_P APB_CLK single separate It unpacks the data from the APB onto the Slowport bus for the state machine 4 for the mode 4 of Slowport. 78 SETUP4_4_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 4 for the mode 4 of Slowport. 79 PULW4_C_P APB_CLK single separate It enters the pulse width of the data transaction cycle for the state machine 4 for the mode 4 of Slowport. 80 HOLD4_E_P APB_CLK single separate It enters the data hold period for the state machine 4 for the mode 4 of Slowport. 81 OUTEN4_F_P APB_CLK single separate It starts to assert the OE when the state machine 4 is active for the mode 4 of Slowport. 82 PKDATA4_D_P APB_CLK single separate It enters the read data packing state during the active state machine 4 for the mode 4 of Slowport. 83 LADATA4_B_P APB_CLK single separate It enters the data capturing cycle during the active state machine 4 for the mode 4 of Slowport. 84 READY4_9_P APB_CLK single separate It enters the acknowledge state to terminate the read cycle when the state machine 4 is active for the mode 4 of Slowport. 85 TURNA4_8_P APB_CLK single separate It enters the turnaround state of the transaction when the state machine 4 is active for the mode 4 of Slowport. Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.2 SHaC Events Target ID(000010) / Design Block #(0101) Table 156. SHaC PMU Event List (Sheet 1 of 4) Event Number 0 Event Name Scratch Cmd_Inlet_Fifo Not_Empty Clock Domain Single pulse/ Long pulse Burst P_CLK single separate Scratch Command Inlet FIFO Not Empty Description 1 Scratch Cmd_Inlet_Fifo Full P_CLK single separate Scratch Command Inlet FIFO Full 2 Scratch Cmd_Inlet_Fifo Enqueue P_CLK single separate Scratch Command Inlet FIFO Enqueue 3 Scratch Cmd_Inlet_Fifo Dequeue P_CLK single separate Scratch Command Inlet FIFO Dequeue 4 Scratch Cmd_Pipe Not_Empty P_CLK single separate Scratch Command Pipe Not Empty 5 Scratch Cmd_Pipe Full P_CLK single separate Scratch Command Pipe Full 6 Scratch Cmd_Pipe Enqueue P_CLK single separate Scratch Command Pipe Enqueue 7 Scratch Cmd_Pipe Dequeue P_CLK single separate Scratch Command Pipe Dequeue 8 Scratch Pull_Data_Fifo 0 Full P_CLK single separate Scratch Pull Data FIFO Cluster 0 Full 9 Scratch Pull_Data_Fifo 1 Full P_CLK single separate Scratch Pull Data FIFO Cluster 1 Full 10 Hash Pull_Data_Fifo 0 Full P_CLK single separate Hash Pull Data FIFO Cluster 0 Full 11 Hash Pull_Data_Fifo 1 Full P_CLK single separate Hash Pull Data FIFO Cluster 1 Full 12 Scratch Pull_Data_Fifo 0 Not_Empty P_CLK single separate Scratch Pull Data FIFO Cluster 0 Not Empty 13 Scratch Pull_Data_Fifo 0 Enqueue P_CLK single separate Scratch Pull Data FIFO Cluster 0 Enqueue 14 Scratch Pull_Data_Fifo 0 Dequeue P_CLK single separate Scratch Pull Data FIFO Cluster 0 Dequeue 15 Scratch Pull_Data_Fifo 1 Not_Empty P_CLK single separate Scratch Pull Data FIFO Cluster 1 Not Empty 16 Scratch Pull_Data_Fifo 1 Enqueue P_CLK single separate Scratch Pull Data FIFO Cluster 1 Enqueue 17 Scratch Pull_Data_Fifo 1 Dequeue P_CLK single separate Scratch Pull Data FIFO Cluster 1 Dequeue 18 Scratch State Machine Idle P_CLK single separate Scratch State Machine Idle 19 Scratch RAM Write P_CLK single separate Scratch RAM Write 20 Scratch RAM Read P_CLK single separate Scratch RAM Read 21 Scratch Ring_0 Status Hardware Reference Manual P_CLK single separate If SCRATCH_RING_BASE_x[26] = 1, RING_0_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_0_STATUS indicates full. 393 Intel® IXP2800 Network Processor Performance Monitor Unit Table 156. SHaC PMU Event List (Sheet 2 of 4) 22 23 Scratch Ring_2 Status P_CLK P_CLK single single separate separate 24 Scratch Ring_3 Status P_CLK single separate 25 Scratch Ring_4 Status P_CLK single separate 26 27 Scratch Ring_5 Status Scratch Ring_6 Status P_CLK P_CLK single single separate separate 28 Scratch Ring_7 Status P_CLK single separate 29 Scratch Ring_8 Status P_CLK single separate 30 31 Scratch Ring_9 Status Scratch Ring_10 Status P_CLK P_CLK single single separate separate 32 Scratch Ring_11 Status P_CLK single separate 33 Scratch Ring_12 Status P_CLK single separate 34 394 Scratch Ring_1 Status Scratch Ring_13 Status P_CLK single separate If SCRATCH_RING_BASE_x[26] = 1, RING_1_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_1_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1 RING_2_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0 RING_2_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1 RING_3_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0 RING_3_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1 RING_4_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_4_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_5_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_5_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_6_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_6_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_7_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_7_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_8_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_8_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_9_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_9_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_10_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_10_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_11_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_11_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_12_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_12_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_13_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_13_STATUS indicates full. Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 156. SHaC PMU Event List (Sheet 3 of 4) 35 Scratch Ring_14 Status P_CLK single separate If SCRATCH_RING_BASE_x[26] = 1, RING_14_STATUS indicates empty. If SCRATCH_RING_BASE_x[26] = 0, RING_14_STATUS indicates full. If SCRATCH_RING_BASE_x[26] = 1, RING_15_STATUS indicates empty. 36 Scratch Ring_15 Status P_CLK single separate 37 CAP CSR Write P_CLK single separate CAP CSR Write 38 CAP CSR Fast Write P_CLK single separate CAP CSR Fast Write 39 CAP CSR Read P_CLK single separate CAP CSR Read 40 DEQUEUE APB data P_CLK single separate Dequeue APB Data 41 apb_push_cmd_wph P_CLK single separate APB Push Command 42 APB_PUSH_DATA_REQ_ RPH P_CLK single separate APB Push Data Request 43 APB pull1 FIFO dequeue P_CLK single separate APB Pull Cluster 1 FIFO Dequeue 44 apb_deq_pull1_data_wph P_CLK single separate APB Pull Cluster 1 Data Dequeue 45 data valid in apb pull1 FIFO P_CLK single separate APB Pull Cluster 1 Data FIFO Valid 46 APB pull0 FIFO dequeue P_CLK single separate APB Pull Cluster 0 FIFO Dequeue 47 SCR_APB_TAKE_PULL0_ DATA_WPH P_CLK single separate APB Pull Cluster 0 Data 48 data valid in apb pull0 FIFO P_CLK single separate APB Pull Cluster 0 Data FIFO Valid 49 CAP APB read P_CLK single separate CAP APB Read 50 CAP APB write P_CLK single separate CAP APB Write 51 APB cmd dequeue P_CLK single separate APB Command Dequeue 52 APB CMD FIFO enqueue P_CLK single separate APB Command FIFO Enqueue 53 APB CMD FIFO FULL P_CLK single separate APB Command FIFO Full 54 APB CMD valid P_CLK single separate APB Command Valid 55 Hash Pull_Data_Fifo 0 Not_Empty P_CLK single separate Hash Pull Data FIFO Cluster 0 Not Empty 56 Hash Pull_Data_Fifo 0 Enqueue P_CLK single separate Hash Pull Data FIFO Cluster 0 Enqueue 57 Hash Pull_Data_Fifo 0 Dequeue P_CLK single separate Hash Pull Data FIFO Cluster 0 Dequeue 58 Hash Pull_Data_Fifo 1 Not_Empty P_CLK single separate Hash Pull Data FIFO Cluster 1 Not Empty 59 Hash Pull_Data_Fifo 1 Enqueue P_CLK single separate Hash Pull Data FIFO Cluster 1 Enqueue 60 Hash Pull_Data_Fifo 1 Dequeue P_CLK single separate Hash Pull Data FIFO Cluster 1 Dequeue 61 Hash Active P_CLK single separate Hash Active 62 Hash Cmd_Pipe Not_Empty P_CLK single separate Hash Command Pipe Not Empty Hardware Reference Manual If SCRATCH_RING_BASE_x[26] = 0, RING_15_STATUS indicates full. 395 Intel® IXP2800 Network Processor Performance Monitor Unit Table 156. SHaC PMU Event List (Sheet 4 of 4) 63 Hash Cmd_Pipe Full P_CLK single separate Hash Command Pipe Full 64 Hash Push_Data_Pipe Not_Empty P_CLK single separate Hash Push Data Pipe Not Empty 65 Hash Push_Data_Pipe Full P_CLK single separate Hash Push Data Pipe Full 11.4.6.3 IXP2800 Network Processor MSF Events Target ID(000011) / Design Block #(0110) Table 157. IXP2800 Network Processor MSF PMU Event List (Sheet 1 of 6) Event Number Event Name Clock Domain Pulse/ Level Burst 0 inlet command FIFO enqueue P_CLK pulse separate 1 inlet command FIFO dequeue P_CLK pulse separate 2 inlet command FIFO full P_CLK level separate 3 inlet command FIFO not empty P_CLK level separate 4 read command FIFO enqueue P_CLK pulse separate 5 read command FIFO dequeue P_CLK pulse separate 6 read command FIFO full P_CLK level separate 7 read command FIFO not empty P_CLK level separate 8 write command FIFO enqueue P_CLK pulse separate 9 write command FIFO dequeue P_CLK pulse separate 10 write command FIFO full P_CLK level separate 11 write command FIFO not empty P_CLK level separate 12 S_PULL data FIFO 0 enqueue P_CLK pulse separate 13 S_PULL data FIFO 0 dequeue P_CLK pulse separate 14 S_PULL data FIFO 0 full P_CLK level separate 15 S_PULL data FIFO 0 not empty P_CLK level separate 16 Received Data Training P_CLK level separate 17 Received Calendar Training P_CLK level separate 18 Received Flow Control Training P_CLK level separate 396 Description Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 157. IXP2800 Network Processor MSF PMU Event List (Sheet 2 of 6) 19 reserved 20 S_PULL data FIFO 1 enqueue P_CLK pulse separate 21 S_PULL data FIFO 1 dequeue P_CLK pulse separate 22 S_PULL data FIFO 1 full P_CLK level separate 23 S_PULL data FIFO 1 not empty P_CLK level separate 24 Tbuffer Partition 0 full P_CLK level separate Indicates partition 0 of the tbuffer is full 25 Tbuffer Partition 1 full P_CLK level separate Indicates partition 1 of the tbuffer is full 26 Tbuffer Partition 2 full P_CLK level separate Indicates partition 2of the tbuffer is full 27 reserved 28 Rx_Thread_Freelist 0 enqueue P_CLK pulse separate 29 Rx_Thread_Freelist 0 dequeue P_CLK pulse separate 30 Rx_Thread_Freelist 0 full P_CLK level separate 31 Rx_Thread_Freelist 0 not empty P_CLK level separate 32 Rx_Thread_Freelist 1 enqueue P_CLK pulse separate 33 Rx_Thread_Freelist 1 dequeue P_CLK pulse separate 34 Rx_Thread_Freelist 1 full P_CLK level separate 35 Rx_Thread_Freelist 1 not empty P_CLK level separate 36 Rx_Thread_Freelist 2 enqueue P_CLK pulse separate 37 Rx_Thread_Freelist 2 dequeue P_CLK pulse separate 38 Rx_Thread_Freelist 2 empty P_CLK level separate 39 Rx_Thread_Freelist 2 not full P_CLK level separate 40 reserved 41 reserved 42 reserved 43 44 Detect No Calendar Detect FC_IDLE Hardware Reference Manual l MTS_CLK MRX_CLK level level separate Indicates that a framing pattern has been received on the TSTAT inputs for greater than 32 clock cycles; the valid signal from the MTS_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates that an idle cycle has been received on the RXCDAT inputs for greater than 2 clock cycles; the valid signal from the MTS_CLK domain is synchronized; as such, it yields an approximate value. 397 Intel® IXP2800 Network Processor Performance Monitor Unit Table 157. IXP2800 Network Processor MSF PMU Event List (Sheet 3 of 6) 45 46 47 Detect FC_DEAD Detect C_IDLE Detect C_DEAD MRX_CLK MR_CLK MR_CLK level level level separate Indicates that a dead cycle has been received on the RXCDAT inputs for greater than 2 clock cycles; the valid signal from the MTS_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates that an idle cycle has been received on the RDAT inputs for greater than 2 clock cycles; the valid signal from the MTS_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates that a dead cycle has been received on the RDAT inputs for greater than 2 clock cycles; the valid signal from the MTS_CLK domain is synchronized; as such, it yields an approximate value. MTX_CLK level separate Indicates that the CFC input flag has been asserted for greater than 32 clock cycles; the valid signal from the MTX_CLK domain is synchronized; as such, it yields an approximate value. Rbuffer Partition 0 empty P_CLK level separate Indicates that partition 0 of the rbuffer is empty. 50 Rbuffer Partition 1 empty P_CLK level separate Indicates that partition 1 of the rbuffer is empty. 51 Rbuffer Partition 2 empty P_CLK level separate Indicates that partition 2of the rbuffer is empty. 52 Full Element List enqueue P_CLK pulse separate 53 Full Element List dequeue P_CLK pulse separate 54 Full Element List full P_CLK level separate 55 Full Element List not empty P_CLK level separate 56 Rbuffer Partition 0 full P_CLK level separate 57 Rbuffer Partition 1 full P_CLK level separate Indicates that partition 1 of the rbuffer is full. 58 Rbuffer Partition 2 full P_CLK level separate Indicates that partition 2of the rbuffer is full. 59 reserved 60 Rx_Valid[0] is set 61 Rx_Valid[8] is set P_CLK separate 62 Rx_Valid[16] is set P_CLK separate 63 Rx_Valid[24] is set P_CLK separate 64 Rx_Valid[32] is set P_CLK separate 65 Rx_Valid[48] is set P_CLK separate 66 Rx_Valid[64] is set P_CLK separate 67 Rx_Valid[96] is set P_CLK separate 68 Data CFrame received P_CLK pulse separate Indicates that the CSIX DATA state machine after the Receive input FIFO has received a CSIX DATA CFRAME. 69 Control CFrame received P_CLK pulse separate Indicates that the CSIX CONTROL state machine after the Receive input FIFO has received a CSIX CONTROL CFRAME. 48 Detect CFC sustained 49 398 P_CLK Indicates that partition 0 of the rbuffer is full. separate Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 157. IXP2800 Network Processor MSF PMU Event List (Sheet 4 of 6) 70 SPI-4 Packet received 71 reserved P_CLK pulse separate Indicates that the SPI-4 state machine after the Receive input FIFO has received an SPI-4 packet. 72 Data CFrame transmitted P_CLK level separate Indicates that the transmit buffer state machine is writing a CSIX Data CFRAME into the transmit FIFO; One P_CLK cycle indicates a 32-bit write into the transmit FIFO. 73 Control CFrame transmitted P_CLK level separate Indicates the transmit buffer state machine is writing a CSIX Control CFRAME into the transmit FIFO; One P_CLK cycle indicates a 32-bit write into the transmit FIFO. 74 SPI-4 CFrame transmitted P_CLK level separate Indicates the transmit buffer state machine is writing an SPI-4 Packet into the transmit FIFO; One P_CLK cycle indicates a 32-bit write into the transmit FIFO. 75 reserved 76 Tx_Valid[0] is set P_CLK level separate 77 Tx_Valid[8] is set P_CLK level separate 78 Tx_Valid[16] is set P_CLK level separate 79 Tx_Valid[24] is set P_CLK level separate 80 Tx_Valid[32] is set P_CLK level separate 81 Tx_Valid[48] is set P_CLK level separate 82 Tx_Valid[64] is set P_CLK level separate 83 Tx_Valid[96] is set P_CLK level separate 84 Tbuffer Partition 0 empty P_CLK level separate Indicates partition 0 of the tbuffer is empty. 85 Tbuffer Partition 1 empty P_CLK level separate Indicates partition 1 of the tbuffer is empty. 86 Tbuffer Partition 2 empty P_CLK level separate Indicates partition 2of the tbuffer is empty. 87 reserved 88 D_PUSH_DATA write to TBUF P_CLK pulse separate Each write is in units of quadwords (8 bytes). 89 S_PULL_DATA_0 write to TBUF P_CLK pulse separate Each write is in units of longwords (4 bytes). 90 S_PULL_DATA_1 write to TBUF P_CLK pulse separate Each write is in units of longwords (4 bytes). 91 CSR write P_CLK pulse separate 92 D_PULL_DATA read from RBUF P_CLK pulse separate Each read is in units of quadwords (8 bytes). 93 S_PUSH_DATA read from RBUF P_CLK pulse separate Each read is in units of longwords (4 bytes). 94 CSR read P_CLK pulse separate 95 CSR fast write P_CLK pulse separate 96 RX Autopush Asserts for Null and Non-Null Autopushes P_CLK pulse separate Hardware Reference Manual 399 Intel® IXP2800 Network Processor Performance Monitor Unit Table 157. IXP2800 Network Processor MSF PMU Event List (Sheet 5 of 6) 97 Rx null autopush P_CLK pulse separate 98 Tx skip P_CLK pulse separate An mpacket was dropped due to the Tx_Skip bit being set in the Transmit Control Word. 99 SF_CRDY P_CLK level separate Only valid in CSIX receive mode and indicates how much of the time the switch fabric is able to receive control CFrames. 100 SF_DRDY P_CLK level separate Only valid in CSIX receive mode and indicates how much of the time the switch fabric is able to receive data CFrames. 101 TM_CRDY P_CLK level separate Only valid in CSIX receive mode; indicates how much of the time the egress processor is able to receive control CFrames. 102 TM_DRDY P_CLK level separate Only valid in CSIX receive mode; indicates how much of the time the egress processor is able to receive data CFrames. 103 FCIFIFO enqueue P_CLK pulse separate 104 FCIFIFO dequeue P_CLK pulse separate 105 FCIFIFO error P_CLK pulse separate Indicates that a bad CFrame was received on the CBus (horizontal or vertical parity error, premature RxSOF); only valid in CSIX transmit mode. 106 FCIFIFO synchronizing FIFO error P_CLK pulse separate Indicates that the CBus ingress logic encountered a FCIFIFO full condition while enqueueing a CFrame into FCIFIFO. 107 Vertical parity error P_CLK pulse separate Only valid in CSIX receive mode. 108 Horizontal parity P_CLK pulse separate Only valid in CSIX receive mode. 109 Dip 4 Parity Error P_CLK pulse separate Only valid in SPI-4 receive mode. 110 Dip 2 Parity Error P_CLK pulse separate Only valid in SPI-4 receive mode. 111 reserved separate Indicates a valid CSIX DATA CFRAME received on the RX_DATA bus and may be used to measure bus utilization; the active signal from the MR_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates a valid CSIX CONTROL CFRAME received on the RX_DATA bus and may be used to measure bus utilization; the active signal from the MR_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates a valid SPI-4 Packet received on the RX_DATA bus and may be used to measure bus utilization; the active signal from the MR_CLK domain is synchronized; as such, it yields an approximate value. 112 113 114 400 CSIX DATA receive active CSIX CONTROL receive active SPI-4 receive active MR_CLK MR_CLK MR_CLK level level level Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 157. IXP2800 Network Processor MSF PMU Event List (Sheet 6 of 6) 115 116 117 118 119 FCE receive active CSIX DATA transmit active CSIX CONTROL transmit active SPI-4 transmit active FCE transmit active MR_CLK MT_CLK MT_CLK MT_CLK MTX_CLK level level level level level separate Indicates a valid Flow Control Packet received on the RX_DATA bus and may be used to measure bus utilization; the active signal from the MR_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates valid transmit data on the TX_DATA bus and may be used to measure bus utilization; the valid signal from the MT_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates valid transmit data on the TX_DATA bus and may be used to measure bus utilization; the valid signal from the MT_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates valid transmit data on the TX_DATA bus and may be used to measure bus utilization; the valid signal from the MT_CLK domain is synchronized; as such, it yields an approximate value. separate Indicates valid transmit data on the TXC_DATA bus and may be used to measure bus utilization; the valid signal from the MTX_CLK domain is synchronized; as such, it yields an approximate value. 120 FCI receive active MRX_CLK level separate Indicates a valid Flow Control Packet received on the RXC_DATA bus and may be used to measure bus utilization; the active signal from the MRX_CLK domain is synchronized; as such, it yields an approximate value. 121 Receive FIFO error MR_CLK pulse separate The receive FIFO has experienced an underflow or overflow. A pulse from the MR_CLK clock domain is converted to a pulse in the P_CLK clock domain. 122 reserved 123 reserved 124 reserved 125 reserved 126 reserved 127 reserved Hardware Reference Manual 401 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.4 Intel XScale® Core Events Target ID(000100) / Design Block #(0111) Table 158. Intel XScale® Core Gasket PMU Event List (Sheet 1 of 4) Event Number Event Name 0 XG_CFIFO_WR_EVEN_XS 1 reserved 2 XG_DFIFO_WR_EVEN_XS 3 reserved 4 XG_SFIFO_WR_EVEN_XS 5 reserved 6 XG_LCFIFO_WR_EVEN_XS 7 XG_LCFIFO_WR_ODD_XS 8 XG_LDFIFO_WR_EVEN_XS 9 XG_LDFIFO_WR_ODD_XS 10 Clock Domain Single pulse/ Long pulse Burst Description P_CLK single separate XG command FIFO even enqueue P_CLK single separate XG DRAM data FIFO even enqueue P_CLK single separate XG SRAM data FIFO even enqueue P_CLK single separate XG lcsr command FIFO even enqueue P_CLK single separate XG lcsr command FIFO odd enqueue P_CLK single separate XG lcsr data FIFO even enqueue P_CLK single separate XG lcsr data FIFO odd enqueue XG_LCSR_RD_EVEN_XS P_CLK single separate XG lcsr return data FIFO even dequeue 11 XG_LCSR_RD_ODD_XS P_CLK single separate XG lcsr return data FIFO odd dequeue 12 XG_LCSR_RD_OR_XS P_CLK single separate XG lcsr return data FIFO even_or_odd dequeue 13 XG_PUFF0_RD_EVEN_XS P_CLK single separate XG push fifo0 even dequeue 14 XG_PUFF0_RD_ODD_XS P_CLK single separate XG push fifo0 odd dequeue 15 XG_PUFF0_RD_OR_XS P_CLK single separate XG push fifo0 even_or_odd dequeue 16 XG_PUFF1_RD_EVEN_XS P_CLK single separate XG push fifo1 even dequeue 17 XG_PUFF1_RD_ODD_XS P_CLK single separate XG push fifo1 odd dequeue 18 XG_PUFF1_RD_OR_XS P_CLK single separate XG push fifo1 even_or_odd dequeue 19 XG_PUFF2_RD_EVEN_XS P_CLK single separate XG push fifo2 even dequeue 20 XG_PUFF2_RD_ODD_XS P_CLK single separate XG push fifo2 odd dequeue 21 XG_PUFF2_RD_OR_XS P_CLK single separate XG push fifo2 even_or_odd dequeue 22 XG_PUFF3_RD_EVEN_XS P_CLK single separate XG push fifo3 even dequeue 23 XG_PUFF3_RD_ODD_XS P_CLK single separate XG push fifo3 odd dequeue 24 XG_PUFF3_RD_OR_XS P_CLK single separate XG push fifo3 even_or_odd dequeue 25 XG_PUFF4_RD_EVEN_XS P_CLK single separate XG push fifo4 even dequeue 26 XG_PUFF4_RD_ODD_XS P_CLK single separate XG push fifo4 odd dequeue 27 XG_PUFF4_RD_OR_XS P_CLK single separate XG push fifo4 even_or_odd dequeue 28 XG_SYNC_ST_XS P_CLK single separate XG in sync. state 29 reserved 30 reserved 31 reserved 402 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 158. Intel XScale® Core Gasket PMU Event List (Sheet 2 of 4) 32 reserved 33 reserved 34 XG_CFIFO_EMPTYN_CPP P_CLK single separate XG command FIFO empty flag 35 XG_DFIFO_EMPTYN_CPP P_CLK single separate XG DRAM data FIFO empty flag 36 XG_SFIFO_EMPTYN_CPP P_CLK single separate XG SRAM data FIFO empty flag 37 XG_LCFIFO_EMPTYN_CPP P_CLK single separate XG lcsr command FIFO empty flag 38 XG_LDFIFO_EMPTYN_CPP P_CLK single separate XG lcsr data FIFO empty flag 39 reserved 40 XG_OFIFO_EMPTYN_CPP P_CLK single separate XG cpp command FIFO empty flag 41 XG_OFIFO_FULLN_CPP P_CLK single separate XG cpp command FIFO full flag 42 XG_DP_EMPTYN_CPP P_CLK single separate XG DRAM pull data FIFO empty flag 43 XG_SP_EMPTYN_CPP P_CLK single separate XG SRAM pull data FIFO empty flag 44 XG_HASH_48_CPP P_CLK single separate hash_48 command on cpp bus 45 XG_HASH_64_CPP P_CLK single separate hash_64 command on cpp bus 46 XG_HASH_128_CPP P_CLK single separate hash_128 command on cpp bus 47 XG_LCSR_FIQ_CPP P_CLK single separate XG FIQ generated by interrupt CSR 48 XG_LCSR_IRQ_CPP P_CLK single separate XG IRQ generated by interrupt CSR 49 XG_CFIFO_RD_CPP P_CLK single separate XG command FIFO dequeue 50 XG_DFIFO_RD_CPP P_CLK single separate XG DRAM data FIFO dequeue 51 XG_SFIFO_RD_CPP P_CLK single separate XG SRAM data FIFO dequeue 52 XG_LCFIFO_RD_CPP P_CLK single separate XG lcsr command FIFO dequeue 53 XG_LDFIFO_RD_CPP P_CLK single separate XG lcsr data FIFO dequeue 54 XG_LCSR_WR_CPP P_CLK single separate XG lcsr return data FIFO enqueue 55 XG_OFIFO_RD_CPP P_CLK single separate XG cpp command FIFO dequeue 56 XG_OFIFO_WR_CPP P_CLK single separate XG cpp command FIFO enqueue 57 XG_DPDATA_WR_CPP P_CLK single separate XG DRAM pull data FIFO enqueue 58 XG_DPDATA_RD_CPP P_CLK single separate XG DRAM pull data FIFO dequeue 59 XG_SPDATA_WR_CPP P_CLK single separate XG SRAM pull data FIFO enqueue 60 XG_SPDATA_RD_CPP P_CLK single separate XG SRAM pull data FIFO dequeue 61 XG_PUFF0_WR_CPP P_CLK single separate XG push fifo0 enqueue 62 XG_PUFF1_WR_CPP P_CLK single separate XG push fifo1 enqueue 63 XG_PUFF2_WR_CPP P_CLK single separate XG push fifo2 enqueue 64 XG_PUFF3_WR_CPP P_CLK single separate XG push fifo3 enqueue 65 XG_PUFF4_WR_CPP P_CLK single separate XG push fifo4 enqueue 66 XG_SRAM_RD_CPP P_CLK single separate XG SRAM read command on cpp bus 67 XG_SRAM_RD_1_CPP P_CLK single separate XG SRAM read length=1 on cpp bus 68 XG_SRAM_RD_8_CPP P_CLK single separate XG SRAM read length=8 on cpp bus 69 XG_SRAM_WR_CPP P_CLK single separate XG SRAM write command on cpp bus 70 XG_SRAM_WR_1_CPP P_CLK single separate XG SRAM write length=1 on cpp bus Hardware Reference Manual 403 Intel® IXP2800 Network Processor Performance Monitor Unit Table 158. Intel XScale® Core Gasket PMU Event List (Sheet 3 of 4) 71 XG_SRAM_WR_2_CPP P_CLK single separate XG SRAM write length=2 on cpp bus 72 XG_SRAM_WR_3_CPP P_CLK single separate XG SRAM write length=3 on cpp bus 73 XG_SRAM_WR_4_CPP P_CLK single separate XG SRAM write length=4 on cpp bus 74 XG_SRAM_CSR_RD_CPP P_CLK single separate XG SRAM csr read command on cpp bus 75 XG_SRAM_CSR_WR_CPP P_CLK single separate XG SRAM csr write command on cpp bus 76 XG_SRAM_ATOM_CPP P_CLK single separate XG SRAM atomic command on cpp bus 77 XG_SRAM_GET_CPP P_CLK single separate XG SRAM get command on cpp bus 78 XG_SRAM_PUT_CPP P_CLK single separate XG SRAM put command on cpp bus 79 XG_SRAM_ENQ_CPP P_CLK single separate XG SRAM enq command on cpp bus 80 XG_SRAM_DEQ_CPP P_CLK single separate XG SRAM deq command on cpp bus 81 XG_S0_ACC_CPP P_CLK single separate XG SRAM channel0 access on cpp bus 82 XG_S1_ACC_CPP P_CLK single separate XG SRAM channel1 access on cpp bus 83 XG_S2_ACC_CPP P_CLK single separate XG SRAM channel2 access on cpp bus 84 XG_S3_ACC_CPP P_CLK single separate XG SRAM channel3 access on cpp bus 85 XG_SCR_RD_CPP P_CLK single separate XG scratch read command on cpp bus 86 XG_SCR_RD_1_CPP P_CLK single separate XG scratch read length=1 on cpp bus 87 XG_SCR_RD_8_CPP P_CLK single separate XG scratch read length=8 on cpp bus 88 XG_SCR_WR_CPP P_CLK single separate XG scratch write command on cpp bus 89 XG_SCR_WR_1_CPP P_CLK single separate XG scratch write length=1 on cpp bus 90 XG_SCR_WR_2_CPP P_CLK single separate XG scratch write length=2 on cpp bus 91 XG_SCR_WR_3_CPP P_CLK single separate XG scratch write length=3 on cpp bus 92 XG_SCR_WR_4_CPP P_CLK single separate XG scratch write length=4 on cpp bus 93 XG_SCR_ATOM_CPP P_CLK single separate XG scratch atomic command on cpp bus 94 XG_SCR_GET_CPP P_CLK single separate XG scratch get command on cpp bus 95 XG_SCR_PUT_CPP P_CLK single separate XG scratch put command on cpp bus 96 XG_DRAM_RD_CPP P_CLK single separate XG DRAM read command on cpp bus 97 XG_DRAM_RD_1_CPP P_CLK single separate XG DRAM read length=1 on cpp bus 98 XG_DRAM_RD_4_CPP P_CLK single separate XG DRAM read length=4 on cpp bus 99 XG_DRAM_WR_CPP P_CLK single separate XG DRAM write on cpp bus 100 XG_DRAM_WR_1_CPP P_CLK single separate XG DRAM write length=1 on cpp bus 101 XG_DRAM_WR_2_CPP P_CLK single separate XG DRAM write length=2 on cpp bus 102 XG_DRAM_CSR_RD_CPP P_CLK single separate XG DRAM csr read command on cpp bus 103 XG_DRAM_CSR_WR_CPP P_CLK single separate XG DRAM csr write command on cpp bus 104 XG_MSF_RD_CPP P_CLK single separate XG msf read command on cpp bus 105 XG_MSF_RD_1_CPP P_CLK single separate XG msf read length=1 on cpp bus 106 reserved 107 XG_MSF_WR_CPP P_CLK single separate XG msf write command on cpp bus 108 XG_MSF_WR_1_CPP P_CLK single separate XG msf write length=1 on cpp bus 109 XG_MSF_WR_2_CPP P_CLK single separate XG msf write length=2 on cpp bus 404 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 158. Intel XScale® Core Gasket PMU Event List (Sheet 4 of 4) 110 XG_MSF_WR_3_CPP 111 XG_MSF_WR_4_CPP P_CLK single separate XG msf write length=4 on cpp bus 112 XG_PCI_RD_CPP P_CLK single separate XG pci read command on cpp bus 113 XG_PCI_RD_1_CPP P_CLK single separate XG pci read length=1 on cpp bus 114 XG_PCI_RD_8_CPP P_CLK single separate XG pci read length=8 on cpp bus 115 XG_PCI_WR_CPP P_CLK single separate XG pci write command on cpp bus 116 XG_PCI_WR_1_CPP P_CLK single separate XG pci write length=1 on cpp bus 117 XG_PCI_WR_2_CPP P_CLK single separate XG pci write length=2 on cpp bus 118 XG_PCI_WR_3_CPP P_CLK single separate XG pci write length=3 on cpp bus 119 XG_PCI_WR_4_CPP P_CLK single separate XG pci write length=4 on cpp bus 120 XG_CAP_RD_CPP P_CLK single separate XG cap read command on cpp bus 121 XG_CAP_RD_1_CPP P_CLK single separate XG cap read length=1 on cpp bus 122 XG_CAP_RD_8_CPP P_CLK single separate XG cap read length=8 on cpp bus 123 XG_CAP_WR_CPP P_CLK single separate XG cap write command on cpp bus 124 XG_CAP_WR_1_CPP P_CLK single separate XG cap write length=1 on cpp bus 125 reserved 126 reserved 127 reserved 11.4.6.5 P_CLK single separate XG msf write length=3 on cpp bus PCI Events Target ID(000101) / Design Block #(1000) Table 159. PCI PMU Event List (Sheet 1 of 5) Event Number Event Name Clock Domain 0 PCI_TGT_AFIFO_FULL PCI_CLK 1 PCI_TGT_AFIFO_NEMPTY P_CLK single separate PCI Target Address FIFO Not Empty 2 PCI_TGT_AFIFO_WR PCI_CLK single separate PCI Target Address FIFO Write 3 PCI_TGT_AFIFO_RD P_CLK single separate PCI Target Address FIFO Read 4 PCI_TGT_RFIFO_FULL P_CLK single separate PCI Target Read FIFO Full 5 PCI_TGT_RFIFO_NEMPTY PCI_CLK single separate PCI Target Read FIFO Not Empty 6 PCI_TGT_RFIFO_WR P_CLK single separate PCI Target Read FIFO Write 7 PCI_TGT_RFIFO_RD PCI_CLK single separate PCI Target Read FIFO Read 8 PCI_TGT_WFIFO_FULL PCI_CLK single separate PCI Target Write FIFO Full 9 PCI_TGT_WFIFO_NEMPTY P_CLK single separate PCI Target Write FIFO Not Empty 10 PCI_TGT_WFIFO_WR PCI_CLK single separate PCI Target Write FIFO Write 11 PCI_TGT_WFIFO_RD P_CLK single separate PCI Target Write FIFO Read 12 PCI_TGT_WBUF_FULL P_CLK single separate PCI Target Write Buffer Full Hardware Reference Manual Pulse/ Level single Burst separate Description PCI Target Address FIFO Full 405 Intel® IXP2800 Network Processor Performance Monitor Unit Table 159. PCI PMU Event List (Sheet 2 of 5) 13 PCI_TGT_WBUF_NEMPTY P_CLK single separate PCI Target Write Buffer Not Empty 14 PCI_TGT_WBUF_WR P_CLK single separate PCI Target Write Buffer Write 15 PCI_TGT_WBUF_RD P_CLK single separate PCI Target Write Buffer Read 16 PCI_MST_AFIFO_FULL P_CLK single separate PCI Master Address FIFO Full 17 PCI_MST_AFIFO_NEMPTY PCI_CLK single separate PCI Master Address FIFO Not Empty 18 PCI_MST_AFIFO_WR P_CLK single separate PCI Master Address FIFO Write 19 PCI_MST_AFIFO_RD PCI_CLK single separate PCI Master Address FIFO Read 20 PCI_MST_RFIFO_FULL PCI_CLK single separate PCI Master Read FIFO Full 21 PCI_MST_RFIFO_NEMPTY P_CLK single separate PCI Master Read FIFO Not Empty 22 PCI_MST_RFIFO_WR PCI_CLK single separate PCI Master Read FIFO Write 23 PCI_MST_RFIFO_RD P_CLK single separate PCI Master Read FIFO Read 24 PCI_MST_WFIFO_FULL P_CLK single separate PCI Master Write FIFO Full 25 PCI_MST_WFIFO_NEMPTY PCI_CLK single separate PCI Master Write FIFO Not Empty 26 PCI_MST_WFIFO_WR P_CLK single separate PCI Master Write FIFO Write 27 PCI_MST_WFIFO_RD PCI_CLK single separate PCI Master Write FIFO Read 28 PCI_DMA1_BUF_FULL P_CLK single separate PCI_DMA_Channel 1 29 PCI_DMA1_BUF_NEMPTY P_CLK single separate PCI DMA Channel 1 Buffer Not Empty 30 PCI_DMA1_BUF_WR P_CLK single separate PCI DMA Channel 1 Buffer Write 31 PCI_DMA1_BUF_RD P_CLK single separate PCI DMA Channel 1 Buffer Read 32 reserved 33 reserved 34 reserved 35 reserved 36 PCI_DMA3_BUF_FULL P_CLK single separate PCI_DMA_Channel 3 37 PCI_DMA3_BUF_NEMPTY P_CLK single separate 38 PCI_DMA3_BUF_WR P_CLK single separate 39 PCI_DMA3_BUF_RD P_CLK single separate 40 PCI_TCMD_FIFO_FULL P_CLK single separate 41 PCI_TCMD_FIFO_NEMPTY P_CLK single separate 42 PCI_TCMD_FIFO_WR P_CLK single separate 43 PCI_TCMD_FIFO_RD P_CLK single separate 44 PCI_TDATA_FIFO_FULL P_CLK single separate 45 PCI_TDATA_FIFO_NEMPTY P_CLK single separate 46 PCI_TDATA_FIFO_WR P_CLK single separate 47 PCI_TDATA_FIFO_RD P_CLK single separate 48 PCI_CSR_WRITE P_CLK single separate 49 PCI_CSR_READ P_CLK single separate 50 PCI_DRAM_WRITE P_CLK single separate 51 PCI_DRAM_READ P_CLK single separate 406 PCI TARGET Command Fifo PCI Push/Pull Data Fifo PCI Write to PCI_CSR_BAR PCI Write to PCI_DRAM_BAR Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 159. PCI PMU Event List (Sheet 3 of 5) 52 PCI_DRAM_BURST_WRITE P_CLK single separate 53 PCI_DRAM_BURST_READ P_CLK single separate PCI Burst Read to PCI_CSR_BAR 54 PCI_SRAM_WRITE P_CLK single separate PCI Write to PCI_SRAM_BAR 55 PCI_SRAM_READ P_CLK single separate 56 PCI_SRAM_BURST_WRITE P_CLK single separate 57 PCI_SRAM_BURST_READ P_CLK single separate 58 PCI_CSR_CMD P_CLK single separate PCI CSR Command Generated 59 PCI_CSR_PUSH P_CLK single separate PCI CSR Push Command 60 PCI_CSR_PULL P_CLK single separate PCI CSR Pull Command 61 PCI_SRAM_CMD P_CLK single separate PCI SRAM Command 62 PCI_SRAM_PUSH P_CLK single separate PCI SRAM Push Command 63 PCI_SRAM_PULL P_CLK single separate PCI SRAM Pull Command 64 PCI_DRAM_CMD P_CLK single separate PCI DRAM Command 65 PCI_DRAM_PUSH P_CLK single separate 66 PCI_DRAM_PULL P_CLK single separate 67 PCI_CSR_2PCI_WR P_CLK single separate 68 PCI_CSR_2PCI_RD P_CLK single separate 69 PCI_CSR_2CFG_WR PCI_CLK single separate 70 PCI_CSR_2CFG_RD PCI_CLK single separate 71 PCI_CSR_2SRAM_WR P_CLK single separate 72 PCI_CSR_2SRAM_RD P_CLK single separate 73 PCI_CSR_2DRAM_WR P_CLK single separate 74 PCI_CSR_2DRAM_RD P_CLK single separate 75 PCI_CSR_2CAP_WR P_CLK single separate 76 PCI_CSR_2CAP_RD P_CLK single separate 77 PCI_CSR_2MSF_WR P_CLK single separate 78 PCI_CSR_2MSF_RD P_CLK single separate 79 PCI_CSR_2SCRAPE_WR P_CLK single separate 80 PCI_CSR_2SCRAPE_RD P_CLK single separate 81 PCI_CSR_2SCRATCH_RING_WR P_CLK single separate 82 PCI_CSR_2SCRATCH_RING_RD P_CLK single separate 83 PCI_CSR_2SRAM_RING_WR P_CLK single separate 84 PCI_CSR_2SRAM_RING_RD P_CLK single separate 85 PCI_XS_LCFG_RD P_CLK single separate 86 PCI_XS_LCFG_WR P_CLK single separate 87 PCI_XS_CSR_RD P_CLK single separate 88 PCI_XS_CSR_WR P_CLK single separate Hardware Reference Manual PCI Burst Write to PCI_CSR_BAR PCI Burst Write to PCI_SRAM_BAR PCI Target Write to PCI local CSR PCI Target Write to PCI local Config CSR PCI Target Write to SRAM CSR PCI Target Write to DRAM CSR PCI Target Write to CAPCSR PCI Target Write to MSFCSR PCI Target Write to Scrape CSR PCI Target Write to Scratch Ring CSR PCI Target Write to SRAM Ring CSR PCI Intel XScale® Core Read Local Config CSR PCI Intel XScale® Core Read Local CSR 407 Intel® IXP2800 Network Processor Performance Monitor Unit Table 159. PCI PMU Event List (Sheet 4 of 5) 89 PCI_XS_CFG_RD P_CLK single separate 90 PCI_XS_CFG_WR P_CLK single separate 91 PCI_XS_MEM_RD P_CLK single separate 92 PCI_XS_MEM_WR P_CLK single separate 93 PCI_XS_BURST_RD P_CLK single separate PCI Intel XScale® Core Read PCI Bus Config Space PCI Intel XScale® Core Read PCI Bus Memory Space PCI Intel XScale® Core Burst Read PCI Bus Memory Space 94 PCI_XS_BURST_WR P_CLK single separate 95 PCI_XS_IO_RD P_CLK single separate 96 PCI_XS_IO_WR P_CLK single separate 97 PCI_XS_SPEC P_CLK single separate PCI Intel XScale® Core Read PCI Bus as Special 98 PCI_XS_IACK P_CLK single separate PCI Intel XScale® Core Read PCI Bus as IACK PCI ME Read Local CSR PCI Intel XScale® Core Read PCI Bus I/O Space 99 PCI_ME_CSR_RD P_CLK single separate 100 PCI_ME_CSR_WR P_CLK single separate 101 PCI_ME_MEM_RD P_CLK single separate 102 PCI_ME_MEM_WR P_CLK single separate 103 PCI_ME_BURST_RD P_CLK single separate 104 PCI_ME_BURST_WR P_CLK single separate 105 PCI_MST_CFG_RD P_CLK single separate 106 PCI_MST_CFG_WR P_CLK single separate 107 PCI_MST_MEM_RD P_CLK single separate 108 PCI_MST_MEM_WR P_CLK single separate 109 PCI_MST_BURST_RD P_CLK single separate 110 PCI_MST_BURST_WR P_CLK single separate 111 PCI_MST_IO_READ P_CLK single separate 112 PCI_MST_IO_WRITE P_CLK single separate 113 PCI_MST_SPEC P_CLK single separate PCI Initiator Read PCI Bus As a Special Cycle 114 PCI_MST_IACK P_CLK single separate PCI Initiator Read PCI Bus As IACK Cycle 115 PCI_MST_READ_LINE P_CLK single separate PCI Initiator Read Line Command to PCI 116 PCI_MST_READ_MULT P_CLK single separate PCI Initiator Read Line Multiple Command to PCI 117 PCI_ARB_REQ[2] PCI_CLK single separate Internal Arbiter PCI Bus Request 2 408 PCI ME Read PCI Bus Memory Space PCI ME Burst Read PCI Bus Memory Space PCI Initiator Read PCI Bus Config Space PCI Initiator Read PCI Bus Memory Space PCI Initiator Burst Read PCI Bus Memory Space PCI Initiator Read PCI Bus I/O Space Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 159. PCI PMU Event List (Sheet 5 of 5) 118 PCI_ARB_GNT[2] PCI_CLK single separate 119 PCI_ARB_REQ[1] PCI_CLK single separate 120 PCI_ARB_GNT[1] PCI_CLK single separate 121 PCI_ARB_REQ[0] PCI_CLK single separate 122 PCI_ARB_GNT[0] PCI_CLK single separate 123 PCI_TGT_STATE[4] P_CLK single separate 124 PCI_TGT_STATE[3] P_CLK single separate 125 PCI_TGT_STATE[2] P_CLK single separate 126 PCI_TGT_STATE[1] P_CLK single separate 127 PCI_TGT_STATE[0] P_CLK single separate 11.4.6.6 Internal Arbiter PCI Bus Grant 2 PCI Target State Machine State Bit 4 ME00 Events Target ID(100000) / Design Block #(1001) Table 160. ME00 PMU Event List (Sheet 1 of 2) Event Number Event Name Clock Domain Pulse/ Level Burst Description 0 ME_FIFO_ENQ_EVEN T_CLK single separate Even version of Command FIFO Enqueue (pair with event #8) 1 ME_IDLE_EVEN T_CLK single separate Even version of No Thread running in Microengine (pair with event #9) 2 ME_EXECUTING_EVEN T_CLK single separate Even version of Valid Instruction (pair with event #10) 3 ME_STALL_EVEN T_CLK single separate Even version of Microengine stall caused by FIFO Full (pair with event #11) 4 ME_CTX_SWAPPING_EVEN T_CLK single separate Even version of Occurrence of context swap (pair with event #12) 5 ME_INST_ABORT_EVEN T_CLK single separate Even version of Instruction aborted due to branch taken (pair with event #13) 6 ME_FIFO_ENQ_ODD T_CLK single separate Odd version of Command FIFO Enqueue (pair with event #0) 7 ME_IDLE_ODD T_CLK single separate Odd version of No Thread running in Microengine (pair with event #3) 8 ME_EXECUTING_ODD T_CLK single separate Odd version of Valid Instruction (pair with event #4) 9 ME_STALL_ODD T_CLK single separate Odd version of Microengine stall caused by FIFO Full (pair with event #5) 10 ME_CTX_SWAPPING_ODD T_CLK single separate Odd version of Occurrence of context swap (pair with event #6) 11 ME_INST_ABORT_ODD T_CLK single separate Odd version of Instruction aborted due to branch (pair with event #7) Hardware Reference Manual 409 Intel® IXP2800 Network Processor Performance Monitor Unit Table 160. ME00 PMU Event List (Sheet 2 of 2) 12 ME_FIFO_DEQ P_CLK single separate Command FIFO Dequeue 13 ME_FIFO_NOT_EMPTY P_CLK single separate Command FIFO not empty Note: 1. All the Microengine have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.7 ME01 Events Target ID(100001) / Design Block #(1001) Table 161. ME01 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 410 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.8 ME02 Events Target ID(100010) / Design Block #(1001) Table 162. ME02 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.9 ME03 Events Target ID(100011) / Design Block #(1001) Table 163. ME03 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. Hardware Reference Manual 411 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.10 ME04 Events Target ID(100100) / Design Block #(1001) Table 164. ME04 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.11 ME05 Events Target ID(100101) / Design Block #(1001) Table 165. ME05 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 412 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.12 ME06 Events Target ID(100110) / Design Block #(1001) Table 166. ME06 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.13 ME07 Events Target ID(100111) / Design Block #(1001) Table 167. ME07 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. Hardware Reference Manual 413 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.14 ME10 Events Target ID(110000) / Design Block #(1010) Table 168. ME10 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.15 ME11 Events Target ID(110001) / Design Block #(1010) Table 169. ME11 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 414 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.16 ME12 Events Target ID(110010) / Design Block #(1010) Table 170. ME12 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.17 ME13 Events Target ID(110011) / Design Block #(1010) Table 171. ME13 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. Hardware Reference Manual 415 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.18 ME14 Events Target ID(110100) / Design Block #(1010) Table 172. ME14 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.19 ME15 Events Target ID(110101) / Design Block #(1010) Table 173. ME15 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 416 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.20 ME16 Events Target ID(100110) / Design Block #(1010) Table 174. ME16 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. 11.4.6.21 ME17 Events Target ID(110111) / Design Block #(1010) Table 175. ME17 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Microengines have the same event list. 2. CC_Enable bit[2:0] is PMU_CTX_Monitor in Microengine CSR, This field holds the number of context to be monitored. The event count only reflects the events that occur when this context is executing. CC_Enable[2:0] = 000, select context number 0, CC_Enable[2:0] = 001, select context number 1, ....... CC_Enable[2:0] = 111, select context number 7. 3. 1.4 GHz events are sampled by the PMU at a 700 MHz rate. For this reason, all 1.4 GHz events have both an even and an odd event. To determine the total number of 1.4 GHz events, the occurrences of the even events and odd events should be added together. 4. For IXP2800 Network Processor Rev B, CC_Enable[3] must be set to 1 on all 16 Microengines for proper PMU functionality. Hardware Reference Manual 417 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.22 SRAM DP1 Events Target ID(001001) / Design Block #(0010) Table 176. SRAM DP1 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. SRAM DP1/DP0 push/pull arbiter has same event lists. 2. S_CLK = SRAM clock domain 3. P_CLK = PP clock domain signals that begin with sps_ correspond to S_Push Arb signals that begin with spl_ correspond to S_Pull Arb signals that contain _pc_ (after the unit designation) correspond to the PCI target interface signals that contain _m_ (after the unit designation) correspond to the MSF target interface signals that contain _sh_ (after the unit designation) correspond to the SHaC target interface signals that contain _s0_ (after the unit designation) correspond to the SRAM0 target interface signals that contain _s1_ (after the unit designation) correspond to the SRAM1 target interface signals that contain _s2_ (after the unit designation) correspond to the SRAM2 target interface signals that contain _s3_ (after the unit designation) correspond to the SRAM3 target interface 11.4.6.23 SRAM DP0 Events Target ID(001010) / Design Block #(0010) Table 177. SRAM DP0 PMU Event List (Sheet 1 of 3) Event Number 418 Event Name Clock Domain Single pulse/ Long pulse Burst Description 0 sps_pc_cmd_valid_rph P_CLK Long separate PCI Push Command Queue FIFO Valid 1 sps_pc_enq_wph P_CLK single separate PCI Push Command Queue FIFO Enqueue 2 sps_pc_deq_wph P_CLK single separate PCI Push Command Queue FIFO Dequeue 3 sps_pc_push_q_full_wph P_CLK Long separate PCI Push Command Queue FIFO Full 4 sps_m_cmd_valid_rph P_CLK Long separate MSF Push Command Queue FIFO Valid 5 sps_m_enq_wph P_CLK single separate MSF Push Command Queue FIFO Enqueue 6 sps_m_deq_wph P_CLK single separate MSF Push Command Queue FIFO Dequeue 7 sps_m_push_q_full_wph P_CLK Long separate MSF Push Command Queue FIFO Full 8 sps_sh_cmd_valid_rph P_CLK Long separate SHaC Push Command Queue FIFO Valid 9 sps_sh_enq_wph P_CLK single separate SHaC Push Command Queue FIFO Enqueue 10 sps_sh_deq_wph P_CLK single separate SHaC Push Command Queue FIFO Dequeue 11 sps_sh_push_q_full_wph P_CLK Long separate SHaC Push Command Queue FIFO Full 12 sps_s0_cmd_valid_rph P_CLK Long separate SRAM0 Push Command Queue FIFO Valid Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 177. SRAM DP0 PMU Event List (Sheet 2 of 3) 13 sps_s0_enq_wph P_CLK single separate SRAM0 Push Command Queue FIFO Enqueue 14 sps_s0_deq_wph P_CLK single separate SRAM0 Push Command Queue FIFO Dequeue 15 sps_s0_push_q_full_wph P_CLK Long separate SRAM0 Push Command Queue FIFO Full 16 sps_s1_cmd_valid_rph P_CLK Long separate SRAM1 Push Command Queue FIFO Valid 17 sps_s1_enq_wph P_CLK single separate SRAM1 Push Command Queue FIFO Enqueue 18 sps_s1_deq_wph P_CLK single separate SRAM1 Push Command Queue FIFO Dequeue 19 sps_s1_push_q_full_wph P_CLK Long separate SRAM1 Push Command Queue FIFO Full 20 sps_s2_cmd_valid_rph P_CLK Long separate SRAM2 Push Command Queue FIFO Valid 21 sps_s2_enq_wph P_CLK single separate SRAM2 Push Command Queue FIFO Enqueue 22 sps_s2_deq_wph P_CLK single separate SRAM2 Push Command Queue FIFO Dequeue 23 sps_s2_push_q_full_wph P_CLK Long separate SRAM2 Push Command Queue FIFO Full 24 sps_s3_cmd_valid_rph P_CLK Long separate SRAM3 Push Command Queue FIFO Valid 25 sps_s3_enq_wph P_CLK single separate SRAM3 Push Command Queue FIFO Enqueue 26 sps_s3_deq_wph P_CLK single separate SRAM3 Push Command Queue FIFO Dequeue 27 sps_s3_push_q_full_wph P_CLK Long separate SRAM3 Push Command Queue FIFO Full 28 spl_pc_cmd_valid_rph P_CLK Long separate PCI Pull Command Queue FIFO Valid 29 spl_pc_enq_cmd_wph P_CLK single separate PCI Pull Command Queue FIFO Enqueue 30 spl_pc_deq_wph P_CLK single separate PCI Pull Command Queue FIFO Dequeue 31 spl_pc_cmd_que_full_wph P_CLK Long separate PCI Pull Command Queue FIFO Full 32 spl_m_cmd_valid_rph P_CLK Long separate MSF Pull Command Queue FIFO Valid 33 spl_m_enq_cmd_wph P_CLK single separate MSF Pull Command Queue FIFO Enqueue 34 spl_m_deq_wph P_CLK single separate MSF Pull Command Queue FIFO Dequeue 35 spl_m_cmd_que_full_wph P_CLK Long separate MSF Pull Command Queue FIFO Full 36 spl_sh_cmd_valid_rph P_CLK Long separate SHaC Pull Command Queue FIFO Valid 37 spl_sh_enq_cmd_wph P_CLK single separate SHaC Pull Command Queue FIFO Enqueue 38 spl_sh_deq_wph P_CLK single separate SHaC Pull Command Queue FIFO Dequeue 39 spl_sh_cmd_que_full_wph P_CLK Long separate SHaC Pull Command Queue FIFO Full 40 spl_s0_cmd_valid_rph P_CLK Long separate SRAM0 Pull Command Queue FIFO Valid 41 spl_s0_enq_cmd_wph P_CLK single separate SRAM0 Pull Command Queue FIFO Enqueue 42 spl_s0_deq_wph P_CLK single separate SRAM0 Pull Command Queue FIFO Dequeue 43 spl_s0_cmd_que_full_wph P_CLK Long separate SRAM0 Pull Command Queue FIFO Full 44 spl_s1_cmd_valid_rph P_CLK Long separate SRAM1 Pull Command Queue FIFO Valid Hardware Reference Manual 419 Intel® IXP2800 Network Processor Performance Monitor Unit Table 177. SRAM DP0 PMU Event List (Sheet 3 of 3) 45 spl_s1_enq_cmd_wph P_CLK single separate SRAM1 Pull Command Queue FIFO Enqueue 46 spl_s1_deq_wph P_CLK single separate SRAM1 Pull Command Queue FIFO Dequeue 47 spl_s1_cmd_que_full_wph P_CLK Long separate SRAM1 Pull Command Queue FIFO Full 48 spl_s2_cmd_valid_rph P_CLK Long separate SRAM2 Pull Command Queue FIFO Valid 49 spl_s2_enq_cmd_wph P_CLK single separate SRAM2 Pull Command Queue FIFO Enqueue 50 spl_s2_deq_wph P_CLK single separate SRAM2 Pull Command Queue FIFO Dequeue 51 spl_s2_cmd_que_full_wph P_CLK Long separate SRAM2 Pull Command Queue FIFO Full 52 spl_s3_cmd_valid_rph P_CLK Long separate SRAM3 Pull Command Queue FIFO Valid 53 spl_s3_enq_cmd_wph P_CLK single separate SRAM3 Pull Command Queue FIFO Enqueue 54 spl_s3_deq_wph P_CLK single separate SRAM3 Pull Command Queue FIFO Dequeue 55 spl_s3_cmd_que_full_wph P_CLK Long separate SRAM3 Pull Command Queue FIFO Full 11.4.6.24 SRAM CH3 Events Target ID(001011) / Design Block #(0010) Table 178. SRAM CH3 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the SRAM Channel has same event lists. 2. S_CLK = SRAM clock domain 3. P_CLK = PP clock domain signals that begin with sps_ correspond to S_Push Arb signals that begin with spl_ correspond to S_Pull Arb signals that contain _pc_ (after the unit designation) correspond to the PCI target interface signals that contain _m_ (after the unit designation) correspond to the MSF target interface signals that contain _sh_ (after the unit designation) correspond to the SHaC target interface signals that contain _s0_ (after the unit designation) correspond to the SRAM0 target interface signals that contain _s1_ (after the unit designation) correspond to the SRAM1 target interface signals that contain _s2_ (after the unit designation) correspond to the SRAM2 target interface signals that contain _s3_ (after the unit designation) correspond to the SRAM3 target interface 420 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.25 SRAM CH2 Events Target ID(001100) / Design Block #(0010) Table 179. SRAM CH3 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the SRAM Channel has same event lists. 2. S_CLK = SRAM clock domain 3. P_CLK = PP clock domain signals that begin with sps_ correspond to S_Push Arb signals that begin with spl_ correspond to S-Pull Arb signals that contain _pc_ (after the unit designation) correspond to the PCI target interface signals that contain _m_ (after the unit designation) correspond to the MSF target interface signals that contain _sh_ (after the unit designation) correspond to the SHaC target interface signals that contain _s0_ (after the unit designation) correspond to the SRAM0 target interface signals that contain _s1_ (after the unit designation) correspond to the SRAM1 target interface signals that contain _s2_ (after the unit designation) correspond to the SRAM2 target interface signals that contain _s3_ (after the unit designation) correspond to the SRAM3 target interface 11.4.6.26 SRAM CH1 Events Target ID(001101) / Design Block #(0010) Table 180. SRAM CH3 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the SRAM Channel has same event lists. 2. S_CLK = SRAM clock domain 3. P_CLK = PP clock domain signals that begin with sps_ correspond to S-Push Arb signals that begin with spl_ correspond to S-Pull Arb signals that contain _pc_ (after the unit designation) correspond to the PCI target interface signals that contain _m_ (after the unit designation) correspond to the MSF target interface signals that contain _sh_ (after the unit designation) correspond to the SHaC target interface signals that contain _s0_ (after the unit designation) correspond to the SRAM0 target interface signals that contain _s1_ (after the unit designation) correspond to the SRAM1 target interface signals that contain _s2_ (after the unit designation) correspond to the SRAM2 target interface signals that contain _s3_ (after the unit designation) correspond to the SRAM3 target interface Hardware Reference Manual 421 Intel® IXP2800 Network Processor Performance Monitor Unit 11.4.6.27 SRAM CH0 Events Target ID(001110) / Design Block #(0010) Table 181. SRAM CH0 PMU Event List (Sheet 1 of 2) Event Number 422 Event Name Clock Domain Single pulse/ Long pulse Burst Description 0 QDR I/O Read S_CLK single separate QDR I/O Read 1 QDR I/O Write S_CLK single separate QDR I/O Write 2 Read Cmd Dispatched P_CLK single separate Read Cmd Dispatched 3 Write Cmd Dispatched P_CLK single separate Write Cmd Dispatched 4 Swap Cmd Dispatched P_CLK single separate Swap Cmd Dispatched 5 Set Dispatched P_CLK single separate Set Dispatched 6 Clear Cmd Dispatched P_CLK single separate Clear Cmd Dispatched 7 Add Cmd Dispatched P_CLK single separate Add Cmd Dispatched 8 Sub Cmd Dispatched P_CLK single separate Sub Cmd Dispatched 9 Incr Cmd Dispatched P_CLK single separate Incr Cmd Dispatched 10 Decr Cmd Dispatched P_CLK single separate Decr Cmd Dispatched 11 Ring Cmd Dispatched P_CLK single separate Ring Cmd Dispatched 12 Jour Cmd Dispatched P_CLK single separate Jour Cmd Dispatched 13 Deq Cmd Dispatched P_CLK single separate Deq Cmd Dispatched 14 Enq Cmd Dispatched P_CLK single separate Enq Cmd Dispatched 15 CSR Cmd Dispatched P_CLK single separate CSR Cmd Dispatched 16 WQDesc Cmd Dispatched P_CLK single separate WQDesc Cmd Dispatched 17 RQDesc Cmd Dispatched P_CLK single separate RQDesc Cmd Dispatched 18 FIFO Dequeue – CmdA0 Inlet Q P_CLK single separate FIFO Dequeue – CmdA0 Inlet Q 19 FIFO Enqueue – CmdA0 Inlet Q P_CLK single separate FIFO Enqueue – CmdA0 Inlet Q 20 FIFO Valid – CmdA0 Inlet Q P_CLK long separate FIFO Valid – CmdA0 Inlet Q 21 FIFO Full – CmdA1 Inlet Q P_CLK long separate FIFO Full – CmdA1 Inlet Q 22 FIFO Dequeue – CmdA1 Inlet Q P_CLK single separate FIFO Dequeue – CmdA1 Inlet Q 23 FIFO Enqueue – CmdA1 Inlet Q P_CLK single separate FIFO Enqueue – CmdA1 Inlet Q 24 FIFO Valid – CmdA1 Inlet Q P_CLK long separate FIFO Valid – CmdA1 Inlet Q 25 FIFO Full – CmdA1 Inlet Q P_CLK long separate FIFO Full – CmdA1 Inlet Q 26 FIFO Dequeue – Wr Cmd Q S_CLK single separate FIFO Dequeue – Wr Cmd Q 27 FIFO Enqueue – Wr Cmd Q P_CLK single separate FIFO Enqueue – Wr Cmd Q 28 FIFO Valid – Wr Cmd Q S_CLK long separate FIFO Valid – Wr Cmd Q 29 FIFO Full – Wr Cmd Q P_CLK long separate FIFO Full – Wr Cmd Q 30 FIFO Dequeue – Queue Cmd Q S_CLK single separate FIFO Dequeue – Queue Cmd Q 31 FIFO Enqueue – Queue Cmd Q P_CLK single separate FIFO Enqueue – Queue Cmd Q 32 FIFO Valid – Queue Cmd Q S_CLK long separate FIFO Valid – Queue Cmd Q Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 181. SRAM CH0 PMU Event List (Sheet 2 of 2) 33 FIFO Full – Queue Cmd Q P_CLK long separate FIFO Full – Queue Cmd Q 34 FIFO Dequeue – Rd Cmd Q S_CLK single separate FIFO Dequeue – Rd Cmd Q 35 FIFO Enqueue – Rd Cmd Q P_CLK single separate FIFO Enqueue – Rd Cmd Q 36 FIFO Valid – Rd Cmd Q S_CLK long separate FIFO Valid – Rd Cmd Q 37 FIFO Full – Rd Cmd Q P_CLK long separate FIFO Full – Rd Cmd Q 38 FIFO Dequeue – Oref Cmd Q S_CLK single separate FIFO Dequeue – Oref Cmd Q 39 FIFO Enqueue – Oref Cmd Q P_CLK single separate FIFO Enqueue – Oref Cmd Q 40 FIFO Valid – Oref Cmd Q S_CLK long separate FIFO Valid – Oref Cmd Q 41 FIFO Full – Oref Cmd Q P_CLK long separate FIFO Full – Oref Cmd Q 42 FIFO Dequeue – SP0 Pull Data Q S_CLK single separate FIFO Dequeue – SP0 Pull Data Q 43 FIFO Enqueue – SP0 Pull Data Q P_CLK single separate FIFO Enqueue – SP0 Pull Data Q 44 FIFO Valid – SP0 Pull Data Q S_CLK long separate FIFO Valid – SP0 Pull Data Q 45 FIFO Full – SP0 Pull Data Q P_CLK long separate FIFO Full – SP0 Pull Data Q 46 FIFO Dequeue – SP1 Pull Data Q S_CLK single separate FIFO Dequeue – SP1 Pull Data Q 47 FIFO Enqueue – SP1 Pull Data Q P_CLK single separate FIFO Enqueue – SP1 Pull Data Q 48 FIFO Valid – SP1 Pull Data Q S_CLK long separate FIFO Valid – SP1 Pull Data Q 49 FIFO Full – SP1 Pull Data Q P_CLK long separate FIFO Full – SP1 Pull Data Q 50 FIFO Dequeue – Push ID/Data Q P_CLK single separate FIFO Dequeue – Push ID/Data Q 51 FIFO Enqueue – Push ID/Data Q S_CLK single separate FIFO Enqueue – Push ID/Data Q 52 FIFO Valid – Push ID/Data Q P_CLK long separate FIFO Valid – Push ID/Data Q 53 FIFO Full – Push ID/Data Q S_CLK long separate FIFO Full – Push ID/Data Q 11.4.6.28 DRAM DPLA Events Target ID(010010) / Design Block #(0011) Table 182. IXP2800 Network Processor Dram DPLA PMU Event List (Sheet 1 of 2) Event Number Event Name Clock Domain Single pulse/ Long pulse Burst Description 0 d0_enq_id_wph P_CLK single separate 1 d0_deq_id_wph P_CLK single separate Dequeue d0 cmd 2 dram_req_rph[0] P_CLK single separate d0 has a valid req 3 next_d0_full_wph P_CLK single separate d0 FIFO hit the full threshold 4 d1_enq_id_wph P_CLK single separate Enqueue d1 cmd 5 d1_deq_id_wph P_CLK single separate Dequeue d1 cmd 6 dram_req_rph[1] P_CLK single separate d1 has a valid req 7 next_d1_full_wph P_CLK single separate d1 FIFO hit the full threshold 8 d2_enq_id_wph P_CLK single separate Enqueue d2 cmd Hardware Reference Manual Enqueue d0 cmd 423 Intel® IXP2800 Network Processor Performance Monitor Unit Table 182. IXP2800 Network Processor Dram DPLA PMU Event List (Sheet 2 of 2) 9 d2_deq_id_wph 10 dram_req_rph[2] P_CLK single separate d2 has a valid req 11 next_d2_full_wph P_CLK single separate d2 FIFO hit the full threshold 12 cr0_enq_id_wph P_CLK single separate Enqueue cr0 cmd 13 cr0_deq_id_wph P_CLK single separate Dequeue cr0 cmd 14 dram_req_rph[3] P_CLK single separate cr0 has a valid req 15 next_cr0_full_wph P_CLK single separate cr0 FIFO hit the full threshold 16 cr1_enq_id_wph P_CLK single separate Enqueue cr1 cmd 17 cr1_deq_id_wph P_CLK single separate Dequeue cr1 cmd 18 dram_req_rph[4] P_CLK single separate cr1 has a valid req 19 next_cr1_full_wph P_CLK single separate cr1 FIFO hit the full threshold 11.4.6.29 P_CLK single separate Dequeue d2 cmd DRAM DPSA Events Target ID(010011) / Design Block #(0011) Table 183. IXP2800 Network Processor Dram DPSA PMU Event List (Sheet 1 of 2) Event Number 424 Event Name Clock Domain Single pulse/ Long pulse Burst Description 0 d0_enq_id_wph P_CLK single separate Enqueue d0 cmd/data 1 d0_deq_id_wph P_CLK single separate Dequeue d0 cmd/data 2 dram_req_rph[0] P_CLK single separate d0 has a valid req(not empty) 3 next_d0_full_wph P_CLK single separate d0 FIFO hit the full threshold 4 d1_enq_id_wph P_CLK single separate Enqueue d1 cmd/data 5 d1_deq_id_wph P_CLK single separate Dequeue d1 cmd/data 6 dram_req_rph[1] P_CLK single separate d1 has a valid req 7 next_d1_full_wph P_CLK single separate d1 FIFO hit the full threshold 8 d2_enq_id_wph P_CLK single separate Enqueue d2 cmd/data 9 d2_deq_id_wph P_CLK single separate Dequeue d2 cmd/data 10 dram_req_rph[2] P_CLK single separate d2 has a valid req 11 next_d2_full_wph P_CLK single separate d2 FIFO hit the full threshold 12 cr0_enq_id_wph P_CLK single separate Enqueue cr0 cmd/data 13 cr0_deq_id_wph P_CLK single separate Dequeue cr0 cmd/data 14 dram_req_rph[3] P_CLK single separate cr0 has a valid req 15 next_cr0_full_wph P_CLK single separate cr0 FIFO hit the full threshold 16 cr1_enq_id_wph P_CLK single separate Enqueue cr1 cmd/data Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 183. IXP2800 Network Processor Dram DPSA PMU Event List (Sheet 2 of 2) 17 cr1_deq_id_wph 18 dram_req_rph[4] P_CLK single separate cr1 has a valid req 19 next_cr1_full_wph P_CLK single separate cr1 FIFO hit the full threshold 11.4.6.30 P_CLK single separate Dequeue cr1 cmd/data IXP2800 Network Processor DRAM CH2 Events Target ID(010100) / Design Block #(0011) Table 184. IXP2800 Network Processor Dram CH2 PMU Event List (Sheet 1 of 5) Event Numbe r Event Name Clock Domain Single pulse/ Long pulse Burst Description 0 DATA_ERROR_SYNC_RPH P_CLK single separate Indicates that a data error has been detected on the RDRAM read data from the RMC. The signal asserts for both correctable and uncorrectable errors. 1 GET_PULL_DATA_SYNC_R PH P_CLK single separate Asserts when the RMC is accepting RDRAM write data from the d_app_unit block. 2 TAKE_PUSH_DATA_SYNC_ RPH P_CLK single separate Asserts when the RMC is driving RDRAM read data to the d_push_bus_if block. 3 START_SYNC_RPH P_CLK single separate Input to RMC, asserted to request memory transaction and deasserted when the RMC is ready to accept a command (i.e., when RMC asserts GETC_SYNC_RPH). 4 GETC_SYNC_RPH P_CLK single separate Output from RMC, indicates the RMC is ready to accept a command for the RDRAM channel. 5 reserved 6 reserved 7 dps_push_ctrl_fifo_full_rph P_CLK single separate Active when the push_control FIFO is nearly full, i.e., > 6 entries 1:0 2'H0 8 push_ctrl_fifo_enq_rph P_CLK single separate Active when enqueueing push control and status data to the FIFOs in d_push_bus_if. 9 DPS_ENQ_PUSH_DATA_R PH P_CLK single separate Active when enqueueing data from the RMC into the push data FIFO. 10 valid_push_data_rp P_CLK single separate Is (data_valid AND !create_databackup), where data_valid indicates data available in the d_push_bus_if data FIFO; create_databackup asserts when the push arbiter FIFO (in dp_unit block) gets nearly full. When it asserts, it prevents dequeueing from the d_push_bus_if data FIFO. 11 push_ctrl_fifo_empty_rph P_CLK single separate Active when the push control FIFO is empty. 12 deq_push_data_wph P_CLK single separate Asserts to dequeue from the data FIFO in the d_push_bus_if block. 13 deq_csr_data_wph P_CLK single separate Pulses active when reading from a CSR instead of DRAM. Hardware Reference Manual 425 Intel® IXP2800 Network Processor Performance Monitor Unit Table 184. IXP2800 Network Processor Dram CH2 PMU Event List (Sheet 2 of 5) 14 deq_push_ctrl_wph P_CLK single separate Active when dequeueing from the push control FIFO; occurs on the last cycle of a burst or on the only cycle of a single transfer. 15 d_push_ctrl_fsm/ single_xfer_wph P_CLK single separate Active if the data is about to be transferred from d_push data FIFO to the dp_unit FIFO is length 0, i.e., a single 8-byte transfer. 16 d_push_ctrl_fsm/ data_128_bit_alligned P_CLK single separate Active if the data is about to be transferred from d_push data FIFO to the dp_unit FIFO is quadword (128-bit) aligned. P_CLK single separate Asserts when the data FIFO in the d_push_bus_if block has > 4 entries (Data from the RDRAM is enqueued into this FIFO; dequeued data is written to the push bus arbiter FIFO in dp_unit block.) P_CLK single separate Indicates that the read data for a read-modifywrite operation is available in the d_pull_bus_if block. This signal is deasserted when the data and command single separate Indicates that the read data for a read-modifywrite operation is available in the d_pull_bus_if block. This signal is deasserted when the data and command single separate Indicates that the read data for a read-modifywrite operation is available in the d_pull_bus_if block. This signal is deasserted when the data and command separate Indicates that the read data for a read-modifywrite operation is available in the d_pull_bus_if block. This signal is deasserted when the data and command 17 perf_data_fifo_full 18 reserved 19 reserved 20 DPL_RMW_BANK3_READ_ DATA_AVAIL_RPH 21 DPL_RMW_BANK2_READ_ DATA_AVAIL_RPH P_CLK 22 DPL_RMW_BANK1_READ_ DATA_AVAIL_RPH P_CLK 23 DPL_RMW_BANK0_READ_ DATA_AVAIL_RPH P_CLK single 24 addr_128bit_alligned P_CLK single separate Indicates that bit 3 of the DRAM command’s address at the head of the pull control FIFO (i.e., about to be dequeued) is low. This command is for the pull data which is about to be enqueued into a pull data bank FIFO. 25 b3_empty_rph P_CLK single separate Indicates that the pull data’s bank FIFO is empty. 26 b2_empty_rph P_CLK single separate Indicates that the pull data's bank FIFO is empty. 27 b1_empty_rph P_CLK single separate Indicates that the pull data's bank FIFO is empty. 28 b0_empty_rph P_CLK single separate indicates that the pull data's bank FIFO is empty 29 b3_full_rph P_CLK single separate Indicates that the pull data's bank FIFO has > 0xf entries in it, i.e., is full 30 b2_full_rph P_CLK single separate Indicates that the pull data's bank FIFO has > 0xf entries in it, i.e., is full. 31 b1_full_rph P_CLK single separate Indicates that the pull data's bank FIFO has > 0xf entries in it, i.e., is full. 32 b0_full_rph P_CLK single separate Indicates that the pull data's bank FIFO has > 0xf entries in it, i.e., is full. 426 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 184. IXP2800 Network Processor Dram CH2 PMU Event List (Sheet 3 of 5) 33 DAP_DEQ_B3_DATA_RPH P_CLK single separate 34 DAP_DEQ_B2_DATA_RPH P_CLK single separate 35 DAP_DEQ_B1_DATA_RPH P_CLK single separate Indicates pull data and command are being dequeued from the data and command bank FIFOs to the RMC (the command and data FIFOs used in tandem for pulls to supply the address and data respectively). 36 DAP_DEQ_B0_DATA_RPH P_CLK single separate Indicates pull data and command are being dequeued from the data and command bank FIFOs to the RMC (the command and data FIFOs used in tandem for pulls to supply the address and data respectively). 37 csr_wr_data_avail P_CLK single separate Indicates that CSR write data is ready to be latched into the CSR. 38 bank3_enq_wph P_CLK single separate Indicates pull data is being enqueued to a bank FIFO in the pull bus interface block. 39 bank2_enq_wph P_CLK single separate Indicates pull data is being enqueued to a bank FIFO in the pull bus interface block. 40 bank1_enq_wph P_CLK single separate Indicates pull data is being enqueued to a bank FIFO in the pull bus interface block. 41 bank0_enq_wph P_CLK single separate Indicates pull data is being enqueued to a bank FIFO in the pull bus interface block. 42 reserved 43 DCB_BANK3_CMD_AVAL_ RDH D_CLK single separate Indicates that this bank FIFO has a command available. 44 DCB_BANK2_CMD_AVAL_ RDH D_CLK single separate Indicates that this bank FIFO has a command available. 45 DCB_BANK1_CMD_AVAL_ RDH D_CLK single separate Indicates that this bank FIFO has a command available. 46 DCB_BANK0_CMD_AVAL_ RDH D_CLK single separate Indicates that this bank FIFO has a command available. 47 DAP_CSR_READ_CMD_TA KEN_WDH D_CLK single separate Indicates dequeueing of a CSR read command and clears the CSR read request signal coming out of d_command_bus_if. 48 DAP_BANK3_CMD_DEQ_ WDH D_CLK single separate Active to dequeue a DRAM command from bank N's FIFO, generated by d_app block. 49 DAP_BANK2_CMD_DEQ_ WDH D_CLK single separate Active to dequeue a DRAM command from bank N's FIFO, generated by d_app block. 50 DAP_BANK1_CMD_DEQ_ WDH D_CLK single separate Active to dequeue a DRAM command from bank N's FIFO, generated by d_app block. 51 DAP_BANK0_CMD_DEQ_ WDH D_CLK single separate Active to dequeue a DRAM command from bank N's FIFO, generated by d_app block. 52 split_cmd_wph P_CLK single separate Active if the command will cross a 128-byte boundary and thus be split across channels. 53 reserved 54 reserved 55 reserved 56 reserved Hardware Reference Manual 427 Intel® IXP2800 Network Processor Performance Monitor Unit Table 184. IXP2800 Network Processor Dram CH2 PMU Event List (Sheet 4 of 5) 57 reserved 58 reserved 59 deq_split_cmd_fifo_wph P_CLK single separate Active when dequeueing from the split inlet FIFO. 60 deq_inlet_fifo1_wph P_CLK single separate Active when dequeueing from the inlet FIFO. 61 deq_inlet_fifo_wph P_CLK single separate Active when dequeueing from either the inlet or split-inlet FIFO. 62 DCB_PULL_CTRL_AVAL_W PH P_CLK single separate Indicates the pull control FIFO has >= 1 entry. 63 inlet_cmd_aval_rph P_CLK single separate Indicates a command is available in the non-split inlet FIFO. 64 split_fifo_not_empty P_CLK single separate Indicates a command is available in the ”split inlet” FIFO (split refers to a command being split across channels). 65 bank3_pull_ok_wph P_CLK single separate Indicates that this bank's data FIFO has enough room to accommodate the size of the next pull command in the inlet FIFO. 66 bank2_pull_ok_wph P_CLK single separate Indicates that this bank's data FIFO has enough room to accommodate the size of the next pull command in the inlet FIFO. 67 bank1_pull_ok_wph P_CLK single separate Indicates that this bank's data FIFO has enough room to accommodate the size of the next pull command in the inlet FIFO. 68 bank0_pull_ok_wph P_CLK single separate Indicates that this bank's data FIFO has enough room to accommodate the size of the next pull command in the inlet FIFO. 69 csr_q_full_wph P_CLK single separate Indicates that a CSR access is in process. 70 DXDP_CMD_Q_FULL_RPH P_CLK single separate Indicates the command inlet FIFO contains > 8 entries. 71 pull_ctrl_fifo_full P_CLK single separate Indicates that there are > 6 outstanding pull requests. 72 bank3_cmd_q_full_rph P_CLK single separate Indicates the bank command FIFO contains > 6 entries. 73 bank2_cmd_q_full_rph P_CLK single separate Indicates the bank command FIFO contains > 6 entries. 74 bank1_cmd_q_full_rph P_CLK single separate Indicates the bank command FIFO contains > 6 entries. 75 bank0_cmd_q_full_rph P_CLK single separate Indicates the bank command FIFO contains > 6 entries. 76 valid_write_req_wph P_CLK single separate Indicates a DRAM write is being passed from the inlet FIFO to a bank FIFO. The DRAM write may be: DRAM RBUF read, DRAM write, or CSR write. 77 csr_q_full_en_wph P_CLK single separate Pulses at both the start of a CSR read/write and at the completion of a CSR read/write. 78 push_rmw_wr_cmd_wph P_CLK single separate Indicates the command being passed from the inlet FIFO to a bank FIFO is a read-modify-write. 79 bank3_enq_wph P_CLK single separate Indicates this channel is enqueueing a DRAM command for bank3. 428 Hardware Reference Manual Intel® IXP2800 Network Processor Performance Monitor Unit Table 184. IXP2800 Network Processor Dram CH2 PMU Event List (Sheet 5 of 5) 80 bank2_enq_wph P_CLK single separate Indicates this channel is enqueueing a DRAM command for bank2. 81 bank1_enq_wph P_CLK single separate Indicates this channel is enqueueing a DRAM command for bank1. 82 bank0_enq_wph P_CLK single separate Indicates this channel is enqueueing a DRAM command for bank0. 83 push2split_cmd_fifo_wph P_CLK single separate Indicates this channel is enqueueing a DRAM command which is split between two channels. 84 push2inlet_fifo_wph P_CLK single separate Indicates this channel is enqueueing a DRAM command which fits entirely in this channel. 85 valid_dram_cmd_wph P_CLK single separate Indicates the command bus' target ID is DRAM. 86-127 reserved 11.4.6.31 IXP2800 Network Processor DRAM CH1 Events Target ID(010101) / Design Block #(0011) Table 185. IXP2800 Network Processor Dram CH1 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Dram Channels have same event lists. Please reference Channel 2 Event lists. 11.4.6.32 IXP2800 Network Processor DRAM CH0 Events Target ID(010110) / Design Block #(0011) Table 186. IXP2800 Network Processor Dram CH0 PMU Event List Event Number Event Name Clock Domain Pulse/ Level Burst Description Note: 1. All the Dram Channels have same event lists. Please reference Channel 2 Event lists Hardware Reference Manual 429 Intel® IXP2800 Network Processor Performance Monitor Unit 430 Hardware Reference Manual
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : No Modify Date : 2004:08:24 09:31:01-04:00 Create Date : 2004:08:24 09:18:35Z Page Count : 430 Creation Date : 2004:08:24 09:18:35Z Mod Date : 2004:08:24 09:31:01-04:00 Producer : Acrobat Distiller 5.0.5 (Windows) Author : jebreaux Metadata Date : 2004:08:24 09:31:01-04:00 Creator : jebreaux Title : IXP2800_HRM.book Page Mode : UseOutlinesEXIF Metadata provided by EXIF.tools