source: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_vhdl_instance.cpp @ 43

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

Modif mineur : ajout d'info de débug

Release non stable

File size: 2.6 KB
Line 
1#ifdef VHDL
2/*
3 * $Id$
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/include/Component.h"
10
11namespace morpheo              {
12namespace behavioural          {
13
14#undef  FUNCTION
15#define FUNCTION "Component::vhdl_instance"
16  void Component::vhdl_instance (Vhdl * & vhdl)
17  {
18    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
19
20    uint32_t             cpt = 0;
21    map<Signal *,string> tab;
22
23    vhdl->set_library_work (_entity->get_name() + "_Pack");
24
25    // for each entity
26    list<Entity *>         * list_component = _list_component;
27    list<Entity *>::iterator i              = list_component->begin();
28    if (not list_component->empty())
29      {
30        while (i != list_component->end())
31          {
32            vhdl->set_library_work ((*i)->get_name() + "_Pack");
33
34            list<string> list_port_map;
35           
36            // for each interface
37            list<Interface_fifo *>         * list_interface = (*i)->get_interfaces_list()->get_interface_list();
38            list<Interface_fifo *>::iterator j              = list_interface->begin();
39            if (not list_interface->empty())
40              {
41                while (j != list_interface->end())
42                  {
43                    // for each signal
44                    list<Signal *>         * list_signal = (*j)->get_signal_list();
45                    list<Signal *>::iterator k           = list_signal->begin();
46                    if (not list_signal->empty())
47                      {
48                        while (k != list_signal->end())
49                          {
50                            // test if is connect with external interface or with an another component.
51                            Signal * signal_src  = (*k);
52                            if (signal_src->presence_vhdl () == true)
53                              {
54                                Signal * signal_dest = (*k)->get_signal_link();
55                                string   name_src    = signal_src->get_name();
56                                string   name_dest;
57                               
58                                if (_entity->find_signal(signal_dest) == false)
59                                  {
60                                    // find if signal is already link
61                                    map<Signal *,string>::iterator it = tab.find(signal_src); 
62                                    if (tab.find(signal_src) == tab.end())
63                                      {
64                                        // Create name
65                                        name_dest = "signal_"+toString(cpt++);
66                                       
67                                        tab [signal_src ] = name_dest;
68                                        tab [signal_dest] = name_dest;
69                                       
70                                        // Add a new signal
71                                        vhdl->set_signal (name_dest, signal_src->get_size());
72                                      }
73                                    else
74                                      name_dest = (*it).second;
75                                  }
76                                else
77                                  name_dest = signal_dest->get_name();
78                               
79                                vhdl->set_body_component_port_map (list_port_map, name_src, name_dest);
80                              }
81                            ++k;
82                          }
83                      }
84                    ++j;
85                  }
86              }
87            vhdl->set_body_component ("instance_"+(*i)->get_name(),(*i)->get_name(),list_port_map);
88            ++i;
89          }
90      }
91    log_printf(FUNC,Behavioural,FUNCTION,"End");
92  };
93
94}; // end namespace behavioural
95}; // end namespace morpheo
96#endif
Note: See TracBrowser for help on using the repository browser.