source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Issue_queue_genMoore.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 3.7 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Issue_queue_genMoore.cpp 88 2008-12-10 18:31:39Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/include/Issue_queue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace issue_queue {
17
18
19#undef  FUNCTION
20#define FUNCTION "Issue_queue::genMoore"
21  void Issue_queue::genMoore (void)
22  {
23    log_begin(Issue_queue,FUNCTION);
24    log_function(Issue_queue,FUNCTION,_name.c_str());
25
26    for (uint32_t i=0; i<_param->_nb_bank; i++)
27      internal_BANK_OUT_VAL [i] = false;
28
29    std::list<generic::priority::select_t> * select = _priority_out->select(); // same select for all issue
30
31    uint32_t num_bank_offset = 0;
32    for (uint32_t i=0; i<_param->_nb_inst_issue; i++)
33      {
34//      log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d]",i);
35        Tcontrol_t val      = false;
36        uint32_t   num_bank = 0;
37
38        // find a non empty bank
39        for (std::list<generic::priority::select_t>::iterator it=select->begin();
40             it!=select->end();
41             it++)
42          {
43            num_bank=num_bank_offset+it->grp;
44           
45//          log_printf(TRACE,Issue_queue,FUNCTION,"    * Bank [%d]",num_bank);
46           
47            if (not _issue_queue [num_bank].empty())
48              {
49//              log_printf(TRACE,Issue_queue,FUNCTION,"      * Not Empty !!!");
50                val = true;
51
52                internal_BANK_OUT_NUM_INST [num_bank] = i;
53                break; // quit scearch loop
54              }
55          }
56
57        PORT_WRITE(out_ISSUE_OUT_VAL [i], val);
58
59        if (val)
60          {
61            // have find a bank with a data
62            internal_BANK_OUT_VAL [num_bank] = true;
63       
64            entry_t* entry = _issue_queue [num_bank].front();
65           
66            if (_param->_have_port_context_id)
67            PORT_WRITE(out_ISSUE_OUT_CONTEXT_ID            [i], entry->_context_id           );
68            if (_param->_have_port_front_end_id)
69            PORT_WRITE(out_ISSUE_OUT_FRONT_END_ID          [i], entry->_front_end_id         );
70            if (_param->_have_port_rob_ptr  )
71            PORT_WRITE(out_ISSUE_OUT_PACKET_ID             [i], entry->_packet_id            );
72            PORT_WRITE(out_ISSUE_OUT_OPERATION             [i], entry->_operation            );
73            PORT_WRITE(out_ISSUE_OUT_TYPE                  [i], entry->_type                 );
74            PORT_WRITE(out_ISSUE_OUT_STORE_QUEUE_PTR_WRITE [i], entry->_store_queue_ptr_write);
75            if (_param->_have_port_load_queue_ptr)
76            PORT_WRITE(out_ISSUE_OUT_LOAD_QUEUE_PTR_WRITE  [i], entry->_load_queue_ptr_write );
77            PORT_WRITE(out_ISSUE_OUT_HAS_IMMEDIAT          [i], entry->_has_immediat         );
78            PORT_WRITE(out_ISSUE_OUT_IMMEDIAT              [i], entry->_immediat             );
79            PORT_WRITE(out_ISSUE_OUT_READ_RA               [i], entry->_read_ra              );
80            PORT_WRITE(out_ISSUE_OUT_NUM_REG_RA            [i], entry->_num_reg_ra           );
81            PORT_WRITE(out_ISSUE_OUT_READ_RB               [i], entry->_read_rb              );
82            PORT_WRITE(out_ISSUE_OUT_NUM_REG_RB            [i], entry->_num_reg_rb           );
83            PORT_WRITE(out_ISSUE_OUT_READ_RC               [i], entry->_read_rc              );
84            PORT_WRITE(out_ISSUE_OUT_NUM_REG_RC            [i], entry->_num_reg_rc           );
85            PORT_WRITE(out_ISSUE_OUT_WRITE_RD              [i], entry->_write_rd             );
86            PORT_WRITE(out_ISSUE_OUT_NUM_REG_RD            [i], entry->_num_reg_rd           );
87            PORT_WRITE(out_ISSUE_OUT_WRITE_RE              [i], entry->_write_re             );
88            PORT_WRITE(out_ISSUE_OUT_NUM_REG_RE            [i], entry->_num_reg_re           );
89          }
90
91        num_bank_offset += _param->_nb_bank_select_out;
92      }
93
94    log_end(Issue_queue,FUNCTION);
95  };
96
97}; // end namespace issue_queue
98}; // end namespace ooo_engine
99}; // end namespace multi_ooo_engine
100}; // end namespace core
101
102}; // end namespace behavioural
103}; // end namespace morpheo             
104#endif
Note: See TracBrowser for help on using the repository browser.