Various approaches for generating input data for simulating a circuit design are disclosed. In one approach, a test generator program is generated from a main program that uses a test generator class library. The test generator class library includes a software driver class corresponding to the hardware driver, and the software driver class includes a storage class corresponding to each memory within the hardware driver, a first set including at least one method for writing function codes to a first object of the storage class, and a second set including at least one method for writing data to a second object of the storage class. function codes are written to the first object of the storage class in response to a call by the test generator program to a method in the first set. data of a first type is written to the second object of the storage class in response to a call by the test generator program to a method in the second set, wherein the data of the first type is data to be provided by the driver as input to the simulated circuit design.
|
12. A system for generating input data to a hardware driver that drives inputs of a simulated electronic circuit design, comprising:
means for translating a programmatic specification of functions for performance by the hardware driver into function codes input to the hardware driver;
means for translating a programmatic specification of input data for the hardware driver into a first format recognized by the hardware driver;
means for translating a programmatic specification of mask values into a second format recognized by the hardware driver;
means for storing the function codes;
means for storing the input data of the first format; and
means for storing the mask values in the second format.
1. A processor-implemented method for generating input data to a hardware driver that drives inputs of a simulated electronic circuit design, comprising:
generating a test generator program from a main program that uses a test generator class library, wherein the test generator class library includes a software driver class corresponding to the hardware driver, and the software driver class includes a storage class corresponding to each memory within the hardware driver, a first set including at least one method for writing function codes to a first object of the storage class, and a second set including at least one method for writing data to a second object of the storage class;
writing function codes to the first object of the storage class in response to a call by the test generator program to a method in the first set, wherein a function code is decodable by the hardware driver and designates an operation for performance by the driver; and
writing data of a first type to the second object of the storage class in response to a call by the test generator program to a method in the second set, wherein the data of the first type is data provided by the driver as input to the simulated circuit design.
2. The method of
3. The method of
4. The method of
5. The method of
writing a first set of data of a third type to a fourth object of the storage class in response to a call by the test generator program to a method in the second set, wherein the first set of data of the third type is data for comparison provided to the hardware driver from a first component of the simulated electronic circuit design; and
writing a second set of data of the third type to a fifth object of the storage class in response to a call by the test generator program to a method in the second set, wherein the second set of data of the third type is data for comparison provided to the hardware driver from a second component of the simulated electronic circuit design.
6. The method of
7. The method of
8. The method of
9. The method of
adding to a first database a label name and associated address in the first object of the storage class, in response to a call by the test generator program to a label method of the software driver class, wherein the call to the label method specifies the label name; and
writing to the first object of the storage class a first jump function code in combination with an address associated with a first label name in the first database in response to a first call by the test generator program to a jump method of the software driver class, wherein the first call to the jump method specifies the first label name.
10. The method of
in response to a second call by the test generator program to the jump method, wherein the second call to the jump method specifies a second label name that is not in the first database, adding to a second database the second label name and an associated address of a second jump function code in the first object of the storage class, and writing the second jump function code to the first object of the storage class; and
in response to a call by the test generator program that specifies the second label to the label method, writing an address of the second label in the first object of the storage class in combination with the second jump function code, to the first object of the storage class at the address associated with the second label name in the second database.
11. The method of
|
A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever.
The present disclosure relates to generating test programs for loading into a port driver to drive input to a simulated electronic circuit design and verify output.
Modern integrated circuits may have millions of transistors or “gates” created on monolithic substrates of silicon. These circuits, perhaps two tenths of an inch square, are quite complex in their internal organization. This complexity makes it difficult to test whether they are functioning properly in accordance with their design, and also whether the design itself was without errors. Early testing of the design on integrated circuit simulators is quite important, since the cost of having to correct a flawed design after the integrated circuit is already being manufactured can be extremely high.
For this reason, integrated circuit designs are put through a rigorous design testing process before the circuits are manufactured. This process is called “design verification” and it is performed in software or hardware simulators that are configured to imitate the operation of the integrated circuit.
Each succeeding generation of integrated circuits poses new design verification problems. Following Moore's law, design complexity is doubling every 12-18 months, which causes design verification complexity to increase at an exponential rate. In addition, competitive pressures increasingly demand shorter time to market. The combination of these forces has caused an ever worsening “verification crisis”.
Simulation-based functional verification is a popular method of functional verification, and is widely used within the digital design industry as a method for finding defects within designs. A variety of products are available in the market to support simulation-based verification methodologies. However, a fundamental problem with conventional simulation-based verification approaches is that they are slow and often do not uncover all design errors due to the unavoidable shallowness of the tests and the limited time available to run simulations.
One way for testing a design is with the use of testbench modules that are designed into the design under test using a hardware description language (HDL), for example. The testbench modules drive the input ports of the hardware and check output values. However, since the testbench modules are hardcoded into the design, changing the testbench would require rebuilding the entire design under test. For a large design, the time required may be considerable.
Another way to test a design is to create waveforms (a timed list of input signals to the design) and drive these input signals during simulation at the appropriate times. The waveforms may be changed without rebuilding the design. However, comparing actual output to expected output using waveforms may be difficult because the output signals may have to be precisely timed, which may be difficult during simulation.
A method and system that address these and other related issues are therefore desirable.
The invention provides various embodiments for generating input data for simulating a circuit design. In one approach, a test generator program is generated from a main program that uses a test generator class library. The test generator class library includes a software driver class corresponding to the hardware driver, and the software driver class includes a storage class corresponding to each memory within the hardware driver, a first set including at least one method for writing function codes to a first object of the storage class, and a second set including at least one method for writing data to a second object of the storage class. Function codes are written to the first object of the storage class in response to a call by the test generator program to a method in the first set. Data of a first type is written to the second object of the storage class in response to a call by the test generator program to a method in the second set, wherein the data of the first type is data to be provided by the driver as input to the simulated circuit design.
In another embodiment, a system is provided for generating input data to a first hardware driver that drives a first set of inputs of a simulated electronic circuit design. The system includes first, second, and third addressable storage objects that are readable by the first hardware driver. A test generator is coupled to the first, second, and third storage objects and includes a first driver object configured to write function codes to the first storage object. The first driver object is further configured to write data of a first type to the second storage object. The data of the first type is data to be provided by the first hardware driver as input to the simulated circuit design. A second driver object is configured to write mask data to the third storage object. Each unit of mask data specifies one or more parts of a unit of data to be used for comparison to a unit of data received by the first hardware driver from the simulated circuit design.
In another embodiment, a system includes means for translating a programmatic specification of functions to be performed by the hardware driver into function codes to be input to the hardware driver; means for translating a programmatic specification of input data for the hardware driver into a first format recognized by the hardware driver; means for translating a programmatic specification of mask values into a second format recognized by the hardware driver; means for storing the function codes; means for storing the input data of the first format; and means for storing the mask values in the second format.
The above summary of the present invention is not intended to describe each disclosed embodiment of the present invention. The figures and detailed description that follow provide additional example embodiments and aspects of the present invention.
Other aspects and advantages of the invention will become apparent upon review of the Detailed Description and upon reference to the drawings in which:
Before describing an illustrative design verification environment in which various embodiments of the present invention may be implemented, brief definitions of terms used throughout this application are given below.
A “design” is defined as a description of a collection of objects, such as modules, blocks, wires, registers, and components that represent elements of a logic circuit.
A design may be expressed in the form of a language. For example, a hardware description language (HDL), such as Verilog or VHDL can be used to describe the behavior of hardware as well as its implementation.
As used herein, “simulation” is defined as the process of evaluating design behavior for a set of input conditions to draw approximate conclusions about the behavior of many different attributes of the design.
“Hardware simulator” is defined as a simulator in which the operation of the design under test is programmed into many integrated circuits called “gate arrays”, which imitate the interactive operation of individual circuits in the design. The advantage of performing hardware simulations on a hardware simulator is that multiple programmed gate arrays can change state simultaneously, speeding up the simulation process.
“Software simulator” is defined as a simulator in which the simulation of the operation of the design under test is provided by a general purpose computer having one or more central processing units that are programmed to calculate state transitions for the individual circuits (or predefined collections of circuits) of the design. The disadvantage of software simulations and software simulators is that every state transition of a circuit must be individually calculated by a limited number of central processing units.
“Functional verification” is defined as the process of applying stimuli to a design under test with appropriate checking mechanisms to either detect a defect in the design or to establish that the functionality performs as expected. Typically, the three key components of a functional verification process are the applied stimulus, the checking mechanism, and the user's ability to both run the process and debug the results.
A “function” is defined as a command given to a hardware or software simulator to direct the simulator to perform a predetermined activity. A function has a description, and may have one or more parameters associated with it.
A “normal function” is defined as a function that the simulator treats as an input to stimulate the simulated portion of the integrated circuit. For example, an actual cache memory device has a command set to which it responds. Such commands sets typically include (as just one example) a command to write a specific value to a specific cache memory location. In this instance, the description of the function is a “write” command, and the parameters would be (1) the address of the memory location to be written to, and (2) the data to be written to the location. Commands that either read to or write from the simulated main memory of a computer are examples of normal functions.
A “control function” is defined as all functions other than “normal functions”. For example, commands may be passed to the hardware driver to tell it how to behave, or to tell it to do something special with the subsequent normal function.
A “test source file” or “test file” is defined as a file containing a sequence of functions or tests to be applied by a simulator to a simulated integrated circuit. It is typically in plaintext for human review and may be (although need not be) compiled into a more compact form for execution by a simulator.
The “set address” portion of a memory address is the portion that the cache uses to determine the particular set of cache locations that might contain the desired block of data. The length of the “set address” portion will vary depending upon the size of the cache.
A “tag address” is a sub-address used by the cache to identify particular cache memory locations within a particular set of memory blocks in the cache memory.
“Commodity I/O” refers to data input and output between the processor and devices other than main memory. Commodity I/O may include, for example, communications between the processor and special subsystems such as user input devices (e.g. keyboards and mice), data acquisition devices, data card readers and video display adapters. Commodity I/O read commands have different opcodes from regular (or “normal”) memory read commands. Most caches are configured to identify these different command codes and process Commodity I/O reads and writes differently than normal read and write commands.
“Bit-wise writes” or “per-J writes” refer to processor write functions that write directly to sub-portions or “bits” of words rather than to entire words. Bit-wise writes therefore change the contents of portions of a memory location word, but not the entire word itself.
“Leaky writes” refer to processor write functions that force the cache to write data to main memory sooner than it would under other circumstances. In the preferred embodiment, a “leaky write” is a processor write function that has a special control bit that can be set. This control bit indicates to the cache that the data in the write function should be written out sooner than the cache would if it used its normal data aging process. As a result, by issuing a leaky write command, the processor is configured to avoid the cache's normal data aging processes and write data to main memory as soon as reasonably possible.
A “prefetch write” is a command that a processor sends to its associated cache device. This command directs the cache to assert “ownership” of the memory location in the prefetch write command. A processor makes prefetch write commands in advance of the processor writing data to that main memory location to insure that the memory location will be available for writing when the processor later needs to write to that location.
A “read with lock” function simultaneously reads a main memory location and locks that location (and the adjacent locations comprising the 8-16 word cache line fetched by the read-with-lock function). In the example provided herein, this memory lock is released by (1) accessing (either by reading from or writing to) any of the 8-16 words of the cache line fetched by the read-with-lock function, and (2) subsequently issuing a lock release function to the specific memory location previously locked.
Computer 102 may be configured as a test development workstation for generating various port driver objects for testing an integrated circuit design. In one embodiment, computer 102 may be a general purpose computer running a general purpose operating system. Computer 104 may be configured to simulate the integrated circuit design under test by running a simulation program. For example, a workstation suitably configured to run a simulator compatible with the desired testing may be used. Computer 106 may be configured in combination with other hardware to simulate (in hardware) a portion of the circuit design under test. Computer 108 may be configured to archive data and programs that are on the test development workstation.
Network 110 couples each of computers 102, 104, 106, and 108 and may include modems, routers, hubs and gateways as needed. The network may be configured to include a LAN or a WAN. It may also include a public packet switched network, such as the Internet, for example.
A mass storage device 210, such as a magnetic disk or optical disk and corresponding drives, may also be coupled to computer system 200 for storing information and instructions. Computer system 200 can also be coupled via bus 202 to a display device 212, such as a cathode ray tube (CRT) or Liquid Crystal Display (LCD), for displaying information to an end user. For example, graphical and/or textual depictions/indications of design errors, and other data types and information may be presented to the end user on the display device 212. Typically, an alphanumeric input device 214 (e.g., a keyboard), including alphanumeric and other keys, may be coupled to bus 202 for communicating information and/or command selections to processor 204. Another type of user input device is cursor control 216, such as a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor 204 and for controlling cursor movement on display 212.
A communication device 218 is also coupled to bus 202. Depending upon the particular design environment implementation, the communication device 218 may include a modem, a network interface card, or other well-known interface devices (not shown), such as those used for coupling to Ethernet, token ring, or other types of physical attachment for purposes of providing a communication link to support a local or wide area network, for example. In any event, in this manner, the computer system 200 may be coupled to a number of clients and/or servers via a conventional network infrastructure, such as a company's Intranet and/or the Internet, for example.
When used as hardware simulation computer 106, a computer like computer 200 also includes simulator programmable gate arrays 220 that are programmed by processor 204 to simulate the integrated circuit design.
For purposes of explaining how the example embodiments relate to simulation of an electronic circuit design, the description of
A port driver, such as port driver 302, reads from the collection of RAMs 308. The data in RAMS 308 designate functions to be performed by the port driver, data to be input to the hardware under test, and data used in verifying correct operation of the hardware under test. In one embodiment, the function codes and data are established in separate RAM objects by objects of the test generator program 310.
The example test generator program 310 includes a mask port driver object 312, an SLC port driver object 314, and other port driver objects 316 that generate the function codes and test data for the other port drivers 306. The SLC port driver object writes function codes to function-code RAM 318 and writes to write-data RAM 320 that data to be input by the SLC port driver 302 to the hardware under test 304. The SLC port driver object writes expected results data for use with the SLC instruction cache to compare-IC-data RAM 324 and writes expected results data for use with the SLC operand cache to the compare-OC-data RAM 322. The port driver objects 312, 314, and 316 may be viewed as software port drivers and the port driver 302 may be viewed as a hardware port driver since it drives inputs to the hardware under test 304. The log file 330 may be used by the test generator 310 to log test results. It will be appreciated that the other port driver(s) 306 may implement a set of port driver objects different from port driver objects 312 and 314, and the different port driver objects may generate function codes and test data to RAM files different from the types of RAM files 308.
The test generator 310 is an executable program as generated by compiler 332 from the test source file 334 in combination with the test generator class library 336. The test generator class library contains the classes having methods and data structures for the RAM objects 308. For example, the methods support writing of function codes to the function-code RAM 318, mask data to mask RAM 326, and data to data RAM 320. Those skilled in the art will recognize that in other embodiments the test generator may be an interpreted program rather than compiled object code. In addition, any implementation-suitable language may be used for the test source file 334 and test generator class library 336.
The RAM component 410 provides the class for defining a data structure used as one of RAM objects 308 (
The SLC port driver component 420 is a subcomponent of the label port driver component 416 and includes the methods used for generating function codes and test data for an SLC design. Similarly, component 422 provides methods for other types of port drivers. For ease of reference in this description, the method for adding function codes to a function RAM is called, Add_Function_Code_to_Function_Code_RAM( ), and the method for adding data to a RAM such as write-data RAM 320 is called, Add_Data_to_Data_RAM( ).
The mask port driver component 414, SLC port driver component 420, and other port driver components 422 include various methods 424 that are commonly used with these components, such as for data formatting, parity checking, and outputting comments.
In one embodiment, a label port driver class is provided to encompass the functionality to support labels. To use the label capabilities, a specific port driver object inherits from the label port driver class. The label port driver class also supports forward referencing of labels. A forward reference to a label is a jump to a label that has not yet been declared in the function-code RAM.
The processing of labels in a port driver object is illustrated by the SLC port driver object 314 in
The forward reference database 504 is used to track references to the label until the address of the label has been resolved (by way of a label declaration in a call to the label( ) method) and the label has been added to the label database. If the label is not yet in the forward reference database, the label is added to the forward reference database (step 516). Stored in association with each label in the forward reference database, are the function-code RAM addresses of forward references to that label. Thus, the forward reference is also stored in the forward reference database (step 518) before returning control to the SLC port driver object.
A call by the SLC port driver object 314 to the label( ) method provided by the label port driver adds a label to the label database. If the label to be added is already in the label database (decision step 550), an error is returned (step 552). Otherwise, the method determines whether there is a forward reference to the label in the forward reference database (decision step 554). The function-code RAM address of each forward reference to the label, as identified in the forward reference database, and the function-code RAM address of the label is provided to the forward_jump ( ) function (step 556). The forward_jump ( ) function writes the label address in the function-code RAM at the addresses indicated by the forward references. The label and associated function-code RAM address are then added to the label database (step 558) before control is returned to the SLC port driver object. In one embodiment, an independent label database is maintained for each port driver object.
The various embodiments of the invention allow port driver objects to be created for any application-specific testing. Some applications may find that multiple instances of the same port driver object may be useful for simulation. The functions performed by the methods used by the port driver objects generally include adding function codes to a function-code RAM, adding data to a data RAM, and adding data to a mask RAM.
The particular function code added to the function-code RAM may require corresponding data to be added to one of the data RAMs (e.g., 320, 322, and 324). In one embodiment, a call by a port driver object to a method for writing data to a data RAM may omit the designation of the particular data RAM to be written. This may be accomplished by saving, when the method for adding a function code to the function-code RAM is invoked, state information that indicates to which data RAM, data is to be next written (step 604). The ChooseRAM( ) method, which selects to which data RAM data is to be written, is invoked by the process shown in
The input parameter values are formatted for a fixed-width data fields (step 606). In one embodiment, each field is a large integer type which manages integer data of arbitrary length. For example, the BigNum capability of Lisp may be similarly implemented in an alternative programming language such as C++. The parameter values are then formatted for user-readable output (step 608). All the parameter values are then combined into a single large integer (a large integer can have an arbitrary length, step 610), and that large integer value is written to the function-code RAM (step 612).
If the mask parameter value is already in the mask RAM (decision step 802), the index to the mask value in the mask RAM is returned to the calling port driver object (step 804). The Add_Data_To_Data_RAM( ) method is also called to add the index value to the designated data RAM (step 806), for example, the compare-OC-data RAM 322 or compare-IC-data RAM 324 of
If the mask value is not present in the mask RAM (decision step 802), the command parameters and values are checked, set up for fixed-width fields, compacted, and written to the mask RAM (step 808), analogous to steps 602, 606, 608, 610, and 612 of
The code in Example 1 below illustrates code from an example test source file 334. In the example embodiment of
//Copyright Unisys Corporation 2005
#include “PortDriverCompiler/VY2SCPortDriver.h”
#include “PortDriverCompiler/VY2MaskPortDriver.h”
using namespace PortDriver;
using namespace VY2SCFuncCodes;
int main(int argc, char *argv[ ])
{
Init (“test”, “Random Test”, argc, argv);
{
}
Final( );
return 0;
}
The code in Example 2 below illustrates code from an example header file that defines the PortDriver namespace which includes common functions and a RAM object. This code is merely for illustration purposes. Those skilled in the art will recognize that many other alternative code sequences may be utilized instead to implement similar functionality, and thus the following should not be considered limiting in any way.
//Copyright Unisys Corporation 2005
#ifndef PORTDRIVER_H
#define PORTDRIVER_H
#pragma warning (disable : 4786)
#include <vector>
#include <string>
#include “../LargeInt/LargeInt.h”
using namespace std;
//*NOTE: Hack to get past bug in GCC 3.2.3
char* operator+(std::streampos &, char *);
// Port Driver Compiler Version
#define PD_REV “5.20”
// max # of ERROR msgs before output terminates
#define MAX_ERRORS 32
// The system command to create a directory.
#define MAKEDIR “mkdir”
//Return value if Ram::Find( ) fails
#define CANT_FIND_DATA (unsigned int)-1
// Output( ) defines.
#define NO_OUTPUT (unsigned int)-1
#define PRINT_ADDR_COL 0
#define PRINT_DATA COL 20
#define PRINT_FUNC_COL 55
#define PRINT_MAX_COL 100 //console output line length
/*------------------------------------------------------------------
The code in Example 3 below illustrates code from an example header file that defines the mask port driver class. This code is merely for illustration purposes. Those skilled in the art will recognize that many other alternative code sequences may be utilized instead to implement similar functionality, and thus the following should not be considered limiting in any way.
//Copyright Unisys Corporation 2005
#ifndef VY2MASKPORTDRIVER_H
#define VY2MASKPORTDRIVER_H
#include “PortDriver.h”
#include “../LargeInt/LargeInt.h”
using namespace std;
using namespace PortDriver;
/*
The code in Example 4 below illustrates code from an example header file that defines abstract virtual base class for label port driver objects. This code is merely for illustration purposes. Those skilled in the art will recognize that many other alternative code sequences may be utilized instead to implement similar functionality, and thus the following should not be considered limiting in any way.
//Copyright Unisys Corporation 2005
#ifndef LABELPORTDRIVER_H
#define LABELPORTDRIVER_H
#include “PortDriver.h”
#pragma warning (disable : 4786)
#include <vector>
#include <map>
#include <list>
#include <string>
using namespace std;
using namespace PortDriver;
/*
The code in Example 5 below illustrates code from an example test generator class library 336. This code is merely for illustration purposes. Those skilled in the art will recognize that many other alternative code sequences may be utilized instead to implement similar functionality, and thus the following should not be considered limiting in any way.
//Copyright Unisys Corporation 2005
#ifndef VY2SCPORTDRIVER_H
#define VY2SCPORTDRIVER_H
#include “LabelPortDriver.h”
#include “VY2SCFuncCodes.h”
#include “.../AddressConverter/AddressConverter.h”
#include <string>
#include “../LargeInt/LargeInt.h”
using namespace std;
using namespace PortDriver;
using namespace VY2SCFuncCodes;
// number of rams for the SC PD.
#define NUM_VY2SC_RAMS 4u
// maximum number of IP Port Drivers
#define VY2SC_MAX_IP_NUM 8u
/*
Those skilled in the art will appreciate that various alternative computing arrangements would be suitable for hosting the processes of the different embodiments of the present invention. In addition, the processes may be provided via a variety of computer-readable media or delivery channels such as magnetic or optical disks or tapes, electronic storage devices, or as application services over a network.
In addition to the embodiments of the invention described above, other aspects and embodiments will be apparent to those skilled in the art from consideration of the specification and practice of the invention disclosed herein. It is intended that the specification and illustrated embodiments be considered as examples only, with a true scope and spirit of the invention being indicated by the following claims.
Wise, Ashley K., Cischke, Christopher M.
Patent | Priority | Assignee | Title |
10452507, | Oct 30 2014 | SPHEREA TEST & SERVICES | Bench and software for testing electrical equipment, in particular a computer |
10733345, | Aug 23 2018 | Cadence Design Systems, Inc. | Method and system for generating a validation test |
8320066, | Nov 07 2007 | Kabushiki Kaisha Toshiba | Storage device and read/write processing method therefor |
9734263, | Dec 20 2012 | Intel Corporation | Method and apparatus for efficient pre-silicon debug |
Patent | Priority | Assignee | Title |
6125402, | Jun 16 1997 | Oracle America, Inc | Method and system for executing one of several forms of a multi-purpose program |
6629310, | Dec 22 1999 | FUTURE LINK SYSTEMS | System and method for accessing internal registers in integrated circuits |
6701514, | Mar 27 2000 | Accenture Global Services Limited | System, method, and article of manufacture for test maintenance in an automated scripting framework |
7017162, | Jul 10 2001 | Microsoft Technology Licensing, LLC | Application program interface for network software platform |
7197417, | Feb 12 2003 | Advantest Corporation | Method and structure to develop a test program for semiconductor integrated circuits |
7209851, | Feb 14 2003 | Advantest Corporation | Method and structure to develop a test program for semiconductor integrated circuits |
7310594, | Nov 15 2002 | Xilinx, Inc | Method and system for designing a multiprocessor |
7386434, | Feb 20 2004 | Unisys Corporation | Method and apparatus for creating integrated circuit simulator test source files |
20030033498, | |||
20030097360, | |||
20060117274, | |||
20070083726, | |||
20080120624, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Sep 14 2005 | WISE, ASHLEY K | Unisys Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 017001 | /0641 | |
Sep 14 2005 | CISCHKE, CHRISTOPHER M | Unisys Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 017001 | /0641 | |
Sep 15 2005 | Unisys Corporation | (assignment on the face of the patent) | / | |||
May 31 2006 | Unisys Corporation | CITIBANK, N A | SECURITY AGREEMENT | 018003 | /0001 | |
May 31 2006 | UNISYS HOLDING CORPORATION | CITIBANK, N A | SECURITY AGREEMENT | 018003 | /0001 | |
Jun 01 2009 | CITIBANK, N A | UNISYS HOLDING CORPORATION | RELEASE BY SECURED PARTY | 023086 | /0255 | |
Jun 01 2009 | CITIBANK, N A | Unisys Corporation | RELEASE BY SECURED PARTY | 023086 | /0255 | |
Jul 31 2009 | Unisys Corporation | DEUTSCHE BANK TRUST COMPANY AMERICAS, AS COLLATERAL TRUSTEE | PATENT SECURITY AGREEMENT PRIORITY LIEN | 023355 | /0001 | |
Jul 31 2009 | Unisys Corporation | DEUTSCHE BANK TRUST COMPANY AMERICAS, AS COLLATERAL TRUSTEE | PATENT SECURITY AGREEMENT JUNIOR LIEN | 023364 | /0098 | |
Jun 23 2011 | Unisys Corporation | GENERAL ELECTRIC CAPITAL CORPORATION, AS AGENT | SECURITY AGREEMENT | 026509 | /0001 | |
Oct 05 2017 | WELLS FARGO BANK, NATIONAL ASSOCIATION SUCCESSOR TO GENERAL ELECTRIC CAPITAL CORPORATION | Unisys Corporation | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 044416 | /0358 |
Date | Maintenance Fee Events |
Jul 09 2012 | REM: Maintenance Fee Reminder Mailed. |
Nov 25 2012 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Nov 25 2011 | 4 years fee payment window open |
May 25 2012 | 6 months grace period start (w surcharge) |
Nov 25 2012 | patent expiry (for year 4) |
Nov 25 2014 | 2 years to revive unintentionally abandoned end. (for year 4) |
Nov 25 2015 | 8 years fee payment window open |
May 25 2016 | 6 months grace period start (w surcharge) |
Nov 25 2016 | patent expiry (for year 8) |
Nov 25 2018 | 2 years to revive unintentionally abandoned end. (for year 8) |
Nov 25 2019 | 12 years fee payment window open |
May 25 2020 | 6 months grace period start (w surcharge) |
Nov 25 2020 | patent expiry (for year 12) |
Nov 25 2022 | 2 years to revive unintentionally abandoned end. (for year 12) |