[62] | 1 | /* |
---|
| 2 | * $Id: Component_signal_internal.cpp 81 2008-04-15 18:40:01Z rosiere $ |
---|
| 3 | * |
---|
| 4 | * [ Description ] |
---|
| 5 | * |
---|
| 6 | */ |
---|
| 7 | |
---|
| 8 | #include "Behavioural/include/Component.h" |
---|
| 9 | |
---|
| 10 | namespace morpheo { |
---|
| 11 | namespace 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 |
---|
[75] | 21 | std::string str_entity = entity_productor->get_name(); |
---|
| 22 | std::string str_signal = signal_productor->get_name(); |
---|
[62] | 23 | |
---|
| 24 | UpperCase (str_entity); |
---|
| 25 | UpperCase (str_signal); |
---|
| 26 | |
---|
[75] | 27 | std::string name_internal = "internal_"+str_entity+"_"+str_signal; |
---|
[62] | 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 | |
---|
[75] | 42 | std::string signame = entity_productor->get_name()+"_"+signal_productor->get_name(); |
---|
[62] | 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 | |
---|