Ignore:
Timestamp:
Apr 14, 2009, 8:39:12 PM (15 years ago)
Author:
rosiere
Message:

1) Add modelsim simulation systemC
2) Modelsim cosimulation systemC / VHDL is not finish !!!! (cf execute_queue and write_unit)
3) Add multi architecture
5) Add template for comparator, multiplier and divider
6) Change Message
Warning) Various test macro have change, many selftest can't compile

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator
Files:
3 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/Makefile.defs

    r112 r113  
    77#
    88
     9ENTITY                          = Comparator
     10
    911#-----[ Directory ]----------------------------------------
    1012DIR_COMPONENT_MORPHEO           = ../../..
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/SelfTest/include/test.h

    r112 r113  
    1111#endif
    1212
    13 #define NB_ITERATION  1
     13#define NB_ITERATION  1024
    1414#define CYCLE_MAX     (1024*NB_ITERATION)
    1515
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/SelfTest/src/main.cpp

    r112 r113  
    1919  err (_(" * type      (Tcomparator_scheme_t)\n"));
    2020
    21 
    2221  exit (1);
    2322}
     
    3433  uint32_t x = 1;
    3534
     35  string name = argv[x++];
    3636  uint32_t             _size_data;
    3737  bool                 _is_signed;
     
    4141  SELFTEST0(_is_signed,bool                ,argv,x);
    4242  SELFTEST0(_type     ,Tcomparator_scheme_t,argv,x);
    43 
    44   string name = argv[x++];
    4543
    4644  int _return = EXIT_SUCCESS;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/SelfTest/src/test.cpp

    r112 r113  
    99#include "Behavioural/Generic/Comparator/SelfTest/include/test.h"
    1010#include "Behavioural/include/Allocation.h"
     11#include "Common/include/BitManipulation.h"
    1112
    1213void test (string name,
     
    5051  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
    5152  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
     53
     54  sc_signal<Tdata_t   > *  in_COMPARE_DATA_0;
     55  sc_signal<Tdata_t   > *  in_COMPARE_DATA_1;
     56  sc_signal<Tcontrol_t> * out_COMPARE_TEST  ;
     57
     58  ALLOC0_SC_SIGNAL( in_COMPARE_DATA_0," in_COMPARE_DATA_0",Tdata_t   );
     59  ALLOC0_SC_SIGNAL( in_COMPARE_DATA_1," in_COMPARE_DATA_1",Tdata_t   );
     60  ALLOC0_SC_SIGNAL(out_COMPARE_TEST  ,"out_COMPARE_TEST  ",Tcontrol_t);
    5261 
    5362  /********************************************************
     
    6069  (*(_Comparator->in_NRESET))       (*(in_NRESET));
    6170
    62 
     71  INSTANCE0_SC_SIGNAL(_Comparator, in_COMPARE_DATA_0);
     72  INSTANCE0_SC_SIGNAL(_Comparator, in_COMPARE_DATA_1);
     73  INSTANCE0_SC_SIGNAL(_Comparator,out_COMPARE_TEST  );
     74 
    6375  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
    6476   
     
    90102      LABEL("Iteration %d",iteration);
    91103
     104      uint64_t data0 = range<uint64_t>(rand(),_param->_size_data);
     105      uint64_t data1 = range<uint64_t>(rand(),_param->_size_data);
     106
     107      in_COMPARE_DATA_0->write(static_cast<Tdata_t>(data0));
     108      in_COMPARE_DATA_1->write(static_cast<Tdata_t>(data1));
     109     
     110      SC_START(0);
     111     
     112      Tcontrol_t test = false;
     113      switch (_param->_size_data)
     114        {
     115        case 8 :
     116          {
     117            if (_param->_is_signed)
     118              switch (_param->_type)
     119                {
     120                case COMPARATOR_EQUAL            : test = static_cast< int8_t>(data0) == static_cast< int8_t>(data1); break;
     121                case COMPARATOR_NOT_EQUAL        : test = static_cast< int8_t>(data0) != static_cast< int8_t>(data1); break;
     122                case COMPARATOR_GREATER          : test = static_cast< int8_t>(data0) >  static_cast< int8_t>(data1); break;
     123                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast< int8_t>(data0) >= static_cast< int8_t>(data1); break;
     124                case COMPARATOR_LESS             : test = static_cast< int8_t>(data0) <  static_cast< int8_t>(data1); break;
     125                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast< int8_t>(data0) <= static_cast< int8_t>(data1); break;
     126                }
     127            else
     128              switch (_param->_type)
     129                {
     130                case COMPARATOR_EQUAL            : test = static_cast<uint8_t>(data0) == static_cast<uint8_t>(data1); break;
     131                case COMPARATOR_NOT_EQUAL        : test = static_cast<uint8_t>(data0) != static_cast<uint8_t>(data1); break;
     132                case COMPARATOR_GREATER          : test = static_cast<uint8_t>(data0) >  static_cast<uint8_t>(data1); break;
     133                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast<uint8_t>(data0) >= static_cast<uint8_t>(data1); break;
     134                case COMPARATOR_LESS             : test = static_cast<uint8_t>(data0) <  static_cast<uint8_t>(data1); break;
     135                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast<uint8_t>(data0) <= static_cast<uint8_t>(data1); break;
     136                }
     137            break;
     138          }
     139        case 16 :
     140          {
     141            if (_param->_is_signed)
     142              switch (_param->_type)
     143                {
     144                case COMPARATOR_EQUAL            : test = static_cast< int16_t>(data0) == static_cast< int16_t>(data1); break;
     145                case COMPARATOR_NOT_EQUAL        : test = static_cast< int16_t>(data0) != static_cast< int16_t>(data1); break;
     146                case COMPARATOR_GREATER          : test = static_cast< int16_t>(data0) >  static_cast< int16_t>(data1); break;
     147                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast< int16_t>(data0) >= static_cast< int16_t>(data1); break;
     148                case COMPARATOR_LESS             : test = static_cast< int16_t>(data0) <  static_cast< int16_t>(data1); break;
     149                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast< int16_t>(data0) <= static_cast< int16_t>(data1); break;
     150                }
     151            else
     152              switch (_param->_type)
     153                {
     154                case COMPARATOR_EQUAL            : test = static_cast<uint16_t>(data0) == static_cast<uint16_t>(data1); break;
     155                case COMPARATOR_NOT_EQUAL        : test = static_cast<uint16_t>(data0) != static_cast<uint16_t>(data1); break;
     156                case COMPARATOR_GREATER          : test = static_cast<uint16_t>(data0) >  static_cast<uint16_t>(data1); break;
     157                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast<uint16_t>(data0) >= static_cast<uint16_t>(data1); break;
     158                case COMPARATOR_LESS             : test = static_cast<uint16_t>(data0) <  static_cast<uint16_t>(data1); break;
     159                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast<uint16_t>(data0) <= static_cast<uint16_t>(data1); break;
     160                }
     161            break;
     162          }
     163        case 32 :
     164          {
     165            if (_param->_is_signed)
     166              switch (_param->_type)
     167                {
     168                case COMPARATOR_EQUAL            : test = static_cast< int32_t>(data0) == static_cast< int32_t>(data1); break;
     169                case COMPARATOR_NOT_EQUAL        : test = static_cast< int32_t>(data0) != static_cast< int32_t>(data1); break;
     170                case COMPARATOR_GREATER          : test = static_cast< int32_t>(data0) >  static_cast< int32_t>(data1); break;
     171                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast< int32_t>(data0) >= static_cast< int32_t>(data1); break;
     172                case COMPARATOR_LESS             : test = static_cast< int32_t>(data0) <  static_cast< int32_t>(data1); break;
     173                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast< int32_t>(data0) <= static_cast< int32_t>(data1); break;
     174                }
     175            else
     176              switch (_param->_type)
     177                {
     178                case COMPARATOR_EQUAL            : test = static_cast<uint32_t>(data0) == static_cast<uint32_t>(data1); break;
     179                case COMPARATOR_NOT_EQUAL        : test = static_cast<uint32_t>(data0) != static_cast<uint32_t>(data1); break;
     180                case COMPARATOR_GREATER          : test = static_cast<uint32_t>(data0) >  static_cast<uint32_t>(data1); break;
     181                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast<uint32_t>(data0) >= static_cast<uint32_t>(data1); break;
     182                case COMPARATOR_LESS             : test = static_cast<uint32_t>(data0) <  static_cast<uint32_t>(data1); break;
     183                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast<uint32_t>(data0) <= static_cast<uint32_t>(data1); break;
     184                }
     185            break;
     186          }
     187        case 64 :
     188          {
     189            if (_param->_is_signed)
     190              switch (_param->_type)
     191                {
     192                case COMPARATOR_EQUAL            : test = static_cast< int64_t>(data0) == static_cast< int64_t>(data1); break;
     193                case COMPARATOR_NOT_EQUAL        : test = static_cast< int64_t>(data0) != static_cast< int64_t>(data1); break;
     194                case COMPARATOR_GREATER          : test = static_cast< int64_t>(data0) >  static_cast< int64_t>(data1); break;
     195                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast< int64_t>(data0) >= static_cast< int64_t>(data1); break;
     196                case COMPARATOR_LESS             : test = static_cast< int64_t>(data0) <  static_cast< int64_t>(data1); break;
     197                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast< int64_t>(data0) <= static_cast< int64_t>(data1); break;
     198                }
     199            else
     200              switch (_param->_type)
     201                {
     202                case COMPARATOR_EQUAL            : test = static_cast<uint64_t>(data0) == static_cast<uint64_t>(data1); break;
     203                case COMPARATOR_NOT_EQUAL        : test = static_cast<uint64_t>(data0) != static_cast<uint64_t>(data1); break;
     204                case COMPARATOR_GREATER          : test = static_cast<uint64_t>(data0) >  static_cast<uint64_t>(data1); break;
     205                case COMPARATOR_GREATER_OR_EQUAL : test = static_cast<uint64_t>(data0) >= static_cast<uint64_t>(data1); break;
     206                case COMPARATOR_LESS             : test = static_cast<uint64_t>(data0) <  static_cast<uint64_t>(data1); break;
     207                case COMPARATOR_LESS_OR_EQUAL    : test = static_cast<uint64_t>(data0) <= static_cast<uint64_t>(data1); break;
     208                }
     209            break;
     210          }
     211        default :
     212          {
     213            TEST_KO("Invalid size for the test.");
     214          }
     215        }
     216
     217      TEST(Tcontrol_t,out_COMPARE_TEST->read(),test);
     218
    92219      SC_START(1);
    93220    }
     
    104231  delete in_CLOCK;
    105232  delete in_NRESET;
     233  DELETE0_SC_SIGNAL( in_COMPARE_DATA_0);
     234  DELETE0_SC_SIGNAL( in_COMPARE_DATA_1);
     235  DELETE0_SC_SIGNAL(out_COMPARE_TEST  );
    106236    }
    107237#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/include/Comparator.h

    r112 r113  
    6464  public    : SC_IN (Tdata_t   )            *  in_COMPARE_DATA_0;
    6565  public    : SC_IN (Tdata_t   )            *  in_COMPARE_DATA_1;
    66   public    : SC_OUT(Tcontrol_t)            *  in_COMPARE_TEST  ;
    67    
     66  public    : SC_OUT(Tcontrol_t)            * out_COMPARE_TEST  ;
    6867
    6968    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     
    105104#ifdef SYSTEMC                                 
    106105  public  : void        transition                (void);
    107 //public  : void        genMoore                  (void);
     106  public  : void        genMealy                  (void);
    108107#endif                                         
    109108
     
    112111  private : void        vhdl_declaration          (Vhdl * & vhdl);
    113112  private : void        vhdl_body                 (Vhdl * & vhdl);
     113
     114  private : void        vhdl_xilinx_declaration   (Vhdl * & vhdl);
     115  private : void        vhdl_xilinx_body          (Vhdl * & vhdl);
    114116#endif                                         
    115117
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/include/Parameters.h

    r112 r113  
    2626  public : Tcomparator_scheme_t _type;
    2727
     28  public : int64_t              _extends;
     29  public : int64_t              _mask_sign;
     30
    2831    //-----[ methods ]-----------------------------------------------------------
    2932  public : Parameters  (uint32_t             size_data,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Comparator.cpp

    r112 r113  
    7777# endif   
    7878
    79 //      log_printf(INFO,Comparator,FUNCTION,_("<%s> : Method - genMoore"),_name.c_str());
     79        log_printf(INFO,Comparator,FUNCTION,_("<%s> : Method - genMealy"),_name.c_str());
    8080
    81 //      SC_METHOD (genMoore);
    82 //      dont_initialize ();
    83 //      sensitive << (*(in_CLOCK)).neg(); // need internal register
     81        SC_METHOD (genMealy);
     82        dont_initialize ();
     83//      sensitive << (*(in_CLOCK)).neg(); // don't need internal register
     84        sensitive << (*(in_COMPARE_DATA_0))
     85                  << (*(in_COMPARE_DATA_1));
    8486       
    85 // # ifdef SYSTEMCASS_SPECIFIC
    86 //      // List dependency information
    87 // # endif   
     87# ifdef SYSTEMCASS_SPECIFIC
     88        // List dependency information
     89# endif   
    8890       
    8991#endif
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Comparator_allocation.cpp

    r112 r113  
    5353      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
    5454    }
     55
     56    // ~~~~~[ Interface : "compare" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     57    {
     58      ALLOC0_INTERFACE_BEGIN("compare",IN,SOUTH,_("Compare interface"));
     59
     60      ALLOC0_SIGNAL_IN ( in_COMPARE_DATA_0,"DATA_0",Tdata_t   ,_param->_size_data);
     61      ALLOC0_SIGNAL_IN ( in_COMPARE_DATA_1,"DATA_1",Tdata_t   ,_param->_size_data);
     62      ALLOC0_SIGNAL_OUT(out_COMPARE_TEST  ,"TEST"  ,Tcontrol_t,1);
     63
     64      ALLOC0_INTERFACE_END();
     65    }
     66
    5567    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    5668
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Comparator_deallocation.cpp

    r112 r113  
    2525        delete    in_CLOCK ;
    2626        delete    in_NRESET;
     27
     28        DELETE0_SIGNAL( in_COMPARE_DATA_0,_param->_size_data);
     29        DELETE0_SIGNAL( in_COMPARE_DATA_1,_param->_size_data);
     30        DELETE0_SIGNAL(out_COMPARE_TEST  ,1);
    2731      }
    2832    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Comparator_vhdl.cpp

    r112 r113  
    2727    _component->vhdl_instance(vhdl);
    2828
     29    // default architecture
    2930    vhdl_declaration (vhdl);
    3031    vhdl_body        (vhdl);
     32
     33    // Xilinx architecture
     34    vhdl->set_architecture("xilinx");
     35    vhdl_xilinx_declaration (vhdl);
     36    vhdl_xilinx_body        (vhdl);
    3137
    3238    vhdl->generate_file();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Parameters.cpp

    r112 r113  
    77
    88#include "Behavioural/Generic/Comparator/include/Parameters.h"
     9#include "Common/include/BitManipulation.h"
    910
    1011namespace morpheo {
     
    1213namespace generic {
    1314namespace comparator {
    14 
    1515
    1616#undef  FUNCTION
     
    2828
    2929    test();
     30
     31    _extends   = gen_mask_not<int64_t>(_size_data);
     32    _mask_sign = (1<<(_size_data-1));
    3033
    3134    if (is_toplevel)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Parameters_msg_error.cpp

    r112 r113  
    2424    Parameters_test test ("Comparator");
    2525
     26    if (_size_data > 64)
     27      test.error(_("Max size is 64 bits.\n"));
     28
    2629    log_end(Comparator,FUNCTION);
    2730
Note: See TracChangeset for help on using the changeset viewer.