source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp @ 62

Last change on this file since 62 was 62, checked in by rosiere, 17 years ago

Modification en profondeur de Component-port_map.
Compilation ok pour Register_unit ... a tester (systemC et vhdl)

File size: 9.2 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/include/Signal.h"
9
10
11namespace morpheo              {
12namespace behavioural          {
13
14#undef  FUNCTION
15#define FUNCTION "Signal::connect"
16  void Signal::connect (Signal * signal_dest)
17  {
18    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
19   
20    cout << "connected : " << get_name() << "\twith " << signal_dest->get_name() << endl;
21   
22    if ((_direction == IN ) and (signal_dest->_direction == IN ))
23      switch (_type_info)
24        {
25        case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal_dest->_sc_signal))); break;}
26        case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal_dest->_sc_signal))); break;}
27        case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal_dest->_sc_signal))); break;}
28        case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal_dest->_sc_signal))); break;}
29        case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal_dest->_sc_signal))); break;}
30        default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
31        }
32    else
33      if ((_direction == IN ) and (signal_dest->_direction == OUT))
34        switch (_type_info)
35          {
36          case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal_dest->_sc_signal))); break;}
37          case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal_dest->_sc_signal))); break;}
38          case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal_dest->_sc_signal))); break;}
39          case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal_dest->_sc_signal))); break;}
40          case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal_dest->_sc_signal))); break;}
41          default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
42          }
43      else
44        if ((_direction == IN ) and (signal_dest->_direction == INTERNAL))
45          switch (_type_info)
46            {
47            case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_signal<bool    > *>(signal_dest->_sc_signal))); break;}
48            case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_signal<uint8_t > *>(signal_dest->_sc_signal))); break;}
49            case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint16_t> *>(signal_dest->_sc_signal))); break;}
50            case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint32_t> *>(signal_dest->_sc_signal))); break;}
51            case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint64_t> *>(signal_dest->_sc_signal))); break;}
52            default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
53            }
54        else
55          if ((_direction == OUT) and (signal_dest->_direction == IN ))
56            switch (_type_info)
57              {
58              case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal_dest->_sc_signal))); break;}
59              case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal_dest->_sc_signal))); break;}
60              case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal_dest->_sc_signal))); break;}
61              case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal_dest->_sc_signal))); break;}
62              case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal_dest->_sc_signal))); break;}
63              default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
64              }
65          else
66            if ((_direction == OUT) and (signal_dest->_direction == OUT))
67              switch (_type_info)
68                {
69                case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal_dest->_sc_signal))); break;}
70                case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal_dest->_sc_signal))); break;}
71                case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal_dest->_sc_signal))); break;}
72                case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal_dest->_sc_signal))); break;}
73                case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal_dest->_sc_signal))); break;}
74                default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
75                }
76            else
77              if ((_direction == OUT) and (signal_dest->_direction == INTERNAL))
78                switch (_type_info)
79                  {
80                  case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_signal<bool    > *>(signal_dest->_sc_signal))); break;}
81                  case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_signal<uint8_t > *>(signal_dest->_sc_signal))); break;}
82                  case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint16_t> *>(signal_dest->_sc_signal))); break;}
83                  case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint32_t> *>(signal_dest->_sc_signal))); break;}
84                  case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint64_t> *>(signal_dest->_sc_signal))); break;}
85                  default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
86                  }
87//            else
88//              if ((_direction == INTERNAL) and (signal_dest->_direction == IN ))
89//                switch (_type_info)
90//                  {
91//                  case BOOL     : {(*(static_cast<sc_signal<bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal_dest->_sc_signal))); break;}
92//                  case UINT8_T  : {(*(static_cast<sc_signal<uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal_dest->_sc_signal))); break;}
93//                  case UINT16_T : {(*(static_cast<sc_signal<uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal_dest->_sc_signal))); break;}
94//                  case UINT32_T : {(*(static_cast<sc_signal<uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal_dest->_sc_signal))); break;}
95//                  case UINT64_T : {(*(static_cast<sc_signal<uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal_dest->_sc_signal))); break;}
96//                  default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
97//                  }
98//              else
99//                if ((_direction == INTERNAL ) and (signal_dest->_direction == OUT))
100//                  switch (_type_info)
101//                    {
102//                    case BOOL     : {(*(static_cast<sc_signal<bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal_dest->_sc_signal))); break;}
103//                    case UINT8_T  : {(*(static_cast<sc_signal<uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal_dest->_sc_signal))); break;}
104//                    case UINT16_T : {(*(static_cast<sc_signal<uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal_dest->_sc_signal))); break;}
105//                    case UINT32_T : {(*(static_cast<sc_signal<uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal_dest->_sc_signal))); break;}
106//                    case UINT64_T : {(*(static_cast<sc_signal<uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal_dest->_sc_signal))); break;}
107//                    default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
108//                    }
109//                else
110//                  if ((_direction == INTERNAL ) and (signal_dest->_direction == INTERNAL))
111//                    switch (_type_info)
112//                      {
113//                      case BOOL     : {(*(static_cast<sc_signal<bool    > *>(_sc_signal))) (*(static_cast<sc_signal<bool    > *>(signal_dest->_sc_signal))); break;}
114//                      case UINT8_T  : {(*(static_cast<sc_signal<uint8_t > *>(_sc_signal))) (*(static_cast<sc_signal<uint8_t > *>(signal_dest->_sc_signal))); break;}
115//                      case UINT16_T : {(*(static_cast<sc_signal<uint16_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint16_t> *>(signal_dest->_sc_signal))); break;}
116//                      case UINT32_T : {(*(static_cast<sc_signal<uint32_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint32_t> *>(signal_dest->_sc_signal))); break;}
117//                      case UINT64_T : {(*(static_cast<sc_signal<uint64_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint64_t> *>(signal_dest->_sc_signal))); break;}
118//                      default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
119//                      }
120                    else
121                      throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" can't been connected with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(_direction)+" with "+toString(signal_dest->_direction)+")."));
122
123    log_printf(FUNC,Behavioural,FUNCTION,"End");
124  };
125
126}; // end namespace behavioural         
127}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.