9.5 Running the Wizard
4. Start the wizard with the VHPI/PLI Wizard command from the Tools menu.
5. Start the wizard with the VHPI/PLI Wizard command from the Tools menu.
6.
7. Type dump_hierarchy in the VHDL procedure/function/ architecture name field. Set the remaining options as shown in the figure above.
8. Press Modify list, then Generate, and close the window by clicking OK.
9.6 Reviewing Created Files
7. Review the list of files created by the wizard. The list is printed to the Console window.
# Design: Created file C:\My_Designs\Samples_62\Datapath\src\VHPI\vhpiuser_aldec.cpp
# Design: Created file C:\My_Designs\Samples_62\Datapath\src\VHPI\dump_hierarchy_vhpi.h
# Design: Created file C:\My_Designs\Samples_62\Datapath\src\VHPI\dump_hierarchy_vhpi.cpp
# Design: Created file C:\My_Designs62\Samples_62\Datapath\src\VHPI\dump_hierarchy_vhpi.vhd
The files are also visible in the VHPI folder in the Design Manager.
Also a DLM C/C++ configuration file is automatically added for building the application.
9.7 Editing C Code
8. The dump_hierarchy_vhpi.cpp file contains an empty body of the dump_hierarchy_proc function.
The following slides show complete code for the modified dump_hierarchy_vhpi function and for an auxiliary traverse_hierarchy routine.
Before editing the functions add the following #include directive to the beginning of the dump_hierarchy_vhpi.cpp file:
#include "stdio.h"
9.8 dump_hierarchy_vhpi function
Replace the // put your code here comment in the dump_hierarchy_vhpi.cpp file with following code:
vhpiHandleT rootInstHdl = NULL; // handler to rootInst component
vhpiHandleT iteratorSigHdl = NULL; // iterator for SigDecls
vhpiHandleT Hdl = NULL; // handler
vhpiHandleT archBodyHdl = NULL; // handler to archBody
vhpiHandleT entityDeclHdl = NULL; // handler to entityDecl
int numObjs = 0; // initialize objects counter
vhpi_printf("\nUsing VHPI application as Foreign Architecture to count declared signals...");
//1.
if ( rootInstHdl = vhpi_handle(vhpiRootInst, NULL) ){
//2
// signal declarations
if ( iteratorSigHdl= vhpi_iterator(vhpiSigDecls, rootInstHdl) )
//3.
while ( Hdl = vhpi_scan(iteratorSigHdl) ){
// handler points to object of type vhpiSignalDeclK (signal)
vhpi_printf("found signal: %s ", // signal name
vhpi_get_str(vhpiNameP, Hdl));
numObjs++;
}
// CONTINUED ON NEXT SLIDE
9.8. dump_hierarchy_vhpi (continued)
(function defined in the dump_hierarchy_vhpi.cpp file continued)
traverse_hierarchy(rootInstHdl, &numObjs);
// fetching some information about analyzed design:
// name of architecture of top level design
if ( archBodyHdl = vhpi_handle(vhpiDesignUnit, rootInstHdl) ){
// name of entity of top level design
if ( entityDeclHdl = vhpi_handle(vhpiPrimaryUnit, archBodyHdl) ){
vhpi_printf("===============================================");
vhpi_printf("SUMMARY:");
vhpi_printf("Analyzed
entire design '%s' contains %d signal(s)",
vhpi_get_str(vhpiNameP, entityDeclHdl),
numObjs);
}
}
}
vhpi_printf("\nEnd of Your VHPI application.......");
9.9 traverse_hierarchy function
Above the dump_hierarchy_proc function type the following code:
PLI_VOID traverse_hierarchy(vhpiHandleT ScopeHdl, int *numObjs){
vhpiHandleT iteratorSigHdl = NULL; // iterator for SigDecls
vhpiHandleT iteratorRegHdl = NULL; // iterator for InternalRegions
vhpiHandleT Hdl = NULL; // handler
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.