source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_signal_internal.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: 2.4 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/include/Component.h"
9
10namespace morpheo              {
11namespace behavioural          {
12
13#undef  FUNCTION
14#define FUNCTION "Component::signal_internal"
15  Signal * Component::signal_internal (Entity * entity_productor,
16                                       Signal * signal_productor)
17  {
18    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
19
20    // create name of internal's signal
21    string str_entity = entity_productor->get_name();
22    string str_signal = signal_productor->get_name();
23   
24    UpperCase (str_entity);
25    UpperCase (str_signal);
26   
27    string name_internal = "internal_"+str_entity+"_"+str_signal;
28   
29    // test if internal's signal exist ... else, create
30    Signal * signal_internal = _entity->find_signal (name_internal);
31   
32    if (signal_internal == NULL)
33      {
34        // signal don't exist ... create
35        log_printf(TRACE,Behavioural,FUNCTION, " * Create an internal signal : \"%s\".",name_internal.c_str());
36       
37        Interface * interface = _entity->find_interface("");
38       
39        if (interface == NULL)
40          throw (ErrorMorpheo ("<Component::port_map> Component \""+_entity->get_name()+"\", doesn't have an interface \"\"."));
41       
42        string signame = entity_productor->get_name()+"_"+signal_productor->get_name();
43       
44        // Signal's creation
45        switch (signal_productor->get_type_info())
46          {
47          case BOOL     : 
48            {
49              interface->set_signal_internal<bool    >(signame, signal_productor->get_size());
50              break;
51            }
52          case UINT8_T  :
53            {
54              interface->set_signal_internal<uint8_t >(signame, signal_productor->get_size());
55              break;
56            }
57          case UINT16_T :
58            {
59              interface->set_signal_internal<uint16_t>(signame, signal_productor->get_size());
60              break;
61            }
62          case UINT32_T :
63            {
64              interface->set_signal_internal<uint32_t>(signame, signal_productor->get_size());
65              break;
66            }
67          case UINT64_T :
68            {
69              interface->set_signal_internal<uint64_t>(signame, signal_productor->get_size());
70              break;
71            }
72          default       :
73            throw (ErrorMorpheo ("Signal \""+name_internal+"\" : type unknow."));
74          }
75       
76        signal_internal = _entity->find_signal (name_internal);
77       
78        if (signal_internal == NULL)
79          throw (ErrorMorpheo ("Signal \""+name_internal+"\" : error in creation of internal's signal."));
80      }
81
82    log_printf(FUNC,Behavioural,FUNCTION,"End");
83
84    return signal_internal;
85  };
86
87}; // end namespace behavioural         
88}; // end namespace morpheo             
89
Note: See TracBrowser for help on using the repository browser.