ipxact-ruby 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +15 -0
- data/.gitignore +2 -0
- data/README.html +89 -0
- data/README.mdown +91 -0
- data/Rakefile +31 -0
- data/VERSION +1 -0
- data/autotest/discover.rb +17 -0
- data/lib/ipxact.rb +263 -0
- data/lib/ipxact/component.rb +235 -0
- data/lib/ipxact/parser.rb +27 -0
- data/lib/ipxact/parser/bus_data_parser.rb +229 -0
- data/lib/ipxact/parser/component_data_parser.rb +309 -0
- data/lib/ipxact/parser/platform_data_parser.rb +63 -0
- data/lib/ipxact/pathfinder/graph_pathfinder.rb +191 -0
- data/lib/ipxact/platform.rb +43 -0
- data/schemas/abstractionDefinition.xsd +332 -0
- data/schemas/abstractor.xsd +156 -0
- data/schemas/autoConfigure.xsd +226 -0
- data/schemas/busDefinition.xsd +99 -0
- data/schemas/busInterface.xsd +640 -0
- data/schemas/commonStructures.xsd +189 -0
- data/schemas/component.xsd +253 -0
- data/schemas/configurable.xsd +82 -0
- data/schemas/constraints.xsd +283 -0
- data/schemas/design.xsd +105 -0
- data/schemas/designConfig.xsd +144 -0
- data/schemas/file.xsd +560 -0
- data/schemas/fileType.xsd +86 -0
- data/schemas/generator.xsd +240 -0
- data/schemas/identifier.xsd +93 -0
- data/schemas/index.xsd +67 -0
- data/schemas/memoryMap.xsd +1007 -0
- data/schemas/model.xsd +291 -0
- data/schemas/port.xsd +441 -0
- data/schemas/signalDrivers.xsd +220 -0
- data/schemas/simpleTypes.xsd +90 -0
- data/schemas/subInstances.xsd +256 -0
- data/spec/integration/bus_data_extraction_spec.rb +105 -0
- data/spec/integration/data_calculation_spec.rb +133 -0
- data/spec/integration/data_construction_spec.rb +52 -0
- data/spec/integration/general_spec.rb +121 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_initiator_port.h +135 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_initiator_port.tpp +247 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_initiator_port_base.h +189 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_router.h +205 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_router.tpp +278 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_slave_base.h +115 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_slave_base.tpp +126 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_target_port.h +168 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_target_port_base.h +133 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/pv_tlm_if.h +280 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/PV/user_types.h +38 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM1/Leon2Platform/Leon2Platform.xml +77 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM1/Leon2Platform/design_Leon2Platform.xml +156 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM1/Leon2Platform/tlmsrc/Leon2Platform.h +149 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM1/apbSubSystem/apbSubSystem.xml +406 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM1/apbSubSystem/design_apbSubSystem.xml +135 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM1/apbSubSystem/tlmsrc/apbSubSystem.h +133 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/Leon2Platform/Leon2Platform.xml +77 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/Leon2Platform/design_Leon2Platform.xml +157 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/Leon2Platform/tlmsrc/Leon2Platform.h +150 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/apbSubSystem/apbSubSystem.xml +422 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/apbSubSystem/designConfig_apbSubSystem.xml +79 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/apbSubSystem/design_apbSubSystem.xml +184 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM2/apbSubSystem/tlmsrc/apbSubSystem.h +164 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/Leon2Platform/Leon2Platform.xml +105 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/Leon2Platform/design_Leon2Platform.xml +157 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/Leon2Platform/tlmsrc/Leon2Platform.h +152 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/apbSubSystem/apbSubSystem.xml +429 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/apbSubSystem/designConfig_apbSubSystem.xml +64 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/apbSubSystem/design_apbSubSystem.xml +150 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/SystemTLM3/apbSubSystem/tlmsrc/apbSubSystem.h +167 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/ahbbus/1.4/ahbbus22.xml +236 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/ahbbus/1.4/tlmsrc/ahbbus.h +52 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/ahbram/1.4/ahbram.xml +184 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/ahbram/1.4/tlmsrc/ahbram.cc +93 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/ahbram/1.4/tlmsrc/ahbram.h +77 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbbus/1.4/apbbus8.xml +544 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbbus/1.4/tlmsrc/apbbus.h +55 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbmst/1.4/apbmst.xml +209 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbmst/1.4/tlmsrc/apbmst.h +53 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbram/1.0/apbram.xml +395 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbram/1.0/hdlsrc/apbram.cc +89 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbram/1.0/hdlsrc/apbram.h +69 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbram/1.0/hdlsrc/apbram.v +82 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/apbram/1.0/hdlsrc/apbram.vhd +132 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/cgu/1.4/cgu.xml +686 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/cgu/1.4/tlmsrc/cgu.cc +121 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/cgu/1.4/tlmsrc/cgu.h +81 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/cgu/1.5/cgu.xml +707 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/cgu/1.5/tlmsrc/cgu.cc +121 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/cgu/1.5/tlmsrc/cgu.h +81 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/dma/1.4/dma.xml +272 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/dma/1.4/tlmsrc/dma.cc +230 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/dma/1.4/tlmsrc/dma.h +116 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/irqctrl/1.4/irqctrl.xml +530 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/irqctrl/1.4/tlmsrc/irqctrl.cc +211 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/irqctrl/1.4/tlmsrc/irqctrl.h +108 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/processor/1.4/processor.xml +423 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/processor/1.4/tlmsrc/processor.cc +331 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/processor/1.4/tlmsrc/processor.h +121 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/pv2apb/1.0/pv2apb.xml +240 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/pv2apb/1.0/tlmsrc/pv2apb.cc +153 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/pv2apb/1.0/tlmsrc/pv2apb.h +77 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/pv2tac/1.0/pv2tac.xml +154 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/pv2tac/1.0/tlmsrc/pv2tac.cc +114 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/pv2tac/1.0/tlmsrc/pv2tac.h +67 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/rgu/1.4/rgu.xml +766 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/rgu/1.4/tlmsrc/rgu.cc +126 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/rgu/1.4/tlmsrc/rgu.h +105 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/scmlAdaptor/1.0/scmlAdaptor.xml +154 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/scmlAdaptor/1.0/tlmsrc/scmladaptor.cc +100 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/scmlAdaptor/1.0/tlmsrc/scmladaptor.h +62 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/serial_device/1.0/serial_device.xml +151 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/serial_device/1.0/tlmsrc/serial_device.h +85 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/timers/1.4/timers.xml +460 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/timers/1.4/tlmsrc/timers.cc +201 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/timers/1.4/tlmsrc/timers.h +102 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/inc/uart.h +152 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/inc/uart_fifo.h +113 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/inc/uart_memory_map.h +96 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/inc/uart_types.h +60 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/src/uart.cc +125 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/src/uart_interrupt_handler.cc +136 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/src/uart_register_bank.cc +129 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/tlmsrc/src/uart_serial_tx_rx.cc +145 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_scml/1.0/uart_scml.xml +372 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/include/Leon2_uart.h +216 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/include/def_Leon2_uart.h +34 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/include/tlm_field.h +72 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/include/tlm_register.h +129 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/include/tlmreg_Leon2_uart.h +133 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/src/Leon2_uart.cc +316 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/src/tlmreg_Leon2_uart.cc +197 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/tlmsrc/src/user_specific_Leon2_uart.cc +146 -0
- data/spec/test_data/spiritconsortium.org/Leon2TLM/uart_tac/1.0/uart_tac.xml +222 -0
- data/spec/unit/component_spec.rb +98 -0
- data/spec/unit/graph_pathfinder_spec.rb +128 -0
- data/spec/unit/interconnect_spec.rb +177 -0
- data/spec/unit/ipxact_spec.rb +69 -0
- data/spec/unit/platform_spec.rb +34 -0
- metadata +225 -0
@@ -0,0 +1,168 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
Description: pv_target_port.h
|
3
|
+
Author: The SPIRIT Consortium
|
4
|
+
Revision: $Revision: 1506 $
|
5
|
+
Date: $Date: 2009-04-26 01:51:56 -0500 (Sun, 26 Apr 2009) $
|
6
|
+
|
7
|
+
Copyright (c) 2008, 2009 The SPIRIT Consortium.
|
8
|
+
|
9
|
+
This work forms part of a deliverable of The SPIRIT Consortium.
|
10
|
+
|
11
|
+
Use of these materials are governed by the legal terms and conditions
|
12
|
+
outlined in the disclaimer available from www.spiritconsortium.org.
|
13
|
+
|
14
|
+
This source file is provided on an AS IS basis. The SPIRIT
|
15
|
+
Consortium disclaims any warranty express or implied including
|
16
|
+
any warranty of merchantability and fitness for use for a
|
17
|
+
particular purpose.
|
18
|
+
|
19
|
+
The user of the source file shall indemnify and hold The SPIRIT
|
20
|
+
Consortium and its members harmless from any damages or liability.
|
21
|
+
Users are requested to provide feedback to The SPIRIT Consortium
|
22
|
+
using either mailto:feedback@lists.spiritconsortium.org or the forms at
|
23
|
+
http://www.spiritconsortium.org/about/contact_us/
|
24
|
+
|
25
|
+
This file may be copied, and distributed, with or without
|
26
|
+
modifications; but this notice must be included on any copy.
|
27
|
+
|
28
|
+
The following code is derived, directly or indirectly, from the SystemC
|
29
|
+
source code Copyright (c) 1996-2004 by all Contributors.
|
30
|
+
All Rights reserved.
|
31
|
+
|
32
|
+
The contents of this file are subject to the restrictions and limitations
|
33
|
+
set forth in the SystemC Open Source License Version 2.4 (the "License");
|
34
|
+
You may not use this file except in compliance with such restrictions and
|
35
|
+
limitations. You may obtain instructions on how to receive a copy of the
|
36
|
+
License at http://www.systemc.org/. Software distributed by Contributors
|
37
|
+
under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
38
|
+
ANY KIND, either express or implied. See the License for the specific
|
39
|
+
language governing rights and limitations under the License.
|
40
|
+
|
41
|
+
*****************************************************************************/
|
42
|
+
|
43
|
+
|
44
|
+
#ifndef _PV_TARGET_PORT_H_
|
45
|
+
#define _PV_TARGET_PORT_H_
|
46
|
+
|
47
|
+
/*------------------------------------------------------------------------------
|
48
|
+
* Includes
|
49
|
+
*----------------------------------------------------------------------------*/
|
50
|
+
#include "systemc.h"
|
51
|
+
#include <string>
|
52
|
+
|
53
|
+
#include "tlm.h"
|
54
|
+
#include "pv_tlm_if.h"
|
55
|
+
#include "pv_target_port_base.h"
|
56
|
+
|
57
|
+
//----------------------------------------------------------------------------
|
58
|
+
template<typename ADDRESS,typename DATA>
|
59
|
+
class pv_target_port :
|
60
|
+
public pv_target_port_base,
|
61
|
+
public sc_export<tlm::tlm_transport_if<pv_request<ADDRESS,DATA>, pv_response<DATA> > >
|
62
|
+
{
|
63
|
+
|
64
|
+
public:
|
65
|
+
typedef pv_request<ADDRESS,DATA> request_type;
|
66
|
+
typedef pv_response<DATA> response_type;
|
67
|
+
|
68
|
+
typedef tlm::tlm_transport_if<request_type,response_type> interface_type;
|
69
|
+
typedef sc_export<interface_type> target_port_type;
|
70
|
+
|
71
|
+
typedef pv_target_port_base target_port_base_type;
|
72
|
+
|
73
|
+
//--------------
|
74
|
+
// Constructor
|
75
|
+
//--------------
|
76
|
+
pv_target_port(const char * port_name) :
|
77
|
+
target_port_type(port_name)
|
78
|
+
{}
|
79
|
+
|
80
|
+
void before_end_of_elaboration();
|
81
|
+
void end_of_elaboration();
|
82
|
+
|
83
|
+
void bind(target_port_type& target_port_);
|
84
|
+
void bind(interface_type& interface) {
|
85
|
+
target_port_type::bind(interface);
|
86
|
+
}
|
87
|
+
|
88
|
+
void operator() (interface_type& interface) {
|
89
|
+
target_port_type::bind(interface);
|
90
|
+
}
|
91
|
+
|
92
|
+
protected:
|
93
|
+
bool is_already_bound(sc_interface * other_if);
|
94
|
+
};
|
95
|
+
|
96
|
+
template<typename ADDRESS,typename DATA>
|
97
|
+
bool
|
98
|
+
pv_target_port<ADDRESS, DATA>::is_already_bound(sc_interface * other_if) {
|
99
|
+
if (dynamic_cast<sc_interface * >(this->get_interface()) == NULL) return(false);
|
100
|
+
else {
|
101
|
+
std::string if_name1,if_name2 ;
|
102
|
+
sc_object * tmp = dynamic_cast<sc_object * >(other_if);
|
103
|
+
if (tmp) if_name1 = tmp->name();
|
104
|
+
else if_name1 = "unnamed interface (non sc_object)";
|
105
|
+
tmp = dynamic_cast<sc_object * >(this->get_interface());
|
106
|
+
if (tmp) if_name2 = tmp->name();
|
107
|
+
else if_name2 = "unnamed interface (non sc_object)";
|
108
|
+
|
109
|
+
std::string msg(sc_object::name());
|
110
|
+
msg += (std::string)(": tlm_target_port warning, Can't bind to \"") + if_name1;
|
111
|
+
msg += (std::string)("\" interface,the target port is already bound to this interface: \"");
|
112
|
+
msg += if_name2 + (std::string)("\"\n");
|
113
|
+
SC_REPORT_WARNING("binding warning",msg.c_str());
|
114
|
+
|
115
|
+
return(true);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
template<typename ADDRESS,typename DATA>
|
120
|
+
void
|
121
|
+
pv_target_port<ADDRESS, DATA>::before_end_of_elaboration()
|
122
|
+
{
|
123
|
+
// if this target port is not directly connected to the core interface
|
124
|
+
if (get_target_port_list().size() > 1) {
|
125
|
+
|
126
|
+
for(typename std::vector<target_port_base_type *>::iterator target_port = get_target_port_list().begin();
|
127
|
+
target_port != get_target_port_list().end();
|
128
|
+
target_port++) {
|
129
|
+
set_tlm_export_id((*target_port)->get_tlm_export_id()); // Propagate the target port id
|
130
|
+
}
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
template<typename ADDRESS,typename DATA>
|
135
|
+
void
|
136
|
+
pv_target_port<ADDRESS, DATA>::end_of_elaboration() {
|
137
|
+
|
138
|
+
#ifdef TLM_PORT_DEBUG
|
139
|
+
printf("DEBUG\t\t%s: Registered target port list :\n",sc_object::name());
|
140
|
+
for(typename std::vector<target_port_base_type *>::iterator port = get_target_port_list().begin();
|
141
|
+
port != get_target_port_list().end();
|
142
|
+
port++) {
|
143
|
+
printf("DEBUG\t\t%s: \t- %s\n",sc_object::name(),(static_cast<target_port_type * >(*port))->name());
|
144
|
+
}
|
145
|
+
printf("DEBUG\t\t%s: -------------------------------------------------------\n",sc_object::name());
|
146
|
+
#endif
|
147
|
+
|
148
|
+
}
|
149
|
+
|
150
|
+
template<typename ADDRESS,typename DATA>
|
151
|
+
void
|
152
|
+
pv_target_port<ADDRESS, DATA>::bind(target_port_type& target_port_)
|
153
|
+
{
|
154
|
+
// If the target port is still not bound
|
155
|
+
if (!is_already_bound(target_port_.get_interface())) {
|
156
|
+
// Copy the list of registered target ports to the current bound port (port propagation)
|
157
|
+
for(typename std::vector<target_port_base_type *>::iterator target_port = target_port_.get_target_port_list().begin();
|
158
|
+
target_port != target_port_.get_target_port_list().end();
|
159
|
+
target_port++) {
|
160
|
+
this->register_target_port(*target_port);
|
161
|
+
}
|
162
|
+
|
163
|
+
// Calls sc_export standard bind method
|
164
|
+
sc_export<interface_type>::bind(target_port_);
|
165
|
+
}
|
166
|
+
}
|
167
|
+
#endif /* _PV_TARGET_PORT_H_ */
|
168
|
+
|
@@ -0,0 +1,133 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
Description: pv_target_port_base.h
|
3
|
+
Author: The SPIRIT Consortium
|
4
|
+
Revision: $Revision: 1506 $
|
5
|
+
Date: $Date: 2009-04-26 01:51:56 -0500 (Sun, 26 Apr 2009) $
|
6
|
+
|
7
|
+
Copyright (c) 2008, 2009 The SPIRIT Consortium.
|
8
|
+
|
9
|
+
This work forms part of a deliverable of The SPIRIT Consortium.
|
10
|
+
|
11
|
+
Use of these materials are governed by the legal terms and conditions
|
12
|
+
outlined in the disclaimer available from www.spiritconsortium.org.
|
13
|
+
|
14
|
+
This source file is provided on an AS IS basis. The SPIRIT
|
15
|
+
Consortium disclaims any warranty express or implied including
|
16
|
+
any warranty of merchantability and fitness for use for a
|
17
|
+
particular purpose.
|
18
|
+
|
19
|
+
The user of the source file shall indemnify and hold The SPIRIT
|
20
|
+
Consortium and its members harmless from any damages or liability.
|
21
|
+
Users are requested to provide feedback to The SPIRIT Consortium
|
22
|
+
using either mailto:feedback@lists.spiritconsortium.org or the forms at
|
23
|
+
http://www.spiritconsortium.org/about/contact_us/
|
24
|
+
|
25
|
+
This file may be copied, and distributed, with or without
|
26
|
+
modifications; but this notice must be included on any copy.
|
27
|
+
|
28
|
+
The following code is derived, directly or indirectly, from the SystemC
|
29
|
+
source code Copyright (c) 1996-2004 by all Contributors.
|
30
|
+
All Rights reserved.
|
31
|
+
|
32
|
+
The contents of this file are subject to the restrictions and limitations
|
33
|
+
set forth in the SystemC Open Source License Version 2.4 (the "License");
|
34
|
+
You may not use this file except in compliance with such restrictions and
|
35
|
+
limitations. You may obtain instructions on how to receive a copy of the
|
36
|
+
License at http://www.systemc.org/. Software distributed by Contributors
|
37
|
+
under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
38
|
+
ANY KIND, either express or implied. See the License for the specific
|
39
|
+
language governing rights and limitations under the License.
|
40
|
+
|
41
|
+
*****************************************************************************/
|
42
|
+
|
43
|
+
|
44
|
+
#ifndef _PV_TARGET_PORT_BASE_H_
|
45
|
+
#define _PV_TARGET_PORT_BASE_H_
|
46
|
+
|
47
|
+
/*------------------------------------------------------------------------------
|
48
|
+
* Includes
|
49
|
+
*----------------------------------------------------------------------------*/
|
50
|
+
#include <vector>
|
51
|
+
|
52
|
+
#include "systemc.h"
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
//----------------------------------------------------------------------------
|
57
|
+
/// Class pv_target_port_base: This class is a base class for pv_target_port class.
|
58
|
+
/**
|
59
|
+
*
|
60
|
+
* \n It provides a container to store registered target ports as pointer list.
|
61
|
+
* \n In addition, it provides a target port ID used by to identify the input export port.
|
62
|
+
* This ID is injected in the request structure by the initiator at run time.
|
63
|
+
*
|
64
|
+
* \n Accessors are provided for the port list and port ID.
|
65
|
+
**/
|
66
|
+
//----------------------------------------------------------------------------
|
67
|
+
class pv_target_port_base {
|
68
|
+
|
69
|
+
typedef pv_target_port_base this_type;
|
70
|
+
|
71
|
+
public:
|
72
|
+
|
73
|
+
//--------------
|
74
|
+
// Constructor
|
75
|
+
//--------------
|
76
|
+
pv_target_port_base():
|
77
|
+
m_tlm_export_id(0) {
|
78
|
+
m_target_port_list.push_back(this);
|
79
|
+
}
|
80
|
+
|
81
|
+
//------------------------------------------
|
82
|
+
/// @name Data members access methods
|
83
|
+
//------------------------------------------
|
84
|
+
/// @{
|
85
|
+
|
86
|
+
/// Returns the port id
|
87
|
+
inline int get_tlm_export_id() const {
|
88
|
+
return(m_tlm_export_id);
|
89
|
+
}
|
90
|
+
|
91
|
+
/// Sets the port id
|
92
|
+
void set_tlm_export_id(int tlm_export_id) {
|
93
|
+
m_tlm_export_id = tlm_export_id;
|
94
|
+
}
|
95
|
+
|
96
|
+
|
97
|
+
//---------------------------------------------------------------------------
|
98
|
+
|
99
|
+
/// Register the target port
|
100
|
+
inline void register_target_port(this_type * target_port) {
|
101
|
+
m_target_port_list.push_back(target_port);
|
102
|
+
}
|
103
|
+
|
104
|
+
/// Returns the vector of registered target port(s)
|
105
|
+
inline std::vector<this_type *>& get_target_port_list() {
|
106
|
+
return(m_target_port_list);
|
107
|
+
}
|
108
|
+
|
109
|
+
/// Sets the vector of registered target port(s) (port propagation)
|
110
|
+
inline void set_target_port_list(std::vector<this_type*>& target_port_list) {
|
111
|
+
m_target_port_list = target_port_list;
|
112
|
+
}
|
113
|
+
|
114
|
+
/// @}
|
115
|
+
|
116
|
+
protected:
|
117
|
+
|
118
|
+
/// Port instance ID
|
119
|
+
int m_tlm_export_id;
|
120
|
+
|
121
|
+
/// target port objects registration
|
122
|
+
/**
|
123
|
+
* Direct registration of the target port(s) into current target port.
|
124
|
+
* \n Used for transaction recording and target port id propagation in case of target port binding
|
125
|
+
* through a module hierarchy
|
126
|
+
**/
|
127
|
+
std::vector<this_type *> m_target_port_list;
|
128
|
+
|
129
|
+
};
|
130
|
+
|
131
|
+
#endif /* _PV_TARGET_PORT_BASE_H_ */
|
132
|
+
|
133
|
+
|
@@ -0,0 +1,280 @@
|
|
1
|
+
/*****************************************************************************
|
2
|
+
Description: pv_tlm_if.h
|
3
|
+
Author: The SPIRIT Consortium
|
4
|
+
Revision: $Revision: 1506 $
|
5
|
+
Date: $Date: 2009-04-26 01:51:56 -0500 (Sun, 26 Apr 2009) $
|
6
|
+
|
7
|
+
Copyright (c) 2008, 2009 The SPIRIT Consortium.
|
8
|
+
|
9
|
+
This work forms part of a deliverable of The SPIRIT Consortium.
|
10
|
+
|
11
|
+
Use of these materials are governed by the legal terms and conditions
|
12
|
+
outlined in the disclaimer available from www.spiritconsortium.org.
|
13
|
+
|
14
|
+
This source file is provided on an AS IS basis. The SPIRIT
|
15
|
+
Consortium disclaims any warranty express or implied including
|
16
|
+
any warranty of merchantability and fitness for use for a
|
17
|
+
particular purpose.
|
18
|
+
|
19
|
+
The user of the source file shall indemnify and hold The SPIRIT
|
20
|
+
Consortium and its members harmless from any damages or liability.
|
21
|
+
Users are requested to provide feedback to The SPIRIT Consortium
|
22
|
+
using either mailto:feedback@lists.spiritconsortium.org or the forms at
|
23
|
+
http://www.spiritconsortium.org/about/contact_us/
|
24
|
+
|
25
|
+
This file may be copied, and distributed, with or without
|
26
|
+
modifications; but this notice must be included on any copy.
|
27
|
+
|
28
|
+
The following code is derived, directly or indirectly, from the SystemC
|
29
|
+
source code Copyright (c) 1996-2004 by all Contributors.
|
30
|
+
All Rights reserved.
|
31
|
+
|
32
|
+
The contents of this file are subject to the restrictions and limitations
|
33
|
+
set forth in the SystemC Open Source License Version 2.4 (the "License");
|
34
|
+
You may not use this file except in compliance with such restrictions and
|
35
|
+
limitations. You may obtain instructions on how to receive a copy of the
|
36
|
+
License at http://www.systemc.org/. Software distributed by Contributors
|
37
|
+
under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
38
|
+
ANY KIND, either express or implied. See the License for the specific
|
39
|
+
language governing rights and limitations under the License.
|
40
|
+
|
41
|
+
*****************************************************************************/
|
42
|
+
|
43
|
+
#ifndef _PV_TLM_IF_H_
|
44
|
+
#define _PV_TLM_IF_H_
|
45
|
+
|
46
|
+
|
47
|
+
/*------------------------------------------------------------------------------
|
48
|
+
* Includes
|
49
|
+
*----------------------------------------------------------------------------*/
|
50
|
+
#include "tlm.h"
|
51
|
+
|
52
|
+
//----------------------------------------------------------------------------
|
53
|
+
// extra definitions added to the tlm namespace
|
54
|
+
|
55
|
+
namespace tlm {
|
56
|
+
class tlm_status {
|
57
|
+
|
58
|
+
public:
|
59
|
+
|
60
|
+
tlm_status() :
|
61
|
+
m_status(TLM_ERROR_FLAG)
|
62
|
+
{}
|
63
|
+
|
64
|
+
inline bool is_ok() const {
|
65
|
+
return (!is_error());
|
66
|
+
}
|
67
|
+
inline void set_ok() {
|
68
|
+
reset_error();
|
69
|
+
}
|
70
|
+
inline bool is_error() const {
|
71
|
+
return (m_status & TLM_ERROR_FLAG);
|
72
|
+
}
|
73
|
+
inline void set_error() {
|
74
|
+
m_status |= TLM_ERROR_FLAG;
|
75
|
+
}
|
76
|
+
inline void reset_error() {
|
77
|
+
m_status &= ~TLM_ERROR_FLAG;
|
78
|
+
}
|
79
|
+
inline bool is_no_response() const {
|
80
|
+
return (m_status & TLM_NO_RESPONSE_FLAG);
|
81
|
+
}
|
82
|
+
inline void set_no_response() {
|
83
|
+
m_status |= TLM_NO_RESPONSE_FLAG;
|
84
|
+
}
|
85
|
+
inline void reset_no_response() {
|
86
|
+
m_status &= ~TLM_NO_RESPONSE_FLAG;
|
87
|
+
}
|
88
|
+
|
89
|
+
protected :
|
90
|
+
|
91
|
+
unsigned int m_status;
|
92
|
+
|
93
|
+
enum status_list {
|
94
|
+
TLM_SUCCESS = 0, ///< Successful completion
|
95
|
+
TLM_ERROR, ///< Target indicates an error occurs during the access
|
96
|
+
TLM_NO_RESPONSE ///< No target response to the initiator's request
|
97
|
+
|
98
|
+
};
|
99
|
+
|
100
|
+
enum status_flags {
|
101
|
+
TLM_ERROR_FLAG = 0x01ul << TLM_ERROR, ///< Mask to set and reset TLM_ERROR flag
|
102
|
+
TLM_NO_RESPONSE_FLAG = 0x01ul << TLM_NO_RESPONSE, ///< Mask to set and reset TLM_NO_RESPONSE flag
|
103
|
+
};
|
104
|
+
|
105
|
+
};
|
106
|
+
|
107
|
+
enum tlm_mode {
|
108
|
+
REGULAR
|
109
|
+
};
|
110
|
+
|
111
|
+
enum tlm_endianness {
|
112
|
+
TLM_LITTLE_ENDIAN,
|
113
|
+
TLM_BIG_ENDIAN
|
114
|
+
};
|
115
|
+
|
116
|
+
#if defined(_WIN32) && defined(_MSC_VER)
|
117
|
+
|
118
|
+
typedef unsigned __int64 tlm_uint64_t;
|
119
|
+
typedef unsigned __int32 tlm_uint32_t;
|
120
|
+
typedef unsigned __int16 tlm_uint16_t;
|
121
|
+
typedef unsigned __int8 tlm_uint8_t;
|
122
|
+
|
123
|
+
typedef __int64 tlm_sint64_t;
|
124
|
+
typedef __int32 tlm_sint32_t;
|
125
|
+
typedef __int16 tlm_sint16_t;
|
126
|
+
typedef __int8 tlm_sint8_t;
|
127
|
+
|
128
|
+
#else
|
129
|
+
|
130
|
+
typedef unsigned long long tlm_uint64_t;
|
131
|
+
typedef unsigned long tlm_uint32_t;
|
132
|
+
typedef unsigned short tlm_uint16_t;
|
133
|
+
typedef unsigned char tlm_uint8_t;
|
134
|
+
|
135
|
+
typedef long long tlm_sint64_t;
|
136
|
+
typedef long tlm_sint32_t;
|
137
|
+
typedef short tlm_sint16_t;
|
138
|
+
typedef char tlm_sint8_t;
|
139
|
+
|
140
|
+
#endif
|
141
|
+
|
142
|
+
static const unsigned int NO_BE = 0xffffffff;
|
143
|
+
}
|
144
|
+
|
145
|
+
/** Host arch. identification and associated typedef and define.
|
146
|
+
**/
|
147
|
+
|
148
|
+
#if defined(__sparc) || defined(macintosh) || defined(__hppa)
|
149
|
+
|
150
|
+
/* Workstation endianness */
|
151
|
+
#define HOST_ENDIAN_BIG
|
152
|
+
|
153
|
+
/* SOC Endianness default value = host endianness */
|
154
|
+
#define PV_HOST_ENDIAN tlm::TLM_BIG_ENDIAN
|
155
|
+
|
156
|
+
#elif defined(__acorn) || defined(__mvs) || defined(_WIN32) || \
|
157
|
+
(defined(__alpha) && defined(__osf__)) || defined(__i386) || defined(x86_64)
|
158
|
+
|
159
|
+
/* Workstation endianness */
|
160
|
+
#define HOST_ENDIAN_LITTLE
|
161
|
+
|
162
|
+
/* SOC Endianness default value = host endianness */
|
163
|
+
#define PV_HOST_ENDIAN tlm::TLM_LITTLE_ENDIAN
|
164
|
+
|
165
|
+
#else
|
166
|
+
/* Workstation endianness */
|
167
|
+
#define HOST_ENDIAN_UNKNOWN
|
168
|
+
|
169
|
+
#endif
|
170
|
+
|
171
|
+
//----------------------------------------------------------------------------
|
172
|
+
// PV_TLM abstract interface class, convenience API.
|
173
|
+
|
174
|
+
template< typename ADDRESS,typename DATA>
|
175
|
+
class pv_tlm_if {
|
176
|
+
|
177
|
+
public:
|
178
|
+
|
179
|
+
virtual ~pv_tlm_if() {}
|
180
|
+
|
181
|
+
virtual tlm::tlm_status read(const ADDRESS& address,
|
182
|
+
DATA& data,
|
183
|
+
const unsigned int byte_enable = tlm::NO_BE,
|
184
|
+
const tlm::tlm_mode mode = tlm::REGULAR,
|
185
|
+
const unsigned int export_id = 0
|
186
|
+
) = 0;
|
187
|
+
|
188
|
+
virtual tlm::tlm_status write(const ADDRESS& address,
|
189
|
+
const DATA& data,
|
190
|
+
const unsigned int byte_enable = tlm::NO_BE,
|
191
|
+
const tlm::tlm_mode mode = tlm::REGULAR,
|
192
|
+
const unsigned int export_id = 0
|
193
|
+
) = 0;
|
194
|
+
};
|
195
|
+
|
196
|
+
//----------------------------------------------------------------------------
|
197
|
+
// PV request and response data structures
|
198
|
+
|
199
|
+
enum pv_command {
|
200
|
+
PV_READ,
|
201
|
+
PV_WRITE
|
202
|
+
};
|
203
|
+
|
204
|
+
template< typename ADDRESS , typename DATA >
|
205
|
+
class pv_request
|
206
|
+
{
|
207
|
+
public:
|
208
|
+
|
209
|
+
typedef pv_request<ADDRESS,DATA> this_type;
|
210
|
+
|
211
|
+
pv_request() :
|
212
|
+
m_command(PV_READ),
|
213
|
+
m_address(0),
|
214
|
+
m_data(0)
|
215
|
+
{}
|
216
|
+
pv_request(const this_type& other) :
|
217
|
+
m_command(other.m_command),
|
218
|
+
m_address(other.m_address),
|
219
|
+
m_data(other.m_data)
|
220
|
+
{}
|
221
|
+
|
222
|
+
this_type& operator= (const this_type& other) {
|
223
|
+
m_command = other.m_command;
|
224
|
+
m_address = other.m_address;
|
225
|
+
m_data = other.m_data;
|
226
|
+
return *this;
|
227
|
+
}
|
228
|
+
|
229
|
+
inline pv_command get_command() const { return m_command; }
|
230
|
+
inline void set_command(const pv_command command) { m_command = command; }
|
231
|
+
|
232
|
+
inline ADDRESS get_address() const { return m_address; }
|
233
|
+
inline void set_address(const ADDRESS address) { m_address = address; }
|
234
|
+
|
235
|
+
inline const DATA& get_data() const { return m_data; }
|
236
|
+
inline void set_data(const DATA& data) { m_data = data; }
|
237
|
+
|
238
|
+
protected:
|
239
|
+
pv_command m_command;
|
240
|
+
ADDRESS m_address;
|
241
|
+
DATA m_data;
|
242
|
+
};
|
243
|
+
|
244
|
+
template< typename DATA >
|
245
|
+
class pv_response
|
246
|
+
{
|
247
|
+
public:
|
248
|
+
|
249
|
+
typedef pv_response<DATA> this_type;
|
250
|
+
|
251
|
+
pv_response() :
|
252
|
+
m_status(),
|
253
|
+
m_data(0)
|
254
|
+
{}
|
255
|
+
pv_response(const this_type& other) :
|
256
|
+
m_status(other.m_status),
|
257
|
+
m_data(other.m_data)
|
258
|
+
{}
|
259
|
+
|
260
|
+
this_type& operator= (const this_type& other) {
|
261
|
+
m_status = other.m_status;
|
262
|
+
m_data = other.m_data;
|
263
|
+
return *this;
|
264
|
+
}
|
265
|
+
|
266
|
+
inline const tlm::tlm_status get_status() const { return m_status; }
|
267
|
+
inline tlm::tlm_status get_status() { return m_status; }
|
268
|
+
inline void set_status(const tlm::tlm_status& status) { m_status = status; }
|
269
|
+
|
270
|
+
inline const DATA& get_data() const { return m_data; }
|
271
|
+
inline DATA& get_data() { return m_data; }
|
272
|
+
inline void set_data(const DATA& data) { m_data = data; }
|
273
|
+
|
274
|
+
protected:
|
275
|
+
tlm::tlm_status m_status;
|
276
|
+
DATA m_data;
|
277
|
+
};
|
278
|
+
|
279
|
+
#endif /* _PV_TLM_IF_H_ */
|
280
|
+
|