| /***************************************************************************** | |
| Licensed to Accellera Systems Initiative Inc. (Accellera) under one or | |
| more contributor license agreements. See the NOTICE file distributed | |
| with this work for additional information regarding copyright ownership. | |
| Accellera licenses this file to you under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with the | |
| License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |
| implied. See the License for the specific language governing | |
| permissions and limitations under the License. | |
| *****************************************************************************/ | |
| /***************************************************************************** | |
| sc_trace_file_base.h - Shared internal tracing implementation | |
| Original Author: Philipp A. Hartmann, OFFIS, 2013-11-15 | |
| CHANGE LOG AT END OF FILE | |
| *****************************************************************************/ | |
| /***************************************************************************** | |
| Acknowledgement: The tracing mechanism is based on the tracing | |
| mechanism developed at Infineon (formerly Siemens HL). Though this | |
| code is somewhat different, and significantly enhanced, the basics | |
| are identical to what was originally contributed by Infineon. The | |
| contribution of Infineon in the development of this tracing | |
| technology is hereby acknowledged. | |
| *****************************************************************************/ | |
| #ifndef SC_TRACE_FILE_BASE_H_INCLUDED_ | |
| #define SC_TRACE_FILE_BASE_H_INCLUDED_ | |
| #include <cstdio> | |
| // use callback-based tracing implementation | |
| #if defined( SC_ENABLE_SIMULATION_PHASE_CALLBACKS_TRACING ) | |
| # define SC_TRACING_PHASE_CALLBACKS_ 1 | |
| # include "sysc/kernel/sc_object.h" | |
| #else | |
| # define SC_TRACING_PHASE_CALLBACKS_ 0 | |
| #endif | |
| #include "sysc/tracing/sc_trace.h" | |
| #include "sysc/tracing/sc_tracing_ids.h" | |
| namespace sc_core { | |
| // shared implementation of trace files | |
| class sc_trace_file_base | |
| : public sc_trace_file | |
| #if SC_TRACING_PHASE_CALLBACKS_ | |
| , private sc_object // to be used as callback target | |
| #endif | |
| { | |
| public: | |
| const char* filename() const | |
| { return filename_.c_str(); } | |
| bool delta_cycles() const | |
| { return trace_delta_cycles_; } | |
| // Also trace transitions between delta cycles if flag is true. | |
| virtual void delta_cycles(bool flag); | |
| // set a user-define timescale unit for the trace file | |
| virtual void set_time_unit( double v, sc_time_unit tu); | |
| protected: | |
| sc_trace_file_base( const char* name, const char* extension ); | |
| // returns true, iff initialization has been performed | |
| bool initialize(); | |
| // ensure that file has been opened (needed for early write_comment()) | |
| void open_fp(); | |
| // perform format specific initialization | |
| virtual void do_initialize() = 0; | |
| // returns true, if new trace objects can still be added | |
| // (i.e. trace file is not yet initialized) | |
| bool add_trace_check( const std::string& name ) const; | |
| // Flush results and close file. | |
| virtual ~sc_trace_file_base(); | |
| #if SC_TRACING_PHASE_CALLBACKS_ | |
| private: | |
| virtual void simulation_phase_callback(); | |
| #endif // SC_TRACING_PHASE_CALLBACKS_ | |
| protected: | |
| FILE* fp; // pointer to the trace file | |
| double timescale_unit; // in seconds | |
| bool timescale_set_by_user; // = true means set by user | |
| private: | |
| std::string filename_; // name of the file (for reporting) | |
| bool initialized_; // tracing started? | |
| bool trace_delta_cycles_; // also trace delta transitions? | |
| static bool tracing_initialized_; // shared setup of tracing implementation | |
| private: // disabled | |
| sc_trace_file_base( const sc_trace_file_base& ) /* = delete */; | |
| sc_trace_file_base& operator=( const sc_trace_file_base& ) /* = delete */; | |
| }; // class sc_trace_file_base | |
| // ----------------------------------------------------------------------- | |
| // Convert double time to 64-bit integer | |
| void double_to_special_int64( double in, unsigned* high, unsigned* low ); | |
| // obtain formatted time string | |
| std::string localtime_string(); | |
| } // namespace sc_core | |
| /***************************************************************************** | |
| MODIFICATION LOG - modifiers, enter your name, affiliation, date and | |
| changes you are making here. | |
| Name, Affiliation, Date: | |
| Description of Modification: | |
| *****************************************************************************/ | |
| #endif // SC_TRACE_FILE_BASE_H_INCLUDED_ | |
| // Taf! |