Ignore:
Timestamp:
Jul 17, 2009, 10:59:05 AM (15 years ago)
Author:
rosiere
Message:

1) Add Vhdl component
2) Inhib VHDL Seltest interface

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl.cpp

    r82 r135  
    99#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
    1010#include "Behavioural/include/Vhdl.h"
     11#include "Behavioural/Generic/Queue/include/Queue.h"
    1112
    1213namespace morpheo                    {
     
    2425  {
    2526    log_begin(Decod_queue,FUNCTION);
     27
     28    //----- Queue -----
     29   
     30    morpheo::behavioural::generic::queue::Parameters * param_queue;
     31    morpheo::behavioural::generic::queue::Queue      * queue;
     32   
     33    param_queue = new morpheo::behavioural::generic::queue::Parameters
     34      (_param->_size_queue,
     35       _param->_size_internal_queue,
     36       0,
     37       false,
     38       false
     39       );
     40   
     41    std::string queue_name = _name + "_queue";
     42    queue = new morpheo::behavioural::generic::queue::Queue
     43      (queue_name.c_str()
     44#ifdef STATISTICS
     45       ,NULL
     46#endif
     47       ,param_queue
     48       ,USE_VHDL);
     49   
     50    _component->set_component(queue->_component
     51#ifdef POSITION
     52                              , 0, 0, 0, 0
     53#endif
     54                              , INSTANCE_LIBRARY
     55                              );
    2656
    2757    Vhdl * vhdl = new Vhdl (_name);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_body.cpp

    r82 r135  
    2323  {
    2424    log_begin(Decod_queue,FUNCTION);
    25     vhdl->set_body ("");
     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
    26407    log_end(Decod_queue,FUNCTION);
    27408  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_declaration.cpp

    r82 r135  
    2323  {
    2424    log_begin(Decod_queue,FUNCTION);
     25
     26    vhdl->set_signal ("internal_QUEUE_INSERT_DATA    ",_param->_size_internal_queue);
     27    vhdl->set_signal ("internal_QUEUE_RETIRE_DATA    ",_param->_size_internal_queue);
     28    vhdl->set_signal ("internal_QUEUE_INSERT_VAL     ",1);
     29    vhdl->set_signal ("internal_QUEUE_RETIRE_VAL     ",1);
     30    vhdl->set_signal ("internal_QUEUE_INSERT_ACK     ",1);
     31    vhdl->set_signal ("internal_QUEUE_RETIRE_ACK     ",1);
     32
     33    vhdl->set_signal ("internal_QUEUE_NEW_HEAD       ",1);
     34   
     35    uint32_t min = 0;
     36    uint32_t max, size;
     37
     38    for(uint32_t i = 0;i < _param->_nb_context;i++){
     39     
     40      vhdl->set_signal ("reg_NB_INST_"+toString(i)+"_ALL",_param->_size_nb_inst_decod);
     41      vhdl->set_signal ("internal_NB_INST_"+toString(i)+"_ALL",_param->_size_nb_inst_decod);
     42
     43      for(uint32_t i_inst = 0;i_inst < _param->_nb_inst_decod;i_inst++){
     44        vhdl->set_signal ("internal_NB_INST_IN_"+toString(i)+"_"+toString(i_inst)+"_CONTEXT",_param->_size_nb_inst_decod);
     45        vhdl->set_signal ("internal_NB_INST_OUT_"+toString(i)+"_"+toString(i_inst)+"_CONTEXT",_param->_size_nb_inst_decod);
     46      }
     47    }
     48   
     49    for(uint32_t i = 0;i < _param->_nb_inst_decod;i++){
     50      vhdl->set_signal ("reg_DECOD_OUT_"+toString(i)+"_VAL",1);
     51      vhdl->set_signal ("internal_DECOD_OUT_"+toString(i)+"_VAL",1);
     52      vhdl->set_signal ("internal_OUT_DECOD_OUT_"+toString(i)+"_VAL",1);
     53      vhdl->set_signal ("internal_DECOD_"+toString(i)+"_VALID",1);
     54      vhdl->set_signal ("internal_INDEX_"+toString(i),_param->_size_nb_inst_decod + 1);
     55     
     56      max = min;
     57
     58      if(_param->_have_port_context_id)
     59        {
     60          size = _param->_size_context_id;
     61          max = min-1+size;
     62          vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_CONTEXT_ID",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     63          vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_CONTEXT_ID",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     64          min = max+1;
     65        }
     66     
     67      if(_param->_have_port_depth)
     68        {
     69          size = _param->_size_depth;
     70          max = min-1+size;
     71          vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_DEPTH",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     72          vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_DEPTH",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     73          min = max+1;
     74        }
     75     
     76      size = _param->_size_type;
     77      max = min-1+size;
     78      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_TYPE",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     79      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_TYPE",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     80      min = max+1;
     81     
     82      size = _param->_size_operation;
     83      max = min-1+size;
     84      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_OPERATION",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     85      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_OPERATION",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     86      min = max+1;
     87     
     88      size = 1;
     89      max = min-1+size;
     90      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_NO_EXECUTE",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     91      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_NO_EXECUTE",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     92      min = max+1;
     93     
     94      size = 1;
     95      max = min-1+size;
     96      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_IS_DELAY_SLOT",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     97      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_IS_DELAY_SLOT",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     98      min = max+1;
     99     
     100#ifdef DEBUG
     101      size = _param->_size_instruction_address;
     102      max = min-1+size;
     103      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_ADDRESS",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     104      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_ADDRESS",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     105      min = max+1;
     106#endif
     107     
     108      size = _param->_size_instruction_address;
     109      max = min-1+size;
     110      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_ADDRESS_NEXT",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     111      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_ADDRESS_NEXT",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     112      min = max+1;
     113     
     114      size = 1;
     115      max = min-1+size;
     116      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_HAS_IMMEDIAT",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     117      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_HAS_IMMEDIAT",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     118      min = max+1;
     119     
     120      size = _param->_size_general_data;
     121      max = min-1+size;
     122      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_IMMEDIAT",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     123      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_IMMEDIAT",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     124      min = max+1;
     125     
     126      size = 1;
     127      max = min-1+size;
     128      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_READ_RA",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     129      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_READ_RA",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     130      min = max+1;
     131     
     132      size = _param->_size_general_register_logic;
     133      max = min-1+size;
     134      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_NUM_REG_RA",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     135      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RA",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     136      min = max+1;
     137     
     138      size = 1;
     139      max = min-1+size;
     140      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_READ_RB",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     141      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_READ_RB",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     142      min = max+1;
     143     
     144      size = _param->_size_general_register_logic;
     145      max = min-1+size;
     146      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_NUM_REG_RB",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     147      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RB",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     148      min = max+1;
     149     
     150      size = 1;
     151      max = min-1+size;
     152      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_READ_RC",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     153      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_READ_RC",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     154      min = max+1;
     155     
     156      size = _param->_size_special_register_logic;
     157      max = min-1+size;
     158      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_NUM_REG_RC",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     159      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RC",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     160      min = max+1;
     161     
     162      size = 1;
     163      max = min-1+size;
     164      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_WRITE_RD",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     165      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_WRITE_RD",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     166      min = max+1;
     167     
     168      size = _param->_size_general_register_logic;
     169      max = min-1+size;
     170      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_NUM_REG_RD",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     171      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RD",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     172      min = max+1;
     173     
     174      size = 1;
     175      max = min-1+size;
     176      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_WRITE_RE",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     177      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_WRITE_RE",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     178      min = max+1;
     179     
     180      size = _param->_size_special_register_logic;
     181      max = min-1+size;
     182      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_NUM_REG_RE",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     183      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_NUM_REG_RE",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     184      min = max+1;
     185     
     186      size = _param->_size_exception_use;
     187      max = min-1+size;
     188      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_EXCEPTION_USE",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     189      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_EXCEPTION_USE",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     190      min = max+1;
     191     
     192      size = _param->_size_exception_decod;
     193      max = min-1+size;
     194      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_EXCEPTION",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     195      vhdl->set_alias ("internal_DECOD_OUT_"+toString(i)+"_EXCEPTION",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     196      min = max+1;
     197     
     198      size = 1;
     199      max = min-1+size;
     200      vhdl->set_alias ("internal_DECOD_IN_"+toString(i)+"_VAL",std_logic(size),"internal_QUEUE_INSERT_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     201      vhdl->set_alias ("internal_QUEUE_OUT_"+toString(i)+"_VAL",std_logic(size),"internal_QUEUE_RETIRE_DATA",std_logic_range(_param->_size_internal_queue,max,min));
     202      min = max+1;
     203
     204    }
     205
    25206    log_end(Decod_queue,FUNCTION);
    26207  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp

    r111 r135  
    4141
    4242    test();
     43
     44    _size_internal_queue =
     45      (1                            + // _val
     46       _size_context_id             + // _context_id
     47       _size_depth                  + // _depth
     48       _size_type                   + // _type   
     49       _size_operation              + // _operation
     50       1                            + // _no_execute
     51       1                            + // _is_delay_slot
     52#ifdef DEBUG
     53       _size_instruction_address    + // _address
     54#endif
     55       _size_instruction_address    + // _address_next
     56       1                            + // _has_immediat
     57       _size_general_data           + // _immediat
     58       1                            + // _read_ra
     59       _size_general_register_logic + // _num_reg_ra
     60       1                            + // _read_rb
     61       _size_general_register_logic + // _num_reg_rb
     62       1                            + // _read_rc
     63       _size_special_register_logic + // _num_reg_rc
     64       1                            + // _write_rd
     65       _size_general_register_logic + // _num_reg_rd
     66       1                            + // _write_re
     67       _size_special_register_logic + // _num_reg_re
     68       _size_exception_use          + // _exception_use
     69       _size_exception_decod          // _exception
     70       ) * _nb_inst_decod;
    4371
    4472    if (is_toplevel)
Note: See TracChangeset for help on using the changeset viewer.