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

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

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

  • Property svn:keywords set to Id
File size: 2.6 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Comparator_genMealy.cpp 113 2009-04-14 18:39:12Z 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    Tcontrol_t test;
24    Tdata_t data_0 = PORT_READ(in_COMPARE_DATA_0);
25    Tdata_t data_1 = PORT_READ(in_COMPARE_DATA_1);
26   
27    if (_param->_is_signed)
28      {
29        int64_t data0 = static_cast<int64_t>(data_0);
30        int64_t data1 = static_cast<int64_t>(data_1);
31
32        data0 = ((data0 & _param->_mask_sign) != 0)?(_param->_extends|data0):(~_param->_extends & data0);
33        data1 = ((data1 & _param->_mask_sign) != 0)?(_param->_extends|data1):(~_param->_extends & data1);
34
35        switch (_param->_type)
36          {
37          case COMPARATOR_EQUAL            : test = (data0 == data1); break;
38          case COMPARATOR_NOT_EQUAL        : test = (data0 != data1); break;
39          case COMPARATOR_GREATER          : test = (data0 >  data1); break;
40          case COMPARATOR_GREATER_OR_EQUAL : test = (data0 >= data1); break;
41          case COMPARATOR_LESS             : test = (data0 <  data1); break;
42          case COMPARATOR_LESS_OR_EQUAL    : test = (data0 <= data1); break;
43          }
44      }
45    else
46      {
47        uint64_t data0 = ~_param->_extends & static_cast<uint64_t>(data_0);
48        uint64_t data1 = ~_param->_extends & static_cast<uint64_t>(data_1);
49
50        switch (_param->_type)
51          {
52          case COMPARATOR_EQUAL            : test = (data0 == data1); break;
53          case COMPARATOR_NOT_EQUAL        : test = (data0 != data1); break;
54          case COMPARATOR_GREATER          : test = (data0 >  data1); break;
55          case COMPARATOR_GREATER_OR_EQUAL : test = (data0 >= data1); break;
56          case COMPARATOR_LESS             : test = (data0 <  data1); break;
57          case COMPARATOR_LESS_OR_EQUAL    : test = (data0 <= data1); break;
58          }
59      }
60
61    log_printf(TRACE,Comparator,FUNCTION,"  * size_data : %d",_param->_size_data);
62    log_printf(TRACE,Comparator,FUNCTION,"  * extends   : %llx",_param->_extends  );
63
64
65    log_printf(TRACE,Comparator,FUNCTION,"  * %.x %s (%d) %x = %d"
66               ,data_0
67               ,toString(_param->_type).c_str()
68               ,_param->_is_signed
69               ,data_1
70               ,test);
71
72    PORT_WRITE(out_COMPARE_TEST,test);
73
74    log_end(Comparator,FUNCTION);
75  };
76
77}; // end namespace comparator
78}; // end namespace generic
79
80}; // end namespace behavioural
81}; // end namespace morpheo             
82#endif
Note: See TracBrowser for help on using the repository browser.