source: branches/fault_tolerance/module/internal_component/vci_simple_rom/caba/source/include/vci_simple_rom.h @ 656

Last change on this file since 656 was 656, checked in by cfuguet, 10 years ago

TSAR FAULT TOLERANCE BRANCH

vci_simple_rom:

  • Introducing ROM component which can discard most significant bits when calling the load function of the loader. This allows us to replicate some code in several cluster as we can mask the cluster ID bits of the address.

vci_cc_vcache_wrapper:

  • Introducing a INST_PADDR_EXT register. This register allows to access addresses further than 4Gbytes when MMU is de-activated.
  • Introducing a way to initialize the INST_PADDR_EXT and DATA_ PADDR_EXT registers during reset.
File size: 4.6 KB
Line 
1/* -*- c++ -*-
2 *
3 * SOCLIB_LGPL_HEADER_BEGIN
4 *
5 * This file is part of SoCLib, GNU LGPLv2.1.
6 *
7 * SoCLib is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published
9 * by the Free Software Foundation; version 2.1 of the License.
10 *
11 * SoCLib is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with SoCLib; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 * 02110-1301 USA
20 *
21 * SOCLIB_LGPL_HEADER_END
22 *
23 * Copyright (c) UPMC, Lip6, Asim
24 *         Alain Greiner <alain.greiner@lip6.fr>, 2008
25 *
26 * Maintainers: alain
27 */
28
29////////////////////////////////////////////////////////////////////////////
30//  This component is a multi-segments ROM controller.
31//  The VCI DATA can must be 32 bits or 64 bits.
32//  The VCI ADDRESS and the PLEN fields should be multiple of 4 bytes.
33//  It does not accept WRITE, LL, SC or CAS commands.
34//  A READ burst command packet (such a cache line request)
35//  contains one single flit. The number of flits in the response packet
36//  depends on the PLEN field:
37//  - If VCI DATA width = 32 bits, each flit contains 4 bytes, and the
38//    number of flits is PLEN/4.
39//  - If VCI DATA width = 64 bits, and PLEN define an even number of words,
40//    each flit contains 8 bytes, and the number of flits is PLEN/8.
41//  - If VCI DATA width = 64 bits, and PLEN define an odd number of words,
42//    the last flit contains only 4 bytes right justified,
43//    and the number of flits is PLEN/8 + 1.
44////////////////////////////////////////////////////////////////////////////
45//  Implementation note:
46//  The ROM segments are implemented as a set of uint32_t arrays
47//  (one array per segment).
48//  This component is controlled by a single FSM.
49//  The VCI command is analysed and checked in the IDLE state.
50//  The response is sent in the READ (or ERROR) state.
51/////////////////////////////////////////////////////////////////////////
52
53#ifndef SOCLIB_CABA_VCI_SIMPLE_ROM_H
54#define SOCLIB_CABA_VCI_SIMPLE_ROM_H
55
56#include <systemc>
57#include <vector>
58#include <list>
59#include <cassert>
60#include "caba_base_module.h"
61#include "vci_target.h"
62#include "mapping_table.h"
63#include "int_tab.h"
64#include "loader.h"
65#include "soclib_endian.h"
66
67namespace soclib {
68namespace caba {
69
70using namespace sc_core;
71
72template<typename vci_param>
73class VciSimpleRom
74    : public soclib::caba::BaseModule
75{
76public:
77
78    typedef typename vci_param::fast_data_t  vci_data_t;
79    typedef typename vci_param::srcid_t      vci_srcid_t;
80    typedef typename vci_param::trdid_t      vci_trdid_t;
81    typedef typename vci_param::pktid_t      vci_pktid_t;
82
83    enum fsm_state_e
84    {
85        FSM_IDLE,
86        FSM_RSP_READ,
87        FSM_RSP_ERROR,
88    };
89
90private:
91
92    const soclib::common::Loader            &m_loader;
93    std::list<soclib::common::Segment>      m_seglist;
94    int                                     m_drop_msb;
95
96    sc_signal<int>                          r_fsm_state;
97    sc_signal<size_t>                       r_flit_count;
98    sc_signal<bool>                         r_odd_words;
99    sc_signal<size_t>                       r_seg_index;
100    sc_signal<size_t>                       r_rom_index;
101    sc_signal<vci_srcid_t>                  r_srcid;
102    sc_signal<vci_trdid_t>                  r_trdid;
103    sc_signal<vci_pktid_t>                  r_pktid;
104
105    size_t                                  m_nbseg;
106    uint32_t                                **m_rom;
107    soclib::common::Segment                 **m_seg;
108
109protected:
110
111    SC_HAS_PROCESS(VciSimpleRom);
112
113public:
114
115    // Ports
116    sc_in<bool>                             p_resetn;
117    sc_in<bool>                             p_clk;
118    soclib::caba::VciTarget<vci_param>      p_vci;
119
120    VciSimpleRom(sc_module_name name,
121                 const soclib::common::IntTab index,
122                 const soclib::common::MappingTable &mt,
123                 const soclib::common::Loader &loader,
124                 const int nb_msb_drop = 0);
125
126    ~VciSimpleRom();
127
128    void print_trace();
129
130private:
131
132    void transition();
133    void genMoore();
134    void reload();
135    void reset();
136};
137
138}}
139
140#endif
141
142// Local Variables:
143// tab-width: 4
144// c-basic-offset: 4
145// c-file-offsets:((innamespace . 0)(inline-open . 0))
146// indent-tabs-mode: nil
147// End:
148
149// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
150
Note: See TracBrowser for help on using the repository browser.