source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_signal_internal.cpp @ 113

Last change on this file since 113 was 113, checked in by rosiere, 15 years ago

1) Add modelsim simulation systemC
2) Modelsim cosimulation systemC / VHDL is not finish !!!! (cf execute_queue and write_unit)
3) Add multi architecture
5) Add template for comparator, multiplier and divider
6) Change Message
Warning) Various test macro have change, many selftest can't compile

  • Property svn:keywords set to Id
File size: 3.1 KB
Line 
1/*
2 * $Id: Component_signal_internal.cpp 113 2009-04-14 18:39:12Z rosiere $
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                                       Entity * entity_consumer,
18                                       Signal * signal_consumer)
19  {
20    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
21
22    bool productor_is_cosimulation = usage_is_set(entity_productor->get_usage(),USE_COSIMULATION);
23    bool consumer_is_cosimulation  = usage_is_set(entity_consumer ->get_usage(),USE_COSIMULATION);
24    bool is_cosimulation           = consumer_is_cosimulation or productor_is_cosimulation;
25    if (productor_is_cosimulation and consumer_is_cosimulation)
26      throw ERRORMORPHEO (FUNCTION,toString(_("Entity \"%s\" and Entity \"%s\" use both cosimulation. It's not supported.\n"),entity_productor->get_name().c_str(),entity_consumer->get_name().c_str()));
27   
28    // create name of internal's signal
29    Entity * entity = (consumer_is_cosimulation)?entity_consumer:entity_productor;
30    Signal * signal = (consumer_is_cosimulation)?signal_consumer:signal_productor;
31
32    std::string str_entity = entity->get_name();
33    std::string str_signal = signal->get_name();
34   
35//     UpperCase (str_entity);
36//     UpperCase (str_signal);
37   
38    std::string name_internal = (is_cosimulation)?str_signal:("internal_"+str_entity+"_"+str_signal);
39   
40    // test if internal's signal exist ... else, create
41    Signal * signal_internal = _entity->find_signal (name_internal);
42   
43    if (signal_internal == NULL)
44      {
45        // signal don't exist ... create
46        log_printf(TRACE,Behavioural,FUNCTION, " * Create an internal signal : \"%s\".",name_internal.c_str());
47       
48        Interface * interface = _entity->find_interface("");
49       
50        if (interface == NULL)
51          throw ERRORMORPHEO (FUNCTION,toString(_("Component \"%s\", doesn't have an interface \"\".\n"),_entity->get_name().c_str()));
52
53//      std::string signame   = entity->get_name()+"_"+signal->get_name();
54        std::string signame   = name_internal;
55        type_info_t type_info = signal->get_type_info();
56
57        // Signal's creation
58        switch (type_info)
59          {
60          case BOOL     : interface->set_signal_internal<bool    >(signame, signal->get_size()); break;
61          case UINT8_T  : interface->set_signal_internal<uint8_t >(signame, signal->get_size()); break;
62          case UINT16_T : interface->set_signal_internal<uint16_t>(signame, signal->get_size()); break;
63          case UINT32_T : interface->set_signal_internal<uint32_t>(signame, signal->get_size()); break;
64          case UINT64_T : interface->set_signal_internal<uint64_t>(signame, signal->get_size()); break;
65          default       :throw (ErrorMorpheo ("Signal \""+name_internal+"\" : type unknow."));
66          }
67       
68        signal_internal = _entity->find_signal (name_internal);
69       
70        if (signal_internal == NULL)
71          throw (ErrorMorpheo ("Signal \""+name_internal+"\" : error in creation of internal's signal."));
72      }
73
74    log_printf(FUNC,Behavioural,FUNCTION,"End");
75
76    return signal_internal;
77  };
78
79}; // end namespace behavioural         
80}; // end namespace morpheo             
81
Note: See TracBrowser for help on using the repository browser.