ipxact-ruby 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,230 @@
|
|
|
1
|
+
/*------------------------------------------------------------------------------
|
|
2
|
+
* Simple TLM DMA
|
|
3
|
+
*
|
|
4
|
+
* Revision: $Revision: 1506 $
|
|
5
|
+
* Date: $Date: 2009-04-26 01:51:56 -0500 (Sun, 26 Apr 2009) $
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2006, 2007, 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-2006 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
|
+
/*------------------------------------------------------------------------------
|
|
45
|
+
* Includes
|
|
46
|
+
*----------------------------------------------------------------------------*/
|
|
47
|
+
#include "dma.h"
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
/*------------------------------------------------------------------------------
|
|
51
|
+
* Constants
|
|
52
|
+
*----------------------------------------------------------------------------*/
|
|
53
|
+
// Register relative addresses
|
|
54
|
+
const int dma::SRC_ADDR;
|
|
55
|
+
const int dma::DST_ADDR;
|
|
56
|
+
const int dma::LENGTH;
|
|
57
|
+
const int dma::CONTROL;
|
|
58
|
+
|
|
59
|
+
// Control register bit
|
|
60
|
+
const int dma::START;
|
|
61
|
+
const int dma::IRQ;
|
|
62
|
+
|
|
63
|
+
//----------------
|
|
64
|
+
// Constructor
|
|
65
|
+
//----------------
|
|
66
|
+
dma::dma(sc_module_name module_name,
|
|
67
|
+
tlm::tlm_endianness endian) :
|
|
68
|
+
sc_module(module_name),
|
|
69
|
+
pv_slave_base<ADDRESS_TYPE,DATA_TYPE>(name()),
|
|
70
|
+
apb_slave_port("apb_slave_port"),
|
|
71
|
+
ahb_master_port("ahb_master_port"),
|
|
72
|
+
m_endian(endian),
|
|
73
|
+
m_dma_src_addr(0),
|
|
74
|
+
m_dma_dst_addr(0),
|
|
75
|
+
m_dma_control(0) {
|
|
76
|
+
|
|
77
|
+
apb_slave_port(*this);
|
|
78
|
+
|
|
79
|
+
SC_METHOD(transfer);
|
|
80
|
+
sensitive << m_start_transfer;
|
|
81
|
+
dont_initialize();
|
|
82
|
+
|
|
83
|
+
SC_METHOD(irq);
|
|
84
|
+
sensitive << m_irq_to_change;
|
|
85
|
+
dont_initialize();
|
|
86
|
+
|
|
87
|
+
int_master_port.initialize(false);
|
|
88
|
+
|
|
89
|
+
std::cout << name() << " module created - "<< ((m_endian == tlm::TLM_BIG_ENDIAN) ? "big": "little") << " endian\n";
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
//----------------------------------------
|
|
95
|
+
// pv_if virtual method implementation
|
|
96
|
+
//----------------------------------------
|
|
97
|
+
|
|
98
|
+
//------------------------------------------------------------------------------
|
|
99
|
+
// DMA read access
|
|
100
|
+
|
|
101
|
+
tlm::tlm_status dma::read(const ADDRESS_TYPE &addr , DATA_TYPE &data,
|
|
102
|
+
const unsigned int byte_enable,
|
|
103
|
+
const tlm::tlm_mode mode,
|
|
104
|
+
const unsigned int export_id
|
|
105
|
+
) {
|
|
106
|
+
tlm::tlm_status status;
|
|
107
|
+
|
|
108
|
+
switch (addr)
|
|
109
|
+
{
|
|
110
|
+
case SRC_ADDR:
|
|
111
|
+
data = m_dma_src_addr; // Read dma source address register
|
|
112
|
+
std::cout << "DEBUG\t" << name() << std::showbase << std::hex << ": read dma source address register, returns " << m_dma_src_addr << std::endl;
|
|
113
|
+
break;
|
|
114
|
+
|
|
115
|
+
case DST_ADDR:
|
|
116
|
+
data = m_dma_dst_addr; // Read dma destination address register
|
|
117
|
+
std::cout << "DEBUG\t" << name() << std::showbase << std::hex << ": read dma destination address register, returns " << m_dma_dst_addr << std::endl;
|
|
118
|
+
break;
|
|
119
|
+
|
|
120
|
+
case CONTROL:
|
|
121
|
+
data= m_dma_control;
|
|
122
|
+
std::cout << "DEBUG\t" << name() << std::showbase << std::hex << ": read dma control register, returns " << (int)m_dma_control << std::endl;
|
|
123
|
+
wait(SC_ZERO_TIME); // control register is a system synchronization point
|
|
124
|
+
break;
|
|
125
|
+
|
|
126
|
+
default:
|
|
127
|
+
std::cout << "ERROR\t" << name() << std::showbase << std::hex;
|
|
128
|
+
std::cout << ": DMA has received a request with input address out of range: " << addr << std::endl;
|
|
129
|
+
return(status);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
status.set_ok();
|
|
133
|
+
|
|
134
|
+
return(status);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
//------------------------------------------------------------------------------
|
|
139
|
+
// Write access
|
|
140
|
+
tlm::tlm_status dma::write(const ADDRESS_TYPE &addr , const DATA_TYPE &data,
|
|
141
|
+
const unsigned int byte_enable,
|
|
142
|
+
const tlm::tlm_mode mode,
|
|
143
|
+
const unsigned int export_id
|
|
144
|
+
) {
|
|
145
|
+
tlm::tlm_status status;
|
|
146
|
+
|
|
147
|
+
switch (addr)
|
|
148
|
+
{
|
|
149
|
+
case SRC_ADDR:
|
|
150
|
+
m_dma_src_addr = data; // Write dma source address register
|
|
151
|
+
break;
|
|
152
|
+
|
|
153
|
+
case DST_ADDR:
|
|
154
|
+
m_dma_dst_addr = data; // Write dma destination address register
|
|
155
|
+
break;
|
|
156
|
+
|
|
157
|
+
case CONTROL:
|
|
158
|
+
{
|
|
159
|
+
if (data==0x1a08 ){
|
|
160
|
+
//&& (!( m_dma_control & START))) {
|
|
161
|
+
m_start_transfer.notify();
|
|
162
|
+
m_dma_control |= START;
|
|
163
|
+
}
|
|
164
|
+
if ((!(data & IRQ)) && (m_dma_control & IRQ)) {
|
|
165
|
+
m_dma_control &= ~IRQ;
|
|
166
|
+
m_irq_to_change.notify();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
break;
|
|
170
|
+
|
|
171
|
+
default:
|
|
172
|
+
std::cout << "ERROR\t[" << name() << "]: received a request with input address out of range: "
|
|
173
|
+
<< std::showbase << std::hex << addr << std::endl;
|
|
174
|
+
return(status);
|
|
175
|
+
}
|
|
176
|
+
status.set_ok();
|
|
177
|
+
return(status);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
//------------------------------------------------------------------------------
|
|
182
|
+
// Transfer end IRQ signal management
|
|
183
|
+
void dma::irq() {
|
|
184
|
+
if (m_dma_control & IRQ) {
|
|
185
|
+
int_master_port.write(true);
|
|
186
|
+
std::cout << "DEBUG\t" << name() << std::showbase << std::hex << ": rise transfer end IRQ \n";
|
|
187
|
+
} else {
|
|
188
|
+
int_master_port.write(false);
|
|
189
|
+
std::cout << "DEBUG\t" << name() << std::showbase << std::hex << ": clear transfer end IRQ \n";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
//------------------------------------------------------------------------------
|
|
195
|
+
// dma transfer management
|
|
196
|
+
void dma::transfer() {
|
|
197
|
+
tlm::tlm_status status;
|
|
198
|
+
// if (m_dma_control & START) {
|
|
199
|
+
std::cout << "DEBUG\t" << name() << std::showbase << std::hex << ": dma transfer started. Source address: "
|
|
200
|
+
<< m_dma_src_addr << " - destination address: " << m_dma_dst_addr << std::endl;
|
|
201
|
+
|
|
202
|
+
// starts the memory transfer
|
|
203
|
+
// copy data from memory start address (SRC_ADDR) to memory destination address (DST_ADDR)
|
|
204
|
+
DATA_TYPE tmp;
|
|
205
|
+
for(int i = 0;i<LENGTH;i++) {
|
|
206
|
+
status = ahb_master_port.read(m_dma_src_addr + i,tmp);
|
|
207
|
+
if (status.is_error())
|
|
208
|
+
std::cout << "ERROR\t" << name() << ": read memory failure at " << (m_dma_src_addr +i) << std::endl;
|
|
209
|
+
else {
|
|
210
|
+
status = ahb_master_port.write(m_dma_dst_addr + i,tmp);
|
|
211
|
+
if (status.is_error())
|
|
212
|
+
std::cout << "ERROR\t" << name() << ": write memory failure at " << (m_dma_dst_addr +i) << std::endl;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Clear the START bit of the control register
|
|
217
|
+
m_dma_control &= ~START;
|
|
218
|
+
|
|
219
|
+
// Interrupt generation
|
|
220
|
+
if (!(m_dma_control&IRQ)) {
|
|
221
|
+
m_dma_control |= IRQ;
|
|
222
|
+
m_irq_to_change.notify();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
/* END of dma.cc */
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/*------------------------------------------------------------------------------
|
|
2
|
+
* Simple TLM DMA
|
|
3
|
+
*
|
|
4
|
+
* Revision: $Revision: 1506 $
|
|
5
|
+
* Date: $Date: 2009-04-26 01:51:56 -0500 (Sun, 26 Apr 2009) $
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2005, 2006, 2007, 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-2006 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
|
+
#ifndef _DMA_H_
|
|
43
|
+
#define _DMA_H_
|
|
44
|
+
|
|
45
|
+
/*------------------------------------------------------------------------------
|
|
46
|
+
* Includes
|
|
47
|
+
*----------------------------------------------------------------------------*/
|
|
48
|
+
#include "systemc.h"
|
|
49
|
+
#include "pv_slave_base.h"
|
|
50
|
+
#include "pv_target_port.h"
|
|
51
|
+
#include "pv_initiator_port.h"
|
|
52
|
+
#include "user_types.h"
|
|
53
|
+
|
|
54
|
+
//------------------------------------------------------------------------------
|
|
55
|
+
class dma :
|
|
56
|
+
public sc_module,
|
|
57
|
+
public pv_slave_base< ADDRESS_TYPE , DATA_TYPE >
|
|
58
|
+
{
|
|
59
|
+
public :
|
|
60
|
+
|
|
61
|
+
// Registers relative addresses
|
|
62
|
+
static const int SRC_ADDR = 0x0000;
|
|
63
|
+
static const int DST_ADDR = 0x0004;
|
|
64
|
+
static const int CONTROL = 0x0008;
|
|
65
|
+
// hardcoded lenght of the block transfer
|
|
66
|
+
static const int LENGTH = 0x001F;
|
|
67
|
+
|
|
68
|
+
// Control register bits
|
|
69
|
+
static const int START = 0x1000;
|
|
70
|
+
static const int IRQ = 0x0010;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
//---------------
|
|
74
|
+
// Module ports
|
|
75
|
+
//---------------
|
|
76
|
+
pv_target_port<ADDRESS_TYPE , DATA_TYPE> apb_slave_port;
|
|
77
|
+
pv_initiator_port<ADDRESS_TYPE , DATA_TYPE> ahb_master_port;
|
|
78
|
+
sc_out<int> int_master_port;
|
|
79
|
+
|
|
80
|
+
//----------------
|
|
81
|
+
// Constructor
|
|
82
|
+
//----------------
|
|
83
|
+
SC_HAS_PROCESS(dma);
|
|
84
|
+
dma(sc_module_name module_name,
|
|
85
|
+
tlm::tlm_endianness endian = PV_HOST_ENDIAN);
|
|
86
|
+
|
|
87
|
+
//--------------------------------------------------------------------------------------------
|
|
88
|
+
//Abstract class pv_if methods implementation (overides pv_slave_base default implementation)
|
|
89
|
+
//--------------------------------------------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
tlm::tlm_status write( const ADDRESS_TYPE &addr , const DATA_TYPE &data,
|
|
92
|
+
const unsigned int byte_enable = tlm::NO_BE,
|
|
93
|
+
const tlm::tlm_mode mode = tlm::REGULAR,
|
|
94
|
+
const unsigned int export_id = 0 );
|
|
95
|
+
tlm::tlm_status read( const ADDRESS_TYPE &addr , DATA_TYPE &data,
|
|
96
|
+
const unsigned int byte_enable = tlm::NO_BE,
|
|
97
|
+
const tlm::tlm_mode mode = tlm::REGULAR,
|
|
98
|
+
const unsigned int export_id = 0 );
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
protected:
|
|
102
|
+
|
|
103
|
+
tlm::tlm_endianness m_endian; // dma endianness
|
|
104
|
+
sc_event m_start_transfer; // dma process related event (start)
|
|
105
|
+
sc_event m_irq_to_change; // rise/clear interrupt signal related event
|
|
106
|
+
ADDRESS_TYPE m_dma_src_addr; // Source address register
|
|
107
|
+
ADDRESS_TYPE m_dma_dst_addr; // Destination address register
|
|
108
|
+
tlm::tlm_uint8_t m_dma_control; // control register (8 bits register)
|
|
109
|
+
|
|
110
|
+
void transfer(); // dma transfer management process
|
|
111
|
+
void irq(); // dma transfer end IRQ signal management process
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
#endif /* _DMA_H_ */
|
|
115
|
+
|
|
116
|
+
|
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!--
|
|
3
|
+
//
|
|
4
|
+
// Revision: $Revision: 1506 $
|
|
5
|
+
// Date: $Date: 2009-04-26 01:51:56 -0500 (Sun, 26 Apr 2009) $
|
|
6
|
+
//
|
|
7
|
+
// Copyright (c) 2005, 2006, 2007, 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
|
+
<spirit:component xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5/index.xsd">
|
|
29
|
+
<spirit:vendor>spiritconsortium.org</spirit:vendor>
|
|
30
|
+
<spirit:library>Leon2TLM</spirit:library>
|
|
31
|
+
<spirit:name>irqctrl</spirit:name>
|
|
32
|
+
<spirit:version>1.4</spirit:version>
|
|
33
|
+
<spirit:busInterfaces>
|
|
34
|
+
<spirit:busInterface>
|
|
35
|
+
<spirit:name>APB_Slave</spirit:name>
|
|
36
|
+
<spirit:busType spirit:library="AMBA2" spirit:name="APB" spirit:vendor="amba.com" spirit:version="r2p0_4"/>
|
|
37
|
+
<spirit:abstractionType spirit:library="abstractiondef.tlm" spirit:name="apb_pv" spirit:vendor="spiritconsortium.org" spirit:version="1.4"/>
|
|
38
|
+
<spirit:slave>
|
|
39
|
+
<spirit:memoryMapRef spirit:memoryMapRef="APB_MM"/>
|
|
40
|
+
</spirit:slave>
|
|
41
|
+
<spirit:connectionRequired>true</spirit:connectionRequired>
|
|
42
|
+
<spirit:portMaps>
|
|
43
|
+
<spirit:portMap>
|
|
44
|
+
<spirit:logicalPort>
|
|
45
|
+
<spirit:name>PV_TRANS</spirit:name>
|
|
46
|
+
</spirit:logicalPort>
|
|
47
|
+
<spirit:physicalPort>
|
|
48
|
+
<spirit:name>apb_slave_port</spirit:name>
|
|
49
|
+
</spirit:physicalPort>
|
|
50
|
+
</spirit:portMap>
|
|
51
|
+
</spirit:portMaps>
|
|
52
|
+
</spirit:busInterface>
|
|
53
|
+
<spirit:busInterface>
|
|
54
|
+
<spirit:name>INT_Master</spirit:name>
|
|
55
|
+
<spirit:busType spirit:library="busdef.leon2" spirit:name="IntProc" spirit:vendor="spiritconsortium.org" spirit:version="v1.0"/>
|
|
56
|
+
<spirit:abstractionType spirit:library="abstractiondef.tlm" spirit:name="IntProc_pv" spirit:vendor="spiritconsortium.org" spirit:version="1.4"/>
|
|
57
|
+
<spirit:master/>
|
|
58
|
+
<spirit:portMaps>
|
|
59
|
+
<spirit:portMap>
|
|
60
|
+
<spirit:logicalPort>
|
|
61
|
+
<spirit:name>IRL</spirit:name>
|
|
62
|
+
</spirit:logicalPort>
|
|
63
|
+
<spirit:physicalPort>
|
|
64
|
+
<spirit:name>irlout</spirit:name>
|
|
65
|
+
</spirit:physicalPort>
|
|
66
|
+
</spirit:portMap>
|
|
67
|
+
<spirit:portMap>
|
|
68
|
+
<spirit:logicalPort>
|
|
69
|
+
<spirit:name>IRQVEC</spirit:name>
|
|
70
|
+
</spirit:logicalPort>
|
|
71
|
+
<spirit:physicalPort>
|
|
72
|
+
<spirit:name>irlin</spirit:name>
|
|
73
|
+
</spirit:physicalPort>
|
|
74
|
+
</spirit:portMap>
|
|
75
|
+
<spirit:portMap>
|
|
76
|
+
<spirit:logicalPort>
|
|
77
|
+
<spirit:name>INTack</spirit:name>
|
|
78
|
+
</spirit:logicalPort>
|
|
79
|
+
<spirit:physicalPort>
|
|
80
|
+
<spirit:name>intack</spirit:name>
|
|
81
|
+
</spirit:physicalPort>
|
|
82
|
+
</spirit:portMap>
|
|
83
|
+
</spirit:portMaps>
|
|
84
|
+
</spirit:busInterface>
|
|
85
|
+
<spirit:busInterface>
|
|
86
|
+
<spirit:name>INT_Slave4</spirit:name>
|
|
87
|
+
<spirit:busType spirit:library="busdef.interrupt" spirit:name="interrupt" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
88
|
+
<spirit:abstractionType spirit:library="busdef.interrupt" spirit:name="interrupt_rtl" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
89
|
+
<spirit:slave/>
|
|
90
|
+
<spirit:portMaps>
|
|
91
|
+
<spirit:portMap>
|
|
92
|
+
<spirit:logicalPort>
|
|
93
|
+
<spirit:name>IRQ</spirit:name>
|
|
94
|
+
</spirit:logicalPort>
|
|
95
|
+
<spirit:physicalPort>
|
|
96
|
+
<spirit:name>int4</spirit:name>
|
|
97
|
+
</spirit:physicalPort>
|
|
98
|
+
</spirit:portMap>
|
|
99
|
+
</spirit:portMaps>
|
|
100
|
+
</spirit:busInterface>
|
|
101
|
+
<spirit:busInterface>
|
|
102
|
+
<spirit:name>INT_Slave3</spirit:name>
|
|
103
|
+
<spirit:busType spirit:library="busdef.interrupt" spirit:name="interrupt" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
104
|
+
<spirit:abstractionType spirit:library="busdef.interrupt" spirit:name="interrupt_rtl" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
105
|
+
<spirit:slave/>
|
|
106
|
+
<spirit:portMaps>
|
|
107
|
+
<spirit:portMap>
|
|
108
|
+
<spirit:logicalPort>
|
|
109
|
+
<spirit:name>IRQ</spirit:name>
|
|
110
|
+
</spirit:logicalPort>
|
|
111
|
+
<spirit:physicalPort>
|
|
112
|
+
<spirit:name>int3</spirit:name>
|
|
113
|
+
</spirit:physicalPort>
|
|
114
|
+
</spirit:portMap>
|
|
115
|
+
</spirit:portMaps>
|
|
116
|
+
</spirit:busInterface>
|
|
117
|
+
<spirit:busInterface>
|
|
118
|
+
<spirit:name>INT_Slave2</spirit:name>
|
|
119
|
+
<spirit:busType spirit:library="busdef.interrupt" spirit:name="interrupt" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
120
|
+
<spirit:abstractionType spirit:library="busdef.interrupt" spirit:name="interrupt_rtl" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
121
|
+
<spirit:slave/>
|
|
122
|
+
<spirit:portMaps>
|
|
123
|
+
<spirit:portMap>
|
|
124
|
+
<spirit:logicalPort>
|
|
125
|
+
<spirit:name>IRQ</spirit:name>
|
|
126
|
+
</spirit:logicalPort>
|
|
127
|
+
<spirit:physicalPort>
|
|
128
|
+
<spirit:name>int2</spirit:name>
|
|
129
|
+
</spirit:physicalPort>
|
|
130
|
+
</spirit:portMap>
|
|
131
|
+
</spirit:portMaps>
|
|
132
|
+
</spirit:busInterface>
|
|
133
|
+
<spirit:busInterface>
|
|
134
|
+
<spirit:name>INT_Slave1</spirit:name>
|
|
135
|
+
<spirit:busType spirit:library="busdef.interrupt" spirit:name="interrupt" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
136
|
+
<spirit:abstractionType spirit:library="busdef.interrupt" spirit:name="interrupt_rtl" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
137
|
+
<spirit:slave/>
|
|
138
|
+
<spirit:portMaps>
|
|
139
|
+
<spirit:portMap>
|
|
140
|
+
<spirit:logicalPort>
|
|
141
|
+
<spirit:name>IRQ</spirit:name>
|
|
142
|
+
</spirit:logicalPort>
|
|
143
|
+
<spirit:physicalPort>
|
|
144
|
+
<spirit:name>int1</spirit:name>
|
|
145
|
+
</spirit:physicalPort>
|
|
146
|
+
</spirit:portMap>
|
|
147
|
+
</spirit:portMaps>
|
|
148
|
+
</spirit:busInterface>
|
|
149
|
+
<spirit:busInterface>
|
|
150
|
+
<spirit:name>INT_Slave0</spirit:name>
|
|
151
|
+
<spirit:busType spirit:library="busdef.interrupt" spirit:name="interrupt" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
152
|
+
<spirit:abstractionType spirit:library="busdef.interrupt" spirit:name="interrupt_rtl" spirit:vendor="spiritconsortium.org" spirit:version="1.0"/>
|
|
153
|
+
<spirit:slave/>
|
|
154
|
+
<spirit:portMaps>
|
|
155
|
+
<spirit:portMap>
|
|
156
|
+
<spirit:logicalPort>
|
|
157
|
+
<spirit:name>IRQ</spirit:name>
|
|
158
|
+
</spirit:logicalPort>
|
|
159
|
+
<spirit:physicalPort>
|
|
160
|
+
<spirit:name>int0</spirit:name>
|
|
161
|
+
</spirit:physicalPort>
|
|
162
|
+
</spirit:portMap>
|
|
163
|
+
</spirit:portMaps>
|
|
164
|
+
</spirit:busInterface>
|
|
165
|
+
</spirit:busInterfaces>
|
|
166
|
+
<spirit:memoryMaps>
|
|
167
|
+
<spirit:memoryMap>
|
|
168
|
+
<spirit:name>APB_MM</spirit:name>
|
|
169
|
+
<spirit:addressBlock>
|
|
170
|
+
<spirit:name>apbMemoryMap</spirit:name>
|
|
171
|
+
<spirit:baseAddress>0</spirit:baseAddress>
|
|
172
|
+
<spirit:range spirit:format="long">64</spirit:range>
|
|
173
|
+
<spirit:width spirit:id="width" spirit:format="long">32</spirit:width>
|
|
174
|
+
<spirit:register>
|
|
175
|
+
<spirit:name>interrupMaskandPriorityLevel</spirit:name>
|
|
176
|
+
<spirit:description>Interrupt Mask and Priority</spirit:description>
|
|
177
|
+
<spirit:addressOffset>0x0</spirit:addressOffset>
|
|
178
|
+
<spirit:size>32</spirit:size>
|
|
179
|
+
<spirit:access>read-write</spirit:access>
|
|
180
|
+
<spirit:reset>
|
|
181
|
+
<spirit:value>0x0</spirit:value>
|
|
182
|
+
<spirit:mask>0xFFFE</spirit:mask>
|
|
183
|
+
</spirit:reset>
|
|
184
|
+
<spirit:field>
|
|
185
|
+
<spirit:name>Reserved1</spirit:name>
|
|
186
|
+
<spirit:description>Reserved</spirit:description>
|
|
187
|
+
<spirit:bitOffset>0</spirit:bitOffset>
|
|
188
|
+
<spirit:bitWidth>1</spirit:bitWidth>
|
|
189
|
+
<spirit:volatile>true</spirit:volatile>
|
|
190
|
+
<spirit:access>read-write</spirit:access>
|
|
191
|
+
<spirit:testable>false</spirit:testable>
|
|
192
|
+
</spirit:field>
|
|
193
|
+
<spirit:field>
|
|
194
|
+
<spirit:name>imask</spirit:name>
|
|
195
|
+
<spirit:description>Indicates if an interrupt is masked (bit=0) or enabled (bit=1)</spirit:description>
|
|
196
|
+
<spirit:bitOffset>1</spirit:bitOffset>
|
|
197
|
+
<spirit:bitWidth>15</spirit:bitWidth>
|
|
198
|
+
<spirit:volatile>true</spirit:volatile>
|
|
199
|
+
<spirit:access>read-write</spirit:access>
|
|
200
|
+
<spirit:testable>false</spirit:testable>
|
|
201
|
+
</spirit:field>
|
|
202
|
+
<spirit:field>
|
|
203
|
+
<spirit:name>Reserved2</spirit:name>
|
|
204
|
+
<spirit:description>Reserved</spirit:description>
|
|
205
|
+
<spirit:bitOffset>16</spirit:bitOffset>
|
|
206
|
+
<spirit:bitWidth>1</spirit:bitWidth>
|
|
207
|
+
<spirit:volatile>true</spirit:volatile>
|
|
208
|
+
<spirit:access>read-write</spirit:access>
|
|
209
|
+
<spirit:testable>false</spirit:testable>
|
|
210
|
+
</spirit:field>
|
|
211
|
+
<spirit:field>
|
|
212
|
+
<spirit:name>ilevel</spirit:name>
|
|
213
|
+
<spirit:description>Indicates if an interrupt belongs to priority level 1 (bit=1) or 0 (bit=0)</spirit:description>
|
|
214
|
+
<spirit:bitOffset>17</spirit:bitOffset>
|
|
215
|
+
<spirit:bitWidth>15</spirit:bitWidth>
|
|
216
|
+
<spirit:volatile>true</spirit:volatile>
|
|
217
|
+
<spirit:access>read-write</spirit:access>
|
|
218
|
+
<spirit:testable>false</spirit:testable>
|
|
219
|
+
</spirit:field>
|
|
220
|
+
</spirit:register>
|
|
221
|
+
<spirit:register>
|
|
222
|
+
<spirit:name>interruptPendingRegister</spirit:name>
|
|
223
|
+
<spirit:description>Indicates if an interrupt is pending</spirit:description>
|
|
224
|
+
<spirit:addressOffset>0x4</spirit:addressOffset>
|
|
225
|
+
<spirit:size>32</spirit:size>
|
|
226
|
+
<spirit:access>read-write</spirit:access>
|
|
227
|
+
<spirit:field>
|
|
228
|
+
<spirit:name>Reserved1</spirit:name>
|
|
229
|
+
<spirit:description>Reserved</spirit:description>
|
|
230
|
+
<spirit:bitOffset>0</spirit:bitOffset>
|
|
231
|
+
<spirit:bitWidth>1</spirit:bitWidth>
|
|
232
|
+
<spirit:volatile>true</spirit:volatile>
|
|
233
|
+
<spirit:access>read-write</spirit:access>
|
|
234
|
+
<spirit:testable>false</spirit:testable>
|
|
235
|
+
</spirit:field>
|
|
236
|
+
<spirit:field>
|
|
237
|
+
<spirit:name>ipend</spirit:name>
|
|
238
|
+
<spirit:description>Indicates if an interrupt is pending (bit=1)</spirit:description>
|
|
239
|
+
<spirit:bitOffset>1</spirit:bitOffset>
|
|
240
|
+
<spirit:bitWidth>15</spirit:bitWidth>
|
|
241
|
+
<spirit:volatile>true</spirit:volatile>
|
|
242
|
+
<spirit:access>read-write</spirit:access>
|
|
243
|
+
<spirit:testable>false</spirit:testable>
|
|
244
|
+
</spirit:field>
|
|
245
|
+
<spirit:field>
|
|
246
|
+
<spirit:name>Reserved2</spirit:name>
|
|
247
|
+
<spirit:description>Reserved</spirit:description>
|
|
248
|
+
<spirit:bitOffset>16</spirit:bitOffset>
|
|
249
|
+
<spirit:bitWidth>16</spirit:bitWidth>
|
|
250
|
+
<spirit:volatile>true</spirit:volatile>
|
|
251
|
+
<spirit:access>read-write</spirit:access>
|
|
252
|
+
<spirit:testable>false</spirit:testable>
|
|
253
|
+
</spirit:field>
|
|
254
|
+
</spirit:register>
|
|
255
|
+
<spirit:register>
|
|
256
|
+
<spirit:name>interruptForceRegister</spirit:name>
|
|
257
|
+
<spirit:description>Indicates if an interrupt is being forced</spirit:description>
|
|
258
|
+
<spirit:addressOffset>0x8</spirit:addressOffset>
|
|
259
|
+
<spirit:size>32</spirit:size>
|
|
260
|
+
<spirit:access>read-write</spirit:access>
|
|
261
|
+
<spirit:field>
|
|
262
|
+
<spirit:name>Reserved1</spirit:name>
|
|
263
|
+
<spirit:description>Reserved</spirit:description>
|
|
264
|
+
<spirit:bitOffset>0</spirit:bitOffset>
|
|
265
|
+
<spirit:bitWidth>1</spirit:bitWidth>
|
|
266
|
+
<spirit:volatile>true</spirit:volatile>
|
|
267
|
+
<spirit:access>read-write</spirit:access>
|
|
268
|
+
<spirit:testable>false</spirit:testable>
|
|
269
|
+
</spirit:field>
|
|
270
|
+
<spirit:field>
|
|
271
|
+
<spirit:name>iforce</spirit:name>
|
|
272
|
+
<spirit:description>Indicates if an interrupt is being forced (bit=1)</spirit:description>
|
|
273
|
+
<spirit:bitOffset>1</spirit:bitOffset>
|
|
274
|
+
<spirit:bitWidth>15</spirit:bitWidth>
|
|
275
|
+
<spirit:volatile>true</spirit:volatile>
|
|
276
|
+
<spirit:access>read-write</spirit:access>
|
|
277
|
+
<spirit:testable>false</spirit:testable>
|
|
278
|
+
</spirit:field>
|
|
279
|
+
<spirit:field>
|
|
280
|
+
<spirit:name>Reserved2</spirit:name>
|
|
281
|
+
<spirit:description>Reserved</spirit:description>
|
|
282
|
+
<spirit:bitOffset>16</spirit:bitOffset>
|
|
283
|
+
<spirit:bitWidth>16</spirit:bitWidth>
|
|
284
|
+
<spirit:volatile>true</spirit:volatile>
|
|
285
|
+
<spirit:access>read-write</spirit:access>
|
|
286
|
+
<spirit:testable>false</spirit:testable>
|
|
287
|
+
</spirit:field>
|
|
288
|
+
</spirit:register>
|
|
289
|
+
<spirit:register>
|
|
290
|
+
<spirit:name>interruptClearRegister</spirit:name>
|
|
291
|
+
<spirit:description>If written with a '1', will clear corresponding bit(s) in interrupt pending register. A read returns 0.</spirit:description>
|
|
292
|
+
<spirit:addressOffset>0xc</spirit:addressOffset>
|
|
293
|
+
<spirit:size>32</spirit:size>
|
|
294
|
+
<spirit:access>read-write</spirit:access>
|
|
295
|
+
<spirit:field>
|
|
296
|
+
<spirit:name>Reserved1</spirit:name>
|
|
297
|
+
<spirit:description>Reserved</spirit:description>
|
|
298
|
+
<spirit:bitOffset>0</spirit:bitOffset>
|
|
299
|
+
<spirit:bitWidth>1</spirit:bitWidth>
|
|
300
|
+
<spirit:volatile>true</spirit:volatile>
|
|
301
|
+
<spirit:access>read-write</spirit:access>
|
|
302
|
+
<spirit:testable>false</spirit:testable>
|
|
303
|
+
</spirit:field>
|
|
304
|
+
<spirit:field>
|
|
305
|
+
<spirit:name>iforce</spirit:name>
|
|
306
|
+
<spirit:description>If written with a '1', will clear corresponding bit(s) in interrupt pending register. A read returns 0.</spirit:description>
|
|
307
|
+
<spirit:bitOffset>1</spirit:bitOffset>
|
|
308
|
+
<spirit:bitWidth>15</spirit:bitWidth>
|
|
309
|
+
<spirit:volatile>true</spirit:volatile>
|
|
310
|
+
<spirit:access>read-write</spirit:access>
|
|
311
|
+
<spirit:testable>false</spirit:testable>
|
|
312
|
+
</spirit:field>
|
|
313
|
+
<spirit:field>
|
|
314
|
+
<spirit:name>Reserved2</spirit:name>
|
|
315
|
+
<spirit:description>Reserved</spirit:description>
|
|
316
|
+
<spirit:bitOffset>16</spirit:bitOffset>
|
|
317
|
+
<spirit:bitWidth>16</spirit:bitWidth>
|
|
318
|
+
<spirit:volatile>true</spirit:volatile>
|
|
319
|
+
<spirit:access>read-write</spirit:access>
|
|
320
|
+
<spirit:testable>false</spirit:testable>
|
|
321
|
+
</spirit:field>
|
|
322
|
+
</spirit:register>
|
|
323
|
+
<spirit:register>
|
|
324
|
+
<spirit:name>interruptReadClearPendingRegister</spirit:name>
|
|
325
|
+
<spirit:description>interruptReadClearPendingRegister</spirit:description>
|
|
326
|
+
<spirit:addressOffset>0x10</spirit:addressOffset>
|
|
327
|
+
<spirit:size>32</spirit:size>
|
|
328
|
+
<spirit:volatile>true</spirit:volatile>
|
|
329
|
+
<spirit:access>read-write</spirit:access>
|
|
330
|
+
</spirit:register>
|
|
331
|
+
</spirit:addressBlock>
|
|
332
|
+
</spirit:memoryMap>
|
|
333
|
+
</spirit:memoryMaps>
|
|
334
|
+
<spirit:model>
|
|
335
|
+
<spirit:views>
|
|
336
|
+
<spirit:view>
|
|
337
|
+
<spirit:name>TLM_PV</spirit:name>
|
|
338
|
+
<spirit:envIdentifier>:*Simulation:</spirit:envIdentifier>
|
|
339
|
+
<spirit:language>systemc</spirit:language>
|
|
340
|
+
<spirit:modelName>irqctrl</spirit:modelName>
|
|
341
|
+
<spirit:fileSetRef>
|
|
342
|
+
<spirit:localName>sourceCode</spirit:localName>
|
|
343
|
+
</spirit:fileSetRef>
|
|
344
|
+
</spirit:view>
|
|
345
|
+
</spirit:views>
|
|
346
|
+
<spirit:ports>
|
|
347
|
+
<spirit:port>
|
|
348
|
+
<spirit:name>apb_slave_port</spirit:name>
|
|
349
|
+
<spirit:transactional>
|
|
350
|
+
<spirit:transTypeDef>
|
|
351
|
+
<spirit:typeName>pv_target_port</spirit:typeName>
|
|
352
|
+
<spirit:typeDefinition>pv_target_port.h</spirit:typeDefinition>
|
|
353
|
+
</spirit:transTypeDef>
|
|
354
|
+
<spirit:service>
|
|
355
|
+
<spirit:initiative>provides</spirit:initiative>
|
|
356
|
+
<spirit:serviceTypeDefs>
|
|
357
|
+
<spirit:serviceTypeDef>
|
|
358
|
+
<spirit:typeName spirit:implicit="true">OSCI_TLM_PV</spirit:typeName>
|
|
359
|
+
<spirit:parameters>
|
|
360
|
+
<spirit:parameter>
|
|
361
|
+
<spirit:name>typedef1</spirit:name>
|
|
362
|
+
<spirit:value>ADDRESS_TYPE</spirit:value>
|
|
363
|
+
</spirit:parameter>
|
|
364
|
+
<spirit:parameter>
|
|
365
|
+
<spirit:name>typedef2</spirit:name>
|
|
366
|
+
<spirit:value>DATA_TYPE</spirit:value>
|
|
367
|
+
</spirit:parameter>
|
|
368
|
+
</spirit:parameters>
|
|
369
|
+
</spirit:serviceTypeDef>
|
|
370
|
+
</spirit:serviceTypeDefs>
|
|
371
|
+
</spirit:service>
|
|
372
|
+
</spirit:transactional>
|
|
373
|
+
</spirit:port>
|
|
374
|
+
<spirit:port>
|
|
375
|
+
<spirit:name>int0</spirit:name>
|
|
376
|
+
<spirit:wire>
|
|
377
|
+
<spirit:direction>in</spirit:direction>
|
|
378
|
+
<spirit:wireTypeDefs>
|
|
379
|
+
<spirit:wireTypeDef>
|
|
380
|
+
<spirit:typeName>int</spirit:typeName>
|
|
381
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
382
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
383
|
+
</spirit:wireTypeDef>
|
|
384
|
+
</spirit:wireTypeDefs>
|
|
385
|
+
<spirit:driver>
|
|
386
|
+
<spirit:defaultValue>0</spirit:defaultValue>
|
|
387
|
+
</spirit:driver>
|
|
388
|
+
</spirit:wire>
|
|
389
|
+
</spirit:port>
|
|
390
|
+
<spirit:port>
|
|
391
|
+
<spirit:name>int1</spirit:name>
|
|
392
|
+
<spirit:wire>
|
|
393
|
+
<spirit:direction>in</spirit:direction>
|
|
394
|
+
<spirit:wireTypeDefs>
|
|
395
|
+
<spirit:wireTypeDef>
|
|
396
|
+
<spirit:typeName>int</spirit:typeName>
|
|
397
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
398
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
399
|
+
</spirit:wireTypeDef>
|
|
400
|
+
</spirit:wireTypeDefs>
|
|
401
|
+
<spirit:driver>
|
|
402
|
+
<spirit:defaultValue>0</spirit:defaultValue>
|
|
403
|
+
</spirit:driver>
|
|
404
|
+
</spirit:wire>
|
|
405
|
+
</spirit:port>
|
|
406
|
+
<spirit:port>
|
|
407
|
+
<spirit:name>int2</spirit:name>
|
|
408
|
+
<spirit:wire>
|
|
409
|
+
<spirit:direction>in</spirit:direction>
|
|
410
|
+
<spirit:wireTypeDefs>
|
|
411
|
+
<spirit:wireTypeDef>
|
|
412
|
+
<spirit:typeName>int</spirit:typeName>
|
|
413
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
414
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
415
|
+
</spirit:wireTypeDef>
|
|
416
|
+
</spirit:wireTypeDefs>
|
|
417
|
+
<spirit:driver>
|
|
418
|
+
<spirit:defaultValue>0</spirit:defaultValue>
|
|
419
|
+
</spirit:driver>
|
|
420
|
+
</spirit:wire>
|
|
421
|
+
</spirit:port>
|
|
422
|
+
<spirit:port>
|
|
423
|
+
<spirit:name>int3</spirit:name>
|
|
424
|
+
<spirit:wire>
|
|
425
|
+
<spirit:direction>in</spirit:direction>
|
|
426
|
+
<spirit:wireTypeDefs>
|
|
427
|
+
<spirit:wireTypeDef>
|
|
428
|
+
<spirit:typeName>int</spirit:typeName>
|
|
429
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
430
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
431
|
+
</spirit:wireTypeDef>
|
|
432
|
+
</spirit:wireTypeDefs>
|
|
433
|
+
<spirit:driver>
|
|
434
|
+
<spirit:defaultValue>0</spirit:defaultValue>
|
|
435
|
+
</spirit:driver>
|
|
436
|
+
</spirit:wire>
|
|
437
|
+
</spirit:port>
|
|
438
|
+
<spirit:port>
|
|
439
|
+
<spirit:name>int4</spirit:name>
|
|
440
|
+
<spirit:wire>
|
|
441
|
+
<spirit:direction>in</spirit:direction>
|
|
442
|
+
<spirit:wireTypeDefs>
|
|
443
|
+
<spirit:wireTypeDef>
|
|
444
|
+
<spirit:typeName>int</spirit:typeName>
|
|
445
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
446
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
447
|
+
</spirit:wireTypeDef>
|
|
448
|
+
</spirit:wireTypeDefs>
|
|
449
|
+
<spirit:driver>
|
|
450
|
+
<spirit:defaultValue>0</spirit:defaultValue>
|
|
451
|
+
</spirit:driver>
|
|
452
|
+
</spirit:wire>
|
|
453
|
+
</spirit:port>
|
|
454
|
+
<spirit:port>
|
|
455
|
+
<spirit:name>irlout</spirit:name>
|
|
456
|
+
<spirit:wire>
|
|
457
|
+
<spirit:direction>out</spirit:direction>
|
|
458
|
+
<spirit:wireTypeDefs>
|
|
459
|
+
<spirit:wireTypeDef>
|
|
460
|
+
<spirit:typeName>int</spirit:typeName>
|
|
461
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
462
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
463
|
+
</spirit:wireTypeDef>
|
|
464
|
+
</spirit:wireTypeDefs>
|
|
465
|
+
</spirit:wire>
|
|
466
|
+
</spirit:port>
|
|
467
|
+
<spirit:port>
|
|
468
|
+
<spirit:name>irlin</spirit:name>
|
|
469
|
+
<spirit:wire>
|
|
470
|
+
<spirit:direction>in</spirit:direction>
|
|
471
|
+
<spirit:wireTypeDefs>
|
|
472
|
+
<spirit:wireTypeDef>
|
|
473
|
+
<spirit:typeName>int</spirit:typeName>
|
|
474
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
475
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
476
|
+
</spirit:wireTypeDef>
|
|
477
|
+
</spirit:wireTypeDefs>
|
|
478
|
+
</spirit:wire>
|
|
479
|
+
</spirit:port>
|
|
480
|
+
<spirit:port>
|
|
481
|
+
<spirit:name>intack</spirit:name>
|
|
482
|
+
<spirit:wire>
|
|
483
|
+
<spirit:direction>in</spirit:direction>
|
|
484
|
+
<spirit:wireTypeDefs>
|
|
485
|
+
<spirit:wireTypeDef>
|
|
486
|
+
<spirit:typeName>bool</spirit:typeName>
|
|
487
|
+
<spirit:typeDefinition>systemc.h</spirit:typeDefinition>
|
|
488
|
+
<spirit:viewNameRef>TLM_PV</spirit:viewNameRef>
|
|
489
|
+
</spirit:wireTypeDef>
|
|
490
|
+
</spirit:wireTypeDefs>
|
|
491
|
+
<spirit:driver>
|
|
492
|
+
<spirit:defaultValue>0</spirit:defaultValue>
|
|
493
|
+
</spirit:driver>
|
|
494
|
+
</spirit:wire>
|
|
495
|
+
</spirit:port>
|
|
496
|
+
</spirit:ports>
|
|
497
|
+
</spirit:model>
|
|
498
|
+
<spirit:fileSets>
|
|
499
|
+
<spirit:fileSet>
|
|
500
|
+
<spirit:name>sourceCode</spirit:name>
|
|
501
|
+
<spirit:file>
|
|
502
|
+
<spirit:name>tlmsrc/irqctrl.cc</spirit:name>
|
|
503
|
+
<spirit:fileType>systemCSource</spirit:fileType>
|
|
504
|
+
<spirit:dependency>tlmsrc</spirit:dependency>
|
|
505
|
+
</spirit:file>
|
|
506
|
+
<spirit:file>
|
|
507
|
+
<spirit:name>tlmsrc/irqctrl.h</spirit:name>
|
|
508
|
+
<spirit:fileType>systemCSource</spirit:fileType>
|
|
509
|
+
<spirit:isIncludeFile spirit:externalDeclarations="true">true</spirit:isIncludeFile>
|
|
510
|
+
<spirit:logicalName>timers</spirit:logicalName>
|
|
511
|
+
<spirit:dependency>../../PV</spirit:dependency>
|
|
512
|
+
</spirit:file>
|
|
513
|
+
<spirit:file>
|
|
514
|
+
<spirit:name>../../PV/pv_slave_base.h</spirit:name>
|
|
515
|
+
<spirit:fileType>unknown</spirit:fileType>
|
|
516
|
+
<spirit:isIncludeFile>true</spirit:isIncludeFile>
|
|
517
|
+
</spirit:file>
|
|
518
|
+
<spirit:file>
|
|
519
|
+
<spirit:name>../../PV/pv_target_port.h</spirit:name>
|
|
520
|
+
<spirit:fileType>unknown</spirit:fileType>
|
|
521
|
+
<spirit:isIncludeFile>true</spirit:isIncludeFile>
|
|
522
|
+
</spirit:file>
|
|
523
|
+
<spirit:file>
|
|
524
|
+
<spirit:name>../../PV/user_types.h</spirit:name>
|
|
525
|
+
<spirit:fileType>unknown</spirit:fileType>
|
|
526
|
+
<spirit:isIncludeFile>true</spirit:isIncludeFile>
|
|
527
|
+
</spirit:file>
|
|
528
|
+
</spirit:fileSet>
|
|
529
|
+
</spirit:fileSets>
|
|
530
|
+
</spirit:component>
|