Ignore:
Timestamp:
Dec 31, 2008, 11:18:08 AM (15 years ago)
Author:
rosiere
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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

    r96 r98  
    2525    log_printf(FUNC,Execute_queue,FUNCTION,"Begin");
    2626
    27     for (uint32_t i=0; i<_param->_size_queue; ++i)
     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   )
    2838      {
    29         if (_param->_have_port_context_id)
    30           vhdl->set_signal("reg_CONTEXT_ID_"+toString(i),_param->_size_context_id);
    31         if (_param->_have_port_front_end_id)
    32           vhdl->set_signal("reg_FRONT_END_ID_"+toString(i),_param->_size_front_end_id);
    33         if (_param->_have_port_ooo_engine_id)
    34           vhdl->set_signal("reg_OOO_ENGINE_ID_"+toString(i),_param->_size_ooo_engine_id);
    35         if (_param->_have_port_rob_ptr)
    36           vhdl->set_signal("reg_PACKET_ID_"+toString(i),_param->_size_rob_ptr);
    37         vhdl->set_signal("reg_FLAGS_"+toString(i),_param->_size_special_data);
    38         vhdl->set_signal("reg_EXCEPTION_"+toString(i),_param->_size_exception);
    39         vhdl->set_signal("reg_NO_SEQUENCE_"+toString(i),1);
    40         vhdl->set_signal("reg_ADDRESS_"+toString(i),_param->_size_instruction_address);
    41         vhdl->set_signal("reg_DATA_"+toString(i),_param->_size_general_data);
     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;
    4264      }
    4365
    44     vhdl->set_signal("reg_CURRENT_STATE",_param->_size_queue+1);
     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;
    4575
    46     vhdl->set_signal("sig_NEXT_STATE",_param->_size_queue+1);
     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;
    4780
    48     for (uint32_t i=0; i<_param->_size_queue-1; ++i)
    49       {
    50         vhdl->set_signal("sig_WEN_"+toString(i),1);
    51         vhdl->set_signal("sig_SEL_"+toString(i),1);
    52       }
    53     vhdl->set_signal("sig_WEN_"+toString(_param->_size_queue - 1),1);
     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;
    5485
    55     vhdl->set_signal("sig_IN_ACK",1);
    56     vhdl->set_signal("sig_OUT_VAL",1);
     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;
    5790
    58    for (uint32_t i=0; i<_param->_size_queue+1; ++i)
    59       vhdl->set_constant("STATE_"+toString(i),_param->_size_queue+1,1<<i);
     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);
    60135
    61136    log_printf(FUNC,Execute_queue,FUNCTION,"End");
     
    72147}; // end namespace morpheo             
    73148#endif
    74 //   signal reg_0             : std_logic_vector (15 downto 0);
    75 //   signal reg_1             : std_logic_vector (15 downto 0);
    76 //   signal reg_2             : std_logic_vector (15 downto 0);
    77 //   signal reg_3             : std_logic_vector (15 downto 0);
    78 //   signal reg_CURRENT_STATE : std_logic_vector (4 downto 0);
    79 
    80 //   signal sig_NEXT_STATE    : std_logic_vector (4 downto 0);
    81 //   signal sig_WEN0          : std_logic;
    82 //   signal sig_SEL0          : std_logic;
    83 //   signal sig_WEN1          : std_logic;
    84 //   signal sig_SEL1          : std_logic;
    85 //   signal sig_WEN2          : std_logic;
    86 //   signal sig_SEL2          : std_logic;
    87 //   signal sig_WEN3          : std_logic;
Note: See TracChangeset for help on using the changeset viewer.