#ifdef SYSTEMC /* * $Id: Functionnal_unit_genMealy.cpp 123 2009-06-08 20:43:30Z rosiere $ * * [ Description ] * */ #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h" namespace morpheo { namespace behavioural { namespace core { namespace multi_execute_loop { namespace execute_loop { namespace multi_execute_unit { namespace execute_unit { namespace functionnal_unit { #undef FUNCTION #define FUNCTION "Functionnal_unit::genMealy" void Functionnal_unit::genMealy (void) { log_begin(Functionnal_unit,FUNCTION); log_function(Functionnal_unit,FUNCTION,_name.c_str()); if (PORT_READ(in_NRESET) != 0) { { // Can out if : have an instruction and is finish (latence == 0) internal_EXECUTE_OUT_VAL = (reg_BUSY_OUT and (_execute_operation_out->_timing._latence == 0)); } { // Can accept an instruction if : // * pipeline in is not busy (not previous instruction) // * pipeline in is busy ( previous instruction) and the instruction go to pipeline out if (_param->_have_pipeline_in) { internal_EXECUTE_IN_ACK = (not reg_BUSY_IN or (reg_BUSY_IN and (not reg_BUSY_OUT or (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK))))); } else { internal_EXECUTE_IN_ACK = (not reg_BUSY_OUT or (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK))); } } } else { // RESET internal_EXECUTE_IN_ACK = 0; internal_EXECUTE_OUT_VAL = 0; } // Write Output PORT_WRITE(out_EXECUTE_IN_ACK , internal_EXECUTE_IN_ACK); PORT_WRITE(out_EXECUTE_OUT_VAL, internal_EXECUTE_OUT_VAL); log_end(Functionnal_unit,FUNCTION); }; }; // end namespace functionnal_unit }; // end namespace execute_unit }; // end namespace multi_execute_unit }; // end namespace execute_loop }; // end namespace multi_execute_loop }; // end namespace core }; // end namespace behavioural }; // end namespace morpheo #endif