source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_genMealy_read_queue_out_val.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: 4.6 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Read_queue_genMealy_read_queue_out_val.cpp 123 2009-06-08 20:43:30Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_execute_loop {
15namespace execute_loop {
16namespace multi_read_unit {
17namespace read_unit {
18namespace read_queue {
19
20#undef  FUNCTION
21#define FUNCTION "Read_queue::genMealy_read_queue_out_val"
22  void Read_queue::genMealy_read_queue_out_val (void)
23  {
24    log_begin(Read_queue,FUNCTION);
25    log_function(Read_queue,FUNCTION,_name.c_str());
26
27    if (PORT_READ(in_NRESET))
28      {
29    internal_READ_QUEUE_OUT_READ_RA_VAL = (// Previous value
30                                           _queue_head->_read_ra_val  and
31                                           // Test if have already access at the registerfile
32                                           not PORT_READ(in_GPR_READ_ACK      [0])
33                                           );
34
35    internal_READ_QUEUE_OUT_READ_RB_VAL = (_queue_head->_read_rb_val  and
36                                           not PORT_READ(in_GPR_READ_ACK      [1])
37                                           );
38   
39    internal_READ_QUEUE_OUT_READ_RC_VAL = (_queue_head->_read_rc_val  and
40                                           not PORT_READ(in_SPR_READ_ACK      [0])
41                                           );
42
43    // Test all bypass
44    for (uint32_t i=0; i<_param->_nb_gpr_write ; i++)
45      {
46        bool cmp;
47
48        if (_param->_have_port_ooo_engine_id)
49          cmp = (PORT_READ (in_GPR_WRITE_OOO_ENGINE_ID [i]) == _queue_head->_ooo_engine_id);
50        else
51          cmp = true;
52       
53        // Test if this bypass is valid
54        if ((PORT_READ (in_GPR_WRITE_VAL           [i]) == 1) and cmp)
55          {
56            Tgeneral_address_t gpr_write_num_reg = PORT_READ(in_GPR_WRITE_NUM_REG [i]);
57           
58            if (_queue_head->_num_reg_ra == gpr_write_num_reg)
59              internal_READ_QUEUE_OUT_READ_RA_VAL = 0;
60
61            if (_queue_head->_num_reg_rb == gpr_write_num_reg)
62              internal_READ_QUEUE_OUT_READ_RB_VAL = 0;
63          }
64      }
65
66    for (uint32_t i=0; i<_param->_nb_spr_write ; i++)
67      {
68        bool cmp;
69
70        if (_param->_have_port_ooo_engine_id)
71          cmp = (PORT_READ (in_SPR_WRITE_OOO_ENGINE_ID [i]) == _queue_head->_ooo_engine_id);
72        else
73          cmp = true;
74       
75        // Test if this bypass is valid
76        if ((PORT_READ (in_SPR_WRITE_VAL           [i]) == 1) and cmp)
77          {
78            Tspecial_address_t spr_write_num_reg = PORT_READ(in_SPR_WRITE_NUM_REG [i]);
79           
80            if (_queue_head->_num_reg_rc == spr_write_num_reg)
81              internal_READ_QUEUE_OUT_READ_RC_VAL = 0;
82          }
83      }
84
85    // Affectation out port
86
87    // READ_QUEUE_OUT_VAL : mealy
88    internal_READ_QUEUE_OUT_VAL = (not _queue->empty()                     and
89                                   not internal_READ_QUEUE_OUT_READ_RA_VAL and
90                                   not internal_READ_QUEUE_OUT_READ_RB_VAL and
91                                   not internal_READ_QUEUE_OUT_READ_RC_VAL
92                                   );
93
94    // READ_QUEUE_OUT_VAL : moore
95//     internal_READ_QUEUE_OUT_VAL = (not _queue->empty()           and
96//                                 not _queue_head->_read_ra_val and
97//                                 not _queue_head->_read_rb_val and
98//                                 not _queue_head->_read_rc_val
99//                                 );
100
101
102    log_printf(TRACE,Read_queue,FUNCTION,"  * internal_READ_QUEUE_OUT_VAL           : %d",internal_READ_QUEUE_OUT_VAL);
103    log_printf(TRACE,Read_queue,FUNCTION,"    * _queue->empty()                     : %d",_queue->empty());
104    log_printf(TRACE,Read_queue,FUNCTION,"    * internal_READ_QUEUE_OUT_READ_RA_VAL : %d",internal_READ_QUEUE_OUT_READ_RA_VAL);
105    log_printf(TRACE,Read_queue,FUNCTION,"      * _queue_head->_read_ra_val         : %d",_queue_head->_read_ra_val);
106    log_printf(TRACE,Read_queue,FUNCTION,"      * in_GPR_READ_ACK      [0]          : %d",PORT_READ(in_GPR_READ_ACK      [0]));
107    log_printf(TRACE,Read_queue,FUNCTION,"    * internal_READ_QUEUE_OUT_READ_RB_VAL : %d",internal_READ_QUEUE_OUT_READ_RB_VAL);
108    log_printf(TRACE,Read_queue,FUNCTION,"      * _queue_head->_read_rb_val         : %d",_queue_head->_read_rb_val);
109    log_printf(TRACE,Read_queue,FUNCTION,"      * in_GPR_READ_ACK      [1]          : %d",PORT_READ(in_GPR_READ_ACK      [1]));
110    log_printf(TRACE,Read_queue,FUNCTION,"    * internal_READ_QUEUE_OUT_READ_RC_VAL : %d",internal_READ_QUEUE_OUT_READ_RC_VAL);
111    log_printf(TRACE,Read_queue,FUNCTION,"      * _queue_head->_read_rc_val         : %d",_queue_head->_read_rc_val);
112    log_printf(TRACE,Read_queue,FUNCTION,"      * in_SPR_READ_ACK      [0]          : %d",PORT_READ(in_SPR_READ_ACK      [0]));
113      }
114    else
115      {
116        internal_READ_QUEUE_OUT_VAL = 0;
117      }
118
119    PORT_WRITE(out_READ_QUEUE_OUT_VAL, internal_READ_QUEUE_OUT_VAL);
120
121    log_end(Read_queue,FUNCTION);
122  };
123
124}; // end namespace read_queue
125}; // end namespace read_unit
126}; // end namespace multi_read_unit
127}; // end namespace execute_loop
128}; // end namespace multi_execute_loop
129}; // end namespace core
130
131}; // end namespace behavioural
132}; // end namespace morpheo             
133#endif
Note: See TracBrowser for help on using the repository browser.