External interface for event architecture

Information

  • Patent Grant
  • 8103497
  • Patent Number
    8,103,497
  • Date Filed
    Thursday, March 28, 2002
    22 years ago
  • Date Issued
    Tuesday, January 24, 2012
    12 years ago
Abstract
A device for monitoring events. The device may have a programmable event engine for detecting events and a memory array coupled to the event engine. The array may store data for programming the event engine to monitor for the events. The device may have an external pin coupled to the event engine. The event engine may monitor a signal on the external pin to detect events external to the device. Alternatively, the device may output a signal on an external pin in response to detecting one of the events.
Description
FIELD OF THE INVENTION

The present invention relates to the field of testing electronic devices. Specifically, the present invention relates to an external interface for an event architecture.


BACKGROUND ART

Logic analyzers and in-circuit emulators have been used for many years by software and hardware developers to help diagnose and debug hardware and software. Such devices may be able to monitor and analyze various circuit and software conditions during debugging and testing of the design. For example, they may store trace information, such as time stamps, register values, data memory content, etc., which may be later analyzed. They may also provide various configurable breakpoints, which allow the designer to analyze the state of the design at a point in its operation by stopping operation when a specified condition occurs. The breakpoints may also be chained together such that a series of conditions happen before the operation is stopped.


For example, conventional logic analyzers and in-circuit-emulators may have a relatively small number of configurable complex breakpoints. A designer may program between one and a few of these breakpoints to cause the analyzing device to perform a specified action upon a condition's occurrence. For example, a first breakpoint might be programmed to look for a write to a certain memory address. When the first breakpoint triggers, it activates a second complex breakpoint, which may look for a certain program counter value. When the program counter reaches that value, a third complex breakpoint is activated, which may watch for a certain stack pointer value. When the stack pointer reaches the specified value, a fourth complex breakpoint is activated, which may watch for a certain accumulator value. Finally, when the accumulator value is reached the operation breaks.


Unfortunately, conventional analyzing devices offer only a few breakpoints, which are implemented as dedicated pieces of hardware, each looking for one condition. Because much of the hardware is dedicated to one function, it is prohibitively expensive to provide a substantial number of breakpoints. Consequently, only a limited number of events can be programmed and only a limited number of conditions can be monitored.


Furthermore, conventionally, separate systems are required to perform both logic analyzer and in-circuit-emulation functions. For example, conventional logic analyzers are able to monitor signals that an in-circuit-emulator would not normally analyze, such as signals that originate outside the circuit containing the emulator. Likewise, a logic analyzer would not normally provide emulation functionality. Consequently, substantial added expensive must be taken to purchase and maintain both systems.


Therefore, it would be advantageous to provide a device that may be used to analyze electronic circuits and software, that is relatively inexpensive, and can track a substantial number of complex conditions occurring during operation of an electronic circuit or software. It would also be advantageous to provide an analyzing device that uses hardware more efficiently than conventional analyzing devices, such as logic analyzers and emulators. It would be further advantageous to provide a device with more flexibility than conventional analyzing devices. It would be still further advantageous to provide a device with the functionality of both a logic analyzer and an in-circuit emulator.


SUMMARY OF THE INVENTION

Embodiments of the present invention provide a cost efficient device that may be used to analyze a circuit or software under test. Embodiments of the present invention provide a solution that uses less hardware than conventional solutions to track a substantial number of conditions occurring during operation of an electronic circuit or software. Embodiments of the present invention provide more flexibility than conventional analyzing devices. Embodiments of the present invention provide the functionality of both a logic analyzer and an in-circuit emulator. Embodiments of the present invention provide these advantages and others not specifically mentioned above but described in the sections to follow.


A device for monitoring events is disclosed. The device of one embodiment may comprise a programmable event engine for detecting events and a memory array coupled to the event engine. The array may store data for programming the event engine to monitor for the events. The device may have an external pin coupled to the event engine. The event engine may monitor a signal on the external pin to detect events external to the device.


Another embodiment provides for a system for monitoring events. The present embodiment may comprise a programmable event engine for monitoring for events and a memory array coupled to the event engine. The array may store data for programming the event engine to monitor for the events. An external pin may be coupled to the event engine, which may output a signal on the external pin in response to detecting one of the events.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a block diagram of a device for implementing a programmable event engine, according to embodiments of the present invention.



FIG. 2 is a diagram illustrating an event thread, which embodiments of the present invention may execute.



FIG. 3 is a block diagram of a device for implementing a programmable event engine, according to embodiments of the present invention.



FIG. 4 is a block diagram of logic for executing an event thread, according to embodiments of the present invention.



FIG. 5 is a flowchart of steps of a process of executing an event thread, according to embodiments of the present invention.



FIG. 6 is an exemplary structure that may be used to program a memory array with values to configure an event engine, according to embodiments of the present invention.



FIG. 7 illustrates exemplary output logic for an event engine, according to embodiments of the present invention.



FIG. 8 illustrates exemplary input logic for an event engine, according to embodiments of the present invention.



FIG. 9 is an exemplary data structure that may be used to program a memory array with values to configure an event engine, according to embodiments of the present invention.



FIG. 10 is a flowchart illustrating a process of chaining event threads, according to embodiments of the present invention.



FIG. 11A is a block diagram of a device comprising chained event engines, according to embodiments of the present invention.



FIG. 11B and FIG. 11C are block diagrams illustrating a signal input into a portion of an event engine, according to embodiments of the present invention.



FIG. 12 is an exemplary data structure that may be used to program a memory array with values to configure combinational logic, according to embodiments of the present invention.



FIG. 13 is a table illustrating how values in the data structure of FIG. 12 may be used to implement various Boolean expressions, according to embodiments of the present invention.



FIG. 14 is a table illustrating how values in the data structure of FIG. 12 may be used to implement various complex Boolean expressions, according to embodiments of the present invention.



FIG. 15 is a flowchart illustrating a process of chaining event threads, according to embodiments of the present invention.



FIG. 16 is a diagram illustrating exemplary logic to implement re-configurable combinational logic, according to embodiments of the present invention.



FIG. 17 is a block diagram illustrating event architecture, according to embodiments of the present invention.



FIG. 18A is a diagram illustrating event engines chained in various execution schemes, according to embodiments of the present invention.



FIG. 18B illustrates tables describing output signals of chain logic blocks, according to embodiments of the present invention.



FIG. 19 is a flowchart illustrating a process of configuring event architecture, according to embodiments of the present invention.



FIG. 20 is a flowchart illustrating a process of configuring event architecture, according to embodiments of the present invention.



FIG. 21 is a block diagram illustrating an in-circuit emulator coupled to other devices, according to embodiments of the present invention.



FIG. 22 is a block diagram illustrating a device having event engines, external input pins, and external output pins, according to embodiments of the present invention.



FIG. 23 is a flowchart illustrating steps of a process of monitoring events, according to embodiments of the present invention.





DETAILED DESCRIPTION OF THE INVENTION

In the following detailed description of the present invention, an interface for an event architecture, numerous specific details are set forth in order to provide a thorough understanding of the present invention. However, it will be recognized by one skilled in the art that the present invention may be practiced without these specific details or with equivalents thereof. In other instances, well-known methods, procedures, components, and circuits have not been described in detail as not to unnecessarily obscure aspects of the present invention.


Re-Configurable Event Engines

Embodiments of the present invention may be able to reconfigure an event engine during execution of an event thread. In this fashion, the underlying hardware may be able to be used to execute many different states of the event thread by re-configuring the hardware during execution of the event thread. This may allow embodiments of the present invention to implement an event engine that supports very large numbers of states in the event thread, without dedicating hardware to perform a single state of an event thread.



FIG. 1 illustrates an embodiment of a device 100 for implementing an event engine 120. The device 100 may comprise programmable logic 110 (e.g., a memory array) for storing data to define a number of states in an event thread to be executed by the event engine 120. Throughout this description, the event engine 120 may also be referred to as execution logic 120. Throughout this description, the programmable logic 110 may also be referred to as configuration RAM 110. A designer who may be testing and debugging a circuit or software may define the event thread using a software package. The data defining the event thread may then be loaded into the configuration RAM 110. A first portion of the data stored in the configuration RAM 110 may be used to configure or to program the event engine 120 to execute a state of the event thread. Then, new data may be loaded from the configuration RAM 110 to reconfigure the event engine 120 to execute the next state of the event thread. One embodiment uses 64 bytes per state. Therefore, a substantial number of states may be programmed into the configuration RAM 110.


Still referring to FIG. 1, the event engine 120 may receive a number of inputs 105 and may be configured by the data in the configuration RAM 110 to select between the inputs 105. The event engine 120 may also be configured to look for a condition or event with respect to a selected input signal. Upon the condition's occurrence, the event engine 120 may output none, one, or multiple signals 115. The output signal(s) 115 may be used to initiate an action, such as a breakpoint, setting a trace buffer on or off, toggling an external trigger, etc. The event engine 120 may also be configured by the data in the configuration RAM 110 to select which signal it should output upon detection of the condition or event. The event engine 120 may also output a transition signal 125 when the condition it was configured to look for occurs.


The transition signal 125 may be fed into transition logic 130, which upon receiving the transition signal 125, may cause a new state to be entered by loading data out of the configuration RAM 110 to re-configure the event engine 120. In this fashion, the event engine 120 may be reconfigured on-the-fly or during the execution of an event thread.



FIG. 2 illustrates an exemplary event thread 200 that may be executed in the event engine 120 of FIG. 1 and also in other embodiments of the present invention. The exemplary event thread 200 has three event cells 210; each event cell 210 may correspond to one state of the event thread 200. Embodiments may program or load the configuration RAM 110 with data that describe the event thread 200. In this example, during state 0, some of the data is used to configure the event engine 120 to monitor for the condition of the program counter being between 0x30 and 0x38. When this condition occurs, the event engine 120 may be put into state 1 by the transition logic 130. This may cause the configuration RAM 110 to reconfigure the event engine 120 to monitor for the condition of the accumulator equal to 0xcc. When this condition occurs, the event engine 120 may cause a trace to be turned on by outputting an appropriate signal. Additionally, state 2 may be loaded. In state 2, the event engine 120 may look for the condition of the stack pointer greater than or equal to 0xf0. When this occurs, the event engine 120 may cause a breakpoint signal to be output, which may stop the execution of, for example, code running in a microprocessor. When this occurs, state 2 may be reloaded, which may cause the event engine 120 to continue to monitor the stack pointer and to issue a break signal when, for example, the stack pointer is out of a valid range.


Referring now to FIG. 3, to select between a number of inputs 105, the event engine 120 may have input logic 310 coupled to the configuration RAM 110. The input logic 310 may be configurable to select between a plurality of inputs 105 in response to the data from the configuration RAM 110. In this fashion, the input logic 310 is re-configurable when entering the new state by data from the configuration RAM 110. For example, in state 0 of FIG. 2, the input logic 310 may be configured to select the program counter, which may feed the determination logic 320. When the event engine 120 transitions to state 1, the input logic 310 may be reconfigured to select the accumulator, which may feed into the determination logic 320.


Still referring to FIG. 3, determination logic 320 may be coupled to the configuration RAM 110 and may be configurable by data from the configuration RAM 110 to detect a condition with respect to a selected input 315. Throughout this description, the determination logic 320 may also be known as detection logic 320. The determination logic 320 may also issue a trigger or hit signal 325 upon detection of the condition. The determination logic 320 may be re-configurable to detect a new condition during the new state. For example, in state 0 of FIG. 2, the determination logic 320 may be configured to look for the condition of the selected signal 315 fed to it by the input logic 310 (e.g., the program counter) being in a certain range. When the next state is entered, the determination logic 320 may be reconfigured by new data from the configuration RAM 110 to look for the condition of the selected signal 315 being equal to 0xcc, for example.


When the selected signal 315 is within the specified range, the determination logic 320 may also output a transition signal 335 to the transition logic 130. However, the same signal may be used for both the trigger signal 325 and the transition signal 335.


Still referring to FIG. 3, the event engine 120 may further have an output (or output logic) 330 coupled to the configuration RAM 110. The output 330 may be configured by data from the configuration RAM 110 as to which signal of a plurality of signals 115 it is to output upon receiving the trigger signal 325. For example, the output logic 330 could send out a breakpoint signal, an external trigger signal, a trace on/off signal, etc.



FIG. 4 illustrates an embodiment of the event engine 120, in which the determination logic 320 is performed by a comparator. The input logic 310, in this embodiment, comprises a multiplexer 410 which inputs a number of input signals 105, which may include the program counter (PC), a bitfield of flags, the accumulator (A), the stack pointer (SP), the instruction register (IR), scratch register (X) (or index register), I/O data address (IO_DA), I/O data byte (IO_DB), memory data address (MEM_DA), memory data byte (MEM_DB), and external logic pin signals 415. Embodiments are suitable to receive any desired input. In this case, the inputs may be various signals and values of interest when testing and debugging a circuit or software.


The determination logic 320, in this embodiment, may comprise two comparators 420a, 420b. The upper comparator 420a may be fed a low range value, which may come from the configuration RAM 110. The lower comparator 420b may be fed a high range value, which may also come from the configuration RAM 110. As described herein, a user may enter data into a design program to build various data structures to implement the various event cells 210. For example, the user may input a low range value and a high range value for a given state of an event thread 200. Those values may be loaded in the configuration RAM 110 and then fed to the comparators 420a, 420b when the event engine 120 is to execute the given state of the given event thread 200.


Rather than using comparators, embodiments may use combinational logic, a mathematical block, or some arbitrary block of logic to see if the selected input signal 315 meets a condition specified by the data in the configuration RAM 110.


The comparators 420a, 420b may also be fed with the selected input signal 315. The determination logic 320 may also comprise a logical AND 430, which may have, as inputs, the output of each comparator 420a, 420b, an enabled bit 421, and an execute bit 423. The enabled bit 421 may be specified by the user and may be a part of the data stored in the configuration RAM 210. The enabled bit 421 may control whether a given event cell 210 will be executed. The optional execute bit 423 may allow a signal to be fed in from logic peripheral to the event engine 120. Thus, the event engine 120 may be effectively controlled by logic external to the event engine 120. For example, by preventing or allowing the decision logic 320 to output the trigger signal 325 and/or the transition signal 335, the event engine 120 and hence the event engine 120 may be controlled by external logic (not shown).


The determination logic 320 outputs a trigger signal 325 if all of the inputs to the logical AND are true. In the present embodiment, the output 330 is shown outputting, in response to the trigger signal 325, four different signals, which may be used to execute a break, to put trace on or off, or to initiate an external trigger, for example. The trigger signal 325 may also be fed into logic, such as transition logic 130, to cause the next state to be loaded. Alternatively, there may be a separate transition signal 335 and trigger signal 325, with one or the other not influenced by the execute bit 423 or influenced by a second bit. Thus, embodiments are able to output a signal 115, such that an action such as a breakpoint is initiated, without advancing to the next state of the thread 200. In a similar fashion, embodiments are also able to advance to the next state of the thread 200 without outputting the signal 115.


Referring now to process 500 of FIG. 5, an embodiment of the present invention provides for a method of executing an event thread 200. Step 510 may comprise receiving data defining an event thread 200 having a plurality of states as defined by event cells 210. For example, the event engine 120 may receive this data from the configuration RAM 110.


In step 520, the data may be stored in a configuration RAM 110 coupled to the event engine 120. For a given state of the thread 200, the data may define a condition to monitor for with respect to a selected input 315. The data may also define one or more actions to take upon the condition being met. The output logic 330 outputs a signal 115 to cause the action, such as initiating a breakpoint or setting trace on or off, etc. Optionally, the data may define that no action be taken.


Step 530 may comprise configuring the event engine 120 to execute a state of the thread 200 by using data from the configuration RAM 110. Thus, the input logic 310 may be configured to select between a number of input signals 105 and to output the selected signal 315. The determination logic 320 may be configured to determine if a selected input 315 meets a condition (e.g., an event is detected). The output logic 330 may be configured to select between a plurality of signals (e.g., it outputs one or more of the signals, such as breakpoint, trace on/off, toggle external trigger, etc.). This step may be repeated to execute additional states by re-configuring the event engine 120 by using additional data from the configuration RAM 110.


In step 540, the event engine 120 may execute the current state, as it has been configured or re-configured. In embodiments in which the event engine 120 is divided into several components (e.g., input logic 310, determination logic 320, and output logic 330), one or more of the components may be re-configured to execute the next state.


Step 550 may comprise a determination of whether there has been a transition to a new state. If so, step 530 may be repeated. Thus, the event engine 120 may be reconfigured during the execution of an event thread 200. If there has not been a transition, step 540 of the process 500 may be repeated.


Referring now to FIG. 6, an exemplary event cell data structure 600 for defining an event cell 210 is illustrated (e.g., a 16-bit event cell 210). Thus, the event cell structure 600 may be used to specify a single event thread state 210. While the exemplary structure is 64 bits, any suitable size may be used. Multiple such event cell structures 600 may be chained together to define the data for an event thread 200. Referring now to word 0 of the event cell structure 600, bit 31 may be for event thread enable. If this bit is off, then all of the associated control logic may be off and the event thread is not used. In this fashion, event threads 200 that are not being used may be turned off. Alternatively, an event thread 200 may be run for several states and then turned off. This may be implemented, for example, by feeding the enabled bit 421 in FIG. 4 into the AND logic 430.


Still referring to FIG. 6, bits 30:25 are the ‘next’ field, which may contain a pointer to the location of the next event cell data structure 600, and hence the next state in the event thread 200. This may allow a user to chain event cells 210 together by specifying the next event cell 210 to be executed in this field. If the event thread 200 meets its current condition, it may will transition to the state specified in this field. Bit 24 is an invert decision bit and may invert the output of the determination logic 320 (e.g., the trigger signal 325).


In one embodiment, bits 20-23 may act as enables to tri-state buffers. Referring now to FIG. 7, the trigger signal 325 may be input to the output logic 330, which may have a number of tri-state buffers 810. If a tri-state buffer 810 is enabled then the trigger signal 325 may pass through tri-state 810 to its associated logic. For example, if bit 23 (external trigger bit) is set, it may enable tri-state buffer 810a, which may allow the trigger signal 325 to propagate through to the external trigger logic 820, which may toggle the value of an external logic pin. Bit 22 and 21 may be for setting trace on and trace off. The value of these bits may be fed into tri-state buffers 810b and 810c, respectively. In this fashion, the trace logic 825 may cause the trace signal 115b to be turned on or off when a condition occurs and the trigger signal 325 is propagated through. Bit 20 may be for initiating a break signal 115 and may be fed into the tri-state buffer 810d. Thus, when a condition is detected the break logic 830 may output a break signal 115c provided tri-state 810d is enabled. The output logic 330 may output many other signals, as well.


Embodiments allow multiple event engines 120 to be operating concurrently. In these embodiments, there may be a logical scheme to decide what to do when event engines 120 issue contradictory signals 115. For example, if one event engine 120 issues a signal 115 to turn the trace on and another issues a signal 115 to turn the trace off, the trace may be turned on to be sure information is stored. Any suitable scheme may be used when there is a conflict between signals 115 from different event engines 120.


Referring again to FIG. 6, bits 19:16 may control the input logic 310. For example, referring to FIG. 8, in one embodiment, bits 16-19 are fed into a multiplexer 410 to select between the inputs 105. The output of the multiplexer 410 may be the selected signal 315. The data format of FIG. 6 shows one method of allowing the user to specify which of the exemplary signals 105 is to be selected by the multiplexer 410.


Still referring to FIG. 6, bits 15:0 are for a counter start value and may allow the user to specify how many times a condition happens before the before the determination logic 320 generates a trigger signal 325 to initiate taking an action (e.g., outputting signal 115) and entering the next state. Thus, these bits may be fed into a counter logic (not shown), which is coupled to the determination logic 320.


Still referring to FIG. 6, word 1 of the exemplary data format may be used for range compare. Bits 31:16 are for a high word of the range compare and may specify the maximum value to look for. These bits may be fed into the upper comparator logic 410a, for example. Bits 15:0 specify the minimum value to look for in the range compare, and may be fed into the lower comparator logic 410b, for example.


Structure 900 of FIG. 9 is an exemplary data format for an eight-bit event cell 210. The present invention may use other formats with different fields. Bits 31:20 of word 0 are similar to the corresponding bits of the 16 bit exemplary structure 600. Bits 19:16 may define what the input logic 310 selects. Bits 15:0 are for the counter start value.


Referring now to word 1 of structure 900, bits 31:24 are reserved. Bits 23:16 may specify the maximum value for the range compare. Bits 15:8 are for bit masking and may be used to specify active bits for the compare. For example, active bits may be marked with a zero. Bits 7:0 are for the minimum value for range compare.


Chaining Event Threads

Referring now to FIG. 10, embodiments of the present invention provide for chaining together multiple event threads 200. An example of two event threads 200 that are chained together is illustrated in the flow diagram of FIG. 10. Thread 200a may be analogous to the thread illustrated in FIG. 2. Thread 200b has three states that are executed in parallel with the three states of thread 200a. For example, each event thread 200 may advance to its next state at the same time as the other event thread 200. However, when event threads 200 are chained, the next state may be entered based on a logical combination of signals from the event threads 200. For example, each event thread 200 may produce a hit signal 325 when a condition occurs. These hit signals 325 may be logically combined according to a Boolean expression formed by a logical operator in the given state in the chain logic thread 1000.


An example of such a logical combination will be discussed by referring to FIG. 10. In state 0, event thread 200a is testing for the occurrence of the program counter being between 0x30 and 0x38, while event thread 200b is testing for the condition of the instruction register equal to 0x40. In state 0, the chain thread 1000 has a logical operator of AND. Thus, the Boolean expression of “(thread 200a condition) AND (thread 200b condition)” may be formed. The event threads 200 may not advance to state 1 until the Boolean condition is true.


When the Boolean condition for state 0 is true, state 1 may be entered in which event thread 200a tests for the condition of the accumulator equal to 0xcc. During state 1, event thread 200b may test for the condition of the stack pointer less than 0x10. Based on the logical operator in state 1 of the chain logic thread 1000, the Boolean expression is “(accumulator=0xcc) OR (stack pointer<0x10).” Thus, state 2 may be entered when either condition is satisfied. In this case, both event threads 200a, 200b may issue a signal to set the trace on when their condition is satisfied. Since the logical operator is OR, the event thread 200 which caused the Boolean expression to be true may also cause the trace to turn on.


Embodiments of the present invention also provide for cases in which the logical operator is, for example, an AND with two or more event threads 200 triggering events upon the condition for which they are testing being satisfied. For example, if state 1 of the chain event 1000 were a logical AND, then the event threads 200a and 200b may not advance to state 2 until both conditions are satisfied. However, the trace may be set on when either event thread 200a or 200b has its condition satisfied. Alternatively, embodiments may require that the Boolean expression be true for the trace to be set to on.


Still referring to FIG. 10, in state 2, the Boolean expression that is formed is “(stack pointer>=0xf0) OR (program counter=0).” In this case, the action that may be triggered is a break (e.g., a break in the operation of the underlying software under test). State 2 is then repeated. While the embodiment illustrated in FIG. 10 comprises two event threads 200, embodiments of the present invention are suitable to chaining together large numbers of event threads 200. Furthermore, logical operators such as, for example, NAND and NOR, may be applied to the event threads 200 in addition to AND and OR.


Referring now to FIG. 11A, embodiments of the present invention provide for chaining together multiple event threads 200 that are executed in event engines 120. Throughout this description, the phrase “chained event threads 200” may be equivalent to the phrase “chained event engines 120.” The device for chaining event threads 1100 of FIG. 11A may have combinational logic or a chain logic block 1110, which may be programmed or configured by data stored in the configuration RAM 110 (e.g., a memory, array or programmable logic) to output the result of a Boolean expression that is formed with selected inputs. Throughout this description, the term re-configurable combinational logic may comprise the combinational logic 1110, the configuration RAM 110, as well as other elements. The selected inputs may be chosen from the hit signals 325 that the event engines 120 produce in response to the occurrence of various conditions or events. In this fashion, the event threads 200 are chained together. However, the present invention is not limited to selecting the hit signals 325 as the operands in the Boolean expressions.


The event engines 120 may be programmed by the configuration RAM 110 to execute event threads 200 as discussed herein. The event threads 200 that run in the event engines 120 may be chained or run independently. The combinational logic 1110 may output a chain logic signal 1125 to each event engine 120. The chain logic signal 1125 may be formed from the result of a Boolean expression formed from selected input (e.g., hit) signals 325, along with a condition that may determine whether an event engine 120 is to be part of a chain. For example, to run all of the event threads 200 in the event engines 120 independently, the combinational logic 1110 outputs chain logic signals 1125 of: C1=C2=C3=Cn=true. In this fashion, the event engines 120 all see a true input from the combinational logic 1110 and thus are not affected by the input signal. To run any single event engine 120 independently, the combinational logic 1110 feeds it a “1”. Event engines 120 that are chained may see a chain logic signal 1125 that has the same value and whose value may depend on whether a Boolean condition is true. The hit signals 325 of the event engines 120 may also be fed back into the event engines 120.


In one embodiment, chain logic signals 1125 from the combinational logic 1110 may be fed into the configuration RAM 110 (possibly though other logic that is not shown). The chain logic signals 1125 may be used to select the data that the configuration RAM 110 outputs to re-configure the combinational logic 1110. However, this is not required. Event engine outputs 1191 (e.g., hit signals 325 or other signals from the event engines 120) may also be input to the configuration RAM 110 to select data 1107 from the configuration RAM 110. The data may be used to re-configure the combinational logic 1110 and/or the event engines 120.


Referring briefly to FIG. 4, an embodiment inputs a signal (e.g., signal 1125) from the combinational logic 1110 as the exec signal 423 into the logical AND 430. In this fashion, if the exec signal 423 is true, the output of the AND 430 may be controlled by the other inputs to the AND 430. The hit signal from the event engine 120 may be taken from a gate (not shown) which combines the inputs of the AND gate 430 except the exec signal 423. In this fashion, when the condition for which the event engine 120 tests for is satisfied, a hit signal 325 may be output to the combinational logic 1110.


This technique may also be performed by the embodiment illustrated in FIG. 11B, in which a signal 1125 (e.g., C1) from the combinational logic 1110 is input to the AND gate 1130, which may also input the trigger or hit signal 325. The hit signal 325 may also be fed to the input of the combinational logic 1110. The output of the AND gate 1130 may be input to the output logic 330 and may also be used as the transition signal 335, which may be fed into transition logic 130. Each event engine 120 may have a signal 1125 (e.g., C1, C2, etc.) fed from the combinational logic 1110, though not necessarily the same signal. Those event engines 120 running the event threads 200 that are being chained may have the result of the Boolean expression input into their respective AND gates 1130. However, those that are not being chained (e.g., are being run independently) may have a logic “1” input. If signal C1 is always “1”, the output of the AND 1130 may be controlled by the hit signal 325. In this fashion, when the event engine 120 is not a part of a chain, it may execute independently.


When an event engine 120 is chained, the signal 1125 (e.g., C1) may be equal to the result of the Boolean expression, and the output of the AND gate 1130 may be “0” while the Boolean expression is false. In this case, the next state may not be entered and no actions may be triggered by the output logics 330 of any of the event engines 120. When the Boolean expression is true, the event engine(s) 120 which produced a hit signal(s) 325 may have a logical “1” at the output of their AND gate(s) 1130, which may trigger a next state and may also will trigger the output logic(s) 330 of the event engine(s) 120 which produced a hit signal(s) 325. The next state may be initiated in all of the chained event engines 120 by having the memory array 110 send the data for the next state to each chained event engine 120.


In some cases, it may be desirable to trigger an action when the event for which a chained event engine 120 is testing for is satisfied, even if the next state is not to be entered because the Boolean expression is false. Referring now to FIG. 11C, a block diagram is illustrated to implement such an embodiment. In this embodiment, the input to the output logic 330 may be received directly from the trigger or hit signal 325. In this fashion, the action may be triggered by the output logic 330 regardless of the result of the Boolean expression (e.g., regardless of the value of signal 1125 or C1). However, the next state may still be triggered by the combination of the trigger or hit signal 325 and the output signal 1125 (e.g., C1) of the combinational logic 1110. The present invention is not limited to the methods illustrated in FIGS. 11B and 11C for inputting the result (e.g., signal 1125) of the Boolean expression into the event engines 120 and for producing next states and output actions from the output logic 330.


Referring now to FIG. 12, an exemplary chain data structure 1200 that is used to configure a chain logic block 1110 is shown. A single chain data structure 1200 may be used to configure the chain logic block 1110 for a single state and may be used to chain together a number of event threads 200.


Bits 30:24 specify a pointer to the next chain data structure 1200 to execute. Thus, these bits may specify the next slave chain logic state for the chain logic block 1110 to execute. In this fashion, the logical function (e.g., AND, OR, NAND, NOR) may be altered from state to state. Also, the event threads 200 that are being chained may be changed from state to state. Bit 17 is for an enable bit, which may enable the chain logic block 1110 that the chain data structure 1200 configures.


Bit 16 is an inverting bit, which may invert the result of the Boolean expression. For example, if the chain logic block 1110 was implementing “thread 0 AND thread 1,” the invert may implement “NOT (thread 0 AND thread 1).”


Bits 15:0 may specify which event threads 200 are to be chained together. There is a positive logic enable and a negative logic enable for each event thread 200, which may allow the chain logic block 1110 to use the inverse of the input from a given event thread 120 in the Boolean expression. Both bits may be set to “0” to cause the chain logic block 1110 to ignore given the event engine 120. For example, it may not use the hit signal 325 from the given event engine 120 and it may output a constant logical “1” to the event engine 120 so that it is not affected by the combinational logic 1110.


In the example in FIG. 12, up to eight event threads 200 may be chained together. Embodiments of the present invention are able to chain together very large numbers of event threads 200. To do this, the data structure 1200 may be made larger to specify additional event threads 200. Then, the underlying chain logic block 1110 is made wider but not deeper. This may not slow down the chain logic block 1110 because embodiments implement the chain logic block 1110 with tri-state logic, as opposed to multiplexers.


As discussed herein, embodiments of the present invention are able to implement logical operators such as, for example, OR, AND, NOR, and NAND. The table 1300 illustrated in FIG. 13 demonstrates how various bits in the structure 1200 of FIG. 12 may be set to implement various logical operators. To form a logical OR, the chain enable bit (e.g., bit 17) may be set to “1” to enable this chain logic thread 1000. The invert output bit (e.g., bit 16) may be set to “1”. For each event thread 200 to be chained, the positive logic enable may be set to “1”. In this fashion, a logical OR may be created. For example, if the positive logic enables of event threads 7, 6, and 1 are set to “1”, and if the event threads 200 are testing for the occurrence of conditions A, B, and C respectively, then the Boolean expression may be “A OR B OR C.”


Still referring to Table 1300 of FIG. 13, a logical NOR may be applied to the event thread 200 conditions or events by setting the invert output bit to “0” and the enable bit to “1”. For each event thread 200 to be chained, the positive logic enable may be set to “1”. In this fashion, the expression “NOT (A OR B OR C)” may be formed using the exemplary event threads from the previous paragraph.


To form an expression with AND as the logical operator, the chain enable bit may be set to “1” and the invert output bit may be set to “0”. For each event thread 200 to be chained, the positive logic enable may be set to “0” and the negative logic enable bit may be set to “1”. Thus, an expression such as, “A AND B AND C” may be formed, where A, B, and C are conditions being tested for by separate event threads 200.


To form a logical NAND, the chain enable bit may be set to “1” and the invert output bit may be set to “1”. The rest of the bits may be set as for the previously described logical AND.


Embodiments of the present invention are also able to form Boolean expressions in which selected inputs are inverted. For example, expressions such as “A(NOT) AND B AND C” may be created. The expression may be stored in the configuration RAM 110, which may be used to configure the combinational logic 1110. Referring now to FIG. 14, the table 1400 illustrates one way such expressions may be formed. For example, to form the Boolean expression, “A(NOT) OR B OR C,” the chain enable and invert bits may be set to “1”. The negative logic enable for event thread A may be set to “1”. For event threads B and C, the positive logic enable bit may be set to “1”. In this fashion, the expression may be stored in the configuration RAM 110, which may be used to configure the combinational logic 1110.


Similar expression may be formed with the logical operators AND, NOR, and NAND. For example, table 1400 illustrates one possible set of rules for forming the following expressions: “A AND B(NOT) AND C”; “NOT (A OR B(NOT) OR C)”; and “NOT (A AND B(NOT) AND C(NOT))”.


An embodiment of the present invention provides for a method of chaining event engines 120. Referring now to Process 1500 of FIG. 15, in step 1510, data for configuring combinational logic 1110 may be stored in a configuration RAM 110. The data may allow the configuration logic 1110 to be configured to implement Boolean expression formed by selected inputs.


In step 1520, the combinational logic 1110 may be configured to output the result of a Boolean expression. This step may comprise sub-steps 1520a of selecting inputs to the combination logic 1110. For example, the inputs may be selected from available outputs of a number of event engines 120. This step may also include inverting one or more of the selected inputs.


Step 1520 may also comprise sub-step 1520b in which a logical operator may be applied to the selected inputs. For example, the logical operator may be defined as described herein with respect to the discussion of FIG. 13.


In step 1530, the combinational logic 1110 may output the result of the Boolean expression that it was configured to implement. The output may be fed into the event engines 120 that had their outputs selected as inputs to be used in the Boolean expression. In this fashion, the event engines 120 may be chained together by the Boolean expression. This step may also include inverting the result.


In step 1540, the combinational logic 1110 may be re-configured to output the result of another Boolean expression, based on further data from the configuration RAM 110. This re-configuration may comprise changing the logical operator from the previous Boolean expression. It may also include changing which event engines 120 are chained. For example, it may include changing which outputs from the event engines 120 are selected as inputs to be used in the new Boolean expression. It may also include changing which event engines 120 receive the output of the combinational logic 120 (e.g., the result of the Boolean expression).


In step 1550, the combinational logic 1110 may output the result of the new Boolean expression to the event engines 120 that were selected to be chained in this state. The process 1500 may repeat steps 1540 and 1550 until all states are executed.



FIG. 16 illustrates an exemplary logical block diagram for implementing the combinational logic 1110 including various bits from a slave chain logic data structure 1200. The hit signals 325 from the event engines 120 may be input into the combinational logic 1110 by splitting a given hit signal 325 (e.g., hit 1) into two signals. One of the signals 325 may be fed directly into a tri-state buffer 1610 and the other may be input into an inverter 1615 before a tri-state buffer 1610. Bits 15:0 of the slave chain logic data structure 1200 may control the tri-state buffers 1610, whose outputs may be input to the NOR gate 1620. In this fashion, the hit signals 325 that have their bits set to “1” in the slave chain logic data structure 1200 may have their signals input to the NOR gate 1620.


The NOR gate 1620 may have its output split with one branch going directly into the MUX 1630 and the other branch first going through an inverter 1615. Bit 16 (e.g., the invert output bit) of the slave chain logic data structure 1200 may be used to select the final output of the combinational logic 1110. The present invention is not limited to the logical circuitry illustrated in FIG. 16 for implementing the combinational logic 1110.


Event System Architecture

Embodiments of the present invention are able to configure event engines 120 into multiple chains and reconfigure the chains on the fly. The event engines 120 may be allowed to run independently or may be chained in multiple chains. For example, the initial execution scheme may comprise two chains. The first chain may have two event engines 120 chained together with one monitoring for the PC to be outside a given range and the other event engine 120 monitoring for the accumulator going over a specified value. The second chain may comprise two other event engines 120 chained with one monitoring for a specified address being accessed and the other monitoring for a specific data value crossing the bus. If the first chain detects its condition (or combination of conditions for which its event engines 120 were configured to monitor), the configuration of the first two event engines 120 may be altered, without affecting the second two event engines 120. For example, if the PC goes out of range, the execution scheme may be re-configured by breaking the first chain. For example, the first two event engines 120 may execute independently to monitor two conditions that are different from when they were chained. As another example, in an initial execution scheme the event engines 120 may be monitoring for different conditions, but in a chained fashion, such that when any of them detects its condition, the execution scheme is modified. For example, the modification may be that all event engines 120 begin to execute independently, other chains of event engines 120 are formed, etc.


Referring now to FIG. 17, an event system architecture 1700 is illustrated. The event system architecture 1700 may have a number of event engines 120, which may be for monitoring conditions and may produce hit signals 325 in response to conditions being satisfied or events being detected. The event system architecture 1700 may have a chain logic 1710 comprising a number of combinational logics or chain logic blocks 1110 that input the hit signals 325. The event system architecture 1700 may also have a configuration RAM 110 for storing data to configure the chain logic blocks 1110 such that the chain logic blocks 1110 configure the execution scheme of the event engines 120. For example, the event engines 120 may be chained in any fashion or may execute independently.


Still referring the FIG. 17, the chain logic blocks 1110 may each output a chain logic signal 1125 to each event engine 120. If a given chain logic block 1110 is not currently chaining the execution of a given event engine 120 it may output a chain logic signal 1125 of “1”. In this fashion, the event engine 120 may be unaffected by the chain output signal 1125. For example, active event engines 120 may be run independently. By active event engines 120 it may be meant that a given event engine 120 is currently monitoring for a condition. Event engines 120 may be made active or inactive as described herein by setting, for example, a bit in the data block (e.g., bit 31 of FIG. 6 or FIG. 9) that may configure that event engine 120. The chain logic blocks 1110 may also configure the event engines 120 to form one or more chains of execution.


The chain logic blocks 1110 may be configured by data from the configuration RAM 110 to configure the execution scheme of the event engines 120. For example, each chain logic block 1110 may be configured to select certain hit signals 325 and form a Boolean expression with them. Each chain logic block 1110 may then output a chain logic signal 1125, which may be based on both the result of its Boolean expression and whether the event engine 120 to which the chain output signal 1125 is sent is to be chained. In this fashion, the chain output signals 1125 may chain the execution of the event engines 120.


In one embodiment, chain logic signals 1125 from the chain logic 1710 may be fed into the configuration RAM 110 (possibly though other logic that is not shown). The chain logic signals 1125 may be used to select the data that the configuration RAM 110 outputs to re-configure the chain logic 1710. However, this is not required. Event engine outputs (e.g., hit signals 325 or other signals from the event engines 120) may also be input to the configuration RAM 110 to select data from the configuration RAM 110. The data may be used to re-configure the chain logic 1710 and/or the event engines 120.


Embodiments that have at least one chain logic block 1110 for every two event engines 120 may configure the execution scheme of the event engines 120 in any fashion. Referring now to time 1 of FIG. 18A, the configuration may be a first chain logic block 1110a chaining a first group of event engines 120a, 120b, 120c while a second chain logic block 1110b does not chain any event engines 120. Event engine 120d may or may not be executing. Tables 1850-1870 of FIG. 18B illustrate the chain output signals 1125 that chain logic blocks 1110a and 1110b may output to event engines 120a-120d. As table 1850 shows, chain logic block 1110a may output to event engines 120a-120c the result of the Boolean expression for which it was configured to perform. It outputs a “1” to event engine 120d. Chain logic block 1110b outputs a “1” to event engines 120a-120d. In this fashion, chain logic block 1110b may have no effect on the event engines 120a-120d.


Referring again to FIG. 18A and now to time 2, the execution scheme may be the first and second chain logic blocks 1110a, 1110b chaining separate groups of event engines 120 (e.g., chain logic block 1110a chains event engines 120a and 120b, while chain logic block 1110b chains event engines 120c and 120d). Referring to table 1860 of FIG. 18B, chain logic block 1110a may output to event engines 120a and 120b a chain logic signal 1125 that may be equal to the Boolean expression (BE) it is configured to form at that time. Chain logic block 1110b may output to event engines 120c and 120d a chain logic signal 1125 that may be equal to the Boolean expression it is configured to form at that time. The chain logic blocks 1110a and 1110b output a “1” to other event engines 120 at this time.


Referring again to FIG. 18A, still another possibility is that neither the first nor the second chain logic block 1110a, 1110b chain the execution any of the event engines 120. For example, time 3 illustrates such a configuration, in which one or more of event engines 120a-120d are executing independently. Referring again to FIG. 18B, both chain logic blocks 1110a, 1110b may output chain logic signals 1125 of “1” to all event engines 120 at this time.


Another way of stating the execution scheme of the event engines 120 is that the chain logic blocks 1110 either configure the execution scheme of the event engines 120 to execute independently (e.g., as in time 3 of FIG. 18A) or the chain logic blocks 1110 configure at least two of the event engines 120 to execute together in a chain (e.g., as in times 1 and 2). When the execution scheme chains event engines 120, multitudes of possibilities exist. The states illustrated in FIG. 18A are not necessarily the states that each chain logic block 1110 and event engine 120 is presently in. Generally, not all event engines 120 and chain logic blocks 1110 will be in the same state. For example, during time 1 of FIG. 18, event engine 120d may be going through numerous states independently while event engines 120a-120c stay in their initial state until their condition is satisfied.


Embodiments of the present invention are well suited to other ratios of chain logic blocks 1110 to event engines 120 than a 1:2 ratio. Furthermore, embodiments may have many more then four event engines 120 and many more than two chain logic blocks 1110.


Referring now to Process 1900 of FIG. 19, an embodiment that provides a method of configuring event architecture 1700 will be described. In step 1910, data may be stored in the configuration RAM 110. The data to configure the chain logic 1710 may be formatted as illustrated FIG. 12, for example. The configuration of the chain logic 1710 may create the execution scheme (e.g., how the event engines 210 are chained, if at all). Thus, there may be a block in the configuration RAM 110 for each chain logic block 1110 for each state for which a given chain logic block 1110 is to be configured. The configuration RAM 110 may also be loaded with data such as illustrated in FIG. 6 or FIG. 9 to configure the execution of the event engines 210. The configuration of the event engines 210 may cause the event engines 210 to monitor for various conditions.


In step 1920, the chain logic 1710 may be configured with data from the configuration RAM 110 to configure the execution scheme of the event engines 120. The event engines 120 may be configured to execute independently or event engines 120 may be grouped into one or more chains. The event engines 120 may also be configured with data from the configuration RAM 110. The event engines 120 execute according to how they are configured to monitor conditions. As they detect conditions, they may output hit signals 325 and event engines 120 that are executing independently may proceed to further states, in which case they may be re-configured by additional data (e.g., a data block shown in FIG. 6 or FIG. 9) from the configuration RAM 110. However, this will not necessarily cause the configuration of the execution scheme of the event engines 120 to be altered. For example, event engines that were executing independently may continue to execute independently and those whose execution was chained may continue to execute in chained fashion.


In step 1930, the chain logic 1710 may be re-configured to implement a new execution scheme of the event engines 120, in response to one of the event engines 120 determining that a condition for which it was monitoring being satisfied. The event engine 120 may be one that whose execution was chained to another event engine 120. The re-configured execution scheme may take a number of forms. For example, if the original execution scheme had event engines 120 executing as a first chain, the re-configuration may be that at least one event engine 120 that constituted the first chain is to execute independently. In this case, the other event engines 120 in the first chain may form another chain, stop executing, execute independently, etc. Event engines 120 from the first chain forming a new chain may do so with only members of the first chain or with event engines 120 that were not part of the first chain.


The event engines 210 themselves may be re-configured as illustrated in steps 530-550 of FIG. 5 while the chain logic 1710 remains in the same configuration (e.g., while the execution scheme remains unchanged). Process 1900 may re-configure the execution scheme of the event engines 120 any number of times and in any fashion, as reflected in step 1940 by repeating step 1930. Eventually process 1900 may end when, for example, the chain logic 1710 does not need to be re-configured any more, based on data stored in the configuration RAM 110.



FIG. 20 illustrates another embodiment for configuring event architecture 1700. In step 2010 of Process 2000, data may be stored in the configuration RAM 110. The data may comprise a block (e.g., as illustrated in FIG. 12) for each state for each chain logic block 1110. Not all chain logic blocks 1110 need to be used at the same time. An unused chain logic block 1110 may be configured to have no effect on the event engines 120.


In step 2020, a first chain or combinational logic 1110 may be configured to chain the execution of a first group of event engines 120 for the first state for this chain logic block 1110. The first state data for the first chain logic block 1110 may be for configuring the first chain logic block 1110 to output the result of a Boolean expression formed from input signals 325 from selected event engines 120. Therefore, step 2020 may further comprise configuring the first chain logic block 1110 to output the result of a first Boolean expression for the first state.


In step 2030, a second chain logic block 1110 may be configured to chain the execution of a second group of event engines 120 for the first state for the second chain logic block 1110. Steps 2020 and 2030 may be undertaken essentially simultaneously. The execution scheme may have other event engines 120 executing independent of the two chains described in step 2020 and 2030. Step 2030 may further comprise configuring the second chain logic block 1110 to output the result of a second Boolean expression for the first state.


Step 2030 may further comprise outputting the result of the first and second Boolean expression from the first and second combinational logics 1110 to the first and second groups of event engines 120, wherein the first group of event engines 120 are chained by the first Boolean expression and the second group of event engines 120 are chained by the second Boolean expression.


In step 2040, the first chain logic block 1110 is re-configured to, in turn, re-configure the execution scheme of the first group of the event engines 210. This may be termed a second state of the first chain logic block 1110. The reconfiguration of the first group of event engines 120 may comprise: re-configuring at least one event engine 120 of the first group to run independently, forming a third chain comprising at least one event engine 120 from the first event engines 120 and at least on event engine 120 that is not one of the first event engines 120, etc.


Step 2040 may further comprise re-configuring the first combinational logic 1110 to output the result of a third Boolean expression for its second state. Step 1940 may further comprise outputting the result of the third Boolean expression to the third group of event engines 120, wherein the third group of event engines 120 is chained by the third Boolean expression. It is also possible that multiple combinational logics 1110 are re-configured at this time. However, it is not required that more than one chain logic block 1110 be re-configured at a time. In this fashion, the chain logic blocks 1110 do not necessarily step through their states in lock-step. However, embodiments do allow for lock-step operation.


In step 2050, the second chain logic block 1110 may be re-configured to alter the execution scheme. For example it may alter the way the second group of event engines 210 are chained. This may be termed a second state of the second chain logic block 1110. The re-configuration of the second group of event engines 120 may comprise: re-configuring the second combinational logic 1110 to chain the execution of a fourth group of the event engines 210 for the second state, wherein the fourth group comprises a different set of event engines 210 than the second group; re-configuring the second combinational logic 1110 to not chain the execution of any group of the event engines 210 for the second state, wherein only the first combinational logic 1110 chains the execution of the event engines 210; re-configuring the first and second combinational logics 1110 to not chain the execution of any group of the event engines 210 for the second state, wherein the event engines 210 execute independently, etc.


Each combinational logic 1110 may be re-configured as often as desired, as represented by step 2060. When no more reconfigurations are needed, as defined by the data in the configuration RAM 110, the process 2000 may end. Process 2000 may be modified to provide for additional combinational logics 1110.


External Interface to Event Architecture

Embodiments of the present invention provide external pins to a device that comprises the event architecture 1700, such that the event engines 120 may detect events external to the device. In addition, embodiments may be able to detect events that may be termed to occur within a device that houses the event architecture 1700. Furthermore, embodiments provide one or more external output pins, such that the event engines 120 may output signal(s) in response to events being detected. These events may be either internal or external to the device housing the event architecture 1700.



FIG. 21 illustrates an embodiment in which the event architecture 1700 resides in an in-circuit emulator (ICE) 2110. The system 2100 of FIG. 21 comprises an ICE 2110, which may be able to emulate a device under test 2120. The device under test 2120 may be a microcontroller; however, the present invention is not limited to testing microcontrollers. For example, the device under test 2120 may be a digital signal processor or another device. Thus, the ICE 2110 may emulate a microcontroller, with which it may interface via interface 2125. However, the present invention is not limited to emulating microcontrollers. The ICE 2110 may implement an emulated version 2135 of the device under test 2120 in the Field Programmable Gate Array (FPGA) 2130; however, the present invention is not limited to emulating the device under test 2120 in an FPGA 2130. The Verilog™ description language may be used to facilitate the implementation.


Using an example in which the device under test 2120 is a microcontroller, the FPGA 2130 may emulate core processor functionality of the microcontroller, such as, for example, microprocessor functions, Arithmetic Logic Unit functions, and RAM and ROM functions. However, the present invention is not limited to emulating core processor functions. The emulated device under test (DUT) 2135 may operate substantially analogously to the microcontroller or other DUT 2120. Emulating the microcontroller in the ICE 2110 may provide significant advantages, such as, for example, providing debugging tools, which may include readout of registers and memory locations, for example. Thus, the amount of debugging support that is built into the device under test 2120 (e.g., a microcontroller) may be minimized. However, information may be passed between the ICE 2110 and the microcontroller via interface 2125, for example, I/O read information, interrupt vectors, etc. may be passed over interface 2125 to the ICE 2110.


A device that provides an in-circuit emulator 2110 is described in co-pending U.S. patent application Ser. No. 09/975,030, filed Oct. 10, 2001, entitled “EMULATOR CHIP/BOARD ARCHITECTURE AND INTERFACE,” by Snyder et al., Now U.S. Pat. No. 7,076,420 and assigned to the assignee of the present invention, which is hereby incorporated by reference.


The FPGA 2130 may also comprise portions of the event architecture 1700. For example, the chain logic 1110 and the event engines 120 may reside in the FPGA 2130. The configuration RAM 110, which may also form a portion of the event architecture 1700, may reside in the ICE 2110 and be coupled to the FPGA 2130. The ICE 2110 may further comprise trace memory 2140, which may store information when the trace is on.


Still referring to FIG. 21, the ICE 2110 may have a number of external pins 2150 that may allow it to receive signals from an external device. The external pins 2150 may couple to the event engines 120 such that external events may be monitored. For example, in FIG. 21, the external pins 2150 may be coupled to a test/target circuit or circuit under test 2160. For example, the circuit under test 2160 may be a motor controller; however, this example is not limiting. The external pins 2150 may be used to monitor signals from the circuit under test 2160. Thus, in one embodiment, the external pins 2150 may function analogously to logic channels on a logic analyzer. However, unlike a conventional logic analyzer, embodiments of the present invention may react on a state-by-state basis to external events and change the configuration of the event engines 120 not only to look for different events on the external pins 2150, but also to look for different events that occur inside the ICE 2110. In another embodiment, the circuit under test 2160 may be replaced by a logic analyzer board.


In one embodiment, the signals on the external logic pins 2150 are automatically fed into the trace memory 2140 of the ICE 2110. Therefore, the state of events external to the ICE 2110 may be correlated to the state of events inside the ICE 2110. For example, the state of a device or circuit outside (e.g., circuit under test 2160) the ICE 2110 may be correlated to a portion of the code running when external events trigger.


Still referring to FIG. 21, the ICE 2110 may also include an external trigger pin 2170, which may be fed the output signal 115a from the external trigger logic 820 shown in FIG. 7. The ICE 2110 may have multiple external trigger pins 2170. Thus, one or more external devices may be controlled in response to the detection of events being monitored. For example, an event engine 120 may monitor for the program counter being in a certain range, and in response to the detection of that event, outputting a signal 115a, which may trigger an oscilloscope to capture data related to a circuit or device under test. While the external interface pins 2150, 2170 have been described as input or output pins, it will be clear to those of ordinary skill in the art that a pin may serve as both input and output.


By being able to monitor both internal events and external events, as well as being able to emulate a device under test 2120 and control devices with external trigger signal(s), embodiments of the present invention are able to provide the functionality of both an ICE 2110 and a logic analyzer. However, the example illustrated in FIG. 21, in which the device comprising event architecture 1700 with external interfaces is an ICE 2110, is not limiting. Embodiments of the present invention are well suited to other devices with external interfaces hosting the event architecture 1700. Furthermore, coupling the external pins 2150 to a circuit under test 2160 is not limiting; embodiments of the present invention are well suited to receiving signals from other devices via the external pins 2150.


Referring again to the embodiment illustrated in FIG. 4, the multiplexer 410 receives a number of signals 105, some of which may originate from within the device that houses the event architecture 1700 (e.g., the program counter, accumulator, etc.). However, the multiplexer 410 may also receive signals 105 that originate from outside the device that houses the event architecture 1700. For example, external logic pin signals 415 may originate from outside the device and may be received by the physical external pins 2150. Furthermore, some signals 105 may originate from the device under test 2120, such as a microcontroller. For example, I/O signals may originate from a microcontroller, although the present invention is not so limited. As discussed herein, the multiplexer 410 may be used to select which signals 105 are to be monitored for the occurrence of events or for conditions being satisfied.


As discussed herein, the device housing the event architecture 1700 may have any number of external interface pins 2150, 2170 and may monitor both internal and external events. By internal events, it may be meant that the events are related to the operation of the emulated DUT 2135 in the FPGA 2310. By external events, it may be meant that the events relate to information received on external interface pins 2150. However, the present invention is not limited to monitoring only such events. For example, the ICE 2110 may receive information from the device under test 2120 (e.g., a microcontroller) via interface 2125. The block diagram of FIG. 22 and the Process 2300 of FIG. 23 will now be discussed. In step 2310, a first event engine 210a monitors for a first event that occurs external to a device 2200 comprising the first event engine 210a. The event engine 210a may select one or more external logic pins 2150 as discussed herein.


In step 2320, a second event engine 210b monitors for a second event that occurs internal to the device 2200, which also comprises the second event engine 210b. In so doing, the second event engine 210b may select a signal 115, such as, for example, the value of the program counter (see, e.g., FIG. 4, FIG. 6, FIG. 9, and their associated descriptions). The second event engine may also receive the information relating to the program counter from a microcontroller under test via the interface 2125. The execution of the first and second event engines 210a, 210b may be chained by one or more chain logic blocks 1110 as discussed herein; however, they may also execute independently.


The device housing the event engines 210 may also be performing emulation. For example, the ICE 2110 may be emulating a device under test 2120. In this case, the signal 105 that is input to the event engine 210 may be a signal 105 related to the emulated DUT 2135. However, the signal 105 may also originate from an actual DUT 2120, for example a microcontroller.


In step 2330, the first event engine 210a may output a trigger signal(s) 115a on one or more of the external trigger pins 2170, in response to the external event for which it was monitoring being detected.


In optional step 2340, the second event engine 210b may output a trigger signal(s) 115a on one or more of the external trigger pins 2170, in response to the internal event for which it was monitoring being detected. Thus, trigger signals 115a may be issued based on internal or external events. Also, the device 2200 housing the event architecture may have any number of external trigger pins 2170.


In step 2350, the first event engine 210a may be re-configured to monitor for a third event, which may be an internal or an external event. Thus, the first event engine 210a may input any of the internal signals 105i or any of the signals from the external logic pins 2150.


In step 2360, the second event engine 210a may be re-configured to monitor for a fourth event, which may be an internal or an external event. Thus, the second event engine 210b may input any of the internal signals 105i or any of the signals from the external logic pins 2150. Process 2300 may then end. Additional steps may be inserted in Process 2300 such as, for example, steps for monitoring for additional events, etc.


Process 2300 may be modified to execute only selected steps thereof, such as, for example, not performing step 2310 of monitoring for external events. Thus, embodiments provide for a process in which an event engine 210 outputs an signal 115a on an external trigger pin 2170, in response to internal events only, as illustrated in steps 2320 and 2340.


The preferred embodiment of the present invention, an interface for event architecture, is thus described. While the present invention has been described in particular embodiments, it should be appreciated that the present invention should not be construed as limited by such embodiments, but rather construed according to the below claims.

Claims
  • 1. A device comprising: a programmable event engine for executing an event thread and further for detecting events in accordance with a plurality of programmable states of said event thread;a memory coupled to said event engine and for storing said plurality of programmable states of said event thread, wherein said plurality of programmable states are for re-configuring said event engine in response to detecting one of said events during execution of said event thread, and wherein said re-configuring said event engine comprises changing at least one condition used by said event engine to detect said events; andwherein said event engine is further for monitoring a first signal on a first external pin, wherein said event engine is further operable to detect a first event in accordance with a first programmable state of said plurality of programmable states, wherein said event engine is further operable to change from operation in accordance with the first programmable state to operation in accordance with a second programmable state of said plurality of programmable states in response to detecting the first event, wherein said event engine is configured to change from operation in accordance with the first programmable state to operation in accordance with a second programmable state by loading data from the memory, wherein said event engine is further operable to detect a second event when operating in accordance the second programmable state, and wherein said event engine is further operable to detect said first and second events contemporaneously with said execution of said event thread, andwherein said event engine is further operable to generate an output signal in response to detection of said first event.
  • 2. The device of claim 1, wherein said output signal is a trigger signal.
  • 3. The device of claim 1 further comprising: a logic component coupled to said memory and for implementing at least one of said plurality of programmable states.
  • 4. The device of claim 1, wherein said event engine is further operable to monitor a second signal on a second external pin, and wherein said first event comprises a multi-signal external event associated with said first signal and said second signal.
  • 5. The device of claim 1, wherein said event engine is further operable to monitor a second signal on a second external pin, wherein said first event comprises a signal-specific external event associated with said first signal, and wherein said second event comprises a signal-specific external event associated with said second signal.
  • 6. The device of claim 1, wherein said event engine is further operable to access at least one internal signal originating from within said device, and wherein said event engine is further for monitoring said at least one internal signal and further for detecting at least one event associated with said at least one internal signal.
  • 7. The device of claim 6, wherein said internal signal is related to an emulated device under test.
  • 8. The device of claim 7, wherein said device is an in-circuit-emulator (ICE).
  • 9. The device of claim 8, wherein said first external pin is for coupling to a circuit under test.
  • 10. The device of claim 1, further comprising: an additional event engine for detecting said events, wherein said device comprises a plurality of event engines; andwherein said additional event engine is coupled to a plurality of internal signals originating from within said device, and wherein said additional event engine is for monitoring at least one of said internal signals to detect internal events of said events.
  • 11. The device of claim 10, wherein said device is operable to emulate a device under test, and wherein said plurality of internal signals comprise information related to emulation of said device under test.
  • 12. The device of claim 11, further comprising: at least one chain logic block for implementing an execution scheme of said plurality of event engines.
  • 13. An event architecture device with external interface, said event architecture device comprising: a programmable event engine for detecting events based upon an execution of an event thread;a memory coupled to said event engine and for storing data for programming said event engine to detect said events, wherein said data comprises a plurality of programmable states of said event thread, and wherein said plurality of programmable states are for re-configuring said programmable event engine in response to detecting one of said events during execution of said event thread, and wherein said reconfiguring said programmable event engine comprises changing at least one condition used by said programmable event engine to detect said events;an external pin coupled to said event engine; andwherein said event engine is further for outputting a signal on said external pin in response to detecting a first event of said events, and wherein said event engine is configured to change from operation in accordance with a first programmable state to operation in accordance with a second programmable state by loading data from the memory.
  • 14. The device of claim 13 further comprising: at least one additional external pin coupled to said event engine; andwherein said event engine is further for outputting a signal on at least one external pin in response to detecting a second event of said events, wherein said at least one external pin is selected from a group consisting of said external pin and said at least one additional external pin.
  • 15. The device of claim 13 further comprising: an additional event engine for detecting said events and coupled to said memory; and wherein said additional event engine is for outputting a signal on said external pin in response to detecting said second event of said events.
  • 16. The device of claim 15 further comprising: at least one chain logic block for implementing an execution scheme of plurality of event engines.
  • 17. The device of claim 13, wherein said device is operable to emulate a device under test, and wherein said events comprise information related to said device under test.
  • 18. The device of claim 17, wherein said information is further related to emulation of said device under test.
  • 19. A method of monitoring events, said method comprising: monitoring a first pin using a first programmable event engine, wherein said first pin provides an external interface to a device comprising said first programmable event engine;detecting, using said first programmable event engine, a first event on said first pin in accordance with a first programmable state of an event thread;outputting a signal from said first programmable event engine in response to said detecting said first event; andin response to detecting the first event, re-configuring said first programmable event engine to monitor for a second event in accordance with a second programmable state of said event thread, wherein said re-configuring said first programmable event engine further comprises changing at least one condition used by said first programmable event engine to monitor for said second event, and wherein said re-configuring said first programmable event engine further comprises loading data from a memory coupled to said first programmable event engine to change from operation in accordance with said first programmable state to operation in accordance with said second programmable state.
  • 20. The method of claim 19, wherein said outputting said signal comprises outputting said signal from said first programmable event engine to a second pin providing an external interface to said device.
  • 21. The method of claim 20, wherein said outputting said signal further comprises triggering a device external to said device.
  • 22. The method of claim 19 further comprising: monitoring for a third event which occurs internal to said device using a second programmable event engine, wherein said device monitors for both internal and external events, wherein said third event is related to operation of an emulated device under test.
  • 23. The method of claim 22 further comprising: emulating a device under test.
  • 24. The method of claim 23, wherein said monitoring for said third event comprises monitoring a signal comprising information related to emulation of said device under test using said second programmable event engine.
  • 25. The method of claim 22 further comprising: re-configuring said second programmable event engine to monitor for a fourth event.
  • 26. The method of claim 25 further comprising: chaining the execution of said first and second event engines, wherein said device is operable to correlate said external event and said internal event.
  • 27. A method comprising: detecting the occurrence of a first condition using a first programmable event engine, wherein said detecting further comprises detecting occurrence of said first condition in accordance with a first programmable state of an event thread;in response to detecting said first condition, outputting a signal from said first programmable event engine to a pin providing an external interface to a device comprising said first programmable event engine; andin response to detecting occurrence of said first condition, re-configuring said first programmable event engine, in accordance with a second programmable state of said event thread, to detect the occurrence of a second condition, wherein said re-configuring comprises loading data from a memory coupled to said first programmable event engine to change from operation in accordance with said first programmable state to operation in accordance with said second programmable state.
  • 28. The method of claim 27, wherein said outputting said signal further comprises triggering a device external to said device comprising said first programmable event engine.
  • 29. The method of claim 27 further comprising: emulating a device under test.
  • 30. The method of claim 29, wherein said detecting further comprises monitoring a signal comprising information related to emulation of said device under test using said first programmable event engine.
US Referenced Citations (1210)
Number Name Date Kind
3600690 White Aug 1971 A
3725804 Langan Apr 1973 A
3740588 Stratton et al. Jun 1973 A
3805245 Brooks et al. Apr 1974 A
3810036 Bloedom May 1974 A
3831113 Ahmed Aug 1974 A
3845328 Hollingsworth Oct 1974 A
3940760 Brokaw Feb 1976 A
4061987 Nagahama Dec 1977 A
4134073 MacGregor Jan 1979 A
4138671 Comer et al. Feb 1979 A
4176258 Jackson Nov 1979 A
4250464 Schade, Jr. Feb 1981 A
4272760 Prazak et al. Jun 1981 A
4283713 Philipp Aug 1981 A
4326135 Jarrett et al. Apr 1982 A
4344067 Lee Aug 1982 A
4380083 Andersson et al. Apr 1983 A
4438404 Philipp Mar 1984 A
4475151 Philipp Oct 1984 A
4497575 Philipp Feb 1985 A
4604363 Newhouse et al. Aug 1986 A
4608502 Dijkmans et al. Aug 1986 A
4656603 Dunn Apr 1987 A
4670838 Kawata Jun 1987 A
4689740 Moelands et al. Aug 1987 A
4692718 Roza et al. Sep 1987 A
4701907 Collins Oct 1987 A
4727541 Mori et al. Feb 1988 A
4736097 Philipp Apr 1988 A
4740966 Goad Apr 1988 A
4755766 Metz Jul 1988 A
4773024 Faggin et al. Sep 1988 A
4794558 Thompson Dec 1988 A
4802103 Faggin et al. Jan 1989 A
4802119 Heene et al. Jan 1989 A
4807183 Kung et al. Feb 1989 A
4809345 Tabata et al. Feb 1989 A
4812684 Yamagiwa et al. Mar 1989 A
4813013 Dunn Mar 1989 A
4814646 Hoberman et al. Mar 1989 A
4827401 Hrustich et al. May 1989 A
4831546 Mitsuta et al. May 1989 A
4833418 Quintus et al. May 1989 A
4868525 Dias Sep 1989 A
4876466 Kondou et al. Oct 1989 A
4876534 Mead et al. Oct 1989 A
4878200 Asghar et al. Oct 1989 A
4879461 Philipp Nov 1989 A
4879688 Turner et al. Nov 1989 A
4885484 Gray Dec 1989 A
4907121 Hrassky Mar 1990 A
4935702 Mead et al. Jun 1990 A
4939637 Pawloski Jul 1990 A
4942540 Black et al. Jul 1990 A
4947169 Smith et al. Aug 1990 A
4953928 Anderson et al. Sep 1990 A
4962342 Mead et al. Oct 1990 A
4964074 Suzuki et al. Oct 1990 A
4969087 Tanagawa et al. Nov 1990 A
4970408 Hanke et al. Nov 1990 A
4972372 Ueno Nov 1990 A
4977381 Main Dec 1990 A
4980652 Tarusawa et al. Dec 1990 A
4999519 Kitsukawa et al. Mar 1991 A
5043674 Bonaccio et al. Aug 1991 A
5049758 Mead et al. Sep 1991 A
5050168 Paterson Sep 1991 A
5053949 Allison et al. Oct 1991 A
5055827 Philipp Oct 1991 A
5059920 Anderson et al. Oct 1991 A
5068622 Mead et al. Nov 1991 A
5073759 Mead et al. Dec 1991 A
5083044 Mead et al. Jan 1992 A
5088822 Kanda Feb 1992 A
5095284 Mead Mar 1992 A
5097305 Mead et al. Mar 1992 A
5099191 Galler et al. Mar 1992 A
5107146 El-Ayat Apr 1992 A
5107149 Platt et al. Apr 1992 A
5109261 Mead et al. Apr 1992 A
5119038 Anderson et al. Jun 1992 A
5120996 Mead et al. Jun 1992 A
5122800 Philipp Jun 1992 A
5126685 Platt et al. Jun 1992 A
5127103 Hill et al. Jun 1992 A
5128871 Schmitz Jul 1992 A
5136188 Ha et al. Aug 1992 A
5140197 Grider Aug 1992 A
5142247 Lada et al. Aug 1992 A
5144582 Steele Sep 1992 A
5146106 Anderson et al. Sep 1992 A
5150079 Williams et al. Sep 1992 A
5155836 Jordan et al. Oct 1992 A
5159292 Canfield et al. Oct 1992 A
5159335 Veneruso Oct 1992 A
5160899 Anderson et al. Nov 1992 A
5161124 Love Nov 1992 A
5165054 Platt et al. Nov 1992 A
5166562 Allen et al. Nov 1992 A
5175884 Suarez Dec 1992 A
5179531 Yamaki Jan 1993 A
5184061 Lee et al. Feb 1993 A
5198817 Walden et al. Mar 1993 A
5200751 Smith Apr 1993 A
5202687 Distinti Apr 1993 A
5204549 Platt et al. Apr 1993 A
5206582 Ekstedt et al. Apr 1993 A
5220512 Watkins et al. Jun 1993 A
5225991 Dougherty Jul 1993 A
5230000 Mozingo et al. Jul 1993 A
5235617 Mallard, Jr. Aug 1993 A
5241492 Girardeau, Jr. Aug 1993 A
5243554 Allen et al. Sep 1993 A
5245262 Moody et al. Sep 1993 A
5248843 Billings Sep 1993 A
5248873 Allen et al. Sep 1993 A
5258760 Moody et al. Nov 1993 A
5260592 Mead et al. Nov 1993 A
5260979 Parker et al. Nov 1993 A
5270963 Allen et al. Dec 1993 A
5276407 Mead et al. Jan 1994 A
5276739 Krokstad et al. Jan 1994 A
5276890 Arai Jan 1994 A
5280199 Itakura Jan 1994 A
5280202 Chan et al. Jan 1994 A
5289023 Mead Feb 1994 A
5303329 Mead et al. Apr 1994 A
5304955 Atriss et al. Apr 1994 A
5305017 Gerpheide Apr 1994 A
5305312 Fornek et al. Apr 1994 A
5307381 Ahuja Apr 1994 A
5313618 Pawloski May 1994 A
5317202 Waizman May 1994 A
5319370 Signore et al. Jun 1994 A
5319771 Takeda Jun 1994 A
5321828 Phillips et al. Jun 1994 A
5324958 Mead et al. Jun 1994 A
5325512 Takahashi Jun 1994 A
5329471 Swoboda et al. Jul 1994 A
5331215 Allen et al. Jul 1994 A
5331315 Crosette Jul 1994 A
5331571 Aronoff et al. Jul 1994 A
5334952 Maddy et al. Aug 1994 A
5335342 Pope et al. Aug 1994 A
5336936 Allen et al. Aug 1994 A
5339213 O'Callaghan Aug 1994 A
5339262 Rostoker et al. Aug 1994 A
5341044 Ahanin et al. Aug 1994 A
5341267 Whitten Aug 1994 A
5345195 Cordoba et al. Sep 1994 A
5349303 Gerpheide Sep 1994 A
5355097 Scott et al. Oct 1994 A
5357626 Johnson et al. Oct 1994 A
5361290 Akiyama Nov 1994 A
5371524 Herczeg et al. Dec 1994 A
5371860 Mura et al. Dec 1994 A
5371878 Coker Dec 1994 A
5371883 Gross et al. Dec 1994 A
5374787 Miller et al. Dec 1994 A
5377333 Nakagoshi et al. Dec 1994 A
5378935 Korhonen et al. Jan 1995 A
5381515 Platt et al. Jan 1995 A
5384467 Plimon et al. Jan 1995 A
5384745 Konishi et al. Jan 1995 A
5384910 Torres Jan 1995 A
5390173 Spinney et al. Feb 1995 A
5392784 Gudaitis Feb 1995 A
5394522 Sanchez-Frank et al. Feb 1995 A
5396245 Rempfer Mar 1995 A
5398261 Marbot Mar 1995 A
5399922 Kiani et al. Mar 1995 A
5408194 Steinbach et al. Apr 1995 A
5408235 Doyle et al. Apr 1995 A
5414308 Lee et al. May 1995 A
5414380 Floyd et al. May 1995 A
5416895 Anderson et al. May 1995 A
5422823 Agrawal et al. Jun 1995 A
5424689 Gillig et al. Jun 1995 A
5426378 Ong Jun 1995 A
5426384 May Jun 1995 A
5428319 Marvin et al. Jun 1995 A
5430395 Ichimaru Jul 1995 A
5430687 Hung et al. Jul 1995 A
5430734 Gilson Jul 1995 A
5432476 Tran Jul 1995 A
5438672 Dey Aug 1995 A
5440305 Signore et al. Aug 1995 A
5448496 Butts et al. Sep 1995 A
5451887 El-Avat et al. Sep 1995 A
5453904 Higashiyama et al. Sep 1995 A
5455525 Ho et al. Oct 1995 A
5455731 Parkinson Oct 1995 A
5455927 Huang Oct 1995 A
5457410 Ting Oct 1995 A
5457479 Cheng Oct 1995 A
5463591 Aimoto et al. Oct 1995 A
5479603 Stone et al. Dec 1995 A
5479643 Bhaskar et al. Dec 1995 A
5479652 Dreyer et al. Dec 1995 A
5481471 Naglestad Jan 1996 A
5488204 Mead et al. Jan 1996 A
5491458 McCune Feb 1996 A
5493246 Anderson Feb 1996 A
5493723 Beck et al. Feb 1996 A
5495077 Miller et al. Feb 1996 A
5495593 Elmer et al. Feb 1996 A
5495594 MacKenna et al. Feb 1996 A
5497119 Tedrow et al. Mar 1996 A
5499192 Knapp et al. Mar 1996 A
5500823 Martin et al. Mar 1996 A
5517198 McEwan May 1996 A
5519854 Watt May 1996 A
5521529 Agrawal et al. May 1996 A
5530444 Tice et al. Jun 1996 A
5530673 Tobita et al. Jun 1996 A
5530813 Paulsen et al. Jun 1996 A
5537057 Leong et al. Jul 1996 A
5541878 LeMoncheck et al. Jul 1996 A
5542055 Amini et al. Jul 1996 A
5543588 Bisset et al. Aug 1996 A
5543590 Gillespie et al. Aug 1996 A
5543591 Gillespie et al. Aug 1996 A
5544067 Rostoker et al. Aug 1996 A
5544311 Harenberg et al. Aug 1996 A
5546433 Tran et al. Aug 1996 A
5546562 Patel Aug 1996 A
5552725 Ray et al. Sep 1996 A
5552748 O'Shaughnessy Sep 1996 A
5554951 Gough Sep 1996 A
5555452 Callaway et al. Sep 1996 A
5555907 Philipp Sep 1996 A
5557762 Okuaki et al. Sep 1996 A
5559502 Schutte Sep 1996 A
5559996 Fujioka et al. Sep 1996 A
5563526 Hastings et al. Oct 1996 A
5563529 Seltzer et al. Oct 1996 A
5564010 Henry et al. Oct 1996 A
5564108 Hunsaker et al. Oct 1996 A
5565658 Gerpheide et al. Oct 1996 A
5566702 Philipp Oct 1996 A
5572665 Nakabayashi et al. Nov 1996 A
5572719 Biesterfeldt Nov 1996 A
5574678 Gorecki Nov 1996 A
5574852 Bakker et al. Nov 1996 A
5574892 Christensen Nov 1996 A
5579353 Parmenter et al. Nov 1996 A
5587945 Lin et al. Dec 1996 A
5587957 Kowalczyk et al. Dec 1996 A
5590354 Klapproth et al. Dec 1996 A
5594388 O'Shaughnessy et al. Jan 1997 A
5594734 Worsley et al. Jan 1997 A
5594876 Getzlaff et al. Jan 1997 A
5594890 Yamaura et al. Jan 1997 A
5600262 Kolze Feb 1997 A
5604466 Dreps et al. Feb 1997 A
5608892 Wakerly Mar 1997 A
5614861 Harada Mar 1997 A
5623500 Whetsel, Jr. Apr 1997 A
5625316 Chambers et al. Apr 1997 A
5625583 Hyatt Apr 1997 A
5629857 Brennan May 1997 A
5629891 LeMoncheck et al. May 1997 A
5630052 Shah May 1997 A
5630057 Hait May 1997 A
5630102 Johnson et al. May 1997 A
5631577 Freidin et al. May 1997 A
5633766 Hase et al. May 1997 A
5642295 Smayling Jun 1997 A
5646544 Iadanza Jul 1997 A
5646901 Sharpe-Geisler et al. Jul 1997 A
5648642 Miller et al. Jul 1997 A
5651035 Tozun Jul 1997 A
5652893 Ben-Meir et al. Jul 1997 A
5661433 LaRosa et al. Aug 1997 A
5663900 Bhandari et al. Sep 1997 A
5663965 Seymour Sep 1997 A
5664199 Kuwahara Sep 1997 A
5666480 Leung et al. Sep 1997 A
5670915 Cooper et al. Sep 1997 A
5673198 Lawman et al. Sep 1997 A
5675825 Dreyer et al. Oct 1997 A
5677691 Hosticka et al. Oct 1997 A
5680070 Anderson et al. Oct 1997 A
5682032 Philipp Oct 1997 A
5684434 Mann et al. Nov 1997 A
5684721 Swoboda et al. Nov 1997 A
5684952 Stein Nov 1997 A
5686844 Hull et al. Nov 1997 A
5687325 Chang Nov 1997 A
5689195 Cliff et al. Nov 1997 A
5689196 Schutte Nov 1997 A
5691664 Anderson et al. Nov 1997 A
5691898 Rosenberg et al. Nov 1997 A
5694063 Burlison et al. Dec 1997 A
5696952 Pontarelli Dec 1997 A
5699024 Manlove et al. Dec 1997 A
5703871 Pope et al. Dec 1997 A
5706453 Cheng et al. Jan 1998 A
5708589 Beauvais Jan 1998 A
5708798 Lynch et al. Jan 1998 A
5710906 Ghosh et al. Jan 1998 A
5712969 Zimmermann et al. Jan 1998 A
5721931 Gephardt et al. Feb 1998 A
5724009 Collins et al. Mar 1998 A
5727170 Mitchell et al. Mar 1998 A
5728933 Schultz et al. Mar 1998 A
5729704 Stone et al. Mar 1998 A
5730165 Philipp Mar 1998 A
5732277 Kodosky et al. Mar 1998 A
5734272 Belot et al. Mar 1998 A
5734334 Hsieh et al. Mar 1998 A
5737557 Sullivan Apr 1998 A
5737760 Grimmer et al. Apr 1998 A
5745011 Scott Apr 1998 A
5748048 Moyal May 1998 A
5748875 Tzori May 1998 A
5752013 Christensen et al. May 1998 A
5754552 Allmond et al. May 1998 A
5754826 Gamal et al. May 1998 A
5757368 Gerpheide et al. May 1998 A
5758058 Milburn May 1998 A
5761128 Watanabe Jun 1998 A
5763909 Mead et al. Jun 1998 A
5764714 Stansell et al. Jun 1998 A
5767457 Gerpheide et al. Jun 1998 A
5774704 Williams Jun 1998 A
5777399 Shibuya Jul 1998 A
5781030 Agrawal et al. Jul 1998 A
5781747 Smith et al. Jul 1998 A
5784545 Anderson et al. Jul 1998 A
5790957 Heidari Aug 1998 A
5796183 Hourmand Aug 1998 A
5799176 Kapusta et al. Aug 1998 A
5801958 Dangelo et al. Sep 1998 A
5802073 Platt Sep 1998 A
5802290 Casselman Sep 1998 A
5805792 Swoboda et al. Sep 1998 A
5805897 Glowny Sep 1998 A
5808883 Hawkes Sep 1998 A
5811987 Ashmore, Jr. et al. Sep 1998 A
5812698 Platt et al. Sep 1998 A
5818254 Agrawal et al. Oct 1998 A
5818444 Alimpich et al. Oct 1998 A
5818736 Leibold Oct 1998 A
5819028 Manghirmalani et al. Oct 1998 A
5822387 Mar Oct 1998 A
5822531 Gorczyca et al. Oct 1998 A
5828693 Mays et al. Oct 1998 A
5829054 Ehlig et al. Oct 1998 A
5838583 Varadarajan et al. Nov 1998 A
5841078 Miller et al. Nov 1998 A
5841996 Nolan et al. Nov 1998 A
5844256 Mead et al. Dec 1998 A
5844404 Caser et al. Dec 1998 A
5848285 Kapusta et al. Dec 1998 A
5850156 Wittman Dec 1998 A
5852733 Chien et al. Dec 1998 A
5854625 Frisch et al. Dec 1998 A
5857109 Taylor Jan 1999 A
5861583 Schediwy et al. Jan 1999 A
5861875 Gerpheide Jan 1999 A
5864242 Allen et al. Jan 1999 A
5864392 Winklhofer et al. Jan 1999 A
5867046 Sugasawa Feb 1999 A
5867399 Rostoker et al. Feb 1999 A
5869979 Bocchino Feb 1999 A
5870004 Lu Feb 1999 A
5870309 Lawman Feb 1999 A
5870345 Stecker Feb 1999 A
5872464 Gradinariu Feb 1999 A
5874958 Ludolph Feb 1999 A
5875293 Bell et al. Feb 1999 A
5877656 Mann et al. Mar 1999 A
5878425 Redpath Mar 1999 A
5880411 Gillespie et al. Mar 1999 A
5880598 Duong Mar 1999 A
5883623 Cseri Mar 1999 A
5886582 Stansell Mar 1999 A
5887189 Birns et al. Mar 1999 A
5889236 Gillespie et al. Mar 1999 A
5889723 Pascucci Mar 1999 A
5889936 Chan Mar 1999 A
5889988 Held Mar 1999 A
5894226 Koyama Apr 1999 A
5894243 Hwang Apr 1999 A
5894565 Furtek et al. Apr 1999 A
5895494 Scalzi et al. Apr 1999 A
5896068 Moyal Apr 1999 A
5896330 Gibson Apr 1999 A
5898345 Namura et al. Apr 1999 A
5900780 Hirose et al. May 1999 A
5901062 Burch et al. May 1999 A
5903718 Marik May 1999 A
5905398 Todsen et al. May 1999 A
5909544 Anderson, II et al. Jun 1999 A
5911059 Profit, Jr. Jun 1999 A
5914465 Allen et al. Jun 1999 A
5914633 Comino et al. Jun 1999 A
5914708 LaGrange et al. Jun 1999 A
5917356 Casal et al. Jun 1999 A
5920310 Faggin et al. Jul 1999 A
5923264 Lavelle et al. Jul 1999 A
5926566 Wang et al. Jul 1999 A
5929710 Bien Jul 1999 A
5930148 Bjorksten et al. Jul 1999 A
5930150 Cohen et al. Jul 1999 A
5931959 Kwiat Aug 1999 A
5933023 Young Aug 1999 A
5933356 Rostoker et al. Aug 1999 A
5933816 Zeanah et al. Aug 1999 A
5935233 Jeddeloh Aug 1999 A
5935266 Thurnhofer et al. Aug 1999 A
5939904 Fetterman et al. Aug 1999 A
5939949 Olgaard et al. Aug 1999 A
5941991 Kageshima Aug 1999 A
5942733 Allen et al. Aug 1999 A
5943052 Allen et al. Aug 1999 A
5945878 Westwick et al. Aug 1999 A
5949632 Barreras, Sr. et al. Sep 1999 A
5951704 Sauer et al. Sep 1999 A
5952888 Scott Sep 1999 A
5956279 Mo et al. Sep 1999 A
5959871 Pierzchala et al. Sep 1999 A
5963075 Hiiragizawa Oct 1999 A
5963105 Nguyen Oct 1999 A
5963503 Lee Oct 1999 A
5964893 Circello et al. Oct 1999 A
5966027 Kapusta et al. Oct 1999 A
5966532 McDonald et al. Oct 1999 A
5968135 Teramoto et al. Oct 1999 A
5969513 Clark Oct 1999 A
5969632 Diamant et al. Oct 1999 A
5973368 Pearce et al. Oct 1999 A
5974235 Nunally et al. Oct 1999 A
5977791 Veenstra Nov 1999 A
5978584 Nishibata et al. Nov 1999 A
5978937 Miyamori et al. Nov 1999 A
5982105 Masters Nov 1999 A
5982229 Wong et al. Nov 1999 A
5982241 Nguyen et al. Nov 1999 A
5983277 Heile et al. Nov 1999 A
5986479 Mohan Nov 1999 A
5987246 Thomsen et al. Nov 1999 A
5988902 Holehan Nov 1999 A
5994939 Johnson et al. Nov 1999 A
5996032 Baker Nov 1999 A
5999725 Barbier et al. Dec 1999 A
6002268 Sasaki et al. Dec 1999 A
6002398 Wilson Dec 1999 A
6003054 Oshima et al. Dec 1999 A
6003107 Ranson et al. Dec 1999 A
6003133 Moughanni et al. Dec 1999 A
6005814 Mulholland et al. Dec 1999 A
6005904 Knapp et al. Dec 1999 A
6008685 Kunst Dec 1999 A
6008703 Perrott et al. Dec 1999 A
6009270 Mann Dec 1999 A
6009496 Tsai Dec 1999 A
6011407 New Jan 2000 A
6012835 Thompson et al. Jan 2000 A
6014135 Fernandes Jan 2000 A
6014509 Furtek et al. Jan 2000 A
6014723 Tremblay et al. Jan 2000 A
6016554 Skrovan et al. Jan 2000 A
6016563 Fleisher Jan 2000 A
6018559 Azegami et al. Jan 2000 A
6023422 Allen et al. Feb 2000 A
6023565 Lawman et al. Feb 2000 A
6026134 Duffy et al. Feb 2000 A
6026501 Hohl et al. Feb 2000 A
6028271 Gillespie et al. Feb 2000 A
6028959 Wang et al. Feb 2000 A
6031365 Sharpe-Geisler Feb 2000 A
6032268 Swoboda et al. Feb 2000 A
6034538 Abramovici Mar 2000 A
6035320 Kiriaki et al. Mar 2000 A
6037807 Wu et al. Mar 2000 A
6038551 Barlow et al. Mar 2000 A
6041406 Mann Mar 2000 A
6043695 O'Sullivan Mar 2000 A
6043719 Lin et al. Mar 2000 A
6049223 Lytle et al. Apr 2000 A
6049225 Huang et al. Apr 2000 A
6051772 Cameron et al. Apr 2000 A
6052035 Nolan et al. Apr 2000 A
6052524 Pauna Apr 2000 A
6055584 Bridges et al. Apr 2000 A
6057705 Wojewoda et al. May 2000 A
6058263 Voth May 2000 A
6058452 Rangasayee et al. May 2000 A
6061511 Marantz et al. May 2000 A
6066961 Lee et al. May 2000 A
6070003 Gove et al. May 2000 A
6072803 Allmond et al. Jun 2000 A
6075941 Itoh et al. Jun 2000 A
6079985 Wohl et al. Jun 2000 A
6081140 King Jun 2000 A
6094730 Lopez et al. Jul 2000 A
6097211 Couts-Martin et al. Aug 2000 A
6097432 Mead et al. Aug 2000 A
6101457 Barch et al. Aug 2000 A
6101617 Burckhartt et al. Aug 2000 A
6104217 Magana Aug 2000 A
6104325 Liaw et al. Aug 2000 A
6107769 Saylor et al. Aug 2000 A
6107826 Young et al. Aug 2000 A
6107882 Gabara et al. Aug 2000 A
6110223 Southgate et al. Aug 2000 A
6111431 Estrada Aug 2000 A
6112264 Beasley et al. Aug 2000 A
6121791 Abbott Sep 2000 A
6121805 Thamsirianunt et al. Sep 2000 A
6121965 Kenney et al. Sep 2000 A
6125416 Warren Sep 2000 A
6130548 Koifman Oct 2000 A
6130551 Agrawal et al. Oct 2000 A
6130552 Jefferson et al. Oct 2000 A
6133773 Garlepp et al. Oct 2000 A
6134181 Landry Oct 2000 A
6134516 Wang et al. Oct 2000 A
6137308 Nayak Oct 2000 A
6140853 Lo Oct 2000 A
6141376 Shaw Oct 2000 A
6141764 Ezell Oct 2000 A
6144327 Distinti et al. Nov 2000 A
6148104 Wang et al. Nov 2000 A
6148441 Woodward Nov 2000 A
6149299 Aslan et al. Nov 2000 A
6150866 Eto et al. Nov 2000 A
6154064 Proebsting Nov 2000 A
6157024 Chapdelaine et al. Dec 2000 A
6157270 Tso Dec 2000 A
6161199 Szeto et al. Dec 2000 A
6166367 Cho Dec 2000 A
6166960 Marneweck et al. Dec 2000 A
6167077 Ducaroir Dec 2000 A
6167364 Stellenberg et al. Dec 2000 A
6167559 Furtek et al. Dec 2000 A
6169383 Sabin et al. Jan 2001 B1
6172428 Jordan Jan 2001 B1
6172571 Moyal et al. Jan 2001 B1
6173419 Barnett Jan 2001 B1
6175914 Mann Jan 2001 B1
6175949 Gristede et al. Jan 2001 B1
6181163 Agrawal et al. Jan 2001 B1
6183131 Holloway et al. Feb 2001 B1
6185127 Myers et al. Feb 2001 B1
6185450 Seguine et al. Feb 2001 B1
6185522 Bakker Feb 2001 B1
6185703 Guddat et al. Feb 2001 B1
6185732 Mann et al. Feb 2001 B1
6188228 Philipp Feb 2001 B1
6188241 Gauthier et al. Feb 2001 B1
6188381 van der Wal et al. Feb 2001 B1
6188391 Seely et al. Feb 2001 B1
6188975 Gay Feb 2001 B1
6191603 Muradali et al. Feb 2001 B1
6191660 Mar et al. Feb 2001 B1
6191998 Reddy et al. Feb 2001 B1
6192431 Dabral et al. Feb 2001 B1
6198303 Rangasayee Mar 2001 B1
6201407 Kapusta et al. Mar 2001 B1
6201829 Schneider Mar 2001 B1
6202044 Tzori Mar 2001 B1
6204687 Schultz et al. Mar 2001 B1
6205574 Dellinger et al. Mar 2001 B1
6208572 Adams et al. Mar 2001 B1
6211708 Klemmer Apr 2001 B1
6211715 Terauchi Apr 2001 B1
6211741 Dalmia Apr 2001 B1
6215352 Sudo Apr 2001 B1
6216254 Pesce et al. Apr 2001 B1
6219729 Keats et al. Apr 2001 B1
6222528 Gerpheide et al. Apr 2001 B1
6223144 Barnett et al. Apr 2001 B1
6223147 Bowers Apr 2001 B1
6223272 Coehlo et al. Apr 2001 B1
RE37195 Kean May 2001 E
6225866 Kubota et al. May 2001 B1
6236242 Hedberg May 2001 B1
6236275 Dent May 2001 B1
6236278 Olgaard May 2001 B1
6236593 Hong et al. May 2001 B1
6239389 Allen et al. May 2001 B1
6239798 Ludolph et al. May 2001 B1
6240375 Sonoda May 2001 B1
6246258 Lesea Jun 2001 B1
6246410 Bergeron et al. Jun 2001 B1
6249167 Oguchi et al. Jun 2001 B1
6249447 Boylan et al. Jun 2001 B1
6253250 Evans et al. Jun 2001 B1
6253754 Roohparvar Jul 2001 B1
6256754 Roohparvar Jul 2001 B1
6262717 Donohue et al. Jul 2001 B1
6263302 Hellestrand et al. Jul 2001 B1
6263339 Hirsch Jul 2001 B1
6263484 Yang Jul 2001 B1
6271679 McClintock et al. Aug 2001 B1
6272646 Rangasayee Aug 2001 B1
6275117 Abugharbieh et al. Aug 2001 B1
6278568 Cloke et al. Aug 2001 B1
6280391 Olson et al. Aug 2001 B1
6281753 Corsi et al. Aug 2001 B1
6282547 Hirsch Aug 2001 B1
6282551 Anderson et al. Aug 2001 B1
6286127 King et al. Sep 2001 B1
6288707 Philipp Sep 2001 B1
6289300 Brannick et al. Sep 2001 B1
6289478 Kitagaki Sep 2001 B1
6289489 Bold et al. Sep 2001 B1
6292028 Tomita Sep 2001 B1
6294932 Watarai Sep 2001 B1
6294962 Mar Sep 2001 B1
6298320 Buckmaster et al. Oct 2001 B1
6304014 England et al. Oct 2001 B1
6304101 Nishihara Oct 2001 B1
6304790 Nakamura et al. Oct 2001 B1
6307413 Dalmia et al. Oct 2001 B1
6310521 Dalmia Oct 2001 B1
6310611 Caldwell Oct 2001 B1
6311149 Ryan et al. Oct 2001 B1
6314530 Mann Nov 2001 B1
6320184 Winklhofer et al. Nov 2001 B1
6320282 Caldwell Nov 2001 B1
6321369 Heile et al. Nov 2001 B1
6323846 Westerman et al. Nov 2001 B1
6324628 Chan Nov 2001 B1
6326859 Goldman et al. Dec 2001 B1
6332137 Hori et al. Dec 2001 B1
6332201 Chin et al. Dec 2001 B1
6337579 Mochida Jan 2002 B1
6338109 Snyder et al. Jan 2002 B1
6339815 Feng et al. Jan 2002 B1
6342907 Petty et al. Jan 2002 B1
6345383 Ueki Feb 2002 B1
6347395 Payne et al. Feb 2002 B1
6351789 Green Feb 2002 B1
6353452 Hamada et al. Mar 2002 B1
6355980 Callahan Mar 2002 B1
6356637 Garnett Mar 2002 B1
6356862 Bailey Mar 2002 B2
6356958 Lin Mar 2002 B1
6356960 Jones et al. Mar 2002 B1
6359950 Gossmann et al. Mar 2002 B2
6362697 Pulvirenti Mar 2002 B1
6366174 Berry et al. Apr 2002 B1
6366300 Ohara et al. Apr 2002 B1
6366874 Lee et al. Apr 2002 B1
6366878 Grunert Apr 2002 B1
6369660 Wei Apr 2002 B1
6371878 Bowen Apr 2002 B1
6373954 Malcolm et al. Apr 2002 B1
6374370 Bockhaus et al. Apr 2002 B1
6377009 Philipp Apr 2002 B1
6377575 Mullaney et al. Apr 2002 B1
6377646 Sha Apr 2002 B1
6377912 Sample et al. Apr 2002 B1
6380811 Zarubinsky et al. Apr 2002 B1
6380929 Platt Apr 2002 B1
6380931 Gillespie et al. Apr 2002 B1
6384947 Ackerman et al. May 2002 B1
6385742 Kirsch et al. May 2002 B1
6388109 Schwarz et al. May 2002 B1
6388464 Lacey et al. May 2002 B1
6396302 New et al. May 2002 B2
6396357 Sun et al. May 2002 B1
6396657 Sun et al. May 2002 B1
6397232 Cheng-Hung et al. May 2002 B1
6401230 Ahanessians et al. Jun 2002 B1
6404204 Farruggia et al. Jun 2002 B1
6404445 Galea et al. Jun 2002 B1
6407953 Cleeves Jun 2002 B1
6408432 Herrmann et al. Jun 2002 B1
6411665 Chan et al. Jun 2002 B1
6411974 Graham et al. Jun 2002 B1
6414671 Gillespie et al. Jul 2002 B1
6421698 Hong Jul 2002 B1
6421817 Mohan et al. Jul 2002 B1
6425109 Choukalos et al. Jul 2002 B1
6429882 Abdelnur et al. Aug 2002 B1
6430305 Decker Aug 2002 B1
6433645 Mann et al. Aug 2002 B1
6434187 Beard Aug 2002 B1
6437805 Sojoodi et al. Aug 2002 B1
6438565 Ammirato et al. Aug 2002 B1
6438735 McElvain et al. Aug 2002 B1
6438738 Elayda Aug 2002 B1
6441073 Tanaka et al. Aug 2002 B1
6445211 Saripella Sep 2002 B1
6449628 Wasson Sep 2002 B1
6449755 Beausang et al. Sep 2002 B1
6449761 Greidinger et al. Sep 2002 B1
6452437 Takeuchi et al. Sep 2002 B1
6452514 Philipp Sep 2002 B1
6453175 Mizell et al. Sep 2002 B2
6453461 Chaiken Sep 2002 B1
6456304 Angiulo et al. Sep 2002 B1
6457355 Philipp Oct 2002 B1
6457479 Zhuang et al. Oct 2002 B1
6460172 Insenser Farre et al. Oct 2002 B1
6463488 San Juan Oct 2002 B1
6466036 Philipp Oct 2002 B1
6466078 Stiff Oct 2002 B1
6466898 Chan Oct 2002 B1
6473069 Gerpheide Oct 2002 B1
6473825 Worley et al. Oct 2002 B1
6477691 Bergamashi/Rab et al. Nov 2002 B1
6480921 Mansoorian et al. Nov 2002 B1
6480954 Trimberger et al. Nov 2002 B2
6483343 Faith et al. Nov 2002 B1
6487700 Fukushima Nov 2002 B1
6489899 Ely et al. Dec 2002 B1
6490213 Mu et al. Dec 2002 B1
6492834 Lytle et al. Dec 2002 B1
6496969 Feng et al. Dec 2002 B2
6496971 Lesea et al. Dec 2002 B1
6498720 Glad Dec 2002 B2
6499134 Buffet et al. Dec 2002 B1
6499359 Washeleski et al. Dec 2002 B1
6504403 Bangs et al. Jan 2003 B2
6507214 Snyder Jan 2003 B1
6507215 Piasecki et al. Jan 2003 B1
6507857 Yalcinalp Jan 2003 B1
6509758 Piasecki et al. Jan 2003 B2
6512395 Lacey et al. Jan 2003 B1
6516428 Wenzel et al. Feb 2003 B2
6522128 Ely et al. Feb 2003 B1
6523416 Takagi et al. Feb 2003 B2
6525593 Mar Feb 2003 B1
6526556 Stoica et al. Feb 2003 B1
6529791 Takagi Mar 2003 B1
6530065 McDonald et al. Mar 2003 B1
6534970 Ely et al. Mar 2003 B1
6535061 Darmawaskita et al. Mar 2003 B2
6535200 Philipp Mar 2003 B2
6535946 Bryant et al. Mar 2003 B1
6536028 Katsioulas et al. Mar 2003 B1
6539534 Bennett Mar 2003 B1
6542025 Kutz et al. Apr 2003 B1
6542844 Hanna Apr 2003 B1
6542845 Grucci et al. Apr 2003 B1
6546297 Gaston et al. Apr 2003 B1
6552933 Roohparvar Apr 2003 B2
6553057 Sha Apr 2003 B1
6554469 Thomson et al. Apr 2003 B1
6556044 Langhammer et al. Apr 2003 B2
6557164 Faustini Apr 2003 B1
6559685 Green May 2003 B2
6560306 Duffy May 2003 B1
6560699 Konkle May 2003 B1
6563391 Mar May 2003 B1
6564179 Belhaj May 2003 B1
6566961 Dasgupta et al. May 2003 B2
6567426 van Hook et al. May 2003 B1
6567932 Edwards et al. May 2003 B2
6567933 Swoboda et al. May 2003 B1
6570557 Westerman et al. May 2003 B1
6571331 Henry et al. May 2003 B2
6571373 Devins et al. May 2003 B1
6574590 Kershaw et al. Jun 2003 B1
6574739 Kung et al. Jun 2003 B1
6575373 Nakano Jun 2003 B1
6577258 Ruha et al. Jun 2003 B2
6578174 Zizzo Jun 2003 B2
6580329 Sander Jun 2003 B2
6581191 Schubert et al. Jun 2003 B1
6587093 Shaw et al. Jul 2003 B1
6587995 Duboc et al. Jul 2003 B1
6588004 Southgate et al. Jul 2003 B1
6590422 Dillon Jul 2003 B1
6590517 Swanson Jul 2003 B1
6590589 Sluiman et al. Jul 2003 B1
6591369 Edwards et al. Jul 2003 B1
6592626 Bauchot et al. Jul 2003 B1
6594799 Robertson et al. Jul 2003 B1
6597212 Wang et al. Jul 2003 B1
6597824 Newberg et al. Jul 2003 B2
6598178 Yee et al. Jul 2003 B1
6600346 Macaluso Jul 2003 B1
6600351 Bisanti et al. Jul 2003 B2
6600575 Kohara Jul 2003 B1
6601189 Edwards et al. Jul 2003 B1
6601236 Curtis Jul 2003 B1
6603330 Snyder Aug 2003 B1
6603348 Preuss et al. Aug 2003 B1
6604179 Volk et al. Aug 2003 B2
6606731 Baum et al. Aug 2003 B1
6608472 Kutz et al. Aug 2003 B1
6610936 Gillespie et al. Aug 2003 B2
6611220 Snyder Aug 2003 B1
6611276 Muratori et al. Aug 2003 B1
6611856 Liao et al. Aug 2003 B1
6611952 Prakash et al. Aug 2003 B1
6613098 Sorge et al. Sep 2003 B1
6614260 Welch et al. Sep 2003 B1
6614320 Sullam et al. Sep 2003 B1
6614374 Gustavsson et al. Sep 2003 B1
6614458 Lambert et al. Sep 2003 B1
6615167 Devins et al. Sep 2003 B1
6617888 Volk Sep 2003 B2
6618854 Mann Sep 2003 B1
6621356 Gotz et al. Sep 2003 B2
6624640 Lund et al. Sep 2003 B2
6625765 Krishnan Sep 2003 B1
6628163 Dathe et al. Sep 2003 B2
6628311 Fang Sep 2003 B1
6631508 Williams Oct 2003 B1
6634008 Dole Oct 2003 B1
6634009 Molson et al. Oct 2003 B1
6636096 Schaffer et al. Oct 2003 B2
6636169 Distinti et al. Oct 2003 B1
6637015 Ogami et al. Oct 2003 B1
6639586 Gerpheide Oct 2003 B2
6642857 Schediwy et al. Nov 2003 B1
6643151 Nebrigic et al. Nov 2003 B1
6643810 Whetsel Nov 2003 B2
6649924 Philipp et al. Nov 2003 B1
6650581 Hong et al. Nov 2003 B2
6651225 Lin et al. Nov 2003 B1
6654934 Nemecek et al. Nov 2003 B1
6658498 Carney et al. Dec 2003 B1
6658633 Devins et al. Dec 2003 B2
6661288 Morgan et al. Dec 2003 B2
6661410 Casebolt et al. Dec 2003 B2
6661724 Snyder et al. Dec 2003 B1
6664978 Kekic et al. Dec 2003 B1
6664991 Chew et al. Dec 2003 B1
6667642 Moyal Dec 2003 B1
6667740 Ely et al. Dec 2003 B2
6670852 Hauck Dec 2003 B1
6671869 Davidson et al. Dec 2003 B2
6673308 Hino et al. Jan 2004 B2
6677814 Low et al. Jan 2004 B2
6677932 Westerman Jan 2004 B1
6678645 Rajsuman et al. Jan 2004 B1
6678877 Perry et al. Jan 2004 B1
6680632 Meyers et al. Jan 2004 B1
6680731 Gerpheide et al. Jan 2004 B2
6681280 Miyake et al. Jan 2004 B1
6681359 Au et al. Jan 2004 B1
6683462 Shimizu Jan 2004 B2
6683930 Dalmia Jan 2004 B1
6686787 Ling Feb 2004 B2
6686860 Gulati et al. Feb 2004 B2
6690224 Moore Feb 2004 B1
6691193 Wang et al. Feb 2004 B1
6691301 Bowen Feb 2004 B2
6697754 Alexander Feb 2004 B1
6701340 Gorecki Mar 2004 B1
6701487 Ogami et al. Mar 2004 B1
6701508 Bartz et al. Mar 2004 B1
6703961 Mueck et al. Mar 2004 B2
6704381 Moyal et al. Mar 2004 B1
6704879 Parrish Mar 2004 B1
6704889 Herrmann et al. Mar 2004 B2
6704893 Bauwens et al. Mar 2004 B1
6705511 Dames et al. Mar 2004 B1
6711226 Williams et al. Mar 2004 B1
6711731 Weiss Mar 2004 B2
6713897 Caldwell Mar 2004 B2
6714066 Gorecki et al. Mar 2004 B2
6714817 Daynes et al. Mar 2004 B2
6715132 Bartz et al. Mar 2004 B1
6717474 Chen et al. Apr 2004 B2
6718294 Bortfeld Apr 2004 B1
6718520 Lautzenheiser et al. Apr 2004 B1
6718533 Schneider et al. Apr 2004 B1
6724220 Snyder et al. Apr 2004 B1
6725441 Keller et al. Apr 2004 B1
6728900 Meli Apr 2004 B1
6728902 Kaiser et al. Apr 2004 B2
6730863 Gerpheide May 2004 B1
6731552 Perner May 2004 B2
6732068 Sample et al. May 2004 B2
6732347 Bixler et al. May 2004 B1
6738858 Fernald et al. May 2004 B1
6744323 Moyal et al. Jun 2004 B1
6745369 May et al. Jun 2004 B1
6748569 Brooke et al. Jun 2004 B1
6750852 Gillespie Jun 2004 B2
6750876 Atsatt et al. Jun 2004 B1
6750889 Livingston et al. Jun 2004 B1
6754101 Terzioglu et al. Jun 2004 B2
6754723 Kato Jun 2004 B2
6754765 Chang et al. Jun 2004 B1
6754849 Tamura Jun 2004 B2
6757882 Chen et al. Jun 2004 B2
6765407 Snyder Jul 2004 B1
6768337 Kohno et al. Jul 2004 B2
6768352 Maher et al. Jul 2004 B1
6769622 Tournemille et al. Aug 2004 B1
6771552 Fujisawa Aug 2004 B2
6774644 Eberlein Aug 2004 B2
6781456 Pradhan Aug 2004 B2
6782068 Wilson et al. Aug 2004 B1
6784821 Lee Aug 2004 B1
6785881 Bartz et al. Aug 2004 B1
6788116 Cook et al. Sep 2004 B1
6788221 Ely et al. Sep 2004 B1
6788521 Nishi Sep 2004 B2
6791377 Ilchmann et al. Sep 2004 B2
6792584 Eneboe et al. Sep 2004 B1
6798218 Kasperkovitz Sep 2004 B2
6798299 Mar et al. Sep 2004 B1
6799198 Huboi et al. Sep 2004 B1
6806771 Hildebrant et al. Oct 2004 B1
6806782 Motoyoshi et al. Oct 2004 B2
6807254 Guedalia et al. Oct 2004 B1
6809275 Cheng et al. Oct 2004 B1
6809566 Xin-LeBlanc Oct 2004 B1
6810442 Lin et al. Oct 2004 B1
6815979 Ooshita Nov 2004 B2
6816544 Bailey et al. Nov 2004 B1
6817005 Mason et al. Nov 2004 B2
6819142 Viehmann et al. Nov 2004 B2
6823282 Snyder Nov 2004 B1
6823497 Schubert et al. Nov 2004 B2
6825689 Snyder Nov 2004 B1
6825869 Bang Nov 2004 B2
6828824 Betz et al. Dec 2004 B2
6829727 Pawloski Dec 2004 B1
6834365 Bardsley et al. Dec 2004 B2
6834384 Fiorella, II et al. Dec 2004 B2
6836169 Richmond et al. Dec 2004 B2
6839774 Ahn et al. Jan 2005 B1
6842710 Gehring et al. Jan 2005 B1
6847203 Conti et al. Jan 2005 B1
6850117 Weber et al. Feb 2005 B2
6850554 Sha Feb 2005 B1
6853598 Chevallier Feb 2005 B2
6854067 Kutz et al. Feb 2005 B1
6856433 Hatano et al. Feb 2005 B2
6859884 Sullam Feb 2005 B1
6862240 Burgan Mar 2005 B2
6864710 Lacey et al. Mar 2005 B1
6865429 Schneider et al. Mar 2005 B1
6865504 Larson et al. Mar 2005 B2
6868500 Kutz et al. Mar 2005 B1
6871253 Greeff et al. Mar 2005 B2
6871331 Bloom et al. Mar 2005 B1
6873203 Latham, II et al. Mar 2005 B1
6873210 Mulder et al. Mar 2005 B2
6876941 Nightingale Apr 2005 B2
6880086 Kidder et al. Apr 2005 B2
6888453 Lutz et al. May 2005 B2
6888538 Ely et al. May 2005 B2
6892310 Kutz et al. May 2005 B1
6892322 Snyder May 2005 B1
6893724 Lin et al. May 2005 B2
6894928 Owen May 2005 B2
6897390 Caldwell et al. May 2005 B2
6898703 Ogami et al. May 2005 B1
6900663 Roper et al. May 2005 B1
6901014 Son et al. May 2005 B2
6901563 Ogami et al. May 2005 B1
6903402 Miyazawa Jun 2005 B2
6903613 Mitchell et al. Jun 2005 B1
6904570 Foote et al. Jun 2005 B2
6910126 Mar et al. Jun 2005 B1
6911857 Stiff Jun 2005 B1
6917661 Scott et al. Jul 2005 B1
6920416 Swoboda et al. Jul 2005 B1
6922821 Nemecek Jul 2005 B1
6924668 Muller et al. Aug 2005 B2
6934674 Douezy et al. Aug 2005 B1
6937075 Lim et al. Aug 2005 B2
6940356 McDonald et al. Sep 2005 B2
6941336 Mar Sep 2005 B1
6941538 Hwang et al. Sep 2005 B2
6944018 Caldwell Sep 2005 B2
6949811 Miyazawa Sep 2005 B2
6949984 Siniscalchi Sep 2005 B2
6950954 Sullam et al. Sep 2005 B1
6950990 Rajarajan et al. Sep 2005 B2
6952778 Snyder Oct 2005 B1
6954511 Tachimori Oct 2005 B2
6954904 White Oct 2005 B2
6956419 Mann et al. Oct 2005 B1
6957180 Nemecek Oct 2005 B1
6957242 Snyder Oct 2005 B1
6957257 Buffalo et al. Oct 2005 B1
6961686 Kodosky et al. Nov 2005 B2
6963233 Puccio et al. Nov 2005 B2
6963908 Lynch et al. Nov 2005 B1
6966039 Bartz et al. Nov 2005 B1
6967511 Sullam Nov 2005 B1
6967960 Bross et al. Nov 2005 B1
6968346 Hekmatpour Nov 2005 B2
6969978 Dening Nov 2005 B2
6970844 Bierenbaum Nov 2005 B1
6971004 Pleis et al. Nov 2005 B1
6973400 Cahill-O'Brien et al. Dec 2005 B2
6975123 Malang et al. Dec 2005 B1
6980060 Boerstler et al. Dec 2005 B2
6981090 Kutz et al. Dec 2005 B1
6988192 Snider Jan 2006 B2
6996799 Cismas et al. Feb 2006 B1
7005933 Shutt Feb 2006 B1
7009444 Scott Mar 2006 B1
7010773 Bartz et al. Mar 2006 B1
7015735 Kimura et al. Mar 2006 B2
7017145 Taylor Mar 2006 B2
7017409 Zielinski et al. Mar 2006 B2
7020854 Killian et al. Mar 2006 B2
7023215 Steenwyk Apr 2006 B2
7023257 Sullam Apr 2006 B1
7024636 Weed Apr 2006 B2
7024654 Bersch et al. Apr 2006 B2
7026861 Steenwyk Apr 2006 B2
7030513 Caldwell Apr 2006 B2
7030656 Lo et al. Apr 2006 B2
7030688 Dosho et al. Apr 2006 B2
7030782 Ely et al. Apr 2006 B2
7034603 Brady et al. Apr 2006 B2
7035886 Nemecek et al. Apr 2006 B1
7042301 Sutardja May 2006 B2
7047166 Dancea May 2006 B2
7055035 Allison et al. May 2006 B2
7058921 Hwang et al. Jun 2006 B1
7069231 Cinarkaya et al. Jun 2006 B1
7073158 McCubbrey Jul 2006 B2
7076420 Snyder et al. Jul 2006 B1
7079166 Hong Jul 2006 B1
7086014 Bartz et al. Aug 2006 B1
7088166 Reinschmidt et al. Aug 2006 B1
7089175 Nemecek et al. Aug 2006 B1
7091713 Erdelyi et al. Aug 2006 B2
7092980 Mar et al. Aug 2006 B1
7098414 Caldwell Aug 2006 B2
7099818 Nemecek Aug 2006 B1
7100133 Melyappan et al. Aug 2006 B1
7103108 Beard Sep 2006 B1
7109978 Gillespie et al. Sep 2006 B2
7117485 Wilkinson et al. Oct 2006 B2
7119550 Kitano et al. Oct 2006 B2
7119602 Davis Oct 2006 B2
7124376 Zaidi et al. Oct 2006 B2
7127630 Snyder Oct 2006 B1
7129793 Gramegna Oct 2006 B2
7129873 Kawamura Oct 2006 B2
7132835 Arcus Nov 2006 B1
7133140 Lukacs et al. Nov 2006 B2
7133793 Ely et al. Nov 2006 B2
7138841 Li Nov 2006 B1
7138868 Sanchez et al. Nov 2006 B2
7139530 Kusbel Nov 2006 B2
7141968 Hibbs et al. Nov 2006 B2
7141987 Hibbs et al. Nov 2006 B2
7149316 Kutz et al. Dec 2006 B1
7150002 Anderson et al. Dec 2006 B1
7151528 Taylor et al. Dec 2006 B2
7152027 Adreade et al. Dec 2006 B2
7154294 Liu et al. Dec 2006 B2
7161936 Barrass et al. Jan 2007 B1
7162410 Nemecek et al. Jan 2007 B1
7171455 Gupta et al. Jan 2007 B1
7176701 Wachi et al. Feb 2007 B2
7178096 Rangan et al. Feb 2007 B2
7180342 Shutt et al. Feb 2007 B1
7185162 Snyder Feb 2007 B1
7185321 Roe et al. Feb 2007 B1
7188063 Snyder Mar 2007 B1
7193901 Ruby et al. Mar 2007 B2
7199783 Wenstrand et al. Apr 2007 B2
7200507 Chen et al. Apr 2007 B2
7206733 Nemecek Apr 2007 B1
7212189 Shaw et al May 2007 B2
7221187 Snyder et al. May 2007 B1
7227389 Gong et al. Jun 2007 B2
7231339 Nemecek et al. Jun 2007 B1
7236921 Nemecek et al. Jun 2007 B1
7250825 Wilson et al. Jul 2007 B2
7256588 Howard et al. Aug 2007 B2
7265633 Stiff Sep 2007 B1
7266768 Ferlitsch et al. Sep 2007 B2
7281846 McLeod Oct 2007 B2
7282905 Chen et al. Oct 2007 B2
7283151 Nihei et al. Oct 2007 B2
7283410 Hsu et al. Oct 2007 B2
7287112 Pleis et al. Oct 2007 B1
7288977 Stanley Oct 2007 B2
7290244 Peck et al. Oct 2007 B2
7295049 Moyal et al. Nov 2007 B1
7298124 Kan et al. Nov 2007 B2
7301835 Joshi et al. Nov 2007 B2
7305510 Miller Dec 2007 B2
7307485 Snyder et al. Dec 2007 B1
7308608 Pleis et al. Dec 2007 B1
7312616 Snyder Dec 2007 B2
7323879 Kuo et al. Jan 2008 B2
7324380 Negut et al. Jan 2008 B2
7332976 Brennan Feb 2008 B1
7342405 Eldridge et al. Mar 2008 B2
7358714 Watanabe et al. Apr 2008 B2
7360117 Boike et al. Apr 2008 B1
7367017 Maddocks et al. Apr 2008 B2
7373437 Seigneret et al. May 2008 B2
7373567 Cohn et al. May 2008 B2
7376001 Joshi et al. May 2008 B2
7376904 Cifra et al. May 2008 B2
7379860 Bartz et al. May 2008 B1
7386740 Kutz et al. Jun 2008 B2
7392011 Jacomb-Hood Jun 2008 B1
7400183 Sivadasan et al. Jul 2008 B1
7406673 Patterson et al. Jul 2008 B1
7406674 Ogami et al. Jul 2008 B1
7421251 Westwick et al. Sep 2008 B2
7461274 Merkin Dec 2008 B2
7466307 Trent, Jr. et al. Dec 2008 B2
7487502 Wang et al. Feb 2009 B2
7512850 Redgrave et al. Mar 2009 B2
7542533 Jasa et al. Jun 2009 B2
7554847 Lee Jun 2009 B2
7595655 Hutchings et al. Sep 2009 B2
7616509 Qureshi et al. Nov 2009 B2
7652498 Hutchings et al. Jan 2010 B2
7809545 Ciolfi et al. Oct 2010 B2
20010002129 Zimmerman et al. May 2001 A1
20010010083 Satoh Jul 2001 A1
20010038392 Humpleman et al. Nov 2001 A1
20010043081 Rees Nov 2001 A1
20010044927 Karniewicz Nov 2001 A1
20010045861 Bloodworth et al. Nov 2001 A1
20010047509 Mason et al. Nov 2001 A1
20020010716 McCartney et al. Jan 2002 A1
20020016706 Cooke et al. Feb 2002 A1
20020023110 Fortin et al. Feb 2002 A1
20020023203 Cofler et al. Feb 2002 A1
20020026502 Phillips et al. Feb 2002 A1
20020042696 Garcia et al. Apr 2002 A1
20020052729 Kyung et al. May 2002 A1
20020059543 Cheng et al. May 2002 A1
20020063688 Shaw et al. May 2002 A1
20020065646 Waldie et al. May 2002 A1
20020068989 Ebisawa et al. Jun 2002 A1
20020073119 Richard Jun 2002 A1
20020073380 Cooke et al. Jun 2002 A1
20020080186 Frederiksen Jun 2002 A1
20020085020 Carroll, Jr. Jul 2002 A1
20020099863 Comeau et al. Jul 2002 A1
20020109722 Rogers et al. Aug 2002 A1
20020116168 Kim Aug 2002 A1
20020121679 Bazarjani et al. Sep 2002 A1
20020122060 Markel Sep 2002 A1
20020129334 Dane et al. Sep 2002 A1
20020133325 Hoare et al. Sep 2002 A1
20020133771 Barnett Sep 2002 A1
20020133794 Kanapathippillai et al. Sep 2002 A1
20020138516 Igra Sep 2002 A1
20020144099 Muro, Jr. et al. Oct 2002 A1
20020145433 Morrise et al. Oct 2002 A1
20020152234 Estrada et al. Oct 2002 A1
20020152449 Lin Oct 2002 A1
20020156885 Thakkar Oct 2002 A1
20020156998 Casselman Oct 2002 A1
20020161802 Gabrick et al. Oct 2002 A1
20020166100 Meding Nov 2002 A1
20020174134 Goykhman Nov 2002 A1
20020174411 Feng et al. Nov 2002 A1
20020191029 Gillespie et al. Dec 2002 A1
20030011639 Webb Jan 2003 A1
20030014447 White Jan 2003 A1
20030025734 Boose et al. Feb 2003 A1
20030033588 Alexander Feb 2003 A1
20030041235 Meyer Feb 2003 A1
20030056071 Triece et al. Mar 2003 A1
20030058469 Buis et al. Mar 2003 A1
20030061572 McClannahan et al. Mar 2003 A1
20030062889 Ely et al. Apr 2003 A1
20030066057 RuDusky Apr 2003 A1
20030080755 Kobayashi May 2003 A1
20030086300 Noyes et al. May 2003 A1
20030097640 Abrams et al. May 2003 A1
20030105620 Bowen Jun 2003 A1
20030126947 Margaria Jul 2003 A1
20030135842 Frey et al. Jul 2003 A1
20030149961 Kawai et al. Aug 2003 A1
20030229482 Cook et al. Dec 2003 A1
20040018711 Madurawe Jan 2004 A1
20040054821 Warren et al. Mar 2004 A1
20040153802 Kudo et al. Aug 2004 A1
20040193957 Swoboda et al. Sep 2004 A1
20040205553 Hall et al. Oct 2004 A1
20040205617 Light Oct 2004 A1
20040205695 Fletcher Oct 2004 A1
20050024341 Gillespie et al. Feb 2005 A1
20050066152 Garey Mar 2005 A1
20050097547 Ramachandran et al. May 2005 A1
20050132376 Rodgers et al. Jun 2005 A1
20050143968 Odom et al. Jun 2005 A9
20050240917 Wu Oct 2005 A1
20050248534 Kehlstadt Nov 2005 A1
20050280453 Hsieh Dec 2005 A1
20060015862 Odom et al. Jan 2006 A1
20060031768 Shah et al. Feb 2006 A1
20060032680 Elias et al. Feb 2006 A1
20060097991 Hotelling et al. May 2006 A1
20060273804 Delorme et al. Dec 2006 A1
20070139074 Reblewski Jun 2007 A1
20070258458 Kapoor Nov 2007 A1
20080086668 Jefferson et al. Apr 2008 A1
20080095213 Lin et al. Apr 2008 A1
20080186052 Needham et al. Aug 2008 A1
20080222453 Bartz et al. Sep 2008 A1
20080243463 Lovas et al. Oct 2008 A1
20080259998 Venkataraman et al. Oct 2008 A1
20080294806 Swindle et al. Nov 2008 A1
20090066427 Brennan Mar 2009 A1
20090322305 De Cremoux Dec 2009 A1
Foreign Referenced Citations (17)
Number Date Country
19710829 Sep 1998 DE
0308583A2 Mar 1989 EP
368398 May 1990 EP
0450863A2 Oct 1991 EP
0499383A2 Aug 1992 EP
0639816A2 Feb 1995 EP
1170671A1 Jan 2002 EP
1205848 May 2002 EP
1191423A2 Feb 2003 EP
404083405 Mar 1992 JP
405055842 Mar 1993 JP
06021732 Jan 1994 JP
404095408 Mar 2002 JP
9532478 Nov 1995 WO
PCTUS9617305 Jun 1996 WO
PCTUS9834376 Aug 1998 WO
PCTUS9909712 Feb 1999 WO