1. Field of the Invention
The present invention relates generally to superscalar computers, and more particularly, a system and method for using tags to control instruction execution in a superscalar reduced instruction set computer (RISC).
2. Related Art
Processors used in conventional computer systems typically execute program instructions one at a time, in sequential order. The process of executing a single instruction involves several sequential steps. The first step generally involves fetching the instruction from a memory device. The second step generally involves decoding the instruction, and assembling any operands.
The third step generally involves executing the instruction, and storing the results. Some processors are designed to perform each step in a single cycle of the processor clock. Alternatively, the processor may be designed so that the number of processor clock cycles per step depends on the particular instruction.
To improve performance, modern computers commonly use a technique known as pipelining. Pipelining involves the overlapping of the sequential steps of the execution process. For example, while the processor is performing the execution step for one instruction, it might simultaneously perform the decode step for a second instruction, and perform a fetch of a third instruction. Pipelining can thus decrease the execution time for a sequence of instructions.
Another class of processors improve performance by overlapping the sub-steps of the three sequential steps discussed above are called superpipelined processors.
Still another technique for improving performance involves executing multiple instructions simultaneously. Processors which utilize this technique are generally referred to as superscalar processors. The ability of a superscalar processor to execute two or more instructions simultaneously depends on the particular instructions being executed. For example, two instructions which both require use of the same, limited processor resource (such as the floating point unit) cannot be executed simultaneously. This type of conflict is known as a resource dependency. Additionally, an instruction which uses the result produced by the execution of another instruction cannot be executed at the same time as the other instruction. An instruction which depends on the result of another instruction is said to have a data dependency on the other instruction. Similarly, an instruction set may specify that particular types of instructions must execute in a certain order relative to each other. These instructions are said to have procedural dependencies.
A third technique for improving performance involves executing instructions out of program order. Processors which utilize this technique are generally referred to as out-of-order processors. Usually, out-of-order processors are also superscalar processors. Data dependencies and procedural dependencies limit out-of-order execution in the same way that they limit superscalar execution.
From here on, the term “superscalar processor” will be used to refer to a processor that is: capable of executing multiple instructions simultaneously, or capable of executing instructions out of program order, or capable of doing both.
For executing instructions either simultaneously or out of order, a superscalar processor must contain a system called an Execution unit. The Execution Unit contains multiple functional units for executing instructions (e.g., floating point multiplier, adder, etc.). Scheduling control is needed to dispatch instructions to the multiple functional units. With in-order issue, the processor stops decoding instructions whenever a decoded instruction creates a resource conflict or has a true dependency or an output dependency on a uncompleted instruction. As a result, the processor is not able to look ahead beyond the instructions with the conflict or dependency, even though one or more subsequent instructions might be executable. To overcome this limitation, processors isolate the decoder from the execution stage, so that it continues to decode instructions regardless of whether they can be executed immediately. This isolation is accomplished by a buffer between the decode and execute stages, called an instruction window.
To take advantage of lookahead, the processor decodes instructions and places them into the window as long as there is room in the window and, at the same time, examines instructions in the window to find instructions that can be executed (that is, instructions that do not have resource conflicts or dependencies). The instruction window serves as a pool of instructions, giving the processor lookahead ability that is constrained only by the size of the window and the capability of the instruction source. Thus, out-of-order issue requires a buffer, called an instruction window between the decoder and functional units; and the instruction window provides a snap-shot of a piece of the program that the computer is executing.
After the instructions have finished executing, instructions must be removed from the window so that new instructions can take their place. Current designs employ an instruction window that utilizes a First In First Out queue (FIFO). In certain designs, the new instructions enter the window and completed instructions leave the window in fixed size groups. For example, an instruction window might contain eight instructions (I0-I7) and instructions may be changed in groups of four. In this case, after instructions I0, I1, I2 and I3 have executed, they are removed from the window at the same time four new instructions are advanced into the window. Instruction windows where instructions enter and leave in fixed size groups are called “Fixed Advance Instruction Windows.”
In other types of designs, the new instructions enter the window and completed instructions leave the window in groups of various sizes. For example, an instruction window might contain eight instructions (I0-I7) and may be changed in groups of one, two or three. In this case, after any of instructions I0, I1 or I2 have executed, they can be removed from the window and new instructions can be advanced into the window. Instruction windows where instructions enter and leave in groups of various sizes are called “Variable Advance Instruction Windows.”
Processors that use Variable Advance Instruction Windows (VAIW) tend to have higher performance than processors that have Fixed Advance Instruction Windows (FAIW). However, fixed advance instruction windows are easier for a processor to manage since a particular instruction can only occupy a fixed number of locations in the window. For example, in an instruction window that contains eight instructions (I0-I7) and where instructions can be added or removed in groups of four, an instruction can occupy only one of two locations in the window (e.g., I0 and I4). In a variable advance instruction windows, that instruction could occupy all of the locations in the window at different times, thus a processor that has a variable advance instruction window must have more resources to track each instruction's position than a processor that has a fixed advance instruction window.
Current designs use large queues to implement the instruction window. The idea of using queues is disadvantageous, for many reasons including: a large amount of chip area resources are dedicated to a plurality of queues especially when implementing a variable advance instruction window; there is limited flexibility in designing a system with more than one queue; and control logic for directing data in queues is complex and inflexible.
Therefore, what is needed is a technique to “track” or monitor instructions as they move through the window. The system must be flexible and require a small area on a chip.
The present invention is directed to a technique for monitoring instruction execution of multiple instructions in parallel and out of program order using a system that assigns tags to the multiple instructions and maintains an instruction window that contains the multiple instructions. The system is a component of a superscalar unit which is coupled between a source of instructions and functional units which execute the instructions. The superscalar unit is in charge of maintaining the instruction window, directing instructions to the various functional units in the execution unit, and, after the instructions are executed, receiving new instructions from the source.
The present invention employs a tag monitor system, which is a part of the superscalar unit. The tag monitor system includes: a register file and a queue that operates on a First-In-First-Out basis (the queue is a multiple-advance, multiple output, recycling FIFO). The queue is coupled to the register file. The register file is coupled to the instruction source and is used to store instruction information (i.e., the resource requirements of each instruction). When an instruction is sent from the instruction source to the register file it is assigned a tag that is not currently assigned to any other instruction. The instruction information is then stored in the register file at an address location indicated by the tag of the instruction. Once an instruction's information is stored in the register file, it is said to be “in the instruction window.” The tags of each instruction in the instruction window are stored in the queue. The tags are arranged in the queue in the same order as their corresponding instructions are arranged in the program.
When an instruction is finished, the queue advances and the tag of the instruction is effectively pushed out the bottom of the queue. The tag can then be reassigned to a new instruction that enters the instruction window. Accordingly, the tag is sent back to the top of the queue (in other words, it is recycled). It is also possible for several tags to be recycled at the same time when several instructions finish at the same time. In a preferred embodiment, instructions are required to finish in order. This is often necessary to prevent an instruction from incorrectly overwriting the result of another instruction. For example, if a program contains two instructions that write to the same location of memory, then the instruction that comes first in the program should write to the memory before the second. Thus, the results of instructions that are executed out of order must be held in some temporary storage area and the instructions themselves must remain in the instruction window until all previous instruction have been executed. When a group of instructions is completed, all of their results are moved from the temporary storage area to their real destinations. Then the instructions are removed from the window and their tags are recycled.
The register file has write ports where new instruction information is received from the instruction source. The register file has a number of write ports equal to the number of new instructions that can be added to the window at one time. The register file has one entry for each instruction in the window. The register file also has one output port for every instruction in the window. Associated with each output port is an address port. The address port is used to select which register file entry's contents will be output on its corresponding output port.
The queue has an output for each slot (e.g., specific buffer location in the queue) that shows the value of the tag stored in that slot. These outputs are connected to the read address ports of the register file. This connection causes the register file to provide an entry's contents on its corresponding output port when a tag value is presented by the queue to the read address ports. The outputs of the register file are sent to various locations in the superscalar unit and execution units where the instruction information is used for instruction scheduling, instruction execution, and the like.
It is possible that some of the locations in the instruction window may be empty at any given time. These empty window locations are called “bubbles.” Bubbles sometimes occur when an instruction leaves the window and the instruction source cannot immediately send another instruction to replace it. If there are bubbles in the window, then some of the entries in the register file will contain old or bogus instruction information. Since all of the data in the register file is always available, there needs to be some way to qualify the data in the register file.
According to the present invention, a “validity bit” is associated with each entry in the instruction window to indicate if the corresponding instruction information in the register file is valid. These validity bits can be held in the tag FIFO with the tags. There is one validity bit for each tag in the FIFO. These bits are updated each time a tag is recycled. If, when a tag is recycled, it gets assigned to a valid instruction, then the bit is asserted. Otherwise it is deasserted.
The validity bits are output from the tag monitor system along with the outputs of the register file. They are sent to the same locations as the outputs of the register file so that the superscalar unit or execution units will know if they can use the instruction information.
A feature of the present invention is that an instruction window can be maintained without storing instruction information in large queues. This simplifies design and increases operational flexibility. For example, for a window containing n instructions, the tag monitor system would contain a queue with n entries and a register file with n entries and n output ports. If each output of the queue is connected to its corresponding read address port on the register file (e.g., output 0 connected to read address port 0, output 1 connected to read address port 1, etc.) then the register file outputs will “display” (i.e., make available at the output ports) the information for each instruction in the window in program order (e.g., output port 0 will show instruction 0's information, output port 1 will show instruction 1's information, etc.). When the window advances, the queue advances and the addresses on the read address ports change. This causes the outputs of the register file to change to reflect the new arrangement of instructions in the window. It is necessary for the instruction information to be displayed in order on the register file outputs so that it can be sent to the rest of the superscalar unit in order. The superscalar unit needs to know the order of the instructions in the window so that it can schedule their execution and their completion.
Further features and advantages of the present invention, as well as the structure and operation of various embodiments of the present invention, are described in detail below with reference to the accompanying drawings.
1.0 System Environment
Instruction source 102 sends instruction information to superscalar unit 104 via a bus 103. The superscalar unit 104 then issues the instructions to functional unit 106. Generally, superscalar unit 104 monitors functional unit 106 availability and checks for dependencies between instructions. Once the instructions are completed, instruction source 102 sends more instruction information to superscalar unit 104.
The buses shown in
2.0 Structure and Operation of the Tag Monitor System
A. Structure
Tag FIFO 204 is a multiple advance, multiple output, recycling FIFO that stores tags in a plurality of slots 206. The term “multiple advance” means that the FIFO can be advanced any number of slots at a time. For example, a multiple advance 4-slot FIFO can be advanced 0-3 slots at a time. The term “multiple output” means that the contents of each slot of the FIFO are available. A tag is a unique label that superscalar unit 104 assigns to each instruction as it enters the instruction window. Tag FIFO 204 has one slot 206 for each instruction in the window. Each slot 206 has an output 232 that indicates (i.e., outputs) the value of the tag in the corresponding slot 206. Each slot 206 also has a validity bit that indicates whether the instruction assigned to the tag in the slot 206 is valid. In a preferred embodiment, tag FIFO 204 contains eight slots 206. Each of these slots 206 contains a unique binary number (tag) ranging from 0 to 7. For example a tag is three bits (e.g., 000, 001, 010, etc.) which, with the validity bit, causes each slot to hold four bits. Thus each output 232 is four bits wide. Each slot 206 of tag FIFO 204 is loaded with a unique tag when the chip is powered-on or reset.
Once a tag is assigned to an instruction, it will remain with that instruction until the instruction is removed from the window. Once an instruction is removed from the window, its tag is sent back to the top 212 of tag FIFO 204. The tag sent to top 212 can be reassigned to a new instruction that enters the window. In this fashion, tags are “recycled” or are recirculated in tag FIFO 204. Generally, tags advance through the tag FIFO 204 from top 212 to bottom 210. Thus, FIFO 204 is called a recycling queue.
Register file 202 is coupled to tag FIFO 204 and instruction source 102. Register file 202 stores instruction information sent by instruction source 102. The following are examples of the type of information that can be sent from instruction source 102 to register file 202: decoded instruction information; instruction functional unit requirements; the type of operation to be performed by the instruction; information specifying a storage location where instruction results are to be stored; information specifying a storage location where instruction operands are stored; information specifying a target address of a control flow instruction; and information specifying immediate data to be used in an operation specified by the instruction.
Register file 202 includes: a write data port 214, a write address port 216, a write enable port 218, a read address port 220, and a read data port 224.
Write data port 214 receives instruction information from instruction source 102 via bus 103. Write address ports 216 specify what addressable location in register file 202 the instruction information that is received through write data ports 214 is to be stored. Write address ports 216 are coupled to control logic 207 via a bus 226. Write enable ports 218 indicate when to write data from instruction source 102 into register file 202. Write enable ports are coupled to control logic 207 via bus 228. In a preferred embodiment (shown in
Read address port 220 is coupled to tag FIFO 204 via bus 230. Bus 230 carries outputs 232 of each slot 206 of tag FIFO 204. Read address ports 220 select the instruction information that will be accessed through read data ports 224. Each read address port 220 has a corresponding read data port 224. In a preferred embodiment (shown in
Typically, register file 202 is connected to other elements (e.g. an issuer not shown) located within superscalar environment 101.
Control logic 207 is comprised of logic circuits. Control logic 207 monitors functional unit 106 via a bus 234 and bus 230 from tag FIFO 204. Control logic 207 signals instruction source 102 via bus 238 to send new instruction information to register file 202 as instructions leave the window. Control logic 207 indicates how many new instructions that instruction source 102 should send. In a preferred embodiment (shown in
Note that the bit width of the various buses disclosed herein may support parallel or serial address or data transfer, the selection of which is implementation specific, as would be apparent to a person skilled in the relevant art.
It is also possible for the tag monitor system to contain more than one register file. In a preferred embodiment, the instruction information is distributed among many register files. For example, one register file contains the destination register addresses of each instruction. Another contains the functional unit requirements of each instruction and so on. One advantage to using multiple register files is that it allows the designer to use smaller register files which can be located near where their contents are used. This can make the physical design of the processor easier. The register files' read and write addresses are all connected together and come from the same source. The write data of the register files still comes from the instruction source. However, not all of the register files have to hold all of the information for each instruction. The outputs of each register file only go to where the data held in that register file is needed.
The tag FIFO 204 will now be described with the reference to example embodiments.
FIFO 500 behaves like a queue with four positions. When FIFO 500 advances, any data in slot 516 leaves FIFO 500 through output 518. Data in slot 512 moves to slot 516 via bus 514. Data in slot 508 moves to slot 512 via bus 510. Data in slot 504 moves to slot 508 via bus 506, and data on the input 502 moves into slot 504. Each of these data transfers happens whenever FIFO 500 advances.
In a preferred embodiment, data stored in slots 604, 610, 616 and 622 is continuously visible on each slot's output bus (i.e., on buses 608, 614, 620 and 626). In this situation, buses 606, 612, 618 or 624 are unnecessary. An example of this embodiment is shown in
Sometimes it is necessary to advance a FIFO by more than one step at a time. Since the FIFO inputs one piece of data each time the FIFO advances on step, the FIFO must also have as many inputs as the maximum number of steps that the FIFO can advance. The FIFO must have some means besides buses to carry the data from each slot or input to the correct destination.
In order to advance more than one step at a time, the inputs must be switchably connected to each slot and the outputs of some slots must go to more than one other slot. Therefore, FIFO 900 has four multiplexers: MUX1, MUX2, MUX3 and MUX4, shown at 910, 918, 926 and 934, respectively. These multiplexers are used to select the data that goes into each slot when FIFO 900 advances. Inputs to each multiplexer are the data that might need to go to its corresponding slot. For example, depending on the number of steps that FIFO 900 advances, the data from slot 914, slot 922, slot 930 or input 902 might go to slot 938. Thus the inputs to 934 are the outputs from slot 916, slot 924, slot 932 and input 902. The structure and operation of the logic circuits necessary to control the multiplexers 910, 918, 926 and 934 would be apparent to a person skilled in the relevant art.
It is also possible to design a multiple advance FIFO that recycles its contents. This FIFO is a combination of the FIFOs shown in
The FIFOs shown in
B. Operation
Operation starts at a step 301. In a step 302, control logic 207 sends a request data signal 238 requesting instruction source 102 to send instruction information. Control logic 207 requests information for a number of instructions equal to the number of empty spaces in the instruction window. In a preferred embodiment, in effect, control logic 207 determines how many new instructions can be added to the instruction window, and then requests sufficient instruction information from instruction source 102 to refill the empty top slots of the queue. There is a maximum number of instructions whose information can be sent that is less than the number of spaces in the window.
In a step 304, actuate write enable and write address, assign tag and update validity bits. Control logic 207 sends an enable signal on bus 226 and an address signal on bus 228 to write enable port 218 and write address port 216, respectively. The addresses on each port 216 specify where the instruction information on the corresponding data port 214 should be stored in register file 202 during a step 306. Instruction information is sent from instruction source 102 to register file 202 via bus 103. Typically, the total number of enable bits on bus 226 equals the maximum number of instructions whose information can be sent at one time, which in the preferred embodiment is four.
The address where each instruction's information is stored in register file 202 is specified by the tag of that instruction. Since the data on write data ports 214 does not always need to be stored in register file 202, control logic 207 uses enable signals on bus 228 to select only the data that needs to be written. For example, if there is only one empty space at the top of the instruction window, then control logic 207 will send the tag contained in top slot 212 of the queue on bus 228 to write address port 216A and assert write enable port 218A via bus 226. This operation causes only the instruction information on write data port 214A to be stored in register file 202 in a location specified by the tag in top slot 212 of tag FIFO 204. If there are two empty spaces in the instruction window, then control logic 207 will send two enables to ports 218A and 218B and the two tags at the top of the window will be sent to write address ports 216A and 216B (the tag in top slot 212 going to 216B), thus causing the instruction information on ports 214A and 214B to be stored in register file 202. When an instruction's information is stored in a location in register file 202 specified by a tag, the instruction is said to have been “assigned” that tag. Control logic 207 also updates the validity bits in tag FIFO 204 during step 304. If instruction source 102 cannot supply an instruction for every request made in step 302, control logic 207 will only assert the validity bits of the tags that were assigned to valid instructions in step 304. For those tags that do not get assigned, their validity bits will remain unasserted until they are assigned to a valid instruction.
In a step 308, all of the contents of register file 202 are read through read data ports 224. It is contemplated to use less than all the contents of register file 202. The data that is to be read from register file 202 is specified by the addresses presented to register file 202 through read address ports 220. The data is then used in the execution of some or all of the instructions in the window. In a preferred embodiment, read address 220 is always asserted. In other words, there is always a tag in each slot 206.
In a decisional step 310, control logic 207 determines if any of the instructions executed in step 308 are ready to retire. If no instruction retires, data will continue to be read out of register file 202 and the instructions in the window will continue to be executed, as indicated by the “NO” path 311 of decisional step 310. If an instruction does retire, control logic 207 will receive information indicating the number of instructions that are retiring via bus 234 as shown in a step 312. The information received on bus 234 comes from a retirement unit (not shown). The details of the retirement unit are not relevant to carry out the present invention. (An example, however, of an instruction retirement unit is disclosed in U.S. Pat. No. 5,826,055). Control logic 207 then indicates, via bus 236, how many steps tag FIFO 204 should advance.
Referring to
While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example, and not limitation. Thus the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.
This application is a continuation of U.S. patent application Ser. No. 11/338,817, filed Jan. 25, 2006, now U.S. Pat. No. 7,430,651, which is a continuation of U.S. patent application Ser. No. 10/847,460, filed May 18, 2004, now U.S. Pat. No. 7,043,624, which is a continuation of U.S. patent application Ser. No. 10/034,252, filed Jan. 3, 2002, now U.S. Pat. No. 6,757,808, which is a continuation of U.S. patent application Ser. No. 09/574,251, filed May 19, 2000, now U.S. Pat. No. 6,360,309, which is a continuation of U.S. patent application Ser. No. 09/252,655, filed Feb. 19, 1999, now U.S. Pat. No. 6,092,176, which is a continuation of U.S. patent application Ser. No. 08/811,237, filed Mar. 3, 1997, now U.S. Pat. No. 5,896,542, which is a continuation of U.S. patent application Ser. No. 08/224,328, filed Apr. 4, 1994, now U.S. Pat. No. 5,628,021, which is a continuation-in-part of U.S. patent application Ser. No. 07/999,648 filed Dec. 31, 1992, now U.S. Pat. No. 5,604,912. The entirety of each of the foregoing applications is incorporated by reference herein. This application is related to U.S. patent application Ser. No. 08/799,462, filed Feb. 13, 1997, now U.S. Pat. No. 5,892,963, the entirety of which is incorporated by reference herein.
Number | Name | Date | Kind |
---|---|---|---|
3346851 | Thornton et al. | Oct 1967 | A |
3718912 | Hasbrouck et al. | Feb 1973 | A |
3771138 | Celtruda et al. | Nov 1973 | A |
3789365 | Jen et al. | Jan 1974 | A |
3913074 | Homberg et al. | Oct 1975 | A |
4034349 | Monaco et al. | Jul 1977 | A |
4128880 | Cray, Jr. | Dec 1978 | A |
4200927 | Hughes et al. | Apr 1980 | A |
4212076 | Conners | Jul 1980 | A |
4228495 | Bernhard et al. | Oct 1980 | A |
4296470 | Fairchild et al. | Oct 1981 | A |
4315308 | Jackson | Feb 1982 | A |
4315314 | Russo | Feb 1982 | A |
4410939 | Kawakami | Oct 1983 | A |
4434461 | Puhl | Feb 1984 | A |
4459657 | Murao | Jul 1984 | A |
4476525 | Ishii | Oct 1984 | A |
4482950 | Dshkhunian et al. | Nov 1984 | A |
4498134 | Hansen et al. | Feb 1985 | A |
4500963 | Smith et al. | Feb 1985 | A |
4532598 | Shibayama et al. | Jul 1985 | A |
4561051 | Rodman et al. | Dec 1985 | A |
4574349 | Rechtschaffen | Mar 1986 | A |
4594655 | Hao et al. | Jun 1986 | A |
4597054 | Lockwood et al. | Jun 1986 | A |
4613941 | Smith et al. | Sep 1986 | A |
4626989 | Torii | Dec 1986 | A |
4644466 | Saito | Feb 1987 | A |
4648045 | Demetrescu | Mar 1987 | A |
4675806 | Uchida | Jun 1987 | A |
4714994 | Oklobdzija et al. | Dec 1987 | A |
4719569 | Ludemann et al. | Jan 1988 | A |
4722049 | Lahti | Jan 1988 | A |
4752873 | Shonai et al. | Jun 1988 | A |
4758948 | May et al. | Jul 1988 | A |
4766566 | Chuang | Aug 1988 | A |
4775927 | Hester et al. | Oct 1988 | A |
4791607 | Igarashi et al. | Dec 1988 | A |
4807115 | Torng | Feb 1989 | A |
4811208 | Myers et al. | Mar 1989 | A |
4814978 | Dennis | Mar 1989 | A |
4823201 | Simon et al. | Apr 1989 | A |
4829467 | Ogata | May 1989 | A |
4833599 | Colwell et al. | May 1989 | A |
4841453 | Finlay et al. | Jun 1989 | A |
4858105 | Kuriyama et al. | Aug 1989 | A |
4858116 | Gillett, Jr. et al. | Aug 1989 | A |
4881167 | Sasaki et al. | Nov 1989 | A |
4897810 | Nix | Jan 1990 | A |
4901228 | Kodama | Feb 1990 | A |
4901233 | Liptay | Feb 1990 | A |
4903196 | Pomerene et al. | Feb 1990 | A |
4916604 | Yamamoto et al. | Apr 1990 | A |
4924376 | Ooi | May 1990 | A |
4926323 | Baror et al. | May 1990 | A |
4928226 | Kamada et al. | May 1990 | A |
4942525 | Shintani et al. | Jul 1990 | A |
4945479 | Rusterholz et al. | Jul 1990 | A |
4964057 | Yabe | Oct 1990 | A |
4974154 | Matsuo | Nov 1990 | A |
4974155 | Dulong et al. | Nov 1990 | A |
4980817 | Fossum et al. | Dec 1990 | A |
4985825 | Webb, Jr. et al. | Jan 1991 | A |
4991078 | Wilhelm et al. | Feb 1991 | A |
4991081 | Bosshart | Feb 1991 | A |
4992938 | Cocke et al. | Feb 1991 | A |
5003462 | Blaner et al. | Mar 1991 | A |
5032985 | Curran | Jul 1991 | A |
5051925 | Kadono et al. | Sep 1991 | A |
5067069 | Fite et al. | Nov 1991 | A |
5072364 | Jardine et al. | Dec 1991 | A |
5089951 | Iijima | Feb 1992 | A |
5093783 | Kitada | Mar 1992 | A |
5097409 | Schwartz et al. | Mar 1992 | A |
5101341 | Circello et al. | Mar 1992 | A |
5109495 | Fite et al. | Apr 1992 | A |
5119485 | Ledbetter, Jr. et al. | Jun 1992 | A |
5120083 | Stine | Jun 1992 | A |
5125083 | Fite et al. | Jun 1992 | A |
5125092 | Prener | Jun 1992 | A |
5129067 | Johnson | Jul 1992 | A |
5133074 | Chou | Jul 1992 | A |
5133077 | Karne et al. | Jul 1992 | A |
5134561 | Liptay | Jul 1992 | A |
5136697 | Johnson | Aug 1992 | A |
5140682 | Okura et al. | Aug 1992 | A |
5142633 | Murray et al. | Aug 1992 | A |
5142634 | Fite et al. | Aug 1992 | A |
5148533 | Joyce et al. | Sep 1992 | A |
5148536 | Witek et al. | Sep 1992 | A |
5150309 | Shaw et al. | Sep 1992 | A |
5155843 | Stamm et al. | Oct 1992 | A |
5167026 | Murray et al. | Nov 1992 | A |
5167035 | Mann et al. | Nov 1992 | A |
5179530 | Genusov et al. | Jan 1993 | A |
5179673 | Steely, Jr. et al. | Jan 1993 | A |
5179689 | Leach et al. | Jan 1993 | A |
5185872 | Arnold et al. | Feb 1993 | A |
5185878 | Baror et al. | Feb 1993 | A |
5187796 | Wang et al. | Feb 1993 | A |
5193157 | Barbour et al. | Mar 1993 | A |
5197132 | Steely, Jr. et al. | Mar 1993 | A |
5197136 | Kimura et al. | Mar 1993 | A |
5201056 | Daniel et al. | Apr 1993 | A |
5214763 | Blaner et al. | May 1993 | A |
5214786 | Watanabe et al. | May 1993 | A |
5222223 | Webb, Jr. et al. | Jun 1993 | A |
5222240 | Patel | Jun 1993 | A |
5222244 | Carbine et al. | Jun 1993 | A |
5226125 | Balmer et al. | Jul 1993 | A |
5226126 | McFarland et al. | Jul 1993 | A |
5226166 | Ishida et al. | Jul 1993 | A |
5226170 | Rubinfeld | Jul 1993 | A |
5228136 | Shimizu et al. | Jul 1993 | A |
5230068 | Van Dyke et al. | Jul 1993 | A |
5233694 | Hotta et al. | Aug 1993 | A |
5237666 | Suzuki et al. | Aug 1993 | A |
5241636 | Kohn | Aug 1993 | A |
5249286 | Alpert et al. | Sep 1993 | A |
5251306 | Tran | Oct 1993 | A |
5255384 | Sachs et al. | Oct 1993 | A |
5261057 | Coyle et al. | Nov 1993 | A |
5261071 | Lyon | Nov 1993 | A |
5276899 | Neches | Jan 1994 | A |
5278963 | Hattersley et al. | Jan 1994 | A |
H1291 | Hinton et al. | Feb 1994 | H |
5283903 | Uehara | Feb 1994 | A |
5285527 | Crick et al. | Feb 1994 | A |
5287465 | Kurosawa et al. | Feb 1994 | A |
5287467 | Blaner et al. | Feb 1994 | A |
5291615 | Okamoto | Mar 1994 | A |
5293500 | Ishida et al. | Mar 1994 | A |
5299137 | Kingsley | Mar 1994 | A |
5301278 | Bowater et al. | Apr 1994 | A |
5303362 | Butts, Jr. et al. | Apr 1994 | A |
5303382 | Buch et al. | Apr 1994 | A |
5317720 | Stamm et al. | May 1994 | A |
5345569 | Tran | Sep 1994 | A |
5355457 | Shebanow et al. | Oct 1994 | A |
5355460 | Eickemeyer et al. | Oct 1994 | A |
5367660 | Gat et al. | Nov 1994 | A |
5371684 | Iadonato et al. | Dec 1994 | A |
5377339 | Saito et al. | Dec 1994 | A |
5388215 | Baker et al. | Feb 1995 | A |
5390355 | Horst | Feb 1995 | A |
5394351 | Widigen et al. | Feb 1995 | A |
5394515 | Lentz et al. | Feb 1995 | A |
5394529 | Brown, III et al. | Feb 1995 | A |
5398330 | Johnson | Mar 1995 | A |
5404470 | Miyake | Apr 1995 | A |
5404472 | Kurosawa et al. | Apr 1995 | A |
5430884 | Beard et al. | Jul 1995 | A |
5430888 | Witek et al. | Jul 1995 | A |
5436869 | Yoshida | Jul 1995 | A |
5440752 | Lentz et al. | Aug 1995 | A |
5442757 | McFarland et al. | Aug 1995 | A |
5446912 | Colwell et al. | Aug 1995 | A |
5448705 | Nguyen et al. | Sep 1995 | A |
5452426 | Papworth et al. | Sep 1995 | A |
5461715 | Matsuo et al. | Oct 1995 | A |
5471592 | Gove et al. | Nov 1995 | A |
5473764 | Chi | Dec 1995 | A |
5481685 | Nguyen et al. | Jan 1996 | A |
5481734 | Yoshida | Jan 1996 | A |
5487156 | Popescu et al. | Jan 1996 | A |
5488729 | Vegesna et al. | Jan 1996 | A |
5490280 | Gupta et al. | Feb 1996 | A |
5493687 | Garg et al. | Feb 1996 | A |
5497499 | Garg et al. | Mar 1996 | A |
5519627 | Mahmood et al. | May 1996 | A |
5524225 | Kranich | Jun 1996 | A |
5537561 | Nakajima | Jul 1996 | A |
5539911 | Nguyen et al. | Jul 1996 | A |
5559951 | Lentz et al. | Sep 1996 | A |
5560032 | Nguyen et al. | Sep 1996 | A |
5560035 | Garg et al. | Sep 1996 | A |
5561775 | Kurosawa et al. | Oct 1996 | A |
5561776 | Popescu et al. | Oct 1996 | A |
5564056 | Fetterman et al. | Oct 1996 | A |
5564117 | Lentz et al. | Oct 1996 | A |
5566385 | Iadonato et al. | Oct 1996 | A |
5568624 | Sites et al. | Oct 1996 | A |
5572704 | Bratt et al. | Nov 1996 | A |
5574927 | Scantlin | Nov 1996 | A |
5574935 | Vidwans et al. | Nov 1996 | A |
5574941 | Horst | Nov 1996 | A |
5577200 | Abramson et al. | Nov 1996 | A |
5577217 | Hoyt et al. | Nov 1996 | A |
5584001 | Hoyt et al. | Dec 1996 | A |
5586278 | Papworth et al. | Dec 1996 | A |
5590295 | Deosaran et al. | Dec 1996 | A |
5592636 | Popescu et al. | Jan 1997 | A |
5604865 | Lentz et al. | Feb 1997 | A |
5604877 | Hoyt et al. | Feb 1997 | A |
5604912 | Iadonato et al. | Feb 1997 | A |
5606676 | Grochowski et al. | Feb 1997 | A |
5608885 | Gupta et al. | Mar 1997 | A |
5613132 | Clift et al. | Mar 1997 | A |
5615126 | Deeley et al. | Mar 1997 | A |
5615385 | Fetterman et al. | Mar 1997 | A |
5617554 | Alpert et al. | Apr 1997 | A |
5619664 | Glew | Apr 1997 | A |
5619668 | Zaidi | Apr 1997 | A |
5623628 | Brayton et al. | Apr 1997 | A |
5625788 | Boggs et al. | Apr 1997 | A |
5625837 | Popescu et al. | Apr 1997 | A |
5627983 | Popescu et al. | May 1997 | A |
5627984 | Gupta et al. | May 1997 | A |
5627985 | Fetterman et al. | May 1997 | A |
5628021 | Iadonato et al. | May 1997 | A |
5630075 | Joshi et al. | May 1997 | A |
5630083 | Carbine et al. | May 1997 | A |
5630149 | Bluhm | May 1997 | A |
5630157 | Dwyer, III | May 1997 | A |
5640588 | Vegesna et al. | Jun 1997 | A |
5651125 | Witt et al. | Jul 1997 | A |
5655096 | Branigin | Aug 1997 | A |
5655098 | Witt et al. | Aug 1997 | A |
5664136 | Witt et al. | Sep 1997 | A |
5666494 | Mote, Jr. | Sep 1997 | A |
5682546 | Garg et al. | Oct 1997 | A |
5689672 | Witt et al. | Nov 1997 | A |
5689720 | Nguyen et al. | Nov 1997 | A |
5708841 | Popescu et al. | Jan 1998 | A |
5734584 | Iadonato et al. | Mar 1998 | A |
5737624 | Garg et al. | Apr 1998 | A |
5745375 | Reinhardt et al. | Apr 1998 | A |
5754800 | Lentz et al. | May 1998 | A |
5768575 | McFarland et al. | Jun 1998 | A |
5778210 | Henstrom et al. | Jul 1998 | A |
5797025 | Popescu et al. | Aug 1998 | A |
5802605 | Alpert et al. | Sep 1998 | A |
5809276 | Deosaran et al. | Sep 1998 | A |
5819101 | Peleg et al. | Oct 1998 | A |
5826055 | Wang et al. | Oct 1998 | A |
5831871 | Iadonato et al. | Nov 1998 | A |
5832205 | Kelly et al. | Nov 1998 | A |
5832292 | Nguyen et al. | Nov 1998 | A |
5832293 | Popescu et al. | Nov 1998 | A |
5838986 | Garg et al. | Nov 1998 | A |
5867399 | Rostoker et al. | Feb 1999 | A |
5881275 | Peleg et al. | Mar 1999 | A |
5892963 | Iadonato et al. | Apr 1999 | A |
5896542 | Iadonato et al. | Apr 1999 | A |
5941979 | Lentz et al. | Aug 1999 | A |
5961629 | Nguyen et al. | Oct 1999 | A |
5974526 | Garg et al. | Oct 1999 | A |
6038653 | Nguyen et al. | Mar 2000 | A |
6038654 | Nguyen et al. | Mar 2000 | A |
6044449 | Garg et al. | Mar 2000 | A |
6047348 | Lentz et al. | Apr 2000 | A |
6083274 | Iadonato et al. | Jul 2000 | A |
6092176 | Iadonato et al. | Jul 2000 | A |
6092181 | Nguyen et al. | Jul 2000 | A |
6101594 | Nguyen et al. | Aug 2000 | A |
6128723 | Nguyen et al. | Oct 2000 | A |
6131157 | Wang et al. | Oct 2000 | A |
6138231 | Deosaran et al. | Oct 2000 | A |
6219763 | Lentz et al. | Apr 2001 | B1 |
6249856 | Garg et al. | Jun 2001 | B1 |
6256720 | Nguyen et al. | Jul 2001 | B1 |
6272579 | Lentz et al. | Aug 2001 | B1 |
6272617 | Deosaran et al. | Aug 2001 | B1 |
6272619 | Nguyen et al. | Aug 2001 | B1 |
6282630 | Nguyen et al. | Aug 2001 | B1 |
6289433 | Garg et al. | Sep 2001 | B1 |
6360309 | Iadonato et al. | Mar 2002 | B1 |
6385634 | Peleg et al. | May 2002 | B1 |
6401232 | Iadonato et al. | Jun 2002 | B1 |
6408375 | Deosaran et al. | Jun 2002 | B2 |
6412064 | Wang et al. | Jun 2002 | B1 |
6418529 | Roussel | Jul 2002 | B1 |
6611908 | Lentz et al. | Aug 2003 | B2 |
6647485 | Nguyen et al. | Nov 2003 | B2 |
6735685 | Senter et al. | May 2004 | B1 |
6757808 | Iadonato et al. | Jun 2004 | B2 |
6775761 | Wang et al. | Aug 2004 | B2 |
6782521 | Iadonato et al. | Aug 2004 | B2 |
6915412 | Nguyen et al. | Jul 2005 | B2 |
6920548 | Wang et al. | Jul 2005 | B2 |
6922772 | Deosaran et al. | Jul 2005 | B2 |
6934829 | Nguyen et al. | Aug 2005 | B2 |
6941447 | Nguyen et al. | Sep 2005 | B2 |
6948052 | Nguyen et al. | Sep 2005 | B2 |
6954844 | Lentz et al. | Oct 2005 | B2 |
6959375 | Nguyen et al. | Oct 2005 | B2 |
6970995 | Deosaran et al. | Nov 2005 | B2 |
6986024 | Nguyen et al. | Jan 2006 | B2 |
7028161 | Nguyen et al. | Apr 2006 | B2 |
7043624 | Iadonato et al. | May 2006 | B2 |
7051187 | Garg et al. | May 2006 | B2 |
7162610 | Nguyen et al. | Jan 2007 | B2 |
7174525 | Iadonato et al. | Feb 2007 | B2 |
7430651 | Iadonato et al. | Sep 2008 | B2 |
7664935 | Coon et al. | Feb 2010 | B2 |
20010034823 | Garg et al. | Oct 2001 | A1 |
20020059508 | Lentz et al. | May 2002 | A1 |
20020083300 | Deosaran et al. | Jun 2002 | A1 |
20020129324 | Iadonato et al. | Sep 2002 | A1 |
20020194456 | Deosaran et al. | Dec 2002 | A1 |
20030056086 | Nguyen et al. | Mar 2003 | A1 |
20030056087 | Nguyen et al. | Mar 2003 | A1 |
20030070060 | Nguyen et al. | Apr 2003 | A1 |
20030079113 | Nguyen et al. | Apr 2003 | A1 |
20030115440 | Garg et al. | Jun 2003 | A1 |
20040024987 | Lentz et al. | Feb 2004 | A1 |
20040054872 | Nguyen et al. | Mar 2004 | A1 |
20040093482 | Nguyen et al. | May 2004 | A1 |
20040093483 | Nguyen et al. | May 2004 | A1 |
20040093485 | Nguyen et al. | May 2004 | A1 |
20050228973 | Wang et al. | Oct 2005 | A1 |
20060020773 | Deosaran et al. | Jan 2006 | A1 |
20060041736 | Garg et al. | Feb 2006 | A1 |
20060064569 | Lentz et al. | Mar 2006 | A1 |
20060123218 | Iadonato et al. | Jun 2006 | A1 |
20060149925 | Nguyen et al. | Jul 2006 | A1 |
20070101103 | Nguyen et al. | May 2007 | A1 |
20070106878 | Nguyen et al. | May 2007 | A1 |
20070106880 | Wang et al. | May 2007 | A1 |
20070113047 | Garg et al. | May 2007 | A1 |
20070113214 | Iadonato et al. | May 2007 | A1 |
20080059770 | Garg et al. | Mar 2008 | A1 |
Number | Date | Country |
---|---|---|
0 170 284 | Feb 1986 | EP |
0 213 843 | Mar 1987 | EP |
0 241 909 | Oct 1987 | EP |
0 354 585 | Feb 1990 | EP |
0 378 195 | Jul 1990 | EP |
0 454 636 | Oct 1991 | EP |
0 515 166 | Nov 1992 | EP |
0 533 337 | Mar 1993 | EP |
2 190 521 | Nov 1987 | GB |
57-057345 | Apr 1982 | JP |
60-144830 | Jul 1985 | JP |
61-040650 | Feb 1986 | JP |
61-107434 | May 1986 | JP |
62-242243 | Oct 1987 | JP |
63-192135 | Aug 1988 | JP |
1-142831 | Jun 1989 | JP |
1-199233 | Aug 1989 | JP |
2-048732 | Feb 1990 | JP |
2-118757 | May 1990 | JP |
2-211534 | Aug 1990 | JP |
2-224025 | Sep 1990 | JP |
2-226342 | Sep 1990 | JP |
3-035324 | Feb 1991 | JP |
3-218524 | Sep 1991 | JP |
4-054638 | Feb 1992 | JP |
4-096132 | Mar 1992 | JP |
4-503582 | Jun 1992 | JP |
5-197544 | Aug 1993 | JP |
6-019707 | Jan 1994 | JP |
WO 8809035 | Nov 1988 | WO |
WO 9120031 | Dec 1991 | WO |
WO 9320505 | Oct 1993 | WO |
Number | Date | Country | |
---|---|---|---|
20090013158 A1 | Jan 2009 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 11338817 | Jan 2006 | US |
Child | 12210738 | US | |
Parent | 10847460 | May 2004 | US |
Child | 11338817 | US | |
Parent | 10034252 | Jan 2002 | US |
Child | 10847460 | US | |
Parent | 09574251 | May 2000 | US |
Child | 10034252 | US | |
Parent | 09252655 | Feb 1999 | US |
Child | 09574251 | US | |
Parent | 08811237 | Mar 1997 | US |
Child | 09252655 | US | |
Parent | 08224328 | Apr 1994 | US |
Child | 08811237 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 07999648 | Dec 1992 | US |
Child | 08224328 | US |