source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/src/Execute_queue_vhdl_declaration.cpp @ 98

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

1) Fix bug (read unit, RAT -> write in R0, SPR desallocation ...)
2) Change VHDL Execute_queue -> use Generic/Queue?
3) Complete document on VHDL generation
4) Add soc test

  • Property svn:keywords set to Id
File size: 6.0 KB
Line 
1#ifdef VHDL
2/*
3 * $Id: Execute_queue_vhdl_declaration.cpp 98 2008-12-31 10:18:08Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_execute_loop {
15namespace execute_loop {
16namespace multi_write_unit {
17namespace write_unit {
18namespace execute_queue {
19
20
21#undef  FUNCTION
22#define FUNCTION "Execute_queue::vhdl_declaration"
23  void Execute_queue::vhdl_declaration (Vhdl * & vhdl)
24  {
25    log_printf(FUNC,Execute_queue,FUNCTION,"Begin");
26
27    vhdl->set_alias  ("internal_QUEUE_INSERT_VAL     ",1," in_EXECUTE_QUEUE_IN_VAL",std_logic_range(1));
28    vhdl->set_alias  ("internal_QUEUE_INSERT_ACK     ",1,"out_EXECUTE_QUEUE_IN_ACK",std_logic_range(1));
29    vhdl->set_signal ("internal_QUEUE_INSERT_DATA    ",_param->_size_internal_queue);
30    vhdl->set_signal ("internal_QUEUE_RETIRE_DATA    ",_param->_size_internal_queue);
31    vhdl->set_alias  ("internal_QUEUE_RETIRE_VAL     ",1,"out_EXECUTE_QUEUE_OUT_VAL",std_logic_range(1));
32    vhdl->set_alias  ("internal_QUEUE_RETIRE_ACK     ",1," in_EXECUTE_QUEUE_OUT_ACK",std_logic_range(1));
33
34    uint32_t min = 0;
35    uint32_t max, size;
36
37    if(_param->_have_port_context_id   )
38      {
39        size = _param->_size_context_id;
40        max = min-1+size;
41        vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_CONTEXT_ID           ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
42        min = max+1;
43      }
44    if(_param->_have_port_front_end_id   )
45      {
46        size = _param->_size_front_end_id;
47        max = min-1+size;
48        vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_FRONT_END_ID         ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
49        min = max+1;
50      }
51    if(_param->_have_port_ooo_engine_id   )
52      {
53        size = _param->_size_ooo_engine_id;
54        max = min-1+size;
55        vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_OOO_ENGINE_ID        ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
56        min = max+1;
57      }
58    if(_param->_have_port_rob_ptr)
59      {
60        size = _param->_size_rob_ptr;
61        max = min-1+size;
62        vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_PACKET_ID            ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
63        min = max+1;
64      }
65
66//  size = _param->_size_operation;
67//  max = min-1+size;
68//  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_OPERATION            ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
69//  min = max+1;
70//
71//  size = _param->_size_type;
72//  max = min-1+size;
73//  vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_TYPE                 ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
74//  min = max+1;
75
76    size = _param->_size_special_data;
77    max = min-1+size;
78    vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_FLAGS                ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
79    min = max+1;
80
81    size = _param->_size_exception;   
82    max = min-1+size;
83    vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_EXCEPTION            ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
84    min = max+1;
85
86    size = 1;
87    max = min-1+size;
88    vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_NO_SEQUENCE          ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
89    min = max+1;
90
91    size = _param->_size_instruction_address;
92    max = min-1+size;
93    vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_ADDRESS              ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
94    min = max+1;
95
96    size = _param->_size_general_data;
97    max = min-1+size;
98    vhdl->set_alias ("internal_EXECUTE_QUEUE_OUT_DATA                 ",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
99    min = max+1;
100
101
102//     for (uint32_t i=0; i<_param->_size_queue; ++i)
103//       {
104//      if (_param->_have_port_context_id)
105//      vhdl->set_signal("reg_CONTEXT_ID_"+toString(i),_param->_size_context_id);
106//      if (_param->_have_port_front_end_id)
107//      vhdl->set_signal("reg_FRONT_END_ID_"+toString(i),_param->_size_front_end_id);
108//      if (_param->_have_port_ooo_engine_id)
109//      vhdl->set_signal("reg_OOO_ENGINE_ID_"+toString(i),_param->_size_ooo_engine_id);
110//      if (_param->_have_port_rob_ptr)
111//      vhdl->set_signal("reg_PACKET_ID_"+toString(i),_param->_size_rob_ptr);
112//      vhdl->set_signal("reg_FLAGS_"+toString(i),_param->_size_special_data);
113//      vhdl->set_signal("reg_EXCEPTION_"+toString(i),_param->_size_exception);
114//      vhdl->set_signal("reg_NO_SEQUENCE_"+toString(i),1);
115//      vhdl->set_signal("reg_ADDRESS_"+toString(i),_param->_size_instruction_address);
116//      vhdl->set_signal("reg_DATA_"+toString(i),_param->_size_general_data);
117//       }
118
119//     vhdl->set_signal("reg_CURRENT_STATE",_param->_size_queue+1);
120
121//     vhdl->set_signal("sig_NEXT_STATE",_param->_size_queue+1);
122
123//     for (uint32_t i=0; i<_param->_size_queue-1; ++i)
124//       {
125//      vhdl->set_signal("sig_WEN_"+toString(i),1);
126//      vhdl->set_signal("sig_SEL_"+toString(i),1);
127//       }
128//     vhdl->set_signal("sig_WEN_"+toString(_param->_size_queue - 1),1);
129
130//     vhdl->set_signal("sig_IN_ACK",1);
131//     vhdl->set_signal("sig_OUT_VAL",1);
132
133//    for (uint32_t i=0; i<_param->_size_queue+1; ++i)
134//       vhdl->set_constant("STATE_"+toString(i),_param->_size_queue+1,1<<i);
135
136    log_printf(FUNC,Execute_queue,FUNCTION,"End");
137  };
138
139}; // end namespace execute_queue
140}; // end namespace write_unit
141}; // end namespace multi_write_unit
142}; // end namespace execute_loop
143}; // end namespace multi_execute_loop
144}; // end namespace core
145
146}; // end namespace behavioural
147}; // end namespace morpheo             
148#endif
Note: See TracBrowser for help on using the repository browser.