source: trunk/IPs/systemC/Environment/src/Environment_genMoore.cpp @ 113

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

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 4.3 KB
Line 
1#include "../include/Environment.h"
2
3using namespace morpheo;
4
5namespace environment {
6
7  void Environment::genMoore (void)
8  {
9    //Scan all entity and for each entity scan all port
10    for (uint32_t i = 0; i < param->nb_entity; i++)
11      {
12        //=============================================================================
13        //===== [ ICACHE ]=============================================================
14        //=============================================================================
15       
16        //-----------------------------------------------------------------------------
17        //----- [ Request ]------------------------------------------------------------
18        //-----------------------------------------------------------------------------
19        {
20          uint32_t nb_slot_free = component_buffer_irsp [i]->nb_slot_free ();
21          for (uint32_t j=0; j<param->icache_dedicated_nb_port [i]; j ++)
22            {
23              icache_req_ack [i][j] = (j < nb_slot_free);
24              ICACHE_REQ_ACK [i][j]->write (icache_req_ack [i][j]);
25            }
26        }
27
28        //-----------------------------------------------------------------------------
29        //----- [ Respons ]------------------------------------------------------------
30        //-----------------------------------------------------------------------------
31        {
32          for (uint32_t j = 0; j < param->icache_dedicated_nb_port [i]; j ++)
33            {
34              // Test the number of element in the respons's buffer
35              if (j >= component_buffer_irsp [i]->nb_slot_use())
36                {
37                  icache_rsp_val [i][j] = 0; // No respons
38                }
39              else
40                {
41                  queue::slot_t<irsp_t*> slot = component_buffer_irsp [i]->read(j);
42                 
43                  bool val = (slot._delay == 0);
44
45                  icache_rsp_val [i][j] = (val); // respons if have a result
46
47                  if (val)
48                    {
49                      ICACHE_RSP_CONTEXT_ID [i][j]->write(slot._data->trdid); // TODO : test if exist
50                      ICACHE_RSP_PACKET_ID  [i][j]->write(slot._data->pktid); // TODO : test if exist
51                      ICACHE_RSP_ERROR      [i][j]->write(slot._data->error);
52                     
53                      for (uint32_t k = 0; k < param->iaccess_nb_instruction[i]; k ++)
54                        {
55                          Ticache_instruction_t data = 0;
56                         
57                          atoi (slot._data->data[k], data, param->iaccess_size_instruction[i]/8);
58                         
59                          ICACHE_RSP_INSTRUCTION [i][j][k]->write(data);
60                        }
61                    }
62                }
63
64              ICACHE_RSP_VAL [i][j]->write (icache_rsp_val [i][j]);
65            }
66        }
67       
68        //=============================================================================
69        //===== [ DCACHE ]=============================================================
70        //=============================================================================
71       
72        //-----------------------------------------------------------------------------
73        //----- [ Request ]------------------------------------------------------------
74        //-----------------------------------------------------------------------------
75        {
76          uint32_t nb_slot_free = component_buffer_drsp [i]->nb_slot_free ();
77          for (uint32_t j = 0; j < param->dcache_dedicated_nb_port [i]; j ++)
78            {
79              dcache_req_ack [i][j] = (j < nb_slot_free);
80              DCACHE_REQ_ACK [i][j]->write (dcache_req_ack [i][j]);
81            }
82        }
83       
84        //-----------------------------------------------------------------------------
85        //----- [ Respons ]------------------------------------------------------------
86        //-----------------------------------------------------------------------------
87        {
88          for (uint32_t j = 0; j < param->dcache_dedicated_nb_port [i]; j ++)
89            {
90              // Test the number of element in the respons's buffer
91              if (j >= component_buffer_drsp [i]->nb_slot_use())
92                {
93                  dcache_rsp_val [i][j] = 0; // No respons
94                }
95              else
96                {
97                  queue::slot_t<drsp_t*> slot = component_buffer_drsp [i]->read(j);
98
99                  bool val = (slot._delay == 0); // respons if have a result
100                 
101                  dcache_rsp_val [i][j] = (val); // respons if have a result
102
103                  if (val)
104                    {
105                      DCACHE_RSP_CONTEXT_ID [i][j]->write(slot._data->trdid); // TODO : test if exist
106                      DCACHE_RSP_PACKET_ID  [i][j]->write(slot._data->pktid); // TODO : test if exist
107                      DCACHE_RSP_ERROR      [i][j]->write(slot._data->error);
108                     
109                      Tdcache_data_t data = 0;
110                      atoi (slot._data->data[0], data, param->daccess_size_data[i]/8);
111                     
112                      DCACHE_RSP_RDATA       [i][j]->write(data);
113                    }
114                }
115              DCACHE_RSP_VAL [i][j]->write (dcache_rsp_val [i][j]);
116            }
117        }
118      }
119  }
120
121};
Note: See TracBrowser for help on using the repository browser.