source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.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: 4.7 KB
Line 
1#ifdef SYSTEMC
2//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
3/*
4 * $Id$
5 *
6 * [ Description ]
7 *
8 */
9
10#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h"
11
12namespace morpheo                    {
13namespace behavioural {
14namespace core {
15namespace multi_execute_loop {
16namespace execute_loop {
17namespace multi_execute_unit {
18namespace execute_unit {
19namespace load_store_unit {
20
21
22#undef  FUNCTION
23#define FUNCTION "Load_store_unit::function_speculative_load_commit_genMoore"
24  void Load_store_unit::function_speculative_load_commit_genMoore (void)
25  {
26    log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
27
28    // ~~~~~[ Interface "memory_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
29
30    Tcontext_t         memory_out_context_id = 0;
31    Tpacket_t          memory_out_packet_id  = 0;
32    Tcontrol_t         memory_out_write_rd   = 0;
33    Tgeneral_address_t memory_out_num_reg_rd = 0;
34    Tgeneral_data_t    memory_out_data_rd    = 0;
35//  Tcontrol_t         memory_out_write_re   = 0;
36//  Tspecial_address_t memory_out_num_reg_re = 0;
37//  Tspecial_data_t    memory_out_data_re    = 0;
38    Texception_t       memory_out_exception  = 0;
39
40    internal_MEMORY_OUT_VAL          = 0;
41
42    // Test store and load queue
43    // TODO : il faut d'abord tester si un elment de l'access queue n'est pas commitable !!!!!!!
44
45    // Test an store must be commited.
46    if (_store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._state == STORE_QUEUE_COMMIT)
47      {
48        internal_MEMORY_OUT_VAL          = 1;
49        internal_MEMORY_OUT_SELECT_QUEUE = SELECT_STORE_QUEUE;
50       
51        memory_out_context_id= _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._context_id;
52        memory_out_packet_id = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._packet_id ;
53//      memory_out_write_rd 
54//      memory_out_num_reg_rd
55//      memory_out_data_rd   
56        memory_out_exception = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._exception;
57      }
58
59    // write output
60    PORT_WRITE(out_MEMORY_OUT_VAL       , internal_MEMORY_OUT_VAL);
61
62    PORT_WRITE(out_MEMORY_OUT_CONTEXT_ID, memory_out_context_id);
63    PORT_WRITE(out_MEMORY_OUT_PACKET_ID , memory_out_packet_id );
64    PORT_WRITE(out_MEMORY_OUT_WRITE_RD  , memory_out_write_rd  );
65    PORT_WRITE(out_MEMORY_OUT_NUM_REG_RD, memory_out_num_reg_rd);
66    PORT_WRITE(out_MEMORY_OUT_DATA_RD   , memory_out_data_rd   );
67//  PORT_WRITE(out_MEMORY_OUT_WRITE_RE  , memory_out_write_re  );
68//  PORT_WRITE(out_MEMORY_OUT_NUM_REG_RE, memory_out_num_reg_re);
69//  PORT_WRITE(out_MEMORY_OUT_DATA_RE   , memory_out_data_re   );
70    PORT_WRITE(out_MEMORY_OUT_EXCEPTION , memory_out_exception );
71
72    // ~~~~~[ Interface "dache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
73
74    Tcontext_t        dcache_req_context_id;
75    Tpacket_t         dcache_req_packet_id ;
76    Tdcache_address_t dcache_req_address   ;
77    Tdcache_type_t    dcache_req_type      ;
78    Tcontrol_t        dcache_req_uncached  ;
79    Tdcache_data_t    dcache_req_wdata     ;
80
81    internal_DCACHE_REQ_VAL          = 0;
82
83    // Test store and load queue
84
85    // TODO : il faut d'abord tester si un elment de l'access queue n'est pas commitable !!!!!!!
86
87    // Test an store must be commited.
88    if (_store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._state == STORE_QUEUE_VALID_NO_SPECULATIVE)
89      {
90        internal_DCACHE_REQ_VAL          = 1;
91        internal_DCACHE_REQ_SELECT_QUEUE = SELECT_STORE_QUEUE;
92
93        dcache_req_context_id = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._context_id;
94        dcache_req_packet_id  = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._packet_id ;
95        dcache_req_address    = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._address   ;
96        dcache_req_type       = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._dcache_type;
97        dcache_req_uncached   = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._uncached  ;
98        dcache_req_wdata      = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._wdata     ;
99      }
100
101    PORT_WRITE(out_DCACHE_REQ_VAL       , internal_DCACHE_REQ_VAL);
102    PORT_WRITE(out_DCACHE_REQ_CONTEXT_ID, dcache_req_context_id);
103    PORT_WRITE(out_DCACHE_REQ_PACKET_ID , dcache_req_packet_id );
104    PORT_WRITE(out_DCACHE_REQ_ADDRESS   , dcache_req_address   );
105    PORT_WRITE(out_DCACHE_REQ_TYPE      , dcache_req_type      );
106    PORT_WRITE(out_DCACHE_REQ_UNCACHED  , dcache_req_uncached  );
107    PORT_WRITE(out_DCACHE_REQ_WDATA     , dcache_req_wdata     );
108   
109    log_printf(FUNC,Load_store_unit,FUNCTION,"End");
110  };
111
112}; // end namespace load_store_unit
113}; // end namespace execute_unit
114}; // end namespace multi_execute_unit
115}; // end namespace execute_loop
116}; // end namespace multi_execute_loop
117}; // end namespace core
118
119}; // end namespace behavioural
120}; // end namespace morpheo             
121#endif
122//#endif
Note: See TracBrowser for help on using the repository browser.