⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sc_time.h

📁 system C源码 一种替代verilog的语言
💻 H
字号:
/*****************************************************************************  The following code is derived, directly or indirectly, from the SystemC  source code Copyright (c) 1996-2006 by all Contributors.  All Rights reserved.  The contents of this file are subject to the restrictions and limitations  set forth in the SystemC Open Source License Version 2.4 (the "License");  You may not use this file except in compliance with such restrictions and  limitations. You may obtain instructions on how to receive a copy of the  License at http://www.systemc.org/. Software distributed by Contributors  under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF  ANY KIND, either express or implied. See the License for the specific  language governing rights and limitations under the License. *****************************************************************************//*****************************************************************************  sc_time.h -- The time class.  Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 *****************************************************************************//*****************************************************************************  MODIFICATION LOG - modifiers, enter your name, affiliation, date and  changes you are making here.      Name, Affiliation, Date:  Description of Modification: *****************************************************************************/// $Log: sc_time.h,v $// Revision 1.1.1.1  2006/12/15 20:31:37  acg// SystemC 2.2//// Revision 1.3  2006/01/13 18:44:30  acg// Added $Log to record CVS changes into the source.//#ifndef SC_TIME_H#define SC_TIME_H#include "sysc/datatypes/int/sc_nbdefs.h"#include "sysc/datatypes/fx/scfx_ieee.h"#include "sysc/utils/sc_iostream.h"#include "sysc/utils/sc_string.h"namespace sc_core {class sc_simcontext;// friend operator declarations    const sc_time operator + ( const sc_time&, const sc_time& );    const sc_time operator - ( const sc_time&, const sc_time& );    const sc_time operator * ( const sc_time&, double );    const sc_time operator * ( double, const sc_time& );    const sc_time operator / ( const sc_time&, double );    double        operator / ( const sc_time&, const sc_time& );// ----------------------------------------------------------------------------//  ENUM : sc_time_unit////  Enumeration of time units.// ----------------------------------------------------------------------------enum sc_time_unit{    SC_FS = 0,    SC_PS,    SC_NS,    SC_US,    SC_MS,    SC_SEC};// ----------------------------------------------------------------------------//  CLASS : sc_time////  The time class.// ----------------------------------------------------------------------------class sc_time{public:    // constructors    sc_time();    sc_time( double, sc_time_unit );    sc_time( double, sc_time_unit, sc_simcontext* );    sc_time( double, bool scale );    sc_time( sc_dt::uint64, bool scale );    sc_time( const sc_time& );    // assignment operator    sc_time& operator = ( const sc_time& );    // conversion functions    sc_dt::uint64 value() const;      // relative to the time resolution    double to_double() const;  // relative to the time resolution    double to_default_time_units() const;    double to_seconds() const;    const std::string to_string() const;    // relational operators    bool operator == ( const sc_time& ) const;    bool operator != ( const sc_time& ) const;    bool operator <  ( const sc_time& ) const;    bool operator <= ( const sc_time& ) const;    bool operator >  ( const sc_time& ) const;    bool operator >= ( const sc_time& ) const;    // arithmetic operators    sc_time& operator += ( const sc_time& );    sc_time& operator -= ( const sc_time& );    friend const sc_time operator + ( const sc_time&, const sc_time& );    friend const sc_time operator - ( const sc_time&, const sc_time& );    sc_time& operator *= ( double );    sc_time& operator /= ( double );    friend const sc_time operator * ( const sc_time&, double );    friend const sc_time operator * ( double, const sc_time& );    friend const sc_time operator / ( const sc_time&, double );    friend double        operator / ( const sc_time&, const sc_time& );    // print function    void print( ::std::ostream& os = std::cout ) const;private:    sc_dt::uint64 m_value;};// print operatorinline ::std::ostream& operator << ( ::std::ostream&, const sc_time& );// IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII// constructorsinlinesc_time::sc_time(): m_value( 0 ){}inlinesc_time::sc_time( const sc_time& t ): m_value( t.m_value ){}// assignment operatorinlinesc_time&sc_time::operator = ( const sc_time& t ){    m_value = t.m_value;    return *this;}// conversion functionsinlinesc_dt::uint64sc_time::value() const  // relative to the time resolution{    return m_value;}inlinedoublesc_time::to_double() const  // relative to the time resolution{    return sc_dt::uint64_to_double( m_value );}// relational operatorsinlineboolsc_time::operator == ( const sc_time& t ) const{    return ( m_value == t.m_value );}inlineboolsc_time::operator != ( const sc_time& t ) const{    return ( m_value != t.m_value );}inlineboolsc_time::operator < ( const sc_time& t ) const{    return ( m_value < t.m_value );}inlineboolsc_time::operator <= ( const sc_time& t ) const{    return ( m_value <= t.m_value );}inlineboolsc_time::operator > ( const sc_time& t ) const{    return ( m_value > t.m_value );}inlineboolsc_time::operator >= ( const sc_time& t ) const{    return ( m_value >= t.m_value );}// arithmetic operatorsinlinesc_time&sc_time::operator += ( const sc_time& t ){    m_value += t.m_value;    return *this;}inlinesc_time&sc_time::operator -= ( const sc_time& t ){    m_value -= t.m_value;    return *this;}inlineconst sc_timeoperator + ( const sc_time& t1, const sc_time& t2 ){    return sc_time( t1 ) += t2;}inlineconst sc_timeoperator - ( const sc_time& t1, const sc_time& t2 ){    return sc_time( t1 ) -= t2;}inlinesc_time&sc_time::operator *= ( double d ){    // linux bug workaround; don't change next two lines    volatile double tmp = sc_dt::uint64_to_double( m_value ) * d + 0.5;    m_value = SCAST<sc_dt::int64>( tmp );    return *this;}inlinesc_time&sc_time::operator /= ( double d ){    // linux bug workaround; don't change next two lines    volatile double tmp = sc_dt::uint64_to_double( m_value ) / d + 0.5;    m_value = SCAST<sc_dt::int64>( tmp );    return *this;}inlineconst sc_timeoperator * ( const sc_time& t, double d ){    sc_time tmp( t );    return tmp *= d;}inlineconst sc_timeoperator * ( double d, const sc_time& t ){    sc_time tmp( t );    return tmp *= d;}inlineconst sc_timeoperator / ( const sc_time& t, double d ){    sc_time tmp( t );    return tmp /= d;}inlinedoubleoperator / ( const sc_time& t1, const sc_time& t2 ){    return ( t1.to_double() / t2.to_double() );}// print operatorinline::std::ostream&operator << ( ::std::ostream& os, const sc_time& t ){    t.print( os );    return os;}// ----------------------------------------------------------------------------//  STRUCT : sc_time_params////  Struct that holds the time resolution and default time unit.// ----------------------------------------------------------------------------struct sc_time_params{    double time_resolution;		// in femto seconds    bool   time_resolution_specified;    bool   time_resolution_fixed;    sc_dt::uint64 default_time_unit;		// in time resolution    bool   default_time_unit_specified;    sc_time_params();    ~sc_time_params();};// ----------------------------------------------------------------------------extern const sc_time SC_ZERO_TIME;// functions for accessing the time resolution and default time unitextern void    sc_set_time_resolution( double, sc_time_unit );extern sc_time sc_get_time_resolution();extern void    sc_set_default_time_unit( double, sc_time_unit );extern sc_time sc_get_default_time_unit();} // namespace sc_core#endif// Taf!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -