Table of Contents Previous page Next page Index

ModelSim

Model Technology Inc.


mti_Interp()

Gets the Tcl_Interp pointer used in the simulator.

Syntax

interp = mti_Interp() 

Returns

Name
Type
Description
interp
Tcl_Interp *
The Tcl interp pointer used in the simulator

Arguments

None

Description

mti_Interp() returns the Tcl interp pointer used in the simulator. There is only one Tcl interp pointer in the simulator and it exists and does not change throughout the execution life of the simulator. This pointer is needed in most Tcl calls and can also be used in conjunction with mti_Cmd() to obtain the command results.

Related functions

None

Example

FLI code

#include <tcl.h>
#include <mti.h>

typedef enum {
  STD_LOGIC_U,      /* 'U' */
  STD_LOGIC_X,      /* 'X' */
  STD_LOGIC_0,      /* '0' */
  STD_LOGIC_1,      /* '1' */
  STD_LOGIC_Z,      /* 'Z' */
  STD_LOGIC_W,      /* 'W' */
  STD_LOGIC_L,      /* 'L' */
  STD_LOGIC_H,      /* 'H' */
  STD_LOGIC_D       /* '-' */
} StdLogicT;

void monitorSignal( void * param )
{
  char         buffer[256];
  char *       region_name;
  char *       signal_name;
  int          status;
  mtiSignalIdT sigid = (mtiSignalIdT)param;
  Tcl_Interp * interp;

  switch ( mti_GetSignalValue( sigid ) ) {
    case STD_LOGIC_X:
    case STD_LOGIC_W:
      signal_name = mti_GetSignalName( sigid );
      region_name = mti_GetRegionFullName( mti_GetSignalRegion( sigid ));
      mti_PrintFormatted( "Time [%d,%d] delta %d: Signal %s/%s is UNKNOWN\n",
                         mti_NowUpper(), mti_Now(), mti_Delta(),
                         region_name, signal_name );
      sprintf( buffer, "drivers %s/%s", region_name, signal_name );
      interp = mti_Interp();
      status = mti_Cmd( buffer );
      if ( status != TCL_OK ) {
        mti_PrintMessage( "ERROR while executing drivers command.\n" );
      } else {
        mti_PrintFormatted( "The drivers of %s/%s are:\n%s\n",
                           region_name, signal_name, interp->result );
      }
      Tcl_ResetResult( interp );
      mti_VsimFree( region_name );
      break;
    default:
      break;
  }
}

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.   */
)
{
  mtiProcessIdT procid;
  mtiSignalIdT  sigid;

  sigid  = mti_FindSignal( "/top/s1" );
  procid = mti_CreateProcess( "SignalMonitor", monitorSignal, sigid );
  mti_Sensitize( procid, sigid, MTI_EVENT );
} 

HDL code

library ieee;
use ieee.std_logic_1164.all;

entity top is
end top;

architecture a of top is

  signal s1 : std_logic := '0';

begin

  p1 : process
  begin
    c1 : case s1 is
      when 'U' => s1 <= 'X' after 5 ns;
      when 'X' => s1 <= '0' after 5 ns;
      when '0' => s1 <= '1' after 5 ns;
      when '1' => s1 <= 'Z' after 5 ns;
      when 'Z' => s1 <= 'W' after 5 ns;
      when 'W' => s1 <= 'L' after 5 ns;
      when 'L' => s1 <= 'H' after 5 ns;
      when 'H' => s1 <= '-' after 5 ns;
      when '-' => s1 <= 'U' after 5 ns;
    end case c1;
    wait for 5 ns;
  end process;

end a; 

Simulation output

% vsim -c top -foreign "initForeign for_model.sl"
Reading .../modeltech/sunos5/../tcl/vsim/pref.tcl 

# 5.4b

# vsim -foreign {initForeign for_model.sl} -c top 
# Loading .../modeltech/sunos5/../std.standard
# Loading .../modeltech/sunos5/../ieee.std_logic_1164(body)
# Loading work.top(a)
# Loading ./for_model.sl
VSIM 1> run 60
# Time [0,15] delta 0: Signal /top/s1 is UNKNOWN
# The drivers of /top/s1 are:
# Drivers for /top/s1:
#  W : Signal /top/s1
#    W : Driver /top/p1
# 
# Time [0,40] delta 0: Signal /top/s1 is UNKNOWN
# The drivers of /top/s1 are:
# Drivers for /top/s1:
#  X : Signal /top/s1
#    X : Driver /top/p1
# 
# Time [0,60] delta 0: Signal /top/s1 is UNKNOWN
# The drivers of /top/s1 are:
# Drivers for /top/s1:
#  W : Signal /top/s1
#    W : Driver /top/p1
# 
VSIM 2> quit 


Model Technology Inc.
Voice: (503) 641-1340
Fax: (503)526-5410
http://www.model.com
sales@model.com
TOC PREV NEXT INDEX

ModelSim