source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Pseudo_LRU/src/Pseudo_LRU.cpp @ 2

Last change on this file since 2 was 2, checked in by kane, 17 years ago

Import Morpheo

File size: 3.0 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 */
7
8#include "Behavioural/Generic/Select/Pseudo_LRU/include/Pseudo_LRU.h"
9
10namespace morpheo {
11namespace behavioural {
12namespace generic {
13namespace select {
14namespace pseudo_lru {
15
16#ifdef SYSTEMC
17  Pseudo_LRU::Pseudo_LRU (sc_module_name name,
18#else
19  Pseudo_LRU::Pseudo_LRU (string name,
20#endif
21#ifdef STATISTICS
22                          morpheo::behavioural::Parameters_Statistics             param_statistics,
23#endif
24                          morpheo::behavioural::generic::select::pseudo_lru::Parameters param ):
25                          _name   (name)
26                          ,_param (param)
27  {
28    log_printf(FUNC,Pseudo_LRU,"Pseudo_LRU","Begin");
29
30#ifdef STATISTICS
31    log_printf(TRACE,Pseudo_LRU,"Pseudo_LRU","Allocation of statistics");
32   
33    // Allocation of statistics
34    _stat = new Statistics (static_cast<string>(_name),
35                            param_statistics          ,
36                            param);
37#endif
38
39#ifdef VHDL_TESTBENCH
40    // Creation of a testbench
41    //  -> port
42    //  -> clock's signals
43    log_printf(TRACE,Pseudo_LRU,"Pseudo_LRU","Creation of Testbench");
44    _vhdl_testbench = new Vhdl_Testbench (_name);
45    vhdl_testbench_port           (*_vhdl_testbench);
46    _vhdl_testbench->set_clock    ("in_CLOCK",true);
47#endif
48
49#ifdef VHDL
50    // generate the vhdl
51    log_printf(TRACE,Pseudo_LRU,"Pseudo_LRU","Generation of VHDL");
52    vhdl();
53#endif
54
55#ifdef SYSTEMC
56    log_printf(TRACE,Pseudo_LRU,"Pseudo_LRU","Allocation");
57    allocation ();
58
59    log_printf(TRACE,Pseudo_LRU,"Pseudo_LRU","Definition of sc_method");
60    SC_METHOD (transition);
61    dont_initialize ();
62    sensitive_pos << *(in_CLOCK);
63
64    SC_METHOD (genMealy_access);
65    dont_initialize ();
66    sensitive_neg << *(in_CLOCK);
67    for (uint32_t i=0; i<_param._nb_access; i++)
68      {
69        sensitive << *(in_ACCESS_VAL     [i]);
70        if (_param._size_table>1)
71          sensitive << *(in_ACCESS_ADDRESS [i]);
72      }
73
74#ifdef SYSTEMCASS_SPECIFIC
75    log_printf(TRACE,Pseudo_LRU,"Pseudo_LRU","List dependency information");
76    // List dependency information
77    for (uint32_t i=0; i<_param._nb_access; i++)
78      {
79        (*(out_ACCESS_ENTITY [i])) (*( in_ACCESS_VAL     [i]));
80        if (_param._size_table>1)
81          (*(out_ACCESS_ENTITY [i])) (*( in_ACCESS_ADDRESS [i]));
82      }
83#endif   
84
85    // Constant - ack is always at one
86    for (uint32_t i=0; i<_param._nb_access; i++)
87      PORT_WRITE (out_ACCESS_ACK [i], 1);
88    for (uint32_t i=0; i<_param._nb_update; i++)
89      PORT_WRITE (out_UPDATE_ACK [i], 1);
90
91#endif
92    log_printf(FUNC,Pseudo_LRU,"Pseudo_LRU","End");
93  };
94 
95  Pseudo_LRU::~Pseudo_LRU (void)
96  {
97    log_printf(FUNC,Pseudo_LRU,"~Pseudo_LRU","Begin");
98#ifdef SYSTEMC
99    deallocation ();
100#endif
101
102#ifdef VHDL_TESTBENCH
103    // generate the test bench
104    _vhdl_testbench->generate_file();
105    delete _vhdl_testbench;
106#endif
107
108#ifdef STATISTICS
109    _stat->generate_file(statistics(0));
110   
111    delete _stat;
112#endif
113    log_printf(FUNC,Pseudo_LRU,"~Pseudo_LRU","End");
114  };
115
116}; // end namespace pseudo_lru
117}; // end namespace select
118}; // end namespace generic
119}; // end namespace behavioural
120}; // end namespace morpheo             
Note: See TracBrowser for help on using the repository browser.