The invention relates generally to circuits and methods for manipulation of stored data, and more specifically to circuitry and corresponding methods for data assembly in a virtual concatenation process.
In general, networks and computers operate in different manners. Networks operate by transferring data in streams and/or packets. Streams may be bit-sized, byte-sized, or otherwise broken down. Packets may be of relatively large size, such as 64, 512, or more bytes each. Computers operate by processing data, typically in well-defined small sizes, such as bytes (8 bits), words (16 bits), double words (32 bits) and so on. At the interface between a computer and a network, a translation or reorganization of data may be necessary. This may include reorganizing data from a series of packets into a format useful to a processor.
Reorganization of data may be performed at a memory storage location level. In particular, bytes or words may arrive in parts due to compression and packetization of data and also due to the different paths taken by the data for transport over a network. The data as provided may be in an order which was useful for transmission purposes, but is not particularly useful for processing within a system, or for transmission over a different type of network. For example, the data may arrive as bytes which may be stored in memory, but the data may effectively arrive out of order relative to what a processor would expect in a system. In such an example, it may be necessary to re-align and reassemble the data in a form in which it existed prior to transmission.
Moreover, providing data to a processor of a host system in an easy to use manner may be desirable. Processors in host systems are typically used to perform most of the operations of the host system. To the extent that the processor needs to reorganize data for its use, this taxes limited processor resources, and potentially taxes other resources such as datapath-related or bandwidth-related resources in the system.
In one embodiment, the invention is an apparatus for assembling data for virtual concatenation. The apparatus includes an auxiliary memory having a set of storage locations for data. The apparatus also includes an external memory having a set of storage locations for data. The apparatus further includes a data assembler coupled to the auxiliary memory and the external memory. The data assembler is to read data of a virtual container from the external memory. The data assembler is also to store data of the virtual container in the auxiliary memory. The data assembler is further to determine if all data of the virtual container is present in the auxiliary memory. The data assembler is also to generate a set of addresses of the data of the virtual container in the auxiliary memory. The data assembler is further to read the data of the virtual container from the auxiliary memory. The data assembler is also to interleave the data of the virtual container.
In an alternate embodiment, the invention is a method of assembling data for virtual concatenation. The method includes generating addresses for an auxiliary memory corresponding to a set of unassembled data from a virtual container. The method also includes reading unassembled data of the auxiliary memory at the addresses generated. The method further includes interleaving unassembled data to form properly ordered data.
In another alternate embodiment, the invention is also an apparatus for assembling data for virtual concatenation. The apparatus includes a means for generating addresses for an auxiliary memory corresponding to a set of unassembled data from a virtual container. The apparatus also includes means for reading unassembled data of the auxiliary memory at the addresses generated. The apparatus further includes means for interleaving unassembled data to form properly ordered data.
The present invention is illustrated by way of example and not limitation in the accompanying figures.
A method and apparatus for assembly of virtually concatenated data is described. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the invention. It will be apparent, however, to one skilled in the art that the invention can be practiced without these specific details. In other instances, structures and devices are shown in block diagram form in order to avoid obscuring the invention.
Reference in the specification to “one embodiment” or “an embodiment” means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment of the invention. The appearances of the phrase “in one embodiment” in various places in the specification are not necessarily all referring to the same embodiment, nor are separate or alternative embodiments mutually exclusive of other embodiments.
Various descriptions of this document relate to devices or components being coupled together. Coupling typically denotes a relationship allowing for communication or connection between a first and second object. The first object may be directly connected to the second object. Alternatively, the first object may be directly connected to a third object which may also be directly connected to the second object, thereby achieving a coupling between the first object and the second object. As will be appreciated, the number of intermediate objects between two objects which are coupled together does not determine whether the objects are coupled, the presence of a link between the two objects indicates that the two objects are coupled together.
In general, the apparatus, method, or system of the invention may be expected to receive data in a first form, read, sort and reorganize that data into a second form, and provide that data in the second form for reading in a first-in-first-out manner based on the second form. Essentially, the data will appear to a subsystem requesting the data from the data assembler as though it arrived in the desired second form, rather than the undesired first form. The data in the first form typically includes information relating to ordering of that data, although that information may be available separately, rather than with the data.
In one embodiment, the invention is an apparatus for assembling data for virtual concatenation. The apparatus includes an auxiliary memory having a set of storage locations for data. The apparatus also includes an external memory having a set of storage locations for data. The apparatus further includes a data assembler coupled to the auxiliary memory and the external memory. The data assembler is to read data of a virtual container from the external memory. The data assembler is also to store data of the virtual container in the auxiliary memory. The data assembler is further to determine if all data of the virtual container is present in the auxiliary memory. The data assembler is also to generate a set of addresses of the data of the virtual container in the auxiliary memory. The data assembler is further to read the data of the virtual container from the auxiliary memory. The data assembler is also to interleave the data of the virtual container.
In an alternate embodiment, the invention is a method of assembling data for virtual concatenation. The method includes generating addresses for an auxiliary memory corresponding to a set of unassembled data from a virtual container. The method also includes reading unassembled data of the auxiliary memory at the addresses generated. The method further includes interleaving unassembled data to form properly ordered data.
In another alternate embodiment, the invention is also an apparatus for assembling data for virtual concatenation. The apparatus includes a means for generating addresses for an auxiliary memory corresponding to a set of unassembled data from a virtual container. The apparatus also includes means for reading unassembled data of the auxiliary memory at the addresses generated. The apparatus further includes means for interleaving unassembled data to form properly ordered data.
Data assembly subsystem 210 receives data 215 from an external memory source, along with an associated virtual container number 220 and a sequence number 225. In one embodiment, each of data 215 is stored in a first memory bank of ping pong memory 230 in the location specified by the virtual container number. In one embodiment, this is repeated until the memory bank of the ping pong memory 230 is full, and then the data 215 is stored in a second memory bank of the ping pong memory corresponding to the received virtual container number 220
The ping pong memory (such as ping pong memory 230) is formed of two banks of memory. Both memory banks are essentially identical. Each bank of memory has sub banks and each of the virtual containers is allocated one sub bank in both banks of the ping pong memory.
When the first memory bank (or potentially any memory bank) of ping pong memory 230 is full, a memory full signal 245 is provided to data assembler 255. Data assembler 255 may then be expected to operate on the first memory bank of ping pong memory 230. Data assembler 255 may be expected to calculate or otherwise generate addresses to be used in reading data from ping pong memory 230. The address generation portion of data assembler 255 takes care of reading the data from the ping pong memory 230 such that the ping pong memory 230 outputs sorted data. Data assembler 255 thus may be expected to use these addresses, provided singly as address 250, along with a read request signal 240, to read VC (virtual-container) data 235 from ping pong memory 230. This may be repeated as necessary to read the contents from the first memory bank of ping pong memory 230 until it is empty. The data 235 is then read from the second memory bank in the same way as in the case of the first memory bank. The read from the ping pong memory 230 is alternated between the first memory bank and the second memory bank. The switch from the first memory bank to the second memory bank takes place when the first memory bank is empty and vice versa. The contents of the memory banks of ping pong memory 230 may be expected to include the data received from the external memory 215.
The data from ping pong memory 230 may then be interleaved into a proper byte order. Other methods of associating data with virtual-containers and sequence numbers may also be utilized.
With the data assembled, it may then be transferred to FIFO 275, such that an associated subsystem may read the data from FIFO 275. In one embodiment, when the data is assembled, a data write control signal 265 is sent to FIFO 275, to cause FIFO 275 to prepare to accept the data. The FIFO 275 then sends back data request signal 270 to data assembler 255, which responds by sending out some portion (or all) of the assembled data to the FIFO 275 as data 260. When the FIFO 275 has a predetermined amount of data available, it sends out data available signal 280 to an external subsystem, which controls reading through data read control signal 290 and receives the data from the FIFO 275 as data out 285.
In one embodiment, write operations from an external memory to a ping pong memory are implemented as described here. The external memory is used to re-align data that gets skewed due to the propagation delay through the network. After differential delay correction, data is read out of the external memory for each of the virtual containers. All virtual containers are identified by their respective VC numbers. The data read out of the external memory is stored in one of the banks of the ping pong memory (depending on which bank is empty). For example, while external memory output is being written into the first bank of the ping pong memory the data assembler will be processing data that is present in the second bank of the ping pong memory and vice versa.
Similarly, in one embodiment, read operations from the ping pong memory to the FIFO are implemented as described herein. A sequence look up table within the data assembler block stores the virtual container numbers in the sorted order. The data assembler reads data from the ping pong memory. The selection of the banks in the ping-pong memory is alternated. The data assembler reads from the first bank until it becomes empty and then switches to the second bank and vice versa. The address generation block generates the address of the data to be read from the ping pong memory. This address is the sorted address stored in the sequence map and hence ping pong memory data output is sorted data. The data assembler assembles the data received for each of the virtual containers from the ping pong memory in a byte-interleaved manner in to a contiguous channel. Data words as thus obtained after assembling are written into a FIFO. The data in the FIFO is then output to the outside world when requested.
At block 310, a determination is made as to whether external data is available. If not, the process continues until it is determined external data is available. At block 320, the external data is read from external memory, or otherwise received. At block 330, the external data is stored in the selected bank of the ping pong memory. At block 340, a determination is made as to whether data for all virtual containers is available in the ping-pong memory. If not, the process continues to wait for more external data at block 310.
If data for all virtual-containers is available, the process proceeds to block 350, and addresses for the data of the selected bank of the ping pong memory are generated. At block 360, the data of the ping pong memory is read and sorted, based on control information associated with the sequence map. At block 370, the sorted data received from the ping pong memory is then interleaved, and the data is then written to a FIFO or other memory for access by another subsystem or component. At block 380, a determination is made as to whether the first and the second memory bank of the ping pong memory is empty. If not, the process returns to block 350. If both the memory banks of the ping pong memory is empty, the process returns to block 310, and awaits data from the external source.
Coupled to control block 420 and internal buffer 440 is data sorter 450, which may be used to sort virtual container numbers within the internal buffer 440 based on a sequence number related to the virtual container. Also coupled to control block 420 and internal buffer 440 is address generator block 430. The address generation block reads from the internal buffer 440 to get the virtual container numbers in the sorted order and generates addresses to read from the ping pong memory. Byte interleave module 460 interleaves bytes output from the ping pong memory, and then writes the data out through FIFO interface 470. FIFO interface 470 is coupled to both control block 420 and byte interleave module 460, and is suitable for connection or coupling to an external FIFO memory, for the purpose of providing data to the external FIFO memory.
In the foregoing detailed description, the method and apparatus of the present invention has been described with reference to specific exemplary embodiments thereof. It will, however, be evident that various modifications and changes may be made thereto without departing from the broader spirit and scope of the present invention. In particular, the separate blocks of the various block diagrams represent functional blocks of methods or apparatuses and are not necessarily indicative of physical or logical separations or of an order of operation inherent in the spirit and scope of the present invention. For example, the various blocks of
Number | Name | Date | Kind |
---|---|---|---|
4433378 | Leger | Feb 1984 | A |
4841526 | Wilson et al. | Jun 1989 | A |
4920483 | Pogue et al. | Apr 1990 | A |
4965794 | Smith | Oct 1990 | A |
5079693 | Miller | Jan 1992 | A |
5182651 | Kishi | Jan 1993 | A |
5291586 | Jen et al. | Mar 1994 | A |
5319648 | Bux et al. | Jun 1994 | A |
5386412 | Park et al. | Jan 1995 | A |
5471628 | Phillips et al. | Nov 1995 | A |
5825770 | Coady et al. | Oct 1998 | A |
5844923 | Condon | Dec 1998 | A |
5920572 | Washington et al. | Jul 1999 | A |
5930830 | Mendelson et al. | Jul 1999 | A |
5964835 | Fowler et al. | Oct 1999 | A |
6144574 | Kobayashi et al. | Nov 2000 | A |
6347097 | Deng | Feb 2002 | B1 |
6359911 | Movshovich et al. | Mar 2002 | B1 |
6442669 | Wright et al. | Aug 2002 | B2 |
6584584 | Smith | Jun 2003 | B1 |
6640297 | Banning et al. | Oct 2003 | B1 |
6654383 | Haymes et al. | Nov 2003 | B2 |
6714543 | Brueckheimer et al. | Mar 2004 | B1 |
6741594 | Tzeng et al. | May 2004 | B1 |
6763390 | Kovacevic et al. | Jul 2004 | B1 |
6957309 | Gupta et al. | Oct 2005 | B1 |
6961348 | Yu | Nov 2005 | B2 |
7035335 | Iacobelli et al. | Apr 2006 | B1 |
7061930 | Mizobata | Jun 2006 | B2 |
7069407 | Vasudevan et al. | Jun 2006 | B1 |
7073019 | Banerjee et al. | Jul 2006 | B2 |
7088732 | Min | Aug 2006 | B2 |
7324562 | Shankar et al. | Jan 2008 | B1 |
7400620 | Verma | Jul 2008 | B1 |
7420975 | Vasudevan | Sep 2008 | B1 |
20010008564 | Hirao et al. | Jul 2001 | A1 |
20010049726 | Comeau et al. | Dec 2001 | A1 |
20020009100 | Raghavan et al. | Jan 2002 | A1 |
20030120664 | Davidson et al. | Jun 2003 | A1 |
20030169735 | Johnson et al. | Sep 2003 | A1 |
20040064589 | Boucher et al. | Apr 2004 | A1 |
20040117584 | Banerjee et al. | Jun 2004 | A1 |
20040196847 | Kuwabara | Oct 2004 | A1 |