Scalable switching fabric
Claim Score by NHIP
Abstract
A switch fabric includes a first plurality of data switches each having a plurality of input ports and a plurality of output ports the plurality of switches capable of switching any of its input ports to any of its output ports with the plurality of data switches having inputs coupled to a plurality of input buses so that a first byte of a first one of the input buses is coupled to a first one of the plurality of switches, and a succeeding byte of the first input bus is coupled to a succeeding one of the plurality of switches.

Term
Term ended
Projected expiry passed 28 January 2024, 2.7 years ago.
- Priority
- Filed
- Published
- Projected expiry
- Today
20 claims: 4 independent, 16 dependent
- 1Broadest claimClaim Score 87, broad(NHIP)A switch fabric comprises:a network switch having a plurality of inputs and outputs;and a distributed switching arrangement to provide a non-blocking switching fabric capability over a series of byte sliced buses.
- 5A switch for coupling network devices to a network processor, comprises:a plurality of virtual queues;input segment logic coupled to at least one bus, said input segment logic to determine to which virtual queue incoming data should be sent to;and output segment logic to select which new Virtual Queue should be connected to an output port.
- 10A switch fabric, comprises:a pair of data switches each having a plurality of input ports and a plurality of output ports the switches capable of switching any of its input ports to any of its output ports;said pair of data switches having inputs coupled to a plurality of input buses so that a first byte of a first one of the buses is coupled to the first switch, and a last byte of the first bus is coupled to the second switch.
- 15A switch fabric, comprises:a first plurality of data switches each having a plurality of input ports and a plurality of output ports the plurality of switches capable of switching any of its input ports to any of its output ports;said plurality of data switches having inputs coupled to a plurality of input buses so that a first byte of a first one of the input buses is coupled to a first one of the plurality of switches, and a succeeding byte of the first input bus is coupled to a succeeding one of the plurality of switches.
Independent claims4
167 paragraphs in 4 sections, as filed
BACKGROUND
[0001] This invention relates to switching fabrics used to switch data in computer networks and other data moving applications.
[0002] Crossbars are one type of switching fabric used to switch data between pluralities of devices. They can be thought of as a switch that has a plurality of vertical paths interconnected by switching elements to a plurality of horizontal paths in a manner that the switch elements can interconnect any one of the vertical paths to any one of the horizontal paths. Generally such crossbars are implemented with custom application specific integrated circuits (ASIC's).
SUMMARY
[0003] According to an aspect of the present invention, a switch fabric includes a network switch having a plurality of inputs and outputs and a distributed switching arrangement to provide a non-blocking switching fabric capability over a series of byte sliced buses.
[0004] According to an additional aspect of the present invention, a switch for coupling network devices to a network processor, includes a plurality of virtual queues and input segment logic coupled to at least one bus, said input segment logic to determine to which virtual queue incoming data should be sent to and output segment logic to select which new virtual queue should be connected to an output port.
[0005] According to an additional aspect of the present invention, a switch fabric includes a first plurality of data switches each having a plurality of input ports and a plurality of output ports the plurality of switches capable of switching any of its input ports to any of its output ports with the plurality of data switches having inputs coupled to a plurality of input buses so that a first byte of a first one of the input buses is coupled to a first one of the plurality of switches, and a succeeding byte of the first input bus is coupled to a succeeding one of the plurality of switches.
[0006] One or more of the following advantages may be provided by one or more aspects of the invention.
[0007] A high performance, scalable switching fabric is provided for scaling a rotary switch for a multitude of ports. The rotary switch uses virtual queuing providing the rotary switch controller (RSC) full crossbar capability, such that any of its input queues can couple to any of its output queues without blocking. The RSC permits dynamic configuration of additional ports. The RSC is a modular concept allowing a switch to grow from e.g., 32 ports to 64 ports to 128 ports using a passive backplane.
BRIEF DESCRIPTION OF THE DRAWINGS
[0008]FIG. 1 is a block diagram of a network system including a rotary switch.
[0009]FIG. 2 is block diagram showing an implementation of the rotary switch.
[0010]FIG. 3 is a block diagram of the rotary switch.
[0011]FIG. 4A is a block diagram of a rotary switch coupled in a byte sliced configuration.
[0012]FIG. 4B is a block diagram of two rotary switches coupled in a byte sliced configuration.
[0013]FIG. 5A is a chart diagram showing byte mapping for a single rotary switch of FIG. 4A.
[0014]FIG. 5B is a chart diagram showing byte mapping in the device of FIG. 4B.
[0015]FIG. 6 is a block diagram showing structures used in arbitration in the rotary switch.
DESCRIPTION
[0016] Referring to FIG. 1, a networked system <b>10</b> includes a rotary switch <b>12</b> transfering data from input ports to output ports in a non-blocking manner. For instance, the switch can be used for sending packet data at plurality of network processors <b>14</b> to network devices <b>16</b> coupled to separate 32 bit FIFO busses. The rotary switch <b>12</b> includes a data path that is sliced or partitioned on an 8 bit (i.e. byte) basis to allow system <b>10</b> to be expanded from e.g., a 2×2 FIFO bus system to an 8×8 FIFO bus system and so forth as described below. The rotary switch <b>12</b> includes a plurality of 8-bit wide Virtual Input Queues (“VIQ”) <b>18</b> that are distributed into input segments with each of 8 byte wide input segments coupled to 16 of the VIQ's <b>18</b>. The rotary switch device <b>12</b> also includes a plurality of Output Segments <b>20</b>.
[0017] The rotary switch <b>12</b> also includes a switching fabric network <b>24</b> which in combination with the Virtual Input Queues and output segment logic <b>20</b> can move byte wide data from any of the plurality of Input Virtual Queues <b>18</b> to an output FBUS byte without restricting the access of any other input segment to any of Input Virtual Queues <b>18</b>. Data switching is controlled by a arbiter <b>22</b>.
[0018] The internal fabric <b>24</b> of the RSC <b>12</b> provides full input to output connectivity that is, a full of any and all of the inputs to any and all of the outputs. In a exemplary rotary switch <b>12</b>, there are 128 8-bit wide Virtual Input Queues (“VIQ”), distributed over 8 segments e.g., 16 VIQ's per segment and 8 output segments, thus providing a device <b>12</b> having 128 input ports to any of the 128 output ports. The fabric is an independently queued structure that does not require symmetric switching. The switching is a distributed function between a loose arrangement among processors <b>14</b> and the RSC fabric <b>24</b>. The RSC arbiter <b>22</b> provides a fair round robin service for received packets. The processors <b>14</b> can provide packets either through a simple round robin or weighted fair queuing to the RSC <b>12</b>. The output port switching is based on a PULL arbitration scheme.
[0019] Referring to FIG. 2, an implementation of the system <b>10</b> of FIG. 1, is shown. A rotary switch device <b>12</b> is shown coupled to a pair of network processors <b>14</b>. The network processors are preferably parallel-based multithreaded processors. One example of such a processor is described in U.S. patent application entitled “PARALLEL PROCESSOR ARCHITECTURE”, filed on by and assigned to the assignee of the present invention and incorporated herein by reference. Each of the processors <b>14</b> communicate with data supplying devices <b>13</b> e.g., here Media Access Controllers (MAC'S) that are coupled to the physical layer of a network <b>30</b>.
[0020] The system <b>10</b> also includes a passive backplane <b>30</b>. The passive backplane <b>30</b> employs tri-state steering logic to enable dynamic reconfiguration of the system <b>10</b> based on the number of ports supported. This system <b>10</b> is a byte slice arrangement. As a byte sliced arrangement, when new ports are added, all ports stop transmitting to RSC devices <b>12</b>. Depending on buffering and steering initialization time, input ports may or may not have to be paused. The passive backplane includes nine (9) main busses <b>30</b><i>a</i>-<b>30</b><i>b. </i>The first bus <b>30</b><i>a </i>is a computer bus e.g., a Personal Computer Interconnect (PCI) bus. While this is bridged bus, and therefore strictly speaking the backplane is not passive, the bridge and microprocessor unit that is commonly associated with busses such as the PCI bus can be provided as a daughter card to maintain a passive backplane <b>30</b>. The other 8 busses on the backplane are used to interconnect the RSC blades Blade<sub>—</sub>0-Blade<sub>—</sub>3. A RSC blade is an arrangement of RSC devices <b>12</b>, network processors <b>14</b> and network devices <b>16</b>.
[0021] Since the FBUS data (32 bit Unidirectional busses) is sectioned into up to four 8 bit segments. The segments can be sized based on the number of equivalent ports supported by the system <b>10</b>. If a single blade is used i.e., a 32 port system, the backplane steering logic connects Bus <b>30</b><i>b </i>to Bus <b>30</b><i>e </i>and Bus <b>30</b><i>i </i>to Bus <b>30</b><i>f </i>to provide input data, i.e., two 24 bit FBUS data busses to the RSC <b>12</b>. These two busses along with immediate feedback of 8 bits each from Bus <b>30</b><i>b </i>and Bus <b>30</b><i>i </i>form two 32 bit input busses to the RSC <b>12</b>. Bus <b>30</b><i>d </i>is steered to Bus <b>30</b><i>c </i>for transmit to the MAC device <b>16</b>. The 24 data bits of FBUS buses along with the 8 bits from the RSC <b>12</b> form 32 bits to the MAC. Similarly, Bus <b>30</b><i>g </i>is steered to Bus <b>30</b><i>h </i>and merged with 8 bits of immediate feedback data from the RSC <b>12</b> to form 32 bits to the MACs <b>16</b>.
[0022] Each blade e.g., Blade<sub>—</sub>0 to Blade<sub>—</sub>3 is similar in construction and are scaled together via the passive backplane <b>32</b>. Thus, if system <b>10</b> has 64 ports supported, the steering logic (not shown) selects the appropriate bytes from each of the busses and connects them to their respective destination busses in 16 bit sections. If 128 ports are instantiated, then the section size is 8 bits. It should be noted that a 64 port system can be configured into a 96 port system where the section size is 8 bits, and the three RSC blades are used, with only <b>6</b> input segments (instead of the possible 8). In this type of configuration, a fourth RSC is required to complete the 32 bit byte-slice. Therefore, 96 port systems require the use of a simple add-in board which is populated with only an RSC using bits (31:8) on both input sections.
[0023] Referring to FIG. 3, the RSC <b>12</b> includes input segment logic devices (ISL) <b>40</b><i>a</i>-<b>40</b><i>h </i>that handles incoming FBUS data and distributes the incoming data to an appropriate virtual input queue in virtual queue logic (VQL) devices <b>42</b><i>a</i>-<b>42</b><i>p. </i>The RSC <b>12</b> also includes output segment logic devices (OSL) <b>44</b><i>a</i>-<b>44</b><i>h. </i>The OSL devices <b>44</b> pull data from the VQL logic devices <b>42</b> and deliver the data to the output side of the FBUS for distribution to appropriate MAC devices <b>14</b>. The input virtual queues <b>42</b><sub>0</sub>, to <b>42</b><sub>127 </sub>are coupled to the output segment logic <b>44</b> via a series of multiplexers <b>47</b><sub>0 </sub>to <b>47</b><sub>127</sub>. Each of the multiplexers <b>42</b><sub>0 </sub>to <b>42</b><sub>127 </sub>is coupled to each of the virtual input queues <b>42</b> in its row e.g., VIQ <b>42</b><sub>0</sub>-<b>42</b><sub>112 </sub>for multiplexer <b>42</b><sub>0</sub>). There are sixteen of said multiplexers in each column. The output of the multiplexers <b>47</b><sub>0 </sub>to <b>47</b><sub>127 </sub>for each of the columns (e.g., multiplexer <b>47</b><sub>0</sub>-<b>47</b><sub>15 </sub>for column 0) feed corresponding output multiplexers <b>49</b><sub>0 </sub>to <b>49</b><sub>7 </sub>which are coupled to the output segment logic <b>44</b><i>a</i>-<b>44</b><i>h. </i>
[0024] The RSC <b>12</b> also includes Input Ready logic <b>46</b> that samples the virtual input queues in the virtual queue logic (VQL) devices <b>42</b><i>a</i>-<b>42</b><i>p </i>to report back the status of the virtual input queues to mapped input segments, so that the devices <b>14</b> (FIG. 1) that supply data can track buffer fullness. The RSC <b>12</b> also includes output ready logic <b>48</b>. The Output Ready Logic (ORL) <b>48</b> is analogous to the Input ready logic. However, the ORL <b>48</b> samples the network devices <b>16</b> e.g., MAC transmit ready bits to determine if the network devices <b>16</b> are ready to accept more transmit data. The RSC <b>12</b> also includes Output Segment Arbitration Logic <b>50</b>. The Output Segment Arbitration Logic <b>50</b> as will be described in FIG. 6, is used to determine which virtual input queue should provide data to its output segment in an appropriate timeslot. One preferred scheme has the Output Segment Arbitration Logic <b>50</b> using a round robin time multiplexed arbitration algorithm.
[0025] The Input Segment Logic (ISL) <b>40</b> interfaces with the network processor <b>14</b> and determines which virtual queue an incoming mpkt (64 byte payload) should be sent to. The RSC <b>12</b> has a plurality of virtual queues. In one example, there are 16 virtual queues to which each input segment can direct incoming mpkts. The RSC <b>12</b> is arranged into segments e.g., 8 input segments. If fewer input segments are required (i.e., the RSC <b>12</b> is configured for fewer ports), then logically contiguous input segments are joined to form either a 32 bit datapath (32 ports), or a 16 bit datapath (64 ports).
[0026] The ISL <b>40</b> uses in-band information to control virtual queue loading and port arbitration. In-band information is used to minimize pin cost as would be associated with explicit out-of-band control. The in-band information includes a destination output port (8 bits), an SOP bit, a “Transmit As Is” control bit, a byte enable control bit, a CSR enable, and a Virtual Queue Identifier (4 bits). Since, there is only 8 bits of in-band data available per cycle, and there are 16 bits required, 2 in-band cycles are required. There is an optimization, in 64 or 32 port modes, 16 bits/32 bits of in-band information are possible, therefore only one in-band information cycle is required.
[0027] Input data to the crossbar includes two 32 bit header words containing control information followed by up to eight (8) 32 bit words of packet data. The 32 bit input word is connected to 4 input segments. The header is segmented into 2 bytes of control for each input segment, and specifies the VIQ to load, the output destination, byte count, end of packet, and byte enable for the last 32 bit word being transmitted. The 4 output segments specified receive the VIQ addresses of new packets being loaded in a “pending” output FIFO. All packets being sent to the same output port are loaded into a similar “pending” FIFO so that all four output byte segments begin to send data to the output FIFO bus on the same cycle. Byte data from the 4 output segments is combined to form the 32 bit output FIFO bus.
[0028] Two output segments per RSC are enabled to drive control signals (start of packet, end of packet, transmit as is, transmit error), while all segments drive byte enable signals. The output control logic samples the ready signals for all output destinations. All output segments update their ready bit status in lock step so that the 4 sliced bytes of the input FIFO bus can be switch at the same time.
[0029] The inputs to the input segment logic <b>42</b> include the FBUS data bits (7:0), and control signals, TxSel, EOP, and NewQHdr. The FBUS data bits are as above, the TxSel bits are used to frame the FBUS data bits as valid, whereas, EOP is used to explicitly identify the end of a packet. The NewQHdr bit indicates to the ISL <b>420</b> that a new set of Virtual Queue information is coming. An optimization may be that if EOP AND NewQhdr are asserted this would require only a single prepend cycle to indicate a target Virtual Queue. The implication in that case is that the transfer is not a new packet but rather continuation data from a currently transmitting packet. In this case an in-band EOP is required.
[0030] The Input Ready Logic (IRL) <b>46</b> samples the status of the 16 virtual queues in virtual queue logic <b>42</b><i>a</i>-<b>42</b><i>p </i>associated with each input segment. If a VIQ has available space then the IRL will report that to a requesting network processor <b>14</b> (FIG. 1), via VIQ transmit ready bits. The network processor <b>14</b> can use this information to schedule transfers to the virtual queues.
[0031] The virtual queues VIQ's are associated with a particular output while there is valid data maintained in the virtual queue. The virtual queues can have a suitable storage depth e.g., 4 mpkts for 14 of the queues and to 8 mpkts for two, where each mpkt is 64 bytes. There are 16 Virtual queues associated with each input/output segment.
[0032] Other arrangements are possible. Each VIQ has an input pointer and an output pointer. The input pointer is used by the Input Segment Logic <b>40</b> (ISL) to push data into the VIQ, while the output pointer is used by the output Segment Logic to “pull” data from the VIQ for distribution out the transmit FBUS. In one implementation, the VIQ's are single ported random access memory devices. Since a read and write may be concurrently required for the full crossbar operation, the VIQ's are cycled twice as fast as the input fill rate. For example, if the input fill rate is 66-80 Mhz from the input segment FBUSES, the output drain rate would be a decoupled <b>66</b>-<b>80</b>Mhz FBUS drain rate then the VIQ's would operate at 133 to 166 MHZ that is twice as fast as the faster of the Input or Output FBUS rates. Alternatively, the queues can be organized as 2 bytes in width and accessed on alternate cycles.
[0033] In order to maximize the efficiency of the Rotary switch <b>12</b>, the switch fabric operates at twice the output FBUS drain rate. One way to accomplish this would be to cycle the VIQ's twice again as fast. Another way would be to have the VIQ's be twice as wide. Thus, if the VIQ's input segment is 8 bits wide the VA's are buffered to form 16 bits of write data. Read operations will fetch 16 bits of read data which will be supplied to the switch fabric at 133-160 Mhz 8 bit chunks.
[0034] The Output Segment Logic (OSL) <b>44</b> is a timeslot filler. The Output Segment Logic <b>44</b> uses Output Segment Arbitration <b>50</b> results to select which new Virtual Queue should be “connected” to an output port. The OSL examines Transmit ready bits which are collected by the Output Ready bit Logic (ORL) <b>48</b> to determine if the output port is ready to accept a new mpkt (64 bytes). The Output Segment Logic decouples the VIQ crossbar logic from the output drain rate, by employing a 16 mpkt queue at each output segment (16*64B*8=8 KB). This decoupling allows the crossbar to operate at a higher frequency. The OSL <b>44</b> includes a 16 entry timeslot queue. Each VIQ to Output Port has an explicit timeslot entry. If a VIQ is not available, its slot may be compressed. Up to n slots may be compressed (most likely n=2) before filling is “wait stated” until skipped VIQ's are available.
[0035] The Output Ready Logic (ORL) <b>48</b> interrogates the destination network devices <b>16</b> (FIG. 1) for transmit ready bits. The transmit ready bits are used by the RSC <b>12</b> in the Output Segment Logic <b>44</b> (OSL) to promote data from the RSC <b>12</b> to the appropriate output segment FBUS <b>31</b>. The ORL <b>48</b> is a ready bus Master. It cycles through all attached MAC's fetching the transmit ready bits. The ORL <b>48</b> assembles all the transmit ready bits and provides them to their respective output segment. The OSL <b>48</b> uses these bits to determine if the tail of the queue should be filled with that output port's mpkt. This is done to avoid head of queue blocking.
[0036] The Output Segment Arbitration (OSA) <b>50</b> is used to link a virtual queue <b>42</b> (VIQ) to an output port. The RSC <b>12</b> employs a distributed crossbar selection scheme. The network processor <b>14</b> performs weighted fair queuing and provides the top elements for transmission to the RSC <b>12</b>. The RSC <b>12</b> in turn uses a fair service algorithm and a non-blocking scheme so that efficiency is maintained.
[0037] Switch Arrangements
[0038] Referring to FIG. 4A, a rotary switch <b>14</b><i>a, </i>is coupled to provide a 2×2 FIFO BUS switching fabric. The rotary switches <b>14</b><i>a </i>is fed by buses B0-B1 which are each 32 bit byte sliced busses. The output of the rotary switch <b>14</b><i>a </i>is coupled to output busses e.g., FBUS<sub>—</sub>0, FBUS<sub>—</sub>1. On the input side, the four bytes of each bus B0-B1 are coupled in sequence to the rotary switch <b>14</b><i>a </i>and on the output side the first four output segments of each rotary switch provide the bytes of FBUS<sub>—</sub>0, the next four output segments provide the bytes of FBUS<sub>—</sub>1. The mapping for this arrangement is shown in FIG. 5A. In this manner a byte sliced architecture is provide. This byte sliced architecture, is non-blocking. That is, any input port can be connected to any output port without blocking any other input port from connecting to any other output port. In any one cycle, all input ports can couple data to different ones of all of the output ports.
[0039] Referring to FIG. 4B, a pair of rotary switches <b>14</b><i>a</i>, <b>14</b><i>b </i>are coupled to provide a 4×4 FIFO BUS switching fabric. The rotary switches <b>14</b><i>a</i>, <b>14</b><i>b </i>have input segments coupled by buses B0-B3 which are each 32 bit byte sliced buses. The output segments of the rotary switches <b>14</b><i>a</i>, <b>14</b><i>b </i>are coupled to output busses e.g., FBUS<sub>—</sub>0 to FBUS<sub>—</sub>3. On the input side, the first two bytes of each bus B0-B3 are coupled to the input segments of the first rotary switch <b>14</b><i>a</i>, whereas, the last two bytes of each bus are coupled to the input segments of the second rotary switch <b>14</b><i>b</i>. On the output side the first two output segments of each rotary switch provide the bytes of FBUS<sub>—</sub>0, the next two output segments the bytes of FBUS<sub>—</sub>1 and so forth. The mapping for this arrangement is shown in FIG. 5B. In this manner a byte sliced architecture is provide. This byte sliced architecture, is a 4×4 architecture and is non-blocking. That is, any input port can be connected to any output port and not block any other input port from connecting to any other output port. In any one cycle, all input ports can couple data to different ones of all of the output ports.
[0040] Thus, rotary switches can be coupled to provide larger switching fabrics. Four switches (a mapping of which is set out below) can be coupled such that eight, 4 byte buses could be coupled to the four switches with first bytes of a each bus coupled to the first switch, second bytes of each bus coupled to the second switch, third bytes of each bus coupled to the third switch and fourth bytes of each bus coupled to the fourth switch. Moreover, with larger rotary switches i.e., that can interface to larger buses, e.g., 8 byte buses, even larger configurations could be provided in a similar manner. On the output side a similar connection arrangement is provided.
[0041] This switching fabric is scalable, i.e., easily expanded from a 2×2 FIFO bus configuration (32 ports to 32 ports) up to an 8×8 FIFO bus configuration (128 ports to 128 ports) without adding additional hierarchial levels of switches. That is, expansion occurs on a single level of switches which reduces latency and complexity.
[0042] Referring to FIG. 5A, the mapping as a 2×2 FIFO bus switching fabric requires one RSC <b>12</b>, with bytes output mapped as follows:
[0043] 1. output segment 0—byte 0 (bits(31:24)) output FIFO bus 0
[0044] 2. output segment 1—byte 1 (bits(23:16)) output FIFO bus 0
[0045] 3. output segment 2—byte 2 (bits(15:08)) output FIFO bus 0
[0046] 4. output segment 3—byte 3 (bits(07:00)) output FIFO bus 0
[0047] 5. output segment 4—byte 0 (bits(31:24)) output FIFO bus 1
[0048] 6. output segment 5—byte 1 (bits(23:16)) output FIFO bus 1
[0049] 7. output segment 6—byte 2 (bits(15:08)) output FIFO bus 1
[0050] 8. output segment 7—byte 3 (bits(07:00)) output FIFO bus 1
[0051] and the input segments mapped as;
[0052] 1. input segment 0—byte 0 (bits(31:24)) input FIFO bus 0
[0053] 2. input segment 1—byte 1 (bits(23:16)) input FIFO bus 0
[0054] 3. input segment 2—byte 2 (bits(15:08)) input FIFO bus 0
[0055] 4. input segment 3—byte 3 (bits(07:00)) input FIFO bus 0
[0056] 5. input segment 4—byte 0 (bits(31:24)) input FIFO bus 1
[0057] 6. input segment 5—byte 1 (bits(23:16)) input FIFO bus 1
[0058] 7. input segment 6—byte 2 (bits(15:08)) input FIFO bus 1
[0059] 8. input segment 7—byte 3 (bits(07:00)) input FIFO bus 1
[0060] where FBUS<sub>x</sub>Y corresponds to byte “x” of FBUS “Y.” Thus, the output segments 0, 1, 2, 3 connect concurrently to corresponding Virtual Queues either in input segments 0, 1, 2, 3 or 4, 5, 6, 7, respectively.
[0061] Referring to FIG. 5B, to expand to a 4×4 FIFO bus switching fabric requires two RSC devices <b>14</b>. FIG. 5B shows the output mapping with the output mapped as,
[0062] 1. RSC<sub>—</sub>0 output segment 0—byte 0 (bits(31:24)) output FIFO bus 0
[0063] 2. RSC<sub>—</sub>0 output segment 1—byte 1 (bits(23:16)) output FIFO bus 0
[0064] 3. RSC<sub>—</sub>0 output segment 2—byte 0 (bits(31:24)) output FIFO bus 1
[0065] 4. RSC<sub>—</sub>0 output segment 3—byte 1 (bits(23:16)) output FIFO bus 1
[0066] 5. RSC<sub>—</sub>0 output segment 4—byte 0 (bits(31:24)) output FIFO bus 2
[0067] 6. RSC<sub>—</sub>0 output segment 5—byte 1 (bits(23:16)) output FIFO bus 2
[0068] 7. RSC<sub>—</sub>0 output segment 6—byte 0 (bits(31:24)) output FIFO bus 3
[0069] 8. RSC<sub>—</sub>0 output segment 7—byte 1 (bits(23:16)) output FIFO bus 3
[0070] 9. RSC<sub>—</sub>1 output segment 0—byte 2 (bits(15:08)) output FIFO bus 0
[0071] 10. RSC<sub>—</sub>1 output segment 1—byte 3 (bits(07:00)) output FIFO bus 0
[0072] 11. RSC<sub>—</sub>1 output segment 2—byte 2 (bits(15:08)) output FIFO bus 1
[0073] 12. RSC<sub>—</sub>1 output segment 3—byte 3 (bits(07:00)) output FIFO bus 1
[0074] 13. RSC<sub>—</sub>1 output segment 4—byte 2 (bits(15:08)) output FIFO bus 2
[0075] 14. RSC<sub>—</sub>1 output segment 5—byte 3 (bits(07:00)) output FIFO bus 2
[0076] 15. RSC<sub>—</sub>1 output segment 6—byte 2 (bits(15:08)) output FIFO bus 3
[0077] 16. RSC<sub>—</sub>1 output segment 7—byte 3 (bits(07:00)) output FIFO bus 3
[0078] The input would be mapped in a similar manner (not shown in FIG. 5B). The input segments mapped as;
[0079] 1. RSC<sub>—</sub>0 input segment 0—byte 0 (bits(31:24)) input FIFO bus 0
[0080] 2. RSC<sub>—</sub>0 input segment 1—byte 1 (bits(23:16)) input FIFO bus 0
[0081] 3. RSC<sub>—</sub>0 input segment 2—byte 0 (bits(31:24)) input FIFO bus 1
[0082] 4. RSC<sub>—</sub>0 input segment 3—byte 1 (bits(23:16)) input FIFO bus 1
[0083] 5. RSC<sub>—</sub>0 input segment 4—byte 0 (bits(31:24)) input FIFO bus 2
[0084] 6. RSC<sub>—</sub>0 input segment 5—byte 1 (bits(23:16)) input FIFO bus 2
[0085] 7. RSC<sub>—</sub>0 input segment 6—byte 0 (bits(31:24)) input FIFO bus 3
[0086] 8. RSC<sub>—</sub>0 input segment 7—byte 1 (bits(23:16)) input FIFO bus 3
[0087] 9. RSC<sub>—</sub>1 input segment 0—byte 2 (bits(15:08)) input FIFO bus 0
[0088] 10. RSC<sub>—</sub>1 input segment 1—byte 3 (bits(07:00)) input FIFO bus 0
[0089] 11. RSC<sub>—</sub>1 input segment 2—byte 2 (bits(15:08)) input FIFO bus 1
[0090] 12. RSC<sub>—</sub>1 input segment 3—byte 3 (bits(07:00)) input FIFO bus 1
[0091] 13. RSC<sub>—</sub>1 input segment 4—byte 2 (bits(15:08)) input FIFO bus 2
[0092] 14. RSC<sub>—</sub>1 input segment 5—byte 3 (bits(07:00)) input FIFO bus 2
[0093] 15. RSC<sub>—</sub>1 input segment 6—byte 2 (bits(15:08)) input FIFO bus 3
[0094] 16. RSC<sub>—</sub>1 input segment 7—byte 3 (bits(07:00)) input FIFO bus 3
[0095] where in FIG. 5B, FBUS<sub>x</sub>Y corresponds to byte “x” of FBUS “Y.” Thus output segments (RSC<sub>—</sub>0 0,1/RSC<sub>—</sub>1 0,1), (RSC<sub>—</sub>0 2,3/RSC<sub>—</sub>1 2,3), (RSC<sub>—</sub>0 4,5/RSC<sub>—</sub>1 4,5), (RSC<sub>—</sub>0 6,7/RSC<sub>—</sub>1 6,7) representing output FIFO busses 0, 1, 2, and 3 respectively, connect concurrently to corresponding Virtual Input Queues in VIL <b>42</b> for the input segments of input FIFO busses 0, 1, 2, and 3.
[0096] Thus, an 8×8 FIFO bus crossbar requires 4 RSC chips, with the output mapped as:
[0097] 1. RSC<sub>—</sub>0 output segment 0—byte 0 (bits(31:24)) output FIFO bus 0
[0098] 2. RSC<sub>—</sub>0 output segment 1—byte 0 (bits(31:24)) output FIFO bus 1
[0099] 3. RSC<sub>—</sub>0 output segment 2—byte 0 (bits(31:24)) output FIFO bus 2
[0100] 4. RSC<sub>—</sub>0 output segment 3—byte 0 (bits(31:24)) output FIFO bus 3
[0101] 5. RSC<sub>—</sub>0 output segment 4—byte 0 (bits(31:24)) output FIFO bus 4
[0102] 6. RSC<sub>—</sub>0 output segment 5—byte 0 (bits(31:24)) output FIFO bus 5
[0103] 7. RSC<sub>—</sub>0 output segment 6—byte 0 (bits(31:24)) output FIFO bus 6
[0104] 8. RSC<sub>—</sub>0 output segment 7—byte 0 (bits(31:24)) output FIFO bus 7
[0105] 9. RSC<sub>—</sub>1 output segment 0—byte 1 (bits(23:16)) output FIFO bus 0
[0106] 10. RSC<sub>—</sub>1 output segment 1—byte 1 (bits(23:16)) output FIFO bus 1
[0107] 11. RSC<sub>—</sub>1 output segment 2—byte 1 (bits(32:16)) output FIFO bus 2
[0108] 12. RSC<sub>—</sub>1 output segment 3—byte 1 (bits(23:16)) output FIFO bus 3
[0109] 13. RSC<sub>—</sub>1 output segment 4—byte 1 (bits(23:16)) output FIFO bus 4
[0110] 14. RSC<sub>—</sub>1 output segment 5—byte 1 (bits(23:16)) output FIFO bus 5
[0111] 15. RSC<sub>—</sub>1 output segment 6—byte 1 (bits(23:16)) output FIFO bus 6
[0112] 16. RSC<sub>—</sub>1 output segment 7—byte 1 (bits(23:16)) output FIFO bus 7
[0113] 17. RSC<sub>—</sub>2 output segment 0—byte 2 (bits(15:08)) output FIFO bus 0
[0114] 18. RSC<sub>—</sub>2 output segment 1—byte 2 (bits(15:08)) output FIFO bus 1
[0115] 18. RSC<sub>—</sub>2 output segment 2—byte 2 (bits(15:08)) output FIFO bus 2
[0116] 19. RSC<sub>—</sub>2 output segment 3—byte 2 (bits(15:08)) output FIFO bus 3
[0117] 20. RSC<sub>—</sub>2 output segment 4—byte 2 (bits(15:08)) output FIFO bus 4
[0118] 21. RSC<sub>—</sub>2 output segment 5—byte 2 (bits(15:08)) output FIFO bus 5
[0119] 22. RSC<sub>—</sub>2 output segment 6—byte 2 (bits(15:08)) output FIFO bus 6
[0120] 23. RSC<sub>—</sub>2 output segment 7—byte 2 (bits(15:08)) output FIFO bus 7
[0121] 24. RSC<sub>—</sub>3 output segment 0—byte 3 (bits(07:00)) output FIFO bus 0
[0122] 25. RSC<sub>—</sub>3 output segment 1—byte 3 (bits(07:00)) output FIFO bus 1
[0123] 26. RSC<sub>—</sub>3 output segment 2—byte 3 (bits(07:00)) output FIFO bus 2
[0124] 27. RSC<sub>—</sub>3 output segment 3—byte 3 (bits(07:00)) output FIFO bus 3
[0125] 28. RSC<sub>—</sub>3 output segment 4—byte 3 (bits(07:00)) output FIFO bus 4
[0126] 29. RSC<sub>—</sub>3 output segment 5—byte 3 (bits(07:00)) output FIFO bus 5
[0127] 30. RSC<sub>—</sub>3 output segment 6—byte 3 (bits(07:00)) output FIFO bus 6
[0128] 31. RSC<sub>—</sub>3 output segment 7—byte 3 (bits(07:00)) output FIFO bus 7
[0129] The input segments would be mapped as follows:
[0130] 1. RSC<sub>—</sub>0 input segment 0—byte 0 (bits(31:24)) input FIFO bus 0
[0131] 2. RSC<sub>—</sub>0 input segment 1—byte 0 (bits(31:24)) input FIFO bus 1
[0132] 3. RSC<sub>—</sub>0 input segment 2—byte 0 (bits(31:24)) input FIFO bus 2
[0133] 4. RSC<sub>—</sub>0 input segment 3—byte 0 (bits(31:24)) input FIFO bus 3
[0134] 5. RSC<sub>—</sub>0 input segment 4—byte 0 (bits(31:24)) input FIFO bus 4
[0135] 6. RSC<sub>—</sub>0 input segment 5—byte 0 (bits(31:24)) input FIFO bus 5
[0136] 7. RSC<sub>—</sub>0 input segment 6—byte 0 (bits(31:24)) input FIFO bus 6
[0137] 8. RSC<sub>—</sub>0 input segment 7—byte 0 (bits(31:24)) input FIFO bus 7
[0138] 9. RSC<sub>—</sub>1 input segment 0—byte 1 (bits(23:16)) input FIFO bus 0
[0139] 10. RSC<sub>—</sub>1 input segment 1—byte 1 (bits(23:16)) input FIFO bus 1
[0140] 11. RSC<sub>—</sub>1 input segment 2—byte 1 (bits(32:16)) input FIFO bus 2
[0141] 12. RSC<sub>—</sub>1 input segment 3—byte 1 (bits(23:16)) input FIFO bus 3
[0142] 13. RSC<sub>—</sub>1 input segment 4—byte 1 (bits(23:16)) input FIFO bus 4
[0143] 14. RSC<sub>—</sub>1 input segment 5—byte 1 (bits(23:16)) input FIFO bus 5
[0144] 15. RSC<sub>—</sub>1 input segment 6—byte 1 (bits(23:16)) input FIFO bus 6
[0145] 16. RSC<sub>—</sub>1 input segment 7—byte 1 (bits(23:16)) input FIFO bus 7
[0146] 17. RSC<sub>—</sub>2 input segment 0—byte 2 (bits(15:08)) input FIFO bus 0
[0147] 18. RSC<sub>—</sub>2 input segment 1—byte 2 (bits(15:08)) input FIFO bus 1
[0148] 18. RSC<sub>—</sub>2 input segment 2—byte 2 (bits(15:08)) input FIFO bus 2
[0149] 19. RSC<sub>—</sub>2 input segment 3—byte 2 (bits(15:08)) input FIFO bus 3
[0150] 20. RSC<sub>—</sub>2 input segment 4—byte 2 (bits(15:08)) input FIFO bus 4
[0151] 21. RSC<sub>—</sub>2 input segment 5—byte 2 (bits(15:08)) input FIFO bus 5
[0152] 22. RSC<sub>—</sub>2 input segment 6—byte 2 (bits(15:08)) input FIFO bus 6
[0153] 23. RSC<sub>—</sub>2 input segment 7—byte 2 (bits(15:08)) input FIFO bus 7
[0154] 24. RSC<sub>—</sub>3 input segment 0—byte 3 (bits(07:00)) input FIFO bus 0
[0155] 25. RSC<sub>—</sub>3 input segment 1—byte 3 (bits(07:00)) input FIFO bus 1
[0156] 26. RSC<sub>—</sub>3 input segment 2—byte 3 (bits(07:00)) input FIFO bus 2
[0157] 27. RSC<sub>—</sub>3 input segment 3—byte 3 (bits(07:00)) input FIFO bus 3
[0158] 28. RSC<sub>—</sub>3 input segment 4—byte 3 (bits(07:00)) input FIFO bus 4
[0159] 29. RSC<sub>—</sub>3 input segment 5—byte 3 (bits(07:00)) input FIFO bus 5
[0160] 30. RSC<sub>—</sub>3 input segment 6—byte 3 (bits(07:00)) input FIFO bus 6
[0161] 31. RSC<sub>—</sub>3 input segment 7—byte 3 (bits(07:00)) input FIFO bus 7
[0162] For the 8×8 FIFO crossbar configuration each input/output segment of the RSC <b>12</b> switches 1 byte of the 32 bit FIFO bus concurrent with the other RSC <b>12</b> slices.
[0163] Referring to FIG. 6, distribution of the Output Segment Arbitration Logic (OSA) <b>50</b><i>a</i>-<b>50</b><i>h </i>is shown. Each of the OSA logic elements <b>50</b> determine which virtual queue <b>42</b> to link to which of the output segment logic <b>44</b><i>a</i>-<b>44</b><i>h. </i>The input FBUS segments at a start of a new packet provides a start of packet “SOP” flag, the destination port of this new packet and a virtual queue number. At this starting point the destination port is known, so a physical mapping to the output segment logic is performed. This mapping is stored in an output port Map Queue <b>60</b>. Each physical port has an output port Map Queue <b>60</b><sub>0</sub>-<b>60</b><sub>127</sub>. These queues maintain pointers to the next virtual queue which has a packet for the port. Each Map Queue <b>60</b> maintains up to 8 entries (one for each input segment). The entry has the VIQ# of the next packet to be transmitted.
[0164] When the Output Segment Logic <b>44</b> completes the transmission of an packet to a particular port, the Output Segment Logic requests the Output Arbitration Logic <b>50</b> to supply the Output Segment Logic <b>44</b> with the NEXT_VQ number that is stored in that output ports' map queue<sub>60 NEXT</sub><sub><sub2>—</sub2></sub><sup>VQ</sup>. This NEXT_VQ number is an address that the Output Segment Logic <b>44</b> uses to control 8:1 multiplexers <b>62</b><i>a</i>-<b>62</b><i>h </i>that feed the Output Segment Logic's <b>44</b> 16 mpkt entry output queues. The VIQ number is a 7 bit value. The three most significant bits indicate which Input Segment and the least significant 4 bits indicate which VIQ within that input segment. Using these 7 bits the OSL can completely specify the next packet to be transmitted.
[0165] Disposed between the Input Segment Logic (ISL) <b>40</b> and the output port Map Queue <b>60</b> is a time division multiplex bus <b>70</b> used by the eight input segments to transmit destination information to the selected output segments. This multiplexing is straightforward since there are at a maximum <b>8</b> new packets to be sorted and 16 cycles to promote their VIQ# to their respective Map Queue. Therefore, by employing a very simple round robin technique the input segment Destination ports are sorted over the next 8 cycles. The Map Queues drain using a first in first out algorithm.
[0166] Other Embodiments
[0167] It is to be understood that while the invention has been described in conjunction with the detailed description thereof, the foregoing description is intended to illustrate and not limit the scope of the invention, which is defined by the scope of the appended claims. Other aspects, advantages, and modifications are within the scope of the following claims.
Contents4
8 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US7336669B1 | Cited by | United States of America | Applicant |
| US8068482B2 | Cited by | United States of America | Search report |
| US2015003447A1 | Cited by | United States of America | Pre-grant |
| US9098641B1 | Cited by | United States of America | Search report |
| US7320037B1 | Cited by | United States of America | Applicant |
| US2009319704A1 | Cited by | United States of America | Pre-grant |
| US7339943B1 | Cited by | United States of America | Applicant |
| US2007268825A1 | Cited by | United States of America | Pre-grant |
| US7606248B1 | Cited by | United States of America | Search report |
| US8868801B2 | Cited by | United States of America | Search report |
| US8566487B2 | Cited by | United States of America | Search report |
| US2010118880A1 | Cited by | United States of America | Pre-grant |
| US8873546B2 | Cited by | United States of America | Applicant |
| US9807034B2 | Cited by | United States of America | Search report |
| US7593334B1 | Cited by | United States of America | Applicant |
| US6002861A | Cites | United States of America | Pre-grant |
| US6201792B1 | Cites | United States of America | Pre-grant |
| US6687246B1 | Cites | United States of America | Pre-grant |
| US6868065B1 | Cites | United States of America | Pre-grant |
17 members in 10 offices
Priority claims6
| Document | Office | Kind | Date |
|---|---|---|---|
| 38704799 | United States of America | A | |
| 38704799 | United States of America | A | |
| 42310103 | United States of America | A | |
| 09387047 | – | – | – |
| US19990387047 | – | – | – |
| US20030423101 | – | – | – |
Members17
| Document | Office | Kind | |
|---|---|---|---|
| CA2383473A1 | Canada | A1 | |
| WO0117180A1 | World Intellectual Property Organization (WIPO) | A1 | |
| AU6774500A | Australia | A | |
| EP1212869A1 | European Patent Office (EPO) | A1 | |
| TW502518B | Taiwan Province of China | B | |
| HK1043454A1 | Hong Kong, China | A1 | |
| CN1382333A | China | A | |
| US2003193936A1 | United States of America | A1 | |
| US6687246B1 | United States of America | B1 | |
| US7023844B2 | United States of America | B2 | |
| EP1212869B1 | European Patent Office (EPO) | B1 | |
| AT353509T | Austria | T | |
| CN1303795C | China | C | |
| DE60033295D1 | Germany | D1 | |
| CA2383473C | Canada | C | |
| HK1043454B | Hong Kong, China | B | |
| DE60033295T2 | Germany | T2 |
36 transactions on the USPTO file
Allowed after 2 non-final rejections.
- Non-final rejections
- 2
- Final rejections
- 0
- RCEs
- 0
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Expire PatentEXP. | EXP. | |
| Maintenance Fee Reminder MailedREM. | REM. | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Correspondence Address ChangeC.AD | C.AD | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| terminal disclaimer fee paidTDP | TDP | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| IFW TSS Processing by Tech Center CompleteTSSCOMP | TSSCOMP | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Application Is Now CompleteCOMP | COMP | |
| Application Dispatched from OIPEOIPE | OIPE | |
| IFW Scan & PACR Auto Security ReviewSCAN | SCAN | |
| Reference capture on IDSRCAP | RCAP | |
| Preliminary AmendmentA.PE | A.PE | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Initial Exam Team nnIEXX | IEXX |
6 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Lapsed due to failure to pay maintenance feeLapsedFP | FP | |
| Lapse for failure to pay maintenance feesLapsedPATENT EXPIRED FOR FAILURE TO PAY MAINTENANCE FEES (ORIGINAL EVENT CODE: EXP.)LAPS | LAPS | |
| Information on status: patent discontinuationPATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362STCH | STCH | |
| Fee payment procedureMAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.)FEPP | FEPP | |
| Fee paymentFPAY | FPAY | |
| Fee paymentFPAY | FPAY |
Numbers
- Publication, DOCDB
- 2003193936
- Publication, EPODOC
- US2003193936
- Application
- 10423101
- Application, DOCDB
- 42310103
- Application, EPODOC
- US20030423101
Titles
- English
- Scalable switching fabric
Patent term adjustment
- A delay
- +278 daysthe office missed an examination deadline
- Net adjustment
- 278 days
Classification
- CPC, 6
- H04L49/10
- H04L49/112
- H04L49/101
- H04L49/254
- H04L49/3045
- H04L49/45
- IPC, 1
- H04L12 56
- USPC, 1
- 370360000