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

Modification des classes d'encapsulation des interfaces :

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

-> test sur la Pattern History Table

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic
Files:
1 added
4 deleted
41 edited

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
Note: See TracChangeset for help on using the changeset viewer.