sc_writer_policy.h revision 12027
19241Sandreas.hansson@arm.com/***************************************************************************** 29717Sandreas.hansson@arm.com 39241Sandreas.hansson@arm.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 49241Sandreas.hansson@arm.com more contributor license agreements. See the NOTICE file distributed 59241Sandreas.hansson@arm.com with this work for additional information regarding copyright ownership. 69241Sandreas.hansson@arm.com Accellera licenses this file to you under the Apache License, Version 2.0 79241Sandreas.hansson@arm.com (the "License"); you may not use this file except in compliance with the 89241Sandreas.hansson@arm.com License. You may obtain a copy of the License at 99241Sandreas.hansson@arm.com 109241Sandreas.hansson@arm.com http://www.apache.org/licenses/LICENSE-2.0 119241Sandreas.hansson@arm.com 129241Sandreas.hansson@arm.com Unless required by applicable law or agreed to in writing, software 139241Sandreas.hansson@arm.com distributed under the License is distributed on an "AS IS" BASIS, 149241Sandreas.hansson@arm.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 159241Sandreas.hansson@arm.com implied. See the License for the specific language governing 169241Sandreas.hansson@arm.com permissions and limitations under the License. 179241Sandreas.hansson@arm.com 189241Sandreas.hansson@arm.com *****************************************************************************/ 199241Sandreas.hansson@arm.com 209241Sandreas.hansson@arm.com/***************************************************************************** 219241Sandreas.hansson@arm.com 229241Sandreas.hansson@arm.com sc_writer_policy.h -- The sc_signal<T> writer policy definition 239241Sandreas.hansson@arm.com 249241Sandreas.hansson@arm.com Original Author: Philipp A: Hartmann, OFFIS 259241Sandreas.hansson@arm.com 269241Sandreas.hansson@arm.com CHANGE LOG IS AT THE END OF THE FILE 279241Sandreas.hansson@arm.com *****************************************************************************/ 289241Sandreas.hansson@arm.com 299241Sandreas.hansson@arm.com 309241Sandreas.hansson@arm.com#ifndef SC_WRITER_POLICY_H_INCLUDED_ 319241Sandreas.hansson@arm.com#define SC_WRITER_POLICY_H_INCLUDED_ 329241Sandreas.hansson@arm.com 339241Sandreas.hansson@arm.com#if !defined(SC_DEFAULT_WRITER_POLICY) 349241Sandreas.hansson@arm.com# if defined(SC_NO_WRITE_CHECK) 359241Sandreas.hansson@arm.com# define SC_DEFAULT_WRITER_POLICY SC_UNCHECKED_WRITERS 369241Sandreas.hansson@arm.com# else 379241Sandreas.hansson@arm.com# define SC_DEFAULT_WRITER_POLICY SC_ONE_WRITER 389241Sandreas.hansson@arm.com# endif 399241Sandreas.hansson@arm.com#endif 409241Sandreas.hansson@arm.com 419241Sandreas.hansson@arm.comnamespace sc_core { 429241Sandreas.hansson@arm.com 439241Sandreas.hansson@arm.comclass sc_object; 449241Sandreas.hansson@arm.comclass sc_port_base; 459241Sandreas.hansson@arm.comextern 469241Sandreas.hansson@arm.comvoid 479241Sandreas.hansson@arm.comsc_signal_invalid_writer( sc_object* target, sc_object* first_writer, 489241Sandreas.hansson@arm.com sc_object* second_writer, bool check_delta ); 499241Sandreas.hansson@arm.com 509241Sandreas.hansson@arm.com// SIGNAL WRITING POLICIES 519241Sandreas.hansson@arm.com// 529241Sandreas.hansson@arm.com// Note: if you add a new policy to the enum below you will need to add 539241Sandreas.hansson@arm.com// an additional overload of sc_reset::reset_signal_is() for the sc_signal<bool> 549241Sandreas.hansson@arm.com// instance. That will require changes to sysc/kernel/sc_reset.cpp and 559241Sandreas.hansson@arm.com// sysc/kernel/sc_reset.h 569241Sandreas.hansson@arm.com 579718Sandreas.hansson@arm.comenum sc_writer_policy 589720Sandreas.hansson@arm.com{ 599717Sandreas.hansson@arm.com SC_ONE_WRITER = 0, ///< unique writer (from a unique port) 609719Sandreas.hansson@arm.com SC_MANY_WRITERS = 1, ///< allow multiple writers (with different ports) 619241Sandreas.hansson@arm.com SC_UNCHECKED_WRITERS = 3 ///< even allow delta cycle conflicts (non-standard) 629719Sandreas.hansson@arm.com}; 639719Sandreas.hansson@arm.com 649719Sandreas.hansson@arm.com// signal forward declaration 659719Sandreas.hansson@arm.comtemplate< typename T, sc_writer_policy POL = SC_DEFAULT_WRITER_POLICY > 669241Sandreas.hansson@arm.comclass sc_signal; 679241Sandreas.hansson@arm.com 689241Sandreas.hansson@arm.comtemplate< sc_writer_policy > 699241Sandreas.hansson@arm.comstruct sc_writer_policy_check; 709241Sandreas.hansson@arm.com 719241Sandreas.hansson@arm.comstruct sc_writer_policy_nocheck_write 729241Sandreas.hansson@arm.com{ 739241Sandreas.hansson@arm.com bool check_write( sc_object* /* target */, bool /* value_changed */ ) 749241Sandreas.hansson@arm.com { return true; } 759294Sandreas.hansson@arm.com void update(){} 769294Sandreas.hansson@arm.com}; 779241Sandreas.hansson@arm.com 789241Sandreas.hansson@arm.comstruct sc_writer_policy_check_write 799241Sandreas.hansson@arm.com{ 809241Sandreas.hansson@arm.com bool check_write( sc_object* target, bool value_changed ); 819241Sandreas.hansson@arm.com void update(){} 829241Sandreas.hansson@arm.comprotected: 839241Sandreas.hansson@arm.com sc_writer_policy_check_write( bool check_delta = false ) 849241Sandreas.hansson@arm.com : m_check_delta( check_delta ), m_writer_p(NULL) {} 859241Sandreas.hansson@arm.com const bool m_check_delta; 869241Sandreas.hansson@arm.com sc_object* m_writer_p; 879241Sandreas.hansson@arm.com}; 889241Sandreas.hansson@arm.com 899241Sandreas.hansson@arm.comstruct sc_writer_policy_check_delta 909241Sandreas.hansson@arm.com : sc_writer_policy_check_write 919241Sandreas.hansson@arm.com{ 929524SAndreas.Sandberg@ARM.com 939241Sandreas.hansson@arm.com sc_writer_policy_check_delta() 949241Sandreas.hansson@arm.com : sc_writer_policy_check_write(true) {} 959718Sandreas.hansson@arm.com 969718Sandreas.hansson@arm.com bool check_write( sc_object* target, bool value_changed ) 979241Sandreas.hansson@arm.com { 989717Sandreas.hansson@arm.com if( value_changed ) 999241Sandreas.hansson@arm.com return sc_writer_policy_check_write::check_write( target, true ); 1009241Sandreas.hansson@arm.com return true; 1019241Sandreas.hansson@arm.com } 1029241Sandreas.hansson@arm.com 1039241Sandreas.hansson@arm.com void update(){ m_writer_p = NULL; } 1049241Sandreas.hansson@arm.com}; 1059241Sandreas.hansson@arm.com 1069241Sandreas.hansson@arm.comstruct sc_writer_policy_nocheck_port 1079241Sandreas.hansson@arm.com{ 1089241Sandreas.hansson@arm.com bool check_port( sc_object*, sc_port_base*, bool ) 1099524SAndreas.Sandberg@ARM.com { return true; } 1109719Sandreas.hansson@arm.com}; 1119720Sandreas.hansson@arm.com 1129719Sandreas.hansson@arm.comstruct sc_writer_policy_check_port 1139241Sandreas.hansson@arm.com{ 1149241Sandreas.hansson@arm.com bool check_port( sc_object* target, sc_port_base* port, bool is_output ); 1159241Sandreas.hansson@arm.com 1169241Sandreas.hansson@arm.comprotected: 1179241Sandreas.hansson@arm.com sc_writer_policy_check_port() : m_output(0) {} 1189241Sandreas.hansson@arm.com sc_port_base* m_output; 1199241Sandreas.hansson@arm.com}; 1209342SAndreas.Sandberg@arm.com 1219241Sandreas.hansson@arm.comtemplate<> 1229719Sandreas.hansson@arm.comstruct sc_writer_policy_check<SC_ONE_WRITER> 1239719Sandreas.hansson@arm.com : sc_writer_policy_check_port 1249719Sandreas.hansson@arm.com , sc_writer_policy_check_write 1259719Sandreas.hansson@arm.com{}; 1269719Sandreas.hansson@arm.com 1279719Sandreas.hansson@arm.comtemplate<> 1289719Sandreas.hansson@arm.comstruct sc_writer_policy_check<SC_MANY_WRITERS> 1299719Sandreas.hansson@arm.com : sc_writer_policy_nocheck_port 1309719Sandreas.hansson@arm.com , sc_writer_policy_check_delta 1319719Sandreas.hansson@arm.com{}; 1329241Sandreas.hansson@arm.com 1339241Sandreas.hansson@arm.comtemplate<> 1349241Sandreas.hansson@arm.comstruct sc_writer_policy_check<SC_UNCHECKED_WRITERS> 1359241Sandreas.hansson@arm.com : sc_writer_policy_nocheck_port 1369241Sandreas.hansson@arm.com , sc_writer_policy_nocheck_write 1379241Sandreas.hansson@arm.com{}; 1389241Sandreas.hansson@arm.com 1399241Sandreas.hansson@arm.com} // namespace sc_core 1409719Sandreas.hansson@arm.com 1419241Sandreas.hansson@arm.com#endif 1429719Sandreas.hansson@arm.com 1439241Sandreas.hansson@arm.com// Taf! 1449717Sandreas.hansson@arm.com