source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Comparator/src/Comparator_genMealy.cpp @ 123

Last change on this file since 123 was 123, checked in by rosiere, 15 years ago

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

  • Property svn:keywords set to Id
File size: 2.7 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Comparator_genMealy.cpp 123 2009-06-08 20:43:30Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Generic/Comparator/include/Comparator.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace generic {
14namespace comparator {
15
16
17#undef  FUNCTION
18#define FUNCTION "Comparator::genMealy"
19  void Comparator::genMealy (void)
20  {
21    log_begin(Comparator,FUNCTION);
22
23    if (PORT_READ(in_NRESET))
24      {
25    Tcontrol_t test;
26    Tdata_t data_0 = PORT_READ(in_COMPARE_DATA_0);
27    Tdata_t data_1 = PORT_READ(in_COMPARE_DATA_1);
28   
29    if (_param->_is_signed)
30      {
31        int64_t data0 = static_cast<int64_t>(data_0);
32        int64_t data1 = static_cast<int64_t>(data_1);
33
34        data0 = ((data0 & _param->_mask_sign) != 0)?(_param->_extends|data0):(~_param->_extends & data0);
35        data1 = ((data1 & _param->_mask_sign) != 0)?(_param->_extends|data1):(~_param->_extends & data1);
36
37        switch (_param->_type)
38          {
39          case COMPARATOR_EQUAL            : test = (data0 == data1); break;
40          case COMPARATOR_NOT_EQUAL        : test = (data0 != data1); break;
41          case COMPARATOR_GREATER          : test = (data0 >  data1); break;
42          case COMPARATOR_GREATER_OR_EQUAL : test = (data0 >= data1); break;
43          case COMPARATOR_LESS             : test = (data0 <  data1); break;
44          case COMPARATOR_LESS_OR_EQUAL    : test = (data0 <= data1); break;
45          }
46      }
47    else
48      {
49        uint64_t data0 = ~_param->_extends & static_cast<uint64_t>(data_0);
50        uint64_t data1 = ~_param->_extends & static_cast<uint64_t>(data_1);
51
52        switch (_param->_type)
53          {
54          case COMPARATOR_EQUAL            : test = (data0 == data1); break;
55          case COMPARATOR_NOT_EQUAL        : test = (data0 != data1); break;
56          case COMPARATOR_GREATER          : test = (data0 >  data1); break;
57          case COMPARATOR_GREATER_OR_EQUAL : test = (data0 >= data1); break;
58          case COMPARATOR_LESS             : test = (data0 <  data1); break;
59          case COMPARATOR_LESS_OR_EQUAL    : test = (data0 <= data1); break;
60          }
61      }
62
63    log_printf(TRACE,Comparator,FUNCTION,"  * size_data : %d",_param->_size_data);
64    log_printf(TRACE,Comparator,FUNCTION,"  * extends   : %llx",_param->_extends  );
65
66
67    log_printf(TRACE,Comparator,FUNCTION,"  * %.x %s (%d) %x = %d"
68               ,data_0
69               ,toString(_param->_type).c_str()
70               ,_param->_is_signed
71               ,data_1
72               ,test);
73
74    PORT_WRITE(out_COMPARE_TEST,test);
75      }
76
77    log_end(Comparator,FUNCTION);
78  };
79
80}; // end namespace comparator
81}; // end namespace generic
82
83}; // end namespace behavioural
84}; // end namespace morpheo             
85#endif
Note: See TracBrowser for help on using the repository browser.