source: trunk/soclib/soclib/communication/vci/caba/source/include/vci_signals.h @ 2200

Revision 2177, 5.8 KB checked in by bouyer, 7 weeks ago (diff)

Normalize traces: srcid/trdid in dec

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 *         Nicolas Pouillon <nipo@ssji.net>, 2007
25 *
26 * Maintainers: nipo
27 */
28#ifndef SOCLIB_CABA_SIGNAL_VCI_SIGNALS_H_
29#define SOCLIB_CABA_SIGNAL_VCI_SIGNALS_H_
30
31#include <string>
32#include <systemc>
33#include "vci_param.h"
34
35namespace soclib { namespace caba {
36
37/**
38 * VCI Initiator port
39 */
40template <typename vci_param>
41class VciSignals
42{
43public:
44        sc_core::sc_signal<typename vci_param::ack_t>     rspack;
45        sc_core::sc_signal<typename vci_param::val_t>     rspval;
46        sc_core::sc_signal<typename vci_param::data_t>    rdata;
47        sc_core::sc_signal<bool>                          reop;
48        sc_core::sc_signal<typename vci_param::rerror_t>  rerror;
49        sc_core::sc_signal<typename vci_param::srcid_t>   rsrcid;
50        sc_core::sc_signal<typename vci_param::trdid_t >  rtrdid;
51        sc_core::sc_signal<typename vci_param::pktid_t >  rpktid;
52
53        sc_core::sc_signal<typename vci_param::ack_t>     cmdack;
54        sc_core::sc_signal<typename vci_param::val_t>     cmdval;
55        sc_core::sc_signal<typename vci_param::addr_t>    address;
56        sc_core::sc_signal<typename vci_param::be_t>      be;
57        sc_core::sc_signal<typename vci_param::cmd_t>     cmd;
58        sc_core::sc_signal<typename vci_param::contig_t>  contig;
59        sc_core::sc_signal<typename vci_param::data_t>    wdata;
60        sc_core::sc_signal<typename vci_param::eop_t>     eop;
61        sc_core::sc_signal<typename vci_param::const_t>   cons;
62        sc_core::sc_signal<typename vci_param::plen_t>    plen;
63        sc_core::sc_signal<typename vci_param::wrap_t>    wrap;
64        sc_core::sc_signal<typename vci_param::cfixed_t>  cfixed;
65        sc_core::sc_signal<typename vci_param::clen_t>    clen;
66        sc_core::sc_signal<typename vci_param::srcid_t>   srcid;
67        sc_core::sc_signal<typename vci_param::trdid_t>   trdid;
68        sc_core::sc_signal<typename vci_param::pktid_t>   pktid; 
69
70#define ren(x) x(((std::string)(name_ + "_"#x)).c_str())
71
72    VciSignals(std::string name_ = (std::string)sc_core::sc_gen_unique_name("vci"))
73        : ren(rspack),
74          ren(rspval),
75          ren(rdata), 
76          ren(reop), 
77          ren(rerror),
78          ren(rsrcid),
79          ren(rtrdid),
80          ren(rpktid),
81          ren(cmdack),
82          ren(cmdval),
83          ren(address),
84          ren(be),   
85          ren(cmd),   
86          ren(contig),
87          ren(wdata), 
88          ren(eop),   
89          ren(cons), 
90          ren(plen), 
91          ren(wrap), 
92          ren(cfixed),
93          ren(clen), 
94          ren(srcid), 
95          ren(trdid), 
96          ren(pktid)
97    {
98    }
99#undef ren
100
101    void trace( sc_core::sc_trace_file* tf, const std::string &name ) const
102    {
103#define __trace(x) sc_core::sc_trace(tf, x, name+"_"+#x)
104        __trace(rspack);
105        __trace(rspval);
106        __trace(rdata); 
107        __trace(reop); 
108        __trace(rerror);
109        __trace(rsrcid);
110        __trace(rtrdid);
111        __trace(rpktid);
112        __trace(cmdack);
113        __trace(cmdval);
114        __trace(address);
115        __trace(be);   
116        __trace(cmd);   
117        __trace(contig);
118        __trace(wdata); 
119        __trace(eop);   
120        __trace(cons); 
121        __trace(plen); 
122        __trace(wrap); 
123        __trace(cfixed);
124        __trace(clen); 
125        __trace(srcid); 
126        __trace(trdid); 
127        __trace(pktid);
128#undef __trace
129    }
130
131    void print_trace(std::string name)
132    {
133        if ( cmdval )
134        {
135            std::cout << name << std::hex << " CMD VCI :";
136            if ( cmd.read() == 1 )      std::cout << " RD";
137            if ( cmd.read() == 2 )      std::cout << " WR";
138            if ( cmd.read() == 3 )      std::cout << " LL";
139            if ( cmd.read() == 0 )      std::cout << " SC";
140            if ( address.read()&0x3 )   std::cout << " /@ = BROADCAST";
141            else                        std::cout << " /@ = " << address;
142            std::cout << std::hex
143                      << "/wdata = " << wdata
144                      << "/be = " << be
145                      << std::dec
146                      << "/srcid = " << srcid
147                      << "/trdid = " << trdid
148                      << "/plen = " << plen
149                      << "/eop = "   << eop
150                      << "/ack = "   << cmdack << std::endl;
151        }
152        if ( rspval )
153        {
154            std::cout << name << std::hex << " RSP VCI :";
155            std::cout << " rerror = "   << rerror
156                      << "/rdata = "  << rdata
157                      << std::dec
158                      << "/rsrcid = " << rsrcid
159                      << "/rtrdid = " << rtrdid
160                      << "/reop = "   << reop
161                      << "/ack = "    << rspack << std::endl;
162        }
163    } // end print_trace()
164   
165};
166
167}}
168
169
170namespace sc_core {
171    // sc_trace function
172    template <typename vci_param>
173    void sc_trace( sc_core::sc_trace_file* tf, const soclib::caba::VciSignals<vci_param>& vci, const std::string& name )
174    {
175        vci.trace(tf, name);
176    }
177}
178
179#endif /* SOCLIB_CABA_SIGNAL_VCI_SIGNALS_H_ */
180
181// Local Variables:
182// tab-width: 4
183// c-basic-offset: 4
184// c-file-offsets:((innamespace . 0)(inline-open . 0))
185// indent-tabs-mode: nil
186// End:
187
188// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
189
Note: See TracBrowser for help on using the repository browser.