- Timestamp:
- Mar 27, 2008, 11:04:49 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp
r65 r78 17 17 bool signal_dest_is_port) 18 18 { 19 // signal_dest_is_port == 1 when the signal dest is in a top level interface. (else, signal_dest is type "INTERNAL") 20 19 21 log_printf(FUNC,Behavioural,FUNCTION,"Begin"); 20 22 … … 23 25 // Test 24 26 if (signal_src ->_is_allocate == false) 25 throw (E rrorMorpheo ("<Signal::link>Signal \""+_name+"\", can't map with signal \""+ get_name()+"\", because the first signal is not already allocate."));27 throw (ERRORMORPHEO (FUNCTION,"Signal \""+_name+"\", can't map with signal \""+ get_name()+"\", because the first signal is not already allocate.")); 26 28 if (signal_dest->_is_allocate == false) 27 throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+signal_dest->get_name()+"\", because the second signal is not already allocate.")); 28 if (signal_src ->_is_map_as_src == true) 29 throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal_dest->get_name()+"\", because the first signal is already mapped.")); 29 throw (ERRORMORPHEO (FUNCTION,"Signal \""+_name+"\", can't map with signal \""+signal_dest->get_name()+"\", because the second signal is not already allocate.")); 30 30 31 31 // List of all case … … 43 43 not (not signal_dest_is_port and (((signal_src->_direction == IN ) and (signal_dest->_direction == INTERNAL)) or 44 44 ((signal_src->_direction == OUT) and (signal_dest->_direction == INTERNAL))))) 45 throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" can't been linked with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(signal_src->_direction)+" with "+toString(signal_dest->_direction)+").")); 45 throw (ERRORMORPHEO (FUNCTION,"Signal \""+_name+"\" can't been linked with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(signal_src->_direction)+" with "+toString(signal_dest->_direction)+").")); 46 47 48 // Multi consumer is authorized , no to multi producer! 49 bool source_have_multi_consumer = (signal_src ->_connect_to_signal != NULL); 50 // bool destination_have_multi_producer = (signal_dest->_connect_from_signal != NULL) and (signal_dest_is_port == false); 51 // if (destination_have_multi_producer) 52 // // throw (ERRORMORPHEO (FUNCTION,"Signal \""+_name+"\" can't been linked with signal \""+signal_dest->get_name()+"\" : destination have multi producer.")); 53 // log_printf(NONE,Behavioural,FUNCTION,"Signal \"%s\" can't been linked with signal \"%s\" : destination have multi producer.",_name.c_str(),signal_dest->get_name().c_str()); 46 54 47 55 // update info source 48 signal_src ->_connect_to_signal = signal_dest; 49 signal_src ->_is_map_as_src = true; 56 signal_src ->_connect_to_signal = signal_dest; 57 signal_src ->_is_map_as_component_src = true; 58 59 // update info destination 60 if (signal_dest_is_port == true) 61 signal_dest->_is_map_as_toplevel_dest = true; // because toplevel port can't be a source 62 else 63 // signal_dest is a internal signal 64 if (signal_src->_direction == OUT) 65 signal_dest->_is_map_as_component_dest = true; 66 else 67 signal_dest->_is_map_as_component_src = true; 50 68 51 // update info destination52 signal_dest->_connect_from_signal = signal_src;53 signal_dest->_is_map_as_dest = true;54 55 69 // an internal signal and port can't be a source. 56 70 // also, to fill the connect_to_signal's field 57 if ((signal_src->_direction == OUT) and 58 (signal_dest->_direction == INTERNAL)) 59 { 60 signal_dest->_connect_to_signal = signal_src; 61 } 71 if (signal_dest->_direction == INTERNAL) 72 if (signal_src->_direction == OUT) 73 signal_dest->_connect_from_signal = signal_src; 74 else 75 signal_dest->_connect_to_signal = signal_src; 76 else 77 signal_dest->_connect_from_signal = signal_src; 78 79 62 80 63 81 // vhdl_testbench : to read an output producte by a internal component … … 66 84 (signal_src ->_direction == OUT)) 67 85 signal_dest->_sc_signal_map = signal_src ->_sc_signal_map; 68 69 connect (signal_dest); 86 87 // A signal can be connect once 88 if (not source_have_multi_consumer) 89 connect (signal_dest); 70 90 71 91 log_printf(FUNC,Behavioural,FUNCTION,"End");
Note: See TracChangeset
for help on using the changeset viewer.