sc_sensitive.cc revision 13211:62e227fef520
110453SAndrew.Bardsley@arm.com/* 211235Sandreas.sandberg@arm.com * Copyright 2018 Google, Inc. 310453SAndrew.Bardsley@arm.com * 410453SAndrew.Bardsley@arm.com * Redistribution and use in source and binary forms, with or without 510453SAndrew.Bardsley@arm.com * modification, are permitted provided that the following conditions are 610453SAndrew.Bardsley@arm.com * met: redistributions of source code must retain the above copyright 710453SAndrew.Bardsley@arm.com * notice, this list of conditions and the following disclaimer; 810453SAndrew.Bardsley@arm.com * redistributions in binary form must reproduce the above copyright 910453SAndrew.Bardsley@arm.com * notice, this list of conditions and the following disclaimer in the 1010453SAndrew.Bardsley@arm.com * documentation and/or other materials provided with the distribution; 1110453SAndrew.Bardsley@arm.com * neither the name of the copyright holders nor the names of its 1210453SAndrew.Bardsley@arm.com * contributors may be used to endorse or promote products derived from 1310453SAndrew.Bardsley@arm.com * this software without specific prior written permission. 1410453SAndrew.Bardsley@arm.com * 1510453SAndrew.Bardsley@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1610453SAndrew.Bardsley@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1710453SAndrew.Bardsley@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1810453SAndrew.Bardsley@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1910453SAndrew.Bardsley@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2010453SAndrew.Bardsley@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2110453SAndrew.Bardsley@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2210453SAndrew.Bardsley@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2310453SAndrew.Bardsley@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2410453SAndrew.Bardsley@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2510453SAndrew.Bardsley@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2610453SAndrew.Bardsley@arm.com * 2710453SAndrew.Bardsley@arm.com * Authors: Gabe Black 2810453SAndrew.Bardsley@arm.com */ 2910453SAndrew.Bardsley@arm.com 3010453SAndrew.Bardsley@arm.com#include "base/logging.hh" 3110453SAndrew.Bardsley@arm.com#include "systemc/core/process.hh" 3210453SAndrew.Bardsley@arm.com#include "systemc/ext/channel/sc_in.hh" 3310453SAndrew.Bardsley@arm.com#include "systemc/ext/channel/sc_inout.hh" 3410453SAndrew.Bardsley@arm.com#include "systemc/ext/channel/sc_signal_in_if.hh" 3510453SAndrew.Bardsley@arm.com#include "systemc/ext/core/sc_interface.hh" 3610453SAndrew.Bardsley@arm.com#include "systemc/ext/core/sc_main.hh" 3710453SAndrew.Bardsley@arm.com#include "systemc/ext/core/sc_sensitive.hh" 3810453SAndrew.Bardsley@arm.com#include "systemc/ext/utils/sc_report_handler.hh" 3910453SAndrew.Bardsley@arm.com 4010453SAndrew.Bardsley@arm.comnamespace sc_core 4110453SAndrew.Bardsley@arm.com{ 4210453SAndrew.Bardsley@arm.com 4310453SAndrew.Bardsley@arm.comnamespace 4411235Sandreas.sandberg@arm.com{ 4511235Sandreas.sandberg@arm.com 4611235Sandreas.sandberg@arm.comvoid 4711235Sandreas.sandberg@arm.comcheckIfRunning() 4811235Sandreas.sandberg@arm.com{ 4910453SAndrew.Bardsley@arm.com if (sc_is_running()) 5010453SAndrew.Bardsley@arm.com SC_REPORT_ERROR("(E526) make sensitive failed", "simulation running"); 5110453SAndrew.Bardsley@arm.com} 5210453SAndrew.Bardsley@arm.com 5311235Sandreas.sandberg@arm.com} // anonymous namespace 5410453SAndrew.Bardsley@arm.com 5510453SAndrew.Bardsley@arm.comsc_sensitive::sc_sensitive() : currentProcess(nullptr) {} 5611235Sandreas.sandberg@arm.com 5710453SAndrew.Bardsley@arm.comsc_sensitive & 5810476Sandreas.hansson@arm.comsc_sensitive::operator << (const sc_event &e) 5910453SAndrew.Bardsley@arm.com{ 6010453SAndrew.Bardsley@arm.com checkIfRunning(); 6110453SAndrew.Bardsley@arm.com sc_gem5::newStaticSensitivityEvent(currentProcess, &e); 6211235Sandreas.sandberg@arm.com return *this; 6311235Sandreas.sandberg@arm.com} 6411235Sandreas.sandberg@arm.com 6511235Sandreas.sandberg@arm.comsc_sensitive & 6611235Sandreas.sandberg@arm.comsc_sensitive::operator << (const sc_interface &i) 6711235Sandreas.sandberg@arm.com{ 6811235Sandreas.sandberg@arm.com checkIfRunning(); 6911235Sandreas.sandberg@arm.com sc_gem5::newStaticSensitivityInterface(currentProcess, &i); 7011235Sandreas.sandberg@arm.com return *this; 7111235Sandreas.sandberg@arm.com} 7211235Sandreas.sandberg@arm.com 7311235Sandreas.sandberg@arm.comsc_sensitive & 7411235Sandreas.sandberg@arm.comsc_sensitive::operator << (const sc_port_base &b) 7511235Sandreas.sandberg@arm.com{ 7611235Sandreas.sandberg@arm.com checkIfRunning(); 7711235Sandreas.sandberg@arm.com sc_gem5::newStaticSensitivityPort(currentProcess, &b); 7811235Sandreas.sandberg@arm.com return *this; 7911235Sandreas.sandberg@arm.com} 8011235Sandreas.sandberg@arm.com 8111235Sandreas.sandberg@arm.comsc_sensitive & 8211235Sandreas.sandberg@arm.comsc_sensitive::operator << (sc_event_finder &f) 8311235Sandreas.sandberg@arm.com{ 8411235Sandreas.sandberg@arm.com checkIfRunning(); 8511235Sandreas.sandberg@arm.com sc_gem5::newStaticSensitivityFinder(currentProcess, &f); 8611235Sandreas.sandberg@arm.com return *this; 8711235Sandreas.sandberg@arm.com} 8811235Sandreas.sandberg@arm.com 8911235Sandreas.sandberg@arm.comsc_sensitive & 9011235Sandreas.sandberg@arm.comsc_sensitive::operator << (::sc_gem5::Process *p) 9111235Sandreas.sandberg@arm.com{ 9211235Sandreas.sandberg@arm.com currentProcess = p; 9311235Sandreas.sandberg@arm.com return *this; 9411235Sandreas.sandberg@arm.com} 9511235Sandreas.sandberg@arm.com 9611235Sandreas.sandberg@arm.com 9711235Sandreas.sandberg@arm.comvoid 9811235Sandreas.sandberg@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, 9911235Sandreas.sandberg@arm.com const sc_signal_in_if<bool> &i) 10011235Sandreas.sandberg@arm.com{ 10111235Sandreas.sandberg@arm.com checkIfRunning(); 10211235Sandreas.sandberg@arm.com sc_gem5::newStaticSensitivityEvent(p, &i.posedge_event()); 10311235Sandreas.sandberg@arm.com} 10411235Sandreas.sandberg@arm.com 10510453SAndrew.Bardsley@arm.comvoid 10610453SAndrew.Bardsley@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, 10710453SAndrew.Bardsley@arm.com const sc_signal_in_if<sc_dt::sc_logic> &i) 10810453SAndrew.Bardsley@arm.com{ 10910453SAndrew.Bardsley@arm.com checkIfRunning(); 11010453SAndrew.Bardsley@arm.com sc_gem5::newStaticSensitivityEvent(p, &i.posedge_event()); 11110476Sandreas.hansson@arm.com} 11210476Sandreas.hansson@arm.com 11310453SAndrew.Bardsley@arm.comvoid 11410453SAndrew.Bardsley@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, const sc_in<bool> &port) 11510453SAndrew.Bardsley@arm.com{ 11610453SAndrew.Bardsley@arm.com checkIfRunning(); 11710453SAndrew.Bardsley@arm.com sc_gem5::newStaticSensitivityFinder(p, &port.pos()); 11810453SAndrew.Bardsley@arm.com} 11910453SAndrew.Bardsley@arm.com 12010453SAndrew.Bardsley@arm.comvoid 12110476Sandreas.hansson@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, 12210476Sandreas.hansson@arm.com const sc_in<sc_dt::sc_logic> &port) 12310453SAndrew.Bardsley@arm.com{ 12410453SAndrew.Bardsley@arm.com checkIfRunning(); 12510453SAndrew.Bardsley@arm.com sc_gem5::newStaticSensitivityFinder(p, &port.pos()); 12610453SAndrew.Bardsley@arm.com} 12710453SAndrew.Bardsley@arm.com 12810453SAndrew.Bardsley@arm.comvoid 12910453SAndrew.Bardsley@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, const sc_inout<bool> &port) 13010453SAndrew.Bardsley@arm.com{ 13110476Sandreas.hansson@arm.com checkIfRunning(); 13210476Sandreas.hansson@arm.com sc_gem5::newStaticSensitivityFinder(p, &port.pos()); 13310453SAndrew.Bardsley@arm.com} 13410453SAndrew.Bardsley@arm.com 13510453SAndrew.Bardsley@arm.comvoid 13610453SAndrew.Bardsley@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, 13710453SAndrew.Bardsley@arm.com const sc_inout<sc_dt::sc_logic> &port) 13810453SAndrew.Bardsley@arm.com{ 13911235Sandreas.sandberg@arm.com checkIfRunning(); 14011235Sandreas.sandberg@arm.com sc_gem5::newStaticSensitivityFinder(p, &port.pos()); 14111235Sandreas.sandberg@arm.com} 14211235Sandreas.sandberg@arm.com 14311235Sandreas.sandberg@arm.comvoid 14411235Sandreas.sandberg@arm.comsc_sensitive::operator () (::sc_gem5::Process *p, sc_event_finder &f) 14511235Sandreas.sandberg@arm.com{ 14611235Sandreas.sandberg@arm.com checkIfRunning(); 14711235Sandreas.sandberg@arm.com sc_gem5::newStaticSensitivityFinder(p, &f); 14811235Sandreas.sandberg@arm.com} 14911235Sandreas.sandberg@arm.com 15011235Sandreas.sandberg@arm.com} // namespace sc_core 15111235Sandreas.sandberg@arm.com