The present invention relates to integrated circuit design, and more particularly to integrating a custom prototyping board with one or more FPGA devices to form an emulation system.
System-on-chip (SoC) design verification requires both software and hardware to work together on a prototype board. A custom-built prototype board having integrated software and hardware provides a simple way to verify a design but due its lack of controllability and observability, it has a limited capability in isolating root causes of design defects.
What is needed is a design verification methodology capable of operating with a custom-made prototype board to verify a circuit design in a co-simulation or co-emulation mode.
One embodiment in the present invention is to provide a method of integrating a custom prototyping board to make an emulation system for emulating a circuit design, including, in part: receiving a first custom prototyping board including at least one first FPGA and at least one connector, the board being described by a set of board description files; providing at least one adaptor board to connect to the first custom prototyping board through the at least one connector; partitioning the circuit design into the at least one first FPGA according to the set of board descriptions files for emulating the circuit design, wherein each verification module is generated according to the associated partitioned circuit design and the set of board descriptions files; and running emulation cycles comprising transmitting a plurality of input signal values from the controller, wherein each verification module receives a corresponding portion of the plurality of input signal values from the controller respectively, and the controller receives a plurality of output signal values transmitted from the verification modules.
In one embodiment, the input signal values transmitted from the controller is generated by a software component running on a workstation in a co-simulation mode, and the controller transmits a plurality of output signal values back to the software component by combining output signal values transmitted from each verification module into the plurality of output signal values.
In another embodiment, the input signal values transmitted from the controller are fetched from a memory device on the at least one adaptor board; and the controller saves a plurality of output signal values in the memory device by combining output signal values transmitted from each verification module into the plurality of output signal values.
The foregoing aspects and many of the accompanying advantages of this invention will become more readily appreciated as the same becomes better understood by reference to the following detailed description, when taken in conjunction with the accompanying drawings, wherein:
During co-simulation, primary input signals are communicated to the user design within the FPGA devices. Then, a clock edge is communicated to the prototype board, which may update the states of certain register elements and memory elements in the FPGA devices. After that, primary output signals are communicated to the testbench running on the host workstation. These steps are repeated for each active clock edge until the co-simulation is completed.
The board description files are referenced when verification modules are created at the setup time. In
Moreover, advantageously since the controller is separate from the custom prototype board competition with the user design for valuable FPGA resources on the prototype board is eliminated. Furthermore, the controller may play different roles in different operating modes, such as prototyping, co-simulation, and the like.
During co-simulation, clock edges that can cause state changes for some register elements or memory elements in the user design are communicated from the testbench via the controller to FPGA devices on the custom prototype board. Although there are multiple FPGA devices on the custom prototype board, the controller may only deliver the clocks to one FPGA chip. The receiving FPGA chip may buffer the received clock signals, and then distribute them evenly to all FPGA devices via on-board clock tree circuitries.
The separated user design then optionally transforms clock signals to address hold time anomalies in the user design at 84. At 85, the user design is partitioned in accordance with the board description files so that each partitioned portion of the user design can fit in a specific FPGA on the custom prototype board. At 86, verification modules specific to each partitioned portion of user design are generated and configured in accordance with the board description files 8A. Verification modules may receive and communicate primary input signals from the controller to the associated portions of the user design, and may also collect and communicate primary output signals from the associated portions of the user design to the controller. The verification modules route primary input and output signals to appropriate connector pins in accordance with the board description files.
Place and route (P&R) is then performed on the partitioned portions of the user design along with generated verification modules at 87. Place and route may be performed in accordance with the constraints 8A generated at partition time and verification module generation time. At 88, the result of P&R is a downloadable image which can be used to configure an FPGA device on the custom prototype board. The configured images are ready to download prior to co-simulation runs.
As shown in
When running in the vector mode, several options for handling the primary output signal values 2403 exist. The first option is to discard the signal values and rely on signal probing for debugging purposes or the behavior of target boards to determine if the emulation is successful, as described further below. The second option is to store the primary output signal values 2403 in memory 2412 disposed on the interface card using controller 2410. The stored values may be uploaded to the host workstation at the end of vector mode emulation. The third option is to generate a “signature” from the collected primary output signal values, and report the signature to the host workstation at the end of co-simulation. The waveform signature generation may be done in the controller or in the associated verification modules.
Co-simulation speed can be limited by the “ping-pong” nature of exchanging primary input and output values between user design in FPGA devices and testbench running on the host workstation on each and every clock edge. It typically runs in thousands of cycles per second or less. In contrast, vector mode can run at, for example, millions of cycles per second. At such speeds, it is possible to use the prototyping board to drive target boards or systems close to real time, thus enabling the user to rely on the behavior of the target boards/systems to determine if the design is working correctly. Hence, the primary output values may be discarded during the vector mode emulation.
At millions of cycles per second running in vector mode, the user can also use the same probing technique used in prototyping systems for debugging purposes. To accomplish this, only a portion of memory 2412 on the interface card is used to store input vectors. The rest is reserved for storing probed signal values at runtime. The trigger mechanism supported by controller 2410 for prototyping systems is equally applicable in vector mode. The saved probe signal values can be uploaded to the host workstation at the end of emulation for further analysis.
Except for a few differences, vector mode setup is similar to the co-simulation mode setup. One such difference is that there is no testbench that needs to run on the host workstation side. The user can start with the setup flow for co-simulation, run co-simulation, save input vectors and clock edges cycle-by-cycle in a file, and then turn to vector mode using the saved input vectors and clock edges.
SCEMI, which stands for Standard Co-Emulation Modeling Interface, is proposed by the Accellera standards organization. SCEMI 2.0 was released in 2007.
SCEMI is a convention for message passing between software components running on the host workstation and hardware transactors that wrap the user design on the emulation hardware. It raises the communication from signal level to transaction level between the host workstation and the emulator hardware, thereby improving the co-simulation speed.
The probing scheme, described above for vector mode, which utilizes the memory and the controller on the interface card may be used in the SCEMI mode.
As in case for co-simulation, during the setup for SCEMI based co-emulation, custom board description files are consulted, and the verification modules are generated accordingly. The infrastructure implemented in the controller and the generated verification modules enable the message exchange scheme at SCEMI runtime.
Transactors and associated verification modules work in tandem. When a transactor wants to send or receive a message, it may want to suspend clocks in coordination with the associated verification module. Since clocks in SCEMI are typically generated on a FPGA and evenly distribute to all FPGA devices via the on-board clock trees, when the verification module needs to suspend clocks on behalf of a transactor, it may need to propagate the request to the FPGA responsible for clock generation. During setup, the board description files are consulted so that appropriate signal lines are designated for this purpose.
In conventional systems, the speed of any extension components or target boards that a user may plug in is limited by the emulation system vendor's board design. Such a speed limitation is especially severe when running co-simulation or co-emulation on closed systems, such as the one shown in
In
Although
A method of debugging a customer prototype board using emulation may be performed as described above with reference to
In one embodiment, the input signal values transmitted from the controller are generated by a software component running on a workstation in a co-simulation mode. In one embodiment, the controller transmits a multitude of output signal values, generated by combining the output signal values transmitted from each verification module, back to the software component.
In another embodiment, the input signal values transmitted from the controller are fetched from a memory device on at least one adaptor board. The controller saves the output signal values transmitted by each verification module in the memory device.
In one embodiment, at least one transactor is integrated with at least one verification module and the corresponding portioned circuit design for co-emulating the circuit design. In one embodiment the transactor and a software component running on a workstation exchange messages. In one embodiment at least one first portion of the partitioned circuit design is clocked by at a first clock which is suspended during message passing (transfer) between the transactor and the software component, and reactivated after the message passing is completed.
In another embodiment, a target component is coupled to the partitioned circuit design. The target component, the transactor and a portion of the partitioned circuit design are clocked by a second clock which is not suspended during message passing between the transactor and the software component running on the workstation.
The above embodiments of the present invention are illustrative and not limitative. Other additions, subtractions or modifications are obvious in view of the present disclosure and are intended to fall within the scope of the appended claims.
The present application is a continuation-in-part of U.S. application Ser. No. 13/597,997, entitled “Method and Apparatus for Versatile Controllability and Observability in Prototype System”, filed on Aug. 29, 2012, which claims benefit under 35 USC 119(e) of U.S. Provisional Application No. 61/561,045 filed on Nov. 17, 2011. U.S. application Ser. No. 13/597,997 is a continuation-in-part of application Ser. No. 13/025,809, entitled “Method and Apparatus for Versatile Controllability and Observability in Prototype System”, filed on Feb. 11, 2011, now U.S. Pat. No. 8,281,280, which claims benefit under 35 USC 119(e) of U.S. Provisional Application No. 61/304,328 filed on Feb. 12, 2010, the contents of all of which are incorporated herein by reference in their entirety. The present application also claims benefit under 35 USC 119(e) of U.S. provisional Application No. 61/582,194, filed on Dec. 30, 2011, the content of which is incorporated herein by reference in its entirety.
Number | Date | Country | |
---|---|---|---|
61561045 | Nov 2011 | US | |
61304328 | Feb 2010 | US | |
61582194 | Dec 2011 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 13597997 | Aug 2012 | US |
Child | 13730543 | US | |
Parent | 13025809 | Feb 2011 | US |
Child | 13597997 | US |