source: sources/src/sc_vcd_trace.cc @ 27

Last change on this file since 27 was 27, checked in by buchmann, 15 years ago

SystemCASS now uses autoconf/automake to build the API. Regression tests still
use the old Makefiles.
(thanks to Nicolas Pouillon)

The library directory no longer is "lib-arch-system". The directory now is "lib-linux". Everyone needs to pay attention about SYSTEMCASS environment variable.

Changes:

  • system header includes
  • Add includes to config.h (generated by autoconf/automake)
  • test:
    • linux preprocessor macro instead of _WIN32
    • CONFIG_DEBUG instead of DEBUG

Removes:

  • Makefile
  • guess_endianness.cc
  • guess_os.sh
  • assert.h (we now use standard assert.h)
  • Options.def
File size: 4.1 KB
Line 
1/*------------------------------------------------------------\
2|                                                             |
3| Tool    :                  systemcass                       |
4|                                                             |
5| File    :                 sc_vcd_trace.cc                   |
6|                                                             |
7| Author  :                 Kingbo Paul-Jerome                |
8|                           Buchmann Richard                  |
9|                                                             |
10| Date    :                   09_07_2004                      |
11|                                                             |
12\------------------------------------------------------------*/
13
14/*
15 * This file is part of the Disydent Project
16 * Copyright (C) Laboratoire LIP6 - Département ASIM
17 * Universite Pierre et Marie Curie
18 *
19 * Home page          : http://www-asim.lip6.fr/disydent
20 * E-mail             : mailto:richard.buchmann@lip6.fr
21 *
22 * This library is free software; you  can redistribute it and/or modify it
23 * under the terms  of the GNU Library General Public  License as published
24 * by the Free Software Foundation; either version 2 of the License, or (at
25 * your option) any later version.
26 *
27 * Disydent is distributed  in the hope  that it  will be
28 * useful, but WITHOUT  ANY WARRANTY; without even the  implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
30 * Public License for more details.
31 *
32 * You should have received a copy  of the GNU General Public License along
33 * with the GNU C Library; see the  file COPYING. If not, write to the Free
34 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
35 */
36
37
38#include "sc_trace.h"
39#include "sc_vcd_trace.h"
40#include "sc_ver.h"
41#include "internal.h"
42
43#include <cassert>
44#include <ctime>
45#include <string>
46
47#ifdef HAVE_CONFIG_H
48#include "config.h"
49#endif
50
51//-----------------------------------------*/
52
53using namespace std;
54
55namespace sc_core {
56
57//-----------------------------------------*/
58
59sc_trace_file*
60sc_create_vcd_trace_file(const char * name)
61{
62  if (notrace)
63    return NULL;
64  assert(name != NULL);
65        string filename;
66        filename = name;
67        filename += ".vcd";
68        //char varToday[1024];system(varToday=echo `date`);
69       
70        //création d'1 instance de la structure Sc_trace_file:
71        sc_trace_file *traceFic=new sc_trace_file();
72        traceFic->flag = VCD_FORMAT;   
73       
74        trace_file_list.push_back(traceFic);
75       
76        //en-tête du fichier VCD:
77        char entete[]="$date\n\t%s\n$end\n\n$version\n\t%s\n$end\n\n$timescale\n\t1 ps\n$end\n\n$scope module SystemC $end\n";
78       
79        //ouverture du fichier nommé "*name":
80        traceFic->pfic=fopen(filename.c_str(),"w+");//on a un pointeur sur le fichier
81        if((traceFic->pfic)==NULL)
82        {
83                /* fopen renvoie NULL si erreur */
84                fprintf(stderr,"\n\terreur ouverture outVcd\n");
85                exit(15);
86        }
87
88  char date[128];       
89  time_t timep = time (NULL);
90  const struct tm *tm = localtime (&timep);
91  strftime (date, 128, "%A %d %B %y %Z - %R:%S -", tm); 
92
93        //écriture de l'en-tête du format VCD:
94        if ((fprintf(traceFic->pfic,entete, date, sc_version ()))==0)
95                {
96                        /* fprintf renvoie 0 si erreur */
97                        cerr << "\n\terreur ecriture de l'entete \n";
98                        exit(2);
99                }
100       
101        //on retourne un pointeur sur la structure traceFile
102        //dont un des éléments pointe sur notre fichier VCD:
103        return traceFic;
104}
105
106
107//*************************************************************************
108
109void
110sc_close_vcd_trace_file( sc_trace_file* traceFic )
111{       
112  if (notrace)
113    return;
114  if (!traceFic)
115  {
116    cerr << "Warning : Unable to close vcd trace file.\n";
117    return;
118  }
119
120  if (cpt >= trace_start)
121  {
122    trace (*traceFic,false);
123    cpt++;
124    trace (*traceFic,true);
125  }
126
127        //fermeture fichier VCD
128        if (fclose(traceFic->pfic))
129        {
130                /* fclose renvoie 0 si OK */
131                perror("\n\tclosing VCD file.");
132                exit(4);
133        }
134
135        //libération de l'instance de la structure en mémoire:
136        delete traceFic;
137
138        vector<sc_trace_file*>::iterator i;
139        for (i = trace_file_list.begin (); i != trace_file_list.end(); ++i)
140                if (*i == traceFic) {
141                        trace_file_list.erase(i);
142                        break;
143                }
144
145}
146
147} // end of sc_core namespace
148
Note: See TracBrowser for help on using the repository browser.