referring to fig1 , a block diagram of a system 100 is shown in accordance with a preferred embodiment of the present invention . the system 100 generally comprises a plurality of blocks ( or circuits ) 102 a - 102 n , a block ( or circuit ) 104 , a plurality of blocks ( or circuits ) 106 a - 106 n , a plurality of blocks ( or circuits ) 108 a - 108 n and a plurality of blocks ( or circuits ) 110 a - 110 n . the circuits 102 a - 102 n may each be implemented as a buffer circuit . for example , the circuits 102 a - 102 n may be implemented as first - in first - out ( fifo ) memory circuits . the circuit 104 may be implemented as a channel router circuit . the circuits 106 a - 106 n may each be implemented as an arbiter circuit . the circuits 108 a - 108 n may each be implemented as a protocol engine circuit . the circuits 110 a - 110 n may each be implemented as a memory circuit . in one example , the memory circuits 110 a - 110 n may be implemented as external memory circuits ( e . g ., on a separate integrated circuit from the circuits 102 a - 102 n and the channel router circuit 104 ). in another example , the memory circuits 110 a - 110 n may be implemented as internal memory circuits ( e . g ., implemented on an integrated circuit along with the circuits 102 a - 102 n and the channel router circuit 104 ). in one example , the memory circuits 110 a - 110 n may each be implemented as a dynamic random access memory ( dram ). the particular type of dram implemented may be varied to meet the design criteria of a particular implementation . in another example , the memory circuits 110 a - 110 n may each be a double data rate ( ddr ) memory circuit . the memory circuits 110 a - 110 n may be implemented as a variety of types of memory circuits . the circuits 102 a - 102 n may each receive a respective one of a number of signals ( e . g ., channel_clienta - n ) from a number of clients ( or requesters ). the signals channel_clienta - n may be request signals . the circuits 102 a - 102 n may present a number of control signals ( e . g ., cmda - cmdn ) and a number of data signals ( e . g ., dataa - datan ) to the channel router circuit 104 . in one example , the control signals cmda - cmdn may be implemented as command signals . the circuit 104 may present each of the control signals cmda - cmdn to each of the arbiter circuits 106 a - 106 n . the arbiter circuits 106 a - 106 n may each present a signal ( e . g ., cmd_sel ) to one of the protocol engines 108 a - 108 n . the signal cmd_sel may represent one of the control signals cmda - cmdn selected by the arbiter circuits 106 a - 106 n . the system 100 may allow simultaneous access to the memory circuits 110 a - 110 n by two or more of the request signals channel_clienta - n . each of the request signals channel_clienta - n may provide requests for access to one of the memory circuits 110 a - 110 n . in one example , the arbiter circuits 106 a - 106 n may have registered inputs and outputs . this may allow greatly reduced routing congestion . the partitioning may allow for simplicity and / or focus within the arbiter circuits 106 a - 106 n and / or the protocol engine circuit 104 . easy modifications and / or updates to a particular one of the subsystems may be implemented . the circuit 100 may provide a modular and / or scalable implementation . the circuit 100 may support 1 to n different memory circuits 110 a - 110 n . the memory circuits 100 a - 100 n may be implemented as a mix of similar and / or different memory types ( e . g ., sram , dram , etc .). implementing different memory types may allow the cost of implementing a system to be reduced . for example , high bandwidth and / or low latency memories may be implemented in parallel with high capacity memories . the circuit 100 may support memory circuits 100 a - 100 n that are implemented both internally and / or externally to the circuit 100 . the circuit 100 may support memory circuits 100 a - 100 n that are interleaved by low address bits ( e . g ., dword , 64 - byte , etc .) to increase effective bandwidth out of the memory subsystem . the particular number of memory circuits 110 a - 110 n may be scaled to provide additional parallel paths . such scaling may provide an increase in bandwidth . the circuit 100 may support 1 to n different requestors . the number of requestors may be the same number , or a different number , as the number of memory circuits 110 a - 110 n . the circuit 100 may support more than one fifo per client to effectively provide more bandwidth from the requestor . from the perspective of the channel router circuit 104 , each of the fifo circuits 102 a - 102 n may be connected to a different requestor . while a particular requestor is waiting for access to the memory circuits 110 a - 110 n , the requestor may process two bursts at a time and / or fill one or more of the fifo circuits 102 a - 102 n . the circuit 100 may provide improved system bandwidth by having parallel access to one or more of the memory subsystems 110 a - 110 n . implementing a channel router 104 may result in reduced congestion by reducing the number of long routes to each of the memory resource 110 a - 110 n . in one example , all of the memory resources 110 a - 110 n may be configured to share a common address space . in another example , the circuit 100 may be expandable to a large number of memory resources . the fifo circuits 102 a - 102 n may allow each of the different requesters to operate at a frequency that is different from the frequency of the memory circuits 110 a - 110 n . such an implementation may allow a loose coupling between the particular requestor and the memory circuits 110 a - 110 n . the buffer circuits 102 a - 102 n may provide arbitration latency absorption . the fifo circuits 102 a - 102 n may have a separate clock domain for the signals cmda - n and the signal data . the signal cmd operates at a frequency of the corresponding arbiter circuits 106 a - 106 n . the signal data may operate at a frequency of the protocol engine circuits 108 a - 108 n . if the corresponding arbiter circuits 106 a - 106 n and the corresponding protocol engine circuit 108 a - 108 n have different frequencies , then the signal cmd_sel may be an asynchronous signal configured to communicate the next command to perform . the channel router 104 may allow shared access to one or more of the memory circuits 110 a - 110 n . area and / or cost may be minimized by reducing the number of signals for each memory . a client generally only has one copy that the channel router 104 broadcasts to all the arbiters 106 a - 106 n . each device may have a unique address . part of the incoming address may be used as a selection term for the particular memory circuits 110 a - 110 n being requested . for example , if only two of the memory circuits 110 a - 110 n are being shared , then the most significant bit of the address may be used to select between the two memory circuits 110 a - 110 n being shared . if there are more than two of the memory circuits 110 a - 110 n being shared , then a variety of schemes may be used to select between the memory circuits 110 a - 110 n by using a combination of address bits . the channel router 104 may present the signals cmda - cmdn to one of the arbiters 106 a - 106 n . the channel router 104 may also enable a selected data path based on the result of the arbitration . parallel access to each of the different memory circuits 110 a - 110 n by different requestors may allow for additional bandwidth . the channel router 104 may also resolve out of order data problems returned to the requestor if a requestor has outstanding requests to more than one memory circuit 110 a - 110 n . for example , the channel router 104 may hold off requests from a particular requestor for access to a different one of the memory circuits 110 a - 110 n instead of the currently active memory circuit 110 a - 110 n until the access to the active memory subsystem is complete . the channel router 104 may be implemented to provide an order of multiplexing that matches the physical layout of the integrated circuit . in one example , if the fifo 102 a and the fifo 102 b are near each other , then the channel router 104 may multiplex the outputs of the fifo circuit 102 a and the fifo circuit 102 b first and then multiplex this result with the remaining fifo circuits 102 a - 102 n . this may allow the channel router 104 to reduce the congestion for the multiple channel clients to access the multiple arbiters 106 a - 106 n . the arbiter circuits 106 a - 106 n may perform independent arbitration for each of the memory circuits 110 a - 110 n . the arbitration may be tuned to the particular type of memory implemented ( e . g ., banks of a ddr , minimizing read / write transitions , etc .). the arbiter circuits 106 a - 106 n may determine which of the incoming requests to provide to the particular protocol engines 108 a - 108 n next . the particular type of arbitration scheme implemented may be varied to meet the design criteria of the overall system . the protocol engine circuits 108 a - 108 n may queue the command signals cmda - cmdn in the order received by the arbiter circuits 106 a - 106 n . the arbiter circuits 106 a - 106 n may decide which of the command signals cmda - cmdn the protocol engine circuits 108 a - 108 n receives next . any one of the protocol engine circuits 108 a - 108 n may process the selected command signals cmd_sel from a corresponding arbiter circuit 106 a - 106 n . for example , 108 a may process commands received from the arbiter 106 a . the protocol engines 108 a - 108 n may process the commands provided by the arbiters 106 a - 106 n . the protocol engines 108 a - 108 n may control writes and / or reads of data to / from the memory circuits 110 a - 110 n . the protocol engines 108 a - 108 n may be configured to run the particular protocol used by each type of memory . the memory circuits 110 a - 110 n may each be implemented using any memory type of addressable memory currently available or potentially available in the future . the memory circuits 110 a - 110 n may be implemented as volatile memory . for example , the memory circuits 110 a - 110 n may be implemented as rdram , sdram , dram , etc . the memory circuits 110 a - 110 n may be implemented as volatile or non - volatile memory . in one example , the memory circuits 110 a - 110 n may be implemented as flash memory . the memory circuits 110 a - 110 n may be implemented as internal memory , external memory , or a combination . a mixture of a variety of types of memory circuits 110 a - 110 n may be implemented . the memory circuits 110 a - 110 n may write data in response to write command signals cmd_sel received from the protocol engine circuit 104 . the memory circuits 110 a - 110 n may provide read data in response to read command signals cmd_rd received from the protocol engine circuit 104 . referring to fig2 , a more detailed diagram of the circuit 100 is shown . in addition to the circuits 102 a - 102 n , the channel router circuit 104 and the memory circuits 110 a - 110 n , the circuit 100 comprises a block ( or circuit ) 304 and a block ( or circuit ) 306 . the circuit 304 may be implemented as a memory controller circuit . the circuit 306 may be implemented as a ddr phy interface circuit . the circuit 304 and the circuit 306 illustrate details of one of the data paths . the circuit 304 generally comprises the arbiter circuit 106 a , the protocol engine 106 , a register interface circuit 310 and an internal memory controller circuit 312 . the internal memory controller circuit 312 may comprise another arbiter circuit 106 b , an sram interface control circuit 108 b and an internal sram memory circuit 110 b . the circuit 306 may comprise a register interface 318 , a ddr phy subsystem 320 and a ddr pad circuit 322 . the protocol engine 108 may implement ddr 1 , ddr 2 , and / or ddr 3 protocol compliant with jedec standards . other protocols , such as the ddr 4 standard , which is currently being worked on by jedec committees , may also be implemented . the protocol engine 108 may use various programmable parameters to allow support for the full jedec range of devices in accordance with various known specifications . firmware may be used to drive the ddr initialization sequence and then turn control over to the protocol engine 108 . the protocol engine 108 may provide periodic refreshes that may be placed between quantum burst accesses . the protocol engine 108 control may support a prefetch low - power mode as an automatic hardware initiated mode and a self - refresh low - power mode as a firmware initiated mode . the protocol engine 108 may also bank interleave each access with the previous access by opening the bank while the prior data transfer is still occurring . other optimizations may be provided by the protocol engine 108 to reduce the overhead as much as possible in the implementation of the ddr sequences . the subsystem 306 may be implemented as one or more hardmacro memory phys , such as the ddr 1 / 2 or ddr 2 / 3 phys . the subsystem 306 may be interfaced to the memory circuits 110 a - 110 n through the ddr pads 322 . the ddr pads 322 may be standard memory i / f pads which may manage the inter - signal skew and timing . the ddr pads 322 may be implemented as modules that may either be used directly or provided as a reference to customer logic where the ddr pads 332 will be implemented . the ddr pads 322 may include aspects such as bist pads , odt , and / or controlled impedance solutions to make the ddr phy 306 simple to integrate . the register interfaces 310 and 318 may allow the memory controller module 304 and ddr phy 306 to reside on a bus for accessing registers within the subsystem . in one example , an arm apb3 bus may be implemented . however , the particular type of bus implemented may be varied to meet the design criteria of a particular implementation . these registers may or may not directly allow access to the external memory 110 a and / or the internal sram 110 b . the signals channel_clienta - n may initiate writes and / or reads to the external memory 110 a and / or the internal sram 110 b . referring to fig3 , a computer system 600 with a hard disk drive is shown . the system 600 may comprise a cpu subsystem circuit 602 and an i / o subsystem circuit 604 . the circuit 602 generally comprises a cpu circuit 606 , a memory circuit 608 , a bridge circuit 610 and a graphics circuit 612 . the circuit 604 generally comprises a hard disk drive 614 , a bridge circuit 616 , a control circuit 618 and a network circuit 620 . referring to fig4 , a block diagram of a hard disk drive 614 is shown . the hard disk drive 614 generally comprises the ddr memory circuit 108 , a motor control circuit 702 , a preamplifier circuit 704 and a system - on - chip circuit 706 . the circuit 706 may comprise a hard disk controller circuit 700 and a read / write channel circuit 708 . the hard disk controller circuit 700 may transfer data between a drive and a host during read / write . the hard disk controller circuit 700 may also provide servo control . the motor control circuit 702 may drive a spindle motor and a voice coil motor . the preamplifier circuit 704 may amplify signals to the read / write channel circuit 708 and for head write data . referring to fig5 , a block diagram of a hard disk controller 700 is shown . the hard disk controller 700 generally comprises the memory controller circuit 304 , a host interface client circuit 802 , a processor subsystem client circuit 804 , a servo controller client circuit 806 and a disk formatter client circuit 808 . in one example , the circuit 804 may be a dual arm processor subsystem . however , the particular type of processor implemented may be varied to meet the design criteria of a particular implementation . the protocol engine circuit 106 located in the memory controller 304 may manage data movement between a data bus and host logic from the host interface client circuit 802 . the host interface client circuit 802 may process commands from the protocol engine 106 . the host interface client circuit 802 may also transfer data to and / or from the memory controller circuit 304 and the protocol engine 106 . the disk formatter client circuit 808 may move data between the memory controller circuit 304 and media . the disk formatter client circuit 808 may also implement error correcting code ( ecc ). the processor subsystem client circuit 804 may configure the registers in the memory controller 304 and block 306 for the purpose of performing initialization and training sequences to the memory controller 304 , the circuit 306 , the memory 110 a and / or the memory 316 b as used herein , the term “ simultaneously ” is meant to describe events that share some common time period but the term is not meant to be limited to events that begin at the same point in time , end at the same point in time , or have the same duration . as would be apparent to those skilled in the relevant art ( s ), the signals illustrated in fig1 - 5 represent logical data flows . the logical data flows are generally representative of physical data transferred between the respective blocks by , for example , address , data , and control signals and / or busses . the system represented by the circuit 100 , and the various sub - components , may be implemented in hardware , software or a combination of hardware and software according to the teachings of the present disclosure , as would be apparent to those skilled in the relevant art ( s ). the present invention may be implemented by the preparation of asics ( application specific integrated circuits ), platform asics , fpgas ( field programmable gate arrays ), plds ( programmable logic devices ), cplds ( complex programmable logic device ), sea - of - gates , rfics ( radio frequency integrated circuits ), assps ( application specific standard products ), monolithic integrated circuits , one or more chips or die arranged as flip - chip modules and / or multi - chip modules or by interconnecting an appropriate network of conventional component circuits , as is described herein , modifications of which will be readily apparent to those skilled in the art ( s ). while the invention has been particularly shown and described with reference to the preferred embodiments thereof , it will be understood by those skilled in the art that various changes in form and details may be made without departing from the scope of the invention .