Ignore:
Timestamp:
Mar 27, 2008, 11:04:49 AM (16 years ago)
Author:
rosiere
Message:

Add :

  • Execute_loop (must be test systemC)
  • Prediction
    • Direction : predifined scheme
    • Branch Target Buffer
  • iFetch_unit
    • ifetch_queue
    • pc management
  • Decod_unit
    • coming soon : support for custom operation
  • Rename_unit
    • RAT
    • Free_list
    • Dependence RAW check
    • Load store unit pointer
  • New Environnement (hierarchy_memory will remove in a next version)


Modif :

  • Manage Custom Operation
  • All component in execute_loop to use the new statistics management

Not Finish :

  • Return Address Stack
  • Environnement
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp

    r65 r78  
    1717                     bool     signal_dest_is_port)
    1818  {
     19    // signal_dest_is_port == 1 when the signal dest is in a top level interface. (else, signal_dest is type "INTERNAL")
     20   
    1921    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
    2022
     
    2325    // Test
    2426    if (signal_src ->_is_allocate == false)
    25       throw (ErrorMorpheo ("<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."));
    2628    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."));
    3030
    3131    // List of all case
     
    4343        not (not signal_dest_is_port and (((signal_src->_direction == IN ) and (signal_dest->_direction == INTERNAL)) or
    4444                                          ((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());
    4654
    4755    // 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;
    5068   
    51     // update info destination
    52     signal_dest->_connect_from_signal = signal_src;
    53     signal_dest->_is_map_as_dest      = true;
    54 
    5569    // an internal signal and port can't be a source.
    5670    // 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
    6280
    6381    // vhdl_testbench : to read an output producte by a internal component
     
    6684        (signal_src ->_direction == OUT))
    6785      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);
    7090
    7191    log_printf(FUNC,Behavioural,FUNCTION,"End");
Note: See TracChangeset for help on using the changeset viewer.