US6973417B1 - Method and system for simulating execution of a target program in a simulated target system - Google Patents

Method and system for simulating execution of a target program in a simulated target system Download PDF

Info

Publication number
US6973417B1
US6973417B1 US09/435,003 US43500399A US6973417B1 US 6973417 B1 US6973417 B1 US 6973417B1 US 43500399 A US43500399 A US 43500399A US 6973417 B1 US6973417 B1 US 6973417B1
Authority
US
United States
Prior art keywords
program
simulated
software
hardware
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
US09/435,003
Inventor
Sidney Richards Maxwell, III
Michael Louis Steinberger
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Xinguodu Tech Co Ltd
NXP BV
NXP USA Inc
Original Assignee
Metrowerks Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Metrowerks Corp filed Critical Metrowerks Corp
Priority to US09/435,003 priority Critical patent/US6973417B1/en
Assigned to APPLIED MICROSYSTEMS CORPORATION reassignment APPLIED MICROSYSTEMS CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: MAXWELL, SIDNEY RICHARDS, III, STEINBERGER, MICHAEL LOUIS
Priority to AU14529/01A priority patent/AU1452901A/en
Priority to PCT/US2000/030116 priority patent/WO2001035223A1/en
Assigned to METROWERKS CORPORATION reassignment METROWERKS CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: APPLIED MICROSYSTEMS CORPORATION
Application granted granted Critical
Publication of US6973417B1 publication Critical patent/US6973417B1/en
Assigned to FREESCALE SEMICONDUCTOR, INC. reassignment FREESCALE SEMICONDUCTOR, INC. MERGER (SEE DOCUMENT FOR DETAILS). Assignors: METROWERKS CORPORATION
Assigned to CITIBANK, N.A. AS COLLATERAL AGENT reassignment CITIBANK, N.A. AS COLLATERAL AGENT SECURITY AGREEMENT Assignors: FREESCALE ACQUISITION CORPORATION, FREESCALE ACQUISITION HOLDINGS CORP., FREESCALE HOLDINGS (BERMUDA) III, LTD., FREESCALE SEMICONDUCTOR, INC.
Assigned to CITIBANK, N.A., AS COLLATERAL AGENT reassignment CITIBANK, N.A., AS COLLATERAL AGENT SECURITY AGREEMENT Assignors: FREESCALE SEMICONDUCTOR, INC.
Assigned to CITIBANK, N.A., AS NOTES COLLATERAL AGENT reassignment CITIBANK, N.A., AS NOTES COLLATERAL AGENT SECURITY AGREEMENT Assignors: FREESCALE SEMICONDUCTOR, INC.
Assigned to CITIBANK, N.A., AS NOTES COLLATERAL AGENT reassignment CITIBANK, N.A., AS NOTES COLLATERAL AGENT SECURITY AGREEMENT Assignors: FREESCALE SEMICONDUCTOR, INC.
Assigned to FREESCALE SEMICONDUCTOR, INC. reassignment FREESCALE SEMICONDUCTOR, INC. PATENT RELEASE Assignors: CITIBANK, N.A., AS COLLATERAL AGENT
Assigned to FREESCALE SEMICONDUCTOR, INC. reassignment FREESCALE SEMICONDUCTOR, INC. PATENT RELEASE Assignors: CITIBANK, N.A., AS COLLATERAL AGENT
Assigned to FREESCALE SEMICONDUCTOR, INC. reassignment FREESCALE SEMICONDUCTOR, INC. PATENT RELEASE Assignors: CITIBANK, N.A., AS COLLATERAL AGENT
Assigned to MORGAN STANLEY SENIOR FUNDING, INC. reassignment MORGAN STANLEY SENIOR FUNDING, INC. ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS Assignors: CITIBANK, N.A.
Assigned to MORGAN STANLEY SENIOR FUNDING, INC. reassignment MORGAN STANLEY SENIOR FUNDING, INC. ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS Assignors: CITIBANK, N.A.
Assigned to MORGAN STANLEY SENIOR FUNDING, INC. reassignment MORGAN STANLEY SENIOR FUNDING, INC. SUPPLEMENT TO THE SECURITY AGREEMENT Assignors: FREESCALE SEMICONDUCTOR, INC.
Assigned to NXP, B.V., F/K/A FREESCALE SEMICONDUCTOR, INC. reassignment NXP, B.V., F/K/A FREESCALE SEMICONDUCTOR, INC. RELEASE BY SECURED PARTY (SEE DOCUMENT FOR DETAILS). Assignors: MORGAN STANLEY SENIOR FUNDING, INC.
Assigned to NXP B.V. reassignment NXP B.V. RELEASE BY SECURED PARTY (SEE DOCUMENT FOR DETAILS). Assignors: MORGAN STANLEY SENIOR FUNDING, INC.
Assigned to NXP USA, INC. reassignment NXP USA, INC. MERGER (SEE DOCUMENT FOR DETAILS). Assignors: FREESCALE SEMICONDUCTOR, INC.
Assigned to NXP USA, INC. reassignment NXP USA, INC. CORRECTIVE ASSIGNMENT TO CORRECT THE NATURE OF CONVEYANCE PREVIOUSLY RECORDED AT REEL: 040652 FRAME: 0241. ASSIGNOR(S) HEREBY CONFIRMS THE MERGER AND CHANGE OF NAME. Assignors: FREESCALE SEMICONDUCTOR, INC.
Assigned to MORGAN STANLEY SENIOR FUNDING, INC. reassignment MORGAN STANLEY SENIOR FUNDING, INC. CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE PATENTS 8108266 AND 8062324 AND REPLACE THEM WITH 6108266 AND 8060324 PREVIOUSLY RECORDED ON REEL 037518 FRAME 0292. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS. Assignors: CITIBANK, N.A.
Assigned to SHENZHEN XINGUODU TECHNOLOGY CO., LTD. reassignment SHENZHEN XINGUODU TECHNOLOGY CO., LTD. CORRECTIVE ASSIGNMENT TO CORRECT THE TO CORRECT THE APPLICATION NO. FROM 13,883,290 TO 13,833,290 PREVIOUSLY RECORDED ON REEL 041703 FRAME 0536. ASSIGNOR(S) HEREBY CONFIRMS THE THE ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS.. Assignors: MORGAN STANLEY SENIOR FUNDING, INC.
Assigned to NXP B.V. reassignment NXP B.V. RELEASE BY SECURED PARTY (SEE DOCUMENT FOR DETAILS). Assignors: MORGAN STANLEY SENIOR FUNDING, INC.
Anticipated expiration legal-status Critical
Assigned to MORGAN STANLEY SENIOR FUNDING, INC. reassignment MORGAN STANLEY SENIOR FUNDING, INC. CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE APPLICATION 11759915 AND REPLACE IT WITH APPLICATION 11759935 PREVIOUSLY RECORDED ON REEL 037486 FRAME 0517. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS. Assignors: CITIBANK, N.A.
Assigned to NXP B.V. reassignment NXP B.V. CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE APPLICATION 11759915 AND REPLACE IT WITH APPLICATION 11759935 PREVIOUSLY RECORDED ON REEL 040928 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITY INTEREST. Assignors: MORGAN STANLEY SENIOR FUNDING, INC.
Assigned to NXP, B.V. F/K/A FREESCALE SEMICONDUCTOR, INC. reassignment NXP, B.V. F/K/A FREESCALE SEMICONDUCTOR, INC. CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE APPLICATION 11759915 AND REPLACE IT WITH APPLICATION 11759935 PREVIOUSLY RECORDED ON REEL 040925 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITY INTEREST. Assignors: MORGAN STANLEY SENIOR FUNDING, INC.
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3457Performance evaluation by simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Definitions

  • the present invention relates generally to testing and developing the software and hardware of embedded systems, and more specifically, to a system and method for simulating the execution of software in a simulated hardware environment.
  • An embedded system is a system whose primary purpose is to perform a specific function rather than to perform general computational functions.
  • a microprocessor-based microwave oven controller, a microprocessor-based automobile ignition system, and a microprocessor-based telephone switching system are all examples of embedded systems.
  • An embedded system typically includes a microprocessor, which executes a stored software program and interacts with an application specific integrated circuit (ASIC) or a custom Integrated Circuit (IC).
  • ASIC application specific integrated circuit
  • IC custom Integrated Circuit
  • the microprocessor used in the system is designated herein as a target processor.
  • the external circuitry that interacts with the target processor, whether it is the ASIC, custom IC, or some other form of electronic circuitry, is designated herein as the target circuitry.
  • the combination of the target circuitry and the target processor is designated herein as the target hardware.
  • the software program that is intended to be executed by the target processor is designated herein as the target program.
  • the first system prototype including the target hardware and the target program
  • the physical target hardware which will ultimately execute the target program is usually under development and does not exist. Consequently, the hardware and software components of a target system design are typically brought together for the first time when the prototype target hardware has been fabricated. Because of the prior unavailability of the actual target hardware, one often finds that the target program loaded at the time of the integration of the prototype target hardware and software does not work. It is common to find that the integration problems are strictly due to software complications alone. This may cause significant delays in the software development due to the problems in the target program.
  • simulators are often used to test the hardware and the software intended to be executed by the hardware.
  • the target hardware can be simulated at the chip, board, and system level to varying extents. Because of the availability of simulated target hardware, there is a significant benefit to including the target program in a system simulation, including the chance to debug code and verify the correct operation of both the target program and target hardware before the target hardware is built. Problems associated with the interaction between the target hardware and the target program can be detected and corrected before final hardware fabrication, often saving costly and time-consuming redesign of the ASIC.
  • the hardware simulator is a software program that accepts a description of the target hardware, including electrical and logical properties of the target processor and the target circuitry. Based on the description, the hardware simulator simulates signal propagation and logical functionality of the target hardware event by event. It should be noted that a typical microprocessor instruction cycle is actually the result of a large number of hardware events within the target. Thus, the hardware simulator attempts to represent signal timing, signal strength, and logical function as accurately as possible, often enabling sub-nanosecond timing accuracy in simulating these hardware events. To achieve this degree of accuracy for a highly complex target processor, functions are often represented with detailed structures.
  • a target program is compiled into object code, and the object code is downloaded into a processor memory model within the hardware simulator.
  • a processor functional model is a software description, including the electrical and logical properties, of the target processor, while a target circuitry functional model provides a model of the target circuitry, such as an ASIC, or other custom or semi-custom design.
  • the hardware simulator allows the processor functional model to simulate execution of the target program event by event.
  • the hardware simulator can provide valuable information to a software developer, there are disadvantages in using the hardware simulator to simulate the target hardware.
  • the full-functional processor model can be extremely detailed for a complex circuit, such as the target processor, and thus difficult to model.
  • the resulting simulation may be very accurate; however, the level of detail comes at the cost of lengthy simulation times.
  • the execution time required to simulate the full-functional processor model can add significantly to the simulation run-times because the hardware simulator must simulate all activity that occurs in the target processor using the processor functional model to detect timing errors, race conditions, and the like.
  • the target program can also be quite long.
  • the additional burden of trying to run longer simulation required for larger target programs into the processor memory model can consume large amounts of system resources, and simulation run time can become unacceptably long.
  • the software developer also has the unenviable task of debugging the target program when the target program malfunctions. This debugging task must typically be accomplished without the aid of debuggers or any other software design and analysis tools.
  • ISS instruction set simulator
  • a typical software program has several of these types of loops, resulting in a very lengthy process for calculating a total estimated execution time. Additionally, whenever the software program is modified, this calculation must be performed again to generate a new estimated execution time. The consequence is an inefficient use of resources and time.
  • Another type of simulation uses a statistical model to estimate the execution time of a target program on a target system. This method deconstructs the software program into basic blocks of code and estimates an execution time for each block. A probability-based flow analysis technique is then used to estimate the total execution time for the software program.
  • a more detailed description of this type of simulation is provided in D. D. Gajski et al., pp. 290–305 , Specification and Design of Embedded Systems , PTR Prentice Hall, Englewood Cliffs, N.J., 1994.
  • the static estimation technique provides faster results than for the other simulation methods previously mentioned, this method is only as accurate as the statistical model used to calculate the estimated execution time. Additionally, there are several limitations with respect to using the static estimation technique for target processors having pipelined processing, instruction pre-fetching, vector processing and caching.
  • the present invention is embodied in a method and system for simulating the execution of a software program on a simulated hardware system.
  • the system includes a memory for storing software parameters describing program segments of the software program, and for storing hardware parameters that at least partially define the simulated hardware system.
  • the system further includes a processor for calculating an estimated execution time for the software program using the software and hardware parameters.
  • the software program is instrumented with tags, which are function calls inserted into the software to cause measurements to be performed while the software is running. These tags are used to delineate program segments of the software program and then the software program is analyzed for data describing the program segments. The data is tabulated and indexed according to the program segments.
  • the instrumented software program is also compiled to be executed on a host system.
  • the processor When a coverage tag is executed by the host system, the processor obtains the hardware parameters and the software parameters corresponding to the executed coverage tag, and calculates the estimated execution time for the program segment corresponding to the executed coverage tag. The estimated execution time for the program segment is added to a running total for the overall execution time of the software program.
  • the system further maintains an instruction cache image that keeps a record of the contents of an instruction cache of a simulated processor of the simulated hardware system.
  • the system updates the instruction cache image after a program segment is executed.
  • FIG. 1 is a functional block diagram of an embodiment of the present invention.
  • FIG. 2A is a functional block diagram of the host system of FIG. 1 of one embodiment of the present invention.
  • FIG. 2B is a functional block diagram of the host system of FIG. 1 of a second embodiment of the present invention.
  • FIG. 3 is a flowchart illustrating the operation of the embodiment of FIG. 1 .
  • FIGS. 4A–C are an embodiment of an assembly analyzer that may be used in the analysis system of FIG. 1 .
  • FIG. 5 is an embodiment of a target object that may be used in the assembly analyzer of FIG. 4C .
  • FIG. 6 is a block diagram of an instruction object of a code segment.
  • the disclosed embodiment of the present invention allows for the early simulation of the target hardware and permits the parallel development of the target hardware and the target program.
  • the disclosed system also allows the extensive use of existing debugging tools to aid the developer in the development and integration of the target system.
  • the embodiments of the present invention calculate an estimated target program execution time for a simulated target hardware, as well as maintain an instruction cache image of the simulated target processor.
  • the estimation technique accounts for detailed characteristics of the simulated target processor architecture, such as parallel execution, pipelining, caches, and pre-fetching.
  • the information provided can be used by the software developer to forecast resource requirements, and identify target hardware bottlenecks and resource constraints prior to having the physical target hardware.
  • simulation of target hardware by the embodiments of the present invention is simple by comparison, and provides relevant information relatively quickly and inexpensively.
  • the benefit of having this type of information early in the development cycle enables the target hardware and software to optimized for one another, thus avoiding the “force-fitting” of the target software to the target hardware prototype.
  • the hardware parameters of the simulated target hardware may be modified relatively easily by changing variables of a hardware configuration file.
  • the hardware configuration file is maintained separately from the tabulated information related to the code segments of the target program. Consequently, the hardware parameters may be modified without also requiring the software developer to modify the target program as well.
  • the hardware parameters of the simulated target hardware are described at a relatively high level to avoid the complexity of detailed modeling parameters that may be required for convention hardware simulators.
  • the execution time of the target program is estimated by separating the program into code segments bounded by branch points, estimating the execution time for each of the code segments for a simulated target processor, and then summing together the estimated execution times of each code segment encountered during execution of the software program by a host system.
  • the estimation technique described herein is a dynamic method that is more accurate because it uses the actual sequence of execution.
  • the total estimated execution time for the program for the simulated processor is the sum of the estimated execution times of code segments executed. An image of the instruction of a simulated target processor is maintained so that the software developer may review its contents following the execution of a code segment.
  • FIG. 1 An analysis system 10 according to an embodiment of the present invention is illustrated in FIG. 1 .
  • a source code 14 is instrumented with various tag statements by a source code instrumenter 16 resulting in an instrumented source code 18 .
  • the tag statements instrumented into the source code 14 are coverage tags. Coverage tags are generally placed in branches of the source code 14 , and when executed, generate a tag value which reflects that the branch in which the coverage tag is located has been executed.
  • a more detailed description of a software analysis system for analyzing software instrumented with tag statements, including coverage tags, is provided in U.S. Pat. No. 5,748,878 to Rees et al., which is incorporated herein by reference.
  • the coverage tags serve the additional function of defining the code segments for which an estimated execution time is calculated.
  • a benefit of employing coverage tags such as those described in the Rees et al. patent is that the source code 14 may not need to be re-instrumented for debugging when the physical target hardware becomes available.
  • the instrumented source code 18 is compiled to assembler files 22 using a target compiler 20 and options chosen for the simulated target processor and production executable. The effect any assembly optimization techniques will have on the estimated execution time of the target program is integrated into the estimation process as a result of using the real target compiler 20 to produce the assembler files 22 .
  • the assembler files 22 are in turn analyzed by an assembly analyzer 24 to produce data regarding each of the code segments.
  • the data is tabulated in a function data table 26 which is implemented in a host system 30 , and indexed by unique tag numbers representing each code segment.
  • the tag numbers correspond to the tag value produced by the coverage tags instrumented in the source code 14 when executed.
  • the type of data produced by the assembly analyzer 24 for each code segment may include:
  • tagNumber Tag number A number assigned by the source code instrumenter to uniquely identify each program segment functionName Function name: The name of the function which contains the program segment numberOfInstructions Number of instructions: The number of instructions which will need to be fetched in order to execute the program segment numberOfDataAccesses Number of data accesses: The number of data accesses performed inside the program segment numberOfCycles Number of CPU cycles: The number of CPU cycles needed to execute the program segment. This number may be very different from the number of instructions because the target processor can have a superscalar architecture, and the assembly code can have in-lined loops.
  • stackDataSize Stack data size The number of data words stored on the data stack for the function containing the program segment.
  • predictedBranchTag Predicted branch The tag number for the branch which is predicted to follow the program segment. In many systems, there will be an execution delay if the predicted branch is not taken.
  • memoryFlag Instruction memory type The type of memory in which the program segment will reside in the target system. Each such memory type (e.g., RAM and FLASH) may have a different number of wait states.
  • memoryFlag[1] Cache flag A flag to indicate that the program segment can either reside in cache (cache enabled) or cannot reside in cache (cache inhibited).
  • syncPointFlag Synchronization point flag A flag indicating that execution of the program segment should cause the code execution to be re-synchronized with the Stratus virtual hardware environment.
  • a library data table 34 may be provided in place of the function data table 26 .
  • the library data table would contain similar data as that tabulated in the function data table 26 such that the library data table 34 can be referenced to calculate the estimated execution time for the code segments of the compiled version of the target software.
  • One preferred method for invoking the information in the library data table is to instrument the available source code with external function tags which indicate when a library function is being called.
  • the instrumented source code 18 is compiled again using the host compiler 38 to provide a host executable 40 that will eventually be executed in the host system 30 .
  • a Tag function is called by the executed coverage tag to reference the function data table 26 and obtain the data indexed under the unique number provided to the Tag function by the executed coverage tag.
  • the Tag function calculates the execution time of the corresponding code segment and adds this value to a running total for the total target program execution time.
  • the Tag function references a hardware configuration file 44 to obtain hardware parameters defining a simulated target hardware system 46 .
  • the target hardware includes a target processor 48 as well as target circuitry, such as a target memory 49 . These hardware parameters may be provided by the software developer.
  • the data of the hardware configuration file 44 is provided to the host system 30 during an initialization sequence.
  • the hardware parameters stored in the hardware configuration file 44 include parameters that can be observed directly from the hardware design of the target hardware 46 , as well as parameters that may be calculated analytically from a known design or estimated experimentally. For example, some hardware parameters that may be directly observed from the hardware design are:
  • Processor parameters t cpu CPU cycle time The period of a single cycle of the CPU clock C L1 Size of L1 cache: Number of instructions that can be stored in L1 cache C data Size of data cache: Number of bytes of data that can be stored in the data cache t L2 L2 access time per instruction: The amount of time it takes to transfer an instruction from L2 cache to L1 cache C L2 Size of L2 cache: Number of instructions that can be stored in L2 cache t bus Bus cycle time: The period of a single cycle of the bus clock N bus Bus transfer cycles: Minimum number of bus cycles for transfer of a single data word C cache Cache line size: The number of instructions (or data words) which are transferred in a single cache line.
  • N cache Cache line bus cycles The number of bus cycles required to transfer a line of data or instruction cache N pipe Bus pipeline length: Number of bus transactions which can be in process while waiting for a given bus transaction to complete N interrupt Interrupt hardware cycles: Number of CPU cycles between the time an interrupt is asserted at the processor pin and the time the instruction at the interrupt vector begins executing Storage parameters N pgm — store Program store wait states: Number of additional bus cycles required to access the program store memory N data — store Data store wait states: Number of additional bus cycles required to access the data store memory N volatile Volatile store wait states: Number of additional bus cycles required to access a given volatile storage element (such as a register in an ASIC). This number could be different for each IC on the processor bus.
  • the data look-ahead factor can be estimated by running a program which creates a data array that is too large to fit in the data cache, and then runs a set of experiments with increasing amounts of computation between data accesses. In each experiment, execution time is measured for the same computation with and without data accesses. In the first experiment, each element of the data array is read successively with an absolute minimum of computation. This measurement is then repeated with essentially the same computation, but without the data array accesses. The difference between these two execution times provides a first estimate of the data access time.
  • RTOS real-time operating system
  • the execution time of the test program is measured both when the program is run as a stand-alone program on the target hardware 46 , and when the program is run as a task by the RTOS. Any difference in execution time is assumed to be RTOS overhead. This experiment should probably be run with several test programs of different length in order to make sure that the modeling method is valid, as well as to obtain more accurate parameters.
  • the RTOS interrupt instructions parameter must be determined through a hardware measurement. Ideally, one would want to measure the time between assertion of the hardware interrupt and access to the address of the associated interrupt service routine (ISR). However, this method may not be possible where there is instruction caching. That is, the ISR could be present in the instruction cache, so that the address of the first instruction in the ISR might never show up on the address bus. In order to avoid this difficulty, the ISR in the test program should write immediately to a static address chosen from the memory map of the test circuit. The total interrupt latency can then be measured as the delay between the assertion of an interrupt at the pin of the processor and the appearance on the address bus of the write address from the ISR.
  • ISR interrupt service routine
  • the interrupt latency should be measured with and without the RTOS. In the absence of the RTOS, the interrupt latency should turn out to be the sum of the hardware latency plus the function call time. However, this assumption should be verified by the software developer. With the RTOS, any increase in interrupt latency will be attributed to the RTOS.
  • the type of hardware parameters included in the hardware configuration file 44 may include more or less than that described above and still remain within the scope of the present invention.
  • the types of code segment data tabulated in the function data table 26 the types of data that may be included in the hardware configuration file 44 described herein is not intended to be exhaustive.
  • a Tag function is called to calculate the execution time of the code segment corresponding to the executed coverage tag.
  • the execution time of a code segment is calculated with respect to the following variables:
  • Time t ex Segment execution time The amount of time it will take to execute the program segment given the current cache contents. This is the expected execution time.
  • t min Minimum execution time The execution time if all data accesses hit in data cache
  • t max Maximum execution time The execution time if all data accesses miss in data cache and require a bus transaction ⁇ est Estimation variance: The variance of the estimate for an individual program segment. Note that the variance reported by the estimation procedure will be the root-mean-square of the individual variances.
  • n cache Data cache hit rate The percentage of data accesses which hit in data cache. If no better procedure is available, this parameter will be supplied by the user.
  • t processor CPU time Time needed to execute the instructions, including the effects of parallel instruction execution and branch prediction.
  • t instruction Instruction access time Additional time required to make the instructions available, including the effects of caching (Li and L2) and the wait states associated with program memory (RAM, ROM and FLASH).
  • t data Data access time Additional time required to make the data available, including the effects of data caching, look-ahead accesses, and access to volatile memory.
  • t interrupt Interrupt latency The total delay between when an interrupt is asserted at the processor pin and when the associated ISR begins execution Run time instruction cache parameters N L1 L1 cache load size: The number of instructions from the program segment which are not currently resident in L1 instruction cache N L2 L2 cache load size: The number of instructions from the program segment which are not currently resident in either L1 or L2 instruction cache
  • the execution time for a program segment consists of three components: time spent in the CPU processing the instructions, time spent getting the next instructions, and time spent reading and writing data. Although it will be possible to accurately estimate the CPU processing time and the instruction access time, it will not be possible to accurately estimate the data access time because that will, in general, be data-dependent. The most general version of the estimation procedure will therefore yield a minimum, maximum, and expected execution time, along with an estimation variance.
  • the number of clock cycles spent executing a program segment in the CPU will, in general, be a function of the program segment which follows it. That is, there will be clock cycles wasted due to branch mis-prediction. Also, the time taken to execute a switch statement may be an even more complex function of the branch taken.
  • the number of CPU cycles is expressed as a function of the preceding tag and the current tag.
  • the number of instructions which is a function of the tag number and the predicted branch tag, is multiplied by the CPU cycle time.
  • the amount of time spent reading instructions from memory is heavily dependent on instruction caching behavior. It is assumed, however, that instruction processing will be performed in parallel with instruction access, so that the cpu cycle time can be subtracted from the instruction access.
  • the time taken to get an instruction from program store must take into account that instructions will usually be fetched as part of a cache line (and also the number of wait states for the program store). This calculation also takes into account the fact that the effects of pipeline delay in the CPU can be eliminated by counting the program segment length at a fixed location in the CPU pipe.
  • t instruction (( N L1 ⁇ N 12 )*( t L2 ⁇ t cpu ))+( N L2 *( t bus *( N cache +N pgm — store )/ C cache ⁇ t cpu ))
  • the first component of the code segment execution time, the CPU time is the time needed to execute the instructions of the code segment, including any affect from parallel instruction execution and branch prediction.
  • the CPU cycle period is obtained from the hardware configuration file 44 .
  • the second component of the code segment execution time is the additional time required to make the instruction available for execution by the target processor 48 , and includes the effects of caching and the wait states associated with program memory.
  • the resulting instruction access time is added to the CPU time when it is greater than or equal zero.
  • Information related to the size of the L1 and L2 caches, cache access time, memory access time, bus cycle time, and memory wait states are provided by the hardware parameters of the hardware configuration file 44 .
  • the number of instructions not in the caches, and consequently, the number of instructions that must be loaded from program memory will be calculated based on information provided from an Instruction Cache model of the simulated target processor 48 .
  • the Instruction Cache model will be explained in greater detail below.
  • the third component of the code segment execution time is the additional time required to make the data available for the target processor 48 , and includes the effects of data caching, look-ahead accesses, and access to volatile memory.
  • the resulting data access time is added to the CPU time and instruction access time when it is greater than or equal to zero. Otherwise, the data access time is ignored.
  • the data memory access time per instruction may be calculated from the equation: data mem.
  • access time per byte (bus cycle time*data mem. wait states)/average size of data beat
  • the hardware parameters, such as the data memory access time per byte, and data and volatile memory wait states, are obtained from the hardware configuration file 44 .
  • N RTOS RTOS context switch instructions The average number of instructions executed by the RTOS to perform a context switch
  • N kernal RTOS microkernal size The number of instructions which must be loaded in order to run the RTOS microkernal (e.g., as part of a context switch)
  • N RTOS — int RTOS interrupt instructions Number of instructions executed by the RTOS interrupt handler before the user's ISR is called
  • the first two parameters can be derived from data provided by the RTOS supplier, while the third parameter can be determined through a hardware measurement.
  • the third parameter can be determined through a hardware measurement.
  • a test program should be written in which the ISR writes immediately to a static address chosen from the memory map of the test circuit.
  • the total interrupt latency can then be measured as the delay between the assertion of an interrupt at the pin of the processor and the appearance on the address bus of the write address from the ISR. This total interrupt latency should be measured with and without the RTOS.
  • the interrupt latency should be measured with and without the RTOS. In the absence of the RTOS, the interrupt latency will be the sum of the hardware latency plus the function call time. With the RTOS, any increase in interrupt latency will be attributed to the RTOS.
  • the RTOS interrupt handler may need to be loaded into instruction cache, causing additional delay essentially as described in the equation for t instruction . If the RTOS interrupt handler is not described in the Library Function Table, then the microkernal size, N kernal , may be used to estimate the time to load the cache.
  • interrupt latency Two additional factors that should considered when estimating the execution time of a code segment in a real-time operating system are interrupt latency and RTOS kernal overhead.
  • This equation assumes that the RTOS kernal is invoked at every clock tick and performs about the same amount of work regardless of conditions. However, this assumption may not be accurate, and the software developer should determine its validity prior to simulation.
  • the instrumented source code 14 is compiled once using the target system compiler 20 , and another time using the host system compiler 38 .
  • the resulting compiled target software 22 is analyzed by the assembly analyzer 24 which generates data regarding the program segments defined by the coverage tags instrumented in the source code 14 , such as the number of instructions and data accesses between the coverage tags, the stack size, and similar data.
  • the various data is organized into the function data table 26 and indexed by the tag numbers corresponding to the tag values of the coverage tags.
  • the tabulated data is referenced by the host system 30 for calculating the execution time.
  • the resulting host system executable 40 is executed on the host system 30 .
  • a Connect to Host function 56 upon initiating the execution of the host system executable 40 , a Connect to Host function 56 will request the hardware parameters 45 from a processor block 50 of the host system 30 (step 102 of FIG. 3 ).
  • the hardware parameters 45 are obtained by the processor block 50 from the hardware configuration file 44 , which includes hardware parameters such as the CPU cycle time, the size of the cache, volatile memory access time, and the like.
  • the Connect to Host function 56 obtains the hardware parameters from the processor block 50 , it constructs an Instruction Cache object 58 as directed by the processor block 50 , and stores the rest of the hardware parameters obtained in a shared memory 52 .
  • the host system executable 40 which includes the coverage tags instrumented into the source code 14 by the software developer, is executed (step 104 ) after the initialization sequence.
  • the coverage tags call a Tag function 60 that performs the execution time calculation and provides the Tag function 60 a tag number (step 110 ) that corresponds to a code segment defined in the function data table 26 created by the assembly analyzer 24 .
  • the Tag function 60 references the function data table 26 (step 112 ) and obtains data indexed under the tag number, such as the number of instructions for the code segment, the number of CPU cycles, stack data size, and the name of the code segment corresponding to the tag number.
  • the Tag function 60 calculates a total estimated execution time 70 by summing together a CPU time 62 , an instruction access time 64 , and a data access time 68 .
  • the general equations that are used by the Tag function 60 to compute these times use hardware parameters obtained from the hardware configuration file 44 and the data tabulated in the function data table 26 constructed by the assembly analyzer 24 .
  • the Tag function maintains a running total for the total execution time 70 of the target software on the simulated target processor 48 .
  • a running total for each portion of the total execution time 70 may also be maintained by the Tag function 60 , that is, separate running totals for the CPU time 62 , the instruction access time 64 , and the data access time 68 .
  • the Tag function 60 calculates the execution time for the corresponding code segment and adds the execution time to the running total.
  • the Tag Function 60 calculates the CPU time 62 of the total segment execution time 70 (step 114 ) from the data obtained from the function data table 26 and the hardware configuration file 44 .
  • the number of instructions which is a function of the tag number and the predicted branch tag, is multiplied by the CPU cycle time.
  • the CPU time 62 may be calculated using the equation.
  • CPU time number of CPU cycles* CPU cycle period where the number of CPU cycles for the segment corresponding to the tag number is obtained from the tabulated data, and the CPU cycle period is provided by the hardware configuration file 44 .
  • the Tag function 60 After calculating the CPU time 62 , the Tag function 60 provides the segment name, number of instructions, tag number, and a cache flag to the Instruction Cache object 58 to calculate the instruction access time (step 116 ).
  • the Instruction Cache object 58 maintains an image of the instruction cache of the simulated target processor 48 and carries out the calculation for the instruction access time 64 of the total execution time 70 .
  • the contents of the instruction cache image may be viewed by the software developer on a display 74 .
  • the Instruction Cache object 58 determines whether the code segment defined by the currently executed coverage tag is present in the instruction cache image. If the code segment is present, a zero is returned by the Instruction Cache object 58 to the Tag function 60 which represents the fact that no time will be added to the total execution time 70 for instruction access time. However, if the code segment is not present, the contents of the instruction cache image are removed according to the caching policy, and the currently executed code segment must be loaded.
  • the time to load the code segment may be calculated in two ways, depending on whether the simulated target processor 48 utilizes a single- or two-level cache design.
  • the time to load the code segment may be calculated using the same equation as for calculating the instruction access time where the instruction cache is not used.
  • the Instruction Cache object 58 updates the instruction cache image in the shared memory 52 so that the software developer can view the most recent contents even if the target software has stopped.
  • the data access time 68 is calculated by the Tag function 60 in a manner similar to the instruction access time 64 (step 118 ). That is, the data access time 68 is the time necessary to load the data cache with the data not already present.
  • the relevant data to calculate the data access time 68 is obtained by the Tag function 60 from the function data table 26 and the hardware configuration file 44 .
  • the Tag function 60 sums together the CPU time 62 , the instruction access time 64 , and the data access time 68 , and adds the result to the running total for the total estimated execution time 70 of target software for the simulated target processor 48 (step 120 ).
  • the software developer can view the running total of the execution time and the contents of the instruction cache on the display 74 by accessing the shared memory through a user interface.
  • An example of such a user interface is provided in the Rees et al. patent, previously referenced.
  • the user interface requests the processor block 50 of the host system 30 to display the contents of the instruction cache image.
  • the processor block 50 allocates a section of the shared memory 52 to store instruction cache display data, and causes a Instruction Cache Display function 80 to be constructed.
  • the processor block 50 further provides an offset of the shared memory 52 to the Instruction Cache Display function 80 and to the Instruction Cache object 58 .
  • the Instruction Cache object 58 updates the image of the instruction cache, and the Instruction Cache Display function 80 displays the data found in the shared memory 52 .
  • FIGS. 4A–C Shown in FIGS. 4A–C is an embodiment of an assembly analyzer 150 that may be substituted for the assembly analyzer 24 of FIG. 1 .
  • the software developer's instrumented code 18 ( FIG. 1 ) is assembled using the target compiler 20 to generate assembly files 154 a–b .
  • the assembly files 154 a–b are placed in an assembly directory 156 .
  • An optional memory map file 158 lists the assembly files 154 a–b that describe code which will be placed in memory other than instruction-cached RAM, which is the default memory type. For example, some assembly files may contain initialization code which will be stored in FLASH memory (not shown).
  • the syntax for the optional memory map file 158 is:
  • comment memory declaration comment: // [comment — string]
  • ⁇ n memory declaration: memory — type : ⁇ n memory — declaration file — list ⁇ n memory — type: RAM RAM — no — cache FLASH FLASH — no — cache AUX1 AUX1 — no — cache AUX2 AUX2 — no — cache file — list: file — name file — name ⁇ W/S> file — list
  • a function data table 160 is produced by the assembly analyzer 150 .
  • the function data table 160 contains the names of the function and a table with one line of data for every branch of each of the functions analyzed.
  • the format of the function data table 160 is:
  • a main program 164 shown in FIG. 4A is responsible for constructing a compiler object 166 and a target object 168 , routing the assembly files 154 a–b to the compiler and target objects, 166 and 168 , respectively, and producing the resulting function data table 160 .
  • the compiler object 166 is responsible for parsing the assembly files 154 a–b and passing the individual instructions to the target object 168 .
  • the target object 168 is responsible for interpreting the execution flow of individual instructions of the assembly files 154 a–b , accumulating the execution time description for each code segment, and writing out the function data table 160 .
  • the flow chart shown in FIGS. 4A–C further illustrates the relationship between the various elements previously mentioned.
  • the software developer invokes the assembly file analyzer 150 , possibly through a shell script or similar process automation (step 200 ).
  • the analyzer 150 may be invoked with the following command line options:
  • the main program 164 interprets the command line arguments to obtain a list of assembly directories 156 a–c , an extension for the assembly files 154 a–b , a memory map file 158 , a compiler type, a target type, and a filename for the function data table 160 (step 202 ).
  • the main program 164 then constructs the target object 168 (step 204 ) and the compiler object 166 (step 206 ), and provides a pointer to the target object as one of the arguments to the constructor for the compiler object.
  • the main program 164 further obtains a directory for the assembly directory 156 (step 208 ) and searches the directory for an assembly file 154 with the specified file extension (step 210 ).
  • the name of the assembly file 154 is supplied to the compiler object 166 .
  • the main program 164 searches the memory map file 158 for the name of the assembly file 154 to be processed (step 212 ). If the main program 164 finds the name, it sends the memory type to the target object 168 (steps 214 – 216 ).
  • the compiler object 166 opens the assembly file 154 (step 218 ) and identifies individual instructions (step 220 ).
  • the op-code, operands, and most recent label are sent to the target object 168 .
  • the target object 168 identifies the beginning and end of the individual code segments of the assembly file 154 and accumulates the execution time data for each such segment until the end of the file is reached.
  • a list of function names from the instruction labels is also accumulated by the target object 168 (steps 220 – 224 ).
  • Steps 210 through 224 are repeated for each assembly file 154 in the assembly directory 156 (step 226 ). Similarly, steps 208 through 226 are repeated for each assembly directory 156 in the list of assembly directories (step 228 ).
  • the main program 164 provides the name for the function data table 160 to the target object 168 .
  • the target object 168 sorts the list of function names into alphabetical order, outputs the list of function names to the function data table 160 , and sorts the function data table 160 in order of ascending tag number (step 230 ).
  • the function data table 160 is provided by the target object 168 upon completion.
  • FIG. 5 An embodiment of a target object 250 that may be substituted for the target object 168 of FIG. 4C is illustrated in FIG. 5 .
  • the target object 250 represents an instruction set and architecture for the Motorola/IBM Power PC family of processors in general, and specifically the Motorola PPC 601.
  • the selection of the specific target processor is made for the sake of providing an example, and should not be interpreted as limiting the scope of the invention.
  • the target object 250 generally performs two functions. First, a stream of instructions is analyzed to identify program code segments, accumulate a set of execution parameters for each code segment, and accumulate a list of function names. As mentioned previously, the program developer's source code 14 is broken down into code segments that are defined by tags inserted by the instrumenter 16 ( FIG. 1 ). Second, the list of function names and code segment execution parameters is output by the target object 250 . The target object 250 maintains a function name list 252 of the function names that have been encountered. A tag table list 254 of accumulated tag table entries 256 a–d is also maintained by the target object 250 . Each tag table entry 256 a–d represents a data structure describing the execution parameters for an individual code segment.
  • FIG. 5 further includes a logical block diagram of a CPU instruction pipeline 270 for a Motorola PPC 601 processor in order to illustrate the overall relationship between the target object 250 and the CPU instruction pipeline 270 .
  • the CPU instruction pipeline includes several CPU stages, such as Fetch Arbitration (FA) and Cache Arbitration (CARB) CPU stages, 302 and 304 , respectively.
  • Each CPU stage represents an execution stage in one of the pipelines of the target processor.
  • Each stage can contain name and instruction information.
  • the CPU stages also have a processing function which takes the instruction's op code as an argument.
  • the Integer Execution (IE) CPU stage 310 counts the number of CPU cycles consumed by a code segment, starting with the first non-null instruction it executes in the segment and ending when it processes the first instruction for the next code segment.
  • the Cache Access (CACC)CPU stage 306 counts the number of data accesses in a given code segment.
  • the Branch Execute (BE) CPU stage 308 is responsible for determining the predicted branch tag. It does so by storing the label for the predicted branch. The label will be used later as an index to the corresponding tag number.
  • the stages are arranged in FIG. 5 in the same dependency order as they are in the target processor.
  • FIG. 6 illustrates the relationship between an instruction 400 and its surroundings in the target processor.
  • the instruction 400 typically includes an op code, operands, and label. It also has pointers to four other instruction objects 402 a–d . These pointers can be used as execution synchronization tags required by the superscalar architecture of the PPC 601. From its op code, the instruction 400 can locate its associated execution table 404 .
  • the execution table 404 describes the execution sequence of an instruction and the prerequisites for each execution stage in a tabulated format.
  • Registers 406 a–n receive information from the instruction execution table 404 and provide data to the instruction 400 .
  • the registers 406 a–n may be either a general or special purpose registers in the target processor. 406 a–n may be either general or special purpose registers in the target processor.
  • Each of the registers 406 a–n knows whether an instruction is making exclusive use of it, whether or not its contents have been defined and, if defined, what value it contains.
  • instructions 400 are read into the FA and CARB stages 302 and 304 until eight instructions 400 a–h are present in the FA/CARB stages.
  • each CPU stage is given the opportunity to update its contents. This process will typically involve determining whether it has completed processing the current instruction and, if it has, requesting the next instruction from the preceding CPU stage.
  • the requested instruction 400 uses its instruction execution table 404 to determine whether the resources are available to move to the next CPU stage. If the required resources are available, the instruction 400 moves to the requesting CPU stage, which immediately processes its instruction(s), thus making the result available for any applicable feed-forward operations.
  • the FA and CARB stages 302 and 304 are the last stages to be updated. This, in effect, returns execution to the beginning.
  • the FA/CARB keeps a record of all the instructions it has processed for a given code segment, thus making those instructions available in case there is an inline loop in the segment.
  • the FA is responsible for counting the number of instructions in a code segment.
  • a function begins either when the first instruction or tagged bubble reaches the IE stage 310 or on the cycle after the tag for a blr or rfi instruction completes in the IE.
  • the label on the first instruction in the function is assumed to be the function name.
  • the IE stage searches the function name list to see if the new label is on the list. If it is, the IE issues a warning message and continues processing. Otherwise, it adds the new label to the function name list.
  • the IE stage subtracts 8 from the constant portion of the second operand in the stwu instruction and then divides by four to get the number of words of stack data.
  • a new segment begins either at the beginning of a function (as above) or, if not at the beginning of a function, on the cycle after the tag for a bl instruction to the label ExportTag completes in the IE.
  • the IE uses the value in the last register to be loaded with a constant value as the tag number.
  • the IE appends a new Tag Table Entry to the Tag Table List. This Tag Table Entry is initialized with the memory type and function name.
  • a segment ends either when a tag for a blr (branch to link register) or rfi (return from interrupt) instruction completes in the IE or, if not at the beginning of a function, when a tag for a by instruction to the label ExportTag completes in the IE. If at the beginning of a function, the segment ends either when a tag for a blr or rfi instruction completes in the IE or when the second tag for a bl instruction to the label ExportTag completes in the IE.
  • the first segment of a function contains the first branch to ExportTag, and gets its segment number from that call to ExportTag. All other segments get their segment number from the call to ExportTag which precedes them.
  • the IE maintains a list of all of the labels it has encountered since the beginning of the program segment, and the number of CPU cycles since each label was first encountered.
  • the BE stage detects when a conditional branch is already resolved (for example by having a defined value in the counter (CTR) register).
  • CTR counter
  • the BE stage then sends the instruction identity, the branch label and number of loop iterations to the IE stage.
  • the IE stage waits until it detects the branch tag for the loop branching instruction. When it detects the branch tag, the IE stage looks for the loop label in its list of labels.
  • the IE calculates the number of additional CPU cycles consumed by the internal loop: (number of cycles since label)*(number of loop iterations)+(pipeline latency to IE ⁇ 1)*(number of loops iterations ⁇ 1)
  • This calculation takes into account that fact that the fetching of loop instructions starts one CPU cycle before the branch tag gets to the IE, and the fact that the loop instructions will not have to be fetched for the first loop iteration and the continued execution past the loop.
  • the IE stage adds the CPU cycle increment to the execution time for each of the labels. Performing the calculation in this way allows nested inlined loops to be supported.
  • the IE stage creates a function data table entry for the predicted branch for any branch tags which were not resolved within the program segment, and a function data table entry with a null (default) predicted branch tag.
  • the number of CPU cycles is taken from the IE stage, the number of data accesses is taken from the CACC stage, the number of instructions is taken from the FA stage, and the predicted branch tag is taken from the BE stage.
  • the number of CPU cycles is decreased by two to account for the instructions needed to load the tag number, and the number of instructions is decreased by three to account for the instructions used to call ExportTag.
  • a code segment may be viewed conceptually as being either a branch segment or a function.
  • a function is generally a sequence of instructions that does return to the branch call when the sequence is finished.
  • a branch segment is generally a sequence of instructions that does not return from where the branch segment was initially called when the sequence is completed.
  • a function begins either when the first instruction or tagged bubble reaches the IE stage 310 or on the cycle after the tag for a conditional branch-return (blr) instruction completes in the IE stage 310 .
  • the label on the first instruction in the function is assumed to be the function name.
  • the IE stage 310 searches the function name list 252 to see if the new label is on the list. If it is, the IE stage 310 issues a warning message and continues processing. Otherwise, it adds the new label to the function name list 252 .
  • the IE stage 310 subtracts 8 from the constant portion of the second operand in the stwu instruction and then divides by four to get the number of words of stack data.
  • a new branch segment begins either at the beginning of a function, as previously described, or on the cycle after the tag for a conditional branch (bl) instruction to the label ExportTag completes in the IE stage 310 .
  • the IE stage 310 uses the value in the last register to be loaded with a constant value as the tag number.
  • the IE stage 310 appends a new tag table entry 256 to the tag table list 254 .
  • the tag table entry 256 is initialized with the memory type and segment name.
  • the function and branch segment ends either when a tag for a blr instruction or a tag for a bl instruction to the label ExportTag completes in the IE stage 310 .
  • the number of CPU cycles is taken from the IE stage 310
  • the number of data accesses is taken from the CACC stage 306
  • the number of instructions is taken from the FA stage 302
  • the predicted branch tag is taken from the BE stage 308 .
  • the number of CPU cycles is decreased by two to account for the instructions needed to load the tag number, and the number of instructions is decreased by three to account for the instructions used to call ExportTag.

Abstract

A method and system for simulating the execution of a software program on a simulated hardware system. An instrumented software program is divided into program segments delineated by tags and is then analyzed for data describing the program segments. The data is tabulated and indexed in a function data table according to the program segments. Hardware parameters that at least define a portion of the simulated hardware system are tabulated in a hardware configuration file. The software program is executed on a host system, and when a tag is executed, data indexed in the function data table under the program segment corresponding to the executed tag and hardware parameters tabulated in the hardware configuration file are used to calculate an estimated execution time for the program segment corresponding to the executed tag. The estimated execution time for the program segment is added to a running total for the overall execution time of the software program. The system includes a memory for storing software parameters describing program segments of the software program, and for storing hardware parameters that at least partially define the simulated hardware system. The system further includes a processor for calculating an estimated execution time for the software program using the software and hardware parameters.

Description

TECHNICAL FIELD
The present invention relates generally to testing and developing the software and hardware of embedded systems, and more specifically, to a system and method for simulating the execution of software in a simulated hardware environment.
BACKGROUND OF THE INVENTION
With the advent of 32-bit microprocessors and complex operating software, embedded systems have become very complex systems. An embedded system is a system whose primary purpose is to perform a specific function rather than to perform general computational functions. A microprocessor-based microwave oven controller, a microprocessor-based automobile ignition system, and a microprocessor-based telephone switching system are all examples of embedded systems. An embedded system typically includes a microprocessor, which executes a stored software program and interacts with an application specific integrated circuit (ASIC) or a custom Integrated Circuit (IC). The microprocessor used in the system is designated herein as a target processor. The external circuitry that interacts with the target processor, whether it is the ASIC, custom IC, or some other form of electronic circuitry, is designated herein as the target circuitry. The combination of the target circuitry and the target processor is designated herein as the target hardware. The software program that is intended to be executed by the target processor is designated herein as the target program.
Given the complexity and density of modern electronics designs, it is desirable that the first system prototype, including the target hardware and the target program, is close in form, fit, and function to the end product. However, when a program developer begins work on the target program, the physical target hardware which will ultimately execute the target program is usually under development and does not exist. Consequently, the hardware and software components of a target system design are typically brought together for the first time when the prototype target hardware has been fabricated. Because of the prior unavailability of the actual target hardware, one often finds that the target program loaded at the time of the integration of the prototype target hardware and software does not work. It is common to find that the integration problems are strictly due to software complications alone. This may cause significant delays in the software development due to the problems in the target program. Other problems with the integration may be caused by the interaction of the target hardware with the target program. Consequently, considering the large cost of ASIC and custom IC design, and the relatively low cost ease of software modification, it is common that the software will be force-fitted to the target hardware prototype, thereby increasing the overall planned software development time.
In order to facilitate parallel development of the target program and target hardware, simulators are often used to test the hardware and the software intended to be executed by the hardware. The target hardware can be simulated at the chip, board, and system level to varying extents. Because of the availability of simulated target hardware, there is a significant benefit to including the target program in a system simulation, including the chance to debug code and verify the correct operation of both the target program and target hardware before the target hardware is built. Problems associated with the interaction between the target hardware and the target program can be detected and corrected before final hardware fabrication, often saving costly and time-consuming redesign of the ASIC.
There are several techniques that are used to simulate execution of a target program on target hardware before the target hardware has been fabricated. One approach is to simulate the hardware using a computer hardware simulator. The hardware simulator is a software program that accepts a description of the target hardware, including electrical and logical properties of the target processor and the target circuitry. Based on the description, the hardware simulator simulates signal propagation and logical functionality of the target hardware event by event. It should be noted that a typical microprocessor instruction cycle is actually the result of a large number of hardware events within the target. Thus, the hardware simulator attempts to represent signal timing, signal strength, and logical function as accurately as possible, often enabling sub-nanosecond timing accuracy in simulating these hardware events. To achieve this degree of accuracy for a highly complex target processor, functions are often represented with detailed structures.
A target program is compiled into object code, and the object code is downloaded into a processor memory model within the hardware simulator. A processor functional model is a software description, including the electrical and logical properties, of the target processor, while a target circuitry functional model provides a model of the target circuitry, such as an ASIC, or other custom or semi-custom design. The hardware simulator allows the processor functional model to simulate execution of the target program event by event.
Although the hardware simulator can provide valuable information to a software developer, there are disadvantages in using the hardware simulator to simulate the target hardware. The full-functional processor model can be extremely detailed for a complex circuit, such as the target processor, and thus difficult to model. The resulting simulation may be very accurate; however, the level of detail comes at the cost of lengthy simulation times. The execution time required to simulate the full-functional processor model can add significantly to the simulation run-times because the hardware simulator must simulate all activity that occurs in the target processor using the processor functional model to detect timing errors, race conditions, and the like. The target program can also be quite long. The additional burden of trying to run longer simulation required for larger target programs into the processor memory model can consume large amounts of system resources, and simulation run time can become unacceptably long. The software developer also has the unenviable task of debugging the target program when the target program malfunctions. This debugging task must typically be accomplished without the aid of debuggers or any other software design and analysis tools.
Another form of software simulation is an instruction set simulator (ISS). There are several types of ISS systems which take different approaches to simulating the execution of a target program on a target processor. One approach of the ISS provides the results of the execution sequence, but does not provide any detail on the execution time. The software program is compiled, and the register movement of information is carried out to provide the results of the execution sequence. However, there is no correlation between the execution of the software program in a host system, and the execution time of the software program in the target system.
Another approach is provided by an architectural ISS. This type of simulator faithfully reproduces the flow of the instructions through the components (i.e., architecture) of the target processor on an instruction-by-instruction, clock cycle-by-clock cycle basis. The total estimated execution time is the product of the number of clock cycles simulated by the ISS times the period of the target processor clock. Although this method provides accurate estimated execution times, the process is very time consuming. The instruction flow (and concomitant clock cycles) must be calculated for each instruction encountered during the program sequence. In a case where a block of code having several instructions is directed to loop 10,000 times, an estimated execution time for each instruction in the block of code must be calculated 10,000 times as well. A typical software program has several of these types of loops, resulting in a very lengthy process for calculating a total estimated execution time. Additionally, whenever the software program is modified, this calculation must be performed again to generate a new estimated execution time. The consequence is an inefficient use of resources and time.
Another type of simulation uses a statistical model to estimate the execution time of a target program on a target system. This method deconstructs the software program into basic blocks of code and estimates an execution time for each block. A probability-based flow analysis technique is then used to estimate the total execution time for the software program. A more detailed description of this type of simulation is provided in D. D. Gajski et al., pp. 290–305, Specification and Design of Embedded Systems, PTR Prentice Hall, Englewood Cliffs, N.J., 1994. Although the static estimation technique provides faster results than for the other simulation methods previously mentioned, this method is only as accurate as the statistical model used to calculate the estimated execution time. Additionally, there are several limitations with respect to using the static estimation technique for target processors having pipelined processing, instruction pre-fetching, vector processing and caching.
Therefore, there is a need for an software analysis system and simulation technique that can be efficiently performed and provide reasonably accurate performance information for the simulated execution of a target program on a target system.
SUMMARY OF THE INVENTION
The present invention is embodied in a method and system for simulating the execution of a software program on a simulated hardware system. The system includes a memory for storing software parameters describing program segments of the software program, and for storing hardware parameters that at least partially define the simulated hardware system. The system further includes a processor for calculating an estimated execution time for the software program using the software and hardware parameters. The software program is instrumented with tags, which are function calls inserted into the software to cause measurements to be performed while the software is running. These tags are used to delineate program segments of the software program and then the software program is analyzed for data describing the program segments. The data is tabulated and indexed according to the program segments. The instrumented software program is also compiled to be executed on a host system. When a coverage tag is executed by the host system, the processor obtains the hardware parameters and the software parameters corresponding to the executed coverage tag, and calculates the estimated execution time for the program segment corresponding to the executed coverage tag. The estimated execution time for the program segment is added to a running total for the overall execution time of the software program.
In accordance with another aspect of the invention, the system further maintains an instruction cache image that keeps a record of the contents of an instruction cache of a simulated processor of the simulated hardware system. The system updates the instruction cache image after a program segment is executed.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a functional block diagram of an embodiment of the present invention.
FIG. 2A is a functional block diagram of the host system of FIG. 1 of one embodiment of the present invention.
FIG. 2B is a functional block diagram of the host system of FIG. 1 of a second embodiment of the present invention.
FIG. 3 is a flowchart illustrating the operation of the embodiment of FIG. 1.
FIGS. 4A–C are an embodiment of an assembly analyzer that may be used in the analysis system of FIG. 1.
FIG. 5 is an embodiment of a target object that may be used in the assembly analyzer of FIG. 4C.
FIG. 6 is a block diagram of an instruction object of a code segment.
DETAILED DESCRIPTION OF THE INVENTION
The disclosed embodiment of the present invention allows for the early simulation of the target hardware and permits the parallel development of the target hardware and the target program. The disclosed system also allows the extensive use of existing debugging tools to aid the developer in the development and integration of the target system. The embodiments of the present invention calculate an estimated target program execution time for a simulated target hardware, as well as maintain an instruction cache image of the simulated target processor. The estimation technique accounts for detailed characteristics of the simulated target processor architecture, such as parallel execution, pipelining, caches, and pre-fetching. The information provided can be used by the software developer to forecast resource requirements, and identify target hardware bottlenecks and resource constraints prior to having the physical target hardware. Although there are conventional hardware simulators that provide greater simulation accuracy, simulation of target hardware by the embodiments of the present invention is simple by comparison, and provides relevant information relatively quickly and inexpensively. The benefit of having this type of information early in the development cycle enables the target hardware and software to optimized for one another, thus avoiding the “force-fitting” of the target software to the target hardware prototype.
The hardware parameters of the simulated target hardware may be modified relatively easily by changing variables of a hardware configuration file. The hardware configuration file is maintained separately from the tabulated information related to the code segments of the target program. Consequently, the hardware parameters may be modified without also requiring the software developer to modify the target program as well. Furthermore, the hardware parameters of the simulated target hardware are described at a relatively high level to avoid the complexity of detailed modeling parameters that may be required for convention hardware simulators.
The execution time of the target program is estimated by separating the program into code segments bounded by branch points, estimating the execution time for each of the code segments for a simulated target processor, and then summing together the estimated execution times of each code segment encountered during execution of the software program by a host system. Rather than using a static or statistical model of software execution, as in the prior art, the estimation technique described herein is a dynamic method that is more accurate because it uses the actual sequence of execution. The total estimated execution time for the program for the simulated processor is the sum of the estimated execution times of code segments executed. An image of the instruction of a simulated target processor is maintained so that the software developer may review its contents following the execution of a code segment.
An analysis system 10 according to an embodiment of the present invention is illustrated in FIG. 1. A source code 14 is instrumented with various tag statements by a source code instrumenter 16 resulting in an instrumented source code 18. Among the tag statements instrumented into the source code 14 are coverage tags. Coverage tags are generally placed in branches of the source code 14, and when executed, generate a tag value which reflects that the branch in which the coverage tag is located has been executed. A more detailed description of a software analysis system for analyzing software instrumented with tag statements, including coverage tags, is provided in U.S. Pat. No. 5,748,878 to Rees et al., which is incorporated herein by reference. With respect to the embodiments of the present invention, the coverage tags serve the additional function of defining the code segments for which an estimated execution time is calculated. A benefit of employing coverage tags such as those described in the Rees et al. patent is that the source code 14 may not need to be re-instrumented for debugging when the physical target hardware becomes available.
The instrumented source code 18 is compiled to assembler files 22 using a target compiler 20 and options chosen for the simulated target processor and production executable. The effect any assembly optimization techniques will have on the estimated execution time of the target program is integrated into the estimation process as a result of using the real target compiler 20 to produce the assembler files 22. The assembler files 22 are in turn analyzed by an assembly analyzer 24 to produce data regarding each of the code segments. The data is tabulated in a function data table 26 which is implemented in a host system 30, and indexed by unique tag numbers representing each code segment. The tag numbers correspond to the tag value produced by the coverage tags instrumented in the source code 14 when executed. The type of data produced by the assembly analyzer 24 for each code segment may include:
    • tag number
    • function name
    • number of instructions
    • number of data accesses
    • number of CPU cycles (due to superscalar architecture, etc.)
    • stack data size
    • tag number of predicted branch
    • instruction memory type (for instruction access time)
    • cache flag (cache/do not cache)
      This list is not meant to be exhaustive, but is provided merely by way of an example. As a further example, the type of data may also include the following:
tagNumber Tag number: A number assigned by the source
code instrumenter to uniquely identify each
program segment
functionName Function name: The name of the function
which contains the program segment
numberOfInstructions Number of instructions: The number of
instructions which will need to be fetched
in order to execute the program segment
numberOfDataAccesses Number of data accesses: The number of data
accesses performed inside the program segment
numberOfCycles Number of CPU cycles: The number of CPU
cycles needed to execute the program segment.
This number may be very different from the
number of instructions because the target
processor can have a superscalar architecture,
and the assembly code can have in-lined loops.
stackDataSize Stack data size: The number of data words
stored on the data stack for the function
containing the program segment. This
information may be useful for estimating the
percentage of data cache hits.
predictedBranchTag Predicted branch: The tag number for the
branch which is predicted to follow the
program segment. In many systems, there
will be an execution delay if the predicted
branch is not taken.
memoryFlag Instruction memory type: The type of memory
in which the program segment will reside in the
target system. Each such memory type (e.g.,
RAM and FLASH) may have a different
number of wait states.
memoryFlag[1] Cache flag: A flag to indicate that the program
segment can either reside in cache (cache
enabled) or cannot reside in cache (cache
inhibited).
syncPointFlag Synchronization point flag: A flag indicating
that execution of the program segment should
cause the code execution to be re-synchronized
with the Stratus virtual hardware environment.
This is an annotation supplied by the user.

Note that in general, the above data may be tabulated multiple times for the same code segment, but with different predicted branch tag numbers. It will be appreciated that more or less data for each code segment may be tabulated in the function data table 26. A more detailed description of the assembly analyzer 24 will be provided below.
Where the software developer has been provided only with a compiled version of the target software rather than the source code, which may be the case where a portion of the target software has been written by a different software developer, a library data table 34 may be provided in place of the function data table 26. The library data table would contain similar data as that tabulated in the function data table 26 such that the library data table 34 can be referenced to calculate the estimated execution time for the code segments of the compiled version of the target software. One preferred method for invoking the information in the library data table is to instrument the available source code with external function tags which indicate when a library function is being called. A technique for doing this is described in the patent application “Instrumentation Tagging for Testing and Debugging a Computer Program having Source Code Unavailable for Instrumentation.” by Sidney R. Maxwell, bearing application Ser. No. 09/234,785, filed Jan. 20, 1999 and commonly owned with the present application. Other techniques for invoking the information in the library data table may also be used. When encountered in the program, these external function tags would access the information in the library data table. It is also possible to use instruction-level instrumentation in the host version of the library to accomplish a similar effect.
The instrumented source code 18 is compiled again using the host compiler 38 to provide a host executable 40 that will eventually be executed in the host system 30. Whenever a coverage tag in the host executable 40 is executed by the host system 30, a Tag function is called by the executed coverage tag to reference the function data table 26 and obtain the data indexed under the unique number provided to the Tag function by the executed coverage tag. As will be explained in more detail below, the Tag function calculates the execution time of the corresponding code segment and adds this value to a running total for the total target program execution time.
In addition to referencing the function data table 26, the Tag function references a hardware configuration file 44 to obtain hardware parameters defining a simulated target hardware system 46. The target hardware includes a target processor 48 as well as target circuitry, such as a target memory 49. These hardware parameters may be provided by the software developer. Prior to executing the host executable 40 on the host system 30, the data of the hardware configuration file 44 is provided to the host system 30 during an initialization sequence. The hardware parameters stored in the hardware configuration file 44 include parameters that can be observed directly from the hardware design of the target hardware 46, as well as parameters that may be calculated analytically from a known design or estimated experimentally. For example, some hardware parameters that may be directly observed from the hardware design are:
Processor
parameters
tcpu CPU cycle time: The period of a single cycle of the CPU
clock
CL1 Size of L1 cache: Number of instructions that can be stored
in L1 cache
Cdata Size of data cache: Number of bytes of data that can be
stored in the data cache
tL2 L2 access time per instruction: The amount of time it takes
to transfer an instruction from L2 cache to L1 cache
CL2 Size of L2 cache: Number of instructions that can be stored
in L2 cache
tbus Bus cycle time: The period of a single cycle of the bus
clock
Nbus Bus transfer cycles: Minimum number of bus cycles for
transfer of a single data word
Ccache Cache line size: The number of instructions (or data words)
which are transferred in a single cache line.
Ncache Cache line bus cycles: The number of bus cycles required to
transfer a line of data or instruction cache
Npipe Bus pipeline length: Number of bus transactions which can
be in process while waiting for a given bus transaction to
complete
Ninterrupt Interrupt hardware cycles: Number of CPU cycles between
the time an interrupt is asserted at the processor pin and the
time the instruction at the interrupt vector begins executing
Storage
parameters
Npgm store Program store wait states: Number of additional bus cycles
required to access the program store memory
Ndata store Data store wait states: Number of additional bus cycles
required to access the data store memory
Nvolatile Volatile store wait states: Number of additional bus cycles
required to access a given volatile storage element (such as
a register in an ASIC). This number could be different
for each IC on the processor bus.
Another example of possible hardware parameters in another embodiment include the following:
Target processor parameters:
    • CPU cycle time
    • Size of L1 cache
    • Size of data cache
    • Size of L2 cache
    • L2 cache access time per instruction
    • Bus cycle time
    • Interrupt hardware cycles
Program store parameters:
    • wait states
Data store parameters:
    • wait states
Volatile store parameters:
    • wait states
      Examples of hardware parameters that may be calculated analytically from a known design are the instruction look-ahead factor, which is a function of the cache policy, and the average size of data beat, which is approximately the same as the memory width.
Some examples of hardware parameters that can be estimated experimentally are the data look-ahead factor, the real-time operating system (RTOS) kernal overhead percentage, and the RTOS interrupt instructions. The data look-ahead factor can be estimated by running a program which creates a data array that is too large to fit in the data cache, and then runs a set of experiments with increasing amounts of computation between data accesses. In each experiment, execution time is measured for the same computation with and without data accesses. In the first experiment, each element of the data array is read successively with an absolute minimum of computation. This measurement is then repeated with essentially the same computation, but without the data array accesses. The difference between these two execution times provides a first estimate of the data access time. This experiment is then repeated with increasing amounts of computation between data accesses. Results of these experiments can be analyzed by plotting data access time as a function of computation time. What should be observed is that the amount of time consumed by data accesses decreases approximately linearly from some upper limit for very small amounts of computation to a lower limit for relatively large amounts of computation. The slope of this curve is the data look-ahead factor. The lower limit of the data access time should be noted as well.
In order to experimentally estimate the RTOS kernel overhead percentage, the execution time of the test program is measured both when the program is run as a stand-alone program on the target hardware 46, and when the program is run as a task by the RTOS. Any difference in execution time is assumed to be RTOS overhead. This experiment should probably be run with several test programs of different length in order to make sure that the modeling method is valid, as well as to obtain more accurate parameters.
The RTOS interrupt instructions parameter must be determined through a hardware measurement. Ideally, one would want to measure the time between assertion of the hardware interrupt and access to the address of the associated interrupt service routine (ISR). However, this method may not be possible where there is instruction caching. That is, the ISR could be present in the instruction cache, so that the address of the first instruction in the ISR might never show up on the address bus. In order to avoid this difficulty, the ISR in the test program should write immediately to a static address chosen from the memory map of the test circuit. The total interrupt latency can then be measured as the delay between the assertion of an interrupt at the pin of the processor and the appearance on the address bus of the write address from the ISR.
Once the total interrupt latency has been measured, it can be decomposed into its component parts. The interrupt latency should be measured with and without the RTOS. In the absence of the RTOS, the interrupt latency should turn out to be the sum of the hardware latency plus the function call time. However, this assumption should be verified by the software developer. With the RTOS, any increase in interrupt latency will be attributed to the RTOS.
It will be appreciated that the type of hardware parameters included in the hardware configuration file 44 may include more or less than that described above and still remain within the scope of the present invention. As with the types of code segment data tabulated in the function data table 26, the types of data that may be included in the hardware configuration file 44 described herein is not intended to be exhaustive.
As mentioned previously, when a coverage tag is executed by the host system 30, a Tag function is called to calculate the execution time of the code segment corresponding to the executed coverage tag. The execution time of a code segment is calculated with respect to the following variables:
Time
tex Segment execution time: The amount of time it will take to
execute the program segment given the current cache contents.
This is the expected execution time.
tmin Minimum execution time: The execution time if all data
accesses hit in data cache
tmax Maximum execution time: The execution time if all data
accesses miss in data cache and require a bus transaction
σest Estimation variance: The variance of the estimate for an
individual program segment. Note that the variance reported
by the estimation procedure will be the root-mean-square of
the individual variances.
ncache Data cache hit rate: The percentage of data accesses which
hit in data cache. If no better procedure is available, this
parameter will be supplied by the user.
tprocessor CPU time: Time needed to execute the instructions, including
the effects of parallel instruction execution and branch
prediction.
tinstruction Instruction access time: Additional time required to make the
instructions available, including the effects of caching (Li and
L2) and the wait states associated with program memory
(RAM, ROM and FLASH).
tdata Data access time: Additional time required to make the data
available, including the effects of data caching, look-ahead
accesses, and access to volatile memory.
tinterrupt Interrupt latency: The total delay between when an interrupt
is asserted at the processor pin and when the associated ISR
begins execution
Run time
instruction
cache
parameters
NL1 L1 cache load size: The number of instructions from the
program segment which are not currently resident in L1
instruction cache
NL2 L2 cache load size: The number of instructions from the
program segment which are not currently resident in either L1
or L2 instruction cache
The execution time for a program segment consists of three components: time spent in the CPU processing the instructions, time spent getting the next instructions, and time spent reading and writing data. Although it will be possible to accurately estimate the CPU processing time and the instruction access time, it will not be possible to accurately estimate the data access time because that will, in general, be data-dependent. The most general version of the estimation procedure will therefore yield a minimum, maximum, and expected execution time, along with an estimation variance.
t max =t processor +t instruction +t data
t min =t processor +t instruction
t ex =t processor +t instruction +n cache *t data
σest=1/6*((t max −t ex)2+(t min −t ex)2)
For processor architectures which involve pipelining, branch prediction and pre-fetching, the number of clock cycles spent executing a program segment in the CPU will, in general, be a function of the program segment which follows it. That is, there will be clock cycles wasted due to branch mis-prediction. Also, the time taken to execute a switch statement may be an even more complex function of the branch taken. Thus, to make the solution suitably general, the number of CPU cycles is expressed as a function of the preceding tag and the current tag. Thus, the tag table will have entries for a number of possible pairs of tags. The resulting equation is
t processor =numberOfInstructions(tagNumber,predictedBranchTag)*t cpu
Namely, the number of instructions, which is a function of the tag number and the predicted branch tag, is multiplied by the CPU cycle time. The amount of time spent reading instructions from memory is heavily dependent on instruction caching behavior. It is assumed, however, that instruction processing will be performed in parallel with instruction access, so that the cpu cycle time can be subtracted from the instruction access. The time taken to get an instruction from program store must take into account that instructions will usually be fetched as part of a cache line (and also the number of wait states for the program store). This calculation also takes into account the fact that the effects of pipeline delay in the CPU can be eliminated by counting the program segment length at a fixed location in the CPU pipe.
t instruction=((N L1 −N 12)*(t L2 −t cpu))+(N L2*(t bus*(N cache +N pgm store)/C cache −t cpu))
If the result of the equation is less than zero, the answer is set equal to zero. It is assumed that processing must stop to await a data access. This is a somewhat pessimistic assumption; but anything more precise must take into account the fact that there may be instruction accesses as well as data accesses during a given program segment. If the processor contains a data cache, then the data access time is
t data =numberOfDataAccesses*t bus*(N cache +N data store)/C cache
otherwise
t data =numberOfDataAccesses*t bus*(N bus +N data store)
Similarly, there will be some program segments for which the data access is to volatile memory. The data access time for these program segments is
t data =numberOfDataAccesses*t bus*(N bus +N volatile)
In an alternative embodiment, the execution time of a code segment is calculated based on the following principles and equations:
code segment execution time=CPU time+instruction access time+data access time.
The first component of the code segment execution time, the CPU time, is the time needed to execute the instructions of the code segment, including any affect from parallel instruction execution and branch prediction. The CPU time can be calculated from the equation:
CPU time=(number of CPU cycles+branch prediction penalty)*CPU cycle period
where the number of CPU cycles to execute the code segment is obtained from the function data table 26 and, as will be explained in greater detail below, the branch prediction penalty may be experimentally obtained. The CPU cycle period is obtained from the hardware configuration file 44.
The second component of the code segment execution time, the instruction access time, is the additional time required to make the instruction available for execution by the target processor 48, and includes the effects of caching and the wait states associated with program memory. Single-level caches, as well as two-level caches having a primary L1 cache and a secondary L2 cache, are accommodated in the instruction access time calculation. The instruction access time may be calculated from the equation:
instruction access time=(number of instructions not in L1 cache*L2 access time per instruction)+(no. of instr. not in L1 or L2 cache*program memory access time per instr.)−(instruction look-ahead factor*CPU time).
The resulting instruction access time is added to the CPU time when it is greater than or equal zero. If the result is less than zero, the instruction access time is ignored. The program memory access time per instruction may be calculated from the equation:
program memory access time per instr.=bus cycle time*program memory wait states.
Information related to the size of the L1 and L2 caches, cache access time, memory access time, bus cycle time, and memory wait states are provided by the hardware parameters of the hardware configuration file 44. The number of instructions not in the caches, and consequently, the number of instructions that must be loaded from program memory, will be calculated based on information provided from an Instruction Cache model of the simulated target processor 48. The Instruction Cache model will be explained in greater detail below.
The third component of the code segment execution time, the data access time, is the additional time required to make the data available for the target processor 48, and includes the effects of data caching, look-ahead accesses, and access to volatile memory. The data access time may be calculated from the equation:
data access time=(size of data stack not in data cache*data memory access time per byte)+(number of volatile accesses*volatile memory access time)−(instruction access time, if nearly zero*data look-ahead factor*CPU time).
The resulting data access time is added to the CPU time and instruction access time when it is greater than or equal to zero. Otherwise, the data access time is ignored. The data memory access time per instruction may be calculated from the equation:
data mem. access time per byte=(bus cycle time*data mem. wait states)/average size of data beat,
and the volatile memory access time may be calculated from the equation:
volatile mem. access time=bus cycle time*volatile memory wait states.
The hardware parameters, such as the data memory access time per byte, and data and volatile memory wait states, are obtained from the hardware configuration file 44.
It will be appreciated that the various equations provided above for calculating the code segment execution time may be modified and remain within the scope of the present invention. The equations may be modified in light of the hardware configuration of the simulated target hardware 46. For example, if the simulated target processor 48 has only a single-level instruction cache, the equation for calculating the instruction access time will be to:
t instruction =N L1*(t bus*(N cache +N pgm store)/C cache −t cpu)
If the result of the equation is less than zero, the answer is set equal to zero. Two additional factors which must be considered in a real-time system are interrupt latency and RTOS kernal overhead. These two factors can be estimated using the following parameters:
RTOS
parameters
NRTOS RTOS context switch instructions: The average number
of instructions executed by the RTOS to perform a context
switch
Nkernal RTOS microkernal size: The number of instructions which
must be loaded in order to run the RTOS microkernal
(e.g., as part of a context switch)
NRTOS int RTOS interrupt instructions: Number of instructions
executed by the RTOS interrupt handler before the user's
ISR is called
The first two parameters can be derived from data provided by the RTOS supplier, while the third parameter can be determined through a hardware measurement. Ideally, one would want to measure the time between assertion of the hardware interrupt and access to the address of the associated ISR; however that measurement could be invalidated by instruction caching. That is, the ISR could be present in the instruction cache, so that the address of the first instruction in the ISR might never show up on the address bus. In order to avoid this difficulty, a test program should be written in which the ISR writes immediately to a static address chosen from the memory map of the test circuit. The total interrupt latency can then be measured as the delay between the assertion of an interrupt at the pin of the processor and the appearance on the address bus of the write address from the ISR. This total interrupt latency should be measured with and without the RTOS.
Once the total interrupt latency has been measured, it can be decomposed into its component parts. The interrupt latency should be measured with and without the RTOS. In the absence of the RTOS, the interrupt latency will be the sum of the hardware latency plus the function call time. With the RTOS, any increase in interrupt latency will be attributed to the RTOS.
The interrupt latency must be added to the execution time every time an ISR is called. This delay is calculated as
t interrupt=(N interrupt +N RTOS int)*t cpu
In addition, the RTOS interrupt handler may need to be loaded into instruction cache, causing additional delay essentially as described in the equation for tinstruction. If the RTOS interrupt handler is not described in the Library Function Table, then the microkernal size, Nkernal, may be used to estimate the time to load the cache.
As will be appreciated, other techniques that fall within the scope of the invention may also be used, for example, the equations for calculating the instruction access time may be:
instruction access time=(number of instr. not in L1 cache*program memory access time per instr.)−(instruction look-ahead factor*CPU time).
This equation may further be modified depending on the desired accuracy of the instruction access time calculation. For example, if the software programmer determines that the effect of the instruction look-ahead factor is negligible, then the deduction from the instruction access time due to this factor can be ignored, resulting in a modified instruction access time equation:
instruction access time=number of instr. not in L1 cache*program memory access time per instr.
Modifying the time equations to adjust the desired accuracy may be helpful to the software programmer where rough time calculations will suffice.
Two additional factors that should considered when estimating the execution time of a code segment in a real-time operating system are interrupt latency and RTOS kernal overhead. The interrupt latency may be estimated from the equation:
interrupt latency=hardware interrupt latency+software interrupt latency˜hardware interrupt latency+RTOS interrupt latency˜CPU cycle time*[hardware interrupt cycles+RTOS interrupt instructions*instructions per CPU cycle)].
This equation assumes that the interrupt latency is the sum of the hardware and software interrupt latencies, and further assumes that the software interrupt latency may be estimated by the RTOS interrupt latency.
The RTOS kernal overhead may be calculated from the equation:
RTOS kernal overhead=RTOS overhead percentage*segment execution time
where the RTOS overhead percentage is obtained from the hardware configuration file 44 and the segment execution time is provided by the Tag function. This equation assumes that the RTOS kernal is invoked at every clock tick and performs about the same amount of work regardless of conditions. However, this assumption may not be accurate, and the software developer should determine its validity prior to simulation.
As mentioned previously, the instrumented source code 14 is compiled once using the target system compiler 20, and another time using the host system compiler 38. The resulting compiled target software 22 is analyzed by the assembly analyzer 24 which generates data regarding the program segments defined by the coverage tags instrumented in the source code 14, such as the number of instructions and data accesses between the coverage tags, the stack size, and similar data. The various data is organized into the function data table 26 and indexed by the tag numbers corresponding to the tag values of the coverage tags. The tabulated data is referenced by the host system 30 for calculating the execution time.
The resulting host system executable 40 is executed on the host system 30. As shown in FIG. 2A, the alternative embodiment 2B and 3, upon initiating the execution of the host system executable 40, a Connect to Host function 56 will request the hardware parameters 45 from a processor block 50 of the host system 30 (step 102 of FIG. 3). As mentioned previously, the hardware parameters 45 are obtained by the processor block 50 from the hardware configuration file 44, which includes hardware parameters such as the CPU cycle time, the size of the cache, volatile memory access time, and the like. After the Connect to Host function 56 obtains the hardware parameters from the processor block 50, it constructs an Instruction Cache object 58 as directed by the processor block 50, and stores the rest of the hardware parameters obtained in a shared memory 52.
The host system executable 40, which includes the coverage tags instrumented into the source code 14 by the software developer, is executed (step 104) after the initialization sequence. When the coverage tags are executed by the host system 44 (step 108), the coverage tags call a Tag function 60 that performs the execution time calculation and provides the Tag function 60 a tag number (step 110) that corresponds to a code segment defined in the function data table 26 created by the assembly analyzer 24. The Tag function 60 references the function data table 26 (step 112) and obtains data indexed under the tag number, such as the number of instructions for the code segment, the number of CPU cycles, stack data size, and the name of the code segment corresponding to the tag number.
As discussed previously, the Tag function 60 calculates a total estimated execution time 70 by summing together a CPU time 62, an instruction access time 64, and a data access time 68. The general equations that are used by the Tag function 60 to compute these times use hardware parameters obtained from the hardware configuration file 44 and the data tabulated in the function data table 26 constructed by the assembly analyzer 24. The Tag function maintains a running total for the total execution time 70 of the target software on the simulated target processor 48. A running total for each portion of the total execution time 70 may also be maintained by the Tag function 60, that is, separate running totals for the CPU time 62, the instruction access time 64, and the data access time 68. After each coverage tag is executed by the host system 30, the Tag function 60 calculates the execution time for the corresponding code segment and adds the execution time to the running total.
The equations of the following example are specific applications of the more general equations for calculating the code segment execution time that were discussed previously. The following equations have been simplified from the more general equations in order to facilitate explanation and have been provided as merely examples.
The Tag Function 60 calculates the CPU time 62 of the total segment execution time 70 (step 114) from the data obtained from the function data table 26 and the hardware configuration file 44. Namely, the CPU time 62 may be calculated by using the equation:
t processor =numberOfInstructions(tagNumber, predictedBranchTag)*t cpu
where the number of CPU cycles for the segment corresponding to the tag number is obtained from the tabulated data, and the CPU cycle period is provided by the hardware configuration file 44. Namely, the number of instructions, which is a function of the tag number and the predicted branch tag, is multiplied by the CPU cycle time.
As an alternative, the CPU time 62 may be calculated using the equation.
CPU time=number of CPU cycles*CPU cycle period
where the number of CPU cycles for the segment corresponding to the tag number is obtained from the tabulated data, and the CPU cycle period is provided by the hardware configuration file 44. Alternatively, the CPU time 62 can be calculated using the equation:
CPU time=(number of CPU cycles+branch prediction penalty)*CPU cycle period
where the simulated target processor 48 employs a branch prediction technique. The value of the branch prediction penalty may be determined experimentally.
After calculating the CPU time 62, the Tag function 60 provides the segment name, number of instructions, tag number, and a cache flag to the Instruction Cache object 58 to calculate the instruction access time (step 116). The Instruction Cache object 58 maintains an image of the instruction cache of the simulated target processor 48 and carries out the calculation for the instruction access time 64 of the total execution time 70. The contents of the instruction cache image may be viewed by the software developer on a display 74.
In calculating the instruction access time, the Instruction Cache object 58 determines whether an instruction cache is used by checking the status of the cache flag from the function data table 26. If the cache flag indicates that an instruction cache is not used, the Instruction Cache object 58 calculates the instruction access time using the equation:
t instruction =numberOfInstructions*(t bus*(N cache +N pgm store)/C cache −t cpu))
Alternatively, the Instruction Cache object 58 may calculate the instruction access time using the equation:
instruction access time=number of instructions*program memory access time per instruction
where the number of instructions is obtained from the function data table 26, and the program memory access time per instruction is the product of the bus cycle time and the program memory wait states, as discussed previously.
In the case where an instruction cache is employed, the Instruction Cache object 58 determines whether the code segment defined by the currently executed coverage tag is present in the instruction cache image. If the code segment is present, a zero is returned by the Instruction Cache object 58 to the Tag function 60 which represents the fact that no time will be added to the total execution time 70 for instruction access time. However, if the code segment is not present, the contents of the instruction cache image are removed according to the caching policy, and the currently executed code segment must be loaded.
The time to load the code segment may be calculated in two ways, depending on whether the simulated target processor 48 utilizes a single- or two-level cache design. In a single-level cache design, the time to load the code segment may be calculated using the same equation as for calculating the instruction access time where the instruction cache is not used. However, for a two-level cache design, having a primary L1 cache and a secondary L2 cache, the time may be calculated using the equation:
t instruction =numberOfInstructions*(t L2 −t cpu)
Alternatively, the equation:
instruction access time=number of instructions*L2 access time per instruction
may be used where the L2 access time per instruction is provided by the hardware configuration file 44.
After the instruction access time 64 is calculated, the Instruction Cache object 58 updates the instruction cache image in the shared memory 52 so that the software developer can view the most recent contents even if the target software has stopped.
The data access time 68 is calculated by the Tag function 60 in a manner similar to the instruction access time 64 (step 118). That is, the data access time 68 is the time necessary to load the data cache with the data not already present. The relevant data to calculate the data access time 68 is obtained by the Tag function 60 from the function data table 26 and the hardware configuration file 44.
The Tag function 60 sums together the CPU time 62, the instruction access time 64, and the data access time 68, and adds the result to the running total for the total estimated execution time 70 of target software for the simulated target processor 48 (step 120). The software developer can view the running total of the execution time and the contents of the instruction cache on the display 74 by accessing the shared memory through a user interface. An example of such a user interface is provided in the Rees et al. patent, previously referenced. The user interface requests the processor block 50 of the host system 30 to display the contents of the instruction cache image. The processor block 50 allocates a section of the shared memory 52 to store instruction cache display data, and causes a Instruction Cache Display function 80 to be constructed. The processor block 50 further provides an offset of the shared memory 52 to the Instruction Cache Display function 80 and to the Instruction Cache object 58. The Instruction Cache object 58 updates the image of the instruction cache, and the Instruction Cache Display function 80 displays the data found in the shared memory 52.
Shown in FIGS. 4A–C is an embodiment of an assembly analyzer 150 that may be substituted for the assembly analyzer 24 of FIG. 1. The software developer's instrumented code 18 (FIG. 1) is assembled using the target compiler 20 to generate assembly files 154 a–b. The assembly files 154 a–b are placed in an assembly directory 156. There may be one or more assembly directories, such as 156 a–c, containing the assembly code for the user's program. An optional memory map file 158 lists the assembly files 154 a–b that describe code which will be placed in memory other than instruction-cached RAM, which is the default memory type. For example, some assembly files may contain initialization code which will be stored in FLASH memory (not shown). In one embodiment, the syntax for the optional memory map file 158 is:
statement:
comment
memorydeclaration
comment:
// [commentstring] \n
memorydeclaration:
memorytype : \n
memorydeclaration filelist \n
memorytype:
RAM
RAMnocache
FLASH
FLASHnocache
AUX1
AUX1nocache
AUX2
AUX2nocache
filelist:
filename
filename <W/S> filelist
As mentioned previously, a function data table 160 is produced by the assembly analyzer 150. The function data table 160 contains the names of the function and a table with one line of data for every branch of each of the functions analyzed. In one embodiment, the format of the function data table 160 is:
// SIZE OF FUNCTION NAME LIST IS
< length of function name list >
// FUNCTION NAME LIST BEGINS HERE
< function name >
.
.
.
// FUNCTION NAME LIST ENDS HERE
// TAG DATA TABLE BEGINS HERE
<tag number> \t <function name> \t <# of instructions> \t <# of data
accesses>
\t <# of CPU cycles> \t <stack size> \t <predicted branch> \t <memory
type>
.
.
.
// TAG DATA TABLE ENDS HERE
@!
A main program 164 shown in FIG. 4A is responsible for constructing a compiler object 166 and a target object 168, routing the assembly files 154 a–b to the compiler and target objects, 166 and 168, respectively, and producing the resulting function data table 160. The compiler object 166 is responsible for parsing the assembly files 154 a–b and passing the individual instructions to the target object 168. There is typically a different type of compiler object (e.g., derived class) 166 for each compiler family supported. A new class derived from the base class compiler should be written, however, no other significant changes to the program will be required in order to support an additional processor type. The target object 168 is responsible for interpreting the execution flow of individual instructions of the assembly files 154 a–b, accumulating the execution time description for each code segment, and writing out the function data table 160. There are different types of target objects (e.g., derived class) 168 for each processor or processor family supported. To support an additional processor type, a new class derived from the base class target may need to be written. However, no other significant changes to the program will be required.
The flow chart shown in FIGS. 4A–C further illustrates the relationship between the various elements previously mentioned. The software developer invokes the assembly file analyzer 150, possibly through a shell script or similar process automation (step 200). The analyzer 150 may be invoked with the following command line options:
    • d—The directory in which files are to be found. More than one directory can be specified; the default is the current directory. If a directory is specified, it replaces the default (current) directory.
    • e—The file extension to analyze. More than one extension can be specified; the default extension is .s.
    • m—The memory map file name. Only one can be specified; the default is no map file.
    • c—The compiler which was the source of the assembly file. Only one can be specified; the default compiler is gnu.
    • t—The target architecture for the assembly files. Only one can be specified; the default architecture is sparc.
    • o—The output file name for the completed tag data table. Only one can be specified; the default is tagdata.tbl.
Once invoked, the main program 164 interprets the command line arguments to obtain a list of assembly directories 156 a–c, an extension for the assembly files 154 a–b, a memory map file 158, a compiler type, a target type, and a filename for the function data table 160 (step 202). The main program 164 then constructs the target object 168 (step 204) and the compiler object 166 (step 206), and provides a pointer to the target object as one of the arguments to the constructor for the compiler object. The main program 164 further obtains a directory for the assembly directory 156 (step 208) and searches the directory for an assembly file 154 with the specified file extension (step 210). The name of the assembly file 154 is supplied to the compiler object 166. The main program 164 searches the memory map file 158 for the name of the assembly file 154 to be processed (step 212). If the main program 164 finds the name, it sends the memory type to the target object 168 (steps 214216).
At this time, the compiler object 166 opens the assembly file 154 (step 218) and identifies individual instructions (step 220). The op-code, operands, and most recent label are sent to the target object 168. The target object 168 identifies the beginning and end of the individual code segments of the assembly file 154 and accumulates the execution time data for each such segment until the end of the file is reached. A list of function names from the instruction labels is also accumulated by the target object 168 (steps 220224).
Steps 210 through 224 are repeated for each assembly file 154 in the assembly directory 156 (step 226). Similarly, steps 208 through 226 are repeated for each assembly directory 156 in the list of assembly directories (step 228). After completing the list of assembly directories, the main program 164 provides the name for the function data table 160 to the target object 168. The target object 168 sorts the list of function names into alphabetical order, outputs the list of function names to the function data table 160, and sorts the function data table 160 in order of ascending tag number (step 230). The function data table 160 is provided by the target object 168 upon completion.
An embodiment of a target object 250 that may be substituted for the target object 168 of FIG. 4C is illustrated in FIG. 5. The target object 250 represents an instruction set and architecture for the Motorola/IBM Power PC family of processors in general, and specifically the Motorola PPC 601. However, it will be appreciated that the selection of the specific target processor is made for the sake of providing an example, and should not be interpreted as limiting the scope of the invention. As mentioned previously, there is typically a different type of target object for each target processor or processor family.
As explained above, the target object 250 generally performs two functions. First, a stream of instructions is analyzed to identify program code segments, accumulate a set of execution parameters for each code segment, and accumulate a list of function names. As mentioned previously, the program developer's source code 14 is broken down into code segments that are defined by tags inserted by the instrumenter 16 (FIG. 1). Second, the list of function names and code segment execution parameters is output by the target object 250. The target object 250 maintains a function name list 252 of the function names that have been encountered. A tag table list 254 of accumulated tag table entries 256 a–d is also maintained by the target object 250. Each tag table entry 256 a–d represents a data structure describing the execution parameters for an individual code segment.
FIG. 5 further includes a logical block diagram of a CPU instruction pipeline 270 for a Motorola PPC 601 processor in order to illustrate the overall relationship between the target object 250 and the CPU instruction pipeline 270. The CPU instruction pipeline includes several CPU stages, such as Fetch Arbitration (FA) and Cache Arbitration (CARB) CPU stages, 302 and 304, respectively. Each CPU stage represents an execution stage in one of the pipelines of the target processor. Each stage can contain name and instruction information. The CPU stages also have a processing function which takes the instruction's op code as an argument. For example, the Integer Execution (IE) CPU stage 310 counts the number of CPU cycles consumed by a code segment, starting with the first non-null instruction it executes in the segment and ending when it processes the first instruction for the next code segment. The Cache Access (CACC)CPU stage 306 counts the number of data accesses in a given code segment. The Branch Execute (BE) CPU stage 308 is responsible for determining the predicted branch tag. It does so by storing the label for the predicted branch. The label will be used later as an index to the corresponding tag number. The stages are arranged in FIG. 5 in the same dependency order as they are in the target processor.
FIG. 6 illustrates the relationship between an instruction 400 and its surroundings in the target processor. The instruction 400 typically includes an op code, operands, and label. It also has pointers to four other instruction objects 402 a–d. These pointers can be used as execution synchronization tags required by the superscalar architecture of the PPC 601. From its op code, the instruction 400 can locate its associated execution table 404. The execution table 404 describes the execution sequence of an instruction and the prerequisites for each execution stage in a tabulated format. Registers 406 a–n receive information from the instruction execution table 404 and provide data to the instruction 400. The registers 406 a–n may be either a general or special purpose registers in the target processor. 406 a–n may be either general or special purpose registers in the target processor. Each of the registers 406 a–n knows whether an instruction is making exclusive use of it, whether or not its contents have been defined and, if defined, what value it contains.
In operation, instructions 400 are read into the FA and CARB stages 302 and 304 until eight instructions 400 a–h are present in the FA/CARB stages. Starting from the end of the CPU instruction pipeline 270, each CPU stage is given the opportunity to update its contents. This process will typically involve determining whether it has completed processing the current instruction and, if it has, requesting the next instruction from the preceding CPU stage. The requested instruction 400 uses its instruction execution table 404 to determine whether the resources are available to move to the next CPU stage. If the required resources are available, the instruction 400 moves to the requesting CPU stage, which immediately processes its instruction(s), thus making the result available for any applicable feed-forward operations. The FA and CARB stages 302 and 304 are the last stages to be updated. This, in effect, returns execution to the beginning. The FA/CARB keeps a record of all the instructions it has processed for a given code segment, thus making those instructions available in case there is an inline loop in the segment. The FA is responsible for counting the number of instructions in a code segment.
Although the software developer's source code has been described as being separated into code segments, it is more precise to state that the source code is separated into functions, and each function can be separated into one or more code segments. When instrumented with coverage tags, a function will contain a function entry tag, at least one function exit tag, and a branch tag for every branch point in the function. The segmentation of the code is performed in such a way that there is a unique code segment associated with each tag. The algorithm which assigns code segments to tags must therefore take function entry and exit into account. The first code segment in a function extends from the beginning of the function to the second call to the tag function. Subsequent code segments begin with the call to the tag function, and end either at the next call to the tag function, or else at the very end of the function. Detecting the beginning of the function is also useful in that it makes the function name available when displaying the contents of instruction cache.
A function begins either when the first instruction or tagged bubble reaches the IE stage 310 or on the cycle after the tag for a blr or rfi instruction completes in the IE. When a new function begins, the label on the first instruction in the function is assumed to be the function name. The IE stage searches the function name list to see if the new label is on the list. If it is, the IE issues a warning message and continues processing. Otherwise, it adds the new label to the function name list. The IE stage subtracts 8 from the constant portion of the second operand in the stwu instruction and then divides by four to get the number of words of stack data.
A new segment begins either at the beginning of a function (as above) or, if not at the beginning of a function, on the cycle after the tag for a bl instruction to the label ExportTag completes in the IE. When the tag for a bl instruction (branch with return address in the link register) to ExportTag completes in the IE, the IE uses the value in the last register to be loaded with a constant value as the tag number. When a new segment begins, the IE appends a new Tag Table Entry to the Tag Table List. This Tag Table Entry is initialized with the memory type and function name.
A segment ends either when a tag for a blr (branch to link register) or rfi (return from interrupt) instruction completes in the IE or, if not at the beginning of a function, when a tag for a by instruction to the label ExportTag completes in the IE. If at the beginning of a function, the segment ends either when a tag for a blr or rfi instruction completes in the IE or when the second tag for a bl instruction to the label ExportTag completes in the IE. In other words, the first segment of a function contains the first branch to ExportTag, and gets its segment number from that call to ExportTag. All other segments get their segment number from the call to ExportTag which precedes them.
There will be cases in which the source level instrumentation does not detect when a loop will be inserted in the target assembly code. These “in-line” loops will occur, for example when an assignment is made to a large struct, causing all the bytes in the struct to be copied from the source to the destination. These loops will always iterate a constant number of cycles, and can therefore be accurately included inside a program segment.
During normal operation, the IE maintains a list of all of the labels it has encountered since the beginning of the program segment, and the number of CPU cycles since each label was first encountered. The BE stage detects when a conditional branch is already resolved (for example by having a defined value in the counter (CTR) register). The BE stage then sends the instruction identity, the branch label and number of loop iterations to the IE stage. The IE stage waits until it detects the branch tag for the loop branching instruction. When it detects the branch tag, the IE stage looks for the loop label in its list of labels. If the label is found, the IE calculates the number of additional CPU cycles consumed by the internal loop:
(number of cycles since label)*(number of loop iterations)+(pipeline latency to IE−1)*(number of loops iterations−1)
This calculation takes into account that fact that the fetching of loop instructions starts one CPU cycle before the branch tag gets to the IE, and the fact that the loop instructions will not have to be fetched for the first loop iteration and the continued execution past the loop. The IE stage adds the CPU cycle increment to the execution time for each of the labels. Performing the calculation in this way allows nested inlined loops to be supported.
When a segment ends, the IE stage creates a function data table entry for the predicted branch for any branch tags which were not resolved within the program segment, and a function data table entry with a null (default) predicted branch tag. For each such function data table entry, the number of CPU cycles is taken from the IE stage, the number of data accesses is taken from the CACC stage, the number of instructions is taken from the FA stage, and the predicted branch tag is taken from the BE stage. The number of CPU cycles is decreased by two to account for the instructions needed to load the tag number, and the number of instructions is decreased by three to account for the instructions used to call ExportTag.
Alternatively, a code segment may be viewed conceptually as being either a branch segment or a function. A function is generally a sequence of instructions that does return to the branch call when the sequence is finished. A branch segment, on the other hand, is generally a sequence of instructions that does not return from where the branch segment was initially called when the sequence is completed.
A function begins either when the first instruction or tagged bubble reaches the IE stage 310 or on the cycle after the tag for a conditional branch-return (blr) instruction completes in the IE stage 310. When a new function begins, the label on the first instruction in the function is assumed to be the function name. The IE stage 310 searches the function name list 252 to see if the new label is on the list. If it is, the IE stage 310 issues a warning message and continues processing. Otherwise, it adds the new label to the function name list 252. The IE stage 310 subtracts 8 from the constant portion of the second operand in the stwu instruction and then divides by four to get the number of words of stack data.
A new branch segment begins either at the beginning of a function, as previously described, or on the cycle after the tag for a conditional branch (bl) instruction to the label ExportTag completes in the IE stage 310. When the tag for a bl instruction to ExportTag completes in the IE stage 310, the IE stage 310 uses the value in the last register to be loaded with a constant value as the tag number. When a new segment begins, the IE stage 310 appends a new tag table entry 256 to the tag table list 254. The tag table entry 256 is initialized with the memory type and segment name.
The function and branch segment ends either when a tag for a blr instruction or a tag for a bl instruction to the label ExportTag completes in the IE stage 310. When a segment ends, the number of CPU cycles is taken from the IE stage 310, the number of data accesses is taken from the CACC stage 306, the number of instructions is taken from the FA stage 302, and the predicted branch tag is taken from the BE stage 308. The number of CPU cycles is decreased by two to account for the instructions needed to load the tag number, and the number of instructions is decreased by three to account for the instructions used to call ExportTag.
From the foregoing it will be appreciated that, although specific embodiments of the invention have been described herein for purposes of illustration, various modifications may be made without deviating from the spirit and scope of the invention. Accordingly, the invention is not limited except as by the appended claims.

Claims (36)

1. A method for simulating the execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the method comprising:
estimating execution times for program segments of the software program based on software parameters describing the program segment and the hardware parameters in response to a host system executing the respective program segments, one or more of the program segments being bounded by branchpoints; and
summing together the estimated execution times of the program segments executed by the host system to provide a simulated execution time of the software program on the simulated hardware system.
2. The method of claim 1 wherein the program segments are delineated by coverage tags instrumented in the software program.
3. The method of claim 2, further comprising:
dividing the software program into program segments;
determining the software parameters for each program segment; and
tabulating the software parameters for each program segment into a table indexed by a respective coverage tag.
4. The method of claim 3 wherein determining the software parameters comprises:
determining the number of CPU cycles for a program segment;
determining the number of data accesses for the program segment; and
determining the number of instructions for the program segment.
5. The method of claim 2 wherein estimating execution times comprises:
detecting execution of a coverage tag by the host system;
obtaining from a function data table the software parameters indexed under a tag value returned by the executed coverage tag in response to executing the coverage tag;
obtaining from a hardware configuration table the hardware parameters of the simulated hardware system; and
calculating an estimated program segment execution time based on the data obtained from the function data table and the hardware configuration table.
6. The method of claim 5 wherein calculating the estimated program segment execution time comprises:
calculating an estimated time for the simulated processor to execute instructions of the program segment;
calculating an estimated time for instructions to be made available to the simulated processor for execution;
calculating an estimated time for data requested by the instructions of the program segment to be made available to the simulated processor; and
summing together the estimated times.
7. The method of claim 6 wherein calculating the estimated time for the simulated processor to execute instructions of the program segment comprises:
obtaining from the function data table and hardware configuration file a number of processor cycles for the program segment and a processor cycle period for a simulated processor of the simulated hardware system; and
multiplying the number of processor cycles with the processor cycle period.
8. A method for simulating the execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the method comprising:
delineating program segments of the software program with coverage tags;
detecting execution of a coverage tag by the host system;
obtaining from a function data table a number of instructions for a program segment wherein the function data table is indexed under a tag value returned by the executed coverage tag in response to executing the coverage tag;
obtaining from a hardware configuration table containing hardware parameters of the simulated hardware system a size of a first cache, a size of a second cache, an access time per instruction for the second cache, a bus cycle time, and a program memory wait state; and
resolving the equation:

t instruction=((N L1 −N L2)*(t L2 −t L2 −t cpu))+(N L2*(t bus*(N cach +N pgm store)C cache −t cpu)
where tinstruction is an instruction access time, NL1 is the size of the first cache, NL2 is the size of the second cache, tL2 is the access time per instruction for the second cache, tcpu is a CPU cycle time, tbus is the bus cycle time, Ncache is a cache line bus cycles, Npgm store is the program memory wait state, and Ccache is a cache line size.
9. A method for simulating the execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the method comprising:
delineating program segments of the software program with coverage tags;
detecting execution of a coverage tag by the host system;
obtaining from a function data table a stack data size for a program segment, wherein the function data table is indexed under a tag value returned by the executed coverage tag in response to executing the coverage tag;
obtaining from a hardware configuration table containing hardware parameters of the simulated hardware system a size of a data cache, a bus cycle time, a data memory wait states, an average size of data beat, and a volatile memory wait state; and
resolving the equation:

t data =numberOfDataAccesses*t bus*(N cache +N data store)/C cache
where tdata is a data access time, numberOfDataAccesses is a number of data accesses, tbus is the bus cycle time, Ncache a cache line bus cycles, Ndata store is the data memory wait states, Ccache is a cache line size.
10. The method of claim 1, further comprising:
maintaining an image of an instruction cache of the simulated hardware system indicative of the contents of the instruction cache; and
updating the image of the instruction cache following the execution of each program segment on the host system.
11. The method of claim 10, further comprising displaying the simulated execution time of the software program and the image of the instruction cache.
12. A method of estimating an execution time of a software program instrumented with coverage tags on a simulated hardware system at least partially defined by hardware parameters, the coverage tags delineating program segments of the software program, the method comprising:
tabulating the hardware parameters in a hardware configuration file and software parameters describing the program segments of the software program in a function data table, one or more of the program segments being greater than one instruction byte in length;
executing the software program;
detecting execution of a coverage tag;
obtaining hardware parameters from the hardware configuration file and obtaining from the function data table the software parameters for the program segment corresponding to the executed coverage tag;
calculating an estimated program segment execution time for the program segment corresponding to the executed coverage tag based on the obtained hardware and software parameters; and
adding the estimated program segment execution time to a running total for the total execution time of the software program.
13. The method of claim 12 wherein calculating the estimated program segment execution time comprises:
calculating an estimated time for the simulated processor to execute instructions of the program segment;
calculating an estimated time for instructions to be made available to the simulated processor for execution;
calculating an estimated time for data requested by the instructions of the program segment to be made available to the simulated processor; and
summing together the estimated times.
14. The method of claim 13 wherein calculating the estimated time for the simulated processor to execute instructions of the program segment comprises:
obtaining from the function data table and hardware configuration file a number of processor cycles for the program segment and a processor cycle period for a simulated processor of the simulated hardware system; and
multiplying the number of processor cycles with the processor cycle period.
15. The method of claim 13 wherein calculating the estimated time for instructions to be made available comprises:
obtaining from the function data table and hardware configuration file a number of instructions for the program segment, size of a first cache, size of a second cache, an access time per instruction for the second cache, a bus cycle time, and a program memory wait state; and
resolving an equation using this data to obtain an instruction access time.
16. The method of claim 12, further comprising:
maintaining an image of an instruction cache of the simulated hardware system indicative of the contents of the instruction cache; and
updating the image of the instruction cache following the execution of each program segment.
17. The method of claim 16, further comprising displaying the simulated execution time of the software program and the image of the instruction cache.
18. The method of claim 12 wherein tabulating the software parameters in the function data table comprises:
dividing the software program into program segments;
determining software parameters for each program segment; and
tabulating the software parameters for each program segment into a table indexed by a respective coverage tag.
19. The method of claim 18 wherein determining the software parameters comprises:
determining the number of CPU cycles for a program segment;
determining the number of data accesses for the program segment; and
determining the number of instructions for the program segment.
20. A system for analyzing a simulated execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the software program instrumented with executable coverage tags delineating program segments of the software program, one or more of the program segments being greater than one instruction byte in length, the system comprising:
a memory to store software parameters describing the program segments of the software program and the hardware parameters; and
a processor coupled to the memory to execute the software program and to calculate the estimated execution time for a program segment based on the software and hardware parameters in response to executing the respective coverage tag, the processor adding the estimated execution time to a running total of the total estimated execution time for the software program.
21. The system of claim 20, further comprising an assembly analyzer to tabulate the software parameters, the assembly analyzer:
dividing the software program into program segments;
determining software parameters for each program segment; and
tabulating the software parameters for each program segment into a table indexed by a respective coverage tag.
22. The system of claim 21 wherein determining the software parameters comprises:
determining the number of CPU cycles for a program segment;
determining the number of data accesses for the program segment; and
determining the number of instructions for the program segment.
23. The system of claim 20 wherein the memory is further adapted to store instruction cache data reflecting the contents of an instruction cache of a simulated central processing unit of the simulated hardware system, and the processor further maintaining an instruction cache image by updating the instruction cache data when a program segment is executed.
24. The system of claim 20 wherein the processor calculates the execution time by:
detecting execution of a coverage tag by the host system;
obtaining from a function data table the software parameters indexed under a tag value returned by the executed coverage tag in response to executing the coverage tag;
obtaining from a hardware configuration table the hardware parameters of the simulated hardware system; and
calculating an estimated program segment execution time based on the data obtained from the function data table and the hardware configuration table.
25. The system of claim 24 wherein the processor calculates the estimated program segment execution time by:
calculating an estimated time for the simulated processor to execute instructions of the program segment;
calculating an estimated time for instructions to be made available to the simulated processor for execution;
calculating an estimated time for data requested by the instructions of the program segment to be made available to the simulated processor; and
summing together the estimated times.
26. The system of claim 25 wherein the processor calculates the estimated time for the simulated processor to execute instructions of the program segment by:
obtaining from the function data table and hardware configuration file a number of processor cycles for the program segment and a processor cycle period for a simulated processor of the simulated hardware system; and
multiplying the number of processor cycles with the processor cycle period.
27. A system for analyzing a simulated execution of a target software program on a simulated hardware system at least partially defined by hardware parameters, the system comprising:
a memory to store a function data table tabulating software parameters describing program segments of the target software program, one or more of the program segments being greater than one instruction byte in length, the memory further to store a hardware configuration file tabulating the hardware parameters; and
a processor coupled to the memory to execute the target software program and to calculate an estimated execution time of the target software program on the simulated hardware system, the processor calculating the estimated execution time by:
estimating execution times for the program segments of the target software program based on the software parameters and the hardware parameters in response to the processor executing the respective program segments; and
summing together the estimated execution times of the program segments executed by the processor to provide the estimated execution time of the target software program on the simulated hardware system.
28. The system of claim 27 wherein the memory is further adapted to store instruction cache data reflecting the contents of an instruction cache of a simulated central processing unit of the simulated hardware system, and the processor further maintaining an instruction cache image by updating the instruction cache data when a program segment is executed.
29. The system of claim 28, further including a display coupled to the processor to display the total estimated execution time of the software program and the instruction cache image.
30. The system of claim 27 wherein the processor estimates the execution time by:
detecting execution of a coverage tag by the host system;
obtaining from a function data table the software parameters indexed under a tag value returned by the executed coverage tag in response to executing the coverage tag;
obtaining from a hardware configuration table the hardware parameters of the simulated hardware system; and
calculating an estimated program segment execution time based on the data obtained from the function data table and the hardware configuration table.
31. The system of claim 30 wherein the processor calculates the estimated program segment execution time by:
calculating an estimated time for the simulated processor to execute instructions of the program segment;
calculating an estimated time for instructions to be made available to the simulated processor for execution;
calculating an estimated time for data requested by the instructions of the program segment to be made available to the simulated processor; and
summing together the estimated times.
32. The system of claim 31 wherein the processor calculates the estimated time for the simulated processor to execute instructions of the program segment by:
obtaining from the function data table and hardware configuration file a number of processor cycles for the program segment and a processor cycle period for a simulated processor of the simulated hardware system; and
multiplying the number of processor cycles with the processor cycle period.
33. A method of producing a simulated execution time of a software program on a simulated hardware system or a simulated hardware and software system, the method comprising the steps:
executing, for each program segment, an executable coverage tag instrumented into the software program in addition to the simulated software program instructions, the tag comprising a function call to a tag function and a reference to a function data table, the reference being more than one bit in length, the executable coverage tag being at least a byte in length;
looking up parameter data for the respective program segment in the function data table;
calculating, for each program segment, an estimated execution time based on the parameter data for each program segment and;
summing together the estimated execution times of the program segments executed by the host system to provide a simulated execution time of the software program on the simulated hardware system.
34. A method for simulating the execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the method comprising:
dividing the software program into program segments, one or more of the program segments being greater than one instruction byte in length;
tabulating the software parameters for each program segment into a table and indexing the table to a plurality of respective executable coverage tags;
instrumenting each executable coverage tag into the software program before execution;
executing the software program and the instrumented executable coverage tags.
35. A method for simulating the execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the method comprising:
dividing the software program into program segments, one or more of the program segments being greater than one instruction byte in length;
tabulating the software parameters for each program segment into a table and indexing the table to a plurality of respective coverage tags;
instrumenting each coverage tag into the respective software program segment before execution;
executing the software program and those coverage tags encountered during execution.
36. A method for simulating the execution of a software program on a simulated hardware system at least partially defined by hardware parameters, the method comprising:
dividing the software program into program segments;
tabulating the software parameters for each program segment into a table and indexing the table to a plurality of respective executable coverage tags, the coverage tags each having a function call to a tag function and a tag number for provision to the tag function, the tag function keeping a running total of the total execution time;
instrumenting each coverage tag into the respective program;
executing the software program and those coverage tags encountered during execution.
US09/435,003 1999-11-05 1999-11-05 Method and system for simulating execution of a target program in a simulated target system Expired - Lifetime US6973417B1 (en)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US09/435,003 US6973417B1 (en) 1999-11-05 1999-11-05 Method and system for simulating execution of a target program in a simulated target system
AU14529/01A AU1452901A (en) 1999-11-05 2000-11-01 Method and system for simulating execution of a target program in a simulated target system
PCT/US2000/030116 WO2001035223A1 (en) 1999-11-05 2000-11-01 Method and system for simulating execution of a target program in a simulated target system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/435,003 US6973417B1 (en) 1999-11-05 1999-11-05 Method and system for simulating execution of a target program in a simulated target system

Publications (1)

Publication Number Publication Date
US6973417B1 true US6973417B1 (en) 2005-12-06

Family

ID=23726598

Family Applications (1)

Application Number Title Priority Date Filing Date
US09/435,003 Expired - Lifetime US6973417B1 (en) 1999-11-05 1999-11-05 Method and system for simulating execution of a target program in a simulated target system

Country Status (3)

Country Link
US (1) US6973417B1 (en)
AU (1) AU1452901A (en)
WO (1) WO2001035223A1 (en)

Cited By (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020124012A1 (en) * 2001-01-25 2002-09-05 Clifford Liem Compiler for multiple processor and distributed memory architectures
US20030093776A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Memory address prediction under emulation
US20040128446A1 (en) * 2002-12-27 2004-07-01 Carole Dulong Value profiling with low overhead
US20040148151A1 (en) * 2003-01-24 2004-07-29 Menter Patrick W. Model simulation and calibration
US20040194067A1 (en) * 2003-02-13 2004-09-30 Hsiu-Chuan Lien Method for program debugging
US20040255277A1 (en) * 2003-04-18 2004-12-16 Ounce Labs, Inc. Method and system for detecting race condition vulnerabilities in source code
US20050022166A1 (en) * 2001-09-07 2005-01-27 Hans-Joerg Wolff Software verification method for control units and verification system
US20050108689A1 (en) * 2003-11-13 2005-05-19 Hooper Donald F. Instruction operand tracing for software debug
US20050154811A1 (en) * 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US20050155019A1 (en) * 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US20050166027A1 (en) * 2004-01-09 2005-07-28 Kabushiki Kaisha Toshiba Processor organizing apparatus and method for organize a pipeline processor
US20050210450A1 (en) * 2004-03-22 2005-09-22 Dimpsey Robert T Method and appartus for hardware assistance for data access coverage
US20050210451A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US20050210199A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching data
US20050210452A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US20050210198A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US20050210454A1 (en) * 2004-03-18 2005-09-22 International Business Machines Corporation Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data
US20060174155A1 (en) * 2005-02-03 2006-08-03 Arm Limited System, method and computer program product for testing software
US20060179363A1 (en) * 2005-02-07 2006-08-10 Labanca John Online testing unification system with remote test automation technology
US7096322B1 (en) * 2003-10-10 2006-08-22 Unisys Corporation Instruction processor write buffer emulation using embedded emulation control instructions
US20060190933A1 (en) * 2005-02-22 2006-08-24 Ruey-Yuan Tzeng Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework
US20060200807A1 (en) * 2005-03-03 2006-09-07 International Business Machines Corporation Breakpoint timers
US7197586B2 (en) 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US20070079189A1 (en) * 2005-09-16 2007-04-05 Jibbe Mahmoud K Method and system for generating a global test plan and identifying test requirements in a storage system environment
US20070136726A1 (en) * 2005-12-12 2007-06-14 Freeland Gregory S Tunable processor performance benchmarking
US20070283325A1 (en) * 2006-06-02 2007-12-06 Abhishek Kumar Quality inspector tool
US20080052485A1 (en) * 2006-08-02 2008-02-28 Sandisk Il Ltd. System For Synchronous Code Retrieval From An Asynchronous Source
US20080077923A1 (en) * 2006-08-02 2008-03-27 Sandisk Il Ltd. Methods For Synchronous Code Retrieval From An Asynchronous Source
US20080155511A1 (en) * 2006-12-20 2008-06-26 Smart Bear, Inc. System and method for detecting events in computer code using interval values simulation
US20080163180A1 (en) * 2006-12-27 2008-07-03 Victor Havin Dynamic discovery of data segments within instrumented code
US7398517B2 (en) 2003-04-18 2008-07-08 Ounce Labs, Inc. Method and system for detecting vulnerabilities in source code
US20080184209A1 (en) * 2007-01-31 2008-07-31 Lafrance-Linden David Profiling metrics for computer programs
US20080196045A1 (en) * 2007-02-08 2008-08-14 Chang Belinda Y Smart progress indicator for script processing
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US20080222664A1 (en) * 2007-03-05 2008-09-11 One Microsoft Way Dynamic method selection based on declarative requirements of interaction scope
US7480899B2 (en) 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US20090112568A1 (en) * 2005-11-04 2009-04-30 Inchron Gmbh Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
US20090204383A1 (en) * 2008-02-07 2009-08-13 Alexander Weiss Procedure and Device for Emulating a Programmable Unit Providing System Integrity Control
US7702499B1 (en) * 2000-05-02 2010-04-20 Cadence Design Systems, Inc. Systems and methods for performing software performance estimations
US20110047532A1 (en) * 2009-08-19 2011-02-24 Wenguang Wang Methods and apparatuses for selective code coverage
US7937691B2 (en) 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US20110113224A1 (en) * 2008-07-02 2011-05-12 Tokyo Institute Of Technology Execution time estimation method, execution time estimation program, and execution time estimation device
US8042102B2 (en) 2003-10-09 2011-10-18 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operations in an application
US8141099B2 (en) 2004-01-14 2012-03-20 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US20120124318A1 (en) * 2010-11-11 2012-05-17 International Business Machines Corporation Method and Apparatus for Optimal Cache Sizing and Configuration for Large Memory Systems
US8185868B1 (en) 2004-12-20 2012-05-22 The Mathworks, Inc. System and method for cell-based code editing and publishing
US8229726B1 (en) * 2006-10-05 2012-07-24 Oracle America, Inc. System for application level analysis of hardware simulations
US20120192149A1 (en) * 2007-03-21 2012-07-26 International Business Machines Corporation Code generation for real-time event processing
US8255880B2 (en) 2003-09-30 2012-08-28 International Business Machines Corporation Counting instruction and memory location ranges
US20120233367A1 (en) * 2011-03-09 2012-09-13 Maarten Koning Interrupt Latency Measurement
US8296445B1 (en) * 2007-11-12 2012-10-23 Google Inc. Software testing harness
US8381037B2 (en) 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US8423975B1 (en) * 2004-05-05 2013-04-16 Gregory M. Scallon System performance simulator
CN103513989A (en) * 2013-09-30 2014-01-15 广州华多网络科技有限公司 Method and device for obtaining key data
US20140019811A1 (en) * 2012-07-11 2014-01-16 International Business Machines Corporation Computer system performance markers
US8671395B1 (en) * 2010-09-10 2014-03-11 Cadence Design Systems, Inc. Adaptive deadend avoidance in constrained simulation
US8689190B2 (en) 2003-09-30 2014-04-01 International Business Machines Corporation Counting instruction execution and data accesses
GB2507816A (en) * 2012-11-13 2014-05-14 Ibm Calculating timeout for remote task execution from network delays and processing duration on local application/hardware replica
US20140149100A1 (en) * 2011-07-27 2014-05-29 European Aeronautic Defence And Space Company Eads France Method for characterizing the sensitivity of an electronic component for a method for designing electronic equipment
US8762956B1 (en) * 2007-01-31 2014-06-24 The Mathworks, Inc. Generating a report document from code
FR3005183A1 (en) * 2013-04-24 2014-10-31 Thales Sa COMPUTER ASSISTED METHOD OF SIMULATION OF A COMPUTER APPLICATION INTENDED TO OPERATE ON A CALCULATION PLATFORM
US8966211B1 (en) * 2011-12-19 2015-02-24 Emc Corporation Techniques for dynamic binding of device identifiers to data storage devices
CN111917410A (en) * 2020-07-10 2020-11-10 天津七所精密机电技术有限公司 Method for correcting binding data based on time sensitive parameters of high-precision timing
CN113590149A (en) * 2021-06-29 2021-11-02 北京智芯微电子科技有限公司 Method and device for segmented loading and running of program
CN114706376A (en) * 2022-06-06 2022-07-05 南京宏泰半导体科技有限公司 Hardware control device and method based on software decoupling

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4215037B2 (en) 2004-12-27 2009-01-28 セイコーエプソン株式会社 Resource management system, printer, printer network card, resource management program, and resource management method
JP2006244451A (en) * 2005-02-01 2006-09-14 Seiko Epson Corp Resource management system, resource management program, and resource management method
JP4207938B2 (en) * 2005-02-01 2009-01-14 セイコーエプソン株式会社 Software authentication system, software authentication program, and software authentication method
JP4311386B2 (en) 2005-02-14 2009-08-12 セイコーエプソン株式会社 File operation restriction system, file operation restriction program, file operation restriction method, electronic apparatus, and printing apparatus
DE102008030163A1 (en) 2008-06-27 2009-12-31 Inchron Gmbh Embedded system i.e. computer system, simulating method, involves simulating dynamic characteristics reacting with events by simulator core, and determining actually required execution times of program sequence on target system
EP2366146B2 (en) 2009-12-23 2016-10-12 Inchron GmbH Method and data processing system for simulating an embedded system
JP4905597B1 (en) * 2011-03-15 2012-03-28 オムロン株式会社 Controller support device, controller support program to be executed in the device, and recording medium storing the program

Citations (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4445192A (en) 1980-11-25 1984-04-24 Hewlett-Packard Company Logic state analyzer with time and event count measurement between states
US4622652A (en) 1984-05-14 1986-11-11 Applied Microsystems Corporation Signal identification
US4819233A (en) 1987-04-08 1989-04-04 Westinghouse Electric Corp. Verification of computer software
US4845615A (en) 1984-04-30 1989-07-04 Hewlett-Packard Company Software performance analyzer
US4937740A (en) 1985-09-18 1990-06-26 Cadre Technologies, Inc. Real time software analyzing system for storing selective m-bit addresses based upon correspondingly generated n-bit tags
US5047919A (en) 1986-04-03 1991-09-10 Harris Corporation Method and apparatus for monitoring software execution in a parallel multiprocessor computer system
US5062055A (en) 1986-09-02 1991-10-29 Digital Equipment Corporation Data processor performance advisor
US5103394A (en) 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US5121501A (en) 1989-12-27 1992-06-09 International Business Machines Corporation First processor inserting hooks into software and sending unique identifications to output bus and second processor associating data frames and time with these unique identifications
US5121489A (en) 1988-08-02 1992-06-09 International Business Machines Corporation Tracing method for identifying program execution paths using a trace points bit map with one-to-one correspondence with embedded trace points
US5134701A (en) 1989-02-10 1992-07-28 Hewlett-Packard Co. Test apparatus performing runtime replacement of program instructions with breakpoint instructions for processor having multiple instruction fetch capabilities
US5136590A (en) 1988-11-23 1992-08-04 John Fluke Mfg. Co., Inc. Kernel testing interface and method for automating diagnostics of microprocessor-based systems
US5165026A (en) * 1988-10-05 1992-11-17 Kabushiki Kaisha Toshiba Programmable controller in which fetching of operand data and fetching of operand addresses are simultaneously performed
US5228039A (en) 1990-05-09 1993-07-13 Applied Microsystems Corporation Source-level in-circuit software code debugging instrument
US5265254A (en) 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation
US5307498A (en) 1992-12-04 1994-04-26 International Business Machines Corporation Automated method for adding hooks to software
US5321828A (en) 1991-06-07 1994-06-14 Step Engineering High speed microcomputer in-circuit emulator
US5329471A (en) 1987-06-02 1994-07-12 Texas Instruments Incorporated Emulation devices, systems and methods utilizing state machines
US5355369A (en) 1991-04-26 1994-10-11 At&T Bell Laboratories High-speed integrated circuit testing with JTAG
US5361351A (en) 1990-09-21 1994-11-01 Hewlett-Packard Company System and method for supporting run-time data type identification of objects within a computer program
US5371878A (en) 1990-12-24 1994-12-06 Ball Corporation System for analysis of embedded computer systems
US5375125A (en) 1991-05-15 1994-12-20 Hitachi, Ltd. Method of displaying program execution for a computer
US5408650A (en) 1993-06-29 1995-04-18 Digital Equipment Corporation Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program
US5410685A (en) 1990-06-12 1995-04-25 Regents Of The University Of Michigan Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same
US5450586A (en) 1991-08-14 1995-09-12 Hewlett-Packard Company System for analyzing and debugging embedded software through dynamic and interactive use of code markers
US5488713A (en) 1989-12-27 1996-01-30 Digital Equipment Corporation Computer simulation technique for predicting program performance
US5522036A (en) 1993-05-10 1996-05-28 Benjamin V. Shapiro Method and apparatus for the automatic analysis of computer software
US5533192A (en) 1994-04-21 1996-07-02 Apple Computer, Inc. Computer program debugging system and method
US5539907A (en) 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5581695A (en) 1990-05-09 1996-12-03 Applied Microsystems Corporation Source-level run-time software code debugging instrument
US5613098A (en) * 1991-03-07 1997-03-18 Digital Equipment Corporation Testing and debugging new Y architecture code on existing X architecture system by using an environment manager to switch between direct X code execution and simulated Y code execution
US5615332A (en) 1993-12-21 1997-03-25 Mitsubishi Denki Kabushiki Kaisha Debugging aid apparatus
EP0767430A2 (en) 1995-09-11 1997-04-09 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
US5678028A (en) * 1994-10-25 1997-10-14 Mitsubishi Electric Information Technology Center America, Inc. Hardware-software debugger using simulation speed enhancing techniques including skipping unnecessary bus cycles, avoiding instruction fetch simulation, eliminating the need for explicit clock pulse generation and caching results of instruction decoding
US5737520A (en) 1996-09-03 1998-04-07 Hewlett-Packard Co. Method and apparatus for correlating logic analyzer state capture data with associated application data structures
US5771345A (en) 1996-04-25 1998-06-23 Tektronix, Inc. Integrated digital processing device and method for examining the operation thereof
US5838948A (en) * 1995-12-01 1998-11-17 Eagle Design Automation, Inc. System and method for simulation of computer systems combining hardware and software interaction
US5857093A (en) 1996-09-20 1999-01-05 Allen-Bradley Company, Llc Cross-compiled simulation timing backannotation
US5903759A (en) 1997-06-04 1999-05-11 3 Com Corporation Software performance analysis using hardware analyzer
US5911059A (en) * 1996-12-18 1999-06-08 Applied Microsystems, Inc. Method and apparatus for testing software
US5956512A (en) 1992-06-05 1999-09-21 Hewlett-Packard Co. Computer program debugging in the presence of compiler synthesized variables
US5987243A (en) * 1996-08-30 1999-11-16 Kabushiki Kaisha Toshiba Hardware and software co-simulator and its method
US5999734A (en) * 1997-10-21 1999-12-07 Ftl Systems, Inc. Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models
US6016557A (en) 1997-09-25 2000-01-18 Lucent Technologies, Inc. Method and apparatus for nonintrusive passive processor monitor
US6047390A (en) 1997-12-22 2000-04-04 Motorola, Inc. Multiple context software analysis
US6052524A (en) * 1998-05-14 2000-04-18 Software Development Systems, Inc. System and method for simulation of integrated hardware and software components
US6094730A (en) 1997-10-27 2000-07-25 Hewlett-Packard Company Hardware-assisted firmware tracing method and apparatus
WO2000043886A1 (en) 1999-01-20 2000-07-27 Applied Microsystems Corporation Instrumentation of calls to routines for which source code is unavailable
US6106571A (en) * 1998-01-29 2000-08-22 Applied Microsystems Corporation Relocatable instrumentation tags for testing and debugging a computer program
US6110220A (en) * 1997-02-24 2000-08-29 Lucent Technologies Inc. Concurrent hardware-software co-synthesis of hard real-time aperiodic and periodic specifications of embedded system architectures
US6178542B1 (en) * 1997-02-24 2001-01-23 Lucent Technologies Inc. Hardware-software co-synthesis of embedded system architectures using quality of architecture metrics
US6202044B1 (en) * 1997-06-13 2001-03-13 Simpod, Inc, Concurrent hardware-software co-simulation
US6223144B1 (en) * 1998-03-24 2001-04-24 Advanced Technology Materials, Inc. Method and apparatus for evaluating software programs for semiconductor circuits
US6230114B1 (en) * 1999-10-29 2001-05-08 Vast Systems Technology Corporation Hardware and software co-simulation including executing an analyzed user program
US6263302B1 (en) * 1999-10-29 2001-07-17 Vast Systems Technology Corporation Hardware and software co-simulation including simulating the cache of a target processor
EP1130518A1 (en) 2000-01-31 2001-09-05 Applied Microsystems Corporation Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof
US6298320B1 (en) * 1998-02-17 2001-10-02 Applied Microsystems Corporation System and method for testing an embedded microprocessor system containing physical and/or simulated hardware
US6311327B1 (en) * 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US6381656B1 (en) 1999-03-10 2002-04-30 Applied Microsystems Corporation Method and apparatus for monitoring input/output (“I/O”) performance in I/O processors
US20020073398A1 (en) 1998-12-14 2002-06-13 Jeffrey L. Tinker Method and system for modifying executable code to add additional functionality

Patent Citations (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4445192A (en) 1980-11-25 1984-04-24 Hewlett-Packard Company Logic state analyzer with time and event count measurement between states
US4845615A (en) 1984-04-30 1989-07-04 Hewlett-Packard Company Software performance analyzer
US5103394A (en) 1984-04-30 1992-04-07 Hewlett-Packard Company Software performance analyzer
US4622652A (en) 1984-05-14 1986-11-11 Applied Microsystems Corporation Signal identification
US4937740A (en) 1985-09-18 1990-06-26 Cadre Technologies, Inc. Real time software analyzing system for storing selective m-bit addresses based upon correspondingly generated n-bit tags
US5047919A (en) 1986-04-03 1991-09-10 Harris Corporation Method and apparatus for monitoring software execution in a parallel multiprocessor computer system
US5062055A (en) 1986-09-02 1991-10-29 Digital Equipment Corporation Data processor performance advisor
US4819233A (en) 1987-04-08 1989-04-04 Westinghouse Electric Corp. Verification of computer software
US5329471A (en) 1987-06-02 1994-07-12 Texas Instruments Incorporated Emulation devices, systems and methods utilizing state machines
US5121489A (en) 1988-08-02 1992-06-09 International Business Machines Corporation Tracing method for identifying program execution paths using a trace points bit map with one-to-one correspondence with embedded trace points
US5165026A (en) * 1988-10-05 1992-11-17 Kabushiki Kaisha Toshiba Programmable controller in which fetching of operand data and fetching of operand addresses are simultaneously performed
US5136590A (en) 1988-11-23 1992-08-04 John Fluke Mfg. Co., Inc. Kernel testing interface and method for automating diagnostics of microprocessor-based systems
US5134701A (en) 1989-02-10 1992-07-28 Hewlett-Packard Co. Test apparatus performing runtime replacement of program instructions with breakpoint instructions for processor having multiple instruction fetch capabilities
US5121501A (en) 1989-12-27 1992-06-09 International Business Machines Corporation First processor inserting hooks into software and sending unique identifications to output bus and second processor associating data frames and time with these unique identifications
US5488713A (en) 1989-12-27 1996-01-30 Digital Equipment Corporation Computer simulation technique for predicting program performance
US5228039A (en) 1990-05-09 1993-07-13 Applied Microsystems Corporation Source-level in-circuit software code debugging instrument
US5581695A (en) 1990-05-09 1996-12-03 Applied Microsystems Corporation Source-level run-time software code debugging instrument
US5410685A (en) 1990-06-12 1995-04-25 Regents Of The University Of Michigan Non-intrinsive method and system for recovering the state of a computer system and non-intrusive debugging method and system utilizing same
US5361351A (en) 1990-09-21 1994-11-01 Hewlett-Packard Company System and method for supporting run-time data type identification of objects within a computer program
US5371878A (en) 1990-12-24 1994-12-06 Ball Corporation System for analysis of embedded computer systems
US5613098A (en) * 1991-03-07 1997-03-18 Digital Equipment Corporation Testing and debugging new Y architecture code on existing X architecture system by using an environment manager to switch between direct X code execution and simulated Y code execution
US5355369A (en) 1991-04-26 1994-10-11 At&T Bell Laboratories High-speed integrated circuit testing with JTAG
US5375125A (en) 1991-05-15 1994-12-20 Hitachi, Ltd. Method of displaying program execution for a computer
US5321828A (en) 1991-06-07 1994-06-14 Step Engineering High speed microcomputer in-circuit emulator
US5450586A (en) 1991-08-14 1995-09-12 Hewlett-Packard Company System for analyzing and debugging embedded software through dynamic and interactive use of code markers
US5265254A (en) 1991-08-14 1993-11-23 Hewlett-Packard Company System of debugging software through use of code markers inserted into spaces in the source code during and after compilation
US5956512A (en) 1992-06-05 1999-09-21 Hewlett-Packard Co. Computer program debugging in the presence of compiler synthesized variables
US5307498A (en) 1992-12-04 1994-04-26 International Business Machines Corporation Automated method for adding hooks to software
US5522036A (en) 1993-05-10 1996-05-28 Benjamin V. Shapiro Method and apparatus for the automatic analysis of computer software
US5408650A (en) 1993-06-29 1995-04-18 Digital Equipment Corporation Memory analysis system for dynamically displaying memory allocation and de-allocation events associated with an application program
US5615332A (en) 1993-12-21 1997-03-25 Mitsubishi Denki Kabushiki Kaisha Debugging aid apparatus
US5539907A (en) 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5533192A (en) 1994-04-21 1996-07-02 Apple Computer, Inc. Computer program debugging system and method
US5678028A (en) * 1994-10-25 1997-10-14 Mitsubishi Electric Information Technology Center America, Inc. Hardware-software debugger using simulation speed enhancing techniques including skipping unnecessary bus cycles, avoiding instruction fetch simulation, eliminating the need for explicit clock pulse generation and caching results of instruction decoding
US5748878A (en) 1995-09-11 1998-05-05 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
US6161200A (en) * 1995-09-11 2000-12-12 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
EP0767430A2 (en) 1995-09-11 1997-04-09 Applied Microsystems, Inc. Method and apparatus for analyzing software executed in embedded systems
US5838948A (en) * 1995-12-01 1998-11-17 Eagle Design Automation, Inc. System and method for simulation of computer systems combining hardware and software interaction
US5771345A (en) 1996-04-25 1998-06-23 Tektronix, Inc. Integrated digital processing device and method for examining the operation thereof
US5987243A (en) * 1996-08-30 1999-11-16 Kabushiki Kaisha Toshiba Hardware and software co-simulator and its method
US5737520A (en) 1996-09-03 1998-04-07 Hewlett-Packard Co. Method and apparatus for correlating logic analyzer state capture data with associated application data structures
US5857093A (en) 1996-09-20 1999-01-05 Allen-Bradley Company, Llc Cross-compiled simulation timing backannotation
US5911059A (en) * 1996-12-18 1999-06-08 Applied Microsystems, Inc. Method and apparatus for testing software
US6178542B1 (en) * 1997-02-24 2001-01-23 Lucent Technologies Inc. Hardware-software co-synthesis of embedded system architectures using quality of architecture metrics
US6110220A (en) * 1997-02-24 2000-08-29 Lucent Technologies Inc. Concurrent hardware-software co-synthesis of hard real-time aperiodic and periodic specifications of embedded system architectures
US5903759A (en) 1997-06-04 1999-05-11 3 Com Corporation Software performance analysis using hardware analyzer
US6202044B1 (en) * 1997-06-13 2001-03-13 Simpod, Inc, Concurrent hardware-software co-simulation
US6016557A (en) 1997-09-25 2000-01-18 Lucent Technologies, Inc. Method and apparatus for nonintrusive passive processor monitor
US5999734A (en) * 1997-10-21 1999-12-07 Ftl Systems, Inc. Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models
US6094730A (en) 1997-10-27 2000-07-25 Hewlett-Packard Company Hardware-assisted firmware tracing method and apparatus
US6047390A (en) 1997-12-22 2000-04-04 Motorola, Inc. Multiple context software analysis
US6106571A (en) * 1998-01-29 2000-08-22 Applied Microsystems Corporation Relocatable instrumentation tags for testing and debugging a computer program
US20010041974A1 (en) 1998-02-17 2001-11-15 Buckmaster Michael R. System and method for testing an embedded microprocessor system containing physical and/or simulated hardware
US6298320B1 (en) * 1998-02-17 2001-10-02 Applied Microsystems Corporation System and method for testing an embedded microprocessor system containing physical and/or simulated hardware
US6311327B1 (en) * 1998-03-02 2001-10-30 Applied Microsystems Corp. Method and apparatus for analyzing software in a language-independent manner
US20020095660A1 (en) 1998-03-02 2002-07-18 O'brien Stephen Caine Method and apparatus for analyzing software in a language-independent manner
US6223144B1 (en) * 1998-03-24 2001-04-24 Advanced Technology Materials, Inc. Method and apparatus for evaluating software programs for semiconductor circuits
US6052524A (en) * 1998-05-14 2000-04-18 Software Development Systems, Inc. System and method for simulation of integrated hardware and software components
US20020073398A1 (en) 1998-12-14 2002-06-13 Jeffrey L. Tinker Method and system for modifying executable code to add additional functionality
WO2000043886A1 (en) 1999-01-20 2000-07-27 Applied Microsystems Corporation Instrumentation of calls to routines for which source code is unavailable
US6381656B1 (en) 1999-03-10 2002-04-30 Applied Microsystems Corporation Method and apparatus for monitoring input/output (“I/O”) performance in I/O processors
US6263302B1 (en) * 1999-10-29 2001-07-17 Vast Systems Technology Corporation Hardware and software co-simulation including simulating the cache of a target processor
US6230114B1 (en) * 1999-10-29 2001-05-08 Vast Systems Technology Corporation Hardware and software co-simulation including executing an analyzed user program
EP1130518A1 (en) 2000-01-31 2001-09-05 Applied Microsystems Corporation Software analysis system having an apparatus for selectively collecting analysis data from a target system executing software instrumented with tag statements and method for use thereof

Non-Patent Citations (19)

* Cited by examiner, † Cited by third party
Title
Bourdoncle, F., "Abstract Debugging of Higher-Order Imperative Languages," ACM SIGPLAN PLDI, pp. 46-55, Apr. 1993.
Crooks, Roger "Embedded RISC muPs Present New Debugging Challenges," EDN, 39(16):105-112, Aug. 4, 1994.
Dave, B. "COSYN: Hardware-Software Co-synthesis of Embedded Systems" Proc. of 34<SUP>th</SUP> Annual Conf. on DAC. 1997. pp. 703-708. *
Devadas, S. et al. "An Observability-Based Code Coverage Metric for Functional Simulation". Proc. of the 1996 IEEE/ACM on Computer Aided Design.1997. pp. 418-425. *
Fritzson, P. et al., "Generalized Algorithmic Debugging and Testing," ACM SIGPLAN PLDI, pp. 317-326, Jul. 1991.
Gajski, Daniel D., Specification and Design of Embedded Systems, Prentice-Hall, New Jersey, 1994, Chap. 7 "Design Quality Estimation," pp. 290-304.
Hines, K. et al. "Dynamic Communication Models in Embedded System Co-simulation" Proc. 34<SUP>th</SUP> Annual Conf. on DAC. 1997. pp. 395-400. *
Hollenbeck, D. "Performance" Slides, The Univ. of Texas at Dallas, Erik Jonsson School of Engineering and Computer Science. Jan 1998. *
Li, Y. "Hardware / Software co-synthesis with memory hierarchies" 1998 IEEE/ACM Int'l Conf. on CAD. (ICCAD '98). Nov. 8-12, 1998. pp. 430-436. *
Liao, Y. et al., "A Specificational Approach to High Level Program Monitoring and Measuring," IEEE Transactions on Software Engineering, 18(11):969-978, Nov. 1992.
Liu, H. "Integrated partitioning and scheduling for Hardware / Software co-design" Proc. Int'l Conf. on Comp. Design: VLSI in Computers and Processors (ICCD '98). Oct. 5-7, 1998. pp. 609-614. *
Liu, J. et al. "Software timing analysis using HW/SW co-simulation and instruction set simulator" Proc. of 6th Int'l Workshop on HW/SW Co-design. 1998. pp. 65-69. *
Mowry et al. "Design and Evalutation of a Compiler Algorithm for Prefetching". Proc. 5<SUP>th</SUP> Int'l COnf. on Arch. SUpport for Programming Languages and Operating Systems. 1992. pp. 62-73. *
Potkonjak, M. et al., "Design-For-Debugging of Application Specific Designs," Pro. Of IEEE/ACM Int. Conf. CAD, pp. 295-301, Nov. 1995.
Sorin et al. "Analytic Evaluation of Shared-Memory Systems with ILP Processors" Proc. of 25<SUP>th</SUP> Annual Int'l Symposium on Computer Arch. 1998. pp. 380-391. *
Suzuki, et al. "Efficient Software Performance Estimation Methods for Hardware / Software Codesign". 33rd Design Automation Conference Proceedings, 1996. *
Wahbe, R. et al., "Practical Data Breakpoints: Design and Implementation," ACM SIGPLAN PLDI, pp. 1-12, Apr. 1993.
Wahl, N. et al., "A Paradigm for Distributed Debugging," ACM, pp. 235-242, Apr. 1992.
Yan, J., "Performance Tuning with AIMS-An Automated Instrumentation and Monitoring System for Multicomputers," Annual Hawaii Int'l. Conf. on System Sciences, pp. 625-633, 1994.

Cited By (103)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7702499B1 (en) * 2000-05-02 2010-04-20 Cadence Design Systems, Inc. Systems and methods for performing software performance estimations
US7325232B2 (en) * 2001-01-25 2008-01-29 Improv Systems, Inc. Compiler for multiple processor and distributed memory architectures
US20020124012A1 (en) * 2001-01-25 2002-09-05 Clifford Liem Compiler for multiple processor and distributed memory architectures
US20050022166A1 (en) * 2001-09-07 2005-01-27 Hans-Joerg Wolff Software verification method for control units and verification system
US7275184B2 (en) * 2001-09-07 2007-09-25 Robert Bosch Gmbh Software verification method for control units and verification system
US20030093776A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Memory address prediction under emulation
US7092869B2 (en) * 2001-11-14 2006-08-15 Ronald Hilton Memory address prediction under emulation
US20040128446A1 (en) * 2002-12-27 2004-07-01 Carole Dulong Value profiling with low overhead
US20040148151A1 (en) * 2003-01-24 2004-07-29 Menter Patrick W. Model simulation and calibration
US7296054B2 (en) * 2003-01-24 2007-11-13 The Mathworks, Inc. Model simulation and calibration
US7827540B2 (en) * 2003-02-13 2010-11-02 Micro-Star Int'l Co., Ltd. Method for program debugging
US20040194067A1 (en) * 2003-02-13 2004-09-30 Hsiu-Chuan Lien Method for program debugging
US8156483B2 (en) 2003-04-18 2012-04-10 International Business Machines Corporation Method and system for detecting vulnerabilities in source code
US7398517B2 (en) 2003-04-18 2008-07-08 Ounce Labs, Inc. Method and system for detecting vulnerabilities in source code
US20080263525A1 (en) * 2003-04-18 2008-10-23 Ounce Labs, Inc. Method and system for detecting vulnerabilities in source code
US20040255277A1 (en) * 2003-04-18 2004-12-16 Ounce Labs, Inc. Method and system for detecting race condition vulnerabilities in source code
US7398516B2 (en) * 2003-04-18 2008-07-08 Ounce Labs, Inc. Method and system for detecting race condition vulnerabilities in source code
US7937691B2 (en) 2003-09-30 2011-05-03 International Business Machines Corporation Method and apparatus for counting execution of specific instructions and accesses to specific data locations
US8255880B2 (en) 2003-09-30 2012-08-28 International Business Machines Corporation Counting instruction and memory location ranges
US8689190B2 (en) 2003-09-30 2014-04-01 International Business Machines Corporation Counting instruction execution and data accesses
US8042102B2 (en) 2003-10-09 2011-10-18 International Business Machines Corporation Method and system for autonomic monitoring of semaphore operations in an application
US8381037B2 (en) 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7096322B1 (en) * 2003-10-10 2006-08-22 Unisys Corporation Instruction processor write buffer emulation using embedded emulation control instructions
US20050108689A1 (en) * 2003-11-13 2005-05-19 Hooper Donald F. Instruction operand tracing for software debug
US7328429B2 (en) * 2003-11-13 2008-02-05 Intel Corporation Instruction operand tracing for software debug
US7308548B2 (en) * 2004-01-09 2007-12-11 Kabushiki Kaisha Toshiba Processor organizing apparatus and method for organize a pipeline processor
US20050166027A1 (en) * 2004-01-09 2005-07-28 Kabushiki Kaisha Toshiba Processor organizing apparatus and method for organize a pipeline processor
US20050154811A1 (en) * 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US8782664B2 (en) 2004-01-14 2014-07-15 International Business Machines Corporation Autonomic hardware assist for patching code
US20050155019A1 (en) * 2004-01-14 2005-07-14 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US7197586B2 (en) 2004-01-14 2007-03-27 International Business Machines Corporation Method and system for recording events of an interrupt using pre-interrupt handler and post-interrupt handler
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US8191049B2 (en) 2004-01-14 2012-05-29 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US8615619B2 (en) 2004-01-14 2013-12-24 International Business Machines Corporation Qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US8141099B2 (en) 2004-01-14 2012-03-20 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7987453B2 (en) 2004-03-18 2011-07-26 International Business Machines Corporation Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data
US20050210454A1 (en) * 2004-03-18 2005-09-22 International Business Machines Corporation Method and apparatus for determining computer program flows autonomically using hardware assisted thread stack tracking and cataloged symbolic data
US7296130B2 (en) 2004-03-22 2007-11-13 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7526616B2 (en) 2004-03-22 2009-04-28 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US7299319B2 (en) * 2004-03-22 2007-11-20 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US20050210450A1 (en) * 2004-03-22 2005-09-22 Dimpsey Robert T Method and appartus for hardware assistance for data access coverage
US20050210451A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for providing hardware assistance for data access coverage on dynamically allocated data
US7421684B2 (en) 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US8171457B2 (en) 2004-03-22 2012-05-01 International Business Machines Corporation Autonomic test case feedback using hardware assistance for data coverage
US7926041B2 (en) 2004-03-22 2011-04-12 International Business Machines Corporation Autonomic test case feedback using hardware assistance for code coverage
US7480899B2 (en) 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US8135915B2 (en) 2004-03-22 2012-03-13 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US20050210199A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching data
US20050210452A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for providing hardware assistance for code coverage
US20050210198A1 (en) * 2004-03-22 2005-09-22 International Business Machines Corporation Method and apparatus for prefetching data from a data structure
US8423975B1 (en) * 2004-05-05 2013-04-16 Gregory M. Scallon System performance simulator
US8185868B1 (en) 2004-12-20 2012-05-22 The Mathworks, Inc. System and method for cell-based code editing and publishing
US20060174155A1 (en) * 2005-02-03 2006-08-03 Arm Limited System, method and computer program product for testing software
US7673179B2 (en) * 2005-02-07 2010-03-02 Lsi Corporation Online testing unification system with remote test automation technology
US20060179363A1 (en) * 2005-02-07 2006-08-10 Labanca John Online testing unification system with remote test automation technology
US20060190933A1 (en) * 2005-02-22 2006-08-24 Ruey-Yuan Tzeng Method and apparatus for quickly developing an embedded operating system through utilizing an automated building framework
US20060200807A1 (en) * 2005-03-03 2006-09-07 International Business Machines Corporation Breakpoint timers
US20070079189A1 (en) * 2005-09-16 2007-04-05 Jibbe Mahmoud K Method and system for generating a global test plan and identifying test requirements in a storage system environment
US8078924B2 (en) * 2005-09-16 2011-12-13 Lsi Corporation Method and system for generating a global test plan and identifying test requirements in a storage system environment
US20090112568A1 (en) * 2005-11-04 2009-04-30 Inchron Gmbh Method for Generating a Simulation Program Which Can Be Executed On a Host Computer
US20070136726A1 (en) * 2005-12-12 2007-06-14 Freeland Gregory S Tunable processor performance benchmarking
US20070283325A1 (en) * 2006-06-02 2007-12-06 Abhishek Kumar Quality inspector tool
US7945905B2 (en) * 2006-06-02 2011-05-17 Accenture Global Services Limited Quality inspector tool
US8037468B2 (en) * 2006-08-02 2011-10-11 Sandisk Il Ltd. Methods for synchronous code retrieval from an asynchronous source
US8230198B2 (en) 2006-08-02 2012-07-24 Sandisk Il Ltd. System for synchronous code retrieval from an asynchronous source
US20080052485A1 (en) * 2006-08-02 2008-02-28 Sandisk Il Ltd. System For Synchronous Code Retrieval From An Asynchronous Source
US20080077923A1 (en) * 2006-08-02 2008-03-27 Sandisk Il Ltd. Methods For Synchronous Code Retrieval From An Asynchronous Source
US8229726B1 (en) * 2006-10-05 2012-07-24 Oracle America, Inc. System for application level analysis of hardware simulations
US20080155511A1 (en) * 2006-12-20 2008-06-26 Smart Bear, Inc. System and method for detecting events in computer code using interval values simulation
US9495278B2 (en) * 2006-12-27 2016-11-15 International Business Machines Corporation Dynamic discovery of data segments within instrumented code
US20080163180A1 (en) * 2006-12-27 2008-07-03 Victor Havin Dynamic discovery of data segments within instrumented code
US8762956B1 (en) * 2007-01-31 2014-06-24 The Mathworks, Inc. Generating a report document from code
US20080184209A1 (en) * 2007-01-31 2008-07-31 Lafrance-Linden David Profiling metrics for computer programs
US8739143B2 (en) * 2007-01-31 2014-05-27 Hewlett-Packard Development Company, L.P. Profiling metrics for computer programs
US20080196045A1 (en) * 2007-02-08 2008-08-14 Chang Belinda Y Smart progress indicator for script processing
US8943519B2 (en) * 2007-02-08 2015-01-27 International Business Machines Corporation Smart progress indicator for script processing
US20080222664A1 (en) * 2007-03-05 2008-09-11 One Microsoft Way Dynamic method selection based on declarative requirements of interaction scope
US8296731B2 (en) * 2007-03-05 2012-10-23 Microsoft Corporation Dynamic method selection based on declarative requirements of interaction scope
US20120192149A1 (en) * 2007-03-21 2012-07-26 International Business Machines Corporation Code generation for real-time event processing
US8296445B1 (en) * 2007-11-12 2012-10-23 Google Inc. Software testing harness
US7930165B2 (en) * 2008-02-07 2011-04-19 Accemic Gmbh & Co. Kg Procedure and device for emulating a programmable unit providing system integrity control
US20090204383A1 (en) * 2008-02-07 2009-08-13 Alexander Weiss Procedure and Device for Emulating a Programmable Unit Providing System Integrity Control
US8448140B2 (en) * 2008-07-02 2013-05-21 Tokyo Institute Of Technology Execution time estimation method and device
US20110113224A1 (en) * 2008-07-02 2011-05-12 Tokyo Institute Of Technology Execution time estimation method, execution time estimation program, and execution time estimation device
US8381194B2 (en) * 2009-08-19 2013-02-19 Apple Inc. Methods and apparatuses for selective code coverage
US20110047532A1 (en) * 2009-08-19 2011-02-24 Wenguang Wang Methods and apparatuses for selective code coverage
US8671395B1 (en) * 2010-09-10 2014-03-11 Cadence Design Systems, Inc. Adaptive deadend avoidance in constrained simulation
US20120124318A1 (en) * 2010-11-11 2012-05-17 International Business Machines Corporation Method and Apparatus for Optimal Cache Sizing and Configuration for Large Memory Systems
US8527704B2 (en) * 2010-11-11 2013-09-03 International Business Machines Corporation Method and apparatus for optimal cache sizing and configuration for large memory systems
US9229877B2 (en) 2010-11-11 2016-01-05 International Business Machines Corporation Method and apparatus for optimal cache sizing and configuration for large memory systems
US20120233367A1 (en) * 2011-03-09 2012-09-13 Maarten Koning Interrupt Latency Measurement
US8612660B2 (en) * 2011-03-09 2013-12-17 Wind River Systems, Inc. Interrupt latency measurement
US20140149100A1 (en) * 2011-07-27 2014-05-29 European Aeronautic Defence And Space Company Eads France Method for characterizing the sensitivity of an electronic component for a method for designing electronic equipment
US8966211B1 (en) * 2011-12-19 2015-02-24 Emc Corporation Techniques for dynamic binding of device identifiers to data storage devices
US20140019811A1 (en) * 2012-07-11 2014-01-16 International Business Machines Corporation Computer system performance markers
GB2507816A (en) * 2012-11-13 2014-05-14 Ibm Calculating timeout for remote task execution from network delays and processing duration on local application/hardware replica
US9769022B2 (en) 2012-11-13 2017-09-19 International Business Machines Corporation Timeout value adaptation
FR3005183A1 (en) * 2013-04-24 2014-10-31 Thales Sa COMPUTER ASSISTED METHOD OF SIMULATION OF A COMPUTER APPLICATION INTENDED TO OPERATE ON A CALCULATION PLATFORM
CN103513989A (en) * 2013-09-30 2014-01-15 广州华多网络科技有限公司 Method and device for obtaining key data
CN103513989B (en) * 2013-09-30 2017-01-04 广州华多网络科技有限公司 Button data acquisition methods and device
CN111917410A (en) * 2020-07-10 2020-11-10 天津七所精密机电技术有限公司 Method for correcting binding data based on time sensitive parameters of high-precision timing
CN113590149A (en) * 2021-06-29 2021-11-02 北京智芯微电子科技有限公司 Method and device for segmented loading and running of program
CN114706376A (en) * 2022-06-06 2022-07-05 南京宏泰半导体科技有限公司 Hardware control device and method based on software decoupling

Also Published As

Publication number Publication date
AU1452901A (en) 2001-06-06
WO2001035223A1 (en) 2001-05-17

Similar Documents

Publication Publication Date Title
US6973417B1 (en) Method and system for simulating execution of a target program in a simulated target system
US6751583B1 (en) Hardware and software co-simulation including simulating a target processor using binary translation
US7814378B2 (en) Verification of memory consistency and transactional memory
Hangal et al. TSOtool: A program for verifying memory systems using the memory consistency model
US8332829B2 (en) Communication scheduling within a parallel processing system
Schoeberl et al. Worst‐case execution time analysis for a Java processor
JP4619606B2 (en) Automated processor generation system and method for designing a configurable processor
US8479050B2 (en) Identifying access states for variables
US8898049B2 (en) System level power profiling of embedded applications executing on virtual multicore system-on-chip platforms
US7779393B1 (en) System and method for efficient verification of memory consistency model compliance
US20020019969A1 (en) Hardware and software co-simulation including simulating the cache of a target processor
JP2007250010A (en) Automated processor generation system for designing configurable processor and method for the same
US20100115494A1 (en) System for dynamic program profiling
JP2006505057A (en) System and method for segmenting a control data flow graph representation
JP2006505055A (en) Process for converting programs in high-level programming languages into unified executable elements of hybrid computing platforms
Herdt et al. Enhanced Virtual Prototyping
Herdt et al. Fast and accurate performance evaluation for RISC-V using virtual prototypes
Travkin et al. SPIN as a linearizability checker under weak memory models
US20200073662A1 (en) Padded vectorization with compile time known masks
US7684971B1 (en) Method and system for improving simulation performance
Lee et al. Timed compiled-code simulation of embedded software for performance analysis of SOC design
Gorshkov et al. GPU instruction hotspots detection based on binary instrumentation approach
Gerin et al. Native MPSoC co-simulation environment for software performance estimation
Schnerr et al. Systemc-based performance analysis of embedded systems
JP4801210B2 (en) System for designing expansion processors

Legal Events

Date Code Title Description
AS Assignment

Owner name: APPLIED MICROSYSTEMS CORPORATION, WASHINGTON

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:MAXWELL, SIDNEY RICHARDS, III;STEINBERGER, MICHAEL LOUIS;REEL/FRAME:010386/0010

Effective date: 19991105

AS Assignment

Owner name: METROWERKS CORPORATION, TEXAS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:APPLIED MICROSYSTEMS CORPORATION;REEL/FRAME:013609/0750

Effective date: 20021101

STCF Information on status: patent grant

Free format text: PATENTED CASE

AS Assignment

Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS

Free format text: MERGER;ASSIGNOR:METROWERKS CORPORATION;REEL/FRAME:016914/0044

Effective date: 20050928

AS Assignment

Owner name: CITIBANK, N.A. AS COLLATERAL AGENT, NEW YORK

Free format text: SECURITY AGREEMENT;ASSIGNORS:FREESCALE SEMICONDUCTOR, INC.;FREESCALE ACQUISITION CORPORATION;FREESCALE ACQUISITION HOLDINGS CORP.;AND OTHERS;REEL/FRAME:018855/0129

Effective date: 20061201

Owner name: CITIBANK, N.A. AS COLLATERAL AGENT,NEW YORK

Free format text: SECURITY AGREEMENT;ASSIGNORS:FREESCALE SEMICONDUCTOR, INC.;FREESCALE ACQUISITION CORPORATION;FREESCALE ACQUISITION HOLDINGS CORP.;AND OTHERS;REEL/FRAME:018855/0129

Effective date: 20061201

FPAY Fee payment

Year of fee payment: 4

AS Assignment

Owner name: CITIBANK, N.A., AS COLLATERAL AGENT,NEW YORK

Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:024397/0001

Effective date: 20100413

Owner name: CITIBANK, N.A., AS COLLATERAL AGENT, NEW YORK

Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:024397/0001

Effective date: 20100413

FPAY Fee payment

Year of fee payment: 8

AS Assignment

Owner name: CITIBANK, N.A., AS NOTES COLLATERAL AGENT, NEW YOR

Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:030633/0424

Effective date: 20130521

AS Assignment

Owner name: CITIBANK, N.A., AS NOTES COLLATERAL AGENT, NEW YOR

Free format text: SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:031591/0266

Effective date: 20131101

AS Assignment

Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS

Free format text: PATENT RELEASE;ASSIGNOR:CITIBANK, N.A., AS COLLATERAL AGENT;REEL/FRAME:037356/0143

Effective date: 20151207

Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS

Free format text: PATENT RELEASE;ASSIGNOR:CITIBANK, N.A., AS COLLATERAL AGENT;REEL/FRAME:037354/0225

Effective date: 20151207

Owner name: FREESCALE SEMICONDUCTOR, INC., TEXAS

Free format text: PATENT RELEASE;ASSIGNOR:CITIBANK, N.A., AS COLLATERAL AGENT;REEL/FRAME:037356/0553

Effective date: 20151207

AS Assignment

Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND

Free format text: ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:037486/0517

Effective date: 20151207

AS Assignment

Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND

Free format text: ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:037518/0292

Effective date: 20151207

AS Assignment

Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND

Free format text: SUPPLEMENT TO THE SECURITY AGREEMENT;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:039138/0001

Effective date: 20160525

AS Assignment

Owner name: NXP, B.V., F/K/A FREESCALE SEMICONDUCTOR, INC., NETHERLANDS

Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:040925/0001

Effective date: 20160912

Owner name: NXP, B.V., F/K/A FREESCALE SEMICONDUCTOR, INC., NE

Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:040925/0001

Effective date: 20160912

AS Assignment

Owner name: NXP B.V., NETHERLANDS

Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:040928/0001

Effective date: 20160622

AS Assignment

Owner name: NXP USA, INC., TEXAS

Free format text: CHANGE OF NAME;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:040652/0241

Effective date: 20161107

Owner name: NXP USA, INC., TEXAS

Free format text: MERGER;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:040652/0241

Effective date: 20161107

AS Assignment

Owner name: NXP USA, INC., TEXAS

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE NATURE OF CONVEYANCE PREVIOUSLY RECORDED AT REEL: 040652 FRAME: 0241. ASSIGNOR(S) HEREBY CONFIRMS THE MERGER AND CHANGE OF NAME;ASSIGNOR:FREESCALE SEMICONDUCTOR, INC.;REEL/FRAME:041260/0850

Effective date: 20161107

AS Assignment

Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE PATENTS 8108266 AND 8062324 AND REPLACE THEM WITH 6108266 AND 8060324 PREVIOUSLY RECORDED ON REEL 037518 FRAME 0292. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT AND ASSUMPTION OF SECURITY INTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:041703/0536

Effective date: 20151207

FPAY Fee payment

Year of fee payment: 12

AS Assignment

Owner name: SHENZHEN XINGUODU TECHNOLOGY CO., LTD., CHINA

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE TO CORRECT THE APPLICATION NO. FROM 13,883,290 TO 13,833,290 PREVIOUSLY RECORDED ON REEL 041703 FRAME 0536. ASSIGNOR(S) HEREBY CONFIRMS THE THE ASSIGNMENT AND ASSUMPTION OF SECURITYINTEREST IN PATENTS.;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:048734/0001

Effective date: 20190217

AS Assignment

Owner name: NXP B.V., NETHERLANDS

Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:050744/0097

Effective date: 20190903

AS Assignment

Owner name: MORGAN STANLEY SENIOR FUNDING, INC., MARYLAND

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVE APPLICATION11759915 AND REPLACE IT WITH APPLICATION 11759935 PREVIOUSLY RECORDED ON REEL 037486 FRAME 0517. ASSIGNOR(S) HEREBY CONFIRMS THE ASSIGNMENT AND ASSUMPTION OF SECURITYINTEREST IN PATENTS;ASSIGNOR:CITIBANK, N.A.;REEL/FRAME:053547/0421

Effective date: 20151207

AS Assignment

Owner name: NXP B.V., NETHERLANDS

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVEAPPLICATION 11759915 AND REPLACE IT WITH APPLICATION11759935 PREVIOUSLY RECORDED ON REEL 040928 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITYINTEREST;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:052915/0001

Effective date: 20160622

AS Assignment

Owner name: NXP, B.V. F/K/A FREESCALE SEMICONDUCTOR, INC., NETHERLANDS

Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE REMOVEAPPLICATION 11759915 AND REPLACE IT WITH APPLICATION11759935 PREVIOUSLY RECORDED ON REEL 040925 FRAME 0001. ASSIGNOR(S) HEREBY CONFIRMS THE RELEASE OF SECURITYINTEREST;ASSIGNOR:MORGAN STANLEY SENIOR FUNDING, INC.;REEL/FRAME:052917/0001

Effective date: 20160912