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_signal_resolved.cpp -- The resolved signal class. 2312027Sjungma@eit.uni-kl.de 2412027Sjungma@eit.uni-kl.de Original Author: Martin Janssen, Synopsys, Inc., 2001-05-21 2512027Sjungma@eit.uni-kl.de 2612027Sjungma@eit.uni-kl.de CHANGE LOG IS AT THE END OF THE FILE 2712027Sjungma@eit.uni-kl.de *****************************************************************************/ 2812027Sjungma@eit.uni-kl.de 2912027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_simcontext.h" 3012027Sjungma@eit.uni-kl.de#include "sysc/kernel/sc_process_handle.h" 3112027Sjungma@eit.uni-kl.de#include "sysc/communication/sc_signal_resolved.h" 3212027Sjungma@eit.uni-kl.de 3312027Sjungma@eit.uni-kl.denamespace sc_core { 3412027Sjungma@eit.uni-kl.de 3512027Sjungma@eit.uni-kl.de// Note that we assume that two drivers driving the resolved signal to a 1 or 3612027Sjungma@eit.uni-kl.de// 0 is O.K. This might not be true for all technologies, but is certainly 3712027Sjungma@eit.uni-kl.de// true for CMOS, the predominant technology in use today. 3812027Sjungma@eit.uni-kl.de 3912027Sjungma@eit.uni-kl.deconst sc_dt::sc_logic_value_t 4012027Sjungma@eit.uni-kl.desc_logic_resolution_tbl[4][4] = 4112027Sjungma@eit.uni-kl.de{ // 0 1 Z X 4212027Sjungma@eit.uni-kl.de { sc_dt::Log_0, sc_dt::Log_X, sc_dt::Log_0, sc_dt::Log_X }, // 0 4312027Sjungma@eit.uni-kl.de { sc_dt::Log_X, sc_dt::Log_1, sc_dt::Log_1, sc_dt::Log_X }, // 1 4412027Sjungma@eit.uni-kl.de { sc_dt::Log_0, sc_dt::Log_1, sc_dt::Log_Z, sc_dt::Log_X }, // Z 4512027Sjungma@eit.uni-kl.de { sc_dt::Log_X, sc_dt::Log_X, sc_dt::Log_X, sc_dt::Log_X } // X 4612027Sjungma@eit.uni-kl.de}; 4712027Sjungma@eit.uni-kl.de 4812027Sjungma@eit.uni-kl.de 4912027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 5012027Sjungma@eit.uni-kl.de// FUNCTION : sc_logic_resolve 5112027Sjungma@eit.uni-kl.de// 5212027Sjungma@eit.uni-kl.de// Resolution function for sc_dt::sc_logic. 5312027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 5412027Sjungma@eit.uni-kl.de 5512027Sjungma@eit.uni-kl.de// resolves sc_dt::sc_logic values and returns the resolved value 5612027Sjungma@eit.uni-kl.de 5712027Sjungma@eit.uni-kl.destatic void 5812027Sjungma@eit.uni-kl.desc_logic_resolve( sc_dt::sc_logic& result_, 5912027Sjungma@eit.uni-kl.de const std::vector<sc_dt::sc_logic>& values_ ) 6012027Sjungma@eit.uni-kl.de{ 6112027Sjungma@eit.uni-kl.de int sz = values_.size(); 6212027Sjungma@eit.uni-kl.de 6312027Sjungma@eit.uni-kl.de assert( sz != 0 ); 6412027Sjungma@eit.uni-kl.de 6512027Sjungma@eit.uni-kl.de if( sz == 1 ) { 6612027Sjungma@eit.uni-kl.de result_ = values_[0]; 6712027Sjungma@eit.uni-kl.de return; 6812027Sjungma@eit.uni-kl.de } 6912027Sjungma@eit.uni-kl.de 7012027Sjungma@eit.uni-kl.de sc_dt::sc_logic_value_t res = values_[0].value(); 7112027Sjungma@eit.uni-kl.de for( int i = sz - 1; i > 0 && res != sc_dt::Log_X; -- i ) { 7212027Sjungma@eit.uni-kl.de res = sc_logic_resolution_tbl[res][values_[i].value()]; 7312027Sjungma@eit.uni-kl.de } 7412027Sjungma@eit.uni-kl.de result_ = res; 7512027Sjungma@eit.uni-kl.de} 7612027Sjungma@eit.uni-kl.de 7712027Sjungma@eit.uni-kl.de 7812027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 7912027Sjungma@eit.uni-kl.de// CLASS : sc_signal_resolved 8012027Sjungma@eit.uni-kl.de// 8112027Sjungma@eit.uni-kl.de// The resolved signal class. 8212027Sjungma@eit.uni-kl.de// ---------------------------------------------------------------------------- 8312027Sjungma@eit.uni-kl.de 8412027Sjungma@eit.uni-kl.de// write the new value 8512027Sjungma@eit.uni-kl.de 8612027Sjungma@eit.uni-kl.devoid 8712027Sjungma@eit.uni-kl.desc_signal_resolved::write( const data_type& value_ ) 8812027Sjungma@eit.uni-kl.de{ 8912027Sjungma@eit.uni-kl.de sc_process_b* cur_proc = sc_get_current_process_b(); 9012027Sjungma@eit.uni-kl.de 9112027Sjungma@eit.uni-kl.de bool value_changed = false; 9212027Sjungma@eit.uni-kl.de bool found = false; 9312027Sjungma@eit.uni-kl.de 9412027Sjungma@eit.uni-kl.de for( int i = m_proc_vec.size() - 1; i >= 0; -- i ) { 9512027Sjungma@eit.uni-kl.de if( cur_proc == m_proc_vec[i] ) { 9612027Sjungma@eit.uni-kl.de if( value_ != m_val_vec[i] ) { 9712027Sjungma@eit.uni-kl.de m_val_vec[i] = value_; 9812027Sjungma@eit.uni-kl.de value_changed = true; 9912027Sjungma@eit.uni-kl.de } 10012027Sjungma@eit.uni-kl.de found = true; 10112027Sjungma@eit.uni-kl.de break; 10212027Sjungma@eit.uni-kl.de } 10312027Sjungma@eit.uni-kl.de } 10412027Sjungma@eit.uni-kl.de 10512027Sjungma@eit.uni-kl.de if( ! found ) { 10612027Sjungma@eit.uni-kl.de m_proc_vec.push_back( cur_proc ); 10712027Sjungma@eit.uni-kl.de m_val_vec.push_back( value_ ); 10812027Sjungma@eit.uni-kl.de value_changed = true; 10912027Sjungma@eit.uni-kl.de } 11012027Sjungma@eit.uni-kl.de 11112027Sjungma@eit.uni-kl.de if( value_changed ) { 11212027Sjungma@eit.uni-kl.de request_update(); 11312027Sjungma@eit.uni-kl.de } 11412027Sjungma@eit.uni-kl.de} 11512027Sjungma@eit.uni-kl.de 11612027Sjungma@eit.uni-kl.de 11712027Sjungma@eit.uni-kl.devoid 11812027Sjungma@eit.uni-kl.desc_signal_resolved::update() 11912027Sjungma@eit.uni-kl.de{ 12012027Sjungma@eit.uni-kl.de sc_logic_resolve( m_new_val, m_val_vec ); 12112027Sjungma@eit.uni-kl.de base_type::update(); 12212027Sjungma@eit.uni-kl.de} 12312027Sjungma@eit.uni-kl.de 12412027Sjungma@eit.uni-kl.de 12512027Sjungma@eit.uni-kl.de} // namespace sc_core 12612027Sjungma@eit.uni-kl.de 12712027Sjungma@eit.uni-kl.de// $Log: sc_signal_resolved.cpp,v $ 12812027Sjungma@eit.uni-kl.de// Revision 1.5 2011/08/26 20:45:44 acg 12912027Sjungma@eit.uni-kl.de// Andy Goodrich: moved the modification log to the end of the file to 13012027Sjungma@eit.uni-kl.de// eliminate source line number skew when check-ins are done. 13112027Sjungma@eit.uni-kl.de// 13212027Sjungma@eit.uni-kl.de// Revision 1.4 2011/02/18 20:23:45 acg 13312027Sjungma@eit.uni-kl.de// Andy Goodrich: Copyright update. 13412027Sjungma@eit.uni-kl.de// 13512027Sjungma@eit.uni-kl.de// Revision 1.3 2011/02/07 19:16:50 acg 13612027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for handling multiple writers. 13712027Sjungma@eit.uni-kl.de// 13812027Sjungma@eit.uni-kl.de// Revision 1.2 2011/01/20 16:52:15 acg 13912027Sjungma@eit.uni-kl.de// Andy Goodrich: changes for IEEE 1666 2011. 14012027Sjungma@eit.uni-kl.de// 14112027Sjungma@eit.uni-kl.de// Revision 1.1.1.1 2006/12/15 20:20:04 acg 14212027Sjungma@eit.uni-kl.de// SystemC 2.3 14312027Sjungma@eit.uni-kl.de// 14412027Sjungma@eit.uni-kl.de// Revision 1.4 2006/03/21 00:00:27 acg 14512027Sjungma@eit.uni-kl.de// Andy Goodrich: changed name of sc_get_current_process_base() to be 14612027Sjungma@eit.uni-kl.de// sc_get_current_process_b() since its returning an sc_process_b instance. 14712027Sjungma@eit.uni-kl.de// 14812027Sjungma@eit.uni-kl.de// Revision 1.3 2006/01/13 18:47:42 acg 14912027Sjungma@eit.uni-kl.de// Added $Log command so that CVS comments are reproduced in the source. 15012027Sjungma@eit.uni-kl.de// 15112027Sjungma@eit.uni-kl.de 15212027Sjungma@eit.uni-kl.de// Taf! 153