source: trunk/modules/vci_vdspin_target_wrapper/caba/source/include/vci_vdspin_target_wrapper.h @ 149

Last change on this file since 149 was 149, checked in by alain, 13 years ago

bug fixing

File size: 3.9 KB
Line 
1/* -*- c++ -*-
2  * File : vci_vdspin_target_wrapper.h
3  * Copyright (c) UPMC, Lip6
4  * Author : Alain Greiner
5  *
6  * SOCLIB_LGPL_HEADER_BEGIN
7  *
8  * This file is part of SoCLib, GNU LGPLv2.1.
9  *
10  * SoCLib is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU Lesser General Public License as published
12  * by the Free Software Foundation; version 2.1 of the License.
13  *
14  * SoCLib is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with SoCLib; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22  * 02110-1301 USA
23  *
24  * SOCLIB_LGPL_HEADER_END
25  */
26
27/////////////////////////////////////////////////////////////////////////
28// This component performs the protocol translation between VCI & DSPIN,
29// and can be used to connect a VCI target to a DSPIN netnork.
30// It is implemented as two fully independant sub-components:
31// - translation from a DSPIN CMD to a VCI CMD
32// - translation from a VCI RSP to a DSPIN RSP
33// Each subcomponent contains a FIFO containing DSPIN flits.
34// For the DSPIN interfaces, the widths of the CMD & RSP flits
35// are defined as template parameters for future evolutions,
36// but the VCI to DSPIN translation makes the following assumptions:
37// - DSPIN CMD flit width == 40 bits
38// - DSPIN RSP flit width == 33 bits
39// - VCI address width    <= 40 bits
40// - VCI data             == 32 bits
41// - VCI plen             == 8  bits
42// - VCI srcid            <= 14 bits
43// - VCI trdid            <= 8  bits
44// - VCI pktid field not transmitted
45// - VCI rerror           == 2 bits
46////////////////////////////////////////////////////////////////////////
47
48#ifndef VCI_VDSPIN_TARGET_WRAPPER_H_
49#define VCI_VDSPIN_TARGET_WRAPPER_H_
50
51#include <systemc>
52#include <assert.h>
53#include "caba_base_module.h"
54#include "vci_initiator.h"
55#include "generic_fifo.h"
56#include "dspin_interface.h"
57
58namespace soclib { namespace caba {
59
60
61template<typename vci_param, int dspin_cmd_width, int dspin_rsp_width>
62class VciVdspinTargetWrapper
63        : public soclib::caba::BaseModule
64{
65
66    // Command FSM
67    enum fsm_state_cmd{
68    CMD_IDLE,
69    CMD_BROADCAST,
70    CMD_RW,
71    CMD_READ,
72    CMD_WDATA,
73    };
74
75    // Response FSM
76    enum fsm_state_rsp{
77    RSP_IDLE,
78    RSP_READ,
79    RSP_WRITE,
80    };
81
82protected:
83    SC_HAS_PROCESS(VciVdspinTargetWrapper);
84
85public:
86    // ports
87    sc_core::sc_in<bool>                                        p_clk;
88    sc_core::sc_in<bool>                                        p_resetn;
89    soclib::caba::DspinOutput<dspin_rsp_width>                  p_dspin_out;
90    soclib::caba::DspinInput<dspin_cmd_width>                   p_dspin_in;
91    soclib::caba::VciInitiator<vci_param>                       p_vci;
92
93    // constructor / destructor
94    VciVdspinTargetWrapper(     sc_module_name                  name, 
95                                size_t                          cmd_fifo_depth,
96                                size_t                          rsp_fifo_depth);
97private:
98    // internal registers
99    sc_core::sc_signal<int>                                     r_cmd_fsm;
100    sc_core::sc_signal<sc_uint<dspin_cmd_width> >               r_cmd_buf0;
101    sc_core::sc_signal<sc_uint<dspin_cmd_width> >               r_cmd_buf1;
102    sc_core::sc_signal<int>                                     r_rsp_fsm;
103    sc_core::sc_signal<size_t>                                  r_flit_count;
104
105    // fifos cmd and rsp
106    soclib::caba::GenericFifo<sc_uint<dspin_cmd_width> >        r_fifo_cmd;
107    soclib::caba::GenericFifo<sc_uint<dspin_rsp_width> >        r_fifo_rsp;
108
109    // methods systemc
110    void transition();
111    void genMoore();
112
113public:
114    void print_trace();
115
116};
117
118}} // end namespace
119               
120#endif // VCI_VDSPIN_TARGET_WRAPPER_H_
121
122// Local Variables:
123// tab-width: 4
124// c-basic-offset: 4
125// c-file-offsets:((innamespace . 0)(inline-open . 0))
126// indent-tabs-mode: nil
127// End:
128
129// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
Note: See TracBrowser for help on using the repository browser.