![]() |
![]() |
![]() |
![]() |
mti_Malloc()
Allocates simulator-managed memory.
Syntax
memptr = mti_Malloc( size )Returns
Name Type Description memptr void * A pointer to the allocated memoryArguments
Name Type Description size unsigned long The size in bytes of the memory to be allocatedDescription
mti_Malloc() allocates a block of memory of the specified size and returns a pointer to it. The memory is initialized to zero. Memory allocated by mti_Malloc() is automatically checkpointed. On restore, this memory is guaranteed to be restored to the same location with the values it contained at the time of the checkpoint. This memory can be freed only by mti_Free().
mti_Malloc() automatically checks for a NULL pointer. In the case of an allocation error, mti_Malloc() issues the following error message and aborts the simulation:
****** Memory allocation failure. ***** Please check your system for available memory and swap spaceRelated functions
Example
FLI code
#include <stdlib.h> #include <mti.h> static char * instance_info; void saveCallback( void * param ) { char * inst_info = (char *)param; mti_PrintFormatted( "Saving instance info pointer to \"%s\"\n", inst_info ); mti_SaveBlock( &inst_info, sizeof(inst_info) ); } void restoreCallback( void * param ) { mti_RestoreBlock( &instance_info ); mti_PrintFormatted( "Restored instance info \"%s\"\n", instance_info ); } void cleanupCallback( void * param ) { mti_PrintMessage( "Cleaning up...\n" ); /* NOTE: Memory allocated by mti_Malloc() will be freed by vsim. */ } void initForeign( mtiRegionIdT region, /* The ID of the region in which this */ /* foreign architecture is instantiated. */ char *param, /* The last part of the string in the */ /* foreign attribute. */ mtiInterfaceListT *generics, /* A list of generics for the foreign model.*/ mtiInterfaceListT *ports /* A list of ports for the foreign model. */ ) { if ( mti_IsRestore() ) { mti_PrintMessage( "Restore in progress ...\n" ); } else { instance_info = mti_Malloc( strlen(param) + 1 ); strcpy( instance_info, param ); } mti_AddSaveCB( saveCallback, instance_info ); mti_AddRestoreCB( restoreCallback, instance_info ); mti_AddQuitCB( cleanupCallback, instance_info ); mti_AddRestartCB( cleanupCallback, instance_info ); }HDL code
entity for_model is end for_model; architecture a of for_model is attribute foreign of a : architecture is "initForeign for_model.sl; my_for_model"; begin end a; entity top is end top; architecture a of top is signal s1 : bit := '0'; component for_model is end component; for all : for_model use entity work.for_model(a); begin i1 : for_model; s1 <= not s1 after 5 ns; end a;Simulation output
% vsim -c top Reading .../modeltech/sunos5/../tcl/vsim/pref.tcl # 5.4b # vsim -c top # Loading .../modeltech/sunos5/../std.standard # Loading work.top(a) # Loading work.for_model(a) # Loading ./for_model.sl VSIM 1> run 35 VSIM 2> checkpoint cpfile # Saving instance info pointer to "my_for_model" VSIM 3> run 10 VSIM 4> restore cpfile # Loading checkpoint/restore data from file "cpfile" # Checkpoint created Wed Jul 5 15:24:18 2000 # Restoring state at time 35 ns, iteration 1 # Restore in progress ... # Restored instance info "my_for_model" VSIM 5> run 20 VSIM 6> quit # Cleaning up...
![]() Model Technology Inc. Voice: (503) 641-1340 Fax: (503)526-5410 http://www.model.com sales@model.com |
![]() |
![]() |
![]() |
![]() |