Changeset 42


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
Files:
40 added
31 deleted
140 edited
12 moved

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/SelfTest/src/test.cpp

    r2 r42  
    4343   *********************************************************************/
    4444  sc_clock                                 CLOCK ("clock", 1.0, 0.5);
     45  sc_signal<Tcontrol_t>                    RESET;
    4546  sc_signal<Tdata_t>                       DATA_IN  [param._nb_port];
    4647  sc_signal<Tcontrol_t>                    ADDSUB   [param._nb_port];
     
    5354  cout << "<" << name << "> Instanciation of _Counter" << endl;
    5455 
    55  #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    5656  (*(_Counter->in_CLOCK))        (CLOCK);
    57 #endif
     57  (*(_Counter->in_NRESET))       (RESET);
    5858
    5959  for (uint32_t i=0; i<param._nb_port; i++)
     
    7979
    8080  sc_start(0);
    81   _Counter->vhdl_testbench_label("Initialisation");
     81
     82  RESET.write(1);
     83
    8284  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
    8385
    84   _Counter->vhdl_testbench_label("Loop of Test");
    8586  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
    8687
    8788  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
    8889    {
    89       _Counter->vhdl_testbench_label("Iteration "+toString(iteration));
    9090      cout << "{" << static_cast<uint32_t>(sc_simulation_time()) << "} Itération " << iteration << endl;
    9191      for (uint32_t i=0; i<param._nb_port; i++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/include/Counter.h

    r2 r42  
    2525#include "Behavioural/include/Vhdl.h"
    2626#endif
    27 #ifdef VHDL_TESTBENCH
    28 #include "Behavioural/include/Vhdl_Testbench.h"
    29 #endif
     27#include "Behavioural/include/Component.h"
    3028
    3129using namespace std;
    3230
    33 namespace morpheo                    {
     31namespace morpheo {
    3432namespace behavioural {
    3533namespace generic {
    3634namespace counter {
    37 
    3835
    3936  class Counter
     
    5552#endif
    5653
    57 #ifdef VHDL_TESTBENCH
    58   private   : Vhdl_Testbench                 * _vhdl_testbench;
    59 #endif
     54  public    : Component                      * _component;
     55  private   : Interfaces                     * _interfaces;
    6056
    6157#ifdef SYSTEMC
     
    6359    // Interface
    6460  public    : SC_CLOCK                      *  in_CLOCK        ;
    65 
     61  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
    6662  public    : SC_IN (Tdata_t)              **  in_COUNTER_DATA         ;
    6763  public    : SC_IN (Tcontrol_t)           **  in_COUNTER_ADDSUB       ;
     
    107103#if VHDL                                       
    108104  public  : void     vhdl                      (void);
    109   private : void     vhdl_port                 (Vhdl & vhdl);
    110   private : void     vhdl_declaration          (Vhdl & vhdl);
    111   private : void     vhdl_body                 (Vhdl & vhdl);
     105  private : void     vhdl_port                 (Vhdl * & vhdl);
     106  private : void     vhdl_declaration          (Vhdl * & vhdl);
     107  private : void     vhdl_body                 (Vhdl * & vhdl);
    112108#endif                                         
    113109                                               
    114110#ifdef VHDL_TESTBENCH                         
    115   private : void     vhdl_testbench_port       (void);
    116111  private : void     vhdl_testbench_transition (void);
    117112#endif
    118   public  : void     vhdl_testbench_label      (string label);
    119113  };
    120114
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter.cpp

    r2 r42  
    3131    log_printf(FUNC,Counter,"Counter","Begin");
    3232
     33#ifdef SYSTEMC
     34    allocation ();
     35#endif
     36
    3337#ifdef STATISTICS
    3438    // Allocation of statistics
     
    3640                            param_statistics          ,
    3741                            param);
    38 #endif
    39 
    40 #ifdef VHDL_TESTBENCH
    41     // Creation of a testbench
    42     //  -> port
    43     //  -> clock's signals
    44     _vhdl_testbench = new Vhdl_Testbench (_name);
    45     vhdl_testbench_port           ();
    46     _vhdl_testbench->set_clock    ("in_CLOCK",false);
    4742#endif
    4843
     
    5348
    5449#ifdef SYSTEMC
    55     allocation ();
    56 
    5750    SC_METHOD (transition);
    5851    dont_initialize ();
     
    8578#endif
    8679
    87 #ifdef VHDL_TESTBENCH
    88     // generate the test bench
    89     _vhdl_testbench->generate_file();
    90     delete _vhdl_testbench;
    91 #endif
    92 
    9380#ifdef STATISTICS
    9481    _stat->generate_file(statistics(0));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_allocation.cpp

    r2 r42  
    2121    log_printf(FUNC,Counter,"allocation","Begin");
    2222
    23 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    24     in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
     23    _component   = new Component ();
     24
     25    Entity * entity = _component->set_entity (_name     
     26                                             ,"Counter" 
     27#ifdef POSITION
     28                                             ,COMBINATORY
    2529#endif
     30                                              );
     31   
     32    _interfaces = entity->set_interfaces();
    2633
    27      in_COUNTER_DATA  = new SC_IN (Tdata_t)    * [_param._nb_port];
    28      in_COUNTER_ADDSUB= new SC_IN (Tcontrol_t) * [_param._nb_port];
    29     out_COUNTER_DATA  = new SC_OUT(Tdata_t)    * [_param._nb_port];
    30    
    31     for (uint32_t i=0; i<_param._nb_port; i++)
    32       {
    33         rename = " in_COUNTER_DATA_" +toString(i);
    34          in_COUNTER_DATA  [i] = new SC_IN (Tdata_t)    (rename.c_str());
     34    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35    {
     36      Interface * interface = _interfaces->set_interface(""
     37#ifdef POSITION
     38                                                         , IN 
     39                                                         , SOUTH
     40                                                         , "Generalist interface"
     41#endif
     42                                                         );
     43     
     44      in_CLOCK              = interface->set_signal_clk              ("clock" ,1,CLOCK_VHDL_NO);
     45      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_NO);
     46    }
    3547
    36         rename = " in_COUNTER_ADDSUB_"+toString(i);
    37          in_COUNTER_ADDSUB[i] = new SC_IN (Tcontrol_t) (rename.c_str());
    38 
    39         rename = "out_COUNTER_DATA_" +toString(i);
    40         out_COUNTER_DATA  [i] = new SC_OUT(Tdata_t)    (rename.c_str());
    41       }
     48    // ~~~~~[ Interface : "counter" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     49     {
     50        in_COUNTER_DATA  = new SC_IN (Tdata_t)    * [_param._nb_port];
     51        in_COUNTER_ADDSUB= new SC_IN (Tcontrol_t) * [_param._nb_port];
     52       out_COUNTER_DATA  = new SC_OUT(Tdata_t)    * [_param._nb_port];
     53       
     54       for (uint32_t i=0; i<_param._nb_port; i++)
     55         {
     56           Interface_fifo * interface = _interfaces->set_interface("counter_"+toString(i)
     57#ifdef POSITION
     58                                                                   , IN 
     59                                                                   , SOUTH
     60                                                                   , "Counter interface"
     61#endif
     62                                                                   );
     63           
     64            in_COUNTER_DATA   [i] = interface->set_signal_in  <Tdata_t   > ("data"  , _param._size_data);
     65            in_COUNTER_ADDSUB [i] = interface->set_signal_in  <Tcontrol_t> ("addsub", 1                );
     66           out_COUNTER_DATA   [i] = interface->set_signal_out <Tdata_t   > ("data"  , _param._size_data);
     67         }
     68     }
     69#ifdef POSITION
     70    _component->generate_file();
     71#endif
    4272
    4373    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_deallocation.cpp

    r2 r42  
    1919    log_printf(FUNC,Counter,"deallocation","Begin");
    2020
    21 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    22     delete in_CLOCK;
    23 #endif
     21    delete     in_CLOCK;
     22    delete     in_NRESET;
    2423   
    25     for (uint32_t i=0; i<_param._nb_port; i++)
    26       {
    27         delete  in_COUNTER_DATA  [i];
    28         delete  in_COUNTER_ADDSUB[i];
    29         delete out_COUNTER_DATA  [i];
    30       }
    31     delete  in_COUNTER_DATA  ;
    32     delete  in_COUNTER_ADDSUB;
    33     delete out_COUNTER_DATA  ;
     24    delete []  in_COUNTER_DATA  ;
     25    delete []  in_COUNTER_ADDSUB;
     26    delete [] out_COUNTER_DATA  ;
    3427   
    3528    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     29
     30    delete _component;
    3631
    3732    log_printf(FUNC,Counter,"deallocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_genMealy.cpp

    r3 r42  
    11#ifdef SYSTEMC
    2 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    32/*
    43 * $Id$
     
    5150}; // end namespace morpheo             
    5251#endif
    53 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_vhdl.cpp

    r2 r42  
    1919  {
    2020    log_printf(FUNC,Counter,"vhdl","Begin");
    21     Vhdl vhdl (_name);
     21    Vhdl * vhdl = new Vhdl (_name);
    2222
    23     vhdl.set_library_work (_name + "_Pack");
     23    vhdl->set_library_work (_name + "_Pack");
    2424
    2525    vhdl_port        (vhdl);
     
    2727    vhdl_body        (vhdl);
    2828
    29     vhdl.generate_file();
     29    vhdl->generate_file();
     30
     31    delete vhdl;
    3032    log_printf(FUNC,Counter,"vhdl","End");
    3133
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_vhdl_body.cpp

    r2 r42  
    1414namespace counter {
    1515
    16 
    17   void Counter::vhdl_body (Vhdl & vhdl)
     16  void Counter::vhdl_body (Vhdl * & vhdl)
    1817  {
    1918    log_printf(FUNC,Counter,"vhdl_body","Begin");
    20     vhdl.set_body ("");
     19    vhdl->set_body ("");
    2120   
    2221    for (uint32_t i=0; i<_param._nb_port; i++)
     
    2625        if (_param._size_data > 1)
    2726          {
    28             counter_inc = "in_COUNTER_DATA_"+toString(i)+"+1";
    29             counter_dec = "in_COUNTER_DATA_"+toString(i)+"-1";
     27            counter_inc = "in_COUNTER_"+toString(i)+"_DATA+1";
     28            counter_dec = "in_COUNTER_"+toString(i)+"_DATA-1";
    3029          }
    3130        else
    3231          {
    33             counter_inc = "in_COUNTER_DATA_"+toString(i)+"+1";
    34             counter_dec = "in_COUNTER_DATA_"+toString(i)+"-1";
     32            counter_inc = "in_COUNTER_"+toString(i)+"_DATA+1";
     33            counter_dec = "in_COUNTER_"+toString(i)+"_DATA-1";
    3534          }
    3635
    37         vhdl.set_body ("out_COUNTER_DATA_"+toString(i)+" <=");
     36        vhdl->set_body ("out_COUNTER_"+toString(i)+"_DATA <=");
    3837        if (_param._size_data > 1)
    3938          {
    40             vhdl.set_body ("\tin_COUNTER_DATA_"+toString(i)+"+1 when in_COUNTER_ADDSUB_"+toString(i)+" = '1' and in_COUNTER_DATA_"+toString(i)+" < cst_max else");
    41             vhdl.set_body ("\tin_COUNTER_DATA_"+toString(i)+"-1 when in_COUNTER_ADDSUB_"+toString(i)+" = '0' and in_COUNTER_DATA_"+toString(i)+" > cst_min else");
    42             vhdl.set_body ("\tin_COUNTER_DATA_"+toString(i)+";");
     39            vhdl->set_body ("\tin_COUNTER_"+toString(i)+"_DATA+1 when in_COUNTER_"+toString(i)+"_ADDSUB = '1' and in_COUNTER_"+toString(i)+"_DATA < cst_max else");
     40            vhdl->set_body ("\tin_COUNTER_"+toString(i)+"_DATA-1 when in_COUNTER_"+toString(i)+"_ADDSUB = '0' and in_COUNTER_"+toString(i)+"_DATA > cst_min else");
     41            vhdl->set_body ("\tin_COUNTER_"+toString(i)+"_DATA;");
    4342          }
    4443        else
    4544          {
    46             vhdl.set_body ("\tin_COUNTER_ADDSUB_"+toString(i)+";");
     45            vhdl->set_body ("\tin_COUNTER_"+toString(i)+"_ADDSUB;");
    4746          }
    4847      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_vhdl_declaration.cpp

    r2 r42  
    1515
    1616
    17   void Counter::vhdl_declaration (Vhdl & vhdl)
     17  void Counter::vhdl_declaration (Vhdl * & vhdl)
    1818  {
    1919    log_printf(FUNC,Counter,"vhdl_declaration","Begin");
     
    2121    if (_param._size_data > 1)
    2222      {
    23         vhdl.set_constant ("cst_min",_param._size_data,std_logic_others(_param._size_data,0));
    24         vhdl.set_constant ("cst_max",_param._size_data,std_logic_others(_param._size_data,1));
     23        vhdl->set_constant ("cst_min",_param._size_data,std_logic_others(_param._size_data,0));
     24        vhdl->set_constant ("cst_max",_param._size_data,std_logic_others(_param._size_data,1));
    2525      }
    2626
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_vhdl_port.cpp

    r2 r42  
    1515
    1616
    17   void Counter::vhdl_port (Vhdl & vhdl)
     17  void Counter::vhdl_port (Vhdl * & vhdl)
    1818  {
    1919    log_printf(FUNC,Counter,"vhdl_port","Begin");
    2020
    21     for (uint32_t i=0; i<_param._nb_port; i++)
    22       {
    23         vhdl.set_port (" in_COUNTER_DATA_"  +toString(i), IN, _param._size_data);
    24         vhdl.set_port (" in_COUNTER_ADDSUB_"+toString(i), IN, 1                );
    25         vhdl.set_port ("out_COUNTER_DATA_"  +toString(i),OUT, _param._size_data);
    26       }
    27    
     21    _interfaces->set_port(vhdl);
     22
    2823    log_printf(FUNC,Counter,"vhdl_port","End");
    2924  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_vhdl_testbench_transition.cpp

    r2 r42  
    2121    sc_start(0);
    2222
    23     // In order with file Counter_vhdl_testbench_port.cpp
    24     // Warning : if a output depend of a subcomponent, take directly the port of subcomponent
    25     // (because we have no control on the ordonnancer's policy)
    26 
    27     for (uint32_t i=0; i<_param._nb_port; i++)
    28       {
    29         _vhdl_testbench->add_input (PORT_READ( in_COUNTER_DATA  [i]));
    30         _vhdl_testbench->add_input (PORT_READ( in_COUNTER_ADDSUB[i]));
    31         _vhdl_testbench->add_output(PORT_READ(out_COUNTER_DATA  [i]));
    32       }
    33    
    34     // add_test :
    35     //  - True  : the cycle must be compare with the output of systemC
    36     //  - False : no test
    37     _vhdl_testbench->add_test(true);
    38 
    39     _vhdl_testbench->new_cycle (); // always at the end
     23    _interfaces->testbench();
    4024
    4125    log_printf(FUNC,Counter,"vhdl_testbench_transition","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp

    r15 r42  
    9494    READ_VAL  [i] .write (0);
    9595
     96  NRESET.write(0);
     97
    9698  sc_start(5);
     99
     100  NRESET.write(1);
    97101
    98102  cout << "<" << name << "> Write the RegisterFile (no read)" << endl;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h

    r41 r42  
    2323#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Statistics.h"
    2424#endif
    25 #ifdef POSITION
    26 #include "Behavioural/include/Position.h"
    27 #else
    28 #include "Behavioural/include/Interfaces.h"
    29 #endif
     25#include "Behavioural/include/Component.h"
    3026#ifdef VHDL
    3127#include "Behavioural/include/Vhdl.h"
     
    5753#endif
    5854
    59 #ifdef POSITION
    60   private   : Position                       * _position;
    61 #endif
    62 
     55  public    : Component                      * _component;
    6356  private   : Interfaces                     * _interfaces;
    6457
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp

    r41 r42  
    1717  void RegisterFile_Monolithic::allocation (void)
    1818  {
     19    _component   = new Component ();
     20
     21    Entity * entity = _component->set_entity (_name                   
     22                                             ,"RegisterFile_Monolithic"
    1923#ifdef POSITION
    20     _position   = new Position ();
    21 
    22     Entity * entity = _position->set_entity (_name                    ,
    23                                              "RegisterFile_Monolithic",
    24                                              REGISTER                 );
     24                                             ,REGISTER                 
     25#endif
     26                                              );
    2527   
    2628    _interfaces = entity->set_interfaces();
    27 #else
    28     _interfaces = new Interfaces();
    29 #endif
    3029
    3130    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    32     Interface * interface_ = _interfaces->set_interface("", IN  ,SOUTH, "Generalist interface");
    33 
    34      in_CLOCK              = interface_->set_signal_clk              ("clock" ,1);
    35      in_NRESET             = interface_->set_signal_in  <Tcontrol_t> ("nreset",1);
    36 
     31    {
     32      Interface * interface = _interfaces->set_interface(""
     33#ifdef POSITION
     34                                                         , IN
     35                                                         ,SOUTH
     36                                                         , "Generalist interface"
     37#endif
     38                                                         );
     39     
     40      in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
     41      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
     42    }
    3743    // ~~~~~[ Interface : "read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    3844
     
    4450    for (uint32_t i=0; i<_param._nb_port_read; i++)
    4551      {
    46         Interface_fifo * interface_read = _interfaces->set_interface("read_"+toString(i), IN  ,WEST, "Interface Read");
     52        Interface_fifo * interface = _interfaces->set_interface("read_"+toString(i)
     53#ifdef POSITION
     54                                                                , IN 
     55                                                                ,WEST
     56                                                                , "Interface Read"
     57#endif
     58                                                                );
    4759
    48          in_READ_VAL     [i]  = interface_read->set_signal_valack_in        ("val"    , VAL);
    49         out_READ_ACK     [i]  = interface_read->set_signal_valack_out       ("ack"    , ACK);
    50          in_READ_ADDRESS [i]  = interface_read->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
    51         out_READ_DATA    [i]  = interface_read->set_signal_out <Tdata_t   > ("data"   , _param._size_word);
     60         in_READ_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
     61        out_READ_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
     62         in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
     63        out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param._size_word);
    5264      }
    5365
     
    6173    for (uint32_t i=0; i<_param._nb_port_write; i++)
    6274      {
    63         Interface_fifo * interface_write = _interfaces->set_interface("write_"+toString(i), IN  ,EAST, "Interface Write");
     75        Interface_fifo * interface = _interfaces->set_interface("write_"+toString(i)
     76#ifdef POSITION
     77                                                                , IN 
     78                                                                ,EAST
     79                                                                , "Interface Write"
     80#endif
     81                                                                );
    6482
    65          in_WRITE_VAL     [i]  = interface_write->set_signal_valack_in        ("val"    , VAL);
    66         out_WRITE_ACK     [i]  = interface_write->set_signal_valack_out       ("ack"    , ACK);
    67          in_WRITE_ADDRESS [i]  = interface_write->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
    68          in_WRITE_DATA    [i]  = interface_write->set_signal_in  <Tdata_t   > ("data"   , _param._size_word);
     83         in_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
     84        out_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
     85         in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
     86         in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param._size_word);
    6987      }
    7088
     
    7997
    8098#ifdef POSITION
    81     _position->generate_file();
     99    _component->generate_file();
    82100#endif
    83101  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp

    r41 r42  
    1717  void RegisterFile_Monolithic::deallocation (void)
    1818  {
     19    delete _component;
     20
    1921    delete    in_CLOCK;
    2022    delete    in_NRESET;
     
    3335    // ----- Register
    3436    delete [] reg_DATA;
    35 
    36 #ifdef POSITION
    37     delete _position;
    38 #else
    39     delete _interfaces;
    40 #endif
    4137  };
    4238
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h

    r41 r42  
    2222#include "Behavioural/Generic/Select/Select_Priority_Fixed/include/Statistics.h"
    2323#endif
    24 #ifdef POSITION
    25 #include "Behavioural/include/Position.h"
    26 #else
    27 #include "Behavioural/include/Interfaces.h"
    28 #endif
     24#include "Behavioural/include/Component.h"
    2925#ifdef VHDL
    3026#include "Behavioural/include/Vhdl.h"
     
    5854#endif
    5955
    60 #ifdef POSITION
    61   private   : Position                       * _position;
    62 #endif
    63 
     56  private   : Component                      * _component;
    6457  private   : Interfaces                     * _interfaces;
    6558
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed.cpp

    r41 r42  
    7171      sensitive << *(in_VAL [i]);
    7272
    73 #ifdef SYSTEMCASS_SPECIFIC
     73#  ifdef SYSTEMCASS_SPECIFIC
    7474    // List dependency information
    7575
     
    8585      }
    8686   
    87 #endif   
     87#  endif   
    8888#endif
    8989    log_printf(FUNC,Select_Priority_Fixed,"Select_Priority_Fixed","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_allocation.cpp

    r41 r42  
    1919    log_printf(FUNC,Select_Priority_Fixed,"allocation","Begin");
    2020
     21    _component   = new Component ();
     22
     23    Entity * entity = _component->set_entity (_name                 
    2124#ifdef POSITION
    22     _position   = new Position ();
    23 
    24     Entity * entity = _position->set_entity (_name                  ,
    25                                              "Select_Priority_Fixed",
    26                                              COMBINATORY            );
     25                                             ,"Select_Priority_Fixed"
     26                                             ,COMBINATORY           
     27#endif
     28                                              );
    2729   
    2830    _interfaces = entity->set_interfaces();
    29 #else
    30     _interfaces = new Interfaces();
    31 #endif
    3231
    3332    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    3433
    35     Interface_fifo * interface_ = _interfaces->set_interface("", IN  ,WEST, "Generalist interface");
     34    Interface_fifo * interface = _interfaces->set_interface(""
     35#ifdef POSITION
     36                                                            ,IN 
     37                                                            ,WEST
     38                                                            ,"Generalist interface"
     39#endif
     40                                                            );
    3641
    37      in_CLOCK        = interface_->set_signal_clk              ("clock" ,1, CLOCK_VHDL_NO);
    38      in_NRESET       = interface_->set_signal_in  <Tcontrol_t> ("nreset",1);
     42     in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_NO);
     43     in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1);
    3944     in_VAL          = new SC_IN (Tcontrol_t)           * [_param._nb_entity];
    4045    if (_param._encoding_one_hot)
     
    4348    for (uint32_t i=0; i<_param._nb_entity; i++)
    4449      {
    45          in_VAL [i]    = interface_->set_signal_in  <Tcontrol_t> ("val_"+toString(i),1);
     50         in_VAL [i]    = interface->set_signal_in  <Tcontrol_t> ("val_"+toString(i),1);
    4651        if (_param._encoding_one_hot)
    47         out_ACK [i]    = interface_->set_signal_out <Tcontrol_t> ("ack_"+toString(i),1);
     52        out_ACK [i]    = interface->set_signal_out <Tcontrol_t> ("ack_"+toString(i),1);
    4853      }
    4954
    5055    if (_param._encoding_compact)
    5156      {
    52         out_ENTITY     = interface_->set_signal_out <Tentity_t > ("entity"    , _param._size_entity);
    53         out_ENTITY_ACK = interface_->set_signal_out <Tcontrol_t> ("entity_ack", 1);
     57        out_ENTITY     = interface->set_signal_out <Tentity_t > ("entity"    , _param._size_entity);
     58        out_ENTITY_ACK = interface->set_signal_out <Tcontrol_t> ("entity_ack", 1);
    5459      }
    5560
     
    5762
    5863#ifdef POSITION
    59     _position->generate_file();
     64    _component->generate_file();
    6065#endif
    6166
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/src/Select_Priority_Fixed_deallocation.cpp

    r41 r42  
    3434    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    3535
    36 #ifdef POSITION
    37     delete _position;
    38 #else
    39     delete _interfaces;
    40 #endif
     36    delete _component;
     37
    4138    log_printf(FUNC,Select_Priority_Fixed,"deallocation","End");
    4239  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp

    r2 r42  
    4444   *********************************************************************/
    4545  sc_clock                                 CLOCK ("clock", 1.0, 0.5);
     46  sc_signal <Tdirection_t>                 NRESET("nreset");
    4647  sc_signal <Tdata_t     >                 SHIFTER_DATA_IN   [param._nb_port];
    4748  sc_signal <Tshift_t    >                 SHIFTER_SHIFT     [param._nb_port];
     
    6162#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    6263  (*(_Shifter->in_CLOCK))        (CLOCK);
     64  (*(_Shifter->in_NRESET))       (NRESET);
    6365#endif
    6466  for (uint32_t i=0; i<param._nb_port; i++)
     
    116118
    117119  sc_start(0);
     120
     121  NRESET.write(1);
    118122 
    119123  for (uint32_t x=0; x<6; x++)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h

    r2 r42  
    2424#include "Behavioural/include/Vhdl.h"
    2525#endif
    26 #ifdef VHDL_TESTBENCH
    27 #include "Behavioural/include/Vhdl_Testbench.h"
    28 #endif
     26#include "Behavioural/include/Component.h"
    2927
    3028using namespace std;
     
    5048#endif
    5149
    52 #ifdef VHDL_TESTBENCH
    53   private   : Vhdl_Testbench                 * _vhdl_testbench;
    54 #endif
     50  public    : Component                      * _component;
     51  private   : Interfaces                     * _interfaces;
    5552
    5653#ifdef SYSTEMC
    5754    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    5855  public    : SC_CLOCK                      *  in_CLOCK             ;
     56  public    : SC_IN (Tcontrol_t)            *  in_NRESET            ;
     57
    5958    // Interface "shifter"
    6059  public    : SC_IN (Tdata_t)              **  in_SHIFTER_DATA      ;
     
    104103#if VHDL                                       
    105104  public  : void     vhdl                      (void);
    106   private : void     vhdl_port                 (Vhdl & vhdl);
    107   private : void     vhdl_declaration          (Vhdl & vhdl);
    108   private : void     vhdl_body                 (Vhdl & vhdl);
     105  private : void     vhdl_port                 (Vhdl * & vhdl);
     106  private : void     vhdl_declaration          (Vhdl * & vhdl);
     107  private : void     vhdl_body                 (Vhdl * & vhdl);
    109108#endif                                         
    110109#ifdef STATISTICS
     
    113112                                               
    114113#ifdef VHDL_TESTBENCH                         
    115   private : void     vhdl_testbench            (Vhdl_Testbench & vhdl_testbench);
    116   private : void     vhdl_testbench_port       (Vhdl_Testbench & vhdl_testbench);
    117   private : void     vhdl_testbench_transition (Vhdl_Testbench & vhdl_testbench);
     114  private : void     vhdl_testbench_transition (void);
    118115#endif
    119116
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp

    r2 r42  
    1515
    1616#ifdef SYSTEMC
    17   Shifter::Shifter (sc_module_name name,
     17  Shifter::Shifter (sc_module_name name
    1818#else
    19   Shifter::Shifter (string name,
     19  Shifter::Shifter (string name
    2020#endif
    2121#ifdef STATISTICS
    22                     morpheo::behavioural::Parameters_Statistics             param_statistics,
     22                    ,morpheo::behavioural::Parameters_Statistics             param_statistics
    2323#endif
    24                     morpheo::behavioural::generic::shifter::Parameters param ):
     24                    ,morpheo::behavioural::generic::shifter::Parameters param ):
    2525                    _name   (name)
    2626                    ,_param (param)
    2727  {
     28#ifdef SYSTEMC
     29    allocation ();
     30#endif
     31
    2832#ifdef STATISTICS
    2933    // Allocation of statistics
     
    3135                            param_statistics          ,
    3236                            param);
    33 #endif
    34 
    35 #ifdef VHDL_TESTBENCH
    36     // Creation of a testbench
    37     //  -> port
    38     //  -> clock's signals
    39     _vhdl_testbench = new Vhdl_Testbench (_name);
    40     vhdl_testbench_port           (*_vhdl_testbench);
    41     _vhdl_testbench->set_clock    ("in_CLOCK",false);
    4237#endif
    4338
     
    4843
    4944#ifdef SYSTEMC
    50     allocation ();
    51 
    5245#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    5346    SC_METHOD (transition);
     
    107100#endif
    108101
    109 #ifdef VHDL_TESTBENCH
    110     // generate the test bench
    111     _vhdl_testbench->generate_file();
    112     delete _vhdl_testbench;
    113 #endif
    114 
    115102#ifdef STATISTICS
    116103    _stat->generate_file(statistics(0));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp

    r2 r42  
    1717  void Shifter::allocation (void)
    1818  {
    19     string rename;
     19    _component   = new Component ();
     20
     21    Entity * entity = _component->set_entity (_name       
     22                                             ,"Shifter"   
     23#ifdef POSITION
     24                                             ,COMBINATORY
     25#endif
     26                                             );
     27   
     28    _interfaces = entity->set_interfaces();
    2029
    2130#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    22      in_CLOCK           = new SC_CLOCK ("SC_CLOCK");
     31    {
     32      Interface_fifo * interface = _interfaces->set_interface(""
     33#ifdef POSITION
     34                                                              , IN 
     35                                                              , SOUTH
     36                                                              , "Generalist interface"
    2337#endif
    24     // Interface "shifter"
    25      in_SHIFTER_DATA      = new SC_IN (Tdata_t)      * [_param._nb_port];
    26     if (_param._shift_value == 0)
    27      in_SHIFTER_SHIFT     = new SC_IN (Tshift_t)     * [_param._nb_port];
    28     if (_param._direction   == external_direction)
    29      in_SHIFTER_DIRECTION = new SC_IN (Tdirection_t) * [_param._nb_port];
    30     if (_param._rotate      == external_rotate)
    31      in_SHIFTER_TYPE      = new SC_IN (Ttype_t)      * [_param._nb_port];
    32     if (_param._carry       == external_carry)
    33      in_SHIFTER_CARRY     = new SC_IN (Tcarry_t)     * [_param._nb_port];
    34     if (_param._carry       == external_completion)
    35     if (_param._type_completion_bool == true)
    36      in_SHIFTER_CARRY_IN  = new SC_IN (Tcontrol_t)   * [_param._nb_port];
    37     else
    38      in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param._nb_port];
    39     out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param._nb_port];
     38                                                              );
     39     
     40       in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_NO);
     41       in_NRESET       = interface->set_signal_in <Tcontrol_t>  ("nreset",1, RESET_VHDL_NO);
     42    }
     43#endif
    4044   
    41     for (uint32_t i=0; i<_param._nb_port; i++)
    42       {
    43         rename = "in_SHIFTER_DATA["      + toString(i) + "]";
    44          in_SHIFTER_DATA      [i] = new SC_IN (Tdata_t)      (rename.c_str());
     45    {
     46      // Interface "shifter"
     47       in_SHIFTER_DATA      = new SC_IN (Tdata_t)      * [_param._nb_port];
     48      if (_param._shift_value == 0)
     49       in_SHIFTER_SHIFT     = new SC_IN (Tshift_t)     * [_param._nb_port];
     50      if (_param._direction   == external_direction)
     51       in_SHIFTER_DIRECTION = new SC_IN (Tdirection_t) * [_param._nb_port];
     52      if (_param._rotate      == external_rotate)
     53       in_SHIFTER_TYPE      = new SC_IN (Ttype_t)      * [_param._nb_port];
     54      if (_param._carry       == external_carry)
     55       in_SHIFTER_CARRY     = new SC_IN (Tcarry_t)     * [_param._nb_port];
     56      if (_param._carry       == external_completion)
     57      if (_param._type_completion_bool == true)
     58       in_SHIFTER_CARRY_IN  = new SC_IN (Tcontrol_t)   * [_param._nb_port];
     59      else
     60       in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param._nb_port];
     61      out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param._nb_port];
     62     
     63      for (uint32_t i=0; i<_param._nb_port; i++)
     64        {
     65          Interface_fifo * interface = _interfaces->set_interface("shifter_"+toString(i)
     66#ifdef POSITION
     67                                                                  , IN 
     68                                                                  , SOUTH
     69                                                                  , "Generalist interface"
     70#endif
     71                                                                  );
     72         
     73           in_SHIFTER_DATA       [i] = interface->set_signal_in  <Tdata_t     > ("data"      ,_param._size_data);
     74          if (_param._shift_value == 0)
     75           in_SHIFTER_SHIFT      [i] = interface->set_signal_in  <Tshift_t    > ("shift"     ,static_cast<uint32_t>(ceil(log2(_param._size_data))));
     76          if (_param._direction == external_direction)
     77           in_SHIFTER_DIRECTION  [i] = interface->set_signal_in  <Tdirection_t> ("direction" ,1);
     78          if (_param._rotate  == external_rotate)
     79           in_SHIFTER_TYPE       [i] = interface->set_signal_in  <Ttype_t     > ("type"      ,1);
     80          if (_param._carry == external_carry)
     81           in_SHIFTER_CARRY      [i] = interface->set_signal_in  <Tcarry_t    > ("carry"     ,1);
     82          if (_param._carry       == external_completion)
     83          if (_param._type_completion_bool == true)
     84           in_SHIFTER_CARRY_IN   [i] = interface->set_signal_in  <Tcontrol_t  > ("carry_in"  ,1);
     85          else
     86           in_SHIFTER_COMPLETION [i] = interface->set_signal_in  <Tdata_t     > ("completion",_param._size_data_completion);
     87          out_SHIFTER_DATA       [i] = interface->set_signal_out <Tdata_t     > ("data"      ,_param._size_data);
     88        }                                                                                                                       
     89    }
    4590
    46         if (_param._shift_value == 0)
    47           {
    48         rename = "in_SHIFTER_SHIFT["     + toString(i) + "]";
    49          in_SHIFTER_SHIFT     [i] = new SC_IN (Tshift_t)     (rename.c_str());
    50           }
    51         if (_param._direction == external_direction)
    52           {
    53         rename = "in_SHIFTER_DIRECTION[" + toString(i) + "]";
    54          in_SHIFTER_DIRECTION [i] = new SC_IN (Tdirection_t) (rename.c_str());
    55           }
    56         if (_param._rotate  == external_rotate)
    57           {
    58         rename = "in_SHIFTER_TYPE["      + toString(i) + "]";
    59          in_SHIFTER_TYPE     [i]      = new SC_IN (Ttype_t)  (rename.c_str());
    60           }
    61         if (_param._carry == external_carry)
    62           {
    63         rename = "in_SHIFTER_CARRY["    + toString(i) + "]";
    64          in_SHIFTER_CARRY    [i] = new SC_IN (Tcarry_t)      (rename.c_str());
    65           }
     91#ifdef POSITION
     92    _component->generate_file();
     93#endif
    6694
    67         if (_param._carry       == external_completion)
    68         if (_param._type_completion_bool == true)
    69           {
    70          rename = "in_SHIFTER_CARRY_IN["      + toString(i) + "]";
    71          in_SHIFTER_CARRY_IN   [i] = new SC_IN (Tcontrol_t)  (rename.c_str());   
    72           }
    73         else
    74           {
    75          rename = "in_SHIFTER_COMPLETION["    + toString(i) + "]";
    76          in_SHIFTER_COMPLETION [i] = new SC_IN (Tdata_t)     (rename.c_str());
    77           }
    78        
    79         rename = "out_SHIFTER_DATA["    + toString(i) + "]";
    80         out_SHIFTER_DATA     [i] = new SC_OUT(Tdata_t)       (rename.c_str());
    81       }
    8295  };
    83 
     96 
    8497}; // end namespace shifter
    8598}; // end namespace generic
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp

    r2 r42  
    1818  {
    1919#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    20     delete in_CLOCK;
     20    delete     in_CLOCK;
    2121#endif
    2222
    23     // Interface "shifter"
    24     for (uint32_t i=0; i<_param._nb_port; i++)
    25       {
    26         delete  in_SHIFTER_DATA      [i];
    27         if (_param._shift_value == 0)
    28         delete  in_SHIFTER_SHIFT     [i];
    29         if (_param._direction   == external_direction)
    30         delete  in_SHIFTER_DIRECTION [i];
    31         if (_param._rotate      == external_rotate)
    32         delete  in_SHIFTER_TYPE      [i];
    33         if (_param._carry       == external_carry)
    34         delete  in_SHIFTER_CARRY     [i];
    35         if (_param._carry       == external_completion)
    36         if (_param._type_completion_bool == true)
    37         delete  in_SHIFTER_CARRY_IN  [i];         
    38         else
    39         delete  in_SHIFTER_COMPLETION[i];
    40         delete out_SHIFTER_DATA      [i];
    41       }
     23    delete []  in_SHIFTER_DATA      ;
     24    if (_param._shift_value == 0)
     25    delete []  in_SHIFTER_SHIFT     ;
     26    if (_param._direction   == external_direction )
     27    delete []  in_SHIFTER_DIRECTION ;
     28    if (_param._rotate      == external_rotate    )
     29    delete []  in_SHIFTER_TYPE      ;
     30    if (_param._carry       == external_carry     )
     31    delete []  in_SHIFTER_CARRY     ;
     32    if (_param._carry       == external_completion)
     33    if (_param._type_completion_bool == true)
     34    delete []  in_SHIFTER_CARRY_IN  ;
     35    else
     36    delete []  in_SHIFTER_COMPLETION;
     37    delete [] out_SHIFTER_DATA      ;
    4238
    43     delete  in_SHIFTER_DATA      ;
    44     if (_param._shift_value == 0)
    45     delete  in_SHIFTER_SHIFT     ;
    46     if (_param._direction   == external_direction )
    47     delete  in_SHIFTER_DIRECTION ;
    48     if (_param._rotate      == external_rotate    )
    49     delete  in_SHIFTER_TYPE      ;
    50     if (_param._carry       == external_carry     )
    51     delete  in_SHIFTER_CARRY     ;
    52     if (_param._carry       == external_completion)
    53       if (_param._type_completion_bool == true)
    54         delete  in_SHIFTER_CARRY_IN  ;
    55       else
    56         delete  in_SHIFTER_COMPLETION;
    57     delete out_SHIFTER_DATA      ;
     39    delete _component;
     40
    5841  };
    5942
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_transition.cpp

    r2 r42  
    2323
    2424#ifdef VHDL_TESTBENCH
    25     vhdl_testbench_transition (*_vhdl_testbench);
     25    vhdl_testbench_transition ();
    2626#endif
    2727  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl.cpp

    r2 r42  
    1818  void Shifter::vhdl (void)
    1919  {
    20     Vhdl vhdl (_name);
     20    Vhdl * vhdl = new Vhdl (_name);
    2121
    22     vhdl.set_library_work (_name + "_Pack");
     22    vhdl->set_library_work (_name + "_Pack");
    2323
    2424    vhdl_port        (vhdl);
     
    2626    vhdl_body        (vhdl);
    2727
    28     vhdl.generate_file();
     28    vhdl->generate_file();
     29
     30    delete vhdl;
    2931  };
    3032
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp

    r2 r42  
    1515
    1616
    17   void Shifter::vhdl_body (Vhdl & vhdl)
     17  void Shifter::vhdl_body (Vhdl * & vhdl)
    1818  {
    1919    //uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param._size_data)));
    2020
    21     vhdl.set_body ("-- Compute all case of shift");
     21    vhdl->set_body ("-- Compute all case of shift");
    2222
    2323    for (uint32_t i=0; i<_param._nb_port; i++)
     
    2525        //-----[ Shift logic Left ]--------------------------------------------
    2626        if (_param._have_shift_logic_left)
    27           vhdl.set_body ("shift_logic_left_"+toString(i)+"        <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") sll CONV_INTEGER(shift_"+toString(i)+"));");
     27          vhdl->set_body ("shift_logic_left_"+toString(i)+"        <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sll CONV_INTEGER(shift_"+toString(i)+"));");
    2828        //-----[ Shift logic Right ]-------------------------------------------
    2929        if (_param._have_shift_logic_right)
    30           vhdl.set_body ("shift_logic_right_"+toString(i)+"       <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") srl CONV_INTEGER(shift_"+toString(i)+"));");
     30          vhdl->set_body ("shift_logic_right_"+toString(i)+"       <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) srl CONV_INTEGER(shift_"+toString(i)+"));");
    3131        //-----[ Shift arithmetic Left ]---------------------------------------
    3232        if (_param._have_shift_arithmetic_left)
    33           vhdl.set_body ("shift_arithmetic_left_"+toString(i)+"   <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") sla CONV_INTEGER(shift_"+toString(i)+"));");
     33          vhdl->set_body ("shift_arithmetic_left_"+toString(i)+"   <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sla CONV_INTEGER(shift_"+toString(i)+"));");
    3434        //-----[ Shift arithmetic Right ]--------------------------------------
    3535        if (_param._have_shift_arithmetic_right)
    36           vhdl.set_body ("shift_arithmetic_right_"+toString(i)+"  <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") sra CONV_INTEGER(shift_"+toString(i)+"));");
     36          vhdl->set_body ("shift_arithmetic_right_"+toString(i)+"  <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sra CONV_INTEGER(shift_"+toString(i)+"));");
    3737        //-----[ Rotate Left ]-------------------------------------------------
    3838        if (_param._have_rotate_left)
    39           vhdl.set_body ("rotate_left_"+toString(i)+"             <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") rol CONV_INTEGER(shift_"+toString(i)+"));");
     39          vhdl->set_body ("rotate_left_"+toString(i)+"             <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) rol CONV_INTEGER(shift_"+toString(i)+"));");
    4040        //-----[ Rotate Right ]------------------------------------------------
    4141        if (_param._have_rotate_right)
    42           vhdl.set_body ("rotate_right_"+toString(i)+"            <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_DATA_"+toString(i)+") ror CONV_INTEGER(shift_"+toString(i)+"));");
     42          vhdl->set_body ("rotate_right_"+toString(i)+"            <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) ror CONV_INTEGER(shift_"+toString(i)+"));");
    4343      }
    4444
    4545    if (_param._size_data_completion > 0)
    4646      {
    47         vhdl.set_body ("");
    48         vhdl.set_body ("-- Mask");
     47        vhdl->set_body ("");
     48        vhdl->set_body ("-- Mask");
    4949
    5050        for (uint32_t i=0; i<_param._nb_port; i++)
     
    5353           
    5454            if (_param._type_completion_bool == true)
    55               print_shifter_completion = "in_SHIFTER_CARRY_IN";
     55              print_shifter_completion = "in_SHIFTER_"+toString(i)+"_CARRY_IN";
    5656            else
    57               print_shifter_completion = "in_SHIFTER_COMPLETION";
     57              print_shifter_completion = "in_SHIFTER_"+toString(i)+"_COMPLETION";
    5858
    5959            if (_param._size_data == _param._size_data_completion)
    6060              {
    61                 vhdl.set_body ("shifter_completion_left_"+toString(i)+"  <= "+print_shifter_completion+"_"+toString(i)+";");
    62                 vhdl.set_body ("shifter_completion_right_"+toString(i)+" <= "+print_shifter_completion+"_"+toString(i)+";");
     61                vhdl->set_body ("shifter_completion_left_"+toString(i)+"  <= "+print_shifter_completion+";");
     62                vhdl->set_body ("shifter_completion_right_"+toString(i)+" <= "+print_shifter_completion+";");
    6363              }
    6464            else
    6565              {
    66                 vhdl.set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data_completion)+"  <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
    67                 vhdl.set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data_completion                    )+"  <= "+print_shifter_completion+"_"+toString(i)+";");
    68 
    69                 vhdl.set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data-_param._size_data_completion)+" <= "+print_shifter_completion+"_"+toString(i)+";");
    70                 vhdl.set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-_param._size_data_completion                    )+" <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
    71               }
    72            
    73             vhdl.set_body ("mask_completion_left_"+toString(i)+"     <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) sll CONV_INTEGER(shift_"+toString(i)+"));");
    74             vhdl.set_body ("mask_completion_right_"+toString(i)+"    <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) srl CONV_INTEGER(shift_"+toString(i)+"));");
     66                vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data_completion)+"  <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
     67                vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data_completion                    )+"  <= "+print_shifter_completion+";");
     68
     69                vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data-_param._size_data_completion)+" <= "+print_shifter_completion+";");
     70                vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-_param._size_data_completion                    )+" <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
     71              }
     72           
     73            vhdl->set_body ("mask_completion_left_"+toString(i)+"     <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) sll CONV_INTEGER(shift_"+toString(i)+"));");
     74            vhdl->set_body ("mask_completion_right_"+toString(i)+"    <= TO_STDLOGICVECTOR(TO_BITVECTOR(cst_completion) srl CONV_INTEGER(shift_"+toString(i)+"));");
    7575          }
    7676      }
    7777             
    7878
    79     vhdl.set_body ("");
    80     vhdl.set_body ("-- Multiplexor");
     79    vhdl->set_body ("");
     80    vhdl->set_body ("-- Multiplexor");
    8181
    8282    for (uint32_t i=0; i<_param._nb_port; i++)
    8383      {
    84         vhdl.set_body ("out_SHIFTER_DATA_"+toString(i)+"       <=");
     84        vhdl->set_body ("out_SHIFTER_"+toString(i)+"_DATA       <=");
    8585        string print_else = "    ";
    8686
     
    9595              {
    9696                have_when = true;
    97                 print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_left ";
    98                 print_and = " and ";
    99               }
    100             if (_param._rotate      == external_rotate)
    101               {
    102                 have_when = true;
    103                 print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
     97                print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_left ";
     98                print_and = " and ";
     99              }
     100            if (_param._rotate      == external_rotate)
     101              {
     102                have_when = true;
     103                print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
    104104                print_and = " and ";
    105105              }
     
    107107              {
    108108                have_when = true;
    109                 print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_arithmetic";
    110               }
    111 
    112             if (have_when)
    113               print_when = "when " + print_when;
    114 
    115             vhdl.set_body ("\t"+print_else+" shift_arithmetic_left_"+toString(i)+"   "+print_when);
     109                print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_arithmetic";
     110              }
     111
     112            if (have_when)
     113              print_when = "when " + print_when;
     114
     115            vhdl->set_body ("\t"+print_else+" shift_arithmetic_left_"+toString(i)+"   "+print_when);
    116116            print_else = "else";
    117117          }
     
    126126              {
    127127                have_when = true;
    128                 print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_right";
    129                 print_and = " and ";
    130               }
    131             if (_param._rotate      == external_rotate)
    132               {
    133                 have_when = true;
    134                 print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
     128                print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_right";
     129                print_and = " and ";
     130              }
     131            if (_param._rotate      == external_rotate)
     132              {
     133                have_when = true;
     134                print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
    135135                print_and = " and ";
    136136              }
     
    138138              {
    139139                have_when = true;
    140                 print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_arithmetic";
    141               }
    142 
    143             if (have_when)
    144               print_when = "when " + print_when;
    145 
    146             vhdl.set_body ("\t"+print_else+" shift_arithmetic_right_"+toString(i)+"  "+print_when);
     140                print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_arithmetic";
     141              }
     142
     143            if (have_when)
     144              print_when = "when " + print_when;
     145
     146            vhdl->set_body ("\t"+print_else+" shift_arithmetic_right_"+toString(i)+"  "+print_when);
    147147            print_else = "else";
    148148          }
     
    157157              {
    158158                have_when = true;
    159                 print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_left ";
    160                 print_and = " and ";
    161               }
    162             if (_param._rotate      == external_rotate)
    163               {
    164                 have_when = true;
    165                 print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
     159                print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_left ";
     160                print_and = " and ";
     161              }
     162            if (_param._rotate      == external_rotate)
     163              {
     164                have_when = true;
     165                print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
    166166                print_and = " and ";
    167167              }
     
    169169              {
    170170                have_when = true;
    171                 print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_logic     ";
     171                print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_logic     ";
    172172              }
    173173
     
    182182              print_expr_completion = "(shift_logic_left_"+toString(i)+"  and mask_completion_left_"+toString(i)+" ) or ( shifter_completion_left_"+toString(i)+"  and not mask_completion_left_"+toString(i)+" )";
    183183
    184             vhdl.set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
     184            vhdl->set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
    185185            print_else = "else";
    186186          }
     
    195195              {
    196196                have_when = true;
    197                 print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_right";
    198                 print_and = " and ";
    199               }
    200             if (_param._rotate      == external_rotate)
    201               {
    202                 have_when = true;
    203                 print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_shift ";
     197                print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_right";
     198                print_and = " and ";
     199              }
     200            if (_param._rotate      == external_rotate)
     201              {
     202                have_when = true;
     203                print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_shift ";
    204204                print_and = " and ";
    205205              }
     
    207207              {
    208208                have_when = true;
    209                 print_when += print_and+" in_SHIFTER_CARRY_"+toString(i)+" = cst_is_carry_logic     ";
     209                print_when += print_and+" in_SHIFTER_"+toString(i)+"_CARRY = cst_is_carry_logic     ";
    210210              }
    211211
     
    220220              print_expr_completion = "(shift_logic_right_"+toString(i)+" and mask_completion_right_"+toString(i)+") or ( shifter_completion_right_"+toString(i)+" and not mask_completion_right_"+toString(i)+")";
    221221
    222             vhdl.set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
     222            vhdl->set_body ("\t"+print_else+" "+print_expr_completion+"        "+print_when);
    223223            print_else = "else";
    224224          }
     
    233233              {
    234234                have_when = true;
    235                 print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_left ";
    236                 print_and = " and ";
    237               }
    238             if (_param._rotate      == external_rotate)
    239               {
    240                 have_when = true;
    241                 print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_rotate";
    242                 print_and = " and ";
    243               }
    244 
    245             if (have_when)
    246               print_when = "when " + print_when;
    247 
    248             vhdl.set_body ("\t"+print_else+" rotate_left_"+toString(i)+"             "+print_when);
     235                print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_left ";
     236                print_and = " and ";
     237              }
     238            if (_param._rotate      == external_rotate)
     239              {
     240                have_when = true;
     241                print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_rotate";
     242                print_and = " and ";
     243              }
     244
     245            if (have_when)
     246              print_when = "when " + print_when;
     247
     248            vhdl->set_body ("\t"+print_else+" rotate_left_"+toString(i)+"             "+print_when);
    249249            print_else = "else";
    250250          }
     
    259259              {
    260260                have_when = true;
    261                 print_when += " in_SHIFTER_DIRECTION_"+toString(i)+" = cst_is_direction_right";
    262                 print_and = " and ";
    263               }
    264             if (_param._rotate      == external_rotate)
    265               {
    266                 have_when = true;
    267                 print_when += print_and+" in_SHIFTER_TYPE_"+toString(i)+" = cst_is_type_rotate";
    268                 print_and = " and ";
    269               }
    270 
    271             if (have_when)
    272               print_when = "when " + print_when;
    273 
    274             vhdl.set_body ("\t"+print_else+" rotate_right_"+toString(i)+"            "+print_when);
    275             print_else = "else";
    276           }
    277         vhdl.set_body (";");
     261                print_when += " in_SHIFTER_"+toString(i)+"_DIRECTION = cst_is_direction_right";
     262                print_and = " and ";
     263              }
     264            if (_param._rotate      == external_rotate)
     265              {
     266                have_when = true;
     267                print_when += print_and+" in_SHIFTER_"+toString(i)+"_TYPE = cst_is_type_rotate";
     268                print_and = " and ";
     269              }
     270
     271            if (have_when)
     272              print_when = "when " + print_when;
     273
     274            vhdl->set_body ("\t"+print_else+" rotate_right_"+toString(i)+"            "+print_when);
     275            print_else = "else";
     276          }
     277        vhdl->set_body (";");
    278278      }
    279279   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_declaration.cpp

    r2 r42  
    1515
    1616
    17   void Shifter::vhdl_declaration (Vhdl & vhdl)
     17  void Shifter::vhdl_declaration (Vhdl * & vhdl)
    1818  {
    1919    uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param._size_data)));
    2020
    21     vhdl.set_constant("cst_is_direction_left  ",1,_left      );
    22     vhdl.set_constant("cst_is_direction_right ",1,_right     );
    23     vhdl.set_constant("cst_is_type_shift      ",1,_shift     );
    24     vhdl.set_constant("cst_is_type_rotate     ",1,_rotate    );
    25     vhdl.set_constant("cst_is_carry_arithmetic",1,_arithmetic);
    26     vhdl.set_constant("cst_is_carry_logic     ",1,_logic     );
    27     vhdl.set_constant("cst_completion         ",_param._size_data,"(others => '1')");
     21    vhdl->set_constant("cst_is_direction_left  ",1,_left      );
     22    vhdl->set_constant("cst_is_direction_right ",1,_right     );
     23    vhdl->set_constant("cst_is_type_shift      ",1,_shift     );
     24    vhdl->set_constant("cst_is_type_rotate     ",1,_rotate    );
     25    vhdl->set_constant("cst_is_carry_arithmetic",1,_arithmetic);
     26    vhdl->set_constant("cst_is_carry_logic     ",1,_logic     );
     27    vhdl->set_constant("cst_completion         ",_param._size_data,"(others => '1')");
    2828   
    2929    for (uint32_t i=0; i<_param._nb_port; i++)
    3030      {
    3131        if (_param._shift_value != 0)
    32           vhdl.set_constant("shift_"+toString(i),log2_size_data, _param._shift_value);
     32          vhdl->set_constant("shift_"+toString(i),log2_size_data, _param._shift_value);
    3333        else
    34           vhdl.set_alias   ("shift_"+toString(i),std_logic(log2_size_data), "in_SHIFTER_SHIFT_"+toString(i),std_logic_range(log2_size_data));
     34          vhdl->set_alias   ("shift_"+toString(i),std_logic(log2_size_data), "in_SHIFTER_"+toString(i)+"_SHIFT",std_logic_range(log2_size_data));
    3535       
    3636        if (_param._size_data_completion > 0)
    3737          {
    38             vhdl.set_signal ("shifter_completion_left_"+toString(i)+" ",_param._size_data);
    39             vhdl.set_signal ("shifter_completion_right_"+toString(i)+"",_param._size_data);
    40             vhdl.set_signal ("mask_completion_left_"+toString(i)+"    ",_param._size_data);
    41             vhdl.set_signal ("mask_completion_right_"+toString(i)+"   ",_param._size_data);
     38            vhdl->set_signal ("shifter_completion_left_"+toString(i)+" ",_param._size_data);
     39            vhdl->set_signal ("shifter_completion_right_"+toString(i)+"",_param._size_data);
     40            vhdl->set_signal ("mask_completion_left_"+toString(i)+"    ",_param._size_data);
     41            vhdl->set_signal ("mask_completion_right_"+toString(i)+"   ",_param._size_data);
    4242          }
    4343       
    4444        //-----[ Shift logic Left ]--------------------------------------------
    4545        if (_param._have_shift_logic_left)
    46           vhdl.set_signal ("shift_logic_left_"+toString(i)+"      ",_param._size_data);
     46          vhdl->set_signal ("shift_logic_left_"+toString(i)+"      ",_param._size_data);
    4747       
    4848        //-----[ Shift logic Right ]-------------------------------------------
    4949        if (_param._have_shift_logic_right)
    50           vhdl.set_signal ("shift_logic_right_"+toString(i)+"     ",_param._size_data);
     50          vhdl->set_signal ("shift_logic_right_"+toString(i)+"     ",_param._size_data);
    5151       
    5252        //-----[ Shift arithmetic Left ]---------------------------------------
    5353        if (_param._have_shift_arithmetic_left)
    54           vhdl.set_signal ("shift_arithmetic_left_"+toString(i)+" ",_param._size_data);
     54          vhdl->set_signal ("shift_arithmetic_left_"+toString(i)+" ",_param._size_data);
    5555       
    5656        //-----[ Shift arithmetic Right ]--------------------------------------
    5757        if (_param._have_shift_arithmetic_right)
    58           vhdl.set_signal ("shift_arithmetic_right_"+toString(i)+"",_param._size_data);
     58          vhdl->set_signal ("shift_arithmetic_right_"+toString(i)+"",_param._size_data);
    5959       
    6060        //-----[ Rotate Left ]-------------------------------------------------
    6161        if (_param._have_rotate_left)
    62           vhdl.set_signal ("rotate_left_"+toString(i)+"           ",_param._size_data);
     62          vhdl->set_signal ("rotate_left_"+toString(i)+"           ",_param._size_data);
    6363       
    6464        //-----[ Rotate Right ]------------------------------------------------
    6565        if (_param._have_rotate_right)
    66           vhdl.set_signal ("rotate_right_"+toString(i)+"          ",_param._size_data);
     66          vhdl->set_signal ("rotate_right_"+toString(i)+"          ",_param._size_data);
    6767      }
    6868  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_port.cpp

    r2 r42  
    1515
    1616
    17   void Shifter::vhdl_port (Vhdl & vhdl)
     17  void Shifter::vhdl_port (Vhdl * & vhdl)
    1818  {
    19     for (uint32_t i=0; i<_param._nb_port; i++)
    20       {
    21         vhdl.set_port (" in_SHIFTER_DATA_"+toString(i)+"      ", IN, _param._size_data);
    22         if (_param._shift_value == 0)
    23         vhdl.set_port (" in_SHIFTER_SHIFT_"+toString(i)+"     ", IN, static_cast<uint32_t>(ceil(log2(_param._size_data))));
    24         if (_param._direction   == external_direction)
    25         vhdl.set_port (" in_SHIFTER_DIRECTION_"+toString(i)+" ", IN, 1);
    26         if (_param._rotate      == external_rotate)
    27         vhdl.set_port (" in_SHIFTER_TYPE_"+toString(i)+"      ", IN, 1);
    28         if (_param._carry       == external_carry)
    29         vhdl.set_port (" in_SHIFTER_CARRY_"+toString(i)+"     ", IN, 1);
    30         if (_param._carry       == external_completion)
    31         if (_param._type_completion_bool == true)
    32         vhdl.set_port (" in_SHIFTER_CARRY_IN_"+toString(i)+"  ", IN, 1);
    33         else
    34         vhdl.set_port (" in_SHIFTER_COMPLETION_"+toString(i)+"", IN, _param._size_data_completion);
    35 
    36         vhdl.set_port ("out_SHIFTER_DATA_"+toString(i)+"      ",OUT, _param._size_data);
    37       }
     19    _interfaces->set_port(vhdl);
    3820  };
    3921}; // end namespace shifter
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_testbench_transition.cpp

    r2 r42  
    1515
    1616
    17   void Shifter::vhdl_testbench_transition (Vhdl_Testbench & vhdl_testbench)
     17  void Shifter::vhdl_testbench_transition (void)
    1818  {
    19 #ifndef SYSTEMCASS_SPECIFIC
    20     sc_cycle(0);
    21 #endif
     19    sc_start(0);
    2220
    23     // In order with file Shifter_vhdl_testbench_port.cpp
    24 
    25     for (uint32_t i=0; i<_param._nb_port; i++)
    26       {
    27         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_DATA      [i]));
    28         if (_param._shift_value == 0)
    29         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_SHIFT     [i]));
    30         if (_param._direction   == external_direction)
    31         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_DIRECTION [i]));
    32         if (_param._rotate      == external_rotate)
    33         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_TYPE      [i]));
    34         if (_param._carry       == external_carry)
    35         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_CARRY     [i]));
    36         if (_param._carry       == external_completion)
    37         if (_param._type_completion_bool == true)
    38         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_CARRY_IN  [i]));
    39         else
    40         vhdl_testbench.add_input  (PORT_READ( in_SHIFTER_COMPLETION[i]));
    41         vhdl_testbench.add_output (PORT_READ(out_SHIFTER_DATA      [i]));
    42       }
    43    
    44     // add_test :
    45     //  - True  : the cycle must be compare with the output of systemC
    46     //  - False : no test
    47     vhdl_testbench.add_test(true);
    48 
    49     vhdl_testbench.new_cycle (); // always at the end
     21    _interfaces->testbench();
    5022  };
    5123
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/configuration.cfg

    r15 r42  
    11Victim_Pseudo_LRU
    2 4       4       *2      # nb_entity
    3 1       1       +2      # nb_access
    4 1       1       +2      # nb_update
    5 1       1       *2      # size_table
     24       16      *2      # nb_entity
     31       4       *2      # nb_access
     41       4       *2      # nb_update
     51       16      *2      # size_table
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/include/Victim_Pseudo_LRU.h

    r15 r42  
    4040#include "Behavioural/include/Vhdl.h"
    4141#endif
    42 #ifdef VHDL_TESTBENCH
    43 #include "Behavioural/include/Vhdl_Testbench.h"
     42#ifdef POSITION
     43#include "Behavioural/include/Component.h"
     44#else
     45#include "Behavioural/include/Interfaces.h"
    4446#endif
    4547
     
    175177#endif
    176178
    177 #ifdef VHDL_TESTBENCH
    178   private   : Vhdl_Testbench                 * _vhdl_testbench;
    179 #endif
     179#ifdef POSITION
     180  private   : Component                      * _component;
     181#endif
     182  private   : Interfaces                     * _interfaces;
    180183
    181184#ifdef SYSTEMC
     
    237240#if VHDL                                       
    238241  public  : void     vhdl                      (void);
    239   private : void     vhdl_port                 (Vhdl & vhdl);
    240   private : void     vhdl_declaration          (Vhdl & vhdl);
    241   private : void     vhdl_body                 (Vhdl & vhdl);
     242  private : void     vhdl_port                 (Vhdl * & vhdl);
     243  private : void     vhdl_declaration          (Vhdl * & vhdl);
     244  private : void     vhdl_body                 (Vhdl * & vhdl);
    242245#endif                                         
    243246                                               
    244247#ifdef VHDL_TESTBENCH                         
    245   private : void     vhdl_testbench            (Vhdl_Testbench & vhdl_testbench);
    246   private : void     vhdl_testbench_port       (Vhdl_Testbench & vhdl_testbench);
    247   private : void     vhdl_testbench_transition (Vhdl_Testbench & vhdl_testbench);
     248  private : void     vhdl_testbench_transition (void);
    248249#endif
    249250
  • 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
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest

    r40 r42  
    9696$(DIR_LOG)/%.exec.log           : $(DIR_CFG_GEN)/%.cfg $(DIR_BIN)/$(EXEC).x
    9797                                @$(ECHO) "Execute            : $*"
    98                                 @$(EXPORT) SYSTEMC=$(SYSTEMC_$(SIMULATOR)) ; $(VALGRIND) ./$(DIR_BIN)/$(EXEC).x $(EXEC_PARAMS) $* `$(CAT) $<` &> $@
    99                                 declare -i count=`$(GREP) -ch "Test KO" $@`;            \
    100                                 if $(TEST) $$count -eq 0;                               \
     98                                @$(EXPORT) SYSTEMC=$(SYSTEMC_$(SIMULATOR)) ; ./$(DIR_BIN)/$(EXEC).x $(EXEC_PARAMS) $* `$(CAT) $<` &> $@
     99                                declare -i count=`$(GREP) -ch "Test OK" $@`;            \
     100                                if $(TEST) $$count -ne 0;                               \
    101101                                then echo "                     $* ... OK";             \
    102102                                else echo "                     $* ... KO"; exit 1;     \
     
    119119                                @$(MKDIR) $@
    120120
    121 selftest_clean_all              : library_clean config_clean
     121selftest_clean_all              : library_clean
    122122                               
    123 selftest_clean                  :
     123selftest_clean                  : config_clean
    124124                                @$(RM)  $(DIR_LOG)              \
    125125                                        $(DIR_CFG_USER)/*~      \
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Synthesis

    r40 r42  
    6969                                @$(ECHO) "VHDL's Simulation  : $*"
    7070                                @$(MODELTECH_VSIM) "$(DIR_WORK).`$(BASENAME) $* |$(UPPERtoLOWER)`" &> $@
    71                                 declare -i count=`$(GREP) -ch "Test KO" $@`;            \
    72                                 if $(TEST) $$count -eq 0;                               \
     71                                declare -i count=`$(GREP) -ch "Test OK" $@`;            \
     72                                if $(TEST) $$count -ne 0;                               \
    7373                                then echo "                     $* ... OK";             \
    7474                                else echo "                     $* ... KO"; exit 1;     \
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags

    r40 r42  
    1717                                        -DVHDL                  \
    1818                                        -DVHDL_TESTBENCH        \
    19                                         -DCONFIGURATION         \
    20                                         -DPOSITION              \
    21                                         -DSTATISTICS            \
     19                                        -DVHDL_TESTBENCH_ASSERT \
    2220                                        -DDEBUG=DEBUG_NONE
    2321
     22#                                       -DCONFIGURATION         \
     23#                                       -DSTATISTICS            \
     24#                                       -DPOSITION              \
     25
    2426# Flags :
    25 # DEBUG={level}                 - Print Debug Message
    26 # SYSTEMC                       - To generate a systemc's model
    27 # VHDL                          - To generate a vhdl's    models
    28 # VHDL_TESTBENCH (need SYSTEMC) - In the simulation, generate two testbench's file (input and ouput) to validate the vhdl's model
    29 # STATISTICS     (need SYSTEMC) - In the simulation, generate a statistics's file
    30 # POSITION                      - To generate a position's files     (it's input of viewer)
    31 # CONFIGURATION                 - To generate a configuration's file (it's input of viewer and generator)
     27# DEBUG={level}                        - Print Debug Message
     28# SYSTEMC                              - To generate a systemc's model
     29# VHDL                                 - To generate a vhdl's    models
     30# VHDL_TESTBENCH        (need SYSTEMC) - In the simulation, generate two testbench's file (input and ouput) to validate the vhdl's model
     31# VHDL_TESTBENCH_ASSERT (need SYSTEMC) - In the simulation, generate in  testbench's file an serie of assert
     32# STATISTICS            (need SYSTEMC) - In the simulation, generate a statistics's file
     33# POSITION                             - To generate a position's files     (it's input of viewer)
     34# CONFIGURATION                        - To generate a configuration's file (it's input of viewer and generator)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.mkf

    r23 r42  
    33#
    44
    5 all: _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest Generic/Select/Priority_Fixed/SelfTest
     5all: _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest Generic/Select/Priority_Fixed/SelfTest _Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
    66
    77_Generic/RegisterFile/RegisterFile_Monolithic/SelfTest:
     
    1010Generic/Select/Priority_Fixed/SelfTest:
    1111
     12_Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest:
     13        gmake all -C Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
     14
    1215clean:
    1316        gmake clean -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
     17        gmake clean -C Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
    1418
    1519re: clean all
     
    1721install:
    1822        gmake install -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
     23        gmake install -C Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
    1924
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/include/New_Component.h

    r41 r42  
    2222#include "Behavioural/@DIRECTORY/include/Statistics.h"
    2323#endif
    24 #ifdef POSITION
    25 #include "Behavioural/include/Position.h"
    26 #else
    27 #include "Behavioural/include/Interfaces.h"
    28 #endif
     24#include "Behavioural/include/Component.h"
    2925#ifdef VHDL
    3026#include "Behavioural/include/Vhdl.h"
     
    5551#endif
    5652
    57 #ifdef POSITION
    58   private   : Position                       * _position;
    59 #endif
    60 
     53  public    : Component                      * _component;
    6154  private   : Interfaces                     * _interfaces;
    6255
     
    107100#if VHDL                                       
    108101  public  : void     vhdl                      (void);
    109   private : void     vhdl_port                 (Vhdl & vhdl);
    110102  private : void     vhdl_declaration          (Vhdl & vhdl);
    111103  private : void     vhdl_body                 (Vhdl & vhdl);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component_allocation.cpp

    r40 r42  
    1919    log_printf(FUNC,@COMPONENT,"allocation","Begin");
    2020
     21    _component   = new Component ();
     22
     23    Entity * entity = _component->set_entity (_name       
    2124#ifdef POSITION
    22     _position   = new Position ();
    23 
    24     Entity * entity = _position->set_entity (_name       ,
    25                                              "@COMPONENT",
    26                                              COMBINATORY );
     25                                              ,"@COMPONENT"
     26                                              ,COMBINATORY
     27#endif
     28                                              );
    2729
    2830    _interfaces = entity->set_interfaces();
    29 #else
    30     _interfaces = new Interfaces();
    31 #endif
    3231
    3332    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    3433
    35     Interface * interface_ = _interfaces->set_interface("", IN  ,WEST, "Generalist interface");
     34      Interface * interface = _interfaces->set_interface(""
     35#ifdef POSITION
     36                                                         ,IN
     37                                                         ,SOUTH,
     38                                                         "Generalist interface"
     39#endif
     40                                                         );
    3641
    37      in_CLOCK        = interface_->set_signal_clk              ("clock" ,1, PORT_VHDL_YES_TESTBENCH_NO);
    38      in_NRESET       = interface_->set_signal_in  <Tcontrol_t> ("nreset",1);
     42     in_CLOCK        = interface->set_signal_clk              ("clock" ,1, PORT_VHDL_YES_TESTBENCH_NO);
     43     in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1);
    3944
    4045
     
    4247
    4348#ifdef POSITION
    44     _position->generate_file();
     49    _component->generate_file();
    4550#endif
    4651
    47     log_printf(FUNC,@COMPONENT,"allocation","End");
     52    Log_printf(FUNC,@COMPONENT,"allocation","End");
    4853  };
    4954
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component_deallocation.cpp

    r40 r42  
    2424    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    2525
    26 #ifdef POSITION
    27     delete _position;
    28 #else
    29     delete _interfaces;
    30 #endif
     26    delete _component;
    3127
    3228    log_printf(FUNC,@COMPONENT,"deallocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component_vhdl.cpp

    r40 r42  
    2020    Vhdl vhdl (_name);
    2121
    22     vhdl.set_library_work (_name + "_Pack");
     22    _interfaces->set_port(vhdl);
     23    _component->vhdl_instance(vhdl);
    2324
    24     vhdl_port        (vhdl);
    2525    vhdl_declaration (vhdl);
    2626    vhdl_body        (vhdl);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/src/New_Component_vhdl_port.cpp

    r41 r42  
    1313@NAMESPACE_BEGIN
    1414
    15   void @COMPONENT::vhdl_port (Vhdl & vhdl)
    16   {
    17     log_printf(FUNC,@COMPONENT,"vhdl_port","Begin");
     15//   void @COMPONENT::vhdl_port (Vhdl & vhdl)
     16//   {
     17//     log_printf(FUNC,@COMPONENT,"vhdl_port","Begin");
    1818
    19     _interfaces->set_port(vhdl);
     19//     _interfaces->set_port(vhdl);
    2020
    21     log_printf(FUNC,@COMPONENT,"vhdl_port","End");
    22   };
     21//     Log_printf(FUNC,@COMPONENT,"vhdl_port","End");
     22//   };
    2323
    2424@NAMESPACE_END
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/SelfTest/src/test.cpp

    r15 r42  
    9696
    9797 
    98   _Branch_History_Table->vhdl_testbench_label("Initialisation");
    9998  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
    10099
     
    129128  sc_start(0);
    130129
    131   _Branch_History_Table->vhdl_testbench_label("Loop of Test");
    132130  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
    133131
    134132  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
    135133    {
    136       _Branch_History_Table->vhdl_testbench_label("Iteration "+toString(iteration));
    137134      num_port_branch_complete = rand() % param._nb_branch_complete;
    138135      num_port_predict         = rand() % param._nb_prediction     ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/include/Branch_History_Table.h

    r15 r42  
    2727#include "Behavioural/include/Vhdl.h"
    2828#endif
    29 #ifdef VHDL_TESTBENCH
    30 #include "Behavioural/include/Vhdl_Testbench.h"
    31 #endif
     29#include "Behavioural/include/Component.h"
    3230
    3331using namespace std;
     
    5957#endif
    6058
    61 #ifdef VHDL_TESTBENCH
    62   private   : Vhdl_Testbench                 * _vhdl_testbench;
    63 #endif
     59  public    : Component                      * _component;
     60  private   : Interfaces                     * _interfaces;
    6461
    6562#ifdef SYSTEMC
     
    8380
    8481    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    85   public    : SC_SIGNAL(Thistory_t)        ** signal_BRANCH_COMPLETE_HISTORY;
    8682#endif
    8783
     
    118114#endif                                         
    119115                                               
    120 #if VHDL                                       
    121   public  : void     vhdl                      (void);
    122   private : void     vhdl_port                 (Vhdl & vhdl);
    123   private : void     vhdl_type                 (Vhdl & vhdl);
    124   private : void     vhdl_signal               (Vhdl & vhdl);
    125   private : void     vhdl_body                 (Vhdl & vhdl);
    126 #endif                                         
    127116#ifdef STATISTICS
    128117  public  : string   statistics                (uint32_t depth);
    129118#endif
    130                                                
     119#if VHDL                                       
     120  public  : void     vhdl                      (void);
     121  private : void     vhdl_port                 (Vhdl * & vhdl);
     122  private : void     vhdl_type                 (Vhdl * & vhdl);
     123  private : void     vhdl_signal               (Vhdl * & vhdl);
     124  private : void     vhdl_body                 (Vhdl * & vhdl);
     125#endif                                         
    131126#ifdef VHDL_TESTBENCH                         
    132   private : void     vhdl_testbench_port       (void);
    133127  private : void     vhdl_testbench_transition (void);
    134128#endif
    135   public  : void     vhdl_testbench_label      (string label);
    136129  };
    137130
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table.cpp

    r15 r42  
    3232#endif
    3333  {
     34
     35#ifdef SYSTEMC
     36    allocation ();
     37#endif
     38
    3439#ifdef STATISTICS
    3540    // Allocation of statistics
     
    3944#endif
    4045
    41 #ifdef VHDL_TESTBENCH
    42     // Creation of a testbench
    43     //  -> port
    44     //  -> clock's signals
    45     _vhdl_testbench = new Vhdl_Testbench (_name);
    46     vhdl_testbench_port           ();
    47     _vhdl_testbench->set_clock    ("in_CLOCK",true);
    48 #endif
    49 
    5046#ifdef VHDL
    5147    // generate the vhdl
     
    5349#endif
    5450
     51
    5552#ifdef SYSTEMC
    56     allocation ();
    57 
    5853//     // Constant
    5954//     for (uint32_t i=0; i<_param._nb_prediction     ; i++)
     
    7772  Branch_History_Table::~Branch_History_Table (void)
    7873  {
    79 #ifdef VHDL_TESTBENCH
    80     // generate the test bench
    81     _vhdl_testbench->generate_file();
    82     delete _vhdl_testbench;
    83 #endif
    84 
    8574#ifdef STATISTICS
    8675
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_allocation.cpp

    r15 r42  
    2020  void Branch_History_Table::allocation (void)
    2121  {
    22     string rename;
    23 
    24      in_CLOCK           = new SC_CLOCK           ("in_CLOCK");
    25      in_NRESET          = new SC_IN (Tcontrol_t) ("in_NRESET");
    26 
     22    _component   = new Component ();
     23
     24    Entity * entity = _component->set_entity (_name                 
     25                                             ,"Branch_History_Table"
     26#ifdef POSITION
     27                                             ,MIXTE               
     28#endif
     29                                              );
     30   
     31    _interfaces = entity->set_interfaces();
     32
     33    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34    {
     35      Interface * interface = _interfaces->set_interface(""
     36#ifdef POSITION
     37                                                         , IN 
     38                                                         , SOUTH
     39                                                         , "Generalist interface"
     40#endif
     41                                                         );
     42     
     43      in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
     44      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_YES);
     45    }
     46
     47    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2748     in_PREDICT_VAL     = new SC_IN (Tcontrol_t) * [_param._nb_prediction];
    2849    out_PREDICT_ACK     = new SC_OUT(Tcontrol_t) * [_param._nb_prediction];
     
    3253    for (uint32_t i=0; i<_param._nb_prediction; i++)
    3354      {
    34         rename = "in_PREDICT_VAL["     +toString(i)+"]";
    35          in_PREDICT_VAL     [i] = new SC_IN (Tcontrol_t) (rename.c_str());
    36 
    37         rename = "out_PREDICT_ACK["    +toString(i)+"]";
    38         out_PREDICT_ACK     [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
    39 
    40         rename = "in_PREDICT_ADDRESS["+toString(i)+"]";
    41          in_PREDICT_ADDRESS [i] = new SC_IN (Taddress_t) (rename.c_str());
    42 
    43         rename = "out_PREDICT_HISTORY["+toString(i)+"]";
    44         out_PREDICT_HISTORY [i] = new SC_OUT(Thistory_t) (rename.c_str());
    45       }
    46 
    47         in_BRANCH_COMPLETE_VAL     = new SC_IN     (Tcontrol_t) * [_param._nb_branch_complete];
    48        out_BRANCH_COMPLETE_ACK     = new SC_OUT    (Tcontrol_t) * [_param._nb_branch_complete];
    49         in_BRANCH_COMPLETE_ADDRESS = new SC_IN     (Taddress_t) * [_param._nb_branch_complete];
    50         in_BRANCH_COMPLETE_HISTORY = new SC_IN     (Thistory_t) * [_param._nb_branch_complete];
    51         in_BRANCH_COMPLETE_DIRECTION= new SC_IN     (Tcontrol_t) * [_param._nb_branch_complete];
    52     signal_BRANCH_COMPLETE_HISTORY = new SC_SIGNAL (Thistory_t) * [_param._nb_branch_complete];
     55        Interface_fifo * interface = _interfaces->set_interface("predict_"+toString(i)
     56#ifdef POSITION
     57                                                                , IN 
     58                                                                , WEST
     59                                                                , "Interface Predict"
     60#endif
     61                                                           );
     62
     63         in_PREDICT_VAL     [i] = interface->set_signal_valack_in        ("val"    , VAL);
     64        out_PREDICT_ACK     [i] = interface->set_signal_valack_out       ("ack"    , ACK);
     65         in_PREDICT_ADDRESS [i] = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(ceil(log2(_param._nb_shifter))));
     66        out_PREDICT_HISTORY [i] = interface->set_signal_out <Thistory_t> ("history", _param._size_shifter);
     67      }
     68
     69    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     70
     71        in_BRANCH_COMPLETE_VAL       = new SC_IN     (Tcontrol_t) * [_param._nb_branch_complete];
     72       out_BRANCH_COMPLETE_ACK       = new SC_OUT    (Tcontrol_t) * [_param._nb_branch_complete];
     73        in_BRANCH_COMPLETE_ADDRESS   = new SC_IN     (Taddress_t) * [_param._nb_branch_complete];
     74        in_BRANCH_COMPLETE_HISTORY   = new SC_IN     (Thistory_t) * [_param._nb_branch_complete];
     75        in_BRANCH_COMPLETE_DIRECTION = new SC_IN     (Tcontrol_t) * [_param._nb_branch_complete];
    5376
    5477    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    5578      {
    56          rename = "in_BRANCH_COMPLETE_VAL["    +toString(i)+"]";
    57           in_BRANCH_COMPLETE_VAL     [i] = new SC_IN (Tcontrol_t) (rename.c_str());
    58 
    59          rename = "out_BRANCH_COMPLETE_ACK["   +toString(i)+"]";
    60          out_BRANCH_COMPLETE_ACK     [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
    61 
    62          rename = "in_BRANCH_COMPLETE_ADDRESS["+toString(i)+"]";
    63           in_BRANCH_COMPLETE_ADDRESS [i] = new SC_IN (Taddress_t) (rename.c_str());
    64 
    65          rename = "in_BRANCH_COMPLETE_HISTORY["+toString(i)+"]";
    66           in_BRANCH_COMPLETE_HISTORY [i] = new SC_IN (Thistory_t) (rename.c_str());
    67 
    68          rename = "in_BRANCH_COMPLETE_DIRECTION["    +toString(i)+"]";
    69           in_BRANCH_COMPLETE_DIRECTION[i] = new SC_IN (Tcontrol_t) (rename.c_str());
    70 
    71          rename = "signal_BRANCH_COMPLETE_HISTORY["+toString(i)+"]";
    72          signal_BRANCH_COMPLETE_HISTORY [i] = new SC_SIGNAL (Thistory_t) (rename.c_str());
    73 
     79        Interface_fifo * interface = _interfaces->set_interface("branch_complete_"+toString(i)
     80#ifdef POSITION
     81                                                                , IN 
     82                                                                , EAST
     83                                                                , "Interface branch complete"
     84#endif
     85                                                                );
     86
     87         in_BRANCH_COMPLETE_VAL        [i] = interface->set_signal_valack_in        ("val"      , VAL);
     88        out_BRANCH_COMPLETE_ACK        [i] = interface->set_signal_valack_out       ("ack"      , ACK);
     89         in_BRANCH_COMPLETE_ADDRESS    [i] = interface->set_signal_in  <Taddress_t> ("address"  , static_cast<uint32_t>(ceil(log2(_param._nb_shifter))));
     90         in_BRANCH_COMPLETE_HISTORY    [i] = interface->set_signal_in  <Thistory_t> ("history"  , _param._size_shifter);
     91         in_BRANCH_COMPLETE_DIRECTION  [i] = interface->set_signal_in  <Tcontrol_t> ("direction", 1);
    7492      }
    7593   
    7694    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    7795    string name_component;
     96
    7897    // =====[ component_Shifter ]=========================================   
    7998   
    8099    name_component = _name+"_Shifter";
    81100
    82     component_Shifter = new morpheo::behavioural::generic::shifter::Shifter (name_component.c_str(),
     101    component_Shifter = new morpheo::behavioural::generic::shifter::Shifter (name_component.c_str()
    83102#ifdef STATISTICS
    84                                                                              _param_statistics             ,
    85 #endif
    86                                                                              *(_param._param_shifter)      );
    87    
    88    
    89     // Instantiation
    90 #if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    91     (*(component_Shifter->in_CLOCK))        (*(in_CLOCK));
    92 #endif
    93 
    94     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    95       {
    96         (*(component_Shifter-> in_SHIFTER_DATA       [i]))    (*(    in_BRANCH_COMPLETE_HISTORY  [i]));
    97         (*(component_Shifter-> in_SHIFTER_CARRY_IN   [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION[i]));
    98         (*(component_Shifter->out_SHIFTER_DATA       [i]))    (*(signal_BRANCH_COMPLETE_HISTORY  [i]));
    99       }
    100    
     103                                                                             ,_param_statistics
     104#endif
     105                                                                             ,*(_param._param_shifter));
     106
     107    _component->set_component (component_Shifter->_component
     108#ifdef POSITION
     109                               , 25
     110                               , 25
     111                               , 10
     112                               , 10
     113#endif
     114                               );
     115
    101116     // =====[ component_RegisterFile ]====================================   
    102117   
     
    105120    component_RegisterFile = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic(name_component.c_str(),
    106121#ifdef STATISTICS
    107                                                                                             _param_statistics            ,
    108 #endif
    109                                                                                             *(_param._param_registerfile));
     122                                                                                                                               _param_statistics            ,
     123#endif
     124                                                                                                                               *(_param._param_registerfile));
     125
     126    _component->set_component (component_RegisterFile->_component
     127#ifdef POSITION
     128                               , 75
     129                               , 75
     130                               , 10
     131                               , 10
     132#endif
     133                               );
    110134     
    111     // Instantiation
    112     (*(component_RegisterFile->in_CLOCK ))       (*(in_CLOCK ));
    113     (*(component_RegisterFile->in_NRESET))       (*(in_NRESET));
     135    // ~~~~~[ Component - Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     136
     137     // =====[ component_RegisterFile - Instanciation ]====================   
     138
     139#ifdef POSITION
     140    _component->interface_map (_name+"_RegisterFile","",
     141                               _name                ,"");
     142#endif
     143
     144    _component->port_map(_name+"_RegisterFile", "in_CLOCK" , _name,"in_CLOCK" );
     145    _component->port_map(_name+"_RegisterFile", "in_NRESET", _name,"in_NRESET");
    114146   
    115147    for (uint32_t i=0; i<_param._nb_prediction; i++)
    116148      {
    117         (*(component_RegisterFile-> in_READ_VAL      [i])) (*( in_PREDICT_VAL      [i]));
    118         (*(component_RegisterFile->out_READ_ACK      [i])) (*(out_PREDICT_ACK      [i]));
    119         (*(component_RegisterFile-> in_READ_ADDRESS  [i])) (*( in_PREDICT_ADDRESS  [i]));
    120         (*(component_RegisterFile->out_READ_DATA     [i])) (*(out_PREDICT_HISTORY  [i]));   
     149#ifdef POSITION
     150        _component->interface_map (_name+"_RegisterFile","read_"   +toString(i),
     151                                   _name                ,"predict_"+toString(i));
     152#endif
     153
     154        _component->port_map(_name+"_RegisterFile", "in_READ_"+toString(i)+"_VAL"    , _name, "in_PREDICT_"+toString(i)+"_VAL"    );
     155        _component->port_map(_name+"_RegisterFile","out_READ_"+toString(i)+"_ACK"    , _name,"out_PREDICT_"+toString(i)+"_ACK"    );
     156        _component->port_map(_name+"_RegisterFile", "in_READ_"+toString(i)+"_ADDRESS", _name, "in_PREDICT_"+toString(i)+"_ADDRESS");
     157        _component->port_map(_name+"_RegisterFile","out_READ_"+toString(i)+"_DATA"   , _name,"out_PREDICT_"+toString(i)+"_HISTORY");
    121158      }
    122159   
    123160    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    124161      {
    125         (*(component_RegisterFile-> in_WRITE_VAL     [i])) (*(    in_BRANCH_COMPLETE_VAL      [i]));
    126         (*(component_RegisterFile->out_WRITE_ACK     [i])) (*(   out_BRANCH_COMPLETE_ACK      [i]));
    127         (*(component_RegisterFile-> in_WRITE_ADDRESS [i])) (*(    in_BRANCH_COMPLETE_ADDRESS  [i]));
    128         (*(component_RegisterFile-> in_WRITE_DATA    [i])) (*(signal_BRANCH_COMPLETE_HISTORY  [i]));   
    129       }
     162#ifdef POSITION
     163        _component->interface_map (_name+"_RegisterFile","write_"  +toString(i),
     164                                   _name+"_Shifter"     ,"shifter_"+toString(i));
     165#endif
     166
     167        _component->port_map(_name+"_RegisterFile", "in_WRITE_"+toString(i)+"_VAL"    , _name           , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"    );
     168        _component->port_map(_name+"_RegisterFile","out_WRITE_"+toString(i)+"_ACK"    , _name           ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK"    );
     169        _component->port_map(_name+"_RegisterFile", "in_WRITE_"+toString(i)+"_ADDRESS", _name           , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS");
     170        _component->port_map(_name+"_RegisterFile", "in_WRITE_"+toString(i)+"_DATA"   , _name+"_Shifter","out_SHIFTER_"        +toString(i)+"_DATA");
     171      }
     172
     173    // =====[ component_Shifter - Instanciation ]=========================   
     174
     175#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
     176
     177#ifdef POSITION
     178    _component->interface_map (_name+"_Shifter","",
     179                               _name           ,"");
     180#endif
     181
     182    _component->port_map(_name+"_Shifter", "in_CLOCK" , _name,"in_CLOCK" );
     183    _component->port_map(_name+"_Shifter", "in_NRESET", _name,"in_NRESET");
     184
     185#endif
     186
     187    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     188      {
     189#ifdef POSITION
     190        _component->interface_map (_name+"_Shifter","shifter_"+toString(i),
     191                                   _name           ,"branch_complete_"+toString(i));
     192
     193#endif
     194
     195        _component->port_map(_name+"_Shifter", "in_SHIFTER_" +toString(i)+"_DATA"    , _name                , "in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY");
     196        _component->port_map(_name+"_Shifter", "in_SHIFTER_" +toString(i)+"_CARRY_IN", _name                , "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION");
     197        _component->port_map(_name+"_Shifter", "out_SHIFTER_"+toString(i)+"_DATA"    , _name+"_RegisterFile", "in_WRITE_"+toString(i)+"_DATA");
     198      }
     199
     200#ifdef POSITION
     201    _component->generate_file();
     202#endif
    130203  };
    131204
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_deallocation.cpp

    r15 r42  
    1919  void Branch_History_Table::deallocation (void)
    2020  {
    21     delete in_CLOCK;
    22     delete in_NRESET;
     21    delete     in_CLOCK;
     22    delete     in_NRESET;
    2323
    24     for (uint32_t i=0; i<_param._nb_prediction; i++)
    25       {
    26         delete  in_PREDICT_VAL     [i];
    27         delete out_PREDICT_ACK     [i];
    28         delete  in_PREDICT_ADDRESS [i];
    29         delete out_PREDICT_HISTORY [i];
    30       }
     24    delete []  in_PREDICT_VAL    ;
     25    delete [] out_PREDICT_ACK    ;
     26    delete []  in_PREDICT_ADDRESS;
     27    delete [] out_PREDICT_HISTORY;
    3128
    32     delete  in_PREDICT_VAL    ;
    33     delete out_PREDICT_ACK    ;
    34     delete  in_PREDICT_ADDRESS;
    35     delete out_PREDICT_HISTORY;
    36 
    37      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    38        {
    39          delete  in_BRANCH_COMPLETE_VAL     [i];
    40          delete out_BRANCH_COMPLETE_ACK     [i];
    41          delete  in_BRANCH_COMPLETE_ADDRESS [i];
    42          delete  in_BRANCH_COMPLETE_HISTORY [i];
    43          delete  in_BRANCH_COMPLETE_DIRECTION[i];
    44        }
    45     delete  in_BRANCH_COMPLETE_VAL    ;
    46     delete out_BRANCH_COMPLETE_ACK    ;
    47     delete  in_BRANCH_COMPLETE_ADDRESS;
    48     delete  in_BRANCH_COMPLETE_HISTORY;
    49     delete  in_BRANCH_COMPLETE_DIRECTION;
     29    delete []  in_BRANCH_COMPLETE_VAL    ;
     30    delete [] out_BRANCH_COMPLETE_ACK    ;
     31    delete []  in_BRANCH_COMPLETE_ADDRESS;
     32    delete []  in_BRANCH_COMPLETE_HISTORY;
     33    delete []  in_BRANCH_COMPLETE_DIRECTION;
    5034
    5135     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    5236    delete component_Shifter;
    5337    delete component_RegisterFile;
     38   
     39    delete _component;
    5440  };
    5541
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_vhdl.cpp

    r2 r42  
    2121  void Branch_History_Table::vhdl (void)
    2222  {
    23     Vhdl vhdl (_name);
     23    Vhdl * vhdl = new Vhdl (_name);
    2424
    25     vhdl.set_library_work (_name + "_Pack");
    26     vhdl.set_library_work (_name + "_RegisterFile_Pack");
    27     vhdl.set_library_work (_name + "_Shifter_Pack");
     25    vhdl->set_library_work (_name + "_Pack");
     26    vhdl->set_library_work (_name + "_RegisterFile_Pack");
     27    vhdl->set_library_work (_name + "_Shifter_Pack");
    2828
    2929    vhdl_port   (vhdl);
     
    3232    vhdl_body   (vhdl);
    3333
    34     vhdl.generate_file();
     34    vhdl->generate_file();
     35
     36    delete vhdl;
    3537  };
    3638
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_vhdl_body.cpp

    r15 r42  
    1818
    1919
    20   void Branch_History_Table::vhdl_body (Vhdl & vhdl)
     20  void Branch_History_Table::vhdl_body (Vhdl * & vhdl)
    2121  {
    22 //     vhdl.set_body ("-- Output : always at '1'");
     22//     vhdl->set_body ("-- Output : always at '1'");
    2323//     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    24 //       vhdl.set_body ("out_BRANCH_COMPLETE_ACK_"+toString(i)+" <= '1';");
     24//       vhdl->set_body ("out_BRANCH_COMPLETE_ACK_"+toString(i)+" <= '1';");
    2525//     for (uint32_t i=0; i<_param._nb_prediction     ; i++)
    26 //       vhdl.set_body ("out_PREDICT_ACK_"+toString(i)+"         <= '1';");
    27 //     vhdl.set_body ("");
     26//       vhdl->set_body ("out_PREDICT_ACK_"+toString(i)+"         <= '1';");
     27//     vhdl->set_body ("");
    2828
    2929    list<string> list_port_map;
     
    3131    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    3232      {
    33         vhdl.set_body_component_port_map (list_port_map," in_SHIFTER_DATA_"+toString(i)+"     ","    in_BRANCH_COMPLETE_HISTORY_"+toString(i));
    34         vhdl.set_body_component_port_map (list_port_map," in_SHIFTER_CARRY_IN_"+toString(i)+" ","    in_BRANCH_COMPLETE_DIRECTION_"+toString(i)    );
    35         vhdl.set_body_component_port_map (list_port_map,"out_SHIFTER_DATA_"+toString(i)+"     ","signal_BRANCH_COMPLETE_HISTORY_"+toString(i));
     33        vhdl->set_body_component_port_map (list_port_map," in_SHIFTER_"+toString(i)+"_DATA     ","    in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY"  );
     34        vhdl->set_body_component_port_map (list_port_map," in_SHIFTER_"+toString(i)+"_CARRY_IN ","    in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION");
     35        vhdl->set_body_component_port_map (list_port_map,"out_SHIFTER_"+toString(i)+"_DATA     ","signal_BRANCH_COMPLETE_"+toString(i)+"_HISTORY"  );
    3636      }
    3737
    38     vhdl.set_body_component ("component_Shifter",_name+"_Shifter",list_port_map);
     38    vhdl->set_body_component ("component_Shifter",_name+"_Shifter",list_port_map);
    3939
    4040    list_port_map.clear();
    41     vhdl.set_body_component_port_map (list_port_map,"in_CLOCK","in_CLOCK");
    42     vhdl.set_body_component_port_map (list_port_map,"in_NRESET","in_NRESET");
     41    vhdl->set_body_component_port_map (list_port_map,"in_CLOCK","in_CLOCK");
     42    vhdl->set_body_component_port_map (list_port_map,"in_NRESET","in_NRESET");
    4343
    4444    for (uint32_t i=0; i<_param._nb_prediction; i++)
    4545      {
    46         vhdl.set_body_component_port_map (list_port_map," in_READ_VAL_"+toString(i)+"     "," in_PREDICT_VAL_"+toString(i));
    47         vhdl.set_body_component_port_map (list_port_map,"out_READ_ACK_"+toString(i)+"     ","out_PREDICT_ACK_"+toString(i));
    48         vhdl.set_body_component_port_map (list_port_map," in_READ_ADDRESS_"+toString(i)+" "," in_PREDICT_ADDRESS_"+toString(i));
    49         vhdl.set_body_component_port_map (list_port_map,"out_READ_DATA_"+toString(i)+"    ","out_PREDICT_HISTORY_"+toString(i));   
     46        vhdl->set_body_component_port_map (list_port_map," in_READ_"+toString(i)+"_VAL     "," In_PREDICT_"+toString(i)+"_VAL");
     47        vhdl->set_body_component_port_map (list_port_map,"out_READ_"+toString(i)+"_ACK     ","out_PREDICT_"+toString(i)+"_ACK");
     48        vhdl->set_body_component_port_map (list_port_map," in_READ_"+toString(i)+"_ADDRESS "," in_PREDICT_"+toString(i)+"_ADDRESS");
     49        vhdl->set_body_component_port_map (list_port_map,"out_READ_"+toString(i)+"_DATA    ","out_PREDICT_"+toString(i)+"_HISTORY");
    5050      }
    5151   
    5252    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    5353      {
    54         vhdl.set_body_component_port_map (list_port_map," in_WRITE_VAL_"+toString(i)+"    ","    in_BRANCH_COMPLETE_VAL_"+toString(i)+"");
    55         vhdl.set_body_component_port_map (list_port_map,"out_WRITE_ACK_"+toString(i)+"    ","   out_BRANCH_COMPLETE_ACK_"+toString(i)+"");
    56         vhdl.set_body_component_port_map (list_port_map," in_WRITE_ADDRESS_"+toString(i)+"","    in_BRANCH_COMPLETE_ADDRESS_"+toString(i));
    57         vhdl.set_body_component_port_map (list_port_map," in_WRITE_DATA_"+toString(i)+"   ","signal_BRANCH_COMPLETE_HISTORY_"+toString(i));
     54        vhdl->set_body_component_port_map (list_port_map," in_WRITE_"+toString(i)+"_VAL    ","    in_BRANCH_COMPLETE_"+toString(i)+"_VAL");
     55        vhdl->set_body_component_port_map (list_port_map,"out_WRITE_"+toString(i)+"_ACK    ","   out_BRANCH_COMPLETE_"+toString(i)+"_ACK");
     56        vhdl->set_body_component_port_map (list_port_map," in_WRITE_"+toString(i)+"_ADDRESS","    in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS");
     57        vhdl->set_body_component_port_map (list_port_map," in_WRITE_"+toString(i)+"_DATA   ","signal_BRANCH_COMPLETE_"+toString(i)+"_HISTORY");
    5858      }
    59     vhdl.set_body_component ("component_RegisterFile",_name+"_RegisterFile",list_port_map);
     59    vhdl->set_body_component ("component_RegisterFile",_name+"_RegisterFile",list_port_map);
    6060  };
    6161
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_vhdl_port.cpp

    r15 r42  
    1818
    1919
    20   void Branch_History_Table::vhdl_port (Vhdl & vhdl)
     20  void Branch_History_Table::vhdl_port (Vhdl * & vhdl)
    2121  {
    22     vhdl.set_port (" in_CLOCK" , IN, 1);
    23     vhdl.set_port (" in_NRESET", IN, 1);
    24    
    25     for (uint32_t i=0; i<_param._nb_prediction; i++)
    26       {
    27         vhdl.set_port(" in_PREDICT_VAL_"+toString(i)+"               ", IN, 1);
    28         vhdl.set_port("out_PREDICT_ACK_"+toString(i)+"               ",OUT, 1);
    29         vhdl.set_port(" in_PREDICT_ADDRESS_"+toString(i)+"           ", IN, static_cast<uint32_t>(ceil(log2(_param._nb_shifter))));
    30         vhdl.set_port("out_PREDICT_HISTORY_"+toString(i)+"           ",OUT, _param._size_shifter);
    31       }
    32      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    33        {
    34          vhdl.set_port (" in_BRANCH_COMPLETE_VAL_"+toString(i)+"      ", IN, 1);
    35          vhdl.set_port ("out_BRANCH_COMPLETE_ACK_"+toString(i)+"      ",OUT, 1);
    36          vhdl.set_port (" in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+"  ", IN, static_cast<uint32_t>(ceil(log2(_param._nb_shifter))));
    37          vhdl.set_port (" in_BRANCH_COMPLETE_HISTORY_"+toString(i)+"  ", IN, _param._size_shifter);
    38          vhdl.set_port (" in_BRANCH_COMPLETE_DIRECTION_"+toString(i)+"", IN, 1);
    39        }
     22    _interfaces->set_port(vhdl);
    4023  };
    4124
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_vhdl_signal.cpp

    r3 r42  
    1717namespace branch_history_table {
    1818
    19   void Branch_History_Table::vhdl_signal (Vhdl & vhdl)
     19  void Branch_History_Table::vhdl_signal (Vhdl * & vhdl)
    2020  {
    2121    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    22       vhdl.set_signal  ("signal_BRANCH_COMPLETE_HISTORY_"+toString(i), _param._size_shifter);
     22      vhdl->set_signal  ("signal_BRANCH_COMPLETE_"+toString(i)+"_HISTORY", _param._size_shifter);
    2323  };
    2424
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_vhdl_testbench_transition.cpp

    r15 r42  
    2020  void Branch_History_Table::vhdl_testbench_transition (void)
    2121  {
    22     // In order with file Branch_History_Table_vhdl_testbench_port.cpp
    23 #ifndef SYSTEMCASS_SPECIFIC
    24     sc_cycle(0);
    25 #endif   
     22    sc_start(0);
    2623
    27     _vhdl_testbench->add_input  (PORT_READ( in_NRESET));
    28 
    29     for (uint32_t i=0; i<_param._nb_prediction; i++)
    30       {
    31         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_VAL     [i]));
    32         _vhdl_testbench->add_output (PORT_READ(component_RegisterFile->out_READ_ACK  [i]));
    33         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_ADDRESS [i]));
    34         _vhdl_testbench->add_output (PORT_READ(component_RegisterFile->out_READ_DATA [i]));
    35       //_vhdl_testbench->add_output (PORT_READ(out_PREDICT_HISTORY [i]));
    36       }
    37 
    38      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    39        {
    40          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_VAL     [i]));
    41          _vhdl_testbench->add_output (PORT_READ(component_RegisterFile->out_WRITE_ACK [i]));
    42          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_ADDRESS [i]));
    43          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_HISTORY [i]));
    44          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_DIRECTION[i]));
    45        }
    46    
    47     // add_test :
    48     //  - True  : the cycle must be compare with the output of systemC
    49     //  - False : no test
    50     _vhdl_testbench->add_test(true);
    51 
    52     _vhdl_testbench->new_cycle (); // always at the end
     24    _interfaces->testbench();
    5325  };
    5426
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/src/Branch_History_Table_vhdl_type.cpp

    r2 r42  
    1818
    1919
    20   void Branch_History_Table::vhdl_type (Vhdl & vhdl)
     20  void Branch_History_Table::vhdl_type (Vhdl * & vhdl)
    2121  {
    2222  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest/configuration.cfg

    r2 r42  
    11Pattern_History_Table
    2 2       8       *2      # size_counter         
    3 2       64      *4      # nb_counter       
    4 1       2       +1      # nb_prediction     
    5 1       2       +1      # nb_branch_complete
     28       8       *2      # size_counter         
     364      64      *4      # nb_counter       
     42       2       +1      # nb_prediction     
     52       2       +1      # nb_branch_complete
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest/mkf.info

    r15 r42  
     1
     2# Pattern_History_Table_0
     3target_dep      all     Pattern_History_Table_0.ngc
     4target_dep      Pattern_History_Table_0.ngc     Pattern_History_Table_0.prj
     5target_dep      Pattern_History_Table_0.prj     Pattern_History_Table_0_Counter_Pack.vhdl Pattern_History_Table_0_Counter.vhdl Pattern_History_Table_0_Pack.vhdl Pattern_History_Table_0_RegisterFile_Pack.vhdl Pattern_History_Table_0_RegisterFile.vhdl Pattern_History_Table_0.vhdl
     6
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest/src/test.cpp

    r15 r42  
    77 */
    88
    9 #define NB_ITERATION 1024
     9#define NB_ITERATION 512
    1010
    1111#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest/include/test.h"
     
    9393
    9494  sc_start(0);
    95   _Pattern_History_Table->vhdl_testbench_label("Initialisation");
    9695  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
    9796 
     
    127126  sc_start(0);
    128127
    129   _Pattern_History_Table->vhdl_testbench_label("Loop of Test");
    130128  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
    131129
    132130  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
    133131    {
    134       _Pattern_History_Table->vhdl_testbench_label("Iteration "+toString(iteration));
    135132      num_port_branch_complete = rand() % param._nb_branch_complete;
    136133      num_port_predict         = rand() % param._nb_prediction     ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/include/Pattern_History_Table.h

    r15 r42  
    2929#include "Behavioural/include/Vhdl.h"
    3030#endif
    31 #ifdef VHDL_TESTBENCH
    32 #include "Behavioural/include/Vhdl_Testbench.h"
    33 #endif
     31#include "Behavioural/include/Component.h"
    3432
    3533using namespace std;
     
    6260#endif
    6361
    64 #ifdef VHDL_TESTBENCH
    65   private   : Vhdl_Testbench                 * _vhdl_testbench;
    66 #endif
     62  public    : Component                      * _component;
     63  private   : Interfaces                     * _interfaces;
    6764
    6865#ifdef SYSTEMC
     
    125122  public  : string   statistics                (uint32_t depth);
    126123#endif
    127                                                
    128124#if VHDL                                       
    129125  public  : void     vhdl                      (void);
    130   private : void     vhdl_port                 (Vhdl & vhdl);
    131   private : void     vhdl_declaration          (Vhdl & vhdl);
    132   private : void     vhdl_body                 (Vhdl & vhdl);
     126  private : void     vhdl_declaration          (Vhdl * & vhdl);
     127  private : void     vhdl_body                 (Vhdl * & vhdl);
    133128#endif                                         
    134                                                
    135129#ifdef VHDL_TESTBENCH                         
    136   private : void     vhdl_testbench_port       (void);
    137130  private : void     vhdl_testbench_transition (void);
    138131#endif
    139   public  : void     vhdl_testbench_label      (string label);
    140132  };
    141133
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table.cpp

    r15 r42  
    3333  {
    3434    log_printf(FUNC,Pattern_History_Table,"Pattern_History_Table","Begin");
    35    
     35   
     36#ifdef SYSTEMC
     37    allocation ();
     38#endif
     39 
    3640#ifdef STATISTICS
    3741    // Allocation of statistics
     
    3943                            param_statistics          ,
    4044                            param);
    41 #endif
    42 
    43 #ifdef VHDL_TESTBENCH
    44     // Creation of a testbench
    45     //  -> port
    46     //  -> clock's signals
    47     _vhdl_testbench = new Vhdl_Testbench (_name);
    48     vhdl_testbench_port           ();
    49     _vhdl_testbench->set_clock    ("in_CLOCK",true);
    5045#endif
    5146
     
    5651
    5752#ifdef SYSTEMC
    58     allocation ();
    59 
    6053//     // Constant
    6154//     for (uint32_t i=0; i<_param._nb_prediction     ; i++)
     
    8275    log_printf(FUNC,Pattern_History_Table,"~Pattern_History_Table","Begin");
    8376
    84 #ifdef VHDL_TESTBENCH
    85     // generate the test bench
    86     _vhdl_testbench->generate_file();
    87     delete _vhdl_testbench;
    88 #endif
    89 
    9077#ifdef STATISTICS
    9178    _stat->generate_file(statistics(0));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_allocation.cpp

    r15 r42  
    2020  void Pattern_History_Table::allocation (void)
    2121  {
    22     string rename;
    23 
    2422    log_printf(FUNC,Pattern_History_Table,"allocation","Begin");
    2523
    26     in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
    27     in_NRESET = new SC_IN (Tcontrol_t) ("in_NRESET");
    28 
     24    _component   = new Component ();
     25
     26    Entity * entity = _component->set_entity (_name                 
     27                                             ,"Pattern_History_Table"
     28#ifdef POSITION
     29                                             ,MIXTE               
     30#endif
     31                                              );
     32   
     33    _interfaces = entity->set_interfaces();
     34
     35    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     36    {
     37      Interface * interface = _interfaces->set_interface(""
     38#ifdef POSITION
     39                                                         , IN 
     40                                                         , SOUTH
     41                                                         , "Generalist interface"
     42#endif
     43                                                         );
     44     
     45      in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
     46      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_YES);
     47    }
     48
     49    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2950     in_PREDICT_VAL     = new SC_IN (Tcontrol_t) * [_param._nb_prediction];
    3051    out_PREDICT_ACK     = new SC_OUT(Tcontrol_t) * [_param._nb_prediction];
     
    3455    for (uint32_t i=0; i<_param._nb_prediction; i++)
    3556      {
    36         rename = "in_PREDICT_VAL["     +toString(i)+"]";
    37          in_PREDICT_VAL     [i] = new SC_IN (Tcontrol_t) (rename.c_str());
    38 
    39         rename = "out_PREDICT_ACK["    +toString(i)+"]";
    40         out_PREDICT_ACK     [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
    41 
    42         rename = "in_PREDICT_ADDRESS["+toString(i)+"]";
    43          in_PREDICT_ADDRESS [i] = new SC_IN (Taddress_t) (rename.c_str());
    44 
    45         rename = "out_PREDICT_HISTORY["+toString(i)+"]";
    46         out_PREDICT_HISTORY [i] = new SC_OUT(Thistory_t) (rename.c_str());
    47       }
     57        Interface_fifo * interface = _interfaces->set_interface("predict_"+toString(i)
     58#ifdef POSITION
     59                                                                , IN 
     60                                                                , WEST
     61                                                                , "Interface Predict"
     62#endif
     63                                                                );
     64
     65         in_PREDICT_VAL     [i] = interface->set_signal_valack_in        ("val"    , VAL);
     66        out_PREDICT_ACK     [i] = interface->set_signal_valack_out       ("ack"    , ACK);
     67         in_PREDICT_ADDRESS [i] = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(ceil(log2(_param._nb_counter))));
     68        out_PREDICT_HISTORY [i] = interface->set_signal_out <Thistory_t> ("history", _param._size_counter);
     69      }
     70   
     71    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    4872
    4973        in_BRANCH_COMPLETE_VAL       = new SC_IN     (Tcontrol_t) * [_param._nb_branch_complete];
     
    5276        in_BRANCH_COMPLETE_HISTORY   = new SC_IN     (Thistory_t) * [_param._nb_branch_complete];
    5377        in_BRANCH_COMPLETE_DIRECTION = new SC_IN     (Tcontrol_t) * [_param._nb_branch_complete];
    54     signal_BRANCH_COMPLETE_HISTORY   = new SC_SIGNAL (Thistory_t) * [_param._nb_branch_complete];
    5578
    5679    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    5780      {
    58          rename = "in_BRANCH_COMPLETE_VAL["    +toString(i)+"]";
    59           in_BRANCH_COMPLETE_VAL     [i] = new SC_IN (Tcontrol_t) (rename.c_str());
    60 
    61          rename = "out_BRANCH_COMPLETE_ACK["   +toString(i)+"]";
    62          out_BRANCH_COMPLETE_ACK     [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
    63 
    64          rename = "in_BRANCH_COMPLETE_ADDRESS["+toString(i)+"]";
    65           in_BRANCH_COMPLETE_ADDRESS [i] = new SC_IN (Taddress_t) (rename.c_str());
    66 
    67          rename = "in_BRANCH_COMPLETE_HISTORY["+toString(i)+"]";
    68           in_BRANCH_COMPLETE_HISTORY [i] = new SC_IN (Thistory_t) (rename.c_str());
    69 
    70          rename = "in_BRANCH_COMPLETE_DIRECTION["    +toString(i)+"]";
    71           in_BRANCH_COMPLETE_DIRECTION [i] = new SC_IN (Tcontrol_t) (rename.c_str());
    72 
    73          rename = "signal_BRANCH_COMPLETE_HISTORY["+toString(i)+"]";
    74          signal_BRANCH_COMPLETE_HISTORY [i] = new SC_SIGNAL (Thistory_t) (rename.c_str());
    75 
    76       }
    77    
     81        Interface_fifo * interface = _interfaces->set_interface("branch_complete_"+toString(i)
     82#ifdef POSITION
     83                                                                , IN 
     84                                                                , EAST
     85                                                                , "Interface branch complete"
     86#endif
     87                                                                );
     88
     89         in_BRANCH_COMPLETE_VAL        [i] = interface->set_signal_valack_in        ("val"      , VAL);
     90        out_BRANCH_COMPLETE_ACK        [i] = interface->set_signal_valack_out       ("ack"      , ACK);
     91         in_BRANCH_COMPLETE_ADDRESS    [i] = interface->set_signal_in  <Taddress_t> ("address"  , static_cast<uint32_t>(ceil(log2(_param._nb_counter))));
     92         in_BRANCH_COMPLETE_HISTORY    [i] = interface->set_signal_in  <Thistory_t> ("history"  , _param._size_counter);
     93         in_BRANCH_COMPLETE_DIRECTION  [i] = interface->set_signal_in  <Tcontrol_t> ("direction", 1);
     94      }
     95
    7896    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    7997    string name_component;
     98
    8099    // =====[ component_Counter ]=========================================   
    81100   
    82101    name_component = _name+"_Counter";
    83102
    84     component_Counter = new morpheo::behavioural::generic::counter::Counter (name_component.c_str(),
     103    component_Counter = new morpheo::behavioural::generic::counter::Counter (name_component.c_str()
    85104#ifdef STATISTICS
    86                                                                              _param_statistics             ,
    87 #endif
    88                                                                              *(_param._param_counter)      );
    89    
    90    
    91     // Instantiation
     105                                                                             ,_param_statistics
     106#endif
     107                                                                             ,*(_param._param_counter));
     108
     109    _component->set_component (component_Counter->_component
     110#ifdef POSITION
     111                               , 25
     112                               , 25
     113                               , 10
     114                               , 10
     115#endif
     116                               );
     117
     118     // =====[ component_RegisterFile ]====================================   
     119   
     120    name_component = _name+"_RegisterFile";
     121   
     122    component_RegisterFile = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic(name_component.c_str(),
     123#ifdef STATISTICS
     124                                                                                                                               _param_statistics            ,
     125#endif
     126                                                                                                                               *(_param._param_registerfile));
     127
     128    _component->set_component (component_RegisterFile->_component
     129#ifdef POSITION
     130                               , 75
     131                               , 75
     132                               , 10
     133                               , 10
     134#endif
     135                               );
     136     
     137    // ~~~~~[ Component - Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     138
     139    // =====[ component_RegisterFile - Instanciation ]====================   
     140
     141#ifdef POSITION
     142    _component->interface_map (_name+"_RegisterFile","",
     143                               _name                ,"");
     144#endif
     145
     146    _component->port_map(_name+"_RegisterFile", "in_CLOCK" , _name,"in_CLOCK" );
     147    _component->port_map(_name+"_RegisterFile", "in_NRESET", _name,"in_NRESET");
     148   
     149    for (uint32_t i=0; i<_param._nb_prediction; i++)
     150      {
     151#ifdef POSITION
     152        _component->interface_map (_name+"_RegisterFile","read_"   +toString(i),
     153                                   _name                ,"predict_"+toString(i));
     154#endif
     155
     156        _component->port_map(_name+"_RegisterFile", "in_READ_"+toString(i)+"_VAL"    , _name, "in_PREDICT_"+toString(i)+"_VAL"    );
     157        _component->port_map(_name+"_RegisterFile","out_READ_"+toString(i)+"_ACK"    , _name,"out_PREDICT_"+toString(i)+"_ACK"    );
     158        _component->port_map(_name+"_RegisterFile", "in_READ_"+toString(i)+"_ADDRESS", _name, "in_PREDICT_"+toString(i)+"_ADDRESS");
     159        _component->port_map(_name+"_RegisterFile","out_READ_"+toString(i)+"_DATA"   , _name,"out_PREDICT_"+toString(i)+"_HISTORY");
     160      }
     161   
     162    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     163      {
     164#ifdef POSITION
     165        _component->interface_map (_name+"_RegisterFile","write_"  +toString(i),
     166                                   _name+"_Counter"     ,"counter_"+toString(i));
     167#endif
     168
     169        _component->port_map(_name+"_RegisterFile", "in_WRITE_"+toString(i)+"_VAL"    , _name           , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"    );
     170        _component->port_map(_name+"_RegisterFile","out_WRITE_"+toString(i)+"_ACK"    , _name           ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK"    );
     171        _component->port_map(_name+"_RegisterFile", "in_WRITE_"+toString(i)+"_ADDRESS", _name           , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS");
     172        _component->port_map(_name+"_RegisterFile", "in_WRITE_"+toString(i)+"_DATA"   , _name+"_Counter","out_COUNTER_"        +toString(i)+"_DATA");
     173      }
     174
     175    // =====[ component_Counter - Instanciation ]=========================   
     176
    92177#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    93     (*(component_Counter->in_CLOCK))        (*(in_CLOCK));
     178
     179#ifdef POSITION
     180    _component->interface_map (_name+"_Counter","",
     181                               _name           ,"");
     182#endif
     183
     184    _component->port_map(_name+"_Counter", "in_CLOCK" , _name,"in_CLOCK" );
     185    _component->port_map(_name+"_Counter", "in_NRESET", _name,"in_NRESET");
     186
    94187#endif
    95188
    96189    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    97190      {
    98         (*(component_Counter-> in_COUNTER_DATA       [i]))    (*(    in_BRANCH_COMPLETE_HISTORY   [i]));
    99         (*(component_Counter-> in_COUNTER_ADDSUB     [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION [i]));
    100         (*(component_Counter->out_COUNTER_DATA       [i]))    (*(signal_BRANCH_COMPLETE_HISTORY   [i]));
    101       }
    102    
    103      // =====[ component_RegisterFile ]====================================   
    104    
    105     name_component = _name+"_RegisterFile";
    106    
    107     component_RegisterFile = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic (name_component.c_str(),
    108 #ifdef STATISTICS
    109                                                                                                                                 _param_statistics            ,
    110 #endif
    111                                                                                                                                 *(_param._param_registerfile));
    112    
    113     // Instantiation
    114     (*(component_RegisterFile->in_CLOCK))        (*(in_CLOCK));
    115     (*(component_RegisterFile->in_NRESET))       (*(in_NRESET));
    116 
    117     for (uint32_t i=0; i<_param._nb_prediction; i++)
    118       {
    119         (*(component_RegisterFile-> in_READ_VAL      [i])) (*( in_PREDICT_VAL      [i]));
    120         (*(component_RegisterFile->out_READ_ACK      [i])) (*(out_PREDICT_ACK      [i]));
    121         (*(component_RegisterFile-> in_READ_ADDRESS  [i])) (*( in_PREDICT_ADDRESS  [i]));
    122         (*(component_RegisterFile->out_READ_DATA     [i])) (*(out_PREDICT_HISTORY  [i]));   
    123       }
    124    
    125     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    126       {
    127         (*(component_RegisterFile-> in_WRITE_VAL     [i])) (*(    in_BRANCH_COMPLETE_VAL      [i]));
    128         (*(component_RegisterFile->out_WRITE_ACK     [i])) (*(   out_BRANCH_COMPLETE_ACK      [i]));
    129         (*(component_RegisterFile-> in_WRITE_ADDRESS [i])) (*(    in_BRANCH_COMPLETE_ADDRESS  [i]));
    130         (*(component_RegisterFile-> in_WRITE_DATA    [i])) (*(signal_BRANCH_COMPLETE_HISTORY  [i]));   
    131       }
     191#ifdef POSITION
     192        _component->interface_map (_name+"_Counter","counter_"+toString(i),
     193                                   _name           ,"branch_complete_"+toString(i));
     194
     195#endif
     196
     197        _component->port_map(_name+"_Counter", "in_COUNTER_" +toString(i)+"_DATA"    , _name                , "in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY");
     198        _component->port_map(_name+"_Counter", "in_COUNTER_" +toString(i)+"_ADDSUB"  , _name                , "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION");
     199        _component->port_map(_name+"_Counter", "out_COUNTER_"+toString(i)+"_DATA"    , _name+"_RegisterFile", "in_WRITE_"+toString(i)+"_DATA");
     200      }
     201
     202#ifdef POSITION
     203    _component->generate_file();
     204#endif
    132205
    133206    log_printf(FUNC,Pattern_History_Table,"allocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_deallocation.cpp

    r15 r42  
    2222    log_printf(FUNC,Pattern_History_Table,"deallocation","Begin");
    2323
    24     delete in_CLOCK;
    25     delete in_NRESET;
     24    delete     in_CLOCK;
     25    delete     in_NRESET;
    2626
    27     for (uint32_t i=0; i<_param._nb_prediction; i++)
    28       {
    29         delete  in_PREDICT_VAL     [i];
    30         delete out_PREDICT_ACK     [i];
    31         delete  in_PREDICT_ADDRESS [i];
    32         delete out_PREDICT_HISTORY [i];
    33       }
     27    delete []  in_PREDICT_VAL    ;
     28    delete [] out_PREDICT_ACK    ;
     29    delete []  in_PREDICT_ADDRESS;
     30    delete [] out_PREDICT_HISTORY;
    3431
    35     delete  in_PREDICT_VAL    ;
    36     delete out_PREDICT_ACK    ;
    37     delete  in_PREDICT_ADDRESS;
    38     delete out_PREDICT_HISTORY;
    39 
    40      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    41        {
    42          delete  in_BRANCH_COMPLETE_VAL       [i];
    43          delete out_BRANCH_COMPLETE_ACK       [i];
    44          delete  in_BRANCH_COMPLETE_ADDRESS   [i];
    45          delete  in_BRANCH_COMPLETE_HISTORY   [i];
    46          delete  in_BRANCH_COMPLETE_DIRECTION [i];
    47        }
    48     delete  in_BRANCH_COMPLETE_VAL    ;
    49     delete out_BRANCH_COMPLETE_ACK    ;
    50     delete  in_BRANCH_COMPLETE_ADDRESS;
    51     delete  in_BRANCH_COMPLETE_HISTORY;
    52     delete  in_BRANCH_COMPLETE_DIRECTION;
     32    delete []  in_BRANCH_COMPLETE_VAL    ;
     33    delete [] out_BRANCH_COMPLETE_ACK    ;
     34    delete []  in_BRANCH_COMPLETE_ADDRESS;
     35    delete []  in_BRANCH_COMPLETE_HISTORY;
     36    delete []  in_BRANCH_COMPLETE_DIRECTION;
    5337
    5438     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    5539    delete component_Counter;
    5640    delete component_RegisterFile;
     41   
     42    delete _component;
    5743
    5844    log_printf(FUNC,Pattern_History_Table,"deallocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_vhdl.cpp

    r2 r42  
    2222  {
    2323    log_printf(FUNC,Pattern_History_Table,"vhdl","Begin");
    24     Vhdl vhdl (_name);
     24    Vhdl * vhdl = new Vhdl (_name);
    2525
    26     vhdl.set_library_work (_name + "_Pack");
    27     vhdl.set_library_work (_name + "_RegisterFile_Pack");
    28     vhdl.set_library_work (_name + "_Counter_Pack");
     26    _interfaces->set_port(vhdl);
     27    _component->vhdl_instance(vhdl);
    2928
    30     vhdl_port        (vhdl);
    3129    vhdl_declaration (vhdl);
    3230    vhdl_body        (vhdl);
    3331
    34     vhdl.generate_file();
     32    vhdl->generate_file();
     33
     34    delete vhdl;
     35
    3536    log_printf(FUNC,Pattern_History_Table,"vhdl","End");
    3637
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_vhdl_body.cpp

    r15 r42  
    1818
    1919
    20   void Pattern_History_Table::vhdl_body (Vhdl & vhdl)
     20  void Pattern_History_Table::vhdl_body (Vhdl * & vhdl)
    2121  {
    2222    log_printf(FUNC,Pattern_History_Table,"vhdl_body","Begin");
    2323
    24 //     vhdl.set_body ("-- Output : always at '1'");
     24//     vhdl->set_body ("-- Output : always at '1'");
    2525//     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    26 //       vhdl.set_body ("out_BRANCH_COMPLETE_ACK_"+toString(i)+" <= '1';");
     26//       vhdl->set_body ("out_BRANCH_COMPLETE_ACK_"+toString(i)+" <= '1';");
    2727//     for (uint32_t i=0; i<_param._nb_prediction     ; i++)
    28 //       vhdl.set_body ("out_PREDICT_ACK_"+toString(i)+"         <= '1';");
    29 //     vhdl.set_body ("");
    30 
    31     list<string> list_port_map;
    32 
    33     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    34       {
    35         vhdl.set_body_component_port_map (list_port_map," in_COUNTER_DATA_"+toString(i)+"     ","    in_BRANCH_COMPLETE_HISTORY_"+toString(i));
    36         vhdl.set_body_component_port_map (list_port_map," in_COUNTER_ADDSUB_"+toString(i)+"   ","    in_BRANCH_COMPLETE_DIRECTION_"+toString(i)    );
    37         vhdl.set_body_component_port_map (list_port_map,"out_COUNTER_DATA_"+toString(i)+"     ","signal_BRANCH_COMPLETE_HISTORY_"+toString(i));
    38       }
    39     vhdl.set_body_component ("component_Counter",_name+"_Counter",list_port_map);
    40 
    41 
    42     list_port_map.clear();
    43     vhdl.set_body_component_port_map (list_port_map,"in_CLOCK ","in_CLOCK ");
    44     vhdl.set_body_component_port_map (list_port_map,"in_NRESET","in_NRESET");
    45 
    46     for (uint32_t i=0; i<_param._nb_prediction; i++)
    47       {
    48         vhdl.set_body_component_port_map (list_port_map," in_READ_VAL_"+toString(i)+"     "," in_PREDICT_VAL_"+toString(i));
    49         vhdl.set_body_component_port_map (list_port_map,"out_READ_ACK_"+toString(i)+"     ","out_PREDICT_ACK_"+toString(i));
    50         vhdl.set_body_component_port_map (list_port_map," in_READ_ADDRESS_"+toString(i)+" "," in_PREDICT_ADDRESS_"+toString(i));
    51         vhdl.set_body_component_port_map (list_port_map,"out_READ_DATA_"+toString(i)+"    ","out_PREDICT_HISTORY_"+toString(i));   
    52       }
    53    
    54     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    55       {
    56         vhdl.set_body_component_port_map (list_port_map," in_WRITE_VAL_"+toString(i)+"    ","    in_BRANCH_COMPLETE_VAL_"+toString(i)+"");
    57         vhdl.set_body_component_port_map (list_port_map,"out_WRITE_ACK_"+toString(i)+"    ","   out_BRANCH_COMPLETE_ACK_"+toString(i)+"");
    58         vhdl.set_body_component_port_map (list_port_map," in_WRITE_ADDRESS_"+toString(i)+"","    in_BRANCH_COMPLETE_ADDRESS_"+toString(i));
    59         vhdl.set_body_component_port_map (list_port_map," in_WRITE_DATA_"+toString(i)+"   ","signal_BRANCH_COMPLETE_HISTORY_"+toString(i));
    60       }
    61     vhdl.set_body_component ("component_RegisterFile",_name+"_RegisterFile",list_port_map);
     28//       vhdl->set_body ("out_PREDICT_ACK_"+toString(i)+"         <= '1';");
     29//     vhdl->set_body ("");
    6230
    6331    log_printf(FUNC,Pattern_History_Table,"vhdl_body","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_vhdl_port.cpp

    r15 r42  
    1818
    1919
    20   void Pattern_History_Table::vhdl_port (Vhdl & vhdl)
    21   {
    22     log_printf(FUNC,Pattern_History_Table,"vhdl_port","Begin");
     20//   void Pattern_History_Table::vhdl_port (Vhdl * & vhdl)
     21//   {
     22//     log_printf(FUNC,Pattern_History_Table,"vhdl_port","Begin");
    2323
    24     vhdl.set_port (" in_CLOCK" , IN, 1);
    25     vhdl.set_port (" in_NRESET", IN, 1);
     24//     _interfaces->set_port(vhdl);
    2625
    27     for (uint32_t i=0; i<_param._nb_prediction; i++)
    28       {
    29         vhdl.set_port(" in_PREDICT_VAL_"+toString(i)+"               ", IN, 1);
    30         vhdl.set_port("out_PREDICT_ACK_"+toString(i)+"               ",OUT, 1);
    31         vhdl.set_port(" in_PREDICT_ADDRESS_"+toString(i)+"           ", IN, static_cast<uint32_t>(ceil(log2(_param._nb_counter))));
    32         vhdl.set_port("out_PREDICT_HISTORY_"+toString(i)+"           ",OUT, _param._size_counter);
    33       }
    34      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    35        {
    36          vhdl.set_port (" in_BRANCH_COMPLETE_VAL_"+toString(i)+"      ", IN, 1);
    37          vhdl.set_port ("out_BRANCH_COMPLETE_ACK_"+toString(i)+"      ",OUT, 1);
    38          vhdl.set_port (" in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+"  ", IN, static_cast<uint32_t>(ceil(log2(_param._nb_counter))));
    39          vhdl.set_port (" in_BRANCH_COMPLETE_HISTORY_"+toString(i)+"  ", IN, _param._size_counter);
    40          vhdl.set_port (" in_BRANCH_COMPLETE_DIRECTION_"+toString(i)+"", IN, 1);
    41        }
    42 
    43     log_printf(FUNC,Pattern_History_Table,"vhdl_port","End");
    44   };
     26//     log_printf(FUNC,Pattern_History_Table,"vhdl_port","End");
     27//   };
    4528
    4629}; // end namespace pattern_history_table
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_vhdl_signal.cpp

    r2 r42  
    1818
    1919
    20   void Pattern_History_Table::vhdl_declaration (Vhdl & vhdl)
     20  void Pattern_History_Table::vhdl_declaration (Vhdl * & vhdl)
    2121  {
    2222    log_printf(FUNC,Pattern_History_Table,"vhdl_declaration","Begin");
    23 
    24     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    25       vhdl.set_signal  ("signal_BRANCH_COMPLETE_HISTORY_"+toString(i), _param._size_counter);
    2623
    2724    log_printf(FUNC,Pattern_History_Table,"vhdl_declaration","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/src/Pattern_History_Table_vhdl_testbench_transition.cpp

    r15 r42  
    2222    log_printf(FUNC,Pattern_History_Table,"vhdl_testbench_transition","Begin");
    2323
    24 #ifndef SYSTEMCASS_SPECIFIC
    25     sc_cycle(0);
    26 #endif   
     24    sc_start(0);
    2725
    28     // In order with file Pattern_History_Table_vhdl_testbench_port.cpp
    29     // Warning : if a output depend of a subcomponent, take directly the port of subcomponent
    30     // (because we have no control on the ordonnancer's policy)
    31 
    32     _vhdl_testbench->add_input  (PORT_READ( in_NRESET));
    33 
    34     for (uint32_t i=0; i<_param._nb_prediction; i++)
    35       {
    36         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_VAL     [i]));
    37         _vhdl_testbench->add_output (PORT_READ(component_RegisterFile->out_READ_ACK  [i]));
    38         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_ADDRESS [i]));
    39         _vhdl_testbench->add_output (PORT_READ(component_RegisterFile->out_READ_DATA [i]));
    40       //_vhdl_testbench->add_output (PORT_READ(out_PREDICT_HISTORY [i]));
    41       }
    42 
    43      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    44        {
    45          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_VAL      [i]));
    46          _vhdl_testbench->add_output (PORT_READ(component_RegisterFile->out_WRITE_ACK [i]));
    47          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_ADDRESS  [i]));
    48          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_HISTORY  [i]));
    49          _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_DIRECTION[i]));
    50        }
    51        
    52     // add_test :
    53     //  - True  : the cycle must be compare with the output of systemC
    54     //  - False : no test
    55     _vhdl_testbench->add_test(true);
    56 
    57     _vhdl_testbench->new_cycle (); // always at the end
     26    _interfaces->testbench();
    5827
    5928    log_printf(FUNC,Pattern_History_Table,"vhdl_testbench_transition","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/SelfTest/src/test.cpp

    r2 r42  
    4444   *********************************************************************/
    4545  sc_clock                                 CLOCK ("clock", 1.0, 0.5);
     46  sc_signal<Tcontrol_t>                    NRESET;
    4647
    4748  sc_signal<Tcontrol_t>                    PREDICT_BHT_ACK             [param._nb_prediction];
     
    6869  cout << "<" << name << "> Instanciation of _Two_Level_Branch_Predictor_Glue" << endl;
    6970 
    70 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    7171  (*(_Two_Level_Branch_Predictor_Glue->in_CLOCK))        (CLOCK);
    72 #endif
     72  (*(_Two_Level_Branch_Predictor_Glue->in_NRESET))       (NRESET);
    7373
    7474  for (uint32_t i=0; i<param._nb_prediction; i++)
     
    125125
    126126  sc_start(0);
    127   _Two_Level_Branch_Predictor_Glue->vhdl_testbench_label("Initialisation");
     127
    128128  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
    129129
    130 
    131   _Two_Level_Branch_Predictor_Glue->vhdl_testbench_label("Test ack");
     130  NRESET.write(1);
     131
    132132  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Test ack" << endl;
    133133
    134134  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
    135135    {
    136       _Two_Level_Branch_Predictor_Glue->vhdl_testbench_label("Iteration "+toString(iteration));
    137 
    138136      // Branch History Table
    139137      if (param._have_bht)
     
    191189
    192190
    193   _Two_Level_Branch_Predictor_Glue->vhdl_testbench_label("Test address");
    194191  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Test address" << endl;
    195192
    196193  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
    197194    {
    198       _Two_Level_Branch_Predictor_Glue->vhdl_testbench_label("Iteration "+toString(iteration));
    199      
    200195      predict_address             = rand()%(1<<param._size_address    );
    201196      predict_bht_history         = 0;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/include/Two_Level_Branch_Predictor_Glue.h

    r5 r42  
    2525#include "Behavioural/include/Vhdl.h"
    2626#endif
    27 #ifdef VHDL_TESTBENCH
    28 #include "Behavioural/include/Vhdl_Testbench.h"
    29 #endif
     27#include "Behavioural/include/Component.h"
    3028
    3129using namespace std;
     
    5856#endif
    5957
    60 #ifdef VHDL_TESTBENCH
    61   private   : Vhdl_Testbench                 * _vhdl_testbench;
    62 #endif
     58  public    : Component                      * _component;
     59  private   : Interfaces                     * _interfaces;
    6360
    6461#ifdef SYSTEMC
     
    6663    // Interface
    6764  public    : SC_CLOCK                      *  in_CLOCK                      ;
     65  public    : SC_IN (Tcontrol_t)            *  in_NRESET                     ;
    6866
    6967  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_BHT_ACK            ;
     
    129127  public  : string   statistics                (uint32_t depth);
    130128#endif
    131                                                
    132129#if VHDL                                       
    133130  public  : void     vhdl                      (void);
    134   private : void     vhdl_port                 (Vhdl & vhdl);
    135   private : void     vhdl_declaration          (Vhdl & vhdl);
    136   private : void     vhdl_body                 (Vhdl & vhdl);
     131  private : void     vhdl_port                 (Vhdl * & vhdl);
     132  private : void     vhdl_declaration          (Vhdl * & vhdl);
     133  private : void     vhdl_body                 (Vhdl * & vhdl);
    137134#endif                                         
    138                                                
    139135#ifdef VHDL_TESTBENCH                         
    140   private : void     vhdl_testbench_port       (void);
    141136  private : void     vhdl_testbench_transition (void);
    142137#endif
    143   public  : void     vhdl_testbench_label      (string label);
    144138  };
    145139
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue.cpp

    r3 r42  
    3434    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"Two_Level_Branch_Predictor_Glue","Begin");
    3535
     36#ifdef SYSTEMC
     37    allocation ();
     38#endif
     39
    3640#ifdef STATISTICS
    3741    // Allocation of statistics
     
    4145#endif
    4246
    43 #ifdef VHDL_TESTBENCH
    44     // Creation of a testbench
    45     //  -> port
    46     //  -> clock's signals
    47     _vhdl_testbench = new Vhdl_Testbench (_name);
    48     vhdl_testbench_port           ();
    49     _vhdl_testbench->set_clock    ("in_CLOCK",false);
    50 #endif
    51 
    5247#ifdef VHDL
    5348    // generate the vhdl
     
    5651
    5752#ifdef SYSTEMC
    58     allocation ();
    59 
    6053#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    6154    SC_METHOD (transition);
     
    192185    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"~Two_Level_Branch_Predictor_Glue","Begin");
    193186
    194 #ifdef VHDL_TESTBENCH
    195     // generate the test bench
    196     _vhdl_testbench->generate_file();
    197     delete _vhdl_testbench;
    198 #endif
    199 
    200187#ifdef STATISTICS
    201188    _stat->generate_file(statistics(0));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_allocation.cpp

    r2 r42  
    2424    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"allocation","Begin");
    2525
    26 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    27     in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
     26    _component   = new Component ();
     27
     28    Entity * entity = _component->set_entity (_name                 
     29                                             ,"Two_Level_Branch_Predictor_Glue"
     30#ifdef POSITION
     31                                             ,COMBINATORY
    2832#endif
     33                                              );
    2934   
     35    _interfaces = entity->set_interfaces();
     36
     37    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     38    {
     39      Interface * interface = _interfaces->set_interface(""
     40#ifdef POSITION
     41                                                         , IN 
     42                                                         , SOUTH
     43                                                         , "Generalist interface"
     44#endif
     45                                                         );
     46     
     47      in_CLOCK              = interface->set_signal_clk              ("clock" ,1,CLOCK_VHDL_NO);
     48      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_NO);
     49    }
     50   
     51    // ~~~~~[ Interface : "Predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    3052    if (_param._have_bht)
    3153      {
     
    4567    for (uint32_t i=0; i<_param._nb_prediction; i++)
    4668      {
     69        Interface_fifo * interface = _interfaces->set_interface("predict_"+toString(i)
     70#ifdef POSITION
     71                                                                , IN 
     72                                                                , WEST
     73                                                                , "Interface Predict"
     74#endif
     75                                                                );
     76
    4777        if (_param._have_bht)
    4878          {
    49         rename = " in_PREDICT_BHT_ACK_"    +toString(i);
    50          in_PREDICT_BHT_ACK             [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    51 
    52         rename = "out_PREDICT_BHT_ADDRESS_"+toString(i);
    53         out_PREDICT_BHT_ADDRESS         [i] = new SC_OUT(Taddress_t)     (rename.c_str());
     79         in_PREDICT_BHT_ACK             [i] = interface->set_signal_in  <Tcontrol_t>     ("bht_ack"    ,1);
     80        out_PREDICT_BHT_ADDRESS         [i] = interface->set_signal_out <Taddress_t>     ("bht_address",_param._bht_size_address);
    5481          }
    5582        if (_param._have_pht)
    5683          {
    57         rename = " in_PREDICT_PHT_ACK_"    +toString(i);
    58          in_PREDICT_PHT_ACK             [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    59        
    60         rename = "out_PREDICT_PHT_ADDRESS_"+toString(i);
    61         out_PREDICT_PHT_ADDRESS         [i] = new SC_OUT(Taddress_t)     (rename.c_str());
     84         in_PREDICT_PHT_ACK             [i] = interface->set_signal_in  <Tcontrol_t>     ("pht_ack"    ,1);
     85        out_PREDICT_PHT_ADDRESS         [i] = interface->set_signal_out <Taddress_t>     ("pht_address",_param._pht_size_address);
    6286          }
    6387        if (_param._have_bht and _param._have_pht)
    64           {
    65         rename = " in_PREDICT_BHT_HISTORY_"+toString(i);
    66          in_PREDICT_BHT_HISTORY         [i] = new SC_IN (Tbht_history_t) (rename.c_str());
    67           }
    68         rename = "out_PREDICT_ACK_"        +toString(i);
    69         out_PREDICT_ACK                 [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
    70        
    71         rename = " in_PREDICT_ADDRESS_"    +toString(i);
    72          in_PREDICT_ADDRESS             [i] = new SC_IN (Taddress_t)     (rename.c_str());
     88         in_PREDICT_BHT_HISTORY         [i] = interface->set_signal_in  <Tbht_history_t> ("bht_history",_param._bht_size_history);
     89        out_PREDICT_ACK                 [i] = interface->set_signal_out <Tcontrol_t>     ("ack"        ,1);
     90         in_PREDICT_ADDRESS             [i] = interface->set_signal_in  <Taddress_t>     ("address"    ,_param._size_address);
    7391      }
     92
     93    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    7494
    7595    if (_param._have_bht)
     
    91111    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    92112      {
     113        Interface_fifo * interface = _interfaces->set_interface("branch_complete_"+toString(i)
     114#ifdef POSITION
     115                                                                , IN 
     116                                                                , EAST
     117                                                                , "Interface branch complete"
     118#endif
     119                                                                );
    93120        if (_param._have_bht)
    94121          {
    95         rename = " in_BRANCH_COMPLETE_BHT_ACK_"    +toString(i);
    96          in_BRANCH_COMPLETE_BHT_ACK             [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    97        
    98         rename = "out_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i);
    99         out_BRANCH_COMPLETE_BHT_ADDRESS         [i] = new SC_OUT(Taddress_t)     (rename.c_str());
     122         in_BRANCH_COMPLETE_BHT_ACK             [i] = interface->set_signal_in  <Tcontrol_t>     ("bht_ack"    ,1);
     123        out_BRANCH_COMPLETE_BHT_ADDRESS         [i] = interface->set_signal_out <Taddress_t>     ("bht_address",_param._bht_size_address);
    100124          }
    101125        if (_param._have_pht)
    102126          {
    103         rename = " in_BRANCH_COMPLETE_PHT_ACK_"    +toString(i);
    104          in_BRANCH_COMPLETE_PHT_ACK             [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    105 
    106         rename = "out_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i);
    107         out_BRANCH_COMPLETE_PHT_ADDRESS         [i] = new SC_OUT(Taddress_t)     (rename.c_str());
     127         in_BRANCH_COMPLETE_PHT_ACK             [i] = interface->set_signal_in  <Tcontrol_t>     ("pht_ack"    ,1);
     128        out_BRANCH_COMPLETE_PHT_ADDRESS         [i] = interface->set_signal_out <Taddress_t>     ("pht_address",_param._pht_size_address);
    108129          }
    109130        if (_param._have_bht and _param._have_pht)
    110           {
    111         rename = " in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i);
    112          in_BRANCH_COMPLETE_BHT_HISTORY         [i] = new SC_IN (Tbht_history_t) (rename.c_str());
    113           }
    114         rename = "out_BRANCH_COMPLETE_ACK_"        +toString(i);
    115         out_BRANCH_COMPLETE_ACK                 [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
    116        
    117         rename = " in_BRANCH_COMPLETE_ADDRESS_"    +toString(i);
    118          in_BRANCH_COMPLETE_ADDRESS             [i] = new SC_IN (Taddress_t)     (rename.c_str());
     131         in_BRANCH_COMPLETE_BHT_HISTORY         [i] = interface->set_signal_in  <Tbht_history_t> ("bht_history",_param._bht_size_history);
     132
     133        out_BRANCH_COMPLETE_ACK                 [i] = interface->set_signal_out <Tcontrol_t>     ("ack"        ,1);
     134         in_BRANCH_COMPLETE_ADDRESS             [i] = interface->set_signal_in  <Taddress_t>     ("address"    ,_param._size_address);
    119135      }
    120136
    121137    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     138
     139#ifdef POSITION
     140    _component->generate_file();
     141#endif
    122142
    123143    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"allocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_deallocation.cpp

    r2 r42  
    2222    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"deallocation","Begin");
    2323
    24     delete in_CLOCK;
     24    delete     in_CLOCK;
     25    delete     in_NRESET;
    2526
    26     for (uint32_t i=0; i<_param._nb_prediction; i++)
    27       {
    28         if (_param._have_bht)
    29           {
    30         delete  in_PREDICT_BHT_ACK             [i];
    31         delete out_PREDICT_BHT_ADDRESS         [i];
    32           }
    33         if (_param._have_pht)
    34           {
    35         delete  in_PREDICT_PHT_ACK             [i];
    36         delete out_PREDICT_PHT_ADDRESS         [i];
    37           }
    38         if (_param._have_bht and _param._have_pht)
    39         delete  in_PREDICT_BHT_HISTORY         [i];
    40         delete out_PREDICT_ACK                 [i];
    41         delete  in_PREDICT_ADDRESS             [i];
    42       }
    4327    if (_param._have_bht)
    4428      {
    45     delete in_PREDICT_BHT_ACK    ;
    46     delete out_PREDICT_BHT_ADDRESS;
     29    delete [] in_PREDICT_BHT_ACK    ;
     30    delete [] out_PREDICT_BHT_ADDRESS;
    4731      }
    4832    if (_param._have_pht)
    4933      {
    50     delete in_PREDICT_PHT_ACK    ;
    51     delete out_PREDICT_PHT_ADDRESS;
     34    delete [] in_PREDICT_PHT_ACK    ;
     35    delete [] out_PREDICT_PHT_ADDRESS;
    5236      }
    5337    if (_param._have_bht and _param._have_pht)
    54     delete in_PREDICT_BHT_HISTORY;
     38    delete [] in_PREDICT_BHT_HISTORY;
    5539   
    56     delete out_PREDICT_ACK        ;
    57     delete in_PREDICT_ADDRESS    ;
     40    delete [] out_PREDICT_ACK        ;
     41    delete [] in_PREDICT_ADDRESS    ;
    5842
    59     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    60       {
    61         if (_param._have_bht)
    62           {
    63         delete  in_BRANCH_COMPLETE_BHT_ACK             [i];
    64         delete out_BRANCH_COMPLETE_BHT_ADDRESS         [i];
    65           }
    66         if (_param._have_pht)
    67           {
    68         delete  in_BRANCH_COMPLETE_PHT_ACK             [i];
    69         delete out_BRANCH_COMPLETE_PHT_ADDRESS         [i];
    70           }
    71         if (_param._have_bht and _param._have_pht)
    72         delete  in_BRANCH_COMPLETE_BHT_HISTORY         [i];
    73         delete out_BRANCH_COMPLETE_ACK                 [i];
    74         delete  in_BRANCH_COMPLETE_ADDRESS             [i];
    75       }
    7643    if (_param._have_bht)
    7744      {
    78     delete in_BRANCH_COMPLETE_BHT_ACK    ;
    79     delete out_BRANCH_COMPLETE_BHT_ADDRESS;
     45    delete [] in_BRANCH_COMPLETE_BHT_ACK    ;
     46    delete [] out_BRANCH_COMPLETE_BHT_ADDRESS;
    8047      }
    8148    if (_param._have_pht)
    8249      {
    83     delete in_BRANCH_COMPLETE_PHT_ACK    ;
    84     delete out_BRANCH_COMPLETE_PHT_ADDRESS;
     50    delete [] in_BRANCH_COMPLETE_PHT_ACK    ;
     51    delete [] out_BRANCH_COMPLETE_PHT_ADDRESS;
    8552      }
    8653    if (_param._have_bht and _param._have_pht)
    87     delete in_BRANCH_COMPLETE_BHT_HISTORY;
    88     delete out_BRANCH_COMPLETE_ACK        ;
    89     delete in_BRANCH_COMPLETE_ADDRESS    ;
     54    delete [] in_BRANCH_COMPLETE_BHT_HISTORY;
     55    delete [] out_BRANCH_COMPLETE_ACK        ;
     56    delete [] in_BRANCH_COMPLETE_ADDRESS    ;
    9057
    9158    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     59    delete _component;
    9260
    9361    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"deallocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_vhdl.cpp

    r2 r42  
    2222  {
    2323    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl","Begin");
    24     Vhdl vhdl (_name);
     24   
     25    Vhdl * vhdl = new Vhdl (_name);
    2526
    26     vhdl.set_library_work (_name + "_Pack");
     27    vhdl->set_library_work (_name + "_Pack");
    2728
    2829    vhdl_port        (vhdl);
     
    3031    vhdl_body        (vhdl);
    3132
    32     vhdl.generate_file();
     33    vhdl->generate_file();
     34
     35    delete vhdl;
     36
    3337    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl","End");
    3438
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_vhdl_body.cpp

    r2 r42  
    1818
    1919
    20   void Two_Level_Branch_Predictor_Glue::vhdl_body (Vhdl & vhdl)
     20  void Two_Level_Branch_Predictor_Glue::vhdl_body (Vhdl * & vhdl)
    2121  {
    2222    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl_body","Begin");
    2323
    24     vhdl.set_body ("-- ack output");
     24    vhdl->set_body ("-- ack output");
    2525    for (uint32_t i=0; i<_param._nb_prediction; i++)
    2626      {
     
    2828
    2929        if (_param._have_bht)
    30           bht_ack = "in_PREDICT_BHT_ACK_"+toString(i);
     30          bht_ack = "in_PREDICT_"+toString(i)+"_BHT_ACK";
    3131        else
    3232          bht_ack = "'1'";
    3333
    3434        if (_param._have_pht)
    35           pht_ack = "in_PREDICT_PHT_ACK_"+toString(i);
     35          pht_ack = "in_PREDICT_"+toString(i)+"_PHT_ACK";
    3636        else
    3737          pht_ack = "'1'";
    3838
    39         vhdl.set_body ("out_PREDICT_ACK_"+toString(i)+"         <= "+bht_ack+" and "+pht_ack+";");
     39        vhdl->set_body ("out_PREDICT_"+toString(i)+"_ACK         <= "+bht_ack+" and "+pht_ack+";");
    4040      }
    4141
     
    4545
    4646        if (_param._have_bht)
    47           bht_ack = "in_BRANCH_COMPLETE_BHT_ACK_"+toString(i);
     47          bht_ack = "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK";
    4848        else
    4949          bht_ack = "'1'";
    5050
    5151        if (_param._have_pht)
    52           pht_ack = "in_BRANCH_COMPLETE_PHT_ACK_"+toString(i);
     52          pht_ack = "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK";
    5353        else
    5454          pht_ack = "'1'";
    5555
    56         vhdl.set_body ("out_BRANCH_COMPLETE_ACK_"+toString(i)+" <= "+bht_ack+" and "+pht_ack+";");
     56        vhdl->set_body ("out_BRANCH_COMPLETE_"+toString(i)+"_ACK <= "+bht_ack+" and "+pht_ack+";");
    5757      }
    5858   
    59     vhdl.set_body ("");
    60     vhdl.set_body ("-- address output");
     59    vhdl->set_body ("");
     60    vhdl->set_body ("-- address output");
    6161
    6262    for (uint32_t i=0; i<_param._nb_prediction; i++)
     
    6464        // The address is higher than the address size of bht
    6565        if (_param._have_bht)
    66           vhdl.set_body ("out_PREDICT_BHT_ADDRESS_"+toString(i)+" <= in_PREDICT_ADDRESS_"+toString(i)+std_logic_range(_param._bht_size_address)+";");
     66          vhdl->set_body ("out_PREDICT_"+toString(i)+"_BHT_ADDRESS <= in_PREDICT_"+toString(i)+"_ADDRESS"+std_logic_range(_param._bht_size_address)+";");
    6767
    6868        if (_param._have_pht)
     
    9393                  {
    9494                    min = _param._pht_size_address_shift;
    95                     vhdl.set_body ("out_PREDICT_PHT_ADDRESS_"+toString(i)+std_logic_range(min) + " <=  in_PREDICT_BHT_HISTORY_"+toString(i)+std_logic_range(min)+";");
     95                    vhdl->set_body ("out_PREDICT_"+toString(i)+"_PHT_ADDRESS"+std_logic_range(min) + " <=  in_PREDICT_"+toString(i)+"_BHT_HISTORY"+std_logic_range(min)+";");
    9696                  }
    9797
     
    9999                  {
    100100                    max = _param._bht_size_history;
    101                     vhdl.set_body ("out_PREDICT_PHT_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address-1,max) + " <=  in_PREDICT_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address-1-_param._pht_size_address_shift, _param._pht_size_address_share)+";");
     101                    vhdl->set_body ("out_PREDICT_"+toString(i)+"_PHT_ADDRESS"+std_logic_range(_param._pht_size_address-1,max) + " <=  in_PREDICT_"+toString(i)+"_ADDRESS"+std_logic_range(_param._pht_size_address-1-_param._pht_size_address_shift, _param._pht_size_address_share)+";");
    102102                  }
    103103               
    104104                // intersection
    105105                if (_param._pht_size_address_share > 0)
    106                   vhdl.set_body ("out_PREDICT_PHT_ADDRESS_"+toString(i)+std_logic_range(max-1,min) + " <=  in_PREDICT_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address_share-1,0)+" xor in_PREDICT_BHT_HISTORY_"+toString(i)+std_logic_range(max-1,min)+";");
     106                  vhdl->set_body ("out_PREDICT_"+toString(i)+"_PHT_ADDRESS"+std_logic_range(max-1,min) + " <=  in_PREDICT_"+toString(i)+"_ADDRESS"+std_logic_range(_param._pht_size_address_share-1,0)+" xor in_PREDICT_"+toString(i)+"_BHT_HISTORY"+std_logic_range(max-1,min)+";");
    107107              }
    108108            else
    109               vhdl.set_body ("out_PREDICT_PHT_ADDRESS_"+toString(i)+" <=  in_PREDICT_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address)+";");
     109              vhdl->set_body ("out_PREDICT_"+toString(i)+"_PHT_ADDRESS <=  in_PREDICT_"+toString(i)+"_ADDRESS"+std_logic_range(_param._pht_size_address)+";");
    110110          }
    111111      }
     
    115115        // The address is higher than the address size of bht
    116116        if (_param._have_bht)
    117           vhdl.set_body ("out_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i)+" <= in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+std_logic_range(_param._bht_size_address)+";");
     117          vhdl->set_body ("out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS <= in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"+std_logic_range(_param._bht_size_address)+";");
    118118
    119119        if (_param._have_pht)
     
    129129                  {
    130130                    min = _param._pht_size_address_shift;
    131                     vhdl.set_body ("out_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i)+std_logic_range(min) + " <=  in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i)+std_logic_range(min)+";");
     131                    vhdl->set_body ("out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS"+std_logic_range(min) + " <=  in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY"+std_logic_range(min)+";");
    132132                  }
    133133
     
    135135                  {
    136136                    max = _param._bht_size_history;
    137                     vhdl.set_body ("out_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address-1,max) + " <=  in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address-1-_param._pht_size_address_shift, _param._pht_size_address_share)+";");
     137                    vhdl->set_body ("out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS"+std_logic_range(_param._pht_size_address-1,max) + " <=  in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"+std_logic_range(_param._pht_size_address-1-_param._pht_size_address_shift, _param._pht_size_address_share)+";");
    138138                  }
    139139               
    140140                // intersection
    141141                if (_param._pht_size_address_share > 0)
    142                   vhdl.set_body ("out_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i)+std_logic_range(max-1,min) + " <=  in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address_share-1,0)+" xor in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i)+std_logic_range(max-1,min)+";");
     142                  vhdl->set_body ("out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS"+std_logic_range(max-1,min) + " <=  in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"+std_logic_range(_param._pht_size_address_share-1,0)+" xor in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY"+std_logic_range(max-1,min)+";");
    143143              }
    144144            else
    145               vhdl.set_body ("out_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i)+" <=  in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+std_logic_range(_param._pht_size_address)+";");
     145              vhdl->set_body ("out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS <=  in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"+std_logic_range(_param._pht_size_address)+";");
    146146          }
    147147      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_vhdl_declaration.cpp

    r2 r42  
    1818
    1919
    20   void Two_Level_Branch_Predictor_Glue::vhdl_declaration (Vhdl & vhdl)
     20  void Two_Level_Branch_Predictor_Glue::vhdl_declaration (Vhdl * & vhdl)
    2121  {
    2222    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl_declaration","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_vhdl_port.cpp

    r3 r42  
    1818
    1919
    20   void Two_Level_Branch_Predictor_Glue::vhdl_port (Vhdl & vhdl)
     20  void Two_Level_Branch_Predictor_Glue::vhdl_port (Vhdl * & vhdl)
    2121  {
    2222    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl_port","Begin");
    2323
    24     for (uint32_t i=0; i<_param._nb_prediction; i++)
    25       {
    26         if (_param._have_bht)
    27           {
    28         vhdl.set_port (" in_PREDICT_BHT_ACK_"    +toString(i), IN, 1);
    29         vhdl.set_port ("out_PREDICT_BHT_ADDRESS_"+toString(i),OUT,_param._bht_size_address);
    30           }
    31         if (_param._have_bht and _param._have_pht)
    32         vhdl.set_port (" in_PREDICT_BHT_HISTORY_"+toString(i), IN,_param._bht_size_history);
    33         if (_param._have_pht)
    34           {
    35         vhdl.set_port (" in_PREDICT_PHT_ACK_"    +toString(i), IN, 1);
    36         vhdl.set_port ("out_PREDICT_PHT_ADDRESS_"+toString(i),OUT,_param._pht_size_address);
    37           }
    38        
    39         vhdl.set_port ("out_PREDICT_ACK_"        +toString(i),OUT, 1);
    40         vhdl.set_port (" in_PREDICT_ADDRESS_"    +toString(i), IN,_param._size_address);
    41       }
    42 
    43     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    44       {
    45         if (_param._have_bht)
    46           {
    47         vhdl.set_port (" in_BRANCH_COMPLETE_BHT_ACK_"    +toString(i), IN, 1);
    48         vhdl.set_port ("out_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i),OUT,_param._bht_size_address);
    49           }
    50         if (_param._have_bht and _param._have_pht)
    51         vhdl.set_port (" in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i), IN,_param._bht_size_history);
    52         if (_param._have_pht)
    53           {
    54         vhdl.set_port (" in_BRANCH_COMPLETE_PHT_ACK_"    +toString(i), IN, 1);
    55         vhdl.set_port ("out_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i),OUT,_param._pht_size_address);
    56           }
    57         vhdl.set_port ("out_BRANCH_COMPLETE_ACK_"        +toString(i),OUT, 1);
    58         vhdl.set_port (" in_BRANCH_COMPLETE_ADDRESS_"    +toString(i), IN,_param._size_address);
    59       }
     24    _interfaces->set_port(vhdl);
    6025
    6126    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl_port","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/src/Two_Level_Branch_Predictor_Glue_vhdl_testbench_transition.cpp

    r2 r42  
    2222    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl_testbench_transition","Begin");
    2323
    24 #ifndef SYSTEMCASS_SPECIFIC
    25     sc_cycle(0);
    26 #endif   
     24    sc_start(0);
    2725
    28     // In order with file Two_Level_Branch_Predictor_Glue_vhdl_testbench_port.cpp
    29     // Warning : if a output depend of a subcomponent, take directly the port of subcomponent
    30     // (because we have no control on the ordonnancer's policy)
    31 
    32 //     _vhdl_testbench->add_input (PORT_READ( in_NRESET));
    33     for (uint32_t i=0; i<_param._nb_prediction; i++)
    34       {
    35         if (_param._have_bht)
    36           {
    37         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_BHT_ACK      [i]));
    38         _vhdl_testbench->add_output (PORT_READ(out_PREDICT_BHT_ADDRESS  [i]));
    39           }
    40         if (_param._have_bht and _param._have_pht)
    41         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_BHT_HISTORY  [i]));
    42         if (_param._have_pht)
    43           {
    44         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_PHT_ACK      [i]));
    45         _vhdl_testbench->add_output (PORT_READ(out_PREDICT_PHT_ADDRESS  [i]));
    46           }
    47         _vhdl_testbench->add_output (PORT_READ(out_PREDICT_ACK          [i]));
    48         _vhdl_testbench->add_input  (PORT_READ( in_PREDICT_ADDRESS      [i]));
    49       }
    50 
    51     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    52       {
    53         if (_param._have_bht)
    54           {
    55         _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_BHT_ACK      [i]));
    56         _vhdl_testbench->add_output (PORT_READ(out_BRANCH_COMPLETE_BHT_ADDRESS  [i]));
    57           }
    58         if (_param._have_bht and _param._have_pht)
    59         _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_BHT_HISTORY  [i]));
    60         if (_param._have_pht)
    61           {
    62         _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_PHT_ACK      [i]));
    63         _vhdl_testbench->add_output (PORT_READ(out_BRANCH_COMPLETE_PHT_ADDRESS  [i]));
    64           }
    65         _vhdl_testbench->add_output (PORT_READ(out_BRANCH_COMPLETE_ACK          [i]));
    66         _vhdl_testbench->add_input  (PORT_READ( in_BRANCH_COMPLETE_ADDRESS      [i]));
    67       }
    68     // add_test :
    69     //  - True  : the cycle must be compare with the output of systemC
    70     //  - False : no test
    71     _vhdl_testbench->add_test(true);
    72 
    73     _vhdl_testbench->new_cycle (); // always at the end
     26    _interfaces->testbench();
    7427
    7528    log_printf(FUNC,Two_Level_Branch_Predictor_Glue,"vhdl_testbench_transition","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/include/Two_Level_Branch_Predictor.h

    r15 r42  
    3030#include "Behavioural/include/Vhdl.h"
    3131#endif
    32 #ifdef VHDL_TESTBENCH
    33 #include "Behavioural/include/Vhdl_Testbench.h"
    34 #endif
     32#include "Behavioural/include/Component.h"
    3533
    3634using namespace std;
     
    6260#endif
    6361
    64 #ifdef VHDL_TESTBENCH
    65   private   : Vhdl_Testbench                 * _vhdl_testbench;
    66 #endif
     62  public    : Component                      * _component;
     63  private   : Interfaces                     * _interfaces;
    6764
    6865#ifdef SYSTEMC
     
    138135#if VHDL                                       
    139136  public  : void     vhdl                      (void);
    140   private : void     vhdl_port                 (Vhdl & vhdl);
    141   private : void     vhdl_declaration          (Vhdl & vhdl);
    142   private : void     vhdl_body                 (Vhdl & vhdl);
     137  private : void     vhdl_port                 (Vhdl * & vhdl);
     138  private : void     vhdl_declaration          (Vhdl * & vhdl);
     139  private : void     vhdl_body                 (Vhdl * & vhdl);
    143140#endif                                         
    144                                                
    145141#ifdef VHDL_TESTBENCH                         
    146   private : void     vhdl_testbench_port       (void);
    147142  private : void     vhdl_testbench_transition (void);
    148143#endif
    149   public  : void     vhdl_testbench_label      (string label);
    150144  };
    151145
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor.cpp

    r5 r42  
    3333    log_printf(FUNC,Two_Level_Branch_Predictor,"Two_Level_Branch_Predictor","Begin");
    3434
     35#ifdef SYSTEMC
     36    allocation ();
     37#endif
     38
    3539#ifdef STATISTICS
    3640    // Allocation of statistics
     
    3842                            param_statistics          ,
    3943                            param);
    40 #endif
    41 
    42 #ifdef VHDL_TESTBENCH
    43     // Creation of a testbench
    44     //  -> port
    45     //  -> clock's signals
    46     _vhdl_testbench = new Vhdl_Testbench (_name);
    47     vhdl_testbench_port           ();
    48     _vhdl_testbench->set_clock    ("in_CLOCK",true);
    4944#endif
    5045
     
    5550
    5651#ifdef SYSTEMC
    57     allocation ();
    58 
    5952#if (defined(STATISTICS) || defined (VHDL_TESTBENCH))
    6053    SC_METHOD (transition);
     
    7972    log_printf(FUNC,Two_Level_Branch_Predictor,"~Two_Level_Branch_Predictor","Begin");
    8073
    81 #ifdef VHDL_TESTBENCH
    82     // generate the test bench
    83     _vhdl_testbench->generate_file();
    84     delete _vhdl_testbench;
    85 #endif
    86 
    8774#ifdef STATISTICS
    8875    _stat->generate_file(statistics(0));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_allocation.cpp

    r15 r42  
    2222    log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","Begin");
    2323
    24      in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
    25      in_NRESET = new SC_IN (Tcontrol_t) ("in_NRESET");
     24    _component   = new Component ();
     25
     26    Entity * entity = _component->set_entity (_name                 
     27                                             ,"Two_Level_Branch_Predictor"
     28#ifdef POSITION
     29                                             ,MIXTE
     30#endif
     31                                              );
     32   
     33    _interfaces = entity->set_interfaces();
     34
     35    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     36    {
     37      Interface * interface = _interfaces->set_interface(""
     38#ifdef POSITION
     39                                                         , IN 
     40                                                         , SOUTH
     41                                                         , "Generalist interface"
     42#endif
     43                                                         );
     44     
     45      in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
     46      in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_YES);
     47    }
     48   
     49    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2650
    2751     in_PREDICT_VAL                 = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
     
    3256    if (_param._have_pht)
    3357    out_PREDICT_PHT_HISTORY         = new SC_OUT(Tpht_history_t) * [_param._nb_prediction     ];
    34     if (_param._have_bht)
    35       {
    36     signal_PREDICT_BHT_ACK          = new SC_SIGNAL(Tcontrol_t)     * [_param._nb_prediction];
    37     signal_PREDICT_BHT_ADDRESS      = new SC_SIGNAL(Taddress_t)     * [_param._nb_prediction];
    38       }
    39     if (_param._have_pht)
    40       {
    41     signal_PREDICT_PHT_ACK          = new SC_SIGNAL(Tcontrol_t)     * [_param._nb_prediction];
    42     signal_PREDICT_PHT_ADDRESS      = new SC_SIGNAL(Taddress_t)     * [_param._nb_prediction];
    43       }
    4458
    4559    for (uint32_t i=0; i<_param._nb_prediction; i++)
    4660      {
    47         rename = "in_PREDICT_VAL_"         +toString(i);
    48          in_PREDICT_VAL                 [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    49 
    50         rename = "out_PREDICT_ACK_"        +toString(i);
    51         out_PREDICT_ACK                 [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
    52 
    53         rename = "in_PREDICT_ADDRESS_"     +toString(i);
    54          in_PREDICT_ADDRESS             [i] = new SC_IN (Taddress_t)     (rename.c_str());
    55 
     61        Interface_fifo * interface = _interfaces->set_interface("predict_"+toString(i)
     62#ifdef POSITION
     63                                                                , IN 
     64                                                                , WEST
     65                                                                , "Interface Predict"
     66#endif
     67                                                                );
     68
     69         in_PREDICT_VAL                 [i] = interface->set_signal_valack_in            ("val"    , VAL);
     70        out_PREDICT_ACK                 [i] = interface->set_signal_valack_out           ("ack"    , ACK);
     71         in_PREDICT_ADDRESS             [i] = interface->set_signal_in  <Taddress_t>     ("address", _param._size_address);
    5672        if (_param._have_bht)
    57           {
    58         rename = "out_PREDICT_BHT_HISTORY_"+toString(i);
    59         out_PREDICT_BHT_HISTORY         [i] = new SC_OUT(Tbht_history_t) (rename.c_str());
    60           }
    61 
     73        out_PREDICT_BHT_HISTORY         [i] = interface->set_signal_out <Tbht_history_t> ("bht_history", _param._bht_size_shifter);
    6274        if (_param._have_pht)
    63           {
    64         rename = "out_PREDICT_PHT_HISTORY_"+toString(i);
    65         out_PREDICT_PHT_HISTORY         [i] = new SC_OUT(Tpht_history_t) (rename.c_str());
    66           }
    67 
    68         if (_param._have_bht)
    69           {
    70         rename = "signal_PREDICT_BHT_ACK_"    +toString(i);
    71         signal_PREDICT_BHT_ACK          [i] = new SC_SIGNAL(Tcontrol_t)     (rename.c_str());
    72 
    73         rename = "signal_PREDICT_BHT_ADDRESS_"+toString(i);
    74         signal_PREDICT_BHT_ADDRESS      [i] = new SC_SIGNAL(Taddress_t)     (rename.c_str());
    75           }
    76 
    77         if (_param._have_pht)
    78           {
    79         rename = "signal_PREDICT_PHT_ACK_"    +toString(i);
    80         signal_PREDICT_PHT_ACK          [i] = new SC_SIGNAL(Tcontrol_t)     (rename.c_str());
    81 
    82         rename = "signal_PREDICT_PHT_ADDRESS_"+toString(i);
    83         signal_PREDICT_PHT_ADDRESS      [i] = new SC_SIGNAL(Taddress_t)     (rename.c_str());
    84           }
    85       }
     75        out_PREDICT_PHT_HISTORY         [i] = interface->set_signal_out <Tpht_history_t> ("pht_history", _param._pht_size_counter);
     76      }
     77
     78    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    8679
    8780     in_BRANCH_COMPLETE_VAL         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
     
    9386     in_BRANCH_COMPLETE_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_branch_complete];
    9487     in_BRANCH_COMPLETE_DIRECTION   = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
    95     if (_param._have_bht)
    96       {
    97     signal_BRANCH_COMPLETE_BHT_ACK     = new SC_SIGNAL(Tcontrol_t) * [_param._nb_branch_complete];
    98     signal_BRANCH_COMPLETE_BHT_ADDRESS = new SC_SIGNAL(Taddress_t) * [_param._nb_branch_complete];
    99       }
    100     if (_param._have_pht)
    101       {
    102     signal_BRANCH_COMPLETE_PHT_ACK     = new SC_SIGNAL(Tcontrol_t) * [_param._nb_branch_complete];
    103     signal_BRANCH_COMPLETE_PHT_ADDRESS = new SC_SIGNAL(Taddress_t) * [_param._nb_branch_complete];
    104       }
    10588
    10689    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    10790      {
    108         rename = "in_BRANCH_COMPLETE_VAL_"         +toString(i);
    109          in_BRANCH_COMPLETE_VAL         [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    110 
    111         rename = "out_BRANCH_COMPLETE_ACK_"        +toString(i);
    112         out_BRANCH_COMPLETE_ACK         [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
    113 
    114         rename = "in_BRANCH_COMPLETE_ADDRESS_"     +toString(i);
    115          in_BRANCH_COMPLETE_ADDRESS     [i] = new SC_IN (Taddress_t)     (rename.c_str());
    116 
     91         in_BRANCH_COMPLETE_VAL         [i] = new interface->set_signal_valack_in            ("val"        , VAL);                 
     92        out_BRANCH_COMPLETE_ACK         [i] = new interface->set_signal_valack_out           ("ack"        , ACK);                 
     93         in_BRANCH_COMPLETE_ADDRESS     [i] = new interface->set_signal_in  <Taddress_t    > ("address"    , _param._size_address);
    11794        if (_param._have_bht)
    118           {
    119         rename = "in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i);
    120          in_BRANCH_COMPLETE_BHT_HISTORY [i] = new SC_IN (Tbht_history_t) (rename.c_str());
    121           }
     95         in_BRANCH_COMPLETE_BHT_HISTORY [i] = new interface->set_signal_in  <Tbht_history_t> ("bht_history", _param._bht_size_shifter);
    12296        if (_param._have_pht)
    123           {
    124         rename = "in_BRANCH_COMPLETE_PHT_HISTORY_"+toString(i);
    125          in_BRANCH_COMPLETE_PHT_HISTORY [i] = new SC_IN (Tpht_history_t) (rename.c_str());
    126           }
    127         rename = "in_BRANCH_COMPLETE_DIRECTION_"  +toString(i);
    128          in_BRANCH_COMPLETE_DIRECTION   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
    129         if (_param._have_bht)
    130           {
    131         rename = "signal_BRANCH_COMPLETE_BHT_ACK_"    +toString(i);
    132         signal_BRANCH_COMPLETE_BHT_ACK     [i] = new SC_SIGNAL(Tcontrol_t) (rename.c_str());
    133 
    134         rename = "signal_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i);
    135         signal_BRANCH_COMPLETE_BHT_ADDRESS [i] = new SC_SIGNAL(Taddress_t) (rename.c_str());
    136           }
    137         if (_param._have_pht)
    138           {
    139         rename = "signal_BRANCH_COMPLETE_PHT_ACK_"    +toString(i);
    140         signal_BRANCH_COMPLETE_PHT_ACK     [i] = new SC_SIGNAL(Tcontrol_t) (rename.c_str());
    141 
    142         rename = "signal_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i);
    143         signal_BRANCH_COMPLETE_PHT_ADDRESS [i] = new SC_SIGNAL(Taddress_t) (rename.c_str());
    144           }
     97         in_BRANCH_COMPLETE_PHT_HISTORY [i] = new interface->set_signal_in  <Tpht_history_t> ("pht_history", _param._pht_size_counter);
     98         in_BRANCH_COMPLETE_DIRECTION   [i] = new interface->set_signal_in  <Tcontrol_t    > ("direction"  , 1);
    14599      }
    146100
     
    152106      {
    153107        name_component = _name+"_Branch_History_Table";
    154 
    155         log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
    156        
    157         component_Branch_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::branch_history_table ::Branch_History_Table (name_component.c_str()               ,
     108       
     109        component_Branch_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::branch_history_table ::Branch_History_Table (name_component.c_str()
    158110#ifdef STATISTICS
    159                                                                                                                                                                                        _param_statistics                    ,
    160 #endif
    161                                                                                                                                                                                        *(_param._param_branch_history_table));
    162        
    163         // Instantiation
    164         (*(component_Branch_History_Table->in_CLOCK ))        (*(in_CLOCK ));
    165         (*(component_Branch_History_Table->in_NRESET))        (*(in_NRESET));
    166 
    167         for (uint32_t i=0; i<_param._nb_prediction; i++)
    168           {
    169             (*(component_Branch_History_Table-> in_PREDICT_VAL             [i]))    (*(    in_PREDICT_VAL          [i]));
    170             (*(component_Branch_History_Table->out_PREDICT_ACK             [i]))    (*(signal_PREDICT_BHT_ACK      [i]));
    171             (*(component_Branch_History_Table-> in_PREDICT_ADDRESS         [i]))    (*(signal_PREDICT_BHT_ADDRESS  [i]));
    172             (*(component_Branch_History_Table->out_PREDICT_HISTORY         [i]))    (*(   out_PREDICT_BHT_HISTORY  [i]));
    173           }
    174        
    175         for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    176           {
    177             (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_VAL       [i]))    (*(    in_BRANCH_COMPLETE_VAL         [i]));
    178             (*(component_Branch_History_Table->out_BRANCH_COMPLETE_ACK       [i]))    (*(signal_BRANCH_COMPLETE_BHT_ACK     [i]));
    179             (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_ADDRESS   [i]))    (*(signal_BRANCH_COMPLETE_BHT_ADDRESS [i]));
    180             (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_HISTORY   [i]))    (*(    in_BRANCH_COMPLETE_BHT_HISTORY [i]));
    181             (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_DIRECTION [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION   [i]));
    182           }
    183       }
    184 
     111                                                                                                                                                                                       ,_param_statistics
     112#endif
     113                                                                                                                                                                                       ,*(_param._param_counter));
     114       
     115        _component->set_component (component_Branch_History_Table->_component
     116#ifdef POSITION
     117                                   , 75
     118                                   , 25
     119                                   , 10
     120                                   , 10
     121#endif
     122                                   );
     123      }
     124   
    185125    // =====[ component_Pattern_History_Table ]===========================   
    186126    if (_param._have_pht)
     
    188128        name_component = _name+"_Pattern_History_Table";
    189129       
    190         log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
    191        
    192         component_Pattern_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::pattern_history_table::Pattern_History_Table (name_component.c_str()               ,
     130        component_Pattern_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::pattern_history_table ::Pattern_History_Table (name_component.c_str()
    193131#ifdef STATISTICS
    194                                                                                                                                                                                          _param_statistics                    ,
    195 #endif
    196                                                                                                                                                                                          *(_param._param_pattern_history_table));
    197        
    198         // Instantiation
    199         (*(component_Pattern_History_Table->in_CLOCK))        (*(in_CLOCK));
    200         (*(component_Pattern_History_Table->in_NRESET))       (*(in_NRESET));
    201        
     132                                                                                                                                                                                          ,_param_statistics
     133#endif
     134                                                                                                                                                                                          ,*(_param._param_counter));
     135       
     136        _component->set_component (component_Pattern_History_Table->_component
     137#ifdef POSITION
     138                                   , 75
     139                                   , 75
     140                                   , 10
     141                                   , 10
     142#endif
     143                                   );
     144      }
     145
     146    // =====[ component_Two_Level_Branch_Predictor_Glue ]=================
     147
     148    name_component = _name+"_Two_Level_Branch_Predictor_Glue";
     149
     150    component_Two_Level_Branch_Predictor_Glue = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Two_Level_Branch_Predictor_Glue (name_component.c_str()
     151#ifdef STATISTICS
     152                                                                                                                                                                                                                   ,_param_statistics
     153#endif
     154                                                                                                                                                                                                                   ,*(_param._param_counter));
     155   
     156    _component->set_component (component_Pattern_History_Table->_component
     157#ifdef POSITION
     158                               , 50
     159                               , 75
     160                               , 10
     161                               , 10
     162#endif
     163                               );
     164   
     165    // ~~~~~[ Component - Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     166   
     167    // =====[ component_Branch_History_Table - Instanciation ]============
     168    if (_param._have_bht)
     169      {
     170#ifdef POSITION
     171        _component->interface_map (_name+"_Branch_History_Table","",
     172                                   _name                        ,"");
     173#endif
     174       
     175        _component->port_map(_name+"_Branch_History_Table", "in_CLOCK" , _name,"in_CLOCK" );
     176        _component->port_map(_name+"_Branch_History_Table", "in_NRESET", _name,"in_NRESET");
     177
    202178        for (uint32_t i=0; i<_param._nb_prediction; i++)
    203179          {
    204             (*(component_Pattern_History_Table-> in_PREDICT_VAL             [i]))    (*(    in_PREDICT_VAL          [i]));
    205             (*(component_Pattern_History_Table->out_PREDICT_ACK             [i]))    (*(signal_PREDICT_PHT_ACK      [i]));
    206             (*(component_Pattern_History_Table-> in_PREDICT_ADDRESS         [i]))    (*(signal_PREDICT_PHT_ADDRESS  [i]));
    207             (*(component_Pattern_History_Table->out_PREDICT_HISTORY         [i]))    (*(   out_PREDICT_PHT_HISTORY  [i]));
     180#ifdef POSITION
     181            _component->interface_map (_name+"_Branch_History_Table","predict_"+toString(i),
     182                                       _name                        ,"predict_"+toString(i));
     183#endif
     184            _component->port_map(_name+"_Branch_History_Table", "in_PREDICT_"+toString(i)+"_VAL"    , _name                                   , "in_PREDICT_"+toString(i)+"_VAL"        );
     185            _component->port_map(_name+"_Branch_History_Table","out_PREDICT_"+toString(i)+"_ACK"    , _name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_BHT_ACK"    );
     186            _component->port_map(_name+"_Branch_History_Table", "in_PREDICT_"+toString(i)+"_ADDRESS", _name+"_Two_Level_Branch_Predictor_Glue","out_PREDICT_"+toString(i)+"_BHT_ADDRESS");
     187            _component->port_map(_name+"_Branch_History_Table","out_PREDICT_"+toString(i)+"_HISTORY", _name                                   ,"out_PREDICT_"+toString(i)+"_BHT_HISTORY");
    208188          }
    209189       
    210190        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    211191          {
    212             (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_VAL       [i]))    (*(    in_BRANCH_COMPLETE_VAL         [i]));
    213             (*(component_Pattern_History_Table->out_BRANCH_COMPLETE_ACK       [i]))    (*(signal_BRANCH_COMPLETE_PHT_ACK     [i]));
    214             (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_ADDRESS   [i]))    (*(signal_BRANCH_COMPLETE_PHT_ADDRESS [i]));
    215             (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_HISTORY   [i]))    (*(    in_BRANCH_COMPLETE_PHT_HISTORY [i]));
    216             (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_DIRECTION [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION   [i]));
    217           }
    218       }
    219 
    220     // =====[ component_Two_Level_Branch_Predictor_Glue ]===========================   
    221     name_component = _name+"_Two_Level_Branch_Predictor_Glue";
    222    
    223     log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
    224    
    225     component_Two_Level_Branch_Predictor_Glue = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Two_Level_Branch_Predictor_Glue (name_component.c_str()               ,
    226 #ifdef STATISTICS
    227                                                                                                                                                                                                                    _param_statistics                    ,
    228 #endif
    229                                                                                                                                                                                                                    *(_param._param_two_level_branch_predictor_glue));
    230    
    231     // Instantiation
    232 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    233     (*(component_Two_Level_Branch_Predictor_Glue->in_CLOCK))        (*(in_CLOCK));
    234 #endif 
    235     for (uint32_t i=0; i<_param._nb_prediction; i++)
    236       {
     192#ifdef POSITION
     193            _component->interface_map (_name+"_Branch_History_Table","branch_complete_"+toString(i),
     194                                       _name                        ,"branch_complete_"+toString(i));
     195#endif
     196            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"      , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"          );
     197            _component->port_map(_name+"_Branch_History_Table","out_BRANCH_COMPLETE_"+toString(i)+"_ACK"      , _name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK"      );
     198            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"  , _name+"_Two_Level_Branch_Predictor_Glue","out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS"  );
     199            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY"  , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY"  );
     200            _component->port_map(_name+"_Branch_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION", _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION"    );
     201          }
     202      }
     203   
     204    // =====[ component_Pattern_History_Table - Instanciation ]===========
     205    if (_param._have_pht)
     206      {
     207#ifdef POSITION
     208        _component->interface_map (_name+"_Pattern_History_Table","",
     209                                   _name                         ,"");
     210#endif
     211       
     212        _component->port_map(_name+"_Pattern_History_Table", "in_CLOCK" , _name,"in_CLOCK" );
     213        _component->port_map(_name+"_Pattern_History_Table", "in_NRESET", _name,"in_NRESET");
     214
     215        for (uint32_t i=0; i<_param._nb_prediction; i++)
     216          {
     217#ifdef POSITION
     218            _component->interface_map (_name+"_Pattern_History_Table","predict_"+toString(i),
     219                                       _name                         ,"predict_"+toString(i));
     220#endif
     221            _component->port_map(_name+"_Pattern_History_Table", "in_PREDICT_"+toString(i)+"_VAL"    , _name                                   , "in_PREDICT_"+toString(i)+"_VAL"        );
     222            _component->port_map(_name+"_Pattern_History_Table","out_PREDICT_"+toString(i)+"_ACK"    , _name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_PHT_ACK"    );
     223            _component->port_map(_name+"_Pattern_History_Table", "in_PREDICT_"+toString(i)+"_ADDRESS", _name+"_Two_Level_Branch_Predictor_Glue","out_PREDICT_"+toString(i)+"_PHT_ADDRESS");
     224            _component->port_map(_name+"_Pattern_History_Table","out_PREDICT_"+toString(i)+"_HISTORY", _name                                   ,"out_PREDICT_"+toString(i)+"_PHT_HISTORY");
     225          }
     226       
     227        for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     228          {
     229#ifdef POSITION
     230            _component->interface_map (_name+"_Pattern_History_Table","branch_complete_"+toString(i),
     231                                       _name                        ,"branch_complete_"+toString(i));
     232#endif
     233            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"      , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"          );
     234            _component->port_map(_name+"_Pattern_History_Table","out_BRANCH_COMPLETE_"+toString(i)+"_ACK"      , _name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK"      );
     235            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"  , _name+"_Two_Level_Branch_Predictor_Glue","out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS"  );
     236            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_HISTORY"  , _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_HISTORY"  );
     237            _component->port_map(_name+"_Pattern_History_Table", "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION", _name                                   , "in_BRANCH_COMPLETE_"+toString(i)+"_DIRECTION"    );
     238          }
     239      }
     240
     241    // =====[ component_Two_Level_Branch_Predictor_Glue - Instanciation ]=
     242#ifdef POSITION
     243        _component->interface_map (_name+"_Two_Level_Branch_Predictor_Glue","",
     244                                   _name                                   ,"");
     245#endif
     246        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_CLOCK" , _name,"in_CLOCK" );
     247        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_NRESET", _name,"in_NRESET");
     248
     249        for (uint32_t i=0; i<_param._nb_prediction; i++)
     250          {
    237251        if (_param._have_bht)
    238252          {
    239             (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_ACK             [i])) (*(signal_PREDICT_BHT_ACK              [i]));
    240             (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_BHT_ADDRESS         [i])) (*(signal_PREDICT_BHT_ADDRESS          [i]));
    241           }                                                                                                                                                                       
    242         if (_param._have_pht)                                                                                                                     
    243           {                                                                                                                                                                       
    244             (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_PHT_ACK             [i])) (*(signal_PREDICT_PHT_ACK              [i]));
    245             (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_PHT_ADDRESS         [i])) (*(signal_PREDICT_PHT_ADDRESS          [i]));
    246           }                                                                                                                                                                       
    247         if (_param._have_bht and _param._have_pht)                                                                                       
    248           {                                                                                                                                                                       
    249             (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_HISTORY         [i])) (*(   out_PREDICT_BHT_HISTORY          [i]));
    250           }                                                                                                                                                                       
    251         (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_ACK                 [i])) (*(   out_PREDICT_ACK                  [i]));
    252         (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_ADDRESS             [i])) (*(    in_PREDICT_ADDRESS              [i]));
    253       }
     253        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_PREDICT_"+toString(i)+"_BHT_ACK"    , _name+"_Branch_History_Table" , "out_PREDICT_"+toString(i)+"_BHT_ACK"    );
     254        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_PREDICT_"+toString(i)+"_BHT_ADDRESS", _name+"_Branch_History_Table" ,  "in_PREDICT_"+toString(i)+"_BHT_ADDRESS");
     255          }
     256        if (_param._have_pht)
     257          {
     258        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_PREDICT_"+toString(i)+"_PHT_ACK"    , _name+"_Pattern_History_Table", "out_PREDICT_"+toString(i)+"_PHT_ACK"    );
     259        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_PREDICT_"+toString(i)+"_PHT_ADDRESS", _name+"_Pattern_History_Table",  "in_PREDICT_"+toString(i)+"_PHT_ADDRESS");
     260          }
     261        if (_param._have_bht and _param._have_pht)
     262        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_BHT_HISTORY" , _name                         , "in_PREDICT_"+toString(i)+"_BHT_HISTORY");
     263        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue","out_PREDICT_"+toString(i)+"_ACK"         , _name                         ,"out_PREDICT_"+toString(i)+"_ACK");
     264        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_PREDICT_"+toString(i)+"_ADDRESS"     , _name                         , "in_PREDICT_"+toString(i)+"_ADDRESS");
     265          }
    254266   
    255267    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     
    257269        if (_param._have_bht)
    258270          {
    259             (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_ACK     [i])) (*(signal_BRANCH_COMPLETE_BHT_ACK      [i]));
    260             (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_BHT_ADDRESS [i])) (*(signal_BRANCH_COMPLETE_BHT_ADDRESS  [i]));
    261           }                                                                                                                                                       
    262         if (_param._have_pht)                                                                                                     
    263           {                                                                                                                                                       
    264             (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_PHT_ACK     [i])) (*(signal_BRANCH_COMPLETE_PHT_ACK      [i]));
    265             (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_PHT_ADDRESS [i])) (*(signal_BRANCH_COMPLETE_PHT_ADDRESS  [i]));
    266           }                                                                                                                                                       
    267         if (_param._have_bht and _param._have_pht)                                                                               
    268           {                                                                                                                                                       
    269             (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_HISTORY [i])) (*(    in_BRANCH_COMPLETE_BHT_HISTORY  [i]));
    270           }                                                                                                                                                       
    271         (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_ACK         [i])) (*(   out_BRANCH_COMPLETE_ACK          [i]));
    272         (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_ADDRESS     [i])) (*(    in_BRANCH_COMPLETE_ADDRESS      [i]));
     271        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK"    , _name+"_Branch_History_Table" , "out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ACK"    );
     272        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS", _name+"_Branch_History_Table" ,  "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_ADDRESS");
     273          }
     274        if (_param._have_pht)
     275          {
     276        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue",  "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK"    , _name+"_Pattern_History_Table", "out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ACK"    );
     277        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "out_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS", _name+"_Pattern_History_Table",  "in_BRANCH_COMPLETE_"+toString(i)+"_PHT_ADDRESS");
     278          }
     279        if (_param._have_bht and _param._have_pht)
     280        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY" , _name                         , "in_BRANCH_COMPLETE_"+toString(i)+"_BHT_HISTORY");
     281        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue","out_BRANCH_COMPLETE_"+toString(i)+"_ACK"         , _name                         ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK");
     282        _component->port_map(_name+"_Two_Level_Branch_Predictor_Glue", "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"     , _name                         , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS");
    273283      }
    274284 
     285#ifdef POSITION
     286    _component->generate_file();
     287#endif
     288
    275289    log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","End");
    276290  };
     291
     292
     293
     294
     295
     296
     297
     298//   void Two_Level_Branch_Predictor::allocation (void)
     299//   {
     300//     string rename;
     301
     302//     log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","Begin");
     303
     304//     _component   = new Component ();
     305
     306//     Entity * entity = _component->set_entity (_name                 
     307// #ifdef POSITION
     308//                                           ,"Two_Level_Branch_Predictor"
     309//                                           ,MIXTE
     310// #endif
     311//                                            );
     312   
     313//     _interfaces = entity->set_interfaces();
     314
     315//     // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     316//     {
     317//       Interface * interface = _interfaces->set_interface(""
     318// #ifdef POSITION
     319//                                                       , IN 
     320//                                                       , SOUTH
     321//                                                       , "Generalist interface"
     322// #endif
     323//                                                       );
     324     
     325//       in_CLOCK              = interface->set_signal_clk              ("clock" ,1);
     326//       in_NRESET             = interface->set_signal_in  <Tcontrol_t> ("nreset",1,RESET_VHDL_YES);
     327//     }
     328   
     329//     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     330
     331//      in_PREDICT_VAL                 = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
     332//     out_PREDICT_ACK                 = new SC_OUT(Tcontrol_t)     * [_param._nb_prediction     ];
     333//      in_PREDICT_ADDRESS             = new SC_IN (Taddress_t)     * [_param._nb_prediction     ];
     334//     if (_param._have_bht)
     335//     out_PREDICT_BHT_HISTORY         = new SC_OUT(Tbht_history_t) * [_param._nb_prediction     ];
     336//     if (_param._have_pht)
     337//     out_PREDICT_PHT_HISTORY         = new SC_OUT(Tpht_history_t) * [_param._nb_prediction     ];
     338// //     if (_param._have_bht)
     339// //       {
     340// //     signal_PREDICT_BHT_ACK          = new SC_SIGNAL(Tcontrol_t)     * [_param._nb_prediction];
     341// //     signal_PREDICT_BHT_ADDRESS      = new SC_SIGNAL(Taddress_t)     * [_param._nb_prediction];
     342// //       }
     343// //     if (_param._have_pht)
     344// //       {
     345// //     signal_PREDICT_PHT_ACK          = new SC_SIGNAL(Tcontrol_t)     * [_param._nb_prediction];
     346// //     signal_PREDICT_PHT_ADDRESS      = new SC_SIGNAL(Taddress_t)     * [_param._nb_prediction];
     347// //       }
     348
     349//     for (uint32_t i=0; i<_param._nb_prediction; i++)
     350//       {
     351//      rename = "in_PREDICT_VAL_"         +toString(i);
     352//       in_PREDICT_VAL                 [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
     353
     354//      rename = "out_PREDICT_ACK_"        +toString(i);
     355//      out_PREDICT_ACK                 [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
     356
     357//      rename = "in_PREDICT_ADDRESS_"     +toString(i);
     358//       in_PREDICT_ADDRESS             [i] = new SC_IN (Taddress_t)     (rename.c_str());
     359
     360//      if (_param._have_bht)
     361//        {
     362//      rename = "out_PREDICT_BHT_HISTORY_"+toString(i);
     363//      out_PREDICT_BHT_HISTORY         [i] = new SC_OUT(Tbht_history_t) (rename.c_str());
     364//        }
     365
     366//      if (_param._have_pht)
     367//        {
     368//      rename = "out_PREDICT_PHT_HISTORY_"+toString(i);
     369//      out_PREDICT_PHT_HISTORY         [i] = new SC_OUT(Tpht_history_t) (rename.c_str());
     370//        }
     371
     372// //   if (_param._have_bht)
     373// //     {
     374// //   rename = "signal_PREDICT_BHT_ACK_"    +toString(i);
     375// //   signal_PREDICT_BHT_ACK          [i] = new SC_SIGNAL(Tcontrol_t)     (rename.c_str());
     376
     377// //   rename = "signal_PREDICT_BHT_ADDRESS_"+toString(i);
     378// //   signal_PREDICT_BHT_ADDRESS      [i] = new SC_SIGNAL(Taddress_t)     (rename.c_str());
     379// //     }
     380
     381// //   if (_param._have_pht)
     382// //     {
     383// //   rename = "signal_PREDICT_PHT_ACK_"    +toString(i);
     384// //   signal_PREDICT_PHT_ACK          [i] = new SC_SIGNAL(Tcontrol_t)     (rename.c_str());
     385
     386// //   rename = "signal_PREDICT_PHT_ADDRESS_"+toString(i);
     387// //   signal_PREDICT_PHT_ADDRESS      [i] = new SC_SIGNAL(Taddress_t)     (rename.c_str());
     388// //     }
     389//       }
     390
     391//      in_BRANCH_COMPLETE_VAL         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
     392//     out_BRANCH_COMPLETE_ACK         = new SC_OUT(Tcontrol_t)     * [_param._nb_branch_complete];
     393//      in_BRANCH_COMPLETE_ADDRESS     = new SC_IN (Taddress_t)     * [_param._nb_branch_complete];
     394//     if (_param._have_bht)
     395//      in_BRANCH_COMPLETE_BHT_HISTORY = new SC_IN (Tbht_history_t) * [_param._nb_branch_complete];
     396//     if (_param._have_pht)
     397//      in_BRANCH_COMPLETE_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_branch_complete];
     398//      in_BRANCH_COMPLETE_DIRECTION   = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete];
     399// //     if (_param._have_bht)
     400// //       {
     401// //     signal_BRANCH_COMPLETE_BHT_ACK     = new SC_SIGNAL(Tcontrol_t) * [_param._nb_branch_complete];
     402// //     signal_BRANCH_COMPLETE_BHT_ADDRESS = new SC_SIGNAL(Taddress_t) * [_param._nb_branch_complete];
     403// //       }
     404// //     if (_param._have_pht)
     405// //       {
     406// //     signal_BRANCH_COMPLETE_PHT_ACK     = new SC_SIGNAL(Tcontrol_t) * [_param._nb_branch_complete];
     407// //     signal_BRANCH_COMPLETE_PHT_ADDRESS = new SC_SIGNAL(Taddress_t) * [_param._nb_branch_complete];
     408// //       }
     409
     410//     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     411//       {
     412//      rename = "in_BRANCH_COMPLETE_VAL_"         +toString(i);
     413//       in_BRANCH_COMPLETE_VAL         [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
     414
     415//      rename = "out_BRANCH_COMPLETE_ACK_"        +toString(i);
     416//      out_BRANCH_COMPLETE_ACK         [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
     417
     418//      rename = "in_BRANCH_COMPLETE_ADDRESS_"     +toString(i);
     419//       in_BRANCH_COMPLETE_ADDRESS     [i] = new SC_IN (Taddress_t)     (rename.c_str());
     420
     421//      if (_param._have_bht)
     422//        {
     423//      rename = "in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i);
     424//       in_BRANCH_COMPLETE_BHT_HISTORY [i] = new SC_IN (Tbht_history_t) (rename.c_str());
     425//        }
     426//      if (_param._have_pht)
     427//        {
     428//      rename = "in_BRANCH_COMPLETE_PHT_HISTORY_"+toString(i);
     429//       in_BRANCH_COMPLETE_PHT_HISTORY [i] = new SC_IN (Tpht_history_t) (rename.c_str());
     430//        }
     431//      rename = "in_BRANCH_COMPLETE_DIRECTION_"  +toString(i);
     432//       in_BRANCH_COMPLETE_DIRECTION   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
     433// //   if (_param._have_bht)
     434// //     {
     435// //   rename = "signal_BRANCH_COMPLETE_BHT_ACK_"    +toString(i);
     436// //   signal_BRANCH_COMPLETE_BHT_ACK     [i] = new SC_SIGNAL(Tcontrol_t) (rename.c_str());
     437
     438// //   rename = "signal_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i);
     439// //   signal_BRANCH_COMPLETE_BHT_ADDRESS [i] = new SC_SIGNAL(Taddress_t) (rename.c_str());
     440// //     }
     441// //   if (_param._have_pht)
     442// //     {
     443// //   rename = "signal_BRANCH_COMPLETE_PHT_ACK_"    +toString(i);
     444// //   signal_BRANCH_COMPLETE_PHT_ACK     [i] = new SC_SIGNAL(Tcontrol_t) (rename.c_str());
     445
     446// //   rename = "signal_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i);
     447// //   signal_BRANCH_COMPLETE_PHT_ADDRESS [i] = new SC_SIGNAL(Taddress_t) (rename.c_str());
     448// //     }
     449//       }
     450
     451//     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     452//     string name_component;
     453
     454//     // =====[ component_Branch_History_Table ]============================   
     455//     if (_param._have_bht)
     456//       {
     457//      name_component = _name+"_Branch_History_Table";
     458
     459//      log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
     460       
     461//      component_Branch_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::branch_history_table ::Branch_History_Table (name_component.c_str()               ,
     462// #ifdef STATISTICS
     463//                                                                                                                                                                                     _param_statistics                    ,
     464// #endif
     465//                                                                                                                                                                                     *(_param._param_branch_history_table));
     466       
     467//      // Instantiation
     468//      (*(component_Branch_History_Table->in_CLOCK ))        (*(in_CLOCK ));
     469//      (*(component_Branch_History_Table->in_NRESET))        (*(in_NRESET));
     470
     471//      for (uint32_t i=0; i<_param._nb_prediction; i++)
     472//        {
     473//          (*(component_Branch_History_Table-> in_PREDICT_VAL             [i]))    (*(    in_PREDICT_VAL          [i]));
     474//          (*(component_Branch_History_Table->out_PREDICT_ACK             [i]))    (*(signal_PREDICT_BHT_ACK      [i]));
     475//          (*(component_Branch_History_Table-> in_PREDICT_ADDRESS         [i]))    (*(signal_PREDICT_BHT_ADDRESS  [i]));
     476//          (*(component_Branch_History_Table->out_PREDICT_HISTORY         [i]))    (*(   out_PREDICT_BHT_HISTORY  [i]));
     477//        }
     478       
     479//      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     480//        {
     481//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_VAL       [i]))    (*(    in_BRANCH_COMPLETE_VAL         [i]));
     482//          (*(component_Branch_History_Table->out_BRANCH_COMPLETE_ACK       [i]))    (*(signal_BRANCH_COMPLETE_BHT_ACK     [i]));
     483//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_ADDRESS   [i]))    (*(signal_BRANCH_COMPLETE_BHT_ADDRESS [i]));
     484//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_HISTORY   [i]))    (*(    in_BRANCH_COMPLETE_BHT_HISTORY [i]));
     485//          (*(component_Branch_History_Table-> in_BRANCH_COMPLETE_DIRECTION [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION   [i]));
     486//        }
     487//       }
     488
     489//     // =====[ component_Pattern_History_Table ]===========================   
     490//     if (_param._have_pht)
     491//       {
     492//      name_component = _name+"_Pattern_History_Table";
     493       
     494//      log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
     495       
     496//      component_Pattern_History_Table = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::pattern_history_table::Pattern_History_Table (name_component.c_str()               ,
     497// #ifdef STATISTICS
     498//                                                                                                                                                                                       _param_statistics                    ,
     499// #endif
     500//                                                                                                                                                                                       *(_param._param_pattern_history_table));
     501       
     502//      // Instantiation
     503//      (*(component_Pattern_History_Table->in_CLOCK))        (*(in_CLOCK));
     504//      (*(component_Pattern_History_Table->in_NRESET))       (*(in_NRESET));
     505       
     506//      for (uint32_t i=0; i<_param._nb_prediction; i++)
     507//        {
     508//          (*(component_Pattern_History_Table-> in_PREDICT_VAL             [i]))    (*(    in_PREDICT_VAL          [i]));
     509//          (*(component_Pattern_History_Table->out_PREDICT_ACK             [i]))    (*(signal_PREDICT_PHT_ACK      [i]));
     510//          (*(component_Pattern_History_Table-> in_PREDICT_ADDRESS         [i]))    (*(signal_PREDICT_PHT_ADDRESS  [i]));
     511//          (*(component_Pattern_History_Table->out_PREDICT_HISTORY         [i]))    (*(   out_PREDICT_PHT_HISTORY  [i]));
     512//        }
     513       
     514//      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     515//        {
     516//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_VAL       [i]))    (*(    in_BRANCH_COMPLETE_VAL         [i]));
     517//          (*(component_Pattern_History_Table->out_BRANCH_COMPLETE_ACK       [i]))    (*(signal_BRANCH_COMPLETE_PHT_ACK     [i]));
     518//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_ADDRESS   [i]))    (*(signal_BRANCH_COMPLETE_PHT_ADDRESS [i]));
     519//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_HISTORY   [i]))    (*(    in_BRANCH_COMPLETE_PHT_HISTORY [i]));
     520//          (*(component_Pattern_History_Table-> in_BRANCH_COMPLETE_DIRECTION [i]))    (*(    in_BRANCH_COMPLETE_DIRECTION   [i]));
     521//        }
     522//       }
     523
     524//     // =====[ component_Two_Level_Branch_Predictor_Glue ]===========================   
     525//     name_component = _name+"_Two_Level_Branch_Predictor_Glue";
     526   
     527//     log_printf(INFO,Two_Level_Branch_Predictor,"allocation","Allocation : %s",name_component.c_str());
     528   
     529//     component_Two_Level_Branch_Predictor_Glue = new morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::two_level_branch_predictor::two_level_branch_predictor_glue::Two_Level_Branch_Predictor_Glue (name_component.c_str()               ,
     530// #ifdef STATISTICS
     531//                                                                                                                                                                                                                 _param_statistics                    ,
     532// #endif
     533//                                                                                                                                                                                                                 *(_param._param_two_level_branch_predictor_glue));
     534   
     535//     // Instantiation
     536// #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
     537//     (*(component_Two_Level_Branch_Predictor_Glue->in_CLOCK))        (*(in_CLOCK));
     538// #endif       
     539//     for (uint32_t i=0; i<_param._nb_prediction; i++)
     540//       {
     541//      if (_param._have_bht)
     542//        {
     543//          (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_ACK             [i])) (*(signal_PREDICT_BHT_ACK              [i]));
     544//          (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_BHT_ADDRESS         [i])) (*(signal_PREDICT_BHT_ADDRESS          [i]));
     545//        }                                                                                                                                                                       
     546//      if (_param._have_pht)                                                                                                                     
     547//        {                                                                                                                                                                       
     548//          (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_PHT_ACK             [i])) (*(signal_PREDICT_PHT_ACK              [i]));
     549//          (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_PHT_ADDRESS         [i])) (*(signal_PREDICT_PHT_ADDRESS          [i]));
     550//        }                                                                                                                                                                       
     551//      if (_param._have_bht and _param._have_pht)                                                                                       
     552//        {                                                                                                                                                                       
     553//          (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_BHT_HISTORY         [i])) (*(   out_PREDICT_BHT_HISTORY          [i]));
     554//        }                                                                                                                                                                       
     555//      (*(component_Two_Level_Branch_Predictor_Glue->out_PREDICT_ACK                 [i])) (*(   out_PREDICT_ACK                  [i]));
     556//      (*(component_Two_Level_Branch_Predictor_Glue-> in_PREDICT_ADDRESS             [i])) (*(    in_PREDICT_ADDRESS              [i]));
     557//       }
     558   
     559//     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
     560//       {
     561//      if (_param._have_bht)
     562//        {
     563//          (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_ACK     [i])) (*(signal_BRANCH_COMPLETE_BHT_ACK      [i]));
     564//          (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_BHT_ADDRESS [i])) (*(signal_BRANCH_COMPLETE_BHT_ADDRESS  [i]));
     565//        }                                                                                                                                                       
     566//      if (_param._have_pht)                                                                                                     
     567//        {                                                                                                                                                       
     568//          (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_PHT_ACK     [i])) (*(signal_BRANCH_COMPLETE_PHT_ACK      [i]));
     569//          (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_PHT_ADDRESS [i])) (*(signal_BRANCH_COMPLETE_PHT_ADDRESS  [i]));
     570//        }                                                                                                                                                       
     571//      if (_param._have_bht and _param._have_pht)                                                                               
     572//        {                                                                                                                                                       
     573//          (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_BHT_HISTORY [i])) (*(    in_BRANCH_COMPLETE_BHT_HISTORY  [i]));
     574//        }                                                                                                                                                       
     575//      (*(component_Two_Level_Branch_Predictor_Glue->out_BRANCH_COMPLETE_ACK         [i])) (*(   out_BRANCH_COMPLETE_ACK          [i]));
     576//      (*(component_Two_Level_Branch_Predictor_Glue-> in_BRANCH_COMPLETE_ADDRESS     [i])) (*(    in_BRANCH_COMPLETE_ADDRESS      [i]));
     577//       }
     578 
     579//     log_printf(FUNC,Two_Level_Branch_Predictor,"allocation","End");
     580//   };
    277581 
    278582}; // end namespace two_level_branch_predictor
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_deallocation.cpp

    r15 r42  
    2323    delete in_NRESET;
    2424
    25     for (uint32_t i=0; i<_param._nb_prediction; i++)
    26       {
    27         delete  in_PREDICT_VAL                 [i];
    28         delete out_PREDICT_ACK                 [i];
    29         delete  in_PREDICT_ADDRESS             [i];
    30         if (_param._have_bht)
    31         delete out_PREDICT_BHT_HISTORY         [i];
    32         if (_param._have_pht)
    33         delete out_PREDICT_PHT_HISTORY         [i];
    34         if (_param._have_bht)
    35           {
    36         delete signal_PREDICT_BHT_ACK          [i];
    37         delete signal_PREDICT_BHT_ADDRESS      [i];
    38           }
    39         if (_param._have_pht)
    40           {
    41         delete signal_PREDICT_PHT_ACK          [i];
    42         delete signal_PREDICT_PHT_ADDRESS      [i];
    43           }
     25    delete []  in_PREDICT_VAL        ;
     26    delete [] out_PREDICT_ACK        ;
     27    delete []  in_PREDICT_ADDRESS    ;
     28    if (_param._have_bht)
     29    delete [] out_PREDICT_BHT_HISTORY;
     30    if (_param._have_pht)
     31    delete [] out_PREDICT_PHT_HISTORY;
    4432
    45       }
    46 
    47     delete  in_PREDICT_VAL        ;
    48     delete out_PREDICT_ACK        ;
    49     delete  in_PREDICT_ADDRESS    ;
     33    delete []  in_BRANCH_COMPLETE_VAL        ;
     34    delete [] out_BRANCH_COMPLETE_ACK        ;
     35    delete []  in_BRANCH_COMPLETE_ADDRESS    ;
    5036    if (_param._have_bht)
    51     delete out_PREDICT_BHT_HISTORY;
     37    delete []  in_BRANCH_COMPLETE_BHT_HISTORY;
    5238    if (_param._have_pht)
    53     delete out_PREDICT_PHT_HISTORY;
    54     if (_param._have_bht)
    55       {
    56     delete signal_PREDICT_BHT_ACK    ;
    57     delete signal_PREDICT_BHT_ADDRESS;
    58       }
    59     if (_param._have_pht)
    60       {
    61     delete signal_PREDICT_PHT_ACK    ;
    62     delete signal_PREDICT_PHT_ADDRESS;
    63       }
    64 
    65     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    66       {
    67         delete  in_BRANCH_COMPLETE_VAL         [i];
    68         delete out_BRANCH_COMPLETE_ACK         [i];
    69         delete  in_BRANCH_COMPLETE_ADDRESS     [i];
    70         if (_param._have_bht)
    71         delete  in_BRANCH_COMPLETE_BHT_HISTORY [i];
    72         if (_param._have_pht)
    73         delete  in_BRANCH_COMPLETE_PHT_HISTORY [i];
    74         delete  in_BRANCH_COMPLETE_DIRECTION   [i];
    75         if (_param._have_bht)
    76           {
    77         delete signal_BRANCH_COMPLETE_BHT_ACK     [i];
    78         delete signal_BRANCH_COMPLETE_BHT_ADDRESS [i];
    79           }
    80         if (_param._have_pht)
    81           {
    82         delete signal_BRANCH_COMPLETE_PHT_ACK     [i];
    83         delete signal_BRANCH_COMPLETE_PHT_ADDRESS [i];
    84           }
    85       }
    86 
    87     delete  in_BRANCH_COMPLETE_VAL        ;
    88     delete out_BRANCH_COMPLETE_ACK        ;
    89     delete  in_BRANCH_COMPLETE_ADDRESS    ;
    90     if (_param._have_bht)
    91     delete  in_BRANCH_COMPLETE_BHT_HISTORY;
    92     if (_param._have_pht)
    93     delete  in_BRANCH_COMPLETE_PHT_HISTORY;
    94     delete  in_BRANCH_COMPLETE_DIRECTION  ;
    95     if (_param._have_bht)
    96       {
    97     delete signal_BRANCH_COMPLETE_BHT_ACK    ;
    98     delete signal_BRANCH_COMPLETE_BHT_ADDRESS;
    99       }
    100     if (_param._have_pht)
    101       {
    102     delete signal_BRANCH_COMPLETE_PHT_ACK    ;
    103     delete signal_BRANCH_COMPLETE_PHT_ADDRESS;
    104       }
     39    delete []  in_BRANCH_COMPLETE_PHT_HISTORY;
     40    delete []  in_BRANCH_COMPLETE_DIRECTION  ;
    10541
    10642    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     
    11147    delete component_Pattern_History_Table;
    11248    delete component_Two_Level_Branch_Predictor_Glue;
     49    delete _component;
    11350
    11451    log_printf(FUNC,Two_Level_Branch_Predictor,"deallocation","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_vhdl.cpp

    r3 r42  
    2121  {
    2222    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl","Begin");
    23     Vhdl vhdl (_name);
     23    Vhdl * vhdl = new Vhdl (_name);
    2424
    25     vhdl.set_library_work (_name + "_Pack");
     25    vhdl->set_library_work (_name + "_Pack");
    2626    if (_param._have_bht)
    27     vhdl.set_library_work (_name + "_Branch_History_Table_Pack");
     27    vhdl->set_library_work (_name + "_Branch_History_Table_Pack");
    2828    if (_param._have_pht)
    29     vhdl.set_library_work (_name + "_Pattern_History_Table_Pack");
    30     vhdl.set_library_work (_name + "_Two_Level_Branch_Predictor_Glue_Pack");
     29    vhdl->set_library_work (_name + "_Pattern_History_Table_Pack");
     30    vhdl->set_library_work (_name + "_Two_Level_Branch_Predictor_Glue_Pack");
    3131   
    3232    vhdl_port        (vhdl);
     
    3434    vhdl_body        (vhdl);
    3535
    36     vhdl.generate_file();
     36    vhdl->generate_file();
     37
     38    delete vhdl;
     39
    3740    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl","End");
    3841
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_vhdl_body.cpp

    r15 r42  
    1717
    1818
    19   void Two_Level_Branch_Predictor::vhdl_body (Vhdl & vhdl)
     19  void Two_Level_Branch_Predictor::vhdl_body (Vhdl * & vhdl)
    2020  {
    2121    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl_body","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_vhdl_declaration.cpp

    r3 r42  
    1717
    1818
    19   void Two_Level_Branch_Predictor::vhdl_declaration (Vhdl & vhdl)
     19  void Two_Level_Branch_Predictor::vhdl_declaration (Vhdl * & vhdl)
    2020  {
    2121    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl_declaration","Begin");
     
    2525        if (_param._have_bht)
    2626          {
    27         vhdl.set_signal  ("signal_PREDICT_BHT_ACK_"+toString(i), 1);
    28         vhdl.set_signal  ("signal_PREDICT_BHT_ADDRESS_"+toString(i), _param._bht_size_address);
    29         vhdl.set_signal  ("signal_PREDICT_BHT_HISTORY_"+toString(i), _param._bht_size_shifter);
     27        vhdl->set_signal  ("signal_PREDICT_BHT_ACK_"+toString(i), 1);
     28        vhdl->set_signal  ("signal_PREDICT_BHT_ADDRESS_"+toString(i), _param._bht_size_address);
     29        vhdl->set_signal  ("signal_PREDICT_BHT_HISTORY_"+toString(i), _param._bht_size_shifter);
    3030          }
    3131        if (_param._have_pht)
    3232          {
    33         vhdl.set_signal  ("signal_PREDICT_PHT_ACK_"+toString(i), 1);
    34         vhdl.set_signal  ("signal_PREDICT_PHT_ADDRESS_"+toString(i), _param._pht_size_address);
     33        vhdl->set_signal  ("signal_PREDICT_PHT_ACK_"+toString(i), 1);
     34        vhdl->set_signal  ("signal_PREDICT_PHT_ADDRESS_"+toString(i), _param._pht_size_address);
    3535          }
    3636      }
     
    4040        if (_param._have_bht)
    4141          {
    42         vhdl.set_signal  ("signal_BRANCH_COMPLETE_BHT_ACK_"+toString(i), 1);
    43         vhdl.set_signal  ("signal_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i), _param._bht_size_address);
     42        vhdl->set_signal  ("signal_BRANCH_COMPLETE_BHT_ACK_"+toString(i), 1);
     43        vhdl->set_signal  ("signal_BRANCH_COMPLETE_BHT_ADDRESS_"+toString(i), _param._bht_size_address);
    4444          }
    4545        if (_param._have_pht)
    4646          {
    47         vhdl.set_signal  ("signal_BRANCH_COMPLETE_PHT_ACK_"+toString(i), 1);
    48         vhdl.set_signal  ("signal_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i), _param._pht_size_address);
     47        vhdl->set_signal  ("signal_BRANCH_COMPLETE_PHT_ACK_"+toString(i), 1);
     48        vhdl->set_signal  ("signal_BRANCH_COMPLETE_PHT_ADDRESS_"+toString(i), _param._pht_size_address);
    4949          }
    5050      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_vhdl_port.cpp

    r15 r42  
    1616namespace two_level_branch_predictor {
    1717
    18   void Two_Level_Branch_Predictor::vhdl_port (Vhdl & vhdl)
     18  void Two_Level_Branch_Predictor::vhdl_port (Vhdl * & vhdl)
    1919  {
    2020    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl_port","Begin");
    2121
    22     vhdl.set_port (" in_CLOCK ", IN, 1);
    23     vhdl.set_port (" in_NRESET", IN, 1);
    24 
    25     for (uint32_t i=0; i<_param._nb_prediction; i++)
    26       {
    27         vhdl.set_port (" in_PREDICT_VAL_"+toString(i)+"                ", IN, 1);
    28         vhdl.set_port ("out_PREDICT_ACK_"+toString(i)+"                ",OUT, 1);
    29         vhdl.set_port (" in_PREDICT_ADDRESS_"+toString(i)+"            ", IN,_param._size_address);
    30         if (_param._have_bht)
    31         vhdl.set_port ("out_PREDICT_BHT_HISTORY_"+toString(i)+"        ",OUT,_param._bht_size_shifter);
    32         if (_param._have_pht)
    33         vhdl.set_port ("out_PREDICT_PHT_HISTORY_"+toString(i)+"        ",OUT,_param._pht_size_counter);
    34       }
    35 
    36     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    37       {
    38         vhdl.set_port (" in_BRANCH_COMPLETE_VAL_"+toString(i)+"        ", IN, 1);
    39         vhdl.set_port ("out_BRANCH_COMPLETE_ACK_"+toString(i)+"        ",OUT, 1);
    40         vhdl.set_port (" in_BRANCH_COMPLETE_ADDRESS_"+toString(i)+"    ", IN,_param._size_address);
    41         if (_param._have_bht)
    42         vhdl.set_port (" in_BRANCH_COMPLETE_BHT_HISTORY_"+toString(i)+"", IN,_param._bht_size_shifter);
    43         if (_param._have_pht)
    44         vhdl.set_port (" in_BRANCH_COMPLETE_PHT_HISTORY_"+toString(i)+"", IN,_param._pht_size_counter);
    45         vhdl.set_port (" in_BRANCH_COMPLETE_DIRECTION_"+toString(i)+"  ", IN, 1);
    46       }
     22    _interfaces->set_port(vhdl);
    4723
    4824    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl_port","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_vhdl_testbench_transition.cpp

    r15 r42  
    2121    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl_testbench_transition","Begin");
    2222
    23 #ifndef SYSTEMCASS_SPECIFIC
    24     sc_cycle(0);
    25 #endif   
     23    sc_start(0);
    2624
    27     _vhdl_testbench->add_input (PORT_READ( in_NRESET));
    28    
    29     // In order with file Two_Level_Branch_Predictor_vhdl_testbench_port.cpp
    30     // Warning : if a output depend of a subcomponent, take directly the port of subcomponent
    31     // (because we have no control on the ordonnancer's policy)
    32 
    33     for (uint32_t i=0; i<_param._nb_prediction; i++)
    34       {
    35         _vhdl_testbench->add_input (PORT_READ( in_PREDICT_VAL                          [i]));
    36         _vhdl_testbench->add_output(PORT_READ(component_Two_Level_Branch_Predictor_Glue->
    37                                               out_PREDICT_ACK                          [i]));
    38         _vhdl_testbench->add_input (PORT_READ( in_PREDICT_ADDRESS                      [i]));
    39         if (_param._have_bht)
    40         _vhdl_testbench->add_output(PORT_READ(component_Branch_History_Table           ->
    41                                               component_RegisterFile                   ->
    42                                               out_READ_DATA                            [i]));
    43         if (_param._have_pht)
    44         _vhdl_testbench->add_output(PORT_READ(component_Pattern_History_Table          ->
    45                                               component_RegisterFile                   ->
    46                                               out_READ_DATA                            [i]));
    47       }
    48 
    49     for (uint32_t i=0; i<_param._nb_branch_complete; i++)
    50       {
    51         _vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_VAL                  [i]));
    52         _vhdl_testbench->add_output(PORT_READ(component_Two_Level_Branch_Predictor_Glue->
    53                                               out_BRANCH_COMPLETE_ACK                  [i]));
    54         _vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_ADDRESS              [i]));
    55         if (_param._have_bht)
    56         _vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_BHT_HISTORY          [i]));
    57         if (_param._have_pht)
    58         _vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_PHT_HISTORY          [i]));
    59         _vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_DIRECTION            [i]));
    60       }
    61    
    62     // add_test :
    63     //  - True  : the cycle must be compare with the output of systemC
    64     //  - False : no test
    65     _vhdl_testbench->add_test(true);
    66 
    67     _vhdl_testbench->new_cycle (); // always at the end
     25    _interfaces->testbench();
    6826
    6927    log_printf(FUNC,Two_Level_Branch_Predictor,"vhdl_testbench_transition","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h

    r38 r42  
    1 #ifdef POSITION
    2 #ifndef morpheo_behavioural_Position_h
    3 #define morpheo_behavioural_Position_h
     1#ifndef morpheo_behavioural_Component_h
     2#define morpheo_behavioural_Component_h
    43
    54/*
     
    1312#include <iostream>
    1413#include <list>
     14#include <map>
     15#ifdef VHDL
     16#include "Behavioural/include/Vhdl.h"
     17#endif
     18//#include "Behavioural/include/Description.h"
    1519#include "Behavioural/include/Entity.h"
    1620#include "Include/ToString.h"
     
    2226namespace behavioural          {
    2327
    24   class Position
     28  class Component
    2529  {
    2630    // -----[ fields ]----------------------------------------------------
     
    2933   
    3034    // -----[ methods ]---------------------------------------------------
    31   public    :                       Position          (void);
    32   public    :                       Position          (const Position & position);
    33   public    :                       ~Position         ();
     35  public    :                       Component         (void);
     36  public    :                       Component         (const Component & component);
     37  public    :                       ~Component        ();
    3438
    35   public    : Entity *              set_entity        (string        name   ,
    36                                                        string        type   ,
    37                                                        schema_t      schema );
     39  public    : Entity *              set_entity        (string        name   
     40                                                       ,string        type 
     41#ifdef POSITION
     42                                                       ,schema_t      schema
     43#endif
     44                                                       );
    3845  private   : string                get_entity        (void);
    3946
    40   public    : void                  set_component     (Position * position,
    41                                                        uint32_t   pos_x  ,
    42                                                        uint32_t   pos_y  ,
    43                                                        uint32_t   size_x ,
    44                                                        uint32_t   size_y );
     47  public    : void                  set_component     (Component * component
     48#ifdef POSITION
     49                                                       ,uint32_t   pos_x 
     50                                                       ,uint32_t   pos_y 
     51                                                       ,uint32_t   size_x
     52                                                       ,uint32_t   size_y
     53#endif
     54                                                       );
    4555
    4656  private   : string                get_component     (void);
    47 
    48   public    : void                  port_map          (string component1,
    49                                                        string signal1   ,
    50                                                        string component2,
    51                                                        string signal2   );
    52 
    53   public    : XML                   toXML             (void);
    5457
    5558  private   : Entity *              find_entity       (string name);
     
    5760                                                       Entity * entity);
    5861
     62#ifdef VHDL
     63  public    : void                  vhdl_instance     (Vhdl * & vhdl);
     64#endif
     65
     66  public    : void                  port_map          (string component_src ,
     67                                                       string port_src      ,
     68                                                       string component_dest,
     69                                                       string port_dest    );
     70
     71#ifdef POSITION
     72  public    : void                  interface_map     (string component_src ,
     73                                                       string port_dest,
     74                                                       string component_dest,
     75                                                       string port_dest     );
     76
     77  public    : XML                   toXML             (void);
     78
    5979  public    : void                  generate_file     (void);
    60    
     80#endif   
    6181  public    : friend ostream&       operator<<        (ostream& output_stream,
    62                                                        morpheo::behavioural::Position & x);
     82                                                       morpheo::behavioural::Component & x);
    6383  };
    6484
     
    6787
    6888#endif
    69 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Direction.h

    r41 r42  
    77namespace behavioural          {
    88
    9 typedef enum { IN, OUT } direction_t;
    10   //typedef enum { IN, OUT, INOUT } direction_t;
     9typedef enum {INTERNAL, IN, OUT } direction_t;
     10//typedef enum { IN, OUT, INOUT } direction_t;
    1111
    1212}; // end namespace behavioural         
     
    1616    switch (x)
    1717      {
    18       case morpheo::behavioural::IN    : return "in"    ; break;
    19       case morpheo::behavioural::OUT   : return "out"   ; break;
    20 //    case morpheo::behavioural::INOUT : return "inout" ; break;
     18      case morpheo::behavioural::INTERNAL : return "internal" ; break;
     19      case morpheo::behavioural::IN       : return "in"       ; break;
     20      case morpheo::behavioural::OUT      : return "out"      ; break;
     21//    case morpheo::behavioural::INOUT    : return "inout"    ; break;
    2122      default    : return ""      ; break;
    2223      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h

    r38 r42  
    1 #ifdef POSITION
    21#ifndef morpheo_behavioural_Entity_h
    32#define morpheo_behavioural_Entity_h
     
    1312#include <iostream>
    1413#include <list>
     14//#include "Behavioural/include/Description.h"
    1515#include "Behavioural/include/Interfaces.h"
    1616#include "Behavioural/include/Schema.h"
     
    2626  class Entity
    2727  {
    28     friend class Position;
    29     friend class Interface;
    30 
    3128    // -----[ fields ]----------------------------------------------------
    3229  private   : const string          _name         ;
    3330  private   : const string          _type         ;
     31#ifdef POSITION
    3432  private   : const schema_t        _schema       ;
     33#endif
    3534  private   : Interfaces          * _interfaces   ;
     35
     36#ifdef POSITION
    3637  private   : string                _comment      ;
    3738
     
    4142  private   :       uint32_t        _map_pos_x    ;
    4243  private   :       uint32_t        _map_pos_y    ;
     44#endif
    4345
    4446    // -----[ methods ]---------------------------------------------------
    45   public    :                       Entity            (string        name   ,
    46                                                        string        type   ,
    47                                                        schema_t      schema );
     47  public    :                       Entity            ( string        name   
     48                                                       ,string        type   
     49#ifdef POSITION
     50                                                       ,schema_t      schema
     51#endif
     52                                                        );
    4853  public    :                        Entity           (const Entity & entity);
    4954  public    :                       ~Entity           ();
    5055
     56  public    : string                get_name          (void);
     57  public    : string                get_type          (void);
     58
     59#ifdef POSITION
    5160  public    : void                  set_comment       (string comment);
    5261  private   : string                get_comment       (void          );
    53 
     62#endif
    5463  public    : Interfaces *          set_interfaces    (void);
    5564  private   : string                get_interfaces    (void);
     65  public    : Interfaces *          get_interfaces_list(void);
    5666
    5767  public    : Interface  *          find_interface    (string name);
     68  public    : Signal     *          find_signal       (string name);
     69  public    : bool                  find_signal       (Signal * signal);
    5870
     71#ifdef POSITION
    5972  public    : void                  mapping           (uint32_t pos_x,
    6073                                                       uint32_t pos_y,
    6174                                                       uint32_t size_x ,
    6275                                                       uint32_t size_y );
     76#endif
    6377
     78#ifdef POSITION
    6479  public    : XML                   toXML             (void);
    6580  public    : XML                   toXML_mapping     (void);
    66 
     81#endif
    6782  public    : friend ostream&       operator<<        (ostream& output_stream,
    6883                                                       morpheo::behavioural::Entity & x);
     
    7388
    7489#endif
    75 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Environnement.h

    r40 r42  
    1010#  error "To have the vhdl's test bench, you must set flags VHDL"
    1111#endif
     12
     13#if (defined(VHDL_TESTBENCH_ASSERT) and not defined(VHDL_TESTBENCH))
     14#  error "To have an assert in vhdl's test bench, you must set flags VHDL_TESTBENCH"
     15#endif
     16
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h

    r41 r42  
    3333  class Interface
    3434  {
    35     friend class Interfaces;
    36 
    3735    // -----[ fields ]----------------------------------------------------
    3836  protected : const string          _name         ;
     37#ifdef POSITION
    3938  protected : const direction_t     _direction    ;
    4039  protected : const localisation_t  _localisation ;
    4140  protected :       string          _comment      ;
     41#endif
    4242
    4343  protected : list<Signal *>      * _list_signal  ;
     
    5454   
    5555    // -----[ methods ]---------------------------------------------------
    56   public    :                       Interface            (string         name        ,
    57                                                           direction_t    direction   ,
    58                                                           localisation_t localisation);
     56  public    :                       Interface            (string         name       
     57#ifdef POSITION
     58                                                          ,direction_t    direction   
     59                                                          ,localisation_t localisation
     60#endif
     61                                                          );
    5962
    6063  public    :                       Interface            (const Interface    & interface);
    6164  public    :                       ~Interface           ();
    6265
     66  public    : string                get_name             ();
     67
     68#ifdef POSITION
    6369  public    : void                  set_comment          (string comment);
    6470  protected : string                get_comment          (void          );
     71#endif
    6572
    6673  protected : string                signal_name          (string      name_interface,
    6774                                                          string      name_signal   ,
    6875                                                          direction_t direction     );
     76
     77  public    : Signal *              find_signal          (string name);
     78  public    : bool                  find_signal          (Signal * signal);
    6979
    7080  protected : string                get_signal           (void);
     
    7383                                                          uint32_t        size     ,
    7484                                                          presence_port_t presence_port = PORT_VHDL_YES_TESTBENCH_YES);
     85  public    : list<Signal *>      * get_signal_list      (void);
    7586
    7687#ifdef SYSTEMC
     
    8596        throw ErrorMorpheo ("Signal \""+name+"\" is a clock, bad presence_port.");
    8697
    87       Signal    * sig    = set_signal (name, IN , size, presence_port);
    88       sc_in_clk * signal = new sc_in_clk (sig->_name.c_str());
     98      Signal    * sig  = set_signal (name, IN , size, presence_port);
     99      sc_in_clk * port = new sc_in_clk (sig->_name.c_str());
     100
     101      sig->alloc<bool> (static_cast<void *>(port));
    89102
    90103      log_printf(FUNC,Behavioural,"set_signal_clk","End");
    91104
    92       return signal;
     105      return port;
    93106    };
    94107
     
    104117        throw ErrorMorpheo ("Signal \""+name+"\" is not a clock, bad presence_port.");
    105118
    106       Signal * sig = set_signal (name, IN , size, presence_port);
     119      Signal    * sig = set_signal (name, IN , size, presence_port);
    107120      sc_in <T> * port = new sc_in <T> (sig->_name.c_str());
    108 #ifdef VHDL_TESTBENCH
     121
    109122      sig->alloc<T> (static_cast<void *>(port));
    110 #endif
    111123
    112124      log_printf(FUNC,Behavioural,"set_signal_in","End");
     
    128140      Signal * sig = set_signal (name, OUT , size, presence_port);
    129141      sc_out <T> * port = new sc_out <T> (sig->_name.c_str());
    130 #ifdef VHDL_TESTBENCH
     142
    131143      sig->alloc<T> (static_cast<void *>(port));
    132 #endif
    133144
    134145      log_printf(FUNC,Behavioural,"set_signal_out","End");
     
    136147      return port;
    137148    };
     149
     150  public    : template <typename T>
     151              sc_signal <T> *       set_signal_internal (string   name,
     152                                                         uint32_t size)
     153    {
     154      log_printf(FUNC,Behavioural,"set_signal_internal","Begin");
     155
     156      Signal * sig = set_signal (name, INTERNAL , size, PORT_VHDL_NO_TESTBENCH_NO);
     157      sc_signal <T> * port = new sc_signal <T> (sig->_name.c_str());
     158
     159      sig->alloc<T> (static_cast<void *>(port));
     160
     161      log_printf(FUNC,Behavioural,"set_signal_internal","End");
     162
     163      return port;
     164    };
     165
    138166#endif
    139167
    140168#ifdef VHDL
    141169  public    : void                  set_port             (Vhdl * & vhdl);
    142 #ifdef VHDL_TESTBENCH
     170#  ifdef VHDL_TESTBENCH
    143171  public    : void                  set_signal           (Vhdl * & vhdl);
    144172  public    : void                  get_signal           (list<string> * & list_signal);
    145 #endif
     173#  endif
    146174#endif
    147175#ifdef VHDL_TESTBENCH
    148176  public    : uint32_t              get_cycle            (void);
    149   public    : string                get_clock            (void);
     177  public    : Signal *              get_clock            (void);
     178  public    : Signal *              get_reset            (void);
    150179
    151180  public    : void                  testbench            (void);
    152181  public    : void                  testbench_cycle      (void);
    153182  public    : void                  testbench_body       (Vhdl           * & vhdl          ,
    154                                                           string             counter_name  );
     183                                                          string             counter_name  ,
     184                                                          string             reset_name    );
    155185  public    : string                testbench_test       (Vhdl           * & vhdl        ,
    156                                                           string             counter_name);
     186                                                          string             counter_name,
     187                                                          string             reset_name);
    157188  public    : string                testbench_test_ok    (Vhdl           * & vhdl        );
    158189  protected : string                testbench_test_name   (Vhdl           * & vhdl);
    159190  protected : string                testbench_test_ok_name(Vhdl           * & vhdl);
    160 
    161 #endif
    162 
    163 #ifdef POSITION
    164   public    : void                  port_map             (void * entity,
     191  protected : string                testbench_test_transaction_name(Vhdl           * & vhdl);
     192#endif
     193
     194#ifdef POSITION
     195  public    : void                  interface_map        (void * entity,
    165196                                                          void * interface);
    166 #endif
    167 
    168197  public    : XML                   toXML                (void);
    169 #ifdef POSITION
    170198  public    : XML                   toXML_mapping        (void);
    171199#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h

    r41 r42  
    2424  private   : bool                  _test_exhaustive;
    2525  private   : list<uint32_t>      * _list_cycle   ;
    26 
    2726#endif
    2827
    2928   // -----[ methods ]---------------------------------------------------
    30   public    :                       Interface_fifo       (string         name        ,
    31                                                           direction_t    direction   ,
    32                                                           localisation_t localisation);
     29  public    :                       Interface_fifo       (string         name       
     30#ifdef POSITION
     31                                                          ,direction_t    direction   
     32                                                          ,localisation_t localisation
     33#endif
     34                                                          );
    3335   
    3436  public    :                       Interface_fifo       (const Interface_fifo & interface_fifo);
     
    7981  public    : bool                  testbench_transaction(void);
    8082  public    : void                  testbench_cycle      (void);
    81   public    : string                testbench_test       (Vhdl           * & vhdl        ,
    82                                                           string             counter_name);
     83  public    : string                testbench_test       (Vhdl   * & vhdl        ,
     84                                                          string     counter_name,
     85                                                          string     reset_name  );
     86
     87  public    : string                testbench_test_transaction (Vhdl * & vhdl);
    8388#endif
    8489  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h

    r41 r42  
    3535  public    :                       ~Interfaces           ();
    3636
    37   public    : Interface_fifo *      set_interface         (string         name        ,
    38                                                            direction_t    direction   ,
    39                                                            localisation_t localisation);
     37  public    : Interface_fifo *      set_interface         (string         name       
     38#ifdef POSITION
     39                                                           ,direction_t    direction   
     40                                                           ,localisation_t localisation
     41#endif
     42                                                           );
     43#ifdef POSITION
    4044  public    : Interface_fifo *      set_interface         (string         name        ,
    4145                                                           direction_t    direction   ,
    4246                                                           localisation_t localisation,
    4347                                                           string         comment     );
     48#endif
    4449  private   : string                get_interface         (void);
     50  public    :list<Interface_fifo*>* get_interface_list    (void);
    4551
    4652#ifdef VHDL
     
    5359#ifdef VHDL_TESTBENCH
    5460  private   : uint32_t              get_cycle             (void);
    55   private   : string                get_clock             (void);
     61  private   : Signal *              get_clock             (void);
     62  private   : Signal *              get_reset             (void);
    5663
    5764  private   : void                  testbench_generate_file (void);
    5865  public    : void                  testbench             (void);
    5966  private   : string                testbench_body        (Vhdl           * & vhdl          ,
    60                                                            string             counter_name  );
     67                                                           string             counter_name  ,
     68                                                           string             reset_name    );
    6169#endif
    6270
    6371  public    : Interface_fifo  *     find_interface        (string name);
     72  public    : Signal          *     find_signal           (string name);
     73  public    : bool                  find_signal           (Signal * signal);
    6474
     75#ifdef POSITION
    6576  public    : XML                   toXML                 (void);
    66 #ifdef POSITION
    6777  public    : XML                   toXML_mapping         (void);
    6878#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Localisation.h

    r31 r42  
     1#ifdef POSITION
    12#ifndef morpheo_behavioural_Localisation_h
    23#define morpheo_behavioural_Localisation_h
     
    2627
    2728#endif
     29#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h

    r41 r42  
    4444                PORT_VHDL_NO_TESTBENCH_NO  ,
    4545                CLOCK_VHDL_YES             ,
    46                 CLOCK_VHDL_NO              } presence_port_t;
     46                CLOCK_VHDL_NO              ,
     47                RESET_VHDL_YES             ,
     48                RESET_VHDL_NO              } presence_port_t;
    4749
    4850  class Signal
     
    5658  private   : const presence_port_t _presence_port;
    5759
     60  private   : Signal *              _signal       ;
     61  private   : bool                  _is_allocate  ;
     62  private   : void *                _sc_signal    ;
     63  private   : bool                  _is_map       ;
     64  private   : void *                _sc_signal_map;
     65  private   : type_info_t           _type_info    ;
     66
    5867#ifdef VHDL_TESTBENCH
    59   private   : void *                _signal       ;
    60   private   : type_info_t           _type_info    ;
    61 
    6268  private   : list<string>        * _list_value   ;
    6369#endif
     
    7177  public    :                   ~Signal         ();
    7278
    73 #ifdef VHDL_TESTBENCH
     79  public    : string            get_name        (void);
     80  public    : uint32_t          get_size        (void);
     81  public    : Signal *          get_signal_link (void);
     82
     83  public    : bool              presence_vhdl      (void);
     84  public    : bool              presence_testbench (void);
     85
     86  public    : void              mapping         (Signal * signal);
     87  public    : void              link            (Signal * signal);
     88
     89#ifdef SYSTEMC         
    7490  public    :template <typename T>
    7591             T                  read (void)
     
    88104      switch (_type_info)
    89105        {
    90         case BOOL     : return (static_cast<sc_in  <bool    > *>(_signal)->read());
    91         case UINT8_T  : return (static_cast<sc_in  <uint8_t > *>(_signal)->read());
    92         case UINT16_T : return (static_cast<sc_in  <uint16_t> *>(_signal)->read());
    93         case UINT32_T : return (static_cast<sc_in  <uint32_t> *>(_signal)->read());
    94         case UINT64_T : return (static_cast<sc_in  <uint64_t> *>(_signal)->read());
     106        case BOOL     : return (static_cast<sc_in  <bool    > *>(_sc_signal_map)->read());
     107        case UINT8_T  : return (static_cast<sc_in  <uint8_t > *>(_sc_signal_map)->read());
     108        case UINT16_T : return (static_cast<sc_in  <uint16_t> *>(_sc_signal_map)->read());
     109        case UINT32_T : return (static_cast<sc_in  <uint32_t> *>(_sc_signal_map)->read());
     110        case UINT64_T : return (static_cast<sc_in  <uint64_t> *>(_sc_signal_map)->read());
    95111        default       : throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow."));
    96112        }
     
    102118      switch (_type_info)
    103119        {
    104         case BOOL     : return (static_cast<sc_out <bool    > *>(_signal)->read());
    105         case UINT8_T  : return (static_cast<sc_out <uint8_t > *>(_signal)->read());
    106         case UINT16_T : return (static_cast<sc_out <uint16_t> *>(_signal)->read());
    107         case UINT32_T : return (static_cast<sc_out <uint32_t> *>(_signal)->read());
    108         case UINT64_T : return (static_cast<sc_out <uint64_t> *>(_signal)->read());
     120        case BOOL     : return (static_cast<sc_out <bool    > *>(_sc_signal_map)->read());
     121        case UINT8_T  : return (static_cast<sc_out <uint8_t > *>(_sc_signal_map)->read());
     122        case UINT16_T : return (static_cast<sc_out <uint16_t> *>(_sc_signal_map)->read());
     123        case UINT32_T : return (static_cast<sc_out <uint32_t> *>(_sc_signal_map)->read());
     124        case UINT64_T : return (static_cast<sc_out <uint64_t> *>(_sc_signal_map)->read());
    109125        default       : throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow."));
    110126        }
     
    117133        throw (ErrorMorpheo ("Signal \""+_name+"\" : already allocate."));
    118134
    119       _signal    = port;
     135      _is_allocate = true;
     136      _sc_signal      = port;
     137      _sc_signal_map  = port;
    120138
    121139      if (typeid(T) == typeid(bool    ))
     
    136154        _type_info = UNKNOW;
    137155    }
    138 
    139   public    : void              testbench        (void);
    140   public    : void              testbench_body   (Vhdl           * & vhdl          ,
    141                                                   string             counter_name  );
    142   public    : void              testbench_test_ok(Vhdl           * & vhdl          );
    143 #endif
     156#endif
     157
    144158#ifdef VHDL
    145159  public    : void              set_port        (Vhdl * & vhdl);
    146160#  ifdef VHDL_TESTBENCH
    147   public    : string            get_clock       (void);
     161  public    : Signal *          get_clock       (void);
     162  public    : Signal *          get_reset       (void);
     163  public    : uint32_t          get_reset_cycle (bool active_low);
     164
    148165  public    : void              set_signal      (Vhdl * & vhdl);
    149166  public    : void              get_name_vhdl   (list<string> * & list_signal);
     167
     168  public    : void              testbench        (void);
     169  public    : void              testbench_body   (Vhdl           * & vhdl          ,
     170                                                  string             counter_name  ,
     171                                                  string             reset_name    );
     172  public    : void              testbench_test_ok(Vhdl           * & vhdl          );
    150173#  endif
    151174#endif
     
    162185    switch (x)
    163186      {
    164       case morpheo::behavioural::PORT_VHDL_YES_TESTBENCH_YES : return "Port is in VHDL's model and TestBench's model" ; break;
    165       case morpheo::behavioural::PORT_VHDL_YES_TESTBENCH_NO  : return "Port is in VHDL's model                      " ; break;
    166       case morpheo::behavioural::PORT_VHDL_NO_TESTBENCH_YES  : return "Port is in                  TestBench's model" ; break;
    167       case morpheo::behavioural::PORT_VHDL_NO_TESTBENCH_NO   : return "Port is in none model                        " ; break;
     187      case morpheo::behavioural::PORT_VHDL_YES_TESTBENCH_YES : return "Port  is in VHDL's model and TestBench's model" ; break;
     188      case morpheo::behavioural::PORT_VHDL_YES_TESTBENCH_NO  : return "Port  is in VHDL's model                      " ; break;
     189      case morpheo::behavioural::PORT_VHDL_NO_TESTBENCH_YES  : return "Port  is in                  TestBench's model" ; break;
     190      case morpheo::behavioural::PORT_VHDL_NO_TESTBENCH_NO   : return "Port  is in none model                        " ; break;
     191      case morpheo::behavioural::CLOCK_VHDL_YES              : return "Clock is in VHDL's model                     " ; break;
     192      case morpheo::behavioural::CLOCK_VHDL_NO               : return "Clock is not in VHDL's model                 " ; break;
     193      case morpheo::behavioural::RESET_VHDL_YES              : return "Reset is in VHDL's model                     " ; break;
     194      case morpheo::behavioural::RESET_VHDL_NO               : return "Reset is not in VHDL's model                 " ; break;
    168195      default                                                : return "";                                               break;
    169196      }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/mkf.info

    r23 r42  
    2525#target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue/SelfTest
    2626#target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table/SelfTest
    27 #target_dep             all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
     27target_dep              all             Stage_1_Ifetch/Predictor/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table/SelfTest
    2828#target_dep             all             Stage_5_Execute/Execution_cluster/Execution_group/Execution_unit/SelfTest
    2929
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component.cpp

    r38 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   Position::Position  (void)
     13  Component::Component  (void)
    1514  {
    16     log_printf(FUNC,Behavioural,"Position","Begin");
     15    log_printf(FUNC,Behavioural,"Component","Begin");
    1716    _list_component = new list<Entity *>;
    18     log_printf(FUNC,Behavioural,"Position","End");
     17    log_printf(FUNC,Behavioural,"Component","End");
    1918  };
    2019
    21   Position::Position  (const Position & position)
     20  Component::Component  (const Component & component)
    2221  {
    23     log_printf(FUNC,Behavioural,"Position (copy)","Begin");
    24     _entity         = position._entity        ;
    25     _list_component = position._list_component;
    26     log_printf(FUNC,Behavioural,"Position (copy)","End");
     22    log_printf(FUNC,Behavioural,"Component (copy)","Begin");
     23    _entity         = component._entity        ;
     24    _list_component = component._list_component;
     25    log_printf(FUNC,Behavioural,"Component (copy)","End");
    2726  };
    2827 
    29   Position::~Position ()
     28  Component::~Component ()
    3029  {
    31     log_printf(FUNC,Behavioural,"~Position","Begin");
     30    log_printf(FUNC,Behavioural,"~Component","Begin");
    3231    delete _entity;
    33 
    34 //     if (_list_component->empty()== false)
    35 //       {
    36 //      list<Entity *>::iterator i = _list_component->begin();
    37 
    38 //      while (i != _list_component->end())
    39 //        {
    40 //          delete (*i);
    41 //          ++i;
    42 //        }
    43 //       }
    44 
    4532    delete _list_component;
    46     log_printf(FUNC,Behavioural,"~Position","End");
     33    log_printf(FUNC,Behavioural,"~Component","End");
    4734  };
    4835 
     
    5037}; // end namespace behavioural         
    5138}; // end namespace morpheo             
    52 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_find_entity.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   Entity * Position::find_entity (string name)
     13  Entity * Component::find_entity (string name)
    1514  {
    1615
    17     if (_entity->_name == name)
     16    if (_entity->get_name() == name)
    1817      return _entity;
    1918    else
     
    2423          while (i != _list_component->end())
    2524            {
    26               if ((*i)->_name == name)
     25              if ((*i)->get_name() == name)
    2726                {
    2827                  return  *i;
     
    3837}; // end namespace behavioural         
    3938}; // end namespace morpheo             
    40 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_generate_file.cpp

    r31 r42  
    77 */
    88
    9 #include "Behavioural/include/Position.h"
     9#include "Behavioural/include/Component.h"
    1010
    1111namespace morpheo              {
    1212namespace behavioural          {
    1313
    14   void Position::generate_file (void)
     14  void Component::generate_file (void)
    1515  {
    1616    try
     
    2525    catch (ErrorMorpheo e)
    2626      {
    27         throw (ErrorMorpheo ("Position \""+_entity->_name+"\" have a bad mapping : "+e.what()));
     27        throw (ErrorMorpheo ("Component \""+_entity->get_name()+"\" have a bad mapping : "+e.what()));
    2828      }
    2929  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_get_component.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   string Position::get_component (void)
     13  string Component::get_component (void)
    1514  {
    1615    uint32_t               depth          = 0;
     
    4948}; // end namespace behavioural         
    5049}; // end namespace morpheo             
    51 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_get_entity.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   string Position::get_entity (void)
     13  string Component::get_entity (void)
    1514  {
    1615    ostringstream text;
     
    2120}; // end namespace behavioural         
    2221}; // end namespace morpheo             
    23 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   void Position::port_map (string component1,
    15                            string signal1   ,
    16                            string component2,
    17                            string signal2   )
     13  void Component::port_map (string component_src ,
     14                            string port_src      ,
     15                            string component_dest,
     16                            string port_dest     )
    1817  {
    19     Entity * entity1 = find_entity(component1);
     18    string name_entity = _entity->get_name();
    2019
    21     if (entity1 == NULL)
    22       throw (ErrorMorpheo ("Position \""+_entity->_name+"\", port map with unknow component \""+component1+"\"."));
     20    // First entity
     21    Entity * entity_dest = find_entity(component_dest);
    2322
    24     bool is_top_level1 = _entity->_name == component1;
     23    if (entity_dest == NULL)
     24      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with unknow component \""+component_dest+"\"."));
    2525
    26     Interface * interface1 = find_interface (signal1, entity1);
     26    Signal * signal_dest = entity_dest->find_signal (port_dest);
    2727
    28     if (interface1 == NULL)
    29       throw (ErrorMorpheo ("Position \""+_entity->_name+"\", port map with component \""+component1+"\" and a unknow port \""+signal1+"\"."));
     28    if (signal_dest == NULL)
     29      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with component \""+component_dest+"\" and a unknow signal \""+port_dest+"\"."));
    3030
    31     Entity * entity2 = find_entity(component2);
     31    // Second entity
     32    Entity * entity_src = find_entity(component_src);
    3233
    33     if (entity2 == NULL)
    34       throw (ErrorMorpheo ("Position \""+_entity->_name+"\", port map with unknow component \""+component2+"\"."));
     34    if (entity_src == NULL)
     35      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with unknow component \""+component_src+"\"."));
    3536
    36     bool is_top_level2 = _entity->_name == component2;
     37    Signal * signal_src = entity_src->find_signal (port_src);
    3738
    38     Interface * interface2 = find_interface (signal2, entity2);
     39    if (signal_src == NULL)
     40      throw (ErrorMorpheo ("Component \""+name_entity+"\", port map with component \""+component_src+"\" and a unknow signal \""+port_src+"\"."));
    3941
    40     if (interface2 == NULL)
    41       throw (ErrorMorpheo ("Position \""+_entity->_name+"\", port map with component \""+component2+"\" and a unknow port \""+signal2+"\"."));
    42 
    43     // all is ok
    44     if (is_top_level1 == false)
    45       interface1->port_map(static_cast<void *>(entity2   ),
    46                            static_cast<void *>(interface2));
    47 
    48     if (is_top_level2 == false)
    49       interface2->port_map(static_cast<void *>(entity1   ),
    50                            static_cast<void *>(interface1));
    51    
     42    // If all is ok, mapping
     43    signal_src ->link   (signal_dest);
     44    signal_dest->mapping(signal_src );
    5245  };
    5346
    5447}; // end namespace behavioural         
    5548}; // end namespace morpheo             
    56 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_print.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110
     
    1413
    1514  ostream& operator<< (ostream& output_stream,
    16                        morpheo::behavioural::Position & x)
     15                       morpheo::behavioural::Component & x)
    1716  {
    1817    output_stream << x.get_entity    () << endl;
     
    2322}; // end namespace behavioural         
    2423}; // end namespace morpheo             
    25 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_component.cpp

    r38 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   void Position::set_component (Position * position,
    15                                 uint32_t   pos_x  ,
    16                                 uint32_t   pos_y  ,
    17                                 uint32_t   size_x ,
    18                                 uint32_t   size_y )
     13  void Component::set_component (Component * component
     14#ifdef POSITION
     15                                ,uint32_t   pos_x 
     16                                ,uint32_t   pos_y 
     17                                ,uint32_t   size_x
     18                                ,uint32_t   size_y
     19#endif
     20                                 )
    1921  {
    20     Entity * entity = position->_entity;
     22    Entity * entity = component->_entity;
    2123
    2224    _list_component->push_back(entity);
    2325
     26#ifdef POSITION
    2427    entity->mapping( pos_x, pos_y, size_x, size_y);
     28#endif
    2529  };
    2630
    2731}; // end namespace behavioural         
    2832}; // end namespace morpheo             
    29 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_entity.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    76 */
    87
    9 #include "Behavioural/include/Position.h"
     8#include "Behavioural/include/Component.h"
    109
    1110namespace morpheo              {
    1211namespace behavioural          {
    1312
    14   Entity * Position::set_entity (string        name   ,
    15                                         string        type   ,
    16                                         schema_t      schema )
     13  Entity * Component::set_entity (string        name   
     14                                  ,string        type   
     15#ifdef POSITION
     16                                  ,schema_t      schema
     17#endif
     18                                  )
    1719  {
    18     Entity * entity = new Entity (name   ,
    19                                   type   ,
    20                                   schema );
     20    Entity * entity = new Entity (name   
     21                                  ,type   
     22#ifdef POSITION
     23                                  ,schema
     24#endif
     25                                  );
    2126    _entity = entity;
    2227   
     
    2631}; // end namespace behavioural         
    2732}; // end namespace morpheo             
    28 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_toXML.cpp

    r31 r42  
    77 */
    88
    9 #include "Behavioural/include/Position.h"
     9#include "Behavioural/include/Component.h"
    1010
    1111namespace morpheo              {
    1212namespace behavioural          {
    1313
    14   XML Position::toXML (void)
     14  XML Component::toXML (void)
    1515  {
    16     XML xml (_entity->_name);
     16    XML xml (_entity->get_name());
    1717   
    1818    xml.balise_open         ("description");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity.cpp

    r41 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    1211namespace behavioural          {
    1312
    14   Entity::Entity  (string       name   ,
    15                    string       type   ,
    16                    schema_t     schema):
    17     _name       (name      ),
    18     _type       (type      ),
    19     _schema     (schema    )
     13  Entity::Entity  ( string       name   
     14                   ,string       type 
     15#ifdef POSITION
     16                   ,schema_t     schema
     17#endif
     18                    ):
     19     _name       (name      )
     20    ,_type       (type      )
     21#ifdef POSITION
     22    ,_schema     (schema    )
     23#endif
    2024  {
    2125    log_printf(FUNC,Behavioural,"Entity","Begin");
    2226    _interfaces = new Interfaces (name);
     27#ifdef POSITION
    2328    _is_map     = false;
     29#endif
    2430    log_printf(FUNC,Behavioural,"Entity","End");
    2531  };
    2632
    2733  Entity::Entity  (const Entity & entity):
    28     _name       (entity._name      ),
    29     _type       (entity._type      ),
    30     _schema     (entity._schema    )
     34     _name       (entity._name      )
     35    ,_type       (entity._type      )
     36#ifdef POSITION
     37    ,_schema     (entity._schema    )
     38#endif
    3139  {
    3240    log_printf(FUNC,Behavioural,"Entity (copy)","Begin");
     41    _interfaces = entity._interfaces;
     42#ifdef POSITION
    3343    _is_map     = entity._is_map    ;
    34     _interfaces = entity._interfaces;
    3544    _comment    = entity._comment   ;
     45#endif
    3646    log_printf(FUNC,Behavioural,"Entity (copy)","End");
    3747  };
     
    4353    log_printf(FUNC,Behavioural,"~Entity","End");
    4454  };
    45  
    4655
    4756}; // end namespace behavioural         
    4857}; // end namespace morpheo             
    49 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_find_interface.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    1918}; // end namespace behavioural         
    2019}; // end namespace morpheo             
    21 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_get_interfaces.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    2019  };
    2120
     21  Interfaces * Entity::get_interfaces_list (void)
     22  {
     23    return _interfaces;
     24  };
     25 
     26
    2227}; // end namespace behavioural         
    2328}; // end namespace morpheo             
    24 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_print.cpp

    r31 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    1615                       morpheo::behavioural::Entity & x)
    1716  {
     17#ifdef POSITION
    1818    output_stream << x._name + "\t"+x._type+"\t"+toString(x._schema) << endl;
    1919    output_stream << x.get_comment()    << endl;
     20#else
     21    output_stream << x._name + "\t"+x._type<< endl;
     22#endif
    2023    output_stream << x.get_interfaces() << endl;
    2124    return output_stream;
     
    2427}; // end namespace behavioural         
    2528}; // end namespace morpheo             
    26 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_set_interfaces.cpp

    r41 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    1918}; // end namespace behavioural         
    2019}; // end namespace morpheo             
    21 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface.cpp

    r41 r42  
    1111namespace behavioural          {
    1212
    13   Interface::Interface  (string                name         ,
    14                          direction_t           direction    ,
    15                          localisation_t        localisation ):
    16     _name         (name        ),
    17     _direction    (direction   ),
    18     _localisation (localisation)
     13  Interface::Interface  (string                name         
     14#ifdef POSITION
     15                         ,direction_t           direction   
     16                         ,localisation_t        localisation
     17#endif
     18                         ):
     19    _name         (name        )
     20#ifdef POSITION
     21    ,_direction    (direction   )
     22    ,_localisation (localisation)
     23#endif
    1924  {
    2025    log_printf(FUNC,Behavioural,"Interface","Begin");
    2126
    22     _comment       = "";
    2327    _list_signal   = new (list<Signal*>);
    2428
    2529#ifdef POSITION
     30    _comment       = "";
    2631    _is_map        = false;
    2732    _entity_map    = NULL;
     
    3742
    3843  Interface::Interface  (const Interface & interface):
    39     _name         (interface._name        ),
    40     _direction    (interface._direction   ),
    41     _localisation (interface._localisation)
     44    _name         (interface._name        )
     45#ifdef POSITION
     46    ,_direction    (interface._direction   )
     47    ,_localisation (interface._localisation)
     48#endif
    4249  {
    4350    log_printf(FUNC,Behavioural,"Interface (copy)","Begin");
    44     _comment       = interface._comment    ;
    4551    _list_signal   = interface._list_signal;
    4652#ifdef POSITION
     53    _comment       = interface._comment    ;
    4754    _is_map        = interface._is_map     ;
    4855    _entity_map    = interface._entity_map   ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo.cpp

    r41 r42  
    1111namespace behavioural          {
    1212
    13   Interface_fifo::Interface_fifo  (string         name        ,
    14                                    direction_t    direction   ,
    15                                    localisation_t localisation):
    16     Interface (name        ,
    17                direction   ,
    18                localisation)
     13  Interface_fifo::Interface_fifo  (string         name       
     14#ifdef POSITION
     15                                   ,direction_t    direction   
     16                                   ,localisation_t localisation
     17#endif
     18                                   ):
     19    Interface (name         
     20#ifdef POSITION
     21               ,direction   
     22               ,localisation
     23#endif
     24               )
    1925  {
    2026    log_printf(FUNC,Behavioural,"Interface_fifo","Begin");
     
    3238
    3339  Interface_fifo::Interface_fifo  (const Interface_fifo & interface_fifo) :
    34     Interface (interface_fifo._name        ,
    35                interface_fifo._direction   ,
    36                interface_fifo._localisation)
     40    Interface (interface_fifo._name         
     41#ifdef POSITION
     42               ,interface_fifo._direction   
     43               ,interface_fifo._localisation
     44#endif
     45               )
    3746  {
    3847    log_printf(FUNC,Behavioural,"Interface_fifo (copy)","Begin");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo_get_cycle.cpp

    r41 r42  
    1717    if (_test_exhaustive == true)
    1818      return Interface::get_cycle();
    19    
    20     return _list_cycle->back();
     19
     20    if (_list_cycle->empty() == true)
     21      return 0;
     22    else
     23      return _list_cycle->back();
    2124  };
    2225
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo_testbench_test.cpp

    r41 r42  
    1313
    1414  string Interface_fifo::testbench_test (Vhdl * & vhdl,
    15                                        string   counter_name)
     15                                         string   counter_name,
     16                                         string   reset_name  )
    1617  {
    1718    log_printf(FUNC,Behavioural,"testbench_test","Begin");
     
    1920   
    2021    if (_test_exhaustive == true)
    21       test_name = Interface::testbench_test(vhdl,counter_name);
     22      test_name = Interface::testbench_test(vhdl,counter_name,reset_name);
    2223    else
    2324      {
     
    2627        vhdl->set_body("");
    2728
    28         test_name    = testbench_test_name   (vhdl);
    29         string test_name_ok = testbench_test_ok     (vhdl);
     29               test_name        = testbench_test_name        (vhdl);
     30        string test_name_tmp    = test_name+"_tmp";
     31        string test_name_ok     = testbench_test_ok          (vhdl);
     32        string test_transaction = testbench_test_transaction (vhdl);
     33
     34        vhdl->set_signal(test_name_tmp,1);
    3035
    3136        if (_list_cycle->empty()== false)
    3237          {
    3338            vhdl->set_body ("with "+counter_name+" select");
    34             vhdl->set_body ("\t"+test_name+" <=");
     39            vhdl->set_body ("\t"+test_name_tmp+" <=");
    3540       
    3641            list<uint32_t>::iterator i = _list_cycle->begin();
     
    3843            while (i != _list_cycle->end())
    3944              {
    40                 vhdl->set_body ("\t"+test_name_ok+" when "+toString(*i)+",");
     45                vhdl->set_body ("\t"+test_transaction+" and "+test_name_ok+" when "+toString(*i)+",");
    4146                ++i;
    4247              }
    43             vhdl->set_body ("\t'1' when others;");
     48            vhdl->set_body ("\tnot "+test_transaction+" when others;");
    4449          }
     50        else
     51          vhdl->set_body (test_name_tmp+" <= not "+test_transaction+";");
     52       
     53        vhdl->set_body("");
     54        vhdl->set_body(test_name + " <= '1' when ("+reset_name+" = '0') else "+test_name_tmp+";");
     55
     56#ifdef VHDL_TESTBENCH_ASSERT
     57        if (_list_cycle->empty()== false)
     58          {
     59            vhdl->set_body("");
     60            vhdl->set_body("-- Assert ...");
     61            vhdl->set_body("");
     62
     63            uint32_t                 j = 0;
     64            list<uint32_t>::iterator i = _list_cycle->begin();
     65           
     66            while (i != _list_cycle->end())
     67              {
     68                vhdl->set_body("assert not ( ("+counter_name+" = "+toString(*i)+")) report \"***** <"+_name+"> interface's test number "+toString(j)+" *****\" severity NOTE;");
     69                j++;
     70                ++i;
     71              }
     72
     73            vhdl->set_body("");
     74          }
     75#endif
    4576      }
    4677
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo_testbench_transaction.cpp

    r40 r42  
     1#ifdef VHDL_TESTBENCH
    12/*
    23 * $Id$
     
    4849}; // end namespace behavioural         
    4950}; // end namespace morpheo             
     51#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_get_clock.cpp

    r41 r42  
    1313namespace behavioural          {
    1414
    15   string Interface::get_clock (void)
     15  Signal * Interface::get_clock (void)
    1616  {
    17     string clock = "";
     17    Signal * clock = NULL;
    1818   
    1919    if (not _list_signal->empty())
     
    2323        while (i != _list_signal->end())
    2424          {
    25             string str = (*i)->get_clock ();
     25            Signal * sig = (*i)->get_clock ();
    2626
    27             if (str != "")
     27            if (sig != NULL)
    2828              {
    29                 if (clock != "")
     29                if (clock != NULL)
    3030                  throw ErrorMorpheo ("<Interface.get_clock> : find too many clock.");
    31                 clock = str;
     31                clock = sig;
    3232              }
    3333            ++i;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_get_comment.cpp

    r38 r42  
     1#ifdef POSITION
    12/*
    23 * $Id$
     
    2223}; // end namespace behavioural         
    2324}; // end namespace morpheo             
     25#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_get_signal.cpp

    r41 r42  
    6969#endif
    7070
     71  list<Signal *> * Interface::get_signal_list (void)
     72    {
     73      return _list_signal;
     74    }
     75
    7176}; // end namespace behavioural         
    7277}; // end namespace morpheo             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_port_map.cpp

    r38 r42  
    1 #ifdef POSITION
    21/*
    32 * $Id$
     
    1312namespace behavioural          {
    1413
    15   void Interface::port_map (void * entity,
    16                             void * interface)
    17   {
    18     log_printf(FUNC,Behavioural,"port_map","Begin");
    19     _is_map        = true     ;
    20     _entity_map    = entity   ;
    21     _interface_map = interface;
    22     log_printf(FUNC,Behavioural,"port_map","End");
    23   };
     14//   void Interface::port_map (void * entity,
     15//                          void * interface)
     16//   {
     17//     log_printf(FUNC,Behavioural,"port_map","Begin");
     18// #ifdef POSITION
     19//     _is_map        = true     ;
     20//     _entity_map    = entity   ;
     21//     _interface_map = interface;
     22// #endif
     23//     log_printf(FUNC,Behavioural,"port_map","End");
     24//   };
    2425
    2526}; // end namespace behavioural         
    2627}; // end namespace morpheo             
    27 #endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_print.cpp

    r41 r42  
    1616  {
    1717    log_printf(FUNC,Behavioural,"operator<<","Begin");
     18#ifdef POSITION
    1819    output_stream << x._name + "\t"+toString(x._localisation)+"\t"+toString(x._direction) << endl;
    1920    output_stream << x.get_comment() << endl;
     21#else
     22    output_stream << x._name << endl;
     23#endif
    2024    output_stream << x.get_signal () << endl;
    2125
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_set_comment.cpp

    r38 r42  
     1#ifdef POSITION
    12/*
    23 * $Id$
     
    2122}; // end namespace behavioural         
    2223}; // end namespace morpheo             
     24#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_set_signal.cpp

    r41 r42  
    2020    string signame = signal_name(_name, name, direction);
    2121
    22     Signal * sig = new Signal (signame      ,
    23                                direction    ,
    24                                size         ,
    25                                presence_port);
     22    Signal * sig = new Signal       (signame, direction, size, presence_port);
    2623
    2724    _list_signal->push_back (sig);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_testbench_body.cpp

    r41 r42  
    1414
    1515  void Interface::testbench_body (Vhdl * & vhdl,
    16                                   string   counter_name)
     16                                  string   counter_name,
     17                                  string   reset_name  )
    1718  {
    1819    log_printf(FUNC,Behavioural,"testbench_body","Begin");
     
    2829        while (i != _list_signal->end())
    2930          {
    30             (*i)->testbench_body(vhdl, counter_name);
     31            (*i)->testbench_body(vhdl, counter_name, reset_name);
    3132            ++i;
    3233          }
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_testbench_test.cpp

    r41 r42  
    1414
    1515  string Interface::testbench_test (Vhdl * & vhdl,
    16                                     string   counter_name)
     16                                    string   counter_name,
     17                                    string   reset_name  )
    1718  {
    1819    log_printf(FUNC,Behavioural,"testbench_test","Begin");
     
    2526    string test_name_ok = testbench_test_ok     (vhdl);
    2627
    27     vhdl->set_body(test_name + " <= "+test_name_ok+";");
     28    vhdl->set_body(test_name + " <= '1' when ("+reset_name+" = '0') else "+test_name_ok+";");
    2829
    2930    log_printf(FUNC,Behavioural,"testbench_test","End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_testbench_test_name.cpp

    r41 r42  
    4949  };
    5050
     51  string Interface::testbench_test_transaction_name (Vhdl * & vhdl)
     52  {
     53    log_printf(FUNC,Behavioural,"testbench_test_transaction_name","Begin");
     54
     55    string name;
     56
     57    name = "interface_";
     58    if (_name != "")
     59      name += _name + "_";
     60    name += "test_transaction";
     61
     62    vhdl->set_signal(name,1);
     63   
     64    log_printf(FUNC,Behavioural,"testbench_test_transaction_name","End");
     65
     66    return name;
     67  };
     68
    5169}; // end namespace behavioural         
    5270}; // end namespace morpheo             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_testbench_test_ok.cpp

    r41 r42  
    2020
    2121    vhdl->set_body(test_name + " <= '1' when true");
     22
    2223    // set all condition
    2324    if (_list_signal->empty()== false)
     
    3132          }
    3233      }
    33     vhdl->set_body("else '0';");
     34    vhdl->set_body("\telse '0';");
    3435    vhdl->set_body("");
    3536
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_toXML.cpp

    r38 r42  
     1#ifdef POSITION
    12/*
    23 * $Id$
     
    4344  };
    4445
    45 #ifdef POSITION
    4646  XML Interface::toXML_mapping (void)
    4747  {
     
    5555    xml.singleton_begin ("port_map");
    5656    xml.  attribut      ("name"     ,_name               );
    57     xml.  attribut      ("component",(static_cast<Entity    *>(_entity_map   ))->_name);
    58     xml.  attribut      ("port"     ,(static_cast<Interface *>(_interface_map))->_name);
     57    xml.  attribut      ("component",(static_cast<Entity    *>(_entity_map   ))->get_name());
     58    xml.  attribut      ("port"     ,(static_cast<Interface *>(_interface_map))->get_name());
    5959    xml.singleton_end   ();
    6060
     
    6363    return xml;
    6464  };
    65 #endif
    6665}; // end namespace behavioural         
    6766}; // end namespace morpheo             
     67#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_find_interface.cpp

    r40 r42  
    1515    if (_list_interface->empty()== false)
    1616      {
    17         list<Interface_fifo*>::iterator i     = _list_interface->begin();
     17        list<Interface_fifo*>::iterator i = _list_interface->begin();
    1818
    1919        while (i != _list_interface->end())
    2020          {
    21             if ((*i)->_name == name)
     21            if ((*i)->get_name() == name)
    2222              return (*i);
    2323            ++i;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_get_clock.cpp

    r41 r42  
    1313namespace behavioural          {
    1414 
    15   string Interfaces::get_clock (void)
     15  Signal * Interfaces::get_clock (void)
    1616  {
    17     string clock = "";
     17    Signal * clock = NULL;
    1818   
    1919    if (not _list_interface->empty())
    2020      {
    21         list<Interface_fifo*>::iterator i     = _list_interface->begin();
     21        list<Interface_fifo*>::iterator i = _list_interface->begin();
    2222       
    2323        while (i != _list_interface->end())
    2424          {
    25             string str = (*i)->get_clock ();
     25            Signal * sig = (*i)->get_clock ();
    2626
    27             if (str != "")
     27            if (sig != NULL)
    2828              {
    29                 if (clock != "")
     29                if (clock != NULL)
    3030                  throw ErrorMorpheo ("<Interfaces.get_clock> : find too many clock.");
    31                 clock = str;
     31                clock = sig;
    3232              }
    3333            ++i;
     
    3535      }
    3636
    37     if (clock == "")
     37    if (clock == NULL)
    3838      throw ErrorMorpheo ("<Interfaces.get_clock> : no clock find.");
    3939   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_get_interface.cpp

    r40 r42  
    4747  };
    4848
     49  list<Interface_fifo*>* Interfaces::get_interface_list (void)
     50  {
     51    return _list_interface;
     52  };
     53
    4954}; // end namespace behavioural         
    5055}; // end namespace morpheo             
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_set_interface.cpp

    r40 r42  
    1111namespace behavioural          {
    1212
    13   Interface_fifo * Interfaces::set_interface (string         name        ,
    14                                          direction_t    direction   ,
    15                                          localisation_t localisation)
     13  Interface_fifo * Interfaces::set_interface (string         name       
     14#ifdef POSITION
     15                                              ,direction_t    direction   
     16                                              ,localisation_t localisation
     17#endif
     18                                              )
    1619  {
    17     Interface_fifo * interface = new Interface_fifo (name, direction, localisation);
     20    Interface_fifo * interface = new Interface_fifo (name
     21#ifdef POSITION
     22                                                     ,direction
     23                                                     ,localisation
     24#endif
     25                                                     );
    1826   
    1927    _list_interface->push_back (interface);
     
    2230  };
    2331
     32#ifdef POSITION
    2433  Interface_fifo * Interfaces::set_interface (string         name        ,
    2534                                         direction_t    direction   ,
     
    3342    return interface;
    3443  };
    35 
     44#endif
    3645
    3746}; // end namespace behavioural         
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_testbench_body.cpp

    r41 r42  
    1414
    1515  string Interfaces::testbench_body (Vhdl * & vhdl,
    16                                    string   counter_name)
     16                                     string   counter_name,
     17                                     string   reset_name  )
    1718  {
    1819    log_printf(FUNC,Behavioural,"testbench_body","Begin");
     
    2829        while (i != _list_interface->end())
    2930          {
    30             (*i)->testbench_body(vhdl, counter_name);
    31             string str = (*i)->testbench_test(vhdl, counter_name);
     31            (*i)->testbench_body(vhdl, counter_name, reset_name);
     32            string str = (*i)->testbench_test(vhdl, counter_name, reset_name);
    3233
    3334            test += " and "+str;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_testbench_generate_file.cpp

    r41 r42  
    1919    Vhdl   * vhdl        = new Vhdl(_name+"_Testbench");
    2020    string   counter     = "counter";
    21     string   clock       = this->get_clock();
     21    Signal * clock       = this->get_clock();
     22    Signal * reset       = this->get_reset();
     23    string   clock_name  = clock->get_name();
     24    string   reset_name  = reset->get_name();
    2225    uint32_t cycle       = this->get_cycle();
    2326
    24     vhdl      ->set_signal    (counter, "natural", "0");
    25     vhdl      ->set_signal    (clock  , 1        , 0); // modif Signal_set_signal
     27    vhdl->set_signal    (clock_name, 1, 0);
     28    vhdl->set_signal    (reset_name, 1, 0);
     29    vhdl->set_signal    (counter, "natural");
    2630    this->set_signal    (vhdl);
    2731
    2832    vhdl->set_body("");
    2933    vhdl->set_body("------------------------------------------------------");
    30     vhdl->set_body("-- Component");
     34    vhdl->set_body("-- Component - Intanciation");
    3135    vhdl->set_body("------------------------------------------------------");
    3236    vhdl->set_body("");
     
    5458    delete list_signal;
    5559
    56     vhdl->set_body("");
    57     vhdl->set_body("------------------------------------------------------");
    58     vhdl->set_body("-- Port's affectation");
    59     vhdl->set_body("------------------------------------------------------");
    60     vhdl->set_body("");
    61     string test_name = this->testbench_body(vhdl,counter);
     60    string test_name = this->testbench_body(vhdl,counter, reset_name);
    6261
    6362    vhdl->set_body("");
    6463    vhdl->set_body("------------------------------------------------------");
    65     vhdl->set_body("-- process clock");
     64    vhdl->set_body("-- reset");
    6665    vhdl->set_body("------------------------------------------------------");
    6766    vhdl->set_body("");
    68     vhdl->set_body(clock+" <= not "+clock+" after 50 ns;");
     67    vhdl->set_body("-- if the systemC simulate have multiple reset, we make the last");
     68    vhdl->set_body(reset_name+" <= '1' after 150 ns;");   
     69
    6970    vhdl->set_body("");
    70     vhdl->set_body("process ("+clock+")");
     71    vhdl->set_body("------------------------------------------------------");
     72    vhdl->set_body("-- process clock_name");
     73    vhdl->set_body("------------------------------------------------------");
     74    vhdl->set_body("");
     75    vhdl->set_body(clock_name+" <= not "+clock_name+" after 50 ns;");
     76    vhdl->set_body("");
     77    vhdl->set_body("process ("+clock_name+")");
    7178    vhdl->set_body("begin");
    72     vhdl->set_body("\tif "+clock+"'event and "+clock+" = '1' then");
    73     vhdl->set_body("\t\t"+counter+" <= "+counter+"+1;");
     79    vhdl->set_body("\tif ("+clock_name+"'event and "+clock_name+" = '1') then");
    7480    vhdl->set_body("");
    75     vhdl->set_body("\t\tassert     ("+test_name+" = '1') report \"Test KO\" severity FAILURE;");
    76     vhdl->set_body("\t\tassert not ("+counter+" = "+toString(cycle)+") report \"Test OK\" severity FAILURE;");
     81    vhdl->set_body("\t\tif ("+reset_name+" = '0') then");
    7782    vhdl->set_body("");
     83    vhdl->set_body("\t\t\t"+counter+" <= "+toString(reset->get_reset_cycle(true))+";");
     84    vhdl->set_body("");
     85    vhdl->set_body("\t\telse");
     86    vhdl->set_body("");
     87    vhdl->set_body("\t\t\t"+counter+" <= "+counter+"+1;");
     88    vhdl->set_body("");
     89    vhdl->set_body("\t\t\tassert not ("+counter+" = "+toString(cycle)+") report \"Test OK\" severity FAILURE;");
     90    vhdl->set_body("\t\t\tassert not ("+test_name+" = '0') report \"Test KO\" severity FAILURE;");
     91
     92#ifdef VHDL_TESTBENCH_ASSERT
     93    vhdl->set_body("\t\t\t-- Assert ...");
     94    for (uint32_t cpt=0; cpt<=cycle; cpt++)
     95      vhdl->set_body("\t\t\tassert not ("+counter+" = "+toString(cpt)+") report \"===== Test number "+toString(cpt)+" =====\" severity NOTE;");
     96#endif
     97
     98    vhdl->set_body("");
     99    vhdl->set_body("\t\tend if;");
    78100    vhdl->set_body("\tend if;");
    79101    vhdl->set_body("end process;");
    80102
    81     vhdl->generate_file();
     103
     104    vhdl->generate_file(false,true);
    82105
    83106    delete vhdl;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_toXML.cpp

    r40 r42  
     1#ifdef POSITION
    12/*
    23 * $Id$
     
    2930  };
    3031
    31 #ifdef POSITION
    3232  XML Interfaces::toXML_mapping (void)
    3333  {
     
    4747    return xml;
    4848  };
    49 #endif
    5049}; // end namespace behavioural         
    5150}; // end namespace morpheo             
     51#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp

    r40 r42  
    1818    _direction     (direction    ),
    1919    _size          (size         ),
    20     _presence_port (presence_port)
     20    _presence_port ((direction==INTERNAL)?PORT_VHDL_NO_TESTBENCH_NO:presence_port)
    2121  {
    2222    log_printf(FUNC,Behavioural,"Signal","Begin");
     23    _is_allocate   = false;
     24    _is_map        = false;
     25    _signal        = NULL;
     26    _sc_signal     = NULL;
     27    _sc_signal_map = NULL;
     28    _type_info     = UNKNOW;
    2329#ifdef VHDL_TESTBENCH
    24     _signal     = NULL;
    25     _type_info  = UNKNOW;
    26     _list_value = new list<string>;
     30    _list_value    = new list<string>;
    2731#endif
    2832    log_printf(FUNC,Behavioural,"Signal","End");
     
    3640  {
    3741    log_printf(FUNC,Behavioural,"Signal (copy)","Begin");
     42    _is_allocate= signal._is_allocate;
     43    _is_map     = signal._is_map    ;
     44    _sc_signal     = signal._sc_signal    ;
     45    _sc_signal_map = signal._sc_signal_map;
     46    _type_info  = signal._type_info ;
    3847#ifdef VHDL_TESTBENCH
    39     _signal     = signal._signal    ;
    40     _type_info  = signal._type_info ;
    4148    _list_value = signal._list_value;
    4249#endif
     
    4754  {
    4855    log_printf(FUNC,Behavioural,"~Signal","Begin");
     56
     57//     if (_is_allocate == true)
     58//       switch (_direction)
     59//      {
     60//      case IN :
     61//        {
     62//          switch (_type_info)
     63//            {
     64//            case BOOL     : {delete (static_cast<sc_in  <bool    > *>(_sc_signal)); break;}
     65//            case UINT8_T  : {delete (static_cast<sc_in  <uint8_t > *>(_sc_signal)); break;}
     66//            case UINT16_T : {delete (static_cast<sc_in  <uint16_t> *>(_sc_signal)); break;}
     67//            case UINT32_T : {delete (static_cast<sc_in  <uint32_t> *>(_sc_signal)); break;}
     68//            case UINT64_T : {delete (static_cast<sc_in  <uint64_t> *>(_sc_signal)); break;}
     69//            default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
     70//            }
     71//          break;
     72//        }
     73//      case OUT :
     74//        {
     75//          switch (_type_info)
     76//            {
     77//            case BOOL     : {delete (static_cast<sc_out <bool    > *>(_sc_signal)); break;}
     78//            case UINT8_T  : {delete (static_cast<sc_out <uint8_t > *>(_sc_signal)); break;}
     79//            case UINT16_T : {delete (static_cast<sc_out <uint16_t> *>(_sc_signal)); break;}
     80//            case UINT32_T : {delete (static_cast<sc_out <uint32_t> *>(_sc_signal)); break;}
     81//            case UINT64_T : {delete (static_cast<sc_out <uint64_t> *>(_sc_signal)); break;}
     82//            default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
     83//            }
     84//          break;
     85//        }
     86//      case INTERNAL :
     87//        {
     88//          switch (_type_info)
     89//            {
     90//            case BOOL     : {delete (static_cast<sc_sc_signal <bool    > *>(_sc_signal)); break;}
     91//            case UINT8_T  : {delete (static_cast<sc_sc_signal <uint8_t > *>(_sc_signal)); break;}
     92//            case UINT16_T : {delete (static_cast<sc_sc_signal <uint16_t> *>(_sc_signal)); break;}
     93//            case UINT32_T : {delete (static_cast<sc_sc_signal <uint32_t> *>(_sc_signal)); break;}
     94//            case UINT64_T : {delete (static_cast<sc_sc_signal <uint64_t> *>(_sc_signal)); break;}
     95//            default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : type unknow.")); break;}
     96//            }
     97//          break;
     98//        }
     99//      default       : {throw (ErrorMorpheo ("Signal \""+_name+"\" : direction unknow.")); break;}
     100//      }
     101
    49102#ifdef VHDL_TESTBENCH
    50103    delete _list_value;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_clock.cpp

    r41 r42  
    1313namespace behavioural          {
    1414
    15   string Signal::get_clock (void)
     15  Signal * Signal::get_clock (void)
    1616  {
    1717    if ((_presence_port == CLOCK_VHDL_YES) or
    1818        (_presence_port == CLOCK_VHDL_NO ))
    19       return _name;
     19      return this;
    2020    else
    21       return "";
     21      return NULL;
    2222  };
    2323
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_name_vhdl.cpp

    r41 r42  
    1 #ifdef VHDL_TESTBENCH
     1#  ifdef VHDL_TESTBENCH
    22/*
    33 * $Id$
     
    1717    if ((_presence_port == PORT_VHDL_YES_TESTBENCH_YES) or
    1818        (_presence_port == PORT_VHDL_YES_TESTBENCH_NO ) or
    19         (_presence_port == CLOCK_VHDL_YES))
     19        (_presence_port == CLOCK_VHDL_YES)              or
     20        (_presence_port == RESET_VHDL_YES))
    2021      list_signal->push_back(_name);
    2122  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_print.cpp

    r40 r42  
    2121                  << toString(x._presence_port);
    2222
    23 // #ifdef VHDL_TESTBENCH
    24 //     if (x._list_value->empty()== false)
    25 //       {
    26 //      list<string>::iterator i = x._list_value->begin();
    27 
    28 //      while (i != x._list_value->end())
    29 //        {
    30 //          output_stream << "\n\t" << *i ;
    31 //          ++i;
    32 //        }
    33 //       }
    34 // #endif
    35 
    3623    log_printf(FUNC,Behavioural,"operator<<","End");
    3724
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_set_port.cpp

    r41 r42  
    1919    if ((_presence_port == PORT_VHDL_YES_TESTBENCH_YES) or
    2020        (_presence_port == PORT_VHDL_YES_TESTBENCH_NO ) or
    21         (_presence_port == CLOCK_VHDL_YES))
     21        (_presence_port == CLOCK_VHDL_YES)              or
     22        (_presence_port == RESET_VHDL_YES))
    2223      vhdl->set_port (_name,_direction,_size);
    2324
     
    3031    log_printf(FUNC,Behavioural,"set_signal (Vhdl)","Begin");
    3132   
    32     if ((_presence_port == PORT_VHDL_YES_TESTBENCH_YES) or
    33         (_presence_port == PORT_VHDL_NO_TESTBENCH_YES )//  or
    34 //      (_presence_port == CLOCK_VHDL_YES) or
    35 //      (_presence_port == CLOCK_VHDL_NO )
     33    if (   (_presence_port == PORT_VHDL_YES_TESTBENCH_YES)
     34        or (_presence_port == PORT_VHDL_NO_TESTBENCH_YES )
     35//      or (_presence_port == CLOCK_VHDL_YES)
     36//      or (_presence_port == CLOCK_VHDL_NO )
     37//      or (_presence_port == RESET_VHDL_YES)
     38//      or (_presence_port == RESET_VHDL_NO )
    3639        )
    3740      vhdl->set_signal (_name        ,_size);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_testbench.cpp

    r41 r42  
    1818
    1919    if ((_presence_port == PORT_VHDL_YES_TESTBENCH_YES) or
    20         (_presence_port == PORT_VHDL_NO_TESTBENCH_YES ))
     20        (_presence_port == PORT_VHDL_NO_TESTBENCH_YES ) or
     21        (_presence_port == RESET_VHDL_YES             ) or
     22        (_presence_port == RESET_VHDL_NO              ) )
    2123      {
    2224        string str;
     
    3234                case IN    : {str =             toBase2 (value); break;}
    3335                case OUT   : {str =             toBase2 (value); break;}
    34 //              case INOUT : {break;}
     36                default    : {break;}
    3537                }
    3638              break;
     
    4446                case IN    : {str =             toBase2 (value,_size); break;}
    4547                case OUT   : {str =             toBase2 (value,_size); break;}
    46 //              case INOUT : {break;}
     48                default    : {break;}
    4749                }
    4850              break;
     
    5658                case IN    : {str =             toBase2 (value,_size); break;}
    5759                case OUT   : {str =             toBase2 (value,_size); break;}
    58 //              case INOUT : {break;}           
     60                default    : {break;}           
    5961                }
    6062              break;
     
    6870                case IN    : {str =             toBase2 (value,_size); break;}
    6971                case OUT   : {str =             toBase2 (value,_size); break;}
    70 //              case INOUT : {break;}
     72                default    : {break;}
    7173                }
    7274              break;
     
    8082                case IN    : {str =             toBase2 (value,_size); break;}
    8183                case OUT   : {str =             toBase2 (value,_size); break;}
    82 //              case INOUT : {break;}
     84                default    : {break;}
    8385                }
    8486              break;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_testbench_body.cpp

    r41 r42  
    1313
    1414  void Signal::testbench_body (Vhdl * & vhdl,
    15                                string   counter_name)
     15                               string   counter_name,
     16                               string   reset_name  )
    1617  {
    1718    log_printf(FUNC,Behavioural,"testbench_body","Begin");
    1819
    1920    // _list_value is empty if we don't trace
    20     if (_list_value->empty()== false)
    21       {
    22         string separator;
    23         if (_size == 1)
    24           separator = "\'";
    25         else
    26           separator = "\"";
    2721
    28         string signame = (_direction==OUT)?(_name+"_test"):_name;
    29 
    30         vhdl->set_body ("");
    31         vhdl->set_body ("with "+counter_name+" select");
    32         vhdl->set_body ("\t"+signame+" <=");
    33        
    34         uint32_t cpt = 0;
    35         list<string>::iterator i = _list_value->begin();
    36 
    37         while (i != _list_value->end())
    38           {
    39             list<string>::iterator j = i;
    40 
    41             ++i;
    42            
    43             if (i != _list_value->end())
     22    if ((_presence_port == PORT_VHDL_YES_TESTBENCH_YES) or
     23        (_presence_port == PORT_VHDL_NO_TESTBENCH_YES ))
     24      if (_list_value->empty()== false)
     25        {
     26          string separator;
     27          if (_size == 1)
     28            separator = "\'";
     29          else
     30            separator = "\"";
     31         
     32          string signame = (_direction==OUT)?(_name+"_test"):_name;
     33         
     34          vhdl->set_body ("");
     35          vhdl->set_body ("with "+counter_name+" select");
     36          vhdl->set_body ("\t"+signame+" <=");
     37         
     38          uint32_t cpt = 0;
     39          list<string>::iterator i = _list_value->begin();
     40         
     41          while (i != _list_value->end())
     42            {
     43              list<string>::iterator j = i;
     44             
     45              ++i;
     46             
    4447              vhdl->set_body ("\t"+separator+*j+separator+" when "+toString(cpt++)+",");
    45             else
    46               vhdl->set_body ("\t"+separator+*j+separator+" when others;");
    47           }
    48       }
    49 
     48            }
     49         
     50          if (_size == 1)
     51            vhdl->set_body ("\t'0' when others;");
     52          else
     53            vhdl->set_body ("\t(others => '0') when others;");
     54        }
     55 
    5056    log_printf(FUNC,Behavioural,"testbench_body","End");
    5157  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_testbench_test_ok.cpp

    r41 r42  
    1818
    1919    if (_direction == OUT)
    20       vhdl->set_body ("and "+_name+" = "+_name+"_test");
     20      vhdl->set_body ("\tand "+_name+" = "+_name+"_test");
    2121
    2222    log_printf(FUNC,Behavioural,"testbench_test_ok","End");
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/ppt-style.sty

    r41 r42  
    88\usepackage[french]{babel}
    99\usepackage{pgf,pgfarrows,pgfheaps,pgfnodes,pgfpages,pgfshade}
    10 
    1110\usepackage{openbib}
    1211\bibliographystyle{plain}
    1312
    14 \useoutertheme{infolines}
     13%\useoutertheme{infolines}
     14%\usetheme{Darmstadt}
     15%\usetheme{Malmoe}
     16%\usetheme{Copenhagen}
     17
     18%\usebackgroundtemplate{\includegraphics[height=\paperheight] {Include/background}}
    1519
    1620%% % file, Dimension
  • trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Makefile

    r23 r42  
    3030DIR_SCHEMA              = Schema
    3131DIR_SCHEMA_EPS          = Schema_eps
    32 DIR_SCHEMA_JPG          = Schema_jpg
     32DIR_SCHEMA_PNG          = Schema_png
    3333DIR_TEX                 = Source
    3434
     
    5858#--------------------------------------------------------------------------------
    5959.PHONY                  : all clean view help doc doc_all new delete
    60 .SECONDARY              : $(DVI_FILES) $(PS_FILES) $(PDF_FILES) $(EPS_FILES) $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_JPG)
     60.SECONDARY              : $(DVI_FILES) $(PS_FILES) $(PDF_FILES) $(EPS_FILES) $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)
    6161
    6262all                     : help
     
    365365                        @$(MKDIR) $@
    366366
    367 $(DIR_SCHEMA_JPG)       :
     367$(DIR_SCHEMA_PNG)       :
    368368                        @$(ECHO) "Make directory       : $@"
    369369                        @$(MKDIR) $@
     
    373373                        @$(MKDIR) $@
    374374
    375 $(DIR_SCHEMA_EPS)/%.eps : $(DIR_SCHEMA)/%.eps $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_JPG)
     375$(DIR_SCHEMA_EPS)/%.eps : $(DIR_SCHEMA)/%.eps $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)
    376376                        @$(ECHO) "Generate   files     : $*.eps"
    377377                        @$(CP) $(DIR_SCHEMA)/$*.eps $(DIR_SCHEMA_EPS)
    378                         @$(EPS2JPG) $@ $(DIR_SCHEMA_JPG)/$*.jpg
    379 
    380 $(DIR_SCHEMA_EPS)/%.eps : $(DIR_SCHEMA)/%.fig $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_JPG)
     378                        @$(EPS2PNG) $@ $(DIR_SCHEMA_PNG)/$*.png
     379
     380$(DIR_SCHEMA_EPS)/%.eps : $(DIR_SCHEMA)/%.fig $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)
    381381                        @$(ECHO) "Generate   files     : $*.eps"
    382382                        @$(FIG2EPS) $< $@
    383                         @$(EPS2JPG) $@ $(DIR_SCHEMA_JPG)/$*.jpg
    384 
    385 $(DIR_SCHEMA_EPS)/%.eps : $(DIR_GRAPH)/%.p    $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_JPG)
     383                        @$(EPS2PNG) $@ $(DIR_SCHEMA_PNG)/$*.png
     384
     385$(DIR_SCHEMA_EPS)/%.eps : $(DIR_GRAPH)/%.p    $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)
    386386                        @$(ECHO) "Generate   files     : $*.eps"
    387387                        @$(CD) $(DIR_GRAPH); $(GNUPLOT) $*.p
    388                         @$(EPS2JPG) $@ $(DIR_SCHEMA_JPG)/$*.jpg
     388                        @$(EPS2PNG) $@ $(DIR_SCHEMA_PNG)/$*.png
    389389
    390390#--------------------------------------------------------------------------------
     
    394394clean                   :
    395395                        @$(ECHO) "Delete     temporary files              "$(PWD)
    396                         @$(RM) $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_JPG)  $(DIR_TEX) $(DIR_PACKAGE)/*.aux
     396                        @$(RM) $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)  $(DIR_TEX) $(DIR_PACKAGE)/*.aux
    397397                        @$(RM) $(DVI_FILES) $(PS_FILES) $(PDF_FILES)
    398398                        @$(MAKE) clean_rec DIR_CLEAN=. 
Note: See TracChangeset for help on using the changeset viewer.