Ignore:
Timestamp:
Jul 5, 2007, 5:50:19 PM (17 years ago)
Author:
rosiere
Message:

Modification des classes d'encapsulation des interfaces :

  • gère les signaux à écrire dans le vhdl
  • les traces pour le testbench
  • la génération des vhdl structurelles

-> test sur la Pattern History Table

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src
Files:
1 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU.cpp

    r15 r42  
    2828    log_printf(FUNC,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Begin");
    2929
     30#ifdef SYSTEMC
     31    log_printf(TRACE,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Allocation");
     32    allocation ();
     33#endif
     34
    3035#ifdef STATISTICS
    3136    log_printf(TRACE,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Allocation of statistics");
     
    3742#endif
    3843
    39 #ifdef VHDL_TESTBENCH
    40     // Creation of a testbench
    41     //  -> port
    42     //  -> clock's signals
    43     log_printf(TRACE,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Creation of Testbench");
    44     _vhdl_testbench = new Vhdl_Testbench (_name);
    45     vhdl_testbench_port           (*_vhdl_testbench);
    46     _vhdl_testbench->set_clock    ("in_CLOCK",true);
    47 #endif
    48 
    4944#ifdef VHDL
    5045    // generate the vhdl
     
    5449
    5550#ifdef SYSTEMC
    56     log_printf(TRACE,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Allocation");
    57     allocation ();
    58 
    5951    log_printf(TRACE,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Definition of sc_method");
    6052    SC_METHOD (transition);
     
    10092#endif
    10193
    102 #ifdef VHDL_TESTBENCH
    103     // generate the test bench
    104     _vhdl_testbench->generate_file();
    105     delete _vhdl_testbench;
    106 #endif
    107 
    10894#ifdef STATISTICS
    10995    _stat->generate_file(statistics(0));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_allocation.cpp

    r15 r42  
    1717  void Victim_Pseudo_LRU::allocation (void)
    1818  {
    19     in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
    20     in_NRESET = new SC_IN (Tcontrol_t) ("in_NRESET");
     19#ifdef POSITION
     20    _component   = new Component ();
    2121
    22     // -----[ Interface access ]-------------------------------------------
    23      in_ACCESS_VAL     = new SC_IN (Tcontrol_t) * [_param._nb_access];
    24     out_ACCESS_ACK     = new SC_OUT(Tcontrol_t) * [_param._nb_access];
    25     if (_param._size_table>1)
    26       in_ACCESS_ADDRESS = new SC_IN (Taddress_t) * [_param._nb_access];
    27     out_ACCESS_ENTITY  = new SC_OUT(Tentity_t ) * [_param._nb_access];
     22    Entity * entity = _component->set_entity (_name                  ,
     23                                             "Select_Priority_Fixed",
     24                                             COMBINATORY            );
    2825   
    29     for (uint32_t i=0; i<_param._nb_access; i++)
    30       {
    31         string rename;
     26    _interfaces = entity->set_interfaces();
     27#else
     28    _interfaces = new Interfaces();
     29#endif
    3230
    33         rename = "in_ACCESS_VAL["     + toString(i) + "]";
    34          in_ACCESS_VAL     [i] = new SC_IN (Tcontrol_t) (rename.c_str());
     31    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     32    {
     33      Interface_fifo * interface = _interfaces->set_interface("", IN  ,WEST, "Generalist interface");
     34     
     35      in_CLOCK        = interface->set_signal_clk              ("clock" ,1);
     36      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1);
     37    }
    3538
    36         rename = "out_ACCESS_ACK["    + toString(i) + "]";
    37         out_ACCESS_ACK     [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
     39    // ~~~~~[ Interface : "access" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     40    {
     41       in_ACCESS_VAL     = new SC_IN (Tcontrol_t) * [_param._nb_access];
     42      out_ACCESS_ACK     = new SC_OUT(Tcontrol_t) * [_param._nb_access];
     43      if (_param._size_table>1)
     44       in_ACCESS_ADDRESS = new SC_IN (Taddress_t) * [_param._nb_access];
     45      out_ACCESS_ENTITY  = new SC_OUT(Tentity_t ) * [_param._nb_access];
     46     
     47      for (uint32_t i=0; i<_param._nb_access; i++)
     48        {
     49          Interface_fifo * interface = _interfaces->set_interface("access_"+toString(i), IN  ,WEST, "Access");
    3850
    39         if (_param._size_table>1)
    40           {
    41             rename = "in_ACCESS_ADDRESS[" + toString(i) + "]";
    42             in_ACCESS_ADDRESS [i] = new SC_IN (Taddress_t) (rename.c_str());
    43           }
    44         rename = "out_ACCESS_ENTITY[" + toString(i) + "]";
    45         out_ACCESS_ENTITY  [i] = new SC_OUT(Tentity_t ) (rename.c_str());
    46       }
     51           in_ACCESS_VAL     [i] = interface->set_signal_valack_in        ("val"    , VAL);
     52          out_ACCESS_ACK     [i] = interface->set_signal_valack_out       ("ack"    , ACK);
     53         
     54          if (_param._size_table>1)
     55           in_ACCESS_ADDRESS [i] = interface->set_signal_in  <Taddress_t> ("address",static_cast<uint32_t>(log2(_param._size_table)));
     56          out_ACCESS_ENTITY  [i] = interface->set_signal_out <Tentity_t>  ("entity" ,static_cast<uint32_t>(log2(_param._nb_entity )));
     57        }
     58    }
    4759
    48     // -----[ Interface update ]-------------------------------------------
    49      in_UPDATE_VAL     = new SC_IN (Tcontrol_t) *  [_param._nb_update];
    50     out_UPDATE_ACK     = new SC_OUT(Tcontrol_t) *  [_param._nb_update];
    51     if (_param._size_table>1)
    52       in_UPDATE_ADDRESS = new SC_IN (Taddress_t) *  [_param._nb_update];
    53      in_UPDATE_ENTITY  = new SC_IN (Tentity_t ) *  [_param._nb_update];
     60    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     61   
     62    {
     63       in_UPDATE_VAL     = new SC_IN (Tcontrol_t) *  [_param._nb_update];
     64      out_UPDATE_ACK     = new SC_OUT(Tcontrol_t) *  [_param._nb_update];
     65      if (_param._size_table>1)
     66       in_UPDATE_ADDRESS = new SC_IN (Taddress_t) *  [_param._nb_update];
     67       in_UPDATE_ENTITY  = new SC_IN (Tentity_t ) *  [_param._nb_update];
     68     
     69      for (uint32_t i=0; i<_param._nb_update; i++)
     70        {
     71          Interface_fifo * interface = _interfaces->set_interface("update_"+toString(i), IN  ,EAST, "Update");
    5472
    55     for (uint32_t i=0; i<_param._nb_update; i++)
    56       {
    57         string rename;
    58 
    59         rename = "in_UPDATE_VAL["     + toString(i) + "]";
    60          in_UPDATE_VAL     [i] = new SC_IN (Tcontrol_t) (rename.c_str());
    61 
    62         rename = "out_UPDATE_ACK["    + toString(i) + "]";;
    63         out_UPDATE_ACK     [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
    64 
    65         if (_param._size_table>1)
    66           {
    67             rename = "in_UPDATE_ADDRESS[" + toString(i) + "]";
    68             in_UPDATE_ADDRESS [i] = new SC_IN (Taddress_t) (rename.c_str());
    69           }
    70 
    71         rename = "in_UPDATE_ENTITY["  + toString(i) + "]";
    72          in_UPDATE_ENTITY  [i] = new SC_IN (Tentity_t ) (rename.c_str());
    73       }
    74 
     73          in_UPDATE_VAL     [i] = interface->set_signal_valack_in        ("val"    , VAL);
     74         out_UPDATE_ACK     [i] = interface->set_signal_valack_out       ("ack"    , ACK);
     75         if (_param._size_table>1)
     76          in_UPDATE_ADDRESS [i] = interface->set_signal_in  <Taddress_t> ("address",static_cast<uint32_t>(log2(_param._size_table)));
     77          in_UPDATE_ENTITY  [i] = interface->set_signal_in  <Tentity_t>  ("entity" ,static_cast<uint32_t>(log2(_param._nb_entity )));
     78        }
     79    }
    7580    // -----[ Register ]---------------------------------------------------
    7681    reg_TABLE = new entry_t *  [_param._size_table];
     
    8186    // -----[ Internal ]---------------------------------------------------
    8287    internal_ACCESS_ENTITY = new Tentity_t [_param._nb_entity];
     88
     89#ifdef POSITION
     90    _component->generate_file();
     91#endif
    8392  };
    8493
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_deallocation.cpp

    r15 r42  
    1717  void Victim_Pseudo_LRU::deallocation (void)
    1818  {
    19     delete in_CLOCK;
    20     delete in_NRESET;
     19    delete     in_CLOCK;
     20    delete     in_NRESET;
    2121    // -----[ Interface access ]-------------------------------------------
    22     for (uint32_t i=0; i<_param._nb_access; i++)
    23       {
    24         delete  in_ACCESS_VAL     [i];
    25         delete out_ACCESS_ACK     [i];
    26         if (_param._size_table>1)
    27         delete  in_ACCESS_ADDRESS [i];
    28         delete out_ACCESS_ENTITY  [i];
    29       }
    30 
    31     delete  in_ACCESS_VAL    ;
    32     delete out_ACCESS_ACK    ;
     22    delete []  in_ACCESS_VAL    ;
     23    delete [] out_ACCESS_ACK    ;
    3324    if (_param._size_table>1)
    34     delete in_ACCESS_ADDRESS;
    35     delete out_ACCESS_ENTITY ;
     25    delete [] in_ACCESS_ADDRESS;
     26    delete [] out_ACCESS_ENTITY ;
    3627   
    3728    // -----[ Interface update ]-------------------------------------------
    38     for (uint32_t i=0; i<_param._nb_update; i++)
    39       {
    40         delete  in_UPDATE_VAL     [i];
    41         delete out_UPDATE_ACK     [i];
    42         if (_param._size_table>1)
    43         delete  in_UPDATE_ADDRESS [i];
    44         delete  in_UPDATE_ENTITY  [i];
    45       }
    46     delete  in_UPDATE_VAL    ;
    47     delete out_UPDATE_ACK    ;
     29    delete []  in_UPDATE_VAL    ;
     30    delete [] out_UPDATE_ACK    ;
    4831    if (_param._size_table>1)
    49     delete in_UPDATE_ADDRESS;
    50     delete in_UPDATE_ENTITY ;
     32    delete [] in_UPDATE_ADDRESS;
     33    delete [] in_UPDATE_ENTITY ;
    5134
    5235    // -----[ Register ]---------------------------------------------------
    53     for (uint32_t i=0; i<_param._size_table; i++)
    54       {
    55         delete reg_TABLE [i];
    56       }
    57     delete reg_TABLE;
     36    delete [] reg_TABLE;
    5837
    5938    // -----[ Internal ]---------------------------------------------------
    60     delete internal_ACCESS_ENTITY;
     39    delete [] internal_ACCESS_ENTITY;
     40
     41#ifdef POSITION
     42    delete _component;
     43#else
     44    delete _interfaces;
     45#endif
    6146  };
    6247
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_transition.cpp

    r15 r42  
    6767   
    6868#ifdef VHDL_TESTBENCH
    69     vhdl_testbench_transition (*_vhdl_testbench);
     69    vhdl_testbench_transition ();
    7070#endif
    7171  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl.cpp

    r15 r42  
    2222
    2323    log_printf(TRACE,Victim_Pseudo_LRU,"vhdl","Construction of vhdl");
    24     Vhdl vhdl (_name);
     24    Vhdl * vhdl = new Vhdl (_name);
    2525
    2626    log_printf(TRACE,Victim_Pseudo_LRU,"vhdl","Set library");
    27     vhdl.set_library_work (_name + "_Pack");
     27    vhdl->set_library_work (_name + "_Pack");
    2828
    2929    log_printf(TRACE,Victim_Pseudo_LRU,"vhdl","Set port");
     
    3434    vhdl_body        (vhdl);
    3535    log_printf(TRACE,Victim_Pseudo_LRU,"vhdl","Generate File");
    36     vhdl.generate_file();
     36    vhdl->generate_file();
     37
     38    delete vhdl;
    3739    log_printf(FUNC,Victim_Pseudo_LRU,"vhdl","End");
    3840  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl_body.cpp

    r15 r42  
    1515namespace victim_pseudo_lru {
    1616
    17   void Victim_Pseudo_LRU::vhdl_body (Vhdl & vhdl)
     17  void Victim_Pseudo_LRU::vhdl_body (Vhdl * & vhdl)
    1818  {
    19     vhdl.set_body ("");
    20     vhdl.set_body ("-----------------------------------------------------------------------------");
    21     vhdl.set_body ("-- Access");
    22     vhdl.set_body ("-----------------------------------------------------------------------------");
    23     vhdl.set_body ("");
    24     vhdl.set_body ("-- Tree of Pseudo-LRU - example to 8 entity");
    25     vhdl.set_body ("--");
    26     vhdl.set_body ("--                4-5-6-7?              ");
    27     vhdl.set_body ("--           0_______|_______1          ");
    28     vhdl.set_body ("--           |               |          ");
    29     vhdl.set_body ("--          2-3?            6-7?        ");
    30     vhdl.set_body ("--       0___|___1       0___|___1      ");
    31     vhdl.set_body ("--       |       |       |       |      ");
    32     vhdl.set_body ("--       1?      3?      5?      7?     ");
    33     vhdl.set_body ("--     0_|_1   0_|_1   0_|_1   0_|_1    ");
    34     vhdl.set_body ("--     |   |   |   |   |   |   |   |    ");
    35     vhdl.set_body ("--    Way Way Way Way Way Way Way Way   ");
    36     vhdl.set_body ("--     0   1   2   3   4   5   6   7    ");
    37     for (uint32_t i=0; i<_param._nb_access; i++)
    38       {
    39         vhdl.set_body ("");
     19    vhdl->set_body ("");
     20    vhdl->set_body ("-----------------------------------------------------------------------------");
     21    vhdl->set_body ("-- Access");
     22    vhdl->set_body ("-----------------------------------------------------------------------------");
     23    vhdl->set_body ("");
     24    vhdl->set_body ("-- Tree of Pseudo-LRU - example to 8 entity");
     25    vhdl->set_body ("--");
     26    vhdl->set_body ("--                4-5-6-7?              ");
     27    vhdl->set_body ("--           0_______|_______1         ");
     28    vhdl->set_body ("--           |               |         ");
     29    vhdl->set_body ("--          2-3?            6-7?        ");
     30    vhdl->set_body ("--       0___|___1       0___|___1      ");
     31    vhdl->set_body ("--       |       |       |       |      ");
     32    vhdl->set_body ("--       1?      3?      5?      7?     ");
     33    vhdl->set_body ("--     0_|_1   0_|_1   0_|_1   0_|_1    ");
     34    vhdl->set_body ("--     |   |   |   |   |   |   |   |    ");
     35    vhdl->set_body ("--    Way Way Way Way Way Way Way Way   ");
     36    vhdl->set_body ("--     0   1   2   3   4   5   6   7    ");
     37    for (uint32_t i=0; i<_param._nb_access; i++)
     38      {
     39        vhdl->set_body ("");
    4040        // Read the table
    4141       
     
    4343
    4444        if (_param._size_table>1)
    45           access_address = "conv_integer(in_ACCESS_ADDRESS_"+toString(i)+")";
     45          access_address = "conv_integer(in_ACCESS_"+toString(i)+"_ADDRESS)";
    4646        else
    4747          access_address = "0";
    4848
    49         vhdl.set_body ("access_entry_"+toString(i)+" <= reg_TABLE ("+access_address+");");
    50         vhdl.set_body ("");
     49        vhdl->set_body ("access_entry_"+toString(i)+" <= reg_TABLE ("+access_address+");");
     50        vhdl->set_body ("");
    5151
    5252        for (int32_t j=static_cast<uint32_t>(log2(_param._nb_entity)-1); j>=0; j--)
    5353          {
    54             vhdl.set_body ("access_entity_"+toString(i)+"("+toString(j)+") <= ");
     54            vhdl->set_body ("access_entity_"+toString(i)+"("+toString(j)+") <= ");
    5555
    5656            uint32_t cpt=0;
     
    7272                string print_else = (k==(1<<j)-1)?"     ":"else ";
    7373
    74                 vhdl.set_body ("\t"+print_else+"access_entry_"+toString(i)+"("+toString(k)+") "+cond);
     74                vhdl->set_body ("\t"+print_else+"access_entry_"+toString(i)+"("+toString(k)+") "+cond);
    7575                cpt ++;
    7676              }
    77             vhdl.set_body ("\t;");
     77            vhdl->set_body ("\t;");
    7878          }
    7979      }
    8080
    81     vhdl.set_body ("");
    82     vhdl.set_body ("-----------------------------------------------------------------------------");
    83     vhdl.set_body ("-- Update");
    84     vhdl.set_body ("-----------------------------------------------------------------------------");
    85     vhdl.set_body ("");
    86     vhdl.set_body ("-- port access");
     81    vhdl->set_body ("");
     82    vhdl->set_body ("-----------------------------------------------------------------------------");
     83    vhdl->set_body ("-- Update");
     84    vhdl->set_body ("-----------------------------------------------------------------------------");
     85    vhdl->set_body ("");
     86    vhdl->set_body ("-- port access");
    8787    for (uint32_t i=0; i<_param._nb_access; i++)
    8888      for (int32_t j=static_cast<uint32_t>(log2(_param._nb_entity)-1); j>=0; j--)
     
    107107                }
    108108             
    109               vhdl.set_body ("access_next_entry_"+toString(i)+"("+toString(k)+") <=");
    110               vhdl.set_body ("\tnot access_entity_"+toString(i)+"("+toString(j)+") "+cond);
     109              vhdl->set_body ("access_next_entry_"+toString(i)+"("+toString(k)+") <=");
     110              vhdl->set_body ("\tnot access_entity_"+toString(i)+"("+toString(j)+") "+cond);
    111111              if (have_cond == true)
    112                 vhdl.set_body ("\telse access_entry_"+toString(i)+"("+toString(k)+")");
    113               vhdl.set_body ("\t;");         
     112                vhdl->set_body ("\telse access_entry_"+toString(i)+"("+toString(k)+")");
     113              vhdl->set_body ("\t;");         
    114114              cpt ++;
    115115            }
    116116        }
    117117
    118     vhdl.set_body ("");
    119     vhdl.set_body ("-- port update");
     118    vhdl->set_body ("");
     119    vhdl->set_body ("-- port update");
    120120    for (uint32_t i=0; i<_param._nb_update; i++)
    121121      for (int32_t j=static_cast<uint32_t>(log2(_param._nb_entity)-1); j>=0; j--)
     
    137137                  else
    138138                    cond += " and";
    139                   cond += " in_UPDATE_ENTITY_"+toString(i)+"("+toString(l)+")='"+toString((cpt>>(l-(j+1)))&1)+"'";
     139                  cond += " in_UPDATE_"+toString(i)+"_ENTITY("+toString(l)+")='"+toString((cpt>>(l-(j+1)))&1)+"'";
    140140                }
    141141             
    142               vhdl.set_body ("update_next_entry_"+toString(i)+"("+toString(k)+") <=");
    143               vhdl.set_body ("\tnot in_UPDATE_ENTITY_"+toString(i)+"("+toString(j)+") "+cond);
     142              vhdl->set_body ("update_next_entry_"+toString(i)+"("+toString(k)+") <=");
     143              vhdl->set_body ("\tnot in_UPDATE_"+toString(i)+"_ENTITY("+toString(j)+") "+cond);
    144144              if (have_cond == true)
    145145                {
     
    147147
    148148                  if (_param._size_table>1)
    149                     update_address = "conv_integer(in_UPDATE_ADDRESS_"+toString(i)+")";
     149                    update_address = "conv_integer(in_UPDATE_"+toString(i)+"_ADDRESS)";
    150150                  else
    151151                    update_address = "0";
    152152                 
    153                   vhdl.set_body ("\telse reg_TABLE ("+update_address+")("+toString(k)+")");
     153                  vhdl->set_body ("\telse reg_TABLE ("+update_address+")("+toString(k)+")");
    154154                }
    155               vhdl.set_body ("\t;");         
     155              vhdl->set_body ("\t;");         
    156156              cpt ++;
    157157            }
    158158        }
    159159
    160     vhdl.set_body ("");
    161     vhdl.set_body ("-----------------------------------------------------------------------------");
    162     vhdl.set_body ("-- Transition");
    163     vhdl.set_body ("-----------------------------------------------------------------------------");
    164     vhdl.set_body ("");
    165 
    166     vhdl.set_body ("reg_TABLE_write: process (in_CLOCK)");
    167     vhdl.set_body ("begin");
    168     vhdl.set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");
    169     vhdl.set_body ("\t\t-- Access port");
     160    vhdl->set_body ("");
     161    vhdl->set_body ("-----------------------------------------------------------------------------");
     162    vhdl->set_body ("-- Transition");
     163    vhdl->set_body ("-----------------------------------------------------------------------------");
     164    vhdl->set_body ("");
     165
     166    vhdl->set_body ("reg_TABLE_write: process (in_CLOCK)");
     167    vhdl->set_body ("begin");
     168    vhdl->set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");
     169    vhdl->set_body ("\t\t-- Access port");
    170170    for (uint32_t i=0; i<_param._nb_access; i++)
    171171      {
     
    173173
    174174        if (_param._size_table>1)
    175           access_address = "conv_integer(in_ACCESS_ADDRESS_"+toString(i)+")";
     175          access_address = "conv_integer(in_ACCESS_"+toString(i)+"_ADDRESS)";
    176176        else
    177177          access_address = "0";
    178178
    179         vhdl.set_body ("\t\tif (in_ACCESS_VAL_"+toString(i)+" = '1') then");
    180         vhdl.set_body ("\t\t\treg_TABLE ("+access_address+") <= access_next_entry_"+toString(i)+";");
    181         vhdl.set_body ("\t\tend if;");
    182       }
    183 
    184     vhdl.set_body ("\t\t-- Update port");
     179        vhdl->set_body ("\t\tif (in_ACCESS_"+toString(i)+"_VAL = '1') then");
     180        vhdl->set_body ("\t\t\treg_TABLE ("+access_address+") <= access_next_entry_"+toString(i)+";");
     181        vhdl->set_body ("\t\tend if;");
     182      }
     183
     184    vhdl->set_body ("\t\t-- Update port");
    185185    for (uint32_t i=0; i<_param._nb_update; i++)
    186186      {
     
    188188
    189189        if (_param._size_table>1)
    190           update_address = "conv_integer(in_UPDATE_ADDRESS_"+toString(i)+")";
     190          update_address = "conv_integer(in_UPDATE_"+toString(i)+"_ADDRESS)";
    191191        else
    192192          update_address = "0";
    193193                 
    194         vhdl.set_body ("\t\tif (in_UPDATE_VAL_"+toString(i)+" = '1') then");
    195         vhdl.set_body ("\t\t\treg_TABLE ("+update_address+") <= update_next_entry_"+toString(i)+";");
    196         vhdl.set_body ("\t\tend if;");
    197       }
    198 
    199     vhdl.set_body ("\tend if;");
    200     vhdl.set_body ("end process reg_TABLE_write;");
    201 
    202     vhdl.set_body ("");
    203     vhdl.set_body ("-----------------------------------------------------------------------------");
    204     vhdl.set_body ("-- Output");
    205     vhdl.set_body ("-----------------------------------------------------------------------------");
    206     vhdl.set_body ("");
    207     vhdl.set_body ("-- Ack is always ");
    208     vhdl.set_body ("");
    209     for (uint32_t i=0; i<_param._nb_access; i++)
    210       {
    211         vhdl.set_body ("out_ACCESS_ACK_"+toString(i)+"    <= '1';");
    212         vhdl.set_body ("out_ACCESS_ENTITY_"+toString(i)+" <= access_entity_"+toString(i)+" when in_ACCESS_VAL_"+toString(i)+" = '1' else (others => '0');");
    213       }
    214     vhdl.set_body ("");
     194        vhdl->set_body ("\t\tif (in_UPDATE_"+toString(i)+"_VAL = '1') then");
     195        vhdl->set_body ("\t\t\treg_TABLE ("+update_address+") <= update_next_entry_"+toString(i)+";");
     196        vhdl->set_body ("\t\tend if;");
     197      }
     198
     199    vhdl->set_body ("\tend if;");
     200    vhdl->set_body ("end process reg_TABLE_write;");
     201
     202    vhdl->set_body ("");
     203    vhdl->set_body ("-----------------------------------------------------------------------------");
     204    vhdl->set_body ("-- Output");
     205    vhdl->set_body ("-----------------------------------------------------------------------------");
     206    vhdl->set_body ("");
     207    vhdl->set_body ("-- Ack is always ");
     208    vhdl->set_body ("");
     209    for (uint32_t i=0; i<_param._nb_access; i++)
     210      {
     211        vhdl->set_body ("out_ACCESS_"+toString(i)+"_ACK    <= '1';");
     212        vhdl->set_body ("out_ACCESS_"+toString(i)+"_ENTITY <= access_entity_"+toString(i)+" when in_ACCESS_"+toString(i)+"_VAL = '1' else (others => '0');");
     213      }
     214    vhdl->set_body ("");
    215215    for (uint32_t i=0; i<_param._nb_update; i++)
    216216      {
    217         vhdl.set_body ("out_UPDATE_ACK_"+toString(i)+"    <= '1';");
     217        vhdl->set_body ("out_UPDATE_"+toString(i)+"_ACK    <= '1';");
    218218      }
    219219  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl_declaration.cpp

    r15 r42  
    1616
    1717
    18   void Victim_Pseudo_LRU::vhdl_declaration (Vhdl & vhdl)
     18  void Victim_Pseudo_LRU::vhdl_declaration (Vhdl * & vhdl)
    1919  {
    20     vhdl.set_type ("Ttable", "array (" + toString(_param._size_table-1) + " downto 0) of "+std_logic(_param._nb_entity-1));
     20    vhdl->set_type ("Ttable", "array (" + toString(_param._size_table-1) + " downto 0) of "+std_logic(_param._nb_entity-1));
    2121
    2222
    23     vhdl.set_signal ("reg_TABLE", "Ttable");
     23    vhdl->set_signal ("reg_TABLE", "Ttable");
    2424    for (uint32_t i=0; i<_param._nb_access; i++)
    2525      {
    26         vhdl.set_signal ("access_entry_"+toString(i)+"     ",std_logic(_param._nb_entity-1));
    27         vhdl.set_signal ("access_next_entry_"+toString(i)+"",std_logic(_param._nb_entity-1));
    28         vhdl.set_signal ("access_entity_"+toString(i)+"    ",std_logic(static_cast<uint32_t>(log2(_param._nb_entity))));
     26        vhdl->set_signal ("access_entry_"+toString(i)+"     ",std_logic(_param._nb_entity-1));
     27        vhdl->set_signal ("access_next_entry_"+toString(i)+"",std_logic(_param._nb_entity-1));
     28        vhdl->set_signal ("access_entity_"+toString(i)+"    ",std_logic(static_cast<uint32_t>(log2(_param._nb_entity))));
    2929      }
    3030
    3131    for (uint32_t i=0; i<_param._nb_update; i++)
    3232      {
    33         vhdl.set_signal ("update_next_entry_"+toString(i)+"",std_logic(_param._nb_entity-1));
     33        vhdl->set_signal ("update_next_entry_"+toString(i)+"",std_logic(_param._nb_entity-1));
    3434      }
    3535  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl_port.cpp

    r15 r42  
    1616
    1717
    18   void Victim_Pseudo_LRU::vhdl_port (Vhdl & vhdl)
     18  void Victim_Pseudo_LRU::vhdl_port (Vhdl * & vhdl)
    1919  {
    20     vhdl.set_port ("in_CLOCK ", IN, 1);
    21     vhdl.set_port ("in_NRESET", IN, 1);
    22 
    23     for (uint32_t i = 0; i < _param._nb_access; i ++)
    24       {
    25         vhdl.set_port (" in_ACCESS_VAL_"+toString(i)+"     ",IN ,std_logic(1));
    26         vhdl.set_port ("out_ACCESS_ACK_"+toString(i)+"     ",OUT,std_logic(1));
    27         if (_param._size_table>1)
    28           vhdl.set_port (" in_ACCESS_ADDRESS_"+toString(i)+" ",IN ,std_logic(static_cast<uint32_t>(log2(_param._size_table))));
    29         vhdl.set_port ("out_ACCESS_ENTITY_"+toString(i)+"  ",OUT,std_logic(static_cast<uint32_t>(log2(_param._nb_entity))));
    30       }
    31 
    32     for (uint32_t i = 0; i < _param._nb_update; i ++)
    33       {
    34         vhdl.set_port (" in_UPDATE_VAL_"+toString(i)+"     ",IN ,std_logic(1));
    35         vhdl.set_port ("out_UPDATE_ACK_"+toString(i)+"     ",OUT,std_logic(1));
    36         if (_param._size_table>1)
    37           vhdl.set_port (" in_UPDATE_ADDRESS_"+toString(i)+" ",IN ,std_logic(static_cast<uint32_t>(log2(_param._size_table))));
    38         vhdl.set_port (" in_UPDATE_ENTITY_"+toString(i)+"  ",IN ,std_logic(static_cast<uint32_t>(log2(_param._nb_entity))));
    39       }
     20    _interfaces->set_port(vhdl);
    4021  };
    4122
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_vhdl_testbench_transition.cpp

    r15 r42  
    1616
    1717
    18   void Victim_Pseudo_LRU::vhdl_testbench_transition (Vhdl_Testbench & vhdl_testbench)
     18  void Victim_Pseudo_LRU::vhdl_testbench_transition (void)
    1919  {
    20 #ifndef SYSTEMCASS_SPECIFIC
    21     sc_cycle(0);
    22 #endif
    23     vhdl_testbench.add_input  (PORT_READ(in_NRESET));
     20    // Evaluation before read the ouput signal
     21    sc_start(0);
    2422
    25     for (uint32_t i = 0; i < _param._nb_access; i ++)
    26       {
    27         vhdl_testbench.add_input  (PORT_READ( in_ACCESS_VAL     [i]));
    28         vhdl_testbench.add_output (PORT_READ(out_ACCESS_ACK     [i]));
    29         if (_param._size_table>1)
    30           vhdl_testbench.add_input  (PORT_READ( in_ACCESS_ADDRESS [i]));
    31         vhdl_testbench.add_output (PORT_READ(out_ACCESS_ENTITY  [i]));
    32       }
    33 
    34     for (uint32_t i = 0; i < _param._nb_update; i ++)
    35       {
    36         vhdl_testbench.add_input  (PORT_READ( in_UPDATE_VAL     [i]));
    37         vhdl_testbench.add_output (PORT_READ(out_UPDATE_ACK     [i]));
    38         if (_param._size_table>1)
    39           vhdl_testbench.add_input  (PORT_READ( in_UPDATE_ADDRESS [i]));
    40         vhdl_testbench.add_input  (PORT_READ( in_UPDATE_ENTITY  [i]));
    41       }
    42 
    43     vhdl_testbench.add_test(true);
    44 
    45     vhdl_testbench.new_cycle (); // always at the end
     23    _interfaces->testbench();
    4624  };
    4725
Note: See TracChangeset for help on using the changeset viewer.