sc_fxdefs.h revision 12027
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_fxdefs.h - 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Martin Janssen, 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// $Log: sc_fxdefs.h,v $ 3912027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:04 acg 4012027Sjungma@eit.uni-kl.de// SystemC 2.3 4112027Sjungma@eit.uni-kl.de// 4212027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:53:57 acg 4312027Sjungma@eit.uni-kl.de// Andy Goodrich: added $Log command so that CVS comments are reproduced in 4412027Sjungma@eit.uni-kl.de// the source. 4512027Sjungma@eit.uni-kl.de// 4612027Sjungma@eit.uni-kl.de 4712027Sjungma@eit.uni-kl.de#ifndef SC_FXDEFS_H 4812027Sjungma@eit.uni-kl.de#define SC_FXDEFS_H 4912027Sjungma@eit.uni-kl.de 5012027Sjungma@eit.uni-kl.de 5112027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_machine.h" 5212027Sjungma@eit.uni-kl.de#include "sysc/datatypes/fx/sc_fx_ids.h" 5312027Sjungma@eit.uni-kl.de#include "sysc/datatypes/int/sc_nbutils.h" 5412027Sjungma@eit.uni-kl.de 5512027Sjungma@eit.uni-kl.de 5612027Sjungma@eit.uni-kl.denamespace sc_dt 5712027Sjungma@eit.uni-kl.de{ 5812027Sjungma@eit.uni-kl.de 5912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 6012027Sjungma@eit.uni-kl.de// ENUM : sc_enc 6112027Sjungma@eit.uni-kl.de// 6212027Sjungma@eit.uni-kl.de// Enumeration of sign encodings. 6312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 6412027Sjungma@eit.uni-kl.de 6512027Sjungma@eit.uni-kl.deenum sc_enc 6612027Sjungma@eit.uni-kl.de{ 6712027Sjungma@eit.uni-kl.de SC_TC_, // two's complement 6812027Sjungma@eit.uni-kl.de SC_US_ // unsigned 6912027Sjungma@eit.uni-kl.de}; 7012027Sjungma@eit.uni-kl.de 7112027Sjungma@eit.uni-kl.de 7212027Sjungma@eit.uni-kl.deconst std::string to_string( sc_enc ); 7312027Sjungma@eit.uni-kl.de 7412027Sjungma@eit.uni-kl.de 7512027Sjungma@eit.uni-kl.deinline 7612027Sjungma@eit.uni-kl.de::std::ostream& 7712027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, sc_enc enc ) 7812027Sjungma@eit.uni-kl.de{ 7912027Sjungma@eit.uni-kl.de return os << to_string( enc ); 8012027Sjungma@eit.uni-kl.de} 8112027Sjungma@eit.uni-kl.de 8212027Sjungma@eit.uni-kl.de 8312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 8412027Sjungma@eit.uni-kl.de// ENUM : sc_q_mode 8512027Sjungma@eit.uni-kl.de// 8612027Sjungma@eit.uni-kl.de// Enumeration of quantization modes. 8712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 8812027Sjungma@eit.uni-kl.de 8912027Sjungma@eit.uni-kl.deenum sc_q_mode 9012027Sjungma@eit.uni-kl.de{ 9112027Sjungma@eit.uni-kl.de SC_RND, // rounding to plus infinity 9212027Sjungma@eit.uni-kl.de SC_RND_ZERO, // rounding to zero 9312027Sjungma@eit.uni-kl.de SC_RND_MIN_INF, // rounding to minus infinity 9412027Sjungma@eit.uni-kl.de SC_RND_INF, // rounding to infinity 9512027Sjungma@eit.uni-kl.de SC_RND_CONV, // convergent rounding 9612027Sjungma@eit.uni-kl.de SC_TRN, // truncation 9712027Sjungma@eit.uni-kl.de SC_TRN_ZERO // truncation to zero 9812027Sjungma@eit.uni-kl.de}; 9912027Sjungma@eit.uni-kl.de 10012027Sjungma@eit.uni-kl.de 10112027Sjungma@eit.uni-kl.deconst std::string to_string( sc_q_mode ); 10212027Sjungma@eit.uni-kl.de 10312027Sjungma@eit.uni-kl.de 10412027Sjungma@eit.uni-kl.deinline 10512027Sjungma@eit.uni-kl.de::std::ostream& 10612027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, sc_q_mode q_mode ) 10712027Sjungma@eit.uni-kl.de{ 10812027Sjungma@eit.uni-kl.de return os << to_string( q_mode ); 10912027Sjungma@eit.uni-kl.de} 11012027Sjungma@eit.uni-kl.de 11112027Sjungma@eit.uni-kl.de 11212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 11312027Sjungma@eit.uni-kl.de// ENUM : sc_o_mode 11412027Sjungma@eit.uni-kl.de// 11512027Sjungma@eit.uni-kl.de// Enumeration of overflow modes. 11612027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 11712027Sjungma@eit.uni-kl.de 11812027Sjungma@eit.uni-kl.deenum sc_o_mode 11912027Sjungma@eit.uni-kl.de{ 12012027Sjungma@eit.uni-kl.de SC_SAT, // saturation 12112027Sjungma@eit.uni-kl.de SC_SAT_ZERO, // saturation to zero 12212027Sjungma@eit.uni-kl.de SC_SAT_SYM, // symmetrical saturation 12312027Sjungma@eit.uni-kl.de SC_WRAP, // wrap-around (*) 12412027Sjungma@eit.uni-kl.de SC_WRAP_SM // sign magnitude wrap-around (*) 12512027Sjungma@eit.uni-kl.de}; 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de// (*) uses the number of saturated bits argument, see the documentation. 12812027Sjungma@eit.uni-kl.de 12912027Sjungma@eit.uni-kl.de 13012027Sjungma@eit.uni-kl.deconst std::string to_string( sc_o_mode ); 13112027Sjungma@eit.uni-kl.de 13212027Sjungma@eit.uni-kl.de 13312027Sjungma@eit.uni-kl.deinline 13412027Sjungma@eit.uni-kl.de::std::ostream& 13512027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, sc_o_mode o_mode ) 13612027Sjungma@eit.uni-kl.de{ 13712027Sjungma@eit.uni-kl.de return os << to_string( o_mode ); 13812027Sjungma@eit.uni-kl.de} 13912027Sjungma@eit.uni-kl.de 14012027Sjungma@eit.uni-kl.de 14112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 14212027Sjungma@eit.uni-kl.de// ENUM : sc_switch 14312027Sjungma@eit.uni-kl.de// 14412027Sjungma@eit.uni-kl.de// Enumeration of switch states. 14512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 14612027Sjungma@eit.uni-kl.de 14712027Sjungma@eit.uni-kl.deenum sc_switch 14812027Sjungma@eit.uni-kl.de{ 14912027Sjungma@eit.uni-kl.de SC_OFF, 15012027Sjungma@eit.uni-kl.de SC_ON 15112027Sjungma@eit.uni-kl.de}; 15212027Sjungma@eit.uni-kl.de 15312027Sjungma@eit.uni-kl.de 15412027Sjungma@eit.uni-kl.deconst std::string to_string( sc_switch ); 15512027Sjungma@eit.uni-kl.de 15612027Sjungma@eit.uni-kl.de 15712027Sjungma@eit.uni-kl.deinline 15812027Sjungma@eit.uni-kl.de::std::ostream& 15912027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, sc_switch sw ) 16012027Sjungma@eit.uni-kl.de{ 16112027Sjungma@eit.uni-kl.de return os << to_string( sw ); 16212027Sjungma@eit.uni-kl.de} 16312027Sjungma@eit.uni-kl.de 16412027Sjungma@eit.uni-kl.de 16512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 16612027Sjungma@eit.uni-kl.de// ENUM : sc_fmt 16712027Sjungma@eit.uni-kl.de// 16812027Sjungma@eit.uni-kl.de// Enumeration of formats for character string conversion. 16912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 17012027Sjungma@eit.uni-kl.de 17112027Sjungma@eit.uni-kl.deenum sc_fmt 17212027Sjungma@eit.uni-kl.de{ 17312027Sjungma@eit.uni-kl.de SC_F, // fixed 17412027Sjungma@eit.uni-kl.de SC_E // scientific 17512027Sjungma@eit.uni-kl.de}; 17612027Sjungma@eit.uni-kl.de 17712027Sjungma@eit.uni-kl.de 17812027Sjungma@eit.uni-kl.deconst std::string to_string( sc_fmt ); 17912027Sjungma@eit.uni-kl.de 18012027Sjungma@eit.uni-kl.de 18112027Sjungma@eit.uni-kl.deinline 18212027Sjungma@eit.uni-kl.de::std::ostream& 18312027Sjungma@eit.uni-kl.deoperator << ( ::std::ostream& os, sc_fmt fmt ) 18412027Sjungma@eit.uni-kl.de{ 18512027Sjungma@eit.uni-kl.de return os << to_string( fmt ); 18612027Sjungma@eit.uni-kl.de} 18712027Sjungma@eit.uni-kl.de 18812027Sjungma@eit.uni-kl.de 18912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 19012027Sjungma@eit.uni-kl.de// Built-in & default fixed-point type parameter values. 19112027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 19212027Sjungma@eit.uni-kl.de 19312027Sjungma@eit.uni-kl.deconst int SC_BUILTIN_WL_ = 32; 19412027Sjungma@eit.uni-kl.deconst int SC_BUILTIN_IWL_ = 32; 19512027Sjungma@eit.uni-kl.deconst sc_q_mode SC_BUILTIN_Q_MODE_ = SC_TRN; 19612027Sjungma@eit.uni-kl.deconst sc_o_mode SC_BUILTIN_O_MODE_ = SC_WRAP; 19712027Sjungma@eit.uni-kl.deconst int SC_BUILTIN_N_BITS_ = 0; 19812027Sjungma@eit.uni-kl.de 19912027Sjungma@eit.uni-kl.de 20012027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_WL_ = SC_BUILTIN_WL_; 20112027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_IWL_ = SC_BUILTIN_IWL_; 20212027Sjungma@eit.uni-kl.deconst sc_q_mode SC_DEFAULT_Q_MODE_ = SC_BUILTIN_Q_MODE_; 20312027Sjungma@eit.uni-kl.deconst sc_o_mode SC_DEFAULT_O_MODE_ = SC_BUILTIN_O_MODE_; 20412027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_N_BITS_ = SC_BUILTIN_N_BITS_; 20512027Sjungma@eit.uni-kl.de 20612027Sjungma@eit.uni-kl.de 20712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 20812027Sjungma@eit.uni-kl.de// Built-in & default fixed-point cast switch parameter values. 20912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 21012027Sjungma@eit.uni-kl.de 21112027Sjungma@eit.uni-kl.deconst sc_switch SC_BUILTIN_CAST_SWITCH_ = SC_ON; 21212027Sjungma@eit.uni-kl.de 21312027Sjungma@eit.uni-kl.de 21412027Sjungma@eit.uni-kl.deconst sc_switch SC_DEFAULT_CAST_SWITCH_ = SC_BUILTIN_CAST_SWITCH_; 21512027Sjungma@eit.uni-kl.de 21612027Sjungma@eit.uni-kl.de 21712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 21812027Sjungma@eit.uni-kl.de// Built-in & default fixed-point value type parameter values. 21912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 22012027Sjungma@eit.uni-kl.de 22112027Sjungma@eit.uni-kl.deconst int SC_BUILTIN_DIV_WL_ = 64; 22212027Sjungma@eit.uni-kl.deconst int SC_BUILTIN_CTE_WL_ = 64; 22312027Sjungma@eit.uni-kl.deconst int SC_BUILTIN_MAX_WL_ = 1024; 22412027Sjungma@eit.uni-kl.de 22512027Sjungma@eit.uni-kl.de 22612027Sjungma@eit.uni-kl.de#if defined( SC_FXDIV_WL ) && ( SC_FXDIV_WL > 0 ) 22712027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_DIV_WL_ = SC_FXDIV_WL; 22812027Sjungma@eit.uni-kl.de#else 22912027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_DIV_WL_ = SC_BUILTIN_DIV_WL_; 23012027Sjungma@eit.uni-kl.de#endif 23112027Sjungma@eit.uni-kl.de 23212027Sjungma@eit.uni-kl.de#if defined( SC_FXCTE_WL ) && ( SC_FXCTE_WL > 0 ) 23312027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_CTE_WL_ = SC_FXCTE_WL; 23412027Sjungma@eit.uni-kl.de#else 23512027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_CTE_WL_ = SC_BUILTIN_CTE_WL_; 23612027Sjungma@eit.uni-kl.de#endif 23712027Sjungma@eit.uni-kl.de 23812027Sjungma@eit.uni-kl.de#if defined( SC_FXMAX_WL ) && ( SC_FXMAX_WL > 0 || SC_FXMAX_WL == -1 ) 23912027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_MAX_WL_ = SC_FXMAX_WL; 24012027Sjungma@eit.uni-kl.de#else 24112027Sjungma@eit.uni-kl.deconst int SC_DEFAULT_MAX_WL_ = SC_BUILTIN_MAX_WL_; 24212027Sjungma@eit.uni-kl.de#endif 24312027Sjungma@eit.uni-kl.de 24412027Sjungma@eit.uni-kl.de 24512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 24612027Sjungma@eit.uni-kl.de// Dedicated error reporting and checking. 24712027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 24812027Sjungma@eit.uni-kl.de 24912027Sjungma@eit.uni-kl.de#ifdef DEBUG_SYSTEMC 25012027Sjungma@eit.uni-kl.de#define SC_ASSERT_(cnd,msg) \ 25112027Sjungma@eit.uni-kl.de{ \ 25212027Sjungma@eit.uni-kl.de if( ! (cnd) ) \ 25312027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( sc_core::SC_ID_INTERNAL_ERROR_, msg ); \ 25412027Sjungma@eit.uni-kl.de} 25512027Sjungma@eit.uni-kl.de#else 25612027Sjungma@eit.uni-kl.de#define SC_ASSERT_(cnd,msg) 25712027Sjungma@eit.uni-kl.de#endif 25812027Sjungma@eit.uni-kl.de 25912027Sjungma@eit.uni-kl.de#define SC_ERROR_IF_(cnd,id) \ 26012027Sjungma@eit.uni-kl.de{ \ 26112027Sjungma@eit.uni-kl.de if( cnd ) \ 26212027Sjungma@eit.uni-kl.de SC_REPORT_ERROR( id, 0 ); \ 26312027Sjungma@eit.uni-kl.de} 26412027Sjungma@eit.uni-kl.de 26512027Sjungma@eit.uni-kl.de 26612027Sjungma@eit.uni-kl.de#define SC_CHECK_WL_(wl) \ 26712027Sjungma@eit.uni-kl.de SC_ERROR_IF_( (wl) <= 0, sc_core::SC_ID_INVALID_WL_ ) 26812027Sjungma@eit.uni-kl.de 26912027Sjungma@eit.uni-kl.de#define SC_CHECK_N_BITS_(n_bits) \ 27012027Sjungma@eit.uni-kl.de SC_ERROR_IF_( (n_bits) < 0, sc_core::SC_ID_INVALID_N_BITS_ ) 27112027Sjungma@eit.uni-kl.de 27212027Sjungma@eit.uni-kl.de#define SC_CHECK_DIV_WL_(div_wl) \ 27312027Sjungma@eit.uni-kl.de SC_ERROR_IF_( (div_wl) <= 0, sc_core::SC_ID_INVALID_DIV_WL_ ) 27412027Sjungma@eit.uni-kl.de 27512027Sjungma@eit.uni-kl.de#define SC_CHECK_CTE_WL_(cte_wl) \ 27612027Sjungma@eit.uni-kl.de SC_ERROR_IF_( (cte_wl) <= 0, sc_core::SC_ID_INVALID_CTE_WL_ ) 27712027Sjungma@eit.uni-kl.de 27812027Sjungma@eit.uni-kl.de#define SC_CHECK_MAX_WL_(max_wl) \ 27912027Sjungma@eit.uni-kl.de SC_ERROR_IF_( (max_wl) <= 0 && (max_wl) != -1, \ 28012027Sjungma@eit.uni-kl.de sc_core::SC_ID_INVALID_MAX_WL_ ) 28112027Sjungma@eit.uni-kl.de 28212027Sjungma@eit.uni-kl.de 28312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 28412027Sjungma@eit.uni-kl.de// Generic observer macros. 28512027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 28612027Sjungma@eit.uni-kl.de 28712027Sjungma@eit.uni-kl.de#define SC_OBSERVER_(object,observer_type,event) \ 28812027Sjungma@eit.uni-kl.de{ \ 28912027Sjungma@eit.uni-kl.de if( (object).observer() != 0 ) \ 29012027Sjungma@eit.uni-kl.de { \ 29112027Sjungma@eit.uni-kl.de observer_type observer = (object).lock_observer(); \ 29212027Sjungma@eit.uni-kl.de observer->event( (object) ); \ 29312027Sjungma@eit.uni-kl.de (object).unlock_observer( observer ); \ 29412027Sjungma@eit.uni-kl.de } \ 29512027Sjungma@eit.uni-kl.de} 29612027Sjungma@eit.uni-kl.de 29712027Sjungma@eit.uni-kl.de#define SC_OBSERVER_DEFAULT_(observer_type) \ 29812027Sjungma@eit.uni-kl.de{ \ 29912027Sjungma@eit.uni-kl.de if( m_observer == 0 && observer_type ## ::default_observer != 0 ) \ 30012027Sjungma@eit.uni-kl.de m_observer = (* ## observer_type ## ::default_observer)(); \ 30112027Sjungma@eit.uni-kl.de} 30212027Sjungma@eit.uni-kl.de 30312027Sjungma@eit.uni-kl.de} // namespace sc_dt 30412027Sjungma@eit.uni-kl.de 30512027Sjungma@eit.uni-kl.de 30612027Sjungma@eit.uni-kl.de#endif 30712027Sjungma@eit.uni-kl.de 30812027Sjungma@eit.uni-kl.de// Taf! 309