source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_genMoore.cpp @ 132

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

1) add constant method - compatibility with SystemC
2) add Script to test sensitive list
3) fix bug in sensitive list

  • Property svn:keywords set to Id
File size: 2.5 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Address_management_genMoore.cpp 132 2009-07-11 16:39:35Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/include/Address_management.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace ifetch_unit {
17namespace address_management {
18
19
20#undef  FUNCTION
21#define FUNCTION "Address_management::genMoore"
22  void Address_management::genMoore (void)
23  {
24    log_begin(Address_management,FUNCTION);
25    log_function(Address_management,FUNCTION,_name.c_str());
26
27    if (PORT_READ(in_NRESET))
28      {
29    // =========================================
30    // ===== ADDRESS ===========================
31    // =========================================
32
33    internal_ADDRESS_VAL = reg_PC_ACCESS_VAL;
34
35    // Align pc on instruction packet address.
36    PORT_WRITE(out_ADDRESS_INSTRUCTION_ADDRESS        ,reg_PC_ACCESS - (reg_PC_ACCESS%_param->_nb_instruction));
37    if (_param->_have_port_inst_ifetch_ptr)
38    PORT_WRITE(out_ADDRESS_INST_IFETCH_PTR            ,reg_PC_ACCESS_INST_IFETCH_PTR            );
39    PORT_WRITE(out_ADDRESS_BRANCH_STATE               ,reg_PC_ACCESS_BRANCH_STATE               );
40    if (_param->_have_port_depth)
41    PORT_WRITE(out_ADDRESS_BRANCH_UPDATE_PREDICTION_ID,reg_PC_ACCESS_BRANCH_UPDATE_PREDICTION_ID);
42
43    for (uint32_t i=0; i<_param->_nb_instruction; i++)
44      PORT_WRITE(out_ADDRESS_INSTRUCTION_ENABLE [i], reg_PC_ACCESS_INSTRUCTION_ENABLE[i]);
45
46    // =========================================
47    // ===== PREDICT ===========================
48    // =========================================
49
50    internal_PREDICT_VAL = not reg_PC_NEXT_NEXT_VAL;
51
52    PORT_WRITE(out_PREDICT_PC_PREVIOUS          ,reg_PC_CURRENT        );
53    PORT_WRITE(out_PREDICT_PC_CURRENT           ,reg_PC_NEXT           );
54    PORT_WRITE(out_PREDICT_PC_CURRENT_IS_DS_TAKE,reg_PC_NEXT_IS_DS_TAKE);
55
56      }
57    else
58      {
59    internal_ADDRESS_VAL = 0;
60    internal_PREDICT_VAL = 0;
61      }
62
63    log_printf(TRACE,Address_management,FUNCTION," * ADDRESS_VAL : %d",internal_ADDRESS_VAL);
64    log_printf(TRACE,Address_management,FUNCTION," * PREDICT_VAL : %d",internal_PREDICT_VAL);
65
66    PORT_WRITE(out_ADDRESS_VAL,internal_ADDRESS_VAL);
67    PORT_WRITE(out_PREDICT_VAL,internal_PREDICT_VAL);
68
69    log_end(Address_management,FUNCTION);
70  };
71
72}; // end namespace address_management
73}; // end namespace ifetch_unit
74}; // end namespace front_end
75}; // end namespace multi_front_end
76}; // end namespace core
77
78}; // end namespace behavioural
79}; // end namespace morpheo             
80#endif
Note: See TracBrowser for help on using the repository browser.