Ignore:
Timestamp:
Dec 8, 2007, 5:12:36 PM (16 years ago)
Author:
rosiere
Message:

read_queue : systemC et vhdl ok !
queue : quelques petits modif pour avoir une queue de taille 1
nettoyage des fichiers *mkf*

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_vhdl_body.cpp

    r54 r68  
    2323    log_printf(FUNC,Read_queue,"vhdl_body","Begin");
    2424    vhdl->set_body ("");
     25    vhdl->set_body("");
     26    vhdl->set_body("-----------------------------------");
     27    vhdl->set_body("-- Instance queue                  ");
     28    vhdl->set_body("-----------------------------------");
     29    vhdl->set_body("");
     30
     31    vhdl->set_body("instance_"+_name+"_queue : "+_name+"_queue");
     32    vhdl->set_body("port map (");
     33    vhdl->set_body("\t  in_CLOCK       \t=>\t      in_CLOCK ");
     34    vhdl->set_body("\t, in_NRESET      \t=>\t      in_NRESET");
     35    vhdl->set_body("\t, in_INSERT_VAL  \t=>\tinternal_QUEUE_INSERT_VAL");
     36    vhdl->set_body("\t,out_INSERT_ACK  \t=>\tinternal_QUEUE_INSERT_ACK");
     37    vhdl->set_body("\t, in_INSERT_DATA \t=>\tinternal_QUEUE_INSERT_DATA");
     38    vhdl->set_body("\t,out_RETIRE_VAL  \t=>\tinternal_QUEUE_RETIRE_VAL");
     39    vhdl->set_body("\t, in_RETIRE_ACK  \t=>\tinternal_QUEUE_RETIRE_ACK");
     40    vhdl->set_body("\t,out_RETIRE_DATA \t=>\tinternal_QUEUE_RETIRE_DATA");
     41    vhdl->set_body(");");
     42
     43    vhdl->set_body("");
     44    vhdl->set_body("-----------------------------------");
     45    vhdl->set_body("-- Queue_data                      ");
     46    vhdl->set_body("-----------------------------------");
     47    vhdl->set_body("");
     48   
     49    uint32_t min = 0;
     50    uint32_t max;
     51
     52    if(_param->_have_port_context_id   )
     53      {
     54        max = min-1+_param->_size_context_id;
     55        vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_CONTEXT_ID;");
     56        min = max+1;
     57      }
     58    if(_param->_have_port_front_end_id   )
     59      {
     60        max = min-1+_param->_size_front_end_id;
     61        vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_FRONT_END_ID;");
     62        min = max+1;
     63      }
     64    if(_param->_have_port_ooo_engine_id   )
     65      {
     66        max = min-1+_param->_size_ooo_engine_id;
     67        vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OOO_ENGINE_ID;");
     68        min = max+1;
     69      }
     70    if(_param->_have_port_rob_id   )
     71      {
     72        max = min-1+_param->_size_rob_id;
     73        vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_ROB_ID;");
     74        min = max+1;
     75      }
     76
     77    max = min-1+_param->_size_operation;
     78    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_OPERATION;");
     79    min = max+1;
     80
     81    max = min-1+_param->_size_type;
     82    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_TYPE;");
     83    min = max+1;
     84
     85    max = min;
     86    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_HAS_IMMEDIAT;");
     87    min = max+1;
     88
     89    max = min-1+_param->_size_general_data;
     90    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_IMMEDIAT;");
     91    min = max+1;
     92
     93    max = min;
     94    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RA;");
     95    min = max+1;
     96
     97    max = min-1+_param->_size_general_register;
     98    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RA;");
     99    min = max+1;
     100
     101    max = min;
     102    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RB;");
     103    min = max+1;
     104
     105    max = min-1+_param->_size_general_register;
     106    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RB;");
     107    min = max+1;
     108
     109    max = min;
     110    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_READ_RC;");
     111    min = max+1;
     112
     113    max = min-1+_param->_size_special_register;
     114    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RC;");
     115    min = max+1;
     116
     117    max = min;
     118    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RD;");
     119    min = max+1;
     120
     121    max = min-1+_param->_size_general_register;
     122    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RD;");
     123    min = max+1;
     124
     125    max = min;
     126    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_WRITE_RE;");
     127    min = max+1;
     128
     129    max = min-1+_param->_size_special_register;
     130    vhdl->set_body ("internal_QUEUE_INSERT_DATA"+std_logic_range(_param->_size_internal_queue,max,min)+" <= in_READ_QUEUE_IN_NUM_REG_RE;");
     131    min = max+1;
     132
     133    vhdl->set_body ("internal_QUEUE_RETIRE_ACK <= internal_READ_QUEUE_OUT_VAL and in_READ_QUEUE_OUT_ACK;");
     134
     135    vhdl->set_body("");
     136    vhdl->set_body("-----------------------------------");
     137    vhdl->set_body("-- Interface read");
     138    vhdl->set_body("-----------------------------------");
     139    vhdl->set_body("");
     140    vhdl->set_body("-- GPR");
     141    vhdl->set_body ("out_GPR_READ_0_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RA_VAL;");
     142    vhdl->set_body ("out_GPR_READ_1_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RB_VAL;");
     143    if(_param->_have_port_ooo_engine_id)
     144      {
     145        vhdl->set_body ("out_GPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
     146        vhdl->set_body ("out_GPR_READ_1_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
     147      }
     148    vhdl->set_body ("out_GPR_READ_0_NUM_REG       <= internal_NUM_REG_RA;");
     149    vhdl->set_body ("out_GPR_READ_1_NUM_REG       <= internal_NUM_REG_RB;");
     150    vhdl->set_body("");
     151   
     152    vhdl->set_body("-- SPR");
     153    vhdl->set_body ("out_SPR_READ_0_VAL           <= internal_QUEUE_RETIRE_VAL and internal_READ_RC_VAL;");
     154    if(_param->_have_port_ooo_engine_id)
     155      {
     156        vhdl->set_body ("out_SPR_READ_0_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
     157      }
     158    vhdl->set_body ("out_SPR_READ_0_NUM_REG       <= internal_NUM_REG_RC;");
     159
     160    vhdl->set_body("");
     161    vhdl->set_body("-----------------------------------");
     162    vhdl->set_body("-- Interface read_queue_out");
     163    vhdl->set_body("-----------------------------------");
     164    vhdl->set_body("");
     165   
     166    if(_param->_have_port_context_id   )
     167      vhdl->set_body ("out_READ_QUEUE_OUT_CONTEXT_ID    <= internal_CONTEXT_ID   ;");
     168    if(_param->_have_port_front_end_id   )
     169      vhdl->set_body ("out_READ_QUEUE_OUT_FRONT_END_ID  <= internal_FRONT_END_ID ;");
     170    if(_param->_have_port_ooo_engine_id   )
     171      vhdl->set_body ("out_READ_QUEUE_OUT_OOO_ENGINE_ID <= internal_OOO_ENGINE_ID;");
     172    if(_param->_have_port_rob_id   )
     173      vhdl->set_body ("out_READ_QUEUE_OUT_ROB_ID        <= internal_ROB_ID       ;");
     174    vhdl->set_body ("out_READ_QUEUE_OUT_OPERATION     <= internal_OPERATION    ;");
     175    vhdl->set_body ("out_READ_QUEUE_OUT_TYPE          <= internal_TYPE         ;");
     176    vhdl->set_body ("out_READ_QUEUE_OUT_HAS_IMMEDIAT  <= internal_HAS_IMMEDIAT ;");
     177    vhdl->set_body ("out_READ_QUEUE_OUT_IMMEDIAT      <= internal_IMMEDIAT     ;");
     178    vhdl->set_body ("out_READ_QUEUE_OUT_READ_RA       <= internal_READ_RA      ;");
     179    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RA    <= internal_NUM_REG_RA   ;");
     180    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
     181    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RA       <= internal_NEXT_DATA_RA ;");
     182    vhdl->set_body ("out_READ_QUEUE_OUT_READ_RB       <= internal_READ_RB      ;");
     183    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RB    <= internal_NUM_REG_RB   ;");
     184    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
     185    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RB       <= internal_NEXT_DATA_RB ;");
     186    vhdl->set_body ("out_READ_QUEUE_OUT_READ_RC       <= internal_READ_RC      ;");
     187    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RC    <= internal_NUM_REG_RC   ;");
     188    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
     189    vhdl->set_body ("out_READ_QUEUE_OUT_DATA_RC       <= internal_NEXT_DATA_RC ;");
     190    vhdl->set_body ("out_READ_QUEUE_OUT_WRITE_RD      <= internal_WRITE_RD     ;");
     191    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RD    <= internal_NUM_REG_RD   ;");
     192    vhdl->set_body ("out_READ_QUEUE_OUT_WRITE_RE      <= internal_WRITE_RE     ;");
     193    vhdl->set_body ("out_READ_QUEUE_OUT_NUM_REG_RE    <= internal_NUM_REG_RE   ;");
     194   
     195    vhdl->set_body("");
     196    vhdl->set_body("-----------------------------------");
     197    vhdl->set_body("-- next reg update");
     198    vhdl->set_body("-----------------------------------");
     199    vhdl->set_body("");
     200    vhdl->set_body("-- read_rx_val - 1 : must access at the registerFile (after access, is set at 0)");
     201   
     202    {
     203      vhdl->set_body("");
     204      vhdl->set_body("internal_NEXT_READ_RA_VAL <=");
     205      vhdl->set_body("\t'0' when");
     206      // bypass
     207      vhdl->set_body("\t\t-- check bypass");
     208      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
     209        {
     210          string cmp;
     211         
     212          if (_param->_have_port_ooo_engine_id)
     213            cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     214          else
     215            cmp = "";
     216         
     217          vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
     218        }
     219      vhdl->set_body("\t\tfalse else");
     220      vhdl->set_body("\tinternal_READ_RA_VAL and not in_GPR_READ_0_ACK;");
     221    }
     222    {
     223      vhdl->set_body("");
     224      vhdl->set_body("internal_NEXT_READ_RB_VAL <=");
     225      vhdl->set_body("\t'0' when");
     226      // bypass
     227      vhdl->set_body("\t\t-- check bypass");
     228      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
     229        {
     230          string cmp;
     231         
     232          if (_param->_have_port_ooo_engine_id)
     233            cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     234          else
     235            cmp = "";
     236         
     237          vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
     238        }
     239      vhdl->set_body("\t\tfalse else");
     240      vhdl->set_body("\tinternal_READ_RB_VAL and not in_GPR_READ_1_ACK;");
     241    }
     242    {
     243      vhdl->set_body("");
     244      vhdl->set_body("internal_NEXT_READ_RC_VAL <=");
     245      vhdl->set_body("\t'0' when");
     246      // bypass
     247      vhdl->set_body("\t\t-- check bypass");
     248      for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--)
     249        {
     250          string cmp;
     251         
     252          if (_param->_have_port_ooo_engine_id)
     253            cmp = "and (in_SPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     254          else
     255            cmp = "";
     256         
     257          vhdl->set_body("\t\t((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");
     258        }
     259      vhdl->set_body("\t\tfalse else");
     260      vhdl->set_body("\tinternal_READ_RC_VAL and not in_SPR_READ_0_ACK;");
     261    }
     262    {
     263      vhdl->set_body("");
     264      vhdl->set_body("internal_READ_QUEUE_OUT_VAL <= not internal_NEXT_READ_RA_VAL and not internal_NEXT_READ_RB_VAL and not internal_NEXT_READ_RC_VAL;");
     265      vhdl->set_body("     out_READ_QUEUE_OUT_VAL <= internal_READ_QUEUE_OUT_VAL and internal_QUEUE_RETIRE_VAL;");
     266     
     267    }
     268   
     269    vhdl->set_body("");
     270    vhdl->set_body("-- data_rx_val - 1 : the read of registerFile is valid");
     271   
     272    {
     273      vhdl->set_body("");
     274      vhdl->set_body("internal_NEXT_DATA_RA_VAL <=");
     275      vhdl->set_body("\t'1' when");
     276      // bypass
     277      vhdl->set_body("\t\t-- check bypass");
     278      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
     279        {
     280          string cmp;
     281       
     282          if (_param->_have_port_ooo_engine_id)
     283            cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     284          else
     285            cmp = "";
     286         
     287          vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
     288        }
     289      vhdl->set_body("\t\tfalse else");
     290      vhdl->set_body("\tinternal_DATA_RA_VAL or (internal_READ_RA_VAL and in_GPR_READ_0_ACK and in_GPR_READ_0_DATA_VAL);");
     291    }
     292    {
     293      vhdl->set_body("");
     294      vhdl->set_body("internal_NEXT_DATA_RB_VAL <=");
     295      vhdl->set_body("\t'1' when");
     296      // bypass
     297      vhdl->set_body("\t\t-- check bypass");
     298      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
     299        {
     300          string cmp;
     301         
     302          if (_param->_have_port_ooo_engine_id)
     303            cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     304        else
     305          cmp = "";
     306         
     307          vhdl->set_body("\t\t((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) or");
     308        }
     309      vhdl->set_body("\t\tfalse else");
     310      vhdl->set_body("\tinternal_DATA_RB_VAL or (internal_READ_RB_VAL and in_GPR_READ_1_ACK and in_GPR_READ_1_DATA_VAL);");
     311    }
     312    {
     313      vhdl->set_body("");
     314      vhdl->set_body("internal_NEXT_DATA_RC_VAL <=");
     315      vhdl->set_body("\t'1' when");
     316      // bypass
     317      vhdl->set_body("\t\t-- check bypass");
     318      for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--)
     319        {
     320          string cmp;
     321         
     322          if (_param->_have_port_ooo_engine_id)
     323            cmp = "and (in_SPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     324          else
     325            cmp = "";
     326         
     327          vhdl->set_body("\t\t((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RC=in_SPR_WRITE_"+toString(i)+"_NUM_REG)) or");
     328        }
     329      vhdl->set_body("\t\tfalse else");
     330      vhdl->set_body("\tinternal_DATA_RC_VAL or (internal_READ_RC_VAL and in_SPR_READ_0_ACK and in_SPR_READ_0_DATA_VAL);");
     331    }
     332   
     333    vhdl->set_body("");
     334    vhdl->set_body("-- data_rx - data read");
     335    {
     336      vhdl->set_body("");
     337      vhdl->set_body("internal_NEXT_DATA_RA <=");
     338#ifdef SYSTEMC_VHDL_COMPATIBILITY
     339      vhdl->set_body("\t"+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RA='0' else");
     340#endif
     341      // bypass
     342      vhdl->set_body("\t\t-- check bypass");
     343      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
     344        {
     345          string cmp;
     346       
     347          if (_param->_have_port_ooo_engine_id)
     348            cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     349          else
     350            cmp = "";
     351         
     352          vhdl->set_body("\tin_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RA=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");
     353        }
     354      vhdl->set_body("\treg_DATA_RA when (internal_DATA_RA_VAL='1') else");
     355      vhdl->set_body("\tin_GPR_READ_0_DATA;");
     356    }
     357    {
     358      vhdl->set_body("");
     359      vhdl->set_body("internal_NEXT_DATA_RB <=");
     360#ifdef SYSTEMC_VHDL_COMPATIBILITY
     361      vhdl->set_body("\t"+std_logic_others(_param->_size_general_data,0)+" when internal_READ_RB='0' else");
     362#endif
     363      // bypass
     364      vhdl->set_body("\t\t-- check bypass");
     365      for (int32_t i=_param->_nb_gpr_write-1; i>=0 ; i--)
     366        {
     367          string cmp;
     368       
     369          if (_param->_have_port_ooo_engine_id)
     370            cmp = "and (in_GPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     371          else
     372            cmp = "";
     373         
     374          vhdl->set_body("\tin_GPR_WRITE_"+toString(i)+"_DATA when ((in_GPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (internal_NUM_REG_RB=in_GPR_WRITE_"+toString(i)+"_NUM_REG)) else");
     375        }
     376      vhdl->set_body("\treg_DATA_RB when (internal_DATA_RB_VAL='1') else");
     377      vhdl->set_body("\tin_GPR_READ_1_DATA;");
     378    }
     379    {
     380      vhdl->set_body("");
     381      vhdl->set_body("internal_NEXT_DATA_RC <=");
     382#ifdef SYSTEMC_VHDL_COMPATIBILITY
     383      vhdl->set_body("\t"+std_logic_others(_param->_size_special_data,0)+" when internal_READ_RC='0' else");
     384#endif
     385      // bypass
     386      vhdl->set_body("\t\t-- check bypass");
     387      for (int32_t i=_param->_nb_spr_write-1; i>=0 ; i--)
     388        {
     389          string cmp;
     390       
     391          if (_param->_have_port_ooo_engine_id)
     392            cmp = "and (in_SPR_WRITE_"+toString(i)+"_OOO_ENGINE_ID=internal_OOO_ENGINE_ID) ";
     393          else
     394            cmp = "";
     395         
     396          vhdl->set_body("\tin_SPR_WRITE_"+toString(i)+"_DATA when ((in_SPR_WRITE_"+toString(i)+"_VAL='1') "+cmp+"and (in_SPR_WRITE_"+toString(i)+"_NUM_REG=internal_NUM_REG_RC)) else");
     397        }
     398      vhdl->set_body("\treg_DATA_RC when (internal_DATA_RC_VAL='1') else");
     399      vhdl->set_body("\tin_SPR_READ_0_DATA;");
     400
     401    vhdl->set_body("");
     402    vhdl->set_body("-----------------------------------");
     403    vhdl->set_body("-- transition");
     404    vhdl->set_body("-----------------------------------");
     405    vhdl->set_body("");
     406    vhdl->set_body("-- need a new head if :");
     407    vhdl->set_body("--   * queue is empty");
     408    vhdl->set_body("--   * pop with queue");
     409    vhdl->set_body ("internal_NEXT_NEED_NEW_HEAD <= not internal_QUEUE_RETIRE_VAL or (internal_QUEUE_RETIRE_VAL and internal_QUEUE_RETIRE_ACK);");
     410
     411    vhdl->set_body ("internal_READ_RA_VAL   <=     internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_READ_RA_VAL;");
     412    vhdl->set_body ("internal_READ_RB_VAL   <=     internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_READ_RB_VAL;");
     413    vhdl->set_body ("internal_READ_RC_VAL   <=     internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_READ_RC_VAL;");
     414    vhdl->set_body ("internal_DATA_RA_VAL   <= not internal_READ_RA when reg_NEED_NEW_HEAD='1' else reg_DATA_RA_VAL;");
     415    vhdl->set_body ("internal_DATA_RB_VAL   <= not internal_READ_RB when reg_NEED_NEW_HEAD='1' else reg_DATA_RB_VAL;");
     416    vhdl->set_body ("internal_DATA_RC_VAL   <= not internal_READ_RC when reg_NEED_NEW_HEAD='1' else reg_DATA_RC_VAL;");
     417
     418
     419    vhdl->set_body ("");
     420    vhdl->set_body ("transition: process (in_CLOCK)");
     421    vhdl->set_body ("begin  -- process transition");
     422    vhdl->set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");
     423    vhdl->set_body ("");
     424    vhdl->set_body ("\t\tif (in_NRESET = '0') then");   
     425    vhdl->set_body ("\t\t\treg_NEED_NEW_HEAD <= '1';");
     426    vhdl->set_body ("\t\telse");
     427    vhdl->set_body ("\t\t\treg_NEED_NEW_HEAD <= internal_NEXT_NEED_NEW_HEAD;");
     428    vhdl->set_body ("\t\t\treg_READ_RA_VAL   <= internal_NEXT_READ_RA_VAL;");
     429    vhdl->set_body ("\t\t\treg_READ_RB_VAL   <= internal_NEXT_READ_RB_VAL;");
     430    vhdl->set_body ("\t\t\treg_READ_RC_VAL   <= internal_NEXT_READ_RC_VAL;");
     431    vhdl->set_body ("\t\t\treg_DATA_RA_VAL   <= internal_NEXT_DATA_RA_VAL;");
     432    vhdl->set_body ("\t\t\treg_DATA_RB_VAL   <= internal_NEXT_DATA_RB_VAL;");
     433    vhdl->set_body ("\t\t\treg_DATA_RC_VAL   <= internal_NEXT_DATA_RC_VAL;");
     434    vhdl->set_body ("\t\t\treg_DATA_RA       <= internal_NEXT_DATA_RA    ;");
     435    vhdl->set_body ("\t\t\treg_DATA_RB       <= internal_NEXT_DATA_RB    ;");
     436    vhdl->set_body ("\t\t\treg_DATA_RC       <= internal_NEXT_DATA_RC    ;");
     437
     438    vhdl->set_body ("\t\tend if;");
     439    vhdl->set_body ("");
     440    vhdl->set_body ("\tend if;");
     441    vhdl->set_body ("end process transition;");
     442
     443    }
     444
     445
    25446    log_printf(FUNC,Read_queue,"vhdl_body","End");
    26447  };
Note: See TracChangeset for help on using the changeset viewer.