OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [orpsocv2/] [bench/] [sysc/] [src/] [TraceSC.cpp] - Diff between revs 44 and 49

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 44 Rev 49
Line 25... Line 25...
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
 
 
// $Id: TraceSC.cpp 302 2009-02-13 17:22:07Z jeremy $
// $Id: TraceSC.cpp 302 2009-02-13 17:22:07Z jeremy $
 
 
#include "TraceSC.h"
#include "TraceSC.h"
 
#include <systemc.h>
 
 
using namespace std;
using namespace std;
 
 
 
#define DEBUG_TRACESC 1
 
 
SC_HAS_PROCESS( TraceSC );
SC_HAS_PROCESS( TraceSC );
 
 
//! Constructor for the trace module
//! Constructor for the trace module
 
 
//! @param name           Name of this module, passed to the parent
//! @param name           Name of this module, passed to the parent
Line 50... Line 53...
  // Setup the name of the VCD dump file
  // Setup the name of the VCD dump file
  string dumpNameDefault("vlt-dump.vcd");
  string dumpNameDefault("vlt-dump.vcd");
  string testNameString;
  string testNameString;
  string vcdDumpFile;
  string vcdDumpFile;
 
 
  // Search through the command line parameters for the "-vcd" option
  // Search through the command line parameters for VCD dump options
 
  dump_start_delay = 0;
 
  dump_stop_set = 0;
 
  int time_val;
  int cmdline_name_found=0;
  int cmdline_name_found=0;
  if (argc > 1)
  if (argc > 1)
  {
  {
    for(int i=1; i<argc; i++)
    for(int i=1; i<argc; i++)
    {
    {
      if (strcmp(argv[i], "-vcd")==0)
      if ((strcmp(argv[i], "-vcd")==0) ||
 
          (strcmp(argv[i], "--vcd")==0))
        {
        {
          testNameString = (argv[i+1]);
          testNameString = (argv[i+1]);
          vcdDumpFile = testNameString;
          vcdDumpFile = testNameString;
          cmdline_name_found=1;
          cmdline_name_found=1;
 
         }
 
      else if ( (strcmp(argv[i], "-vcdstart")==0) ||
 
           (strcmp(argv[i], "--vcdstart")==0) )
 
        {
 
          time_val = atoi(argv[i+1]);
 
          sc_time dump_start_time(time_val,SC_NS);
 
          dump_start = dump_start_time;
 
          if (DEBUG_TRACESC) cout << "TraceSC(): Dump start time set at " << dump_start.to_string() << endl;
 
          dump_start_delay = 1;
 
          break;
 
         }
 
      else if ( (strcmp(argv[i], "-vcdstop")==0) ||
 
           (strcmp(argv[i], "--vcdstop")==0) )
 
        {
 
          time_val = atoi(argv[i+1]);
 
          sc_time dump_stop_time(time_val,SC_NS);
 
          dump_stop = dump_stop_time;
 
          if (DEBUG_TRACESC) cout << "TraceSC(): Dump stop time set at " << dump_stop.to_string() << endl;
 
          dump_stop_set = 1;
          break;
          break;
         }
         }
    }
    }
  }
  }
 
 
  if(cmdline_name_found==0) // otherwise use our default VCD dump file name
  if(cmdline_name_found==0) // otherwise use our default VCD dump file name
    vcdDumpFile = dumpNameDefault;
    vcdDumpFile = dumpNameDefault;
 
 
  Verilated::traceEverOn (true);
  Verilated::traceEverOn (true);
 
 
  cout << "Enabling VCD trace" << endl;
  cout << "* Enabling VCD trace";
 
 
  printf("VCD dumpfile: %s\n", vcdDumpFile.c_str());
  if (dump_start_delay)
 
    cout << ", on at time " << dump_start.to_string();
 
  if (dump_stop_set)
 
    cout << ", off at time " << dump_stop.to_string();
 
 
 
  cout << endl;
 
 
 
 
 
  printf("* VCD dumpfile: %s\n", vcdDumpFile.c_str());
 
 
  // Establish a new trace with its correct time resolution, and trace to
  // Establish a new trace with its correct time resolution, and trace to
  // great depth.
  // great depth.
  spTraceFile = new SpTraceVcdCFile ();
  spTraceFile = new SpTraceVcdCFile ();
  setSpTimeResolution (sc_get_time_resolution ());
  setSpTimeResolution (sc_get_time_resolution ());
  traceTarget->trace (spTraceFile, 99);
  traceTarget->trace (spTraceFile, 99);
  spTraceFile->open (vcdDumpFile.c_str());
  spTraceFile->open (vcdDumpFile.c_str());
 
 
 
  if (dump_start_delay == 1)
 
    dumping_now = 0; // We'll wait for the time to dump
 
  else
 
    dumping_now = 1; // Begin with dumping turned on
 
 
 
 
  // Method to drive the dump on each clock edge
  // Method to drive the dump on each clock edge
  SC_METHOD (driveTrace);
  //SC_METHOD (driveTrace);
  sensitive << clk;
  //sensitive << clk;
 
 
#endif
#endif
 
 
}       // TraceSC ()
}       // TraceSC ()
 
 
Line 104... Line 144...
#endif
#endif
 
 
}       // ~TraceSC ()
}       // ~TraceSC ()
 
 
 
 
//! Method to drive the trace. We're called on ever clock edge, and also at
//! Method to drive the trace. We're called on every clock edge, and also at
//! initialization (to get initial values into the dump).
//! initialization (to get initial values into the dump).
void
void
TraceSC::driveTrace()
TraceSC::driveTrace()
{
{
#if VM_TRACE
#if VM_TRACE
 
 
 
  if (DEBUG_TRACESC) cout << "TraceSC(): " << endl;
 
  if (dumping_now == 0)
 
    {
 
      // Check the time, see if we should enable dumping
 
      if (sc_time_stamp() >=  dump_start)
 
        {
 
          // Give a message
 
          cout << "* VCD tracing turned on at time " << dump_start.to_string() << endl;
 
          dumping_now = 1;
 
        }
 
    }
 
 
 
  if (dumping_now == 1)
  spTraceFile->dump (sc_time_stamp().to_double());
  spTraceFile->dump (sc_time_stamp().to_double());
 
 
 
 
 
  // Should we turn off tracing?
 
  if ((dumping_now == 1) && (dump_stop_set == 1))
 
    {
 
      if (sc_time_stamp() >=  dump_stop)
 
        {
 
          // Give a message
 
          cout << "* VCD tracing turned off at time " << dump_stop.to_string() << endl;
 
          dumping_now = 0; // Turn off the dump
 
        }
 
    }
 
 
#endif
#endif
 
 
}       // driveTrace()
}       // driveTrace()
 
 
 
 
Line 133... Line 200...
  int         val;                      // Integral value of the precision
  int         val;                      // Integral value of the precision
  const char *units;                    // Units as text
  const char *units;                    // Units as text
 
 
  if (secs < 1.0e-15)
  if (secs < 1.0e-15)
    {
    {
      cerr << "VCD time resolution " << secs << " too small: ignored" << endl;
      cerr << "* VCD time resolution " << secs << " too small: ignored" << endl;
      return;
      return;
    }
    }
  else if (secs < 1.0e-12)
  else if (secs < 1.0e-12)
    {
    {
      val   = secs / 1.0e-15;
      val   = secs / 1.0e-15;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.