source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_body.cpp @ 135

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

1) Add Vhdl component
2) Inhib VHDL Seltest interface

  • Property svn:keywords set to Id
File size: 24.5 KB
Line 
1#ifdef VHDL
2/*
3 * $Id: Decod_queue_vhdl_body.cpp 135 2009-07-17 08:59:05Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace decod_unit {
17namespace decod_queue {
18
19
20#undef  FUNCTION
21#define FUNCTION "Decod_queue::vhdl_body"
22  void Decod_queue::vhdl_body (Vhdl * & vhdl)
23  {
24    log_begin(Decod_queue,FUNCTION);
25
26    vhdl->set_body(0,"");
27    vhdl->set_comment(0,"-----------------------------------");
28    vhdl->set_comment(0,"-- Instance queue                  ");
29    vhdl->set_comment(0,"-----------------------------------");
30    vhdl->set_body(0,"");
31
32    vhdl->set_body   (0,"instance_"+_name+"_queue : "+_name+"_queue");
33    vhdl->set_body   (0,"port map (");
34    vhdl->set_body   (1,"  in_CLOCK => in_CLOCK ");
35    vhdl->set_body   (1,", in_NRESET => in_NRESET");
36    vhdl->set_body   (1,", in_INSERT_VAL => internal_QUEUE_INSERT_VAL");
37    vhdl->set_body   (1,",out_INSERT_ACK => internal_QUEUE_INSERT_ACK");
38    vhdl->set_body   (1,", in_INSERT_DATA => internal_QUEUE_INSERT_DATA");
39    vhdl->set_body   (1,",out_RETIRE_VAL => internal_QUEUE_RETIRE_VAL");
40    vhdl->set_body   (1,", in_RETIRE_ACK => internal_QUEUE_RETIRE_ACK");
41    vhdl->set_body   (1,",out_RETIRE_DATA => internal_QUEUE_RETIRE_DATA");
42    vhdl->set_body   (0,");");
43
44    vhdl->set_body(0,"");
45    vhdl->set_comment(0,"-----------------------------------");
46    vhdl->set_comment(0,"-- Entree Queue                    ");
47    vhdl->set_comment(0,"-----------------------------------");
48    vhdl->set_body(0,"");
49
50    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
51
52      vhdl->set_body(0,"");
53      vhdl->set_comment(0,"-----------------------------------");
54      vhdl->set_comment(0,"-- Instruction "+toString(i)+"                   ");
55      vhdl->set_comment(0,"-----------------------------------");
56      vhdl->set_body(0,"");
57
58      if(_param->_have_port_context_id) vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_CONTEXT_ID <= in_DECOD_IN_"+toString(i)+"_CONTEXT_ID ;");
59      if(_param->_have_port_depth) vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_DEPTH <= in_DECOD_IN_"+toString(i)+"_DEPTH ;");
60      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_TYPE <= in_DECOD_IN_"+toString(i)+"_TYPE ;");
61      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_OPERATION <= in_DECOD_IN_"+toString(i)+"_OPERATION ;");
62      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_NO_EXECUTE <= in_DECOD_IN_"+toString(i)+"_NO_EXECUTE ;");
63      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_IS_DELAY_SLOT <= in_DECOD_IN_"+toString(i)+"_IS_DELAY_SLOT ;");
64#ifdef DEBUG
65      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_ADDRESS <= in_DECOD_IN_"+toString(i)+"_ADDRESS ;");
66#endif
67      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_ADDRESS_NEXT <= in_DECOD_IN_"+toString(i)+"_ADDRESS_NEXT ;");
68      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_HAS_IMMEDIAT <= in_DECOD_IN_"+toString(i)+"_HAS_IMMEDIAT ;");
69      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_IMMEDIAT <= in_DECOD_IN_"+toString(i)+"_IMMEDIAT ;");
70      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_READ_RA <= in_DECOD_IN_"+toString(i)+"_READ_RA ;");
71      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_NUM_REG_RA <= in_DECOD_IN_"+toString(i)+"_NUM_REG_RA ;");
72      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_READ_RB <= in_DECOD_IN_"+toString(i)+"_READ_RB ;");
73      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_NUM_REG_RB <= in_DECOD_IN_"+toString(i)+"_NUM_REG_RB ;");
74      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_READ_RC <= in_DECOD_IN_"+toString(i)+"_READ_RC ;");
75      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_NUM_REG_RC <= in_DECOD_IN_"+toString(i)+"_NUM_REG_RC ;");
76      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_WRITE_RD <= in_DECOD_IN_"+toString(i)+"_WRITE_RD ;");
77      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_NUM_REG_RD <= in_DECOD_IN_"+toString(i)+"_NUM_REG_RD ;");
78      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_WRITE_RE <= in_DECOD_IN_"+toString(i)+"_WRITE_RE ;");
79      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_NUM_REG_RE <= in_DECOD_IN_"+toString(i)+"_NUM_REG_RE ;");
80      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_EXCEPTION_USE <= in_DECOD_IN_"+toString(i)+"_EXCEPTION_USE ;");
81      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_EXCEPTION <= in_DECOD_IN_"+toString(i)+"_EXCEPTION ;");
82      vhdl->set_body(0,"internal_DECOD_IN_"+toString(i)+"_VAL <= in_DECOD_IN_"+toString(i)+"_VAL ;");
83      vhdl->set_body(0,"out_DECOD_IN_"+toString(i)+"_ACK <= internal_QUEUE_INSERT_ACK ;");
84    }
85
86    vhdl->set_body(0,"");
87
88    vhdl->set_body(0,"internal_QUEUE_INSERT_VAL <= '0'");
89    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
90      vhdl->set_body(1," OR internal_DECOD_IN_"+toString(i)+"_VAL");
91    }
92    vhdl->set_body(1,";");
93
94    vhdl->set_body(0,"");
95
96    if(_param->_have_port_context_id){
97      if(_param->_size_nb_inst_decod < 2){
98        for(uint32_t i_context=0;i_context < _param->_nb_context;i_context++)
99          vhdl->set_body(0,"internal_NB_INST_"+toString(i_context)+"_ALL <= ( reg_NB_INST_"+toString(i_context)+"_ALL OR ( internal_DECOD_IN_0_VAL AND ( internal_QUEUE_INSERT_ACK AND internal_DECOD_OUT_0_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" ))) AND ( NOT ( internal_OUT_DECOD_OUT_0_VAL AND ( internal_DECOD_OUT_0_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" AND ( NOT internal_DECOD_OUT_0_VAL ))));");
100      }
101      else{
102        for(uint32_t i_context=0;i_context < _param->_nb_context;i_context++){
103         
104          for(uint32_t i_inst=0;i_inst < _param->_nb_inst_decod;i_inst++){
105            vhdl->set_body(0,"internal_NB_INST_OUT_"+toString(i_context)+"_"+toString(i_inst)+"_CONTEXT <= "+std_logic_conv(_param->_size_nb_inst_decod,1)+" WHEN( internal_DECOD_OUT_"+toString(i_inst)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" AND internal_OUT_DECOD_OUT_"+toString(i_inst)+"_VAL = '1' AND internal_DECOD_OUT_"+toString(i_inst)+"_VAL = '0' ) ELSE "+std_logic_conv(_param->_size_nb_inst_decod,0)+";");
106            vhdl->set_body(0,"internal_NB_INST_IN_"+toString(i_context)+"_"+toString(i_inst)+"_CONTEXT <= "+std_logic_conv(_param->_size_nb_inst_decod,1)+" WHEN( internal_DECOD_IN_"+toString(i_inst)+"_VAL = '1' AND internal_QUEUE_INSERT_ACK = '1' AND internal_DECOD_IN_"+toString(i_inst)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" ) ELSE "+std_logic_conv(_param->_size_nb_inst_decod,0)+";");
107          }
108         
109          vhdl->set_body(0,"");
110         
111          vhdl->set_body(0,"internal_NB_INST_"+toString(i_context)+"_ALL <= reg_NB_INST_"+toString(i_context)+"_ALL");
112         
113          for(uint32_t i_inst=0;i_inst < _param->_nb_inst_decod;i_inst++){
114            vhdl->set_body(1,"+ internal_NB_INST_IN_"+toString(i_context)+"_"+toString(i_inst)+"_CONTEXT");
115            vhdl->set_body(1,"- internal_NB_INST_OUT_"+toString(i_context)+"_"+toString(i_inst)+"_CONTEXT");
116          }
117          vhdl->set_body(1,";");
118        }
119      }
120    }
121    else{
122      if(_param->_size_nb_inst_decod < 2) vhdl->set_body(0,"internal_NB_INST_0_ALL <= ( reg_NB_INST_0_ALL OR ( internal_DECOD_IN_0_VAL AND internal_QUEUE_INSERT_ACK )) AND ( NOT ( internal_OUT_DECOD_OUT_0_VAL AND ( NOT internal_DECOD_OUT_0_VAL )));");
123      else{
124        for(uint32_t i_inst=0;i_inst < _param->_nb_inst_decod;i_inst++){
125          vhdl->set_body(0,"internal_NB_INST_OUT_0_"+toString(i_inst)+"_CONTEXT <= "+std_logic_conv(_param->_size_nb_inst_decod,1)+" WHEN(( internal_OUT_DECOD_OUT_"+toString(i_inst)+"_VAL = '1' ) AND internal_DECOD_OUT_"+toString(i_inst)+"_VAL = '0' ) ELSE "+std_logic_conv(_param->_size_nb_inst_decod,0)+";");
126          vhdl->set_body(0,"internal_NB_INST_IN_0_"+toString(i_inst)+"_CONTEXT <= "+std_logic_conv(_param->_size_nb_inst_decod,1)+" WHEN( internal_DECOD_IN_"+toString(i_inst)+"_VAL = '1' AND internal_QUEUE_INSERT_ACK = '1' ) ELSE "+std_logic_conv(_param->_size_nb_inst_decod,0)+";");
127        }
128       
129        vhdl->set_body(0,"");
130       
131        vhdl->set_body(0,"internal_NB_INST_0_ALL <= reg_NB_INST_0_ALL");
132        for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
133          vhdl->set_body(1," + internal_NB_INST_IN_0_"+toString(i)+"_CONTEXT");
134          vhdl->set_body(1," - internal_NB_INST_OUT_0_"+toString(i)+"_CONTEXT");
135        }
136        vhdl->set_body(1,";");
137      }
138    }
139
140    vhdl->set_body(0,"");
141    vhdl->set_comment(0,"-----------------------------------");
142    vhdl->set_comment(0,"-- Sortie Queue                    ");
143    vhdl->set_comment(0,"-----------------------------------");
144    vhdl->set_body(0,"");
145
146    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
147
148      vhdl->set_body(0,"");
149      vhdl->set_comment(0,"-----------------------------------");
150      vhdl->set_comment(0,"-- Instruction "+toString(i)+"                   ");
151      vhdl->set_comment(0,"-----------------------------------");
152      vhdl->set_body(0,"");
153
154      if(_param->_have_port_context_id){
155        vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_CONTEXT_ID <= internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID");
156        for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
157         
158          vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_CONTEXT_ID ");
159        }
160        vhdl->set_body(0," ;");
161      }
162      if(_param->_have_port_depth){
163        vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_DEPTH <= internal_DECOD_OUT_"+toString(i)+"_DEPTH");
164        for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
165         
166          vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_DEPTH ");
167        }
168        vhdl->set_body(0," ;");
169      }
170      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_TYPE <= internal_DECOD_OUT_"+toString(i)+"_TYPE");
171      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
172       
173        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_TYPE ");
174      }
175      vhdl->set_body(0," ;");
176      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_OPERATION <= internal_DECOD_OUT_"+toString(i)+"_OPERATION");
177      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
178       
179        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_OPERATION ");
180      }
181      vhdl->set_body(0," ;");
182      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_NO_EXECUTE <= internal_DECOD_OUT_"+toString(i)+"_NO_EXECUTE");
183      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
184       
185        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_NO_EXECUTE ");
186      }
187      vhdl->set_body(0," ;");
188      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_IS_DELAY_SLOT <= internal_DECOD_OUT_"+toString(i)+"_IS_DELAY_SLOT");
189      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
190       
191        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_IS_DELAY_SLOT ");
192      }
193      vhdl->set_body(0," ;");
194#ifdef DEBUG
195      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_ADDRESS <= internal_DECOD_OUT_"+toString(i)+"_ADDRESS");
196      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
197       
198        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_ADDRESS ");
199      }
200      vhdl->set_body(0," ;");
201#endif
202      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_ADDRESS_NEXT <= internal_DECOD_OUT_"+toString(i)+"_ADDRESS_NEXT");
203      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
204       
205        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_ADDRESS_NEXT ");
206      }
207      vhdl->set_body(0," ;");
208      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_HAS_IMMEDIAT <= internal_DECOD_OUT_"+toString(i)+"_HAS_IMMEDIAT");
209      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
210       
211        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_HAS_IMMEDIAT ");
212      }
213      vhdl->set_body(0," ;");
214      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_IMMEDIAT <= internal_DECOD_OUT_"+toString(i)+"_IMMEDIAT");
215      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
216       
217        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_IMMEDIAT ");
218      }
219      vhdl->set_body(0," ;");
220      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_READ_RA <= internal_DECOD_OUT_"+toString(i)+"_READ_RA");
221      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
222       
223        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_READ_RA ");
224      }
225      vhdl->set_body(0," ;");
226      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RA <= internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RA");
227      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
228       
229        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_NUM_REG_RA ");
230      }
231      vhdl->set_body(0," ;");
232      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_READ_RB <= internal_DECOD_OUT_"+toString(i)+"_READ_RB");
233      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
234       
235        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_READ_RB ");
236      }
237      vhdl->set_body(0," ;");
238      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RB <= internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RB");
239      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
240       
241        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_NUM_REG_RB ");
242      }
243      vhdl->set_body(0," ;");
244      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_READ_RC <= internal_DECOD_OUT_"+toString(i)+"_READ_RC");
245      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
246       
247        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_READ_RC ");
248      }
249      vhdl->set_body(0," ;");
250      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RC <= internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RC");
251      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
252       
253        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_NUM_REG_RC ");
254      }
255      vhdl->set_body(0," ;");
256      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_WRITE_RD <= internal_DECOD_OUT_"+toString(i)+"_WRITE_RD");
257      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
258       
259        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_WRITE_RD ");
260      }
261      vhdl->set_body(0," ;");
262      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RD <= internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RD");
263      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
264       
265        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_NUM_REG_RD ");
266      }
267      vhdl->set_body(0," ;");
268      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_WRITE_RE <= internal_DECOD_OUT_"+toString(i)+"_WRITE_RE");
269      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
270       
271        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_WRITE_RE ");
272      }
273      vhdl->set_body(0," ;");
274      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_NUM_REG_RE <= internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RE");
275      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
276       
277        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_NUM_REG_RE ");
278      }
279      vhdl->set_body(0," ;");
280      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_EXCEPTION_USE <= internal_DECOD_OUT_"+toString(i)+"_EXCEPTION_USE");
281      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
282       
283        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod+1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_EXCEPTION_USE ");
284      }
285      vhdl->set_body(0," ;");
286      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_EXCEPTION <= internal_DECOD_OUT_"+toString(i)+"_EXCEPTION");
287      for(uint32_t cp = i;cp < _param->_nb_inst_decod - 1;cp++){
288       
289        vhdl->set_body(1," WHEN( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod + 1,cp*2 + 1)+") ELSE internal_DECOD_OUT_"+toString(cp + 1)+"_EXCEPTION ");
290      }
291      vhdl->set_body(0," ;");
292
293      vhdl->set_body(0,"");
294
295      if(_param->_have_port_depth){
296        if(_param->_have_port_context_id){
297         
298          vhdl->set_body(0,"internal_DECOD_"+toString(i)+"_VALID <= '1' WHEN(( in_DEPTH_0_FULL = '1' AND internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,0)+" ) ");
299          for(uint32_t i_context = 1;i_context < _param->_nb_context;i_context++)
300            vhdl->set_body(2," OR ( in_DEPTH_"+toString(i_context)+"_FULL = '1' AND internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" ) ");
301         
302          vhdl->set_body(1," ) ELSE '1' WHEN(( in_DEPTH_0_MIN = in_DEPTH_0_MAX AND internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,0)+" ) ");
303          for(uint32_t i_context = 1;i_context < _param->_nb_context;i_context++)
304            vhdl->set_body(2," OR ( in_DEPTH_"+toString(i_context)+"_MIN = in_DEPTH_"+toString(i_context)+"_MAX AND internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" ) ");
305         
306          vhdl->set_body(1," ) ELSE '1' WHEN((( internal_DECOD_OUT_"+toString(i)+"_DEPTH > in_DEPTH_0_MIN ) AND ( internal_DECOD_OUT_"+toString(i)+"_DEPTH < in_DEPTH_0_MAX ) AND ( in_DEPTH_0_MIN < in_DEPTH_0_MAX ) AND ( internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,0)+" )) ");
307          for(uint32_t i_context = 1;i_context < _param->_nb_context;i_context++)
308            vhdl->set_body(2," OR (( internal_DECOD_OUT_"+toString(i)+"_DEPTH > in_DEPTH_"+toString(i_context)+"_MIN ) AND ( internal_DECOD_OUT_"+toString(i)+"_DEPTH < in_DEPTH_"+toString(i_context)+"_MAX ) AND ( in_DEPTH_"+toString(i_context)+"_MIN < in_DEPTH_"+toString(i_context)+"_MAX ) AND internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" ) ");
309         
310          vhdl->set_body(1," ) ELSE '1' WHEN(((( internal_DECOD_OUT_"+toString(i)+"_DEPTH > in_DEPTH_0_MAX ) OR ( internal_DECOD_OUT_"+toString(i)+"_DEPTH < in_DEPTH_0_MIN )) AND ( in_DEPTH_0_MIN > in_DEPTH_0_MAX ) AND ( internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,0)+" ))");
311          for(uint32_t i_context = 1;i_context < _param->_nb_context;i_context++)
312            vhdl->set_body(2," OR ((( internal_DECOD_OUT_"+toString(i)+"_DEPTH > in_DEPTH_"+toString(i_context)+"_MAX ) OR ( internal_DECOD_OUT_"+toString(i)+"_DEPTH < in_DEPTH_"+toString(i_context)+"_MIN )) AND ( in_DEPTH_"+toString(i_context)+"_MIN > in_DEPTH_"+toString(i_context)+"_MAX ) AND internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID = "+std_logic_conv(_param->_size_context_id,i_context)+" ) ");
313         
314          vhdl->set_body(1," ) ELSE '0' ;");
315        }
316        else{
317          vhdl->set_body(0,"internal_DECOD_"+toString(i)+"_VALID <= '1' WHEN( in_DEPTH_0_FULL = '1' ) ELSE '1' WHEN( in_DEPTH_0_MIN = in_DEPTH_0_MAX ) ELSE '1' WHEN(( internal_DECOD_OUT_"+toString(i)+"_DEPTH > in_DEPTH_0_MIN ) AND ( internal_DECOD_OUT_"+toString(i)+"_DEPTH < in_DEPTH_0_MAX ) AND ( in_DEPTH_0_MIN < in_DEPTH_0_MAX )) ELSE '1' WHEN((( internal_DECOD_OUT_"+toString(i)+"_DEPTH > in_DEPTH_0_MAX ) OR ( internal_DECOD_OUT_"+toString(i)+"_DEPTH < in_DEPTH_0_MIN )) AND ( in_DEPTH_0_MIN > in_DEPTH_0_MAX )) ELSE '0' ;");
318        }
319       
320        vhdl->set_body(0,"");
321       
322        vhdl->set_body(0,"internal_OUT_DECOD_OUT_"+toString(i)+"_VAL <= ( internal_QUEUE_OUT_"+toString(i)+"_VAL AND internal_QUEUE_RETIRE_VAL AND internal_DECOD_"+toString(i)+"_VALID ) WHEN( internal_QUEUE_NEW_HEAD = '1' ) ELSE reg_DECOD_OUT_"+toString(i)+"_VAL ;");
323      }
324      else vhdl->set_body(0,"internal_OUT_DECOD_OUT_"+toString(i)+"_VAL <= ( internal_QUEUE_OUT_"+toString(i)+"_VAL AND internal_QUEUE_RETIRE_VAL ) WHEN( internal_QUEUE_NEW_HEAD = '1' ) ELSE reg_DECOD_OUT_"+toString(i)+"_VAL ;");
325     
326      vhdl->set_body(0,"");
327     
328      vhdl->set_body(0,"internal_DECOD_OUT_"+toString(i)+"_VAL <= '0' WHEN(( in_DECOD_OUT_"+toString(i)+"_ACK = '1' ) AND ( internal_INDEX_"+toString(i)+" = "+std_logic_conv(_param->_size_nb_inst_decod + 1,i*2 + 1)+" ))");
329      for(uint32_t cp = 0;cp < i;cp++){
330       
331        vhdl->set_body(1," ELSE '0' WHEN(( in_DECOD_OUT_"+toString(cp)+"_ACK = '1' ) AND ( internal_INDEX_"+toString(cp)+" = "+std_logic_conv(_param->_size_nb_inst_decod + 1,i*2 + 1)+" ))");
332      }
333      vhdl->set_body(1," ELSE '1' WHEN( internal_OUT_DECOD_OUT_"+toString(i)+"_VAL = '1' ) ELSE '0' ;");
334
335      vhdl->set_body(0,"");
336
337      vhdl->set_body(0,"out_DECOD_OUT_"+toString(i)+"_VAL <= internal_INDEX_"+toString(i)+"(0) ;");
338
339      vhdl->set_body(0,"");
340
341      vhdl->set_body(0,"internal_INDEX_"+toString(i)+" <= ");
342      for(uint32_t cp = i;cp < _param->_nb_inst_decod;cp++){
343       
344        vhdl->set_body(1,std_logic_conv(_param->_size_nb_inst_decod + 1,cp*2 + 1)+" WHEN( internal_OUT_DECOD_OUT_"+toString(cp)+"_VAL = '1'");
345        for(uint32_t cp2 = 0;cp2 < i;cp2++){
346       
347          vhdl->set_body(2," AND NOT( internal_INDEX_"+toString(cp2)+" = "+std_logic_conv(_param->_size_nb_inst_decod + 1,cp*2 + 1)+" )");
348        }
349        vhdl->set_body(1," ) ELSE ");
350      }
351      vhdl->set_body(1,std_logic_conv(_param->_size_nb_inst_decod + 1,0)+" ;");
352    }
353
354    vhdl->set_body(0,"");
355
356    vhdl->set_body(0,"internal_QUEUE_NEW_HEAD <= NOT( '0'");
357    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
358      vhdl->set_body(1," OR reg_DECOD_OUT_"+toString(i)+"_VAL");
359    }
360    vhdl->set_body(1,");");
361
362    vhdl->set_body(0,"");
363
364    vhdl->set_body(0,"internal_QUEUE_RETIRE_ACK <= NOT( '0'");
365    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
366      vhdl->set_body(1," OR internal_DECOD_OUT_"+toString(i)+"_VAL");
367    }
368    vhdl->set_body(1,");");
369
370    vhdl->set_body(0,"");
371
372    for(uint32_t i=0;i < _param->_nb_context;i++){
373      vhdl->set_body(0,"out_NB_INST_"+toString(i)+"_ALL <= reg_NB_INST_"+toString(i)+"_ALL ;");
374    }
375
376    vhdl->set_body(0,"");
377    vhdl->set_comment(0,"-----------------------------------");
378    vhdl->set_comment(0,"-- Registers                       ");
379    vhdl->set_comment(0,"-----------------------------------");
380    vhdl->set_body(0,"");
381   
382    vhdl->set_body(0,"reg_DECOD_write: process (in_CLOCK)");
383    vhdl->set_body(0,"begin");
384    vhdl->set_body(1,"if in_CLOCK'event AND in_CLOCK = '1' then");
385    vhdl->set_body(2,"if in_NRESET = '0' then");
386   
387    for(uint32_t i=0;i < _param->_nb_context;i++){
388      vhdl->set_body(3,"reg_NB_INST_"+toString(i)+"_ALL <= "+std_logic_conv(_param->_size_nb_inst_decod,0)+";");
389    }
390    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
391      vhdl->set_body(3,"reg_DECOD_OUT_"+toString(i)+"_VAL <= '0';");
392    }
393
394    vhdl->set_body(2,"else");
395   
396    for(uint32_t i=0;i < _param->_nb_context;i++){
397      vhdl->set_body(3,"reg_NB_INST_"+toString(i)+"_ALL <= internal_NB_INST_"+toString(i)+"_ALL;");
398    } 
399    for(uint32_t i=0;i < _param->_nb_inst_decod;i++){
400      vhdl->set_body(3,"reg_DECOD_OUT_"+toString(i)+"_VAL <= internal_DECOD_OUT_"+toString(i)+"_VAL;");
401    }
402
403    vhdl->set_body(2,"end if;");
404    vhdl->set_body(1,"end if;");
405    vhdl->set_body(0,"end process reg_DECOD_write;");
406
407    log_end(Decod_queue,FUNCTION);
408  };
409
410}; // end namespace decod_queue
411}; // end namespace decod_unit
412}; // end namespace front_end
413}; // end namespace multi_front_end
414}; // end namespace core
415
416}; // end namespace behavioural
417}; // end namespace morpheo             
418#endif
Note: See TracBrowser for help on using the repository browser.