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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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  };
Note: See TracChangeset for help on using the changeset viewer.