Hardware definition method including determining whether to implement a function as hardware or software

Information

  • Patent Grant
  • 8250503
  • Patent Number
    8,250,503
  • Date Filed
    Wednesday, January 17, 2007
    18 years ago
  • Date Issued
    Tuesday, August 21, 2012
    12 years ago
Abstract
A hardware definition system and method includes a computer processor analyzing software function modules of a software program, and generating, for each of at least a subset of the software function modules, and on the basis of the analyzing step, a respective setting indicating whether the respective function module is to be implemented as a respective hardware module or as a software module executed on a hardware module defined in a hardware module library.
Description
FIELD OF THE INVENTION

The present invention relates to a preferably reconfigurable architecture, or a preferably partially reconfigurable architecture, and a method for programming a cell element field, the elements of the field being able to execute a number of different functions, in particular such a multitude of functions that an all-purpose processor is obtained.


BACKGROUND INFORMATION

A method according the related art with respect to a design flow is shown in FIG. 1. FIG. 1 shows a known method of creating and programming a reconfigurable architecture in the sense of the remarks below. The figure shows on the right that a library containing modules for a larger chip is provided, which concerns, among other things, an ALU-PAE definition, a RAM-PAE definition etc. As required and specified, these different definitions are combined in an XPP generator and afterwards a synthesis is performed for the output obtained from the XPP generator in order to generate a mask set for the synthesized hardware on the basis of the result of the synthesis such that a chip may be produced.


The left side of the diagram shows a library for a number of programs (software parts) in a language such as NML, this special language being known from other publications of the applicant. Then a program is written by using such library software parts, it being obviously possible to use additionally and/or exclusively also software parts not contained in the library. The program is then compiled, compiling here being understood to include also placing and routing, as required. For this purpose, the compiler needs information that refers to the actual target hardware design. The compiler also has such information. The configuration(s) generated by the compiler are than made to run on the hardware as run time configuration.


It has alsoalready been proposed (WO 2004/114166) to provide a so-called bottom-up approach in hardware design, an integrated circuit development system having been provided, which included a description library of a multitude of hardware objects, which are each structured to operate on message packets, each object being intended to have relatively similar electrical load characteristics; and the integrated circuit development system further including a modeler, which refers to the library and is to be structured to accept an instruction that creates an instantiation of one of the descriptions and to accept a command that combines two or more of the created instantiations with one another. The laborious programming of this known method of instantiated hardware objects then provides for a collection of software objects to be accepted which are themselves to be abstractions of the instantiated hardware objects, each software object being intended to include a list of hardware objects that are used in the software object as well as a list of rules for combining the listed hardware objects and an instruction file that is to be loaded into the listed hardware objects; a description of the collection of physically instantiated hardware objects then having to be accepted; an identifier having to be allocated to each of the physically instantiated hardware objects from the list of hardware objects and an initialization file having to be created for the collection of physically instantiated hardware objects by using the identifier in order to replace symbolic information in the instruction files. The last-mentioned technique as shown in WO 2004/114166 is disadvantageous particularly because of the fact that it can neither be assumed with absolute reliability that a hardware-software isomorphism is actually given and not merely claimed, and because in addition the applications designed in accordance with the system must often provide for an excess of unnecessary hardware on a silicon chip. At the same time there is no assurance that in the known procedure according to WO 2004/114166 an optimal execution speed of the hardware objects tied together from predefmed, invariable hardware modules is realized.


Furthermore, in the cited related art as shown in WO 2004/114166, it remains necessary for hardware engineers to design the hardware. It is not possible to leave the construction of a chip for a dedicated application to the programmer of the dedicated application entirely or at least largely.


SUMMARY

In the present application, a reconfigurable architecture is understood in the broadest sense as an architecture in which at least one of the elements processing, storing and/or transmitting cross-linkages of data is itself modifiable; in a preferred variant, the term reconfigurable architecture being understood, without this being referenced each time, as a dynamically reconfigurable architecture, unless the respective semantic context indicates otherwise. In this connection, dynamic can refer to the capability of reconfiguration occuring at a speed that allows for a complete and/or partial reconfiguration at run time; the reconfiguration may thus occur for all cell elements, connecting elements etc. of a field, only for a subgroup of a field and/or for an individual element of the field. The reconfiguration may be induced, reference being made here for disclosure purposes to earlier patent documents of the applicant which are all incorporated to their full extent, e.g., by a possibly separately built up and/or pre-loaded central entity, by an adjacent cell and/or a cell within the element itself, which determines in the course of the data processing performed by it that subsequently another or additional data processing is required prior to or during the transmission and/or output of the data to another cell or outside the cell element field. A reconfiguration of elements lying upstream in the data path may also be brought about. The reconfiguration may be forced from the outside, i.e., outside of the field, and/or from inside and/or may be requested. Reconfiguration information is transmittable over separate reconfiguration lines, (data) buses and/or in direction connection from cell to cell.


The direct data connection from cell to cell may occur alternatively and/or additionally to an interconnection of multiple cells by connection to longer regions stretching over extended parts of the field and/or by a reconfiguration entity and/or external units such as data memories, data sources and/or data receivers. Such data receivers or data sources may be, for example, displays, data interfaces, external (host) processors, co-processors, microcontrollers and/or chip-integrated sequencer units and the like.


Reconfiguration information may, e.g., also be transmitted together with the data, e.g., also internested in data words of a longer data packet, it being in any event possible for the data exchange between the cell elements to occur preferably in an asynchronous manner. The transmission of configuration data from cell to cell may occur by transmitting actual configuration words for configuring a configurable cell element and/or by transmitting triggers, in particular in trigger vector form, a selection being made by these triggers between a plurality of configurations still to be fed in and/or are already fed in for the trigger vector target receiver cell element.


It is preferred, but not absolutely necessary for the purposes of the present application, if at least one, preferably multiple configurations are stored for current and/or subsequent processing in or at the cell elements, it being possible to provide either a configuration memory in each cell and/or for a group of cells as known per se from the earlier patent documents of the applicant.


Reference should be made to hierarchical structures, which may be established by and for processor fields of the present kind, be it for configuration data and/or data to be processed. It should be mentioned that in a data stream trigger vectors may also be interposed in order to select between a plurality of different configurations, in particular configurations stored in advance, in the manner of a configuration ID. If, which is regarded as possible, several configurations are executable on one configurable cell element in a time-blending manner, as is provided for example in PCT/EP 02/02402 (PACT25/PCTE), all originating from the present applicant, then it may be possible in a preferred manner, to transmit along to the cell elements even in the data transmission information that relates to the association of a data packet with a certain task to be processed. With respect to these identifying specifications to be transmitted along with the data, reference is made to PCT/EP 02/02403 (PACT18/PCT), where particularly the explanations regarding APID should be compared, as well as in PCT/EP 02/10572 (PACT31/PCToe), where the explanations regarding CONFIGID should be compared. As far as the cell elements are concerned, it is per se possible that a currently considered reconfigurable architecture, for which a specific program is to be compiled, is a (fully) homogeneous field, in which for example as in the known XPP of the applicant a plurality of cells having in particular segmented buses in between are provided, it being possible, but not absolutely necessary, for the cells to be ALUs, in part having an extended range of function (EALUs), compare PCT/DE 97/02949 (PACT02/PCT), and (multi-stage) register units coupled to the input and output buses being possibly provided on both sides of the ALU, compare, e.g., FREG, BREC in PCT/EP 01/11299 (PACT22a/PCT), as well as respective refinements in other patent documents of the applicant. Furthermore, reference is made in this regard to input-output registers in front of the ALU itself, which under a different name are also found in other writings of the applicant.


For this purpose, the communication of the cell elements is preferably subjected to protocols such as the applicant has already described in connection with the XPP architecture. Mention should be made in particular of the RDY/ACK protocol, the RDY/ABLE protocol from PCT/DE 03/00489 (PACT16/PCTD) as well as the additional protocols described there such as CREDIT protocols etc., e.g., protocols having a reject option. As applicant has pointed out in earlier applications, possibly received, but no longer needed, data packets may be discarded. Here mention should be made only by way of example of PCT/EP 2004/003603 (PACT50/PCTE), which is likewise in its full extent relevant also for other purposes, such as for application purposes with respect to the reconfigurable architecture for instance in connection with hyperthreading, processor-coupling etc., and which for disclosure purposes is to be regarded as incorporated in its full extent.


The cell elements may take the form of and/or include in particular ALU-PAEs, EALU-PAEs, RAM-PAEs, RAM+ALU-PAEs, function-folding PAEs (see DE 10 2005 005 766.7, DE 10 2005 010 846.6, DE 10 2005 014 860.3, DE 10 2005 023 785.1, EP 05 005 832.0, EP 05 019 296.2, EP 05 020 297.7, EP 05 020 772.9, and (PACT62 ff)), graph-folding PAEs, sequencer structures connected via command lines as well as PAEs, which may have, in addition to a configurable or adjustable unit such as an ALU, a memory such as a circular buffer and the like, in particular those having several pointers etc., also parts firmly defined once in their function, for example FPGA-like logic circuits that are defined, FPGA-like groups that are reconfigurable only seldom and preferably without recourse to preferred, in particular faster configuration methods and/or logic circuits fixed in their functionality such as ASICs, which may be used for example for certain I/O protocols such as RS232, LAN, VGA, XVGA, DVI, USB, S/PDIF, Firewire, RAMBUS etc.


Furthermore, using the ASIC-like logic circuits, which may belong to the cell elements, it is possible to fall back on fixed functions, for example ASIC-like programmed DCT algorithms, FIR filters or IIR filters, VITERBI algorithms etc., which may be of significance for various applications such as in general purpose processors, general purpose co-processors, microcontrollers, sequencers, image editing and/or image processing such as for HDTV, cameras, base stations, mobile telephones, radio receivers (software-defined radio), smart antennas, CODECs and/or parts for these.


In order to be able to use such structures and methods of structure operation, the corresponding hardware must now be designed and data processing processes capable of being executed on this hardware must be defined.


Experience has shown that, as discussed abover with respect to FIG. 1, it is already possible without problem to design hardware having the aforementioned architecture, protocols etc. and to write programs for it. As far as programs for the architecture are concerned, reference is made in particular to the NML language and the documentation, manuals and general descriptions existing for it. It should be mentioned that programming languages are known per se and are optionally applicable to the specific architecture as well. BASIC, LISP, COBOL, PL-M, ADA, ALGOL, FORTRAN, BASH, TCL, but also JAVA, C in various dialects such as C++, PASCAL, OBERON, EIFFEL, PERL, A, B, XML, UML are example possibly relevant high level programming languages.


Embodiments of the present invention make possible at least partial improvements in the design and/or with respect to the usability of structures and architectures mentioned at the outset.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 shows a procedure according to the related art.



FIG. 2 shows an improved method in accordance with the present invention for creating and/or programming hardware.



FIG. 3 shows a parameterizable hyper-PAE according to an example embodiment of the present invention.



FIG. 4 shows insertion and removal of registers according to an example embodiment of the present invention.



FIG. 5
a shows a connection of an element array to a hardware module by way of FIFO memories according to an example embodiment of the present invention.



FIG. 5
b shows a connection of an element array to a hardware module with RAM memories as coupling elements according to an example embodiment of the present invention.



FIG. 6
a shows a connection of an element array to a hardware module by way of FIFO memories, where trigger vectors are transmitted, according to an example embodiment of the present invention.



FIG. 6
b shows a connection of an element array to a hardware module by way of RAM memory, where temporal priority or validity of a data packet is transmitted, according to an example embodiment of the present invention.



FIG. 7 shows a coupling arrangement according to an example embodiment of the present invention.



FIGS. 8
a-8d show spatial arrangements of hardware modules with respect to an XPP field, according to an example embodiment of the present invention.



FIG. 9 shows various interconnections between hardware modules and between the hardware modules and parts of an element array, according to an example embodiment of the present invention.





DETAILED DESCRIPTION

As is yet to be explained below, FIG. 2 shows essentially parts of the design flow as is also known in FIG. 1 from the related art, but it supplements and extends or modifies it in an inventive manner. As will become apparent and be explained below, the following is of particular importance in this regard.


First, a high level language program is provided, in which initially no reference needs to be made to actual hardware characteristics. This program may be written in the conventional high level languages such as C++, JAVA, MATLAB etc. Thus, programming is performed in abstraction from any hardware, ergo at this point one preferably, but not necessarily, uses an entirely, at least partially hardware-abstracted language. These hardware-abstracted programs or this hardware-abstracted program is then translated as known per se preferably with reference to a quasi-maximally free hyperset, that is, a superset of possible hardware objects, which for individual objects may include a plurality of variants, these variants also for example, which is preferred, possibly differing from one another in a manner determinable by parameters in one or in multiple characteristics. When the hardware-abstracted high level language program is translated with reference to a quasi-maximally free hyperset of possible hardware structures etc., for the purpose of which a transformation compiler is used, then for this purpose one may fall back on a multitude of PAEs parameterized for this hyperset and similar suitable modules stored in a software library. The modules in the library may be intended for parameterized or still parameterizable elements of the hyperset, and, as the translation described above as performed by the transformation compiler, may occur both by machine coding as well as if desired entirely and/or partially manual coding. It should be mentioned that the use of modules in machine and/or manual translation is not absolutely necessary.


The parameterization may be performed interactively by a programmer, in particular by interaction with a place-and-route tool, but may also be suggested by the latter, possibly even in a fully automatic manner, and possibly only be confirmed and/or stipulated without confirmation. Alternatively, heuristic methods are possible as well, possibly even interactively and/or by open-loop and closed-loop control of a place-and-route tool. In heuristic methods, an iterative procedure using the place-and-route tool or another tool in the programming and hardware definition environment may be performed. It should be pointed out that such iterations may occur manually, semi-automatically and/or alternatively and particularly preferentially in a fully automatic manner.


With the heuristic, SETPOINT variables may be specified for this purpose, which are to be reached by the iteration, by trial and error for example. In this connection, for purposes of disclosure, explicit reference should be made to the methods of “simulated annealing.”


In addition to methods of simulated annealing, obviously, evolutionary methods such as genetic algorithms may be readily used as well.


In this connection, quasi-maximally free incidentally means for the hyperset that the number of limitations to generally available objects is as low as possible, that is, that as many degrees of freedom as possible remain. Notwithstanding the demand for as many degrees of freedom as possible, however, limitations may be necessitated by certain factors such as, e.g., the constructability of modules in the target semiconductor implementation, which is why the term “quasi” maximally free is chosen. Incidentally, it should be pointed out that in certain cases the quasi-maximally free hyperset needs to contain only one PAE, which then however must be largely and in many parameters parameterizable, from which by parameterization many mutually distinct PAEs are derivable.


The final result is thus a program from a multitude of functional blocks, which are indicated in FIG. 2 as f(n) for different n.


On the basis of this program, which was already generated with recourse to hyperset elements from the high level language program and was thus generated in a manner according to the present invention, novel with respect to the related art and in a manner regarded as in accordance with patent for itself, a further improvement may now be achieved. First it is possible (proceeding to the right in the illustration) to select certain of the program parts for processing on the hardware later executing the program not by elements provided for general purposes, selected from the hyperset and determined by parameterization etc. entirely in their hardware construction, which, programmable or configurable, are available also for quasi any other task to be processed in the reconfigurable field, but to be implemented individually and/or jointly in a hardware system specialized and optimized or optimizable by dedication. In FIG. 2, program parts f(3), f(n), f(n−2) are selected for this purpose. Typically, such program parts may and will be configurations or configuration parts or an individual configuration for an XPP field or the like, which is composed of an at least partially reconfigurable set of elements such as ALU-PAEs, graph-folding PAEs, function PAEs, MAC PAEs, RAM PAEs, ROP PAEs and/or input-output PAEs, which are described in the hyperset or describable by the latter, in particular completely describable by parameterization. The selection of the type of modules to be implemented may occur in various ways; the following possibilities being mentioned only by way of example, it being obvious that it is possible and preferred in a practically preferred embodiment of the present invention not to fall back exclusively on a single one of the possibilities, but rather to provide multiple or all of the possibilities for simultaneous or successive implementation as hardware module of program parts:

    • selection of program parts by hand, which may be done particularly by inserting suitable text passages in the program code such as, e.g., by inserting control characters;
    • selection of those program parts that occur and/or must be executed particularly frequently in the entire program code or in a multitude of program codes, which are to be executed independently of one another on the hardware to be produced, will probably come to be executed, that is, a selection according to execution time and/or execution frequency;
    • modules, from which one is able to ascertain that with respect to other elements they are otherwise executable only with difficulty or at a higher clock frequency, that is, program parts that prove to be critical with respect to performance; the selection of such program parts may be preferred so as to be able to execute certain program parts on a certain piece of hardware at all;
    • selection of program parts, which otherwise would generate a particularly high power loss on the hardware to be produced;
    • program parts, which could result in a particularly high surface area requirement of the hardware chip;
    • selection of program parts according to heuristic methods, which allows, particularly on the basis of the program code, for a—even for itself possible—parameterization; and
    • selection of program parts by profiling or comparable techniques; it may be provided either to identify on the basis of a source code analysis those parts for which dedicated hardware modules are particularly suitable, for example with a view to the above-mentioned parameters with respect to executability, implementability etc. Alternatively and/or additionally it is possible to perform a profiling during the execution of programs. For this purpose, an analysis may be made as to which program parts, subprogram parts, configurations, configuration parts etc. are subject to a particularly frequent execution, are performance-critical, surface area-critical, require many and/or long memory accesses, are particularly frequently used in various configurations etc. The advantage of such a profiling lies in the fact that for typical applications that call up a multitude of programs, for example the application of a processor as a general purpose processor on a server, a laptop or a workstation, processors, co-processors and the like may be defined that are optimized for a or typical user(s). To be sure, it is possible to perform such a profiling on a simulator as well, but the particular advantage of the present technique of the top-down approach is that initially an already highly performing chip, which is thus specifying real time conditions, may be used, which does not compromise a user whose profile is to be detected, is made available. Thus, by using the target architecture, it is possible to detect how it may best be subjected to a design change process without performance losses, but rather while improving the performance with respect to critical parameters. It is pointed out that, apart from the circuits described here, corresponding precisely to the later desired architecture by the definition of hardware modules, the idea of starting from the actual target architecture for defining modified circuits by selecting particular program parts and described definition of the hardware parts is regarded as inventive for itself; in particular, the submission of partial applications and the like is reserved for this purpose and/or for parts of these aspects. Reference should be made to the possibility of performing a successive processor improvement by transmitting a multitude of profiles to a central unit, e.g., a processor manufacturing firm, in particular by transmission over the internet. This may be used, e.g., for standard programs and for other processors.


In this connection, it should be mentioned incidentally that by taking the data obtained by profiling a manual selection may be made and/or an automated selection.


It should be mentioned that in the selection it is not necessary always to pay attention only to one parameter. Rather, it may be possible, for example by recourse to methods of fuzzy logic, to take into account multiple or all of the above-mentioned influencing parameters, particularly with a suitable weighting and/or in an nonlinear manner. The selected program parts are initially on the already known PAEs existing in the hyperset, which incidentally may include, in addition to the previously mentioned PAEs, also PAEs that are made up of a combination of the functionalities of the above-listed PAEs, that is, for example, a parameterizable or parameterized PAE having a parameterizable set of ALUs of parameterizable bit width and parameterizable range of function, it being possible for this PAE to include additional graph-folding, parameterizable elements, just as function-folding, parameterizable elements parameterizable with respect to the bit width for example and/or in particular parameterizable memory areas having pointers and/or command-control line of one or multiple ALUs, or other data-modifying parts in the PAE, in order to implement sequencers or microprocessors, input-output elements and the like.


An example of a still parameterizable hyper-PAE is shown in FIG. 3. There one finds various parameterizable units such as, e.g., bus inputs having m inputs, m representing a parameter, that is, m different operands may be supplied to one PAE. The buses are respectively k bits wide, k in turn representing a parameter, and n different buses are provided, from which the m different inputs are picked off. The total number of buses, n, also represents a parameter. Within the PAE, different operand-combining units are then shown by way of example, in the exemplary embodiment shown in FIG. 3 for example a divider having a combinatorial network, a multiplier, an ALU stage, a Boolean logic, a barrel shifter stage as well as a floating point unit. It should be pointed out that the aforementioned units in turn are parameterizable, for example with respect to the operand width, that is, they may be, e.g., 8 bit, 16 bit, 32 bit or 64 bit stages or obviously stages of other bit width as well, it being additionally possible for the range of function, for example of the ALU, the floating point unit etc. to be defined via parameters. It should be pointed out that for reasons of simplicity of the drawing certain, omitted elements, which possibly may also be provided in a hyper PAE such as sequencer units, function-folding PAEs, compare PCT/EP 03/09957, may be provided. It should be mentioned that memories of parameterizable width and depth may also be provided etc. In this connection, reference is made in particular to the previous applications of the present applicant, in which a multiplicity of different logic elements such as also FPGA-like structures, SIMD units etc. for PAEs are disclosed, this disclosure being incorporated in its full extent.


Regarding the parameterizable range of function, the flow point unit may be, only by way of example, a floating point unit that is capable of at least one, preferably several of the following combinations in the still parameterizable definition: multiplication, addition, subtraction, division, floating point combination, look-up tables, possibly having an interpolation option for certain functions such as trigonometric functions (sine, cosine, tangent), sequential calculations as for Taylor series, it being possible for special hardware to be provided for certain approximations/interpolations and it being possible preferably in addition for a parameterization of the floating point unit to be provided with respect to the data word width in the mantissa and/or exponent.


A parameterizable library for such a hyper PAE may have recourse, for example, to a procedure in which so-called ifdef constructs are used. These supply certain program segments to a translation (in hardware circuits, which must be actually provided on a chip) only if corresponding definitions are provided for this, for example by specifying the parameters, for example the range of function. It should be mentioned that this is also possible for variables and elements of the hyper PAE such as the configuration registers specified also at varying depth, possibly the protocols (compare RDY/ACK, credit protocols, RDY/ABLE etc.) capable of being implemented on a PAE, just as the parameterization of an output, different multiplexer stages in a PAE etc.


In order to achieve the desired improvements either with respect to some of the previously selected critical criteria such as power consumption, surface area efficiency or execution performance and/or a particularly great improvement in at least one of the areas combined with at best a partial improvement of other areas or a complete disregard of the same, for example, if in high performance-critical program parts, power and/or surface area do not matter, a preferably automatic and/or partially automatic converter step is now executed in a preferred embodiment. This is indicated in the figure as NML2V and represents a converter step by which a hardware language description is determined for the program parts that were selected, possibly by taking into account the reason for the selection. In light of the fact that the program parts for the hardware modules were selected with reference to one or more elements in a hyperset, it is possible to find an identical translation, that is, it is ensured that no errors occur in the conversion into a hardware-describing code such as VERILOG, which, if this is desired, may be confirmable by intermediately executable simulation steps. Thus, one first obtains a hardware-describing code, e.g., a VERILOG code, which has the corresponding functionality of the parameterized PAE in the investigated configuration(s).


Surprisingly, the use of hyper PAEs in the definition of the program parts, which are then used for implementing hardware modules, proves to be nondisruptive for the converter to hardware code. The reason for this is that certain of the parameterizable characteristics such as the bit width of the PAE, for example, must already be determined when determining the actual program for the transformation compiler, while other characteristics such as the actual ranges of function for example, that is, for example the provision of a divider stage, a multiplier stage, and adder stage and/or a subtracter stage in an ALU-PAE do not yet have to be defined. In other words, simultaneously with the transformation compilation the quasi-maximally free hyperset is reduced to a parameterized and/or partially parameterized hypersubset, in particular fewer degrees of freedom being specified, that is, no modification being required. In this instance, the bus widths to the cells may already be defined for example. It should be mentioned that the already defined parameters, which were defined in the transformation compilation for example, are made available to the NML-to-VERILOG converter or, more generally, to the hardware language description-generating converter, which may be done by corresponding indications on the program parts, for example in the form of comment lines and/or by data separated from the actual program part. The transformation compiler is thus designed for the generation of parameterization information of hardware on which it is to be based. In contrast to conventional compilers, hardware-describing code, that is, code describing degrees of freedom, is also generated.


The program parts, for which a hardware module is to be implemented in an optimized manner, now not only have parameters defined with respect to the PAEs, but rather it is at the same time clear in which configuration a certain PAE is to be operated in the program part that is to be converted to a hardware module. This configuration now has the consequence that it is, if applicable, immediately clear that certain parts of the PAE are not used, which is the case for example if in the transformation compiler a floating point unit must still be provided for other program parts, but no floating point operations are required in a currently considered program part that is to be translated into a hardware module. The configuration that is defined for purposes of the present consideration (bearing in mind that multiple configurations to be processed successively may be present in the PAE for sequencer-like PAEs or PAEs operated in a sequencer-like manner) thus indicates that certain units are not required and it is then possible to ascertain that for example a multiplexer connected downstream from an operand combination stage, which is used to select which operand combination unit should set its output or outputs to an output region, is dispensable or partially dispensable. The multiplexer typically situated behind the multiple operand combination units of a typical PAE may thus as a rule be readily simplified in a given hardware module. An invention per se is likewise seen in the removal of multiplexer stages and/or complete multiplexer units in the determination of hardware modules with recourse to hyper PAEs or a quasi-maximally free set of hyper PAEs. It should be mentioned that the removal of elements not required in a configuration to be executed in a PAE may occur by the NML2V converter, that is, in the isomorphous hardware simplification means, and/or that the selection of hardware elements to be removed as not required may also be performed by way of a synthesis. Incidentally, it should be pointed out that in the hardware module or the parts intended for the latter the configuration register does not necessarily have to contain only one constant value as was, e.g., depicted for reasons of better illustration. Rather, particularly if wave-like changes or reconfigurations of the operating mode and/or conditional changes of the operating mode of an individual element are required for the hardware module, for example as a function of data processing stages above or below, multiple possible configurations may be stored in the configuration register. The selection among such previously stored configurations, which are disclosed by the applicant in other applications, is pointed out in a manner fully incorporating by reference, compare in particular, although not exclusively, PCT/DE 98/00334 (PACT08/PCT). Incidentally, it should also be pointed out that not only trigger vectors etc. are transmittable, but possibly, within the hardware module and/or from outside in an accordingly limited range of function, also data are transmittable directly to a unit, which may be regarded as configuration data, work instructions (commands etc.) and/or which may contain respective instructions, in particular set between operands. Incidentally, it should be pointed out that the hardware module may also be defined in such a way that freely definable configurations are still executable on the defined hardware module, these freely definable configurations then in each individual element accessing a reduced set of functions and/or a limited connectivity, for example only with respect to next-neighbor connections instead of global bus connection extending over many cells being possibly provided between the individual elements of the thus defined hardware module, whereas nevertheless a multidimensional, that is, also possibly clearly more than two-dimensional connectivity and/or a toroidal, even multi-dimensionally toroidal connectivity is feasible.


The hardware description code of the NMLV2 converter thus generated preferably automatically is now still optimized in a particularly preferred variant of the present invention. The aim of this optimization is on the one hand to allow for the elimination of the registers, combination units etc. in a parameterizable PAE that are not required for the respective functionality; reference being made in this connection to the earlier applications of the present applicant, compare PCT/EP 03/08080 (PACT30/PCTE) and PCT/EP 03/08081 (PACT33/PCTE). These provided for a configuration of a field or of an individual PAE to be defined once by the use of fuses, that is, breakable elements and the like in order to allow for a problem-free construction of chips having ASIC functionality without the requirement of a mask construction for each ASIC embodiment; although in this previously known variant possibly not required elements of functionality remained in the ALU or another unit of a PAE. If, for example, a PAE having an ALU, which included a subtracter, a divider, an adder and a multiplier, was configured in a fixed manner in order to provide an adder, then the silicon surface area used for producing the multiplier had to be provided nevertheless. The present application and invention among other things in one of its aspects aims to avoid this, which contributes toward a reduction of the size and thus possibly also of the execution speeds of a dedicated hardware area. The corresponding changes in the parameterizable and already partially parameterized hyper PAE take place in a retiming stage, in which initially unnecessary registers are removed. The removal of the registers first results in a decapsulation of functional parts previously encapsulated by the use of the PAE definition. This is by no means critical, however. On the contrary, in the case of a suitably intelligent design chain, it is rather very advantageous.


The design chain hereby provided according to the present invention inherently features the intelligent layout, which renders obsolete the complex encapsulation required in the related art, for example by input-output FIFOs and/or registers, which are practically controllable only via suitable protocols such as RDY/ACK protocols. For this purpose, e.g., initially the internal registers are removed, that is, the registers situated between the considered cells at their mutual junctions. The removal of the registers, however, does not occur blindly for all registers, but rather there is a preferably readily automated selection of registers that are removable or that must remain in the piece of hardware. First, constants should remain in the piece of hardware. Further, it is strongly preferred if registers for preloading values (PRELOAD registers) are not removed. Additional registers are initially not required in a given implementation of the method.


This obviously changes the timing behavior or the overall system. Now, the present invention provides for the registers to be removed nevertheless, but for a synthesis step to be performed in order to ensure a correct timing of the data processing by the considered piece of hardware. Preferably, therefore, a synthesis step is performed according to the present invention. This also applies to the inputs/outputs of the hardware module to be constructed.


It should be pointed out that by and for suitable logging bus-internal registers may readily be used, that a feeding-in/reading-out of data in RAM-PAEs having sufficient memory depth is possible and/or a reading-in/reading-out of data in the preload memory, if required at all, may occur, or the provision of input-output registers at the end and at the beginning of the piece of hardware, unless for example the long-familiar FORWARD-BACKWARD registers are also to be provided for purposes of use by other PAEs. In a preferred design, constant contents of RAMs are implemented by ROMs or mapped onto ROMs.


The removal of the registers will now change the timing behavior. Initially, the frequency behavior of the considered circuit to be provided may deteriorate, possibly even significantly. This may be compensated by again inserting registers in suitable places, which are either arranged according to fixed rules, for example by inserting less deep register stages in places where previously deeper register stages were provided, by inserting register stages of the same depth as those that were previously removed, or, particularly preferably, by considering the signal run times through the remaining hardware circuits in order to identify places at which registers are required to increase the frequency; one skilled in the art being able to perform such a procedure per se without deeper explanation.


It must further be kept in mind that, while the considered software part may be regarded as initially balanced, balancing is normally performed or could be performed by providing register stages between different data-processing functionality areas in or between the PAEs etc. The initial removal of the registers now impairs the possible or already given balance of the data-processing paths, which must be coupled at certain points. In another register insertion step, the attempt is now made either to arrange the registers already provided again in such a way that not only the possibly demanded and required frequency increase is obtained, but rather at the same time also a data run time balance is achieved. Thus an automatic balancing in the retiming means by register insertion is brought about by retiming only on the basis of program parts possibly to be made into hardware modules, in which it is pointed out that certain data paths are to be balanced against one another.


Something else has to be kept in mind as well when retiming: The hyper PAE, even in the case of a given parameterization, will normally still include functionalities that are not required in the hardware module. For example, it would be conceivable that a hardware module is written for a program part in which no divisions are required at all. In this case, a divider stage could be omitted in a PAE. A division now requires a certain delay, that is, a run time across the module. This will be significantly greater than for example the run time across an adder stage. The primarily given data run time balance of the parameterized or hyper PAE will be such that the run times of a divider stage are taken into account as well. If, however, in a hardware module at a certain point a divider stage is no longer required, which is discernible, then such non-required unit may and preferably will be removed from the PAE, which then changes the delay of the data run through the unit. The hardware module should also be adapted accordingly when retiming. Fundamentally, it should be pointed out that this is not absolutely necessary, however. A certain advantage is already obtained if between the individual stages of a hardware module composed of multiple hyper PAEs non-required register stages are removed. In the preferred case, however, non-required parts are also removed from the hyper PAEs, which may occur during the synthesis, for example, such as, e.g., the removal of a divider stage discussed above, other stages such as memory stage elements, multipliers, floating point units etc. being also removable, if indicated. This too may be taken into account when retiming. For this purpose, a synthesis is preferably performed, by which the timing behavior is analyzed in an automated manner in order then either automatically to insert registers in required places and/or to provide indications where a programmer should insert registers in order to ensure a proper timing behavior.


Incidentally, it should be pointed out that divider stages were mentioned above. With regard to this and to the removability of register it should be pointed out explicitly, although exemplarily, that on the one hand protocol-relevant and data communication-relevant registers may be provided in a module or array; such being readily removed at first. Precisely the division shows, however, that certain registers shall not and/or cannot be removed. The division may be implemented in two ways if a division stage to be provided in hardware is to be constructed. The first possibility provides for a combinatorial network, in which no registers are required. The second variant provides for a sequential division, in which a value is computed iteratively again and again, comparable to the manual computation of a division. In the latter case, intermediary results must be written into registers. These must not be removed when retiming since they are algorithmically required. The non-removal may be brought about, e.g., by indications in the hardware-defining code of the hyper PAE, which may lead to comments in a compiler code of the transformation compiler that are not required for actual program purposes. Alternatively and/or additionally, variants are conceivable, in which first a removal and subsequently a reinsertion may be performed.


In a particularly preferred variant, therefore, the hyper PAEs may be marked as to whether certain registers are algorithmically required such that they are not automatically removed in an initial removal of the registers. Alternatively and/or additionally, when removing superfluous registers, analyses may be performed to the effect that registers having a feedback to circuit regions located upstream of the data flow are not removed. For such registers are automatically algorithmically relevant registers. It should be pointed out that even algorithmically required registers are obviously removable if the algorithm with which they are associated is not executed; something that happens for example in the case of a sequential division generally provided in a hyper PAE if the division per se is not implemented in the hardware module to be constructed. Incidentally, it should be pointed out that feedbacks are implemented in the standard PAEs provided by the applicant by backward registers. If these are actually required in a given program part, it is advantageous not to remove them or not to remove them without verification and/or not to remove them completely.


If indicated, registers are then inserted with the retimer. It should be mentioned that it is in principle possible to insert the registers at any place in the hardware module, as required. In particular, if performance efficiency is the sole concern, then it is possible to insert register within a (parameterized) hyper PAE that is provided in the hardware module. It should be pointed out, however, that a simpler method of register insertion is obtained if on the interfaces between multiple hyper PAEs in the hardware module to be designed again those registers or a part of those registers are inserted, which were initially removed. The reason for this is to be seen in the fact that an optimum insertion in these places is possible for the reason that the entire starting definition of the hyper PAEs is selected to be such that an insertion is automatically possible in these places. Reference is made to FIG. 4, which shows how initially registers are removed for an only exemplarily pipeline-like, only exemplarily unbranched hardware module. These are shown as “removed registers” in a shaded manner. In the hyper PAEs, which are drawn upon in the parameterized form of the hardware module description, these registers are the input/output protocol registers, that is, for example the FREG/BREG of the hyper PAEs. Alternatively it is possible to provide PAEs without FREG/BREG only with those registers that are provided in the direct coupling path of the ALUs and other logic elements for operand combination in the PAE in the connections to the buses as protocol registers. Reference is made in particular to OREG and PREG from PCT/DE 97/02949 (PACT02/PCT). The newly inserted registers, which ensure the balancing or the desired performance/surface area efficiency/latency following the removal of the shaded registers, are drawn in FIG. 4 by dashed lines and indicated as “inserted register” or for multi-stage registers as “inserted FIFO.”


It should be pointed out once more that the represented insertion of registers, FIFOs and the like between the predefined hyper PAEs not only simplifies the structural layout, but also facilitates the verification and calculation of the delay times across the circuits provided in the hardware module since the run time behavior etc. of the underlying elements may be assumed as well-known in the register removal step or the retiming step, which facilitates a possibly iterative approach to the retiming task. In addition, the insertion of registers between the previously used and underlying (parameterized) hyper PAEs is particularly surface area-efficient since, e.g., the use of general ALUs in the hyper PAEs would there require a multitude of registers even though the insertion would readily be possible there as well, for example in order to achieve particularly high frequencies. In addition, there is hardly a positive effect in a cut within an ALU or a PAE core.


Incidentally, it should be mentioned that it is readily possible to design a hardware module in such a way that it has to run at a different working frequency than that provided for an XPP field or another reconfigurable unit field. On the one hand, it is possible to select the frequencies to be lower, for example to reduce latencies, to reduce the surface area and/or to reduce the power consumption. For the sake of completeness, it should also be disclosed that for lowering the power consumption it is also possible, if indicated, to work with other hardware definitions such as for example different gate thicknesses of transistors in comparison to a reconfigurable, processor field to be likewise provided. As an alternative to the purely power-saving considerations, it is also possible in certain cases to design the hardware modules for a certain frequency, which may be advantageous especially if a particularly high data throughput is required in the hardware module and/or if highly computing-intensive tasks must be processed in it.


Incidentally, it should be pointed out that the register stages or FIFO stages to be inserted or to be newly introduced or reintroduced are usable not only with a view to, e.g., latencies, but rather also in order to restore a balance of data flow paths possibly destroyed by the initial removal of registers. It should be pointed out that initially after removing the registers a balanced data path automatically exists, but that possibly timing conditions are not maintained; and that then initially the timing behavior is restored by inserting additional registers, but that because of that the balance between the individual data paths may be disturbed. In order to restore the balance as well after having restored the timing conditions and timing requirements, recourse may be taken readily to the techniques for balancing from the related art, particularly to those stemming from the applicant, by using in particular precisely those algorithms to which recourse is taken also in the construction of compilers such as for an NML compiler for computing executable configurations. Reference is made in particular to the applications PCT/EP 02/10065 (PACT11/PCTE), PCT/EP 02/06865 (PACT20/PCTE), PCT/EP 03/00624 (PACT27/PCTE), PCT/EP 2004/009640 (PACT48/PCTE). In these applications suitable methods for balancing are described.


The output from the retimer is then a hardware code definitely executable by recourse to the hyper PAEs or elements of the quasi-maximally free hyperset, which is frequency-optimized and/or throughput-optimized through the retiming. In addition, the surface area is automatically optimized. The definition thus obtained of new hardware areas as hard modules may now be integrated into the XPP library. There are many possibilities for the thus determined hardware module functionalities to be integrated into and/or be connected to an XPP field or, more generally, a field of reconfigurable and/or partially reconfigurable elements. One possibility, for example, is to provide a complete PAE, which does not have an ALU or an individual sequencer as central functionality, but rather the specified hardware functionality of the hardware module. In this instance, it is particularly preferred if in such a PAE, as is provided in PCT/EP 01/08534 (PACT14/PCT), an outwardly identical geometry and in particular a connection geometry is provided, as in other PAEs of the field. This has the great advantage that the homogeneity of the field remains largely unimpaired. Alternatively and/or additionally, it is possible to achieve a connection without a corresponding consideration of form factors and the like, compare DE 102 36 269.6 and DE 102 38 172.0-53 (PACT36 and 36I), by setting the specific hardware modules next to the actual field. For this purpose, it is possible to provide for an integral manufacture and/or to manufacture the parts separately and then to let them communicate via buses, via RAMs and the like with the reconfigurable field, compare SOC technology etc.


Other possibilities of connection are described in the figures.



FIG. 5
a shows on the left a combination of an XPP field or an FPGA field with a hardware module of the present invention, the connection of the hardware module to the field occurring via FIFO memories in the input path and/or output path, preferably via FIFOs in both paths. By providing a FIFO memory between the or each hardware module of the present invention, a decoupling is already achieved in principle, which allows for a more independent procedure and a deviating timing etc. especially with respect to the processing speed.


It is particularly advantageous, however, if the exchanged data packets are given identification information in the form of a packet header or additional identification bits on each individual word or the like. In this manner it is possible, for example, to execute different tasks in a multithreading, hyperthreading, multitasking, timeslotted or other manner either with the hardware module and/or the XPP or FPGA field or another field and then, in spite of the comparatively loose coupling effected via the FIFOs, to ensure nevertheless that an exchanged data packet or data word undergoes the correct processing in the receiver, that is, in the hardware module or the XPP field or the like.


It should be mentioned that it is already helpful if identification information in the hardware module remains unchanged and/or is changed only in such a way that the associated data packet is processed in the manner provided following the return of the processing result to the receiver, that is, for example the XPP field, for example in that it is processed further using the correct configuration.


Alternatively and/or additionally it is possible, however, to co-transmit, in place of pure identification information and/or in addition to the latter, also control instructions or the like, in order to choose for example in marginally changeable hardware modules, whether an addition or a subtraction of consecutive operands is to be performed and the like. In this manner, an increased flexibility of programming all the way to self-modifying code may be achieved.



FIG. 5
b shows how for coupling a hardware module in the input path and/or output path it is possible to provide coupling elements in the form of RAM memories, in particular even of RAM PAEs, rather than in the form of FIFOs. This makes it possible in particular to provide respectively dedicated memory areas both for writing data from the field for the hardware module as well as when writing from the hardware module for the field, that is, when transferring data from the field to the hardware module on the one hand, and when (here:) returning results from the hardware module to the field on the other hand. This facilitates on the hand the handling of different configurations and on the other hand allows for example for prioritizations in that work, that is, reading and writing, is performed primarily and preferably in a first memory area, and only if a data processing has been performed sufficiently often in the first memory area and/or no data are present there, will recourse be taken to other memory areas and thus other tasks.


Incidentally, it should be mentioned that in those places in the present document where there is talk of data input from the XPP field and the transfer of the result to the latter, an opposite course is possible as well in that the hardware module may use the XPP field as a more flexible data processing element and/or where mixed forms are possible, that is, where data are shifted back and forth in ping-pong-like fashion or in a less regular manner for overall processing.



FIG. 6
a shows a variant in which again data are exchangeable via FIFO memories and in particular again FIFO memories are present either in the input branch and, preferably or also in the output branch. In addition, trigger vectors are now transmitted. Regarding the significance and application of trigger vectors, reference is made to WO 98/35299 (PACT08/PCT). The combination of identification information with programming information and/or trigger information or status information, which are exchanged in order to trigger certain data processing events or processes, should be mentioned once more explicitly.



FIG. 6
b shows that in the data exchange, a “time stamp”, that is, information regarding the temporal priority or the temporal validity of a data packet is transmitted as well. In the present case shown in FIG. 6b, this transmission occurs in read-write memories (RAMs). The time mark that is co-transmitted may be used to select those data packets, which are to be processed next.


It should be pointed out that in this manner the data processing may be controlled particularly favorably. The actual procedure of transmitting time marks along with a data word or data packet in data flow processing was already described in WO 02/071249 (PACT18/PCTE, butcher protocol). Irrespective of the fact that document WO 02/071249 is in its full extent incorporated by reference for disclosure purposes, it should be pointed out explicitly that the assignment of a time mark to data packets allows for both a data sequence to be reconstructed and/or restored at any later time as well as for operands to be combined with each other as required, which is advantageous particularly if branches supplying operands are balanced with respect to the latencies.


It should be mentioned that in the manner in which for FIG. 6b reference was made to WO 02/071249 (PACT18/PCTE), with the other figures reference is made to WO 02/071248 (PACT15/PCTE) and WO 02/071196 (PACT25/PCTE) for FIG. 5a as well as WO 02/071196 (PACT25/PCTE) and WO 98/29952 (PACT04/PCT) for FIG. 5b as well as WO 98/35299 (PACT08/PCT) and WO 02/071196 (PACT25/PCTE) for FIG. 6a, and that all of the mentioned documents are respectively incorporated in their full extent individually and in combination for disclosure purposes.


It should be mentioned that incidentally the coupling methods mentioned and disclosed here are also combinable, for example by connecting a FIFO upstream to a RAM-PAE while co-transmitting time marks in parallel and the like.


It should be mentioned that as far as the physical connectability of the hardware modules is concerned, the latter may be connected either by integration into the internal bus system of the XPP or of another processor field and/or via external, possibly bundled input/output lines. The possibility should be pointed out of combining a multitude of individual input/output lines to form buses in order to obtain a coupling of the hardware modules for example in finely granular fields. In this connection, reference is made to WO 02/29600 (PACT22aII/PCTE) and the parallel patents connected with this by way of priority, which are all incorporated to their full extent for disclosure purposes.


With respect to the spatial arrangement of hardware modules or hardware parts of the present invention in XPP fields or other fields, FIG. 8 shows that these may be provided either as columns or lines at the edge of a field, it obviously also being possible for a field to be surrounded by such hardware modules or hardware parts, and/or that individual elements or field groups may be distributed over the field, as shown in FIG. 8 on the lower left. Alternatively it should be mentioned that a hardware element and/or a group of hardware elements according to the present invention could also be set next to an XPP field or other field or, assuming appropriate manufacturing processes, could be placed on top or underneath such a field. The usability by integration on a single, jointly manufactured chip should be disclosed as a possibility in the same manner as those of manufacturing the separate elements independently and connecting them. It is understood that in the variants in which the hardware modules of the present invention are connected most closely to the field because they form an interposed column, represent a column at the edge, a frame and/or elements provided in a field, the setup is preferably connected via internal buses, whereas in an arrangement next to the field a connection via I/O connectors is preferred. In the case of an arrangement on the edge, connections may be established alternatively via I/O ports and/or via internal buses. It should also be mentioned that bus lines or other lines may be drawn across the hardware elements that are set between field elements, if necessary. Hardware elements that are set into a field may also be connectable by separate lines, as required. The arrangement in columns is incidentally clearly preferred, a positioning of the column at the edge or in between being preferred depending on for what purposes a data processing unit having a hardware part of the present invention is to be used.


In a preferred variant, the number of hardware modules will be selected in such a way that on the one hand the data processing tasks to be performed may be solved quickly and efficiently, and that on the other hand the form factor is observed when inserting into or next to a field.


In this connection, it should be mentioned incidentally that the hardware modules of the present invention, even when closely coupled to a field, may additionally have separate I/O connections for communication with external elements such as memories and the like, if necessary.


According to FIG. 9, it is possible incidentally to allow for a connection between the hardware modules of the present invention among one another and/or certain field element parts, which is either permanently fixed, alternatively and preferably, however, is set up only temporarily. This is readily possible particularly when a hierarchically ordered bus system allows for global bus lines that may be set up and/or dismantled. Regarding the setup and/or dismantling of bus lines, reference is made by incorporation of its entire disclosure to the document WO 98/35294 (PACT07/PCT).


It should be pointed out that prior to building a mask for manufacturing a dedicated chip, recourse may be taken, if necessary, to an emulation, the hardware parts being emulated using FPGA. It is pointed out that the applicant has already proposed building XPP fields, in which PAEs are provided that may represent small FPGA fields. By suitable wiring of several such FPGA PAEs, the hardware structures may then be emulated, if indicated. It is then possible to emulate a verification or emulation of a personalized or customer-specific design by a suitably designed XPP test chip having FPGA PAEs.


While it was indicated above that hardware modules may be constructed by hyper PAEs arranged linearly one behind the other only by way of example, which are suitably parameterized and defined, this is not absolutely necessary. It may be advantageous not to assign to each operand combination in the program part a separate PAE and provide for a linear processing. Rather, in particular in especially complex program parts, it would also be possible to break up the program parts in turn into a multiplicity of different configurations to be processed in the hard module. In such a case, for example, it may be established, for example, that a certain cut for breaking up the program part into two configurations would be advantageous. The manner in which such cuts may be applied is known per se. Reference is made in particular to PCT/EP 02/10065 (PACT11/PCTE). If such a procedure is desired, typically the range of function of the hard module is selected to be such that the range of function at the desired place respectively corresponds to the set union of the operand combinations etc. executed or to be executed using different configurations. It should be pointed out that in a multi-configuration hard module definition, fixed configurations may be provided, if indicated, which are provided in a fixed manner in the hardware module, compare PCT/EP 03/08080 (PACT30/PCTE).


Further, it should be pointed out that if multiple configurations are to be processed successively on the hardware module, the ranges of function of the individual hard module areas, which are obtained by parameterization, that is, the definition of parameters of the hyper PAEs, are preferably selected to be such that respective computing units, considered individually, have still a minimal range of function. This may possibly occur in that the configurations that are divided are executed in such a way that multiplications are always performed in the same PAE if in each configuration only one multiplication is required, and, instead of a multiplier stage, in another PAE, the data lines to be addressed by a certain configuration, required for the return of data or the transmission of data, in particular lines to be implemented here too as next-neighbor connections, are implemented possibly at a lower surface area requirement.

Claims
  • 1. A computer-implemented hardware definition method, the method comprising: analyzing, by a computer processor, software function modules of a software program; andgenerating, by the processor, for each of at least a subset of the software function modules, and on the basis of the analyzing step, a respective setting indicating whether the respective function module is to be implemented as a respective hardware module or as a software module executed on a hardware module defined in a hardware module library that includes at least one parameterizable, executable modules;wherein the generating, for each of at least one of the software function modules, includes: selecting a plurality of hardware modules from the hardware module library based on respective parameters of the respective hardware modules that correspond to the analyzed software function module;combining the selected plurality of hardware modules; andoptimizing the combined hardware modules.
  • 2. A computer-implemented hardware definition method, the method comprising: analyzing, by a computer processor, software function modules of a software program; andgenerating, by the processor, for each of at least a subset of the software function modules, and on the basis of the analyzing step, a respective setting indicating whether the respective function module is to be implemented as a respective hardware module or as a software module executed on a hardware module defined in a hardware module library.
  • 3. The method according to claim 2, wherein at least one of the respective hardware modules is a non-programmable module whose function is fixed.
  • 4. The method according to either of claims 2 and 3, wherein at least one of the respective hardware modules is programmable in its function.
  • 5. The method according to claim 4, further comprising: converting those of the software function modules set in the generating step to be implemented as a respective hardware module into the respective hardware modules.
  • 6. The method according to claim 5, further comprising: adding definitions of the converted software function modules to at least one of the hardware module library and a chip definition file.
  • 7. The method according to claim 6, further comprising: forming a chip based on a combination of the modules in the chip definition file.
  • 8. The method according to claim 7, wherein the forming of the chip includes inserting communication channels, as defined in the chip definition file, between the hardware modules that are combined.
  • 9. The method according to claim 8, further comprising inserting memory units into at least some of the communication channels.
  • 10. The method according to claim 9, wherein at least one of the memory units is a register.
  • 11. The method according to claim 9, wherein at least one of the memory units is a first-in-first-out (FIFO) memory unit.
  • 12. The method according to claim 9, wherein at least one of the memory units is a Random-Access-Memory.
  • 13. The method according to claim 5, wherein the converting includes generating a hardware description language.
  • 14. The method according to claim 5, wherein the converting includes generating a hardware netlist.
  • 15. The method according to claim 5, wherein the converting includes synthesizing the respective hardware modules.
  • 16. The method according to claim 15, wherein the synthesizing includes setting at least one of a processing time, a path delay, and a signal delay constraint.
  • 17. The method according to claim 5, wherein the respective hardware modules are added to the hardware module library.
  • 18. The method according to claim 4, further comprising: optimizing each of one or more of the software function modules for execution as a non-programmable hardware module whose function is fixed.
  • 19. The method according to claim 18, further comprising: for each of the optimized one or more of the software function modules, selecting a suitable one of the hardware modules defined in the module library.
  • 20. The method according to claim 19, further comprising: adding the selected hardware modules to a chip definition file.
  • 21. The method according to claim 20, further comprising: forming a chip based on a combination of the modules in the chip definition file.
  • 22. The method according to claim 21, wherein the forming of the chip includes inserting communication channels, as defined in the chip definition file, between the hardware modules that are combined.
  • 23. The method according to claim 22, further comprising inserting memory units into at least some of the communication channels.
  • 24. The method according to claim 23, wherein at least one of the memory units is a register.
  • 25. The method according to claim 23, wherein at least one of the memory units is a first-in-first-out (FIFO) memory unit.
  • 26. The method according to claim 23, wherein at least one of the memory units is a Random-Access-Memory.
  • 27. The method according to claim 4, further comprising: compiling each of one or more of the software function modules into executable code for at least one of a microprocessor and a microcontroller.
  • 28. The method according to claim 27, further comprising: selecting, for the executable code and from the hardware module library, hardware modules capable of performing the functions required by the executable code.
  • 29. The method according to claim 27, wherein the selecting includes modifying a function required by the executable code to correspond to a function of a module of the hardware module library that is more efficient than the function required by the executable code prior to the modification.
  • 30. The method according to claim 4, further comprising: for each of one or more of the software function modules whose setting indicates that the respective software function module is to be implemented as a software module, selecting a suitable one of the hardware modules defined in the module library for its execution.
  • 31. The method according to claim 30, further comprising: adding the selected hardware modules to a chip definition file.
  • 32. The method according to claim 31, further comprising: forming a chip based on a combination of the modules in the chip definition file.
  • 33. The method according to claim 32, wherein the forming of the chip includes inserting communication channels, as defined in the chip definition file, between the hardware modules that are combined.
  • 34. The method according to claim 33, further comprising inserting memory units into at least some of the communication channels.
  • 35. The method according to claim 34, wherein at least one of the memory units is a register.
  • 36. The method according to claim 34, wherein at least one of the memory units is a first-in-first-out (FIFO) memory unit.
  • 37. The method according to claim 34, wherein at least one of the memory units is a Random-Access-Memory.
  • 38. The method according to claim 3, further comprising: for each of one or more of the software function modules whose setting indicates that the respective software function module is to be implemented as a hardware module, selecting a suitable one of the non-programmable hardware modules defined in the module library for its execution.
  • 39. The method according to claim 38, further comprising: adding the selected hardware modules to a chip definition file.
  • 40. The method according to claim 39, further comprising: forming a chip based on a combination of the modules in the chip definition file.
  • 41. The method according to claim 40, wherein the forming of the chip includes inserting communication channels, as defined in the chip definition file, between the hardware modules that are combined.
  • 42. The method according to claim 41, further comprising inserting memory units into at least some of the communication channels.
  • 43. The method according to claim 42, wherein at least one of the memory units is a register.
  • 44. The method according to claim 42, wherein at least one of the memory units is a first-in-first-out (FIFO) memory unit.
  • 45. The method according to claim 42, wherein at least one of the memory units is a Random-Access-Memory.
  • 46. The method according to claim 2, wherein source code written in a high level programming language is compiled into at least a subset of the software function modules.
  • 47. The method according to claim 2, wherein source code written in one of a low level programming language and an assembly language is compiled into at least a subset of the software function modules.
  • 48. The method according to claim 2, wherein the analyzing includes determining whether any of the software function modules does not meet at least one of a maximum power requirement, a performance requirement, and a maximum chip area requirement.
  • 49. The method according to claim 2, wherein the analyzing includes determining which of the software function modules is estimated to execute with a low performance when implemented as a software module executed on a hardware module whose function is programmable.
  • 50. The method according to claim 2, wherein the analyzing includes analyzing respective required clock frequencies of the software function modules.
  • 51. The method according to claim 2, wherein the analyzing includes analyzing respective frequencies of execution of the software function modules.
  • 52. The method according to claim 51, where the analyzing includes analyzing ratios of frequencies of execution of different ones of the software function module to each other.
  • 53. The method according to claim 2, wherein the analyzing includes analyzing respective power dissipations of the software function modules.
  • 54. The method according to claim 2, wherein the hardware module library includes at least one parameterizable, executable module.
  • 55. The method according to claim 54, wherein the generating, for each of at least one of the software function modules, includes selecting a hardware module from the hardware module library based on a parameter of the respective hardware module that corresponds to the respective analyzed software function module.
Priority Claims (4)
Number Date Country Kind
06001043 Jan 2006 EP regional
06400003 Jan 2006 EP regional
10 2006 003 275 Jan 2006 DE national
10 2006 004 151 Jan 2006 DE national
PCT Information
Filing Document Filing Date Country Kind 371c Date
PCT/EP2007/000380 1/17/2007 WO 00 12/2/2008
Publishing Document Publishing Date Country Kind
WO2007/082730 7/26/2007 WO A
US Referenced Citations (611)
Number Name Date Kind
2067477 Cooper Jan 1937 A
3242998 Gubbins Mar 1966 A
3564506 Bee et al. Feb 1971 A
3681578 Stevens Aug 1972 A
3753008 Guarnaschelli Aug 1973 A
3855577 Vandierendonck Dec 1974 A
4151611 Sugawara et al. Apr 1979 A
4233667 Devine et al. Nov 1980 A
4414547 Knapp et al. Nov 1983 A
4498134 Hansen et al. Feb 1985 A
4498172 Bhavsar Feb 1985 A
4566102 Hefner Jan 1986 A
4571736 Agrawal et al. Feb 1986 A
4590583 Miller May 1986 A
4591979 Iwashita May 1986 A
4594682 Drimak Jun 1986 A
4663706 Allen et al. May 1987 A
4667190 Fant et al. May 1987 A
4682284 Schrofer Jul 1987 A
4686386 Tadao Aug 1987 A
4706216 Carter Nov 1987 A
4720778 Hall et al. Jan 1988 A
4720780 Dolecek Jan 1988 A
4739474 Holsztynski Apr 1988 A
4761755 Ardini et al. Aug 1988 A
4791603 Henry Dec 1988 A
4811214 Nosenchuck et al. Mar 1989 A
4852043 Guest Jul 1989 A
4852048 Morton Jul 1989 A
4860201 Stolfo et al. Aug 1989 A
4870302 Freeman Sep 1989 A
4873666 Lefebvre et al. Oct 1989 A
4882687 Gordon Nov 1989 A
4884231 Mor et al. Nov 1989 A
4891810 de Corlieu et al. Jan 1990 A
4901268 Judd Feb 1990 A
4910665 Mattheyses et al. Mar 1990 A
4918440 Furtek et al. Apr 1990 A
4939641 Schwartz et al. Jul 1990 A
4959781 Rubenstein et al. Sep 1990 A
4967340 Dawes Oct 1990 A
4972314 Getzinger et al. Nov 1990 A
4992933 Taylor Feb 1991 A
5010401 Murakami et al. Apr 1991 A
5014193 Garner et al. May 1991 A
5015884 Agrawal et al. May 1991 A
5021947 Campbell et al. Jun 1991 A
5023775 Poret Jun 1991 A
5034914 Osterlund Jul 1991 A
5036473 Butts et al. Jul 1991 A
5036493 Nielsen Jul 1991 A
5041924 Blackborow et al. Aug 1991 A
5043978 Nagler et al. Aug 1991 A
5047924 Fujioka et al. Sep 1991 A
5055997 Sluijter et al. Oct 1991 A
5065308 Evans Nov 1991 A
5072178 Matsumoto Dec 1991 A
5081375 Pickett et al. Jan 1992 A
5099447 Myszewski Mar 1992 A
5103311 Sluijter et al. Apr 1992 A
5109503 Cruickshank et al. Apr 1992 A
5113498 Evan et al. May 1992 A
5115510 Okamoto et al. May 1992 A
5119290 Loo et al. Jun 1992 A
5123109 Hillis Jun 1992 A
5125801 Nabity et al. Jun 1992 A
5128559 Steele Jul 1992 A
5142469 Weisenborn Aug 1992 A
5144166 Camarota et al. Sep 1992 A
5193202 Jackson et al. Mar 1993 A
5203005 Horst Apr 1993 A
5204935 Mihara et al. Apr 1993 A
5208491 Ebeling et al. May 1993 A
5212716 Ferraiolo et al. May 1993 A
5212777 Gove et al. May 1993 A
5218302 Loewe et al. Jun 1993 A
5226122 Thayer et al. Jul 1993 A
RE34363 Freeman Aug 1993 E
5233539 Agrawal et al. Aug 1993 A
5237686 Asano et al. Aug 1993 A
5243238 Kean Sep 1993 A
5247689 Ewert Sep 1993 A
RE34444 Kaplinsky Nov 1993 E
5274593 Proebsting Dec 1993 A
5276836 Fukumaru et al. Jan 1994 A
5287472 Horst Feb 1994 A
5287511 Robinson et al. Feb 1994 A
5287532 Hunt Feb 1994 A
5294119 Vincent et al. Mar 1994 A
5301284 Estes et al. Apr 1994 A
5301344 Kolchinsky Apr 1994 A
5303172 Magar et al. Apr 1994 A
5311079 Ditlow et al. May 1994 A
5327125 Iwase et al. Jul 1994 A
5336950 Popli et al. Aug 1994 A
5343406 Freeman et al. Aug 1994 A
5347639 Rechtschaffen et al. Sep 1994 A
5349193 Mott et al. Sep 1994 A
5353432 Richek et al. Oct 1994 A
5355508 Kan Oct 1994 A
5361373 Gilson Nov 1994 A
5365125 Goetting et al. Nov 1994 A
5379444 Mumme Jan 1995 A
5386154 Goetting et al. Jan 1995 A
5386518 Reagle et al. Jan 1995 A
5392437 Matter et al. Feb 1995 A
5408643 Katayose Apr 1995 A
5410723 Schmidt et al. Apr 1995 A
5412795 Larson May 1995 A
5418952 Morley et al. May 1995 A
5418953 Hunt et al. May 1995 A
5421019 Holsztynski et al. May 1995 A
5422823 Agrawal et al. Jun 1995 A
5425036 Liu et al. Jun 1995 A
5426378 Ong Jun 1995 A
5428526 Flood et al. Jun 1995 A
5430687 Hung et al. Jul 1995 A
5435000 Boothroyd et al. Jul 1995 A
5440245 Galbraith et al. Aug 1995 A
5440538 Olsen et al. Aug 1995 A
5442790 Nosenchuck Aug 1995 A
5444394 Watson et al. Aug 1995 A
5448186 Kawata Sep 1995 A
5450022 New Sep 1995 A
5455525 Ho et al. Oct 1995 A
5457644 McCollum Oct 1995 A
5465375 Thepaut et al. Nov 1995 A
5469003 Kean Nov 1995 A
5473266 Ahanin et al. Dec 1995 A
5473267 Stansfield Dec 1995 A
5475583 Bock et al. Dec 1995 A
5475803 Stearns et al. Dec 1995 A
5475856 Kogge Dec 1995 A
5477525 Okabe Dec 1995 A
5483620 Pechanek et al. Jan 1996 A
5485103 Pedersen et al. Jan 1996 A
5485104 Agrawal et al. Jan 1996 A
5489857 Agrawal et al. Feb 1996 A
5491353 Kean Feb 1996 A
5493239 Zlotnick Feb 1996 A
5493663 Parikh Feb 1996 A
5497498 Taylor Mar 1996 A
5502838 Kikinis Mar 1996 A
5504439 Tavana Apr 1996 A
5506998 Kato et al. Apr 1996 A
5510730 El Gamal et al. Apr 1996 A
5511173 Yamaura et al. Apr 1996 A
5513366 Agarwal et al. Apr 1996 A
5521837 Frankle et al. May 1996 A
5522083 Gove et al. May 1996 A
5525971 Flynn Jun 1996 A
5530873 Takano Jun 1996 A
5530946 Bouvier et al. Jun 1996 A
5532693 Winters et al. Jul 1996 A
5532957 Malhi Jul 1996 A
5535406 Kolchinsky Jul 1996 A
5537057 Leong et al. Jul 1996 A
5537580 Giomi et al. Jul 1996 A
5537601 Kimura et al. Jul 1996 A
5541530 Cliff et al. Jul 1996 A
5544336 Kato et al. Aug 1996 A
5548773 Kemeny et al. Aug 1996 A
5550782 Cliff et al. Aug 1996 A
5555434 Carlstedt Sep 1996 A
5559450 Ngai et al. Sep 1996 A
5561738 Kinerk et al. Oct 1996 A
5568624 Sites et al. Oct 1996 A
5570040 Lytle et al. Oct 1996 A
5572710 Asano et al. Nov 1996 A
5574927 Scantlin Nov 1996 A
5574930 Halverson, Jr. et al. Nov 1996 A
5581731 King et al. Dec 1996 A
5581734 DiBrino et al. Dec 1996 A
5583450 Trimberger et al. Dec 1996 A
5584013 Cheong et al. Dec 1996 A
5586044 Agrawal et al. Dec 1996 A
5587921 Agrawal et al. Dec 1996 A
5588152 Dapp et al. Dec 1996 A
5590345 Barker et al. Dec 1996 A
5590348 Phillips et al. Dec 1996 A
5596742 Agarwal et al. Jan 1997 A
5600265 El Gamal Abbas et al. Feb 1997 A
5600597 Kean et al. Feb 1997 A
5600845 Gilson Feb 1997 A
5602999 Hyatt Feb 1997 A
5606698 Powell Feb 1997 A
5608342 Trimberger Mar 1997 A
5611049 Pitts Mar 1997 A
5617547 Feeney et al. Apr 1997 A
5617577 Barker et al. Apr 1997 A
5619720 Garde et al. Apr 1997 A
5625806 Kromer Apr 1997 A
5625836 Barker et al. Apr 1997 A
5627992 Baror May 1997 A
5634131 Matter et al. May 1997 A
5635851 Tavana Jun 1997 A
5642058 Trimberger et al. Jun 1997 A
5646544 Iadanza Jul 1997 A
5646545 Trimberger et al. Jul 1997 A
5649176 Selvidge et al. Jul 1997 A
5649179 Steenstra et al. Jul 1997 A
5652529 Gould et al. Jul 1997 A
5652894 Hu et al. Jul 1997 A
5655069 Ogawara et al. Aug 1997 A
5655124 Lin Aug 1997 A
5656950 Duong et al. Aug 1997 A
5657330 Matsumoto Aug 1997 A
5659785 Pechanek et al. Aug 1997 A
5659797 Zandveld et al. Aug 1997 A
5675262 Duong et al. Oct 1997 A
5675743 Mavity Oct 1997 A
5675757 Davidson et al. Oct 1997 A
5675777 Glickman Oct 1997 A
5680583 Kuijsten Oct 1997 A
5682491 Pechanek et al. Oct 1997 A
5682544 Pechanek et al. Oct 1997 A
5687325 Chang Nov 1997 A
5694602 Smith Dec 1997 A
5696791 Yeung Dec 1997 A
5696976 Nizar et al. Dec 1997 A
5701091 Kean Dec 1997 A
5705938 Kean Jan 1998 A
5706482 Matsushima et al. Jan 1998 A
5713037 Wilkinson et al. Jan 1998 A
5717890 Ichida et al. Feb 1998 A
5717943 Barker et al. Feb 1998 A
5727229 Kan et al. Mar 1998 A
5732209 Vigil et al. Mar 1998 A
5734869 Chen Mar 1998 A
5734921 Dapp et al. Mar 1998 A
5737516 Circello et al. Apr 1998 A
5737565 Mayfield Apr 1998 A
5742180 DeHon et al. Apr 1998 A
5745734 Craft et al. Apr 1998 A
5748872 Norman May 1998 A
5748979 Trimberger May 1998 A
5752035 Trimberger May 1998 A
5754459 Telikepalli May 1998 A
5754820 Yamagami May 1998 A
5754827 Barbier et al. May 1998 A
5754871 Wilkinson et al. May 1998 A
5754876 Tamaki et al. May 1998 A
5760602 Tan Jun 1998 A
5761484 Agarwal et al. Jun 1998 A
5768629 Wise et al. Jun 1998 A
5773994 Jones Jun 1998 A
5778439 Timberger et al. Jul 1998 A
5781756 Hung Jul 1998 A
5784313 Trimberger et al. Jul 1998 A
5784630 Saito et al. Jul 1998 A
5784636 Rupp Jul 1998 A
5794059 Barker et al. Aug 1998 A
5794062 Baxter Aug 1998 A
5801547 Kean Sep 1998 A
5801715 Norman Sep 1998 A
5801958 Dangelo et al. Sep 1998 A
5802290 Casselman Sep 1998 A
5804986 Jones Sep 1998 A
5815004 Trimberger et al. Sep 1998 A
5815715 Kayhan Sep 1998 A
5815726 Cliff Sep 1998 A
5821774 Veytsman et al. Oct 1998 A
5828229 Cliff et al. Oct 1998 A
5828858 Athanas et al. Oct 1998 A
5831448 Kean Nov 1998 A
5832288 Wong Nov 1998 A
5838165 Chatter Nov 1998 A
5838988 Panwar et al. Nov 1998 A
5841973 Kessler et al. Nov 1998 A
5844422 Trimberger et al. Dec 1998 A
5844888 Markkula, Jr. et al. Dec 1998 A
5848238 Shimomura et al. Dec 1998 A
5854918 Baxter Dec 1998 A
5857097 Henzinger et al. Jan 1999 A
5857109 Taylor Jan 1999 A
5859544 Norman Jan 1999 A
5860119 Dockser Jan 1999 A
5862403 Kanai et al. Jan 1999 A
5865239 Carr Feb 1999 A
5867691 Shiraishi Feb 1999 A
5867723 Chin et al. Feb 1999 A
5870620 Kadosumi et al. Feb 1999 A
5884075 Hester et al. Mar 1999 A
5887162 Williams et al. Mar 1999 A
5887165 Martel et al. Mar 1999 A
5889533 Lee Mar 1999 A
5889982 Rodgers et al. Mar 1999 A
5892370 Eaton et al. Apr 1999 A
5892961 Trimberger Apr 1999 A
5892962 Cloutier Apr 1999 A
5894565 Furtek et al. Apr 1999 A
5895487 Boyd et al. Apr 1999 A
5898602 Rothman et al. Apr 1999 A
5901279 Davis, III May 1999 A
5915099 Takata et al. Jun 1999 A
5915123 Mirsky et al. Jun 1999 A
5924119 Sindhu et al. Jul 1999 A
5926638 Inoue Jul 1999 A
5927423 Wada et al. Jul 1999 A
5933023 Young Aug 1999 A
5933642 Greenbaum et al. Aug 1999 A
5936424 Young et al. Aug 1999 A
5943242 Vorbach et al. Aug 1999 A
5956518 DeHon et al. Sep 1999 A
5960193 Guttag et al. Sep 1999 A
5960200 Eager et al. Sep 1999 A
5966143 Breternitz, Jr. Oct 1999 A
5966534 Cooke et al. Oct 1999 A
5970254 Cooke et al. Oct 1999 A
5978260 Trimberger et al. Nov 1999 A
5978583 Ekanadham et al. Nov 1999 A
5996048 Cherabuddi et al. Nov 1999 A
5996083 Gupta et al. Nov 1999 A
5999990 Sharrit et al. Dec 1999 A
6003143 Kim et al. Dec 1999 A
6011407 New Jan 2000 A
6014509 Furtek et al. Jan 2000 A
6020758 Patel et al. Feb 2000 A
6020760 Sample et al. Feb 2000 A
6021490 Vorbach et al. Feb 2000 A
6023564 Trimberger Feb 2000 A
6023742 Ebeling et al. Feb 2000 A
6026478 Dowling Feb 2000 A
6026481 New et al. Feb 2000 A
6034538 Abramovici Mar 2000 A
6035371 Magloire Mar 2000 A
6038650 Vorbach et al. Mar 2000 A
6038656 Martin et al. Mar 2000 A
6044030 Zheng et al. Mar 2000 A
6047115 Mohan et al. Apr 2000 A
6049222 Lawman Apr 2000 A
6049866 Earl Apr 2000 A
6052773 DeHon et al. Apr 2000 A
6054873 Laramie Apr 2000 A
6055619 North et al. Apr 2000 A
6058469 Baxter May 2000 A
6076157 Borkenhagen et al. Jun 2000 A
6077315 Greenbaum et al. Jun 2000 A
6078736 Guccione Jun 2000 A
6081903 Vorbach et al. Jun 2000 A
6084429 Trimberger Jul 2000 A
6085317 Smith Jul 2000 A
6086628 Dave et al. Jul 2000 A
6088795 Vorbach et al. Jul 2000 A
6092174 Roussakov Jul 2000 A
6096091 Hartmann Aug 2000 A
6105105 Trimberger et al. Aug 2000 A
6105106 Manning Aug 2000 A
6108760 Mirsky et al. Aug 2000 A
6118724 Higginbottom Sep 2000 A
6119181 Vorbach et al. Sep 2000 A
6122719 Mirsky et al. Sep 2000 A
6125072 Wu Sep 2000 A
6125408 McGee et al. Sep 2000 A
6127908 Bozler et al. Oct 2000 A
6128720 Pechanek et al. Oct 2000 A
6134166 Lytle et al. Oct 2000 A
6137307 Iwanczuk et al. Oct 2000 A
6145072 Shams et al. Nov 2000 A
6150837 Beal et al. Nov 2000 A
6150839 New et al. Nov 2000 A
6154048 Iwanczuk et al. Nov 2000 A
6154049 New Nov 2000 A
6154826 Wulf et al. Nov 2000 A
6157214 Marshall Dec 2000 A
6170051 Dowling Jan 2001 B1
6172520 Lawman et al. Jan 2001 B1
6173419 Barnett Jan 2001 B1
6173434 Wirthlin et al. Jan 2001 B1
6178494 Casselman Jan 2001 B1
6185256 Saito et al. Feb 2001 B1
6185731 Maeda et al. Feb 2001 B1
6188240 Nakaya Feb 2001 B1
6188650 Hamada et al. Feb 2001 B1
6198304 Sasaki Mar 2001 B1
6201406 Iwanczuk et al. Mar 2001 B1
6202182 Abramovici et al. Mar 2001 B1
6204687 Schultz et al. Mar 2001 B1
6211697 Lien et al. Apr 2001 B1
6212544 Borkenhagen et al. Apr 2001 B1
6212650 Guccione Apr 2001 B1
6215326 Jefferson et al. Apr 2001 B1
6216223 Revilla et al. Apr 2001 B1
6219833 Solomon et al. Apr 2001 B1
RE37195 Kean May 2001 E
6230307 Davis et al. May 2001 B1
6240502 Panwar et al. May 2001 B1
6243808 Wang Jun 2001 B1
6247147 Beenstra et al. Jun 2001 B1
6252792 Marshall et al. Jun 2001 B1
6256724 Hocevar et al. Jul 2001 B1
6260114 Schug Jul 2001 B1
6260179 Ohsawa et al. Jul 2001 B1
6262908 Marshall et al. Jul 2001 B1
6263430 Trimberger et al. Jul 2001 B1
6266760 DeHon et al. Jul 2001 B1
6279077 Nasserbakht et al. Aug 2001 B1
6282627 Wong et al. Aug 2001 B1
6282701 Wygodny et al. Aug 2001 B1
6285624 Chen Sep 2001 B1
6286134 Click, Jr. et al. Sep 2001 B1
6288566 Hanrahan et al. Sep 2001 B1
6289440 Casselman Sep 2001 B1
6298043 Mauger et al. Oct 2001 B1
6298396 Loyer et al. Oct 2001 B1
6298472 Phillips et al. Oct 2001 B1
6301706 Maslennikov et al. Oct 2001 B1
6311200 Hanrahan et al. Oct 2001 B1
6311265 Beckerle et al. Oct 2001 B1
6321298 Hubis Nov 2001 B1
6321366 Tseng et al. Nov 2001 B1
6321373 Ekanadham et al. Nov 2001 B1
6338106 Vorbach et al. Jan 2002 B1
6339840 Kothari et al. Jan 2002 B1
6341318 Dakhil Jan 2002 B1
6347346 Taylor Feb 2002 B1
6349346 Hanrahan et al. Feb 2002 B1
6353841 Marshall et al. Mar 2002 B1
6362650 New et al. Mar 2002 B1
6370596 Dakhil Apr 2002 B1
6373779 Pang et al. Apr 2002 B1
6374286 Gee Apr 2002 B1
6378068 Foster et al. Apr 2002 B1
6381624 Colon-Bonet et al. Apr 2002 B1
6389379 Lin et al. May 2002 B1
6389579 Phillips et al. May 2002 B1
6392912 Hanrahan et al. May 2002 B1
6398383 Huang Jun 2002 B1
6400601 Sudo et al. Jun 2002 B1
6404224 Azegami et al. Jun 2002 B1
6405185 Pechanek et al. Jun 2002 B1
6405299 Vorbach et al. Jun 2002 B1
6421808 McGeer Jul 2002 B1
6421809 Wuytack et al. Jul 2002 B1
6421817 Mohan et al. Jul 2002 B1
6425054 Nguyen Jul 2002 B1
6425068 Vorbach Jul 2002 B1
6426649 Fu et al. Jul 2002 B1
6427156 Chapman et al. Jul 2002 B1
6430309 Pressman et al. Aug 2002 B1
6434642 Camilleri et al. Aug 2002 B1
6434672 Gaither Aug 2002 B1
6434695 Esfahani et al. Aug 2002 B1
6434699 Jones et al. Aug 2002 B1
6437441 Yamamoto Aug 2002 B1
6438747 Schreiber et al. Aug 2002 B1
6449283 Chao et al. Sep 2002 B1
6456628 Greim et al. Sep 2002 B1
6457116 Mirsky et al. Sep 2002 B1
6476634 Bilski Nov 2002 B1
6477643 Vorbach et al. Nov 2002 B1
6480937 Vorbach et al. Nov 2002 B1
6480954 Trimberger et al. Nov 2002 B2
6483343 Faith et al. Nov 2002 B1
6487709 Keller et al. Nov 2002 B1
6490695 Zagorski et al. Dec 2002 B1
6496740 Robertson et al. Dec 2002 B1
6496902 Faanes et al. Dec 2002 B1
6496971 Lesea et al. Dec 2002 B1
6504398 Lien et al. Jan 2003 B1
6507898 Gibson et al. Jan 2003 B1
6507947 Schreiber et al. Jan 2003 B1
6512804 Johnson et al. Jan 2003 B1
6513077 Vorbach et al. Jan 2003 B2
6516382 Manning Feb 2003 B2
6518787 Allegrucci et al. Feb 2003 B1
6519674 Lam et al. Feb 2003 B1
6523107 Stansfield et al. Feb 2003 B1
6525678 Veenstra et al. Feb 2003 B1
6526520 Vorbach et al. Feb 2003 B1
6538468 Moore Mar 2003 B1
6538470 Langhammer et al. Mar 2003 B1
6539415 Mercs Mar 2003 B1
6539438 Ledzius et al. Mar 2003 B1
6539477 Seawright Mar 2003 B1
6542394 Marshall et al. Apr 2003 B2
6542844 Hanna Apr 2003 B1
6542998 Vorbach Apr 2003 B1
6553395 Marshall et al. Apr 2003 B2
6553479 Mirsky et al. Apr 2003 B2
6567834 Marshall et al. May 2003 B1
6571381 Vorbach et al. May 2003 B1
6587939 Takano Jul 2003 B1
6598128 Yoshioka et al. Jul 2003 B1
6606704 Adiletta et al. Aug 2003 B1
6624819 Lewis Sep 2003 B1
6625631 Ruehle Sep 2003 B2
6631487 Abramovici et al. Oct 2003 B1
6633181 Rupp Oct 2003 B1
6657457 Hanrahan et al. Dec 2003 B1
6658564 Smith et al. Dec 2003 B1
6665758 Frazier et al. Dec 2003 B1
6668237 Guccione et al. Dec 2003 B1
6681388 Sato et al. Jan 2004 B1
6687788 Vorbach et al. Feb 2004 B2
6697979 Vorbach et al. Feb 2004 B1
6704816 Burke Mar 2004 B1
6708325 Cooke et al. Mar 2004 B2
6717436 Kress et al. Apr 2004 B2
6721830 Vorbach et al. Apr 2004 B2
6725334 Barroso et al. Apr 2004 B2
6728871 Vorbach et al. Apr 2004 B1
6745317 Mirsky et al. Jun 2004 B1
6748440 Lisitsa et al. Jun 2004 B1
6751722 Mirsky et al. Jun 2004 B2
6754805 Juan Jun 2004 B1
6757847 Farkash et al. Jun 2004 B1
6757892 Gokhale et al. Jun 2004 B1
6782445 Olgiati et al. Aug 2004 B1
6785826 Durham et al. Aug 2004 B1
6802206 Kurecka et al. Oct 2004 B2
6803787 Wicker, Jr. Oct 2004 B1
6820188 Stansfield et al. Nov 2004 B2
6829697 Davis et al. Dec 2004 B1
6836842 Guccione et al. Dec 2004 B1
6847370 Baldwin et al. Jan 2005 B2
6859869 Vorbach Feb 2005 B1
6868476 Rosenbluth et al. Mar 2005 B2
6871341 Shyr Mar 2005 B1
6874108 Abramovici et al. Mar 2005 B1
6886092 Douglass et al. Apr 2005 B1
6901502 Yano et al. May 2005 B2
6928523 Yamada Aug 2005 B2
6957306 So et al. Oct 2005 B2
6961924 Bates et al. Nov 2005 B2
6975138 Pani et al. Dec 2005 B2
6977649 Baldwin et al. Dec 2005 B1
7000161 Allen et al. Feb 2006 B1
7007096 Lisitsa et al. Feb 2006 B1
7010687 Ichimura Mar 2006 B2
7028107 Vorbach et al. Apr 2006 B2
7036114 McWilliams et al. Apr 2006 B2
7038952 Zack et al. May 2006 B1
7043416 Lin May 2006 B1
7144152 Rusu et al. Dec 2006 B2
7210129 May et al. Apr 2007 B2
7216204 Rosenbluth et al. May 2007 B2
7237087 Vorbach et al. Jun 2007 B2
7249351 Songer et al. Jul 2007 B1
7254649 Subramanian et al. Aug 2007 B2
7340596 Crosland et al. Mar 2008 B1
7346644 Langhammer et al. Mar 2008 B1
7350178 Crosland et al. Mar 2008 B1
7382156 Pani et al. Jun 2008 B2
7455450 Liu et al. Nov 2008 B2
7595659 Vorbach et al. Sep 2009 B2
7650448 Vorbach et al. Jan 2010 B2
7657877 Vorbach et al. Feb 2010 B2
7759968 Hussein et al. Jul 2010 B1
7873811 Wolinski et al. Jan 2011 B1
20010001860 Bieu May 2001 A1
20010003834 Shimonishi Jun 2001 A1
20010010074 Nishihara et al. Jul 2001 A1
20010018733 Fujii et al. Aug 2001 A1
20010032305 Barry Oct 2001 A1
20020010853 Trimberger et al. Jan 2002 A1
20020013861 Adiletta et al. Jan 2002 A1
20020038414 Taylor Mar 2002 A1
20020045952 Blemel Apr 2002 A1
20020051482 Lomp May 2002 A1
20020073282 Chauvel et al. Jun 2002 A1
20020083308 Pereira et al. Jun 2002 A1
20020099759 Gootherts Jul 2002 A1
20020103839 Ozawa Aug 2002 A1
20020124238 Metzgen Sep 2002 A1
20020138716 Master et al. Sep 2002 A1
20020143505 Drusinsky Oct 2002 A1
20020144229 Hanrahan Oct 2002 A1
20020147932 Brock et al. Oct 2002 A1
20020152060 Tseng Oct 2002 A1
20020156962 Chopra et al. Oct 2002 A1
20020165886 Lam Nov 2002 A1
20030001615 Sueyoshi et al. Jan 2003 A1
20030014743 Cooke et al. Jan 2003 A1
20030046607 May et al. Mar 2003 A1
20030052711 Taylor Mar 2003 A1
20030055861 Lai et al. Mar 2003 A1
20030056062 Prabhu Mar 2003 A1
20030056085 Vorbach Mar 2003 A1
20030056091 Greenberg Mar 2003 A1
20030056202 May et al. Mar 2003 A1
20030061542 Bates et al. Mar 2003 A1
20030062922 Douglass et al. Apr 2003 A1
20030070059 Dally et al. Apr 2003 A1
20030086300 Noyes et al. May 2003 A1
20030093662 Vorbach et al. May 2003 A1
20030097513 Vorbach et al. May 2003 A1
20030123579 Safavi et al. Jul 2003 A1
20030135686 Vorbach et al. Jul 2003 A1
20030154349 Berg et al. Aug 2003 A1
20030192032 Andrade et al. Oct 2003 A1
20040015899 May et al. Jan 2004 A1
20040025005 Vorbach et al. Feb 2004 A1
20040039880 Pentkovski et al. Feb 2004 A1
20040078548 Claydon et al. Apr 2004 A1
20040168099 Vorbach et al. Aug 2004 A1
20040199688 Vorbach et al. Oct 2004 A1
20050066213 Vorbach et al. Mar 2005 A1
20050091468 Morita et al. Apr 2005 A1
20050144210 Simkins et al. Jun 2005 A1
20050144212 Simkins et al. Jun 2005 A1
20050144215 Simkins et al. Jun 2005 A1
20060036988 Allen et al. Feb 2006 A1
20060230094 Simkins et al. Oct 2006 A1
20060230096 Thendean et al. Oct 2006 A1
20070050603 Vorbach et al. Mar 2007 A1
20070083730 Vorbach et al. Apr 2007 A1
20080313383 Morita et al. Dec 2008 A1
20090085603 Paul et al. Apr 2009 A1
20090193384 Sima et al. Jul 2009 A1
20100306602 Kamiya et al. Dec 2010 A1
Foreign Referenced Citations (125)
Number Date Country
42 21 278 Jan 1994 DE
44 16 881 Nov 1994 DE
38 55 673 Nov 1996 DE
196 51 075 Jun 1998 DE
196 54 593 Jul 1998 DE
196 54 595 Jul 1998 DE
196 54 846 Jul 1998 DE
197 04 044 Aug 1998 DE
197 04 728 Aug 1998 DE
197 04 742 Sep 1998 DE
198 22 776 Mar 1999 DE
198 07 872 Aug 1999 DE
198 61 088 Feb 2000 DE
199 26 538 Dec 2000 DE
100 28 397 Dec 2001 DE
100 36 627 Feb 2002 DE
101 29 237 Apr 2002 DE
102 04 044 Aug 2003 DE
0 208 457 Jan 1987 EP
0 221 360 May 1987 EP
0 398 552 Nov 1990 EP
0 428 327 May 1991 EP
0 463 721 Jan 1992 EP
0 477 809 Apr 1992 EP
0 485 690 May 1992 EP
0 497 029 Aug 1992 EP
0 539 595 May 1993 EP
0 638 867 Aug 1994 EP
0 628 917 Dec 1994 EP
0 678 985 Oct 1995 EP
0 686 915 Dec 1995 EP
0 707 269 Apr 1996 EP
0 726 532 Aug 1996 EP
0 735 685 Oct 1996 EP
0 746 106 Dec 1996 EP
0 748 051 Dec 1996 EP
0 926 594 Jun 1999 EP
1 061 439 Dec 2000 EP
1 102 674 May 2001 EP
1 115 204 Jul 2001 EP
1 146 432 Oct 2001 EP
0 696 001 Dec 2001 EP
1 669 885 Jun 2006 EP
2 752 466 Feb 1998 FR
2 304 438 Mar 1997 GB
58-58672 Apr 1983 JP
10-44571 Feb 1989 JP
1-229378 Sep 1989 JP
2-130023 May 1990 JP
2-226423 Sep 1990 JP
5-265705 Oct 1993 JP
5-276007 Oct 1993 JP
6-266605 Sep 1994 JP
7-086921 Mar 1995 JP
7-154242 Jun 1995 JP
8-148989 Jun 1995 JP
7-182160 Jul 1995 JP
7-182167 Jul 1995 JP
8-44581 Feb 1996 JP
08069447 Mar 1996 JP
8-101761 Apr 1996 JP
8-102492 Apr 1996 JP
8-106443 Apr 1996 JP
8-221164 Aug 1996 JP
8-250685 Sep 1996 JP
9-27745 Jan 1997 JP
9-237284 Sep 1997 JP
9-294069 Nov 1997 JP
11-046187 Feb 1999 JP
11-184718 Jul 1999 JP
11-307725 Nov 1999 JP
2000-076066 Mar 2000 JP
2000-181566 Jun 2000 JP
2000-201066 Jul 2000 JP
2000-311156 Nov 2000 JP
2001-500682 Jan 2001 JP
2001-167066 Jun 2001 JP
2001-510650 Jul 2001 JP
2001-236221 Aug 2001 JP
2002-0033457 Jan 2002 JP
05-509184 Dec 2003 JP
3-961028 Aug 2007 JP
WO9004835 May 1990 WO
WO9011648 Oct 1990 WO
WO9201987 Feb 1992 WO
WO9311503 Jun 1993 WO
WO9406077 Mar 1994 WO
WO9408399 Apr 1994 WO
WO9526001 Sep 1995 WO
WO9810517 Mar 1998 WO
WO9826356 Jun 1998 WO
WO9828697 Jul 1998 WO
WO9829952 Jul 1998 WO
WO9831102 Jul 1998 WO
WO9835294 Aug 1998 WO
WO9835299 Aug 1998 WO
WO9900731 Jan 1999 WO
WO9900739 Jan 1999 WO
WO9912111 Mar 1999 WO
WO9932975 Jul 1999 WO
WO9940522 Aug 1999 WO
WO9944120 Sep 1999 WO
WO9944147 Sep 1999 WO
WO0017771 Mar 2000 WO
WO0038087 Jun 2000 WO
0045282 Aug 2000 WO
WO0049496 Aug 2000 WO
WO0077652 Dec 2000 WO
WO0155917 Aug 2001 WO
WO0213000 Feb 2002 WO
WO0229600 Apr 2002 WO
WO0250665 Jun 2002 WO
WO02071196 Sep 2002 WO
WO02071248 Sep 2002 WO
WO02071249 Sep 2002 WO
WO02103532 Dec 2002 WO
WO03017095 Feb 2003 WO
WO03023616 Mar 2003 WO
WO03025781 Mar 2003 WO
WO03036507 May 2003 WO
WO 03091875 Nov 2003 WO
WO2004053718 Jun 2004 WO
WO2004114128 Dec 2004 WO
WO2005045692 May 2005 WO
WO 2007030395 Mar 2007 WO
Related Publications (1)
Number Date Country
20090199167 A1 Aug 2009 US