112027Sjungma@eit.uni-kl.de/***************************************************************************** 212027Sjungma@eit.uni-kl.de 312027Sjungma@eit.uni-kl.de Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 412027Sjungma@eit.uni-kl.de more contributor license agreements. See the NOTICE file distributed 512027Sjungma@eit.uni-kl.de with this work for additional information regarding copyright ownership. 612027Sjungma@eit.uni-kl.de Accellera licenses this file to you under the Apache License, Version 2.0 712027Sjungma@eit.uni-kl.de (the "License"); you may not use this file except in compliance with the 812027Sjungma@eit.uni-kl.de License. You may obtain a copy of the License at 912027Sjungma@eit.uni-kl.de 1012027Sjungma@eit.uni-kl.de http://www.apache.org/licenses/LICENSE-2.0 1112027Sjungma@eit.uni-kl.de 1212027Sjungma@eit.uni-kl.de Unless required by applicable law or agreed to in writing, software 1312027Sjungma@eit.uni-kl.de distributed under the License is distributed on an "AS IS" BASIS, 1412027Sjungma@eit.uni-kl.de WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1512027Sjungma@eit.uni-kl.de implied. See the License for the specific language governing 1612027Sjungma@eit.uni-kl.de permissions and limitations under the License. 1712027Sjungma@eit.uni-kl.de 1812027Sjungma@eit.uni-kl.de *****************************************************************************/ 1912027Sjungma@eit.uni-kl.de 2012027Sjungma@eit.uni-kl.de/***************************************************************************** 2112027Sjungma@eit.uni-kl.de 2212027Sjungma@eit.uni-kl.de sc_trace.cpp - Functions for tracing signals and variables. 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Abhijit Ghosh, Synopsys, Inc. 2512027Sjungma@eit.uni-kl.de 2612027Sjungma@eit.uni-kl.de *****************************************************************************/ 2712027Sjungma@eit.uni-kl.de 2812027Sjungma@eit.uni-kl.de/***************************************************************************** 2912027Sjungma@eit.uni-kl.de 3012027Sjungma@eit.uni-kl.de MODIFICATION LOG - modifiers, enter your name, affiliation, date and 3112027Sjungma@eit.uni-kl.de changes you are making here. 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.de Name, Affiliation, Date: 3412027Sjungma@eit.uni-kl.de Description of Modification: 3512027Sjungma@eit.uni-kl.de 3612027Sjungma@eit.uni-kl.de *****************************************************************************/ 3712027Sjungma@eit.uni-kl.de 3812027Sjungma@eit.uni-kl.de/***************************************************************************** 3912027Sjungma@eit.uni-kl.de 4012027Sjungma@eit.uni-kl.de Acknowledgement: The tracing mechanism is based on the tracing 4112027Sjungma@eit.uni-kl.de mechanism developed at Infineon (formerly Siemens HL). Though this 4212027Sjungma@eit.uni-kl.de code is somewhat different, the basics are identical to what was 4312027Sjungma@eit.uni-kl.de originally contributed by Infineon. The contribution of Infineon 4412027Sjungma@eit.uni-kl.de in the development of this tracing technology is hereby 4512027Sjungma@eit.uni-kl.de acknowledged. 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.de *****************************************************************************/ 4812027Sjungma@eit.uni-kl.de 4912027Sjungma@eit.uni-kl.de#include <stdarg.h> 5012027Sjungma@eit.uni-kl.de#include <stdio.h> 5112027Sjungma@eit.uni-kl.de 5212027Sjungma@eit.uni-kl.de#include "sysc/tracing/sc_trace.h" 5312027Sjungma@eit.uni-kl.de#include "sysc/tracing/sc_tracing_ids.h" 5412027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_signal_ifs.h" 5512027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report.h" 5612027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_utils_ids.h" 5712027Sjungma@eit.uni-kl.de 5812027Sjungma@eit.uni-kl.denamespace sc_core { 5912027Sjungma@eit.uni-kl.de 6012027Sjungma@eit.uni-kl.de// Trace file common functions. 6112027Sjungma@eit.uni-kl.de 6212027Sjungma@eit.uni-kl.desc_trace_file::sc_trace_file() 6312027Sjungma@eit.uni-kl.de{ 6412027Sjungma@eit.uni-kl.de /* Intentionally blank */ 6512027Sjungma@eit.uni-kl.de} 6612027Sjungma@eit.uni-kl.de 6712027Sjungma@eit.uni-kl.devoid tprintf(sc_trace_file* tf, const char* format, ...) 6812027Sjungma@eit.uni-kl.de{ 6912027Sjungma@eit.uni-kl.de static char buffer[4096]; 7012027Sjungma@eit.uni-kl.de va_list ap; 7112027Sjungma@eit.uni-kl.de va_start(ap, format); 7212027Sjungma@eit.uni-kl.de (void) vsprintf(buffer, format, ap); 7312027Sjungma@eit.uni-kl.de va_end(ap); 7412027Sjungma@eit.uni-kl.de if (tf) tf->write_comment(buffer); 7512027Sjungma@eit.uni-kl.de} 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.devoid sc_trace_file::space(int) 7812027Sjungma@eit.uni-kl.de{ 7912027Sjungma@eit.uni-kl.de /* Intentionally blank */ 8012027Sjungma@eit.uni-kl.de} 8112027Sjungma@eit.uni-kl.de 8212027Sjungma@eit.uni-kl.devoid sc_trace_file::delta_cycles(bool) 8312027Sjungma@eit.uni-kl.de{ 8412027Sjungma@eit.uni-kl.de /* Intentionally blank */ 8512027Sjungma@eit.uni-kl.de} 8612027Sjungma@eit.uni-kl.de 8712027Sjungma@eit.uni-kl.de 8812027Sjungma@eit.uni-kl.devoid 8912027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, 9012027Sjungma@eit.uni-kl.de const sc_signal_in_if<char>& object, 9112027Sjungma@eit.uni-kl.de const std::string& name, 9212027Sjungma@eit.uni-kl.de int width ) 9312027Sjungma@eit.uni-kl.de{ 9412027Sjungma@eit.uni-kl.de if( tf ) { 9512027Sjungma@eit.uni-kl.de tf->trace( object.read(), name, width ); 9612027Sjungma@eit.uni-kl.de } 9712027Sjungma@eit.uni-kl.de} 9812027Sjungma@eit.uni-kl.de 9912027Sjungma@eit.uni-kl.devoid 10012027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, 10112027Sjungma@eit.uni-kl.de const sc_signal_in_if<short>& object, 10212027Sjungma@eit.uni-kl.de const std::string& name, 10312027Sjungma@eit.uni-kl.de int width ) 10412027Sjungma@eit.uni-kl.de{ 10512027Sjungma@eit.uni-kl.de if( tf ) { 10612027Sjungma@eit.uni-kl.de tf->trace( object.read(), name, width ); 10712027Sjungma@eit.uni-kl.de } 10812027Sjungma@eit.uni-kl.de} 10912027Sjungma@eit.uni-kl.de 11012027Sjungma@eit.uni-kl.devoid 11112027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, 11212027Sjungma@eit.uni-kl.de const sc_signal_in_if<int>& object, 11312027Sjungma@eit.uni-kl.de const std::string& name, 11412027Sjungma@eit.uni-kl.de int width ) 11512027Sjungma@eit.uni-kl.de{ 11612027Sjungma@eit.uni-kl.de if( tf ) { 11712027Sjungma@eit.uni-kl.de tf->trace( object.read(), name, width ); 11812027Sjungma@eit.uni-kl.de } 11912027Sjungma@eit.uni-kl.de} 12012027Sjungma@eit.uni-kl.de 12112027Sjungma@eit.uni-kl.devoid 12212027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, 12312027Sjungma@eit.uni-kl.de const sc_signal_in_if<long>& object, 12412027Sjungma@eit.uni-kl.de const std::string& name, 12512027Sjungma@eit.uni-kl.de int width ) 12612027Sjungma@eit.uni-kl.de{ 12712027Sjungma@eit.uni-kl.de if( tf ) { 12812027Sjungma@eit.uni-kl.de tf->trace( object.read(), name, width ); 12912027Sjungma@eit.uni-kl.de } 13012027Sjungma@eit.uni-kl.de} 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.de 13312027Sjungma@eit.uni-kl.devoid 13412027Sjungma@eit.uni-kl.desc_trace(sc_trace_file* /* not used */, 13512027Sjungma@eit.uni-kl.de const void* /* not used */, 13612027Sjungma@eit.uni-kl.de const std::string& name) 13712027Sjungma@eit.uni-kl.de{ 13812027Sjungma@eit.uni-kl.de SC_REPORT_WARNING( SC_ID_TRACING_OBJECT_IGNORED_, name.c_str() ); 13912027Sjungma@eit.uni-kl.de} 14012027Sjungma@eit.uni-kl.de 14112027Sjungma@eit.uni-kl.de 14212027Sjungma@eit.uni-kl.de 14312027Sjungma@eit.uni-kl.devoid double_to_special_int64(double in, unsigned* high, unsigned* low) 14412027Sjungma@eit.uni-kl.de{ 14512027Sjungma@eit.uni-kl.de double invar = in; 14612027Sjungma@eit.uni-kl.de if(invar > 5e17) invar = 5e17; // Saturation limit 14712027Sjungma@eit.uni-kl.de if(invar < 0.0) invar = 0.0; 14812027Sjungma@eit.uni-kl.de invar += .5; 14912027Sjungma@eit.uni-kl.de *high = (unsigned)(invar / 1e9); 15012027Sjungma@eit.uni-kl.de double rest = invar - 1e9 * (*high); 15112027Sjungma@eit.uni-kl.de if(rest < 0) *low = 0; 15212027Sjungma@eit.uni-kl.de else *low = (unsigned)rest; 15312027Sjungma@eit.uni-kl.de} 15412027Sjungma@eit.uni-kl.de 15512027Sjungma@eit.uni-kl.de 15612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 15712027Sjungma@eit.uni-kl.de 15812027Sjungma@eit.uni-kl.de#define DEFN_TRACE_FUNC_REF_A(tp) \ 15912027Sjungma@eit.uni-kl.devoid \ 16012027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, const tp& object, const std::string& name ) \ 16112027Sjungma@eit.uni-kl.de{ \ 16212027Sjungma@eit.uni-kl.de if( tf ) { \ 16312027Sjungma@eit.uni-kl.de tf->trace( object, name ); \ 16412027Sjungma@eit.uni-kl.de } \ 16512027Sjungma@eit.uni-kl.de} 16612027Sjungma@eit.uni-kl.de 16712027Sjungma@eit.uni-kl.de#define DEFN_TRACE_FUNC_PTR_A(tp) \ 16812027Sjungma@eit.uni-kl.devoid \ 16912027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, const tp* object, const std::string& name ) \ 17012027Sjungma@eit.uni-kl.de{ \ 17112027Sjungma@eit.uni-kl.de if( tf ) { \ 17212027Sjungma@eit.uni-kl.de tf->trace( *object, name ); \ 17312027Sjungma@eit.uni-kl.de } \ 17412027Sjungma@eit.uni-kl.de} 17512027Sjungma@eit.uni-kl.de 17612027Sjungma@eit.uni-kl.de#define DEFN_TRACE_FUNC_A(tp) \ 17712027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_REF_A(tp) \ 17812027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_PTR_A(tp) 17912027Sjungma@eit.uni-kl.de 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_A( sc_dt::sc_bit ) 18212027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_A( sc_dt::sc_logic ) 18312027Sjungma@eit.uni-kl.de 18412027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_A( sc_dt::sc_int_base ) 18512027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_A( sc_dt::sc_uint_base ) 18612027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_A( sc_dt::sc_signed ) 18712027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_A( sc_dt::sc_unsigned ) 18812027Sjungma@eit.uni-kl.de 18912027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_REF_A( sc_dt::sc_bv_base ) 19012027Sjungma@eit.uni-kl.deDEFN_TRACE_FUNC_REF_A( sc_dt::sc_lv_base ) 19112027Sjungma@eit.uni-kl.de 19212027Sjungma@eit.uni-kl.de 19312027Sjungma@eit.uni-kl.de#undef DEFN_TRACE_FUNC_REF_A 19412027Sjungma@eit.uni-kl.de#undef DEFN_TRACE_FUNC_PTR_A 19512027Sjungma@eit.uni-kl.de#undef DEFN_TRACE_FUNC_A 19612027Sjungma@eit.uni-kl.de 19712027Sjungma@eit.uni-kl.de 19812027Sjungma@eit.uni-kl.devoid 19912027Sjungma@eit.uni-kl.desc_trace( sc_trace_file* tf, 20012027Sjungma@eit.uni-kl.de const unsigned int& object, 20112027Sjungma@eit.uni-kl.de const std::string& name, 20212027Sjungma@eit.uni-kl.de const char** enum_literals ) 20312027Sjungma@eit.uni-kl.de{ 20412027Sjungma@eit.uni-kl.de static bool warn_sc_trace_literals=true; 20512027Sjungma@eit.uni-kl.de if ( warn_sc_trace_literals ) 20612027Sjungma@eit.uni-kl.de { 20712027Sjungma@eit.uni-kl.de warn_sc_trace_literals=false; 20812027Sjungma@eit.uni-kl.de SC_REPORT_INFO(SC_ID_IEEE_1666_DEPRECATION_, 20912027Sjungma@eit.uni-kl.de "tracing of enumerated literals is deprecated" ); 21012027Sjungma@eit.uni-kl.de } 21112027Sjungma@eit.uni-kl.de 21212027Sjungma@eit.uni-kl.de if( tf ) tf->trace( object, name, enum_literals ); 21312027Sjungma@eit.uni-kl.de} 21412027Sjungma@eit.uni-kl.de 21512027Sjungma@eit.uni-kl.de} // namespace sc_core 21612027Sjungma@eit.uni-kl.de 21712027Sjungma@eit.uni-kl.de// Taf! 218