IP Library › Granted Patent US 10,671,785
Granted Patent B1
US 10,671,785 · App. 15/370,339 · Granted Jun 2, 2020

Framework for reusing cores in simulation

Inventors: Valeria Mihalache (Los Gatos, CA); Kumar Deepak (San Jose, CA); Saikat Bandyopadhyay (San Jose, CA); Sandeep S. Deshpande (Longmont, CO); Feng Cai (Longmont, CO)
Assignee: Xilinx, Inc.
G06F30/367
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,671,785
App. No.
15/370,339
Granted
Jun 2, 2020
Kind
B1
Abstract

Simulating a hardware description language design including a core and a testbench can include performing, using a processor, a first compilation of the hardware description language design by generating a compiled core unit for the core, a compiled testbench for the testbench, and synchronization data describing signals crossing a compile checkpoint boundary. A subsequent compilation of the hardware description language design can be performed by reusing the compiled core unit from the first compilation and generating a new compiled testbench for the testbench using the synchronization data.

Claims (42)

1. A method of simulating a hardware description language design and a testbench, the method comprising:

performing, using a processor, a first compilation of the hardware description language design by generating a first compiled core unit for a first core of the hardware description language design, a compiled testbench for the testbench, and synchronization data describing signals crossing a compile checkpoint boundary for simulation of the hardware description language design;

determining that an entirety of the hardware description language design does not require recompilation based on detecting that a second core has been added to the hardware description language design, that a same version of the compiler is used as was used to generate the first compiled core unit, and that a compile option of the compiler has not changed;

in response to the determining, performing, using the processor, a subsequent compilation of the hardware description language design by reusing the first compiled core unit from the first compilation, generating a second compiled core unit for the second core, and generating a new compiled testbench for the testbench using the synchronization data for further simulation of the hardware description language design;

wherein the first compiled core unit includes a core memory file, core relocation data, and core executable program code, and wherein the new compiled testbench comprises a testbench memory file, testbench relocation data, and testbench executable program code; and

wherein the performing the subsequent compilation comprises generating the new compiled testbench using the synchronization data in lieu of accessing the memory file of the first compiled core unit, and wherein the synchronization data specifies associations of aggregate nets at the compile checkpoint boundary for formal ports of top modules of the first compiled core unit with aggregate elements of the compiled testbench.

2. The method of claim 1 , wherein the relocation data of the first compiled core unit includes relocation instructions specifying memory offset shifts for the first compiled core unit and data copy operations between connected memory locations; and

wherein the relocation instructions are generated based on a first set of rules corresponding to data items inside the core memory file or at the compile checkpoint boundary, and a second set of rules corresponding to data items inside the compiled testbench.

3. The method of claim 2 , wherein the relocation instructions are executed at runtime and include variables such that the relocation instructions are reusable using updated values assigned to the variables for further compilations, wherein runtime simulates the hardware description language design through execution of the testbench executable program code and the core executable program code.

4. The method of claim 3 , wherein the relocation instructions are generated using the synchronization data.

5. The method of claim 3 , further comprising:

at runtime of a hardware description language simulation following the subsequent compilation, executing the relocation instructions to update memory locations populated from the core memory file and the testbench memory file prior to executing the core executable program code or the testbench executable program code.

6. The method of claim 1 , wherein files of the first compiled core unit are separate from files of the compiled testbench.

7. The method of claim 1 , further comprising:

updating the synchronization data to specify further data corresponding to additional ports and hierarchical references for the compile checkpoint boundary corresponding to the second core.

8. The method of claim 1 , wherein signals that cross the compile checkpoint boundary are represented using aggregate nets.

9. A system, for simulation of a hardware description language design and a testbench, the system comprising:

a processor configured to initiate operations including:

performing a first compilation of the hardware description language design by generating a first compiled core unit for a first core of the hardware description language design, a compiled testbench for the testbench, and synchronization data describing signals crossing a compile checkpoint boundary for simulation of the hardware description language design;

determining that an entirety of the hardware description language design does not require recompilation based on detecting that a second core has been added to the hardware description language design, that a same version of the compiler is used as was used to generate the first compiled core unit, and that a compile option of the compiler has not changed;

in response to the determining, performing a subsequent compilation of the hardware description language design by reusing the first compiled core unit from the first compilation, generating a second compiled core unit for the second core, and generating a new compiled testbench for the testbench using the synchronization data for further simulation of the hardware description language design;

wherein the first compiled core unit includes a core memory file, core relocation data, and core executable program code, and wherein the new compiled testbench comprises a testbench memory file, testbench relocation data, and testbench executable program code; and

wherein the performing the subsequent compilation comprises generating the new compiled testbench using the synchronization data in lieu of accessing the memory file of the first compiled core unit, and wherein the synchronization data specifies associations of aggregate nets at the compile checkpoint boundary for formal ports of top modules of the first compiled core unit with aggregate elements of the compiled testbench.

10. The system of claim 9 , wherein the relocation data of the first compiled core unit includes relocation instructions specifying memory offset shifts for the first compiled core unit and data copy operations between connected memory locations; and

wherein the relocation instructions are generated based on a first set of rules corresponding to data items inside the core memory file or at the compile checkpoint boundary, and a second set of rules corresponding to data items inside the compiled testbench.

11. The system of claim 10 , wherein the relocation instructions are executed at runtime and include variables such that the relocation instructions are reusable using updated values assigned to the variables for further compilations, wherein runtime simulates the hardware description language design through execution of the testbench executable program code and the core executable program code.

12. The system of claim 11 , wherein the relocation instructions are generated using the synchronization data.

13. The system of claim 11 , wherein the processor is further configured to initiate operations including:

at runtime of a hardware description language simulation following the subsequent compilation, executing the relocation instructions to update memory locations populated from the core memory file and the testbench memory file prior to executing the core executable program code or the testbench executable program code.

14. The system of claim 9 , wherein files of the first compiled core unit are separate from files of the compiled testbench.

15. The system of claim 9 , further comprising:

updating the synchronization data to specify further data corresponding to additional ports and hierarchical references for the compile checkpoint boundary corresponding to the second core.

16. The system of claim 9 , wherein signals that cross the compile checkpoint boundary are represented using aggregate nets.

17. The system of claim 9 , wherein signals referenced in module instantiations within the testbench use a shared memory location at runtime.

18. The system of claim 9 , wherein signals referenced in module instantiations within a core use a shared memory location at runtime.

19. The system of claim 9 , wherein the subsequent compilation is performed by reading the synchronization data and using the synchronization data to model connections between the testbench and the core.

20. A computer program product comprising a computer readable storage medium having program code stored thereon for simulating a hardware description language design and a testbench, the program code executable by a processor to cause the processor to perform a method comprising:

performing a first compilation of the hardware description language design by generating a first compiled core unit for a first core of the hardware description language design, a compiled testbench for the testbench, and synchronization data describing signals crossing a compile checkpoint boundary for simulation of the hardware description language design;

determining that an entirety of the hardware description language design does not require recompilation based on detecting that a second core has been added to the hardware description language design, that a same version of the compiler is used as was used to generate the first compiled core unit, and that a compile option of the compiler has not changed;

in response to the determining, performing a subsequent compilation of the hardware description language design by reusing the first compiled core unit from the first compilation, generating a second compiled core unit for the second core, and generating a new compiled testbench for the testbench using the synchronization data for further simulation of the hardware description language design;

wherein the first compiled core unit includes a core memory file, core relocation data, and core executable program code, and wherein the new compiled testbench comprises a testbench memory file, testbench relocation data, and testbench executable program code; and

wherein the performing the subsequent compilation comprises generating the new compiled testbench using the synchronization data in lieu of accessing the memory file of the first compiled core unit, and wherein the synchronization data specifies associations of aggregate nets at the compile checkpoint boundary for formal ports of top modules of the first compiled core unit with aggregate elements of the compiled testbench.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 6, 2016
From: MIHALACHE, VALERIA; DEEPAK, KUMAR; BANDYOPADHYAY, SAIKAT; DESHPANDE, SANDEEP S.; CAI, FENG
To: XILINX, INC.
Reel/Frame 040536/0014 →
Cited By (2)
US 12,748,900 US 12,748,903