gem5
[DEVELOP-FOR-23.0]
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
o
p
q
r
s
t
v
x
Enumerator
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
w
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Related Functions
:
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Functions
a
b
c
d
e
f
g
h
i
l
m
n
o
p
s
t
v
Variables
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
Typedefs
a
b
c
d
g
h
i
l
m
r
s
t
u
w
Enumerations
b
h
i
o
p
Enumerator
h
i
o
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
systemc
channel
sc_signal_resolved.cc
Go to the documentation of this file.
1
/*
2
* Copyright 2018 Google, Inc.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions are
6
* met: redistributions of source code must retain the above copyright
7
* notice, this list of conditions and the following disclaimer;
8
* redistributions in binary form must reproduce the above copyright
9
* notice, this list of conditions and the following disclaimer in the
10
* documentation and/or other materials provided with the distribution;
11
* neither the name of the copyright holders nor the names of its
12
* contributors may be used to endorse or promote products derived from
13
* this software without specific prior written permission.
14
*
15
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
*/
27
28
#include "
systemc/core/process.hh
"
29
#include "
systemc/core/scheduler.hh
"
30
#include "
systemc/ext/channel/sc_signal_resolved.hh
"
31
#include "
systemc/ext/core/sc_module.hh
"
// for sc_gen_unique_name
32
33
namespace
sc_core
34
{
35
36
sc_signal_resolved::sc_signal_resolved
() :
sc_interface
(),
37
sc_signal
<
sc_dt
::sc_logic,
SC_MANY_WRITERS
>(
38
sc_gen_unique_name
(
"signal_resolved"
))
39
{}
40
41
sc_signal_resolved::sc_signal_resolved
(
const
char
*
name
) :
42
sc_interface
(),
sc_signal
<
sc_dt
::sc_logic,
SC_MANY_WRITERS
>(
name
)
43
{}
44
45
sc_signal_resolved::~sc_signal_resolved
() {}
46
void
sc_signal_resolved::register_port
(
sc_port_base
&,
const
char
*) {}
47
48
void
49
sc_signal_resolved::write
(
const
sc_dt::sc_logic
&
l
)
50
{
51
::sc_gem5::Process
*
p
=
::sc_gem5::scheduler
.
current
();
52
53
auto
it =
inputs
.find(
p
);
54
if
(it ==
inputs
.end()) {
55
inputs
.emplace(
p
,
l
);
56
request_update
();
57
}
else
if
(it->second !=
l
) {
58
it->second =
l
;
59
request_update
();
60
}
61
}
62
63
sc_signal_resolved
&
64
sc_signal_resolved::operator =
(
const
sc_dt::sc_logic
&
l
)
65
{
66
write
(
l
);
67
return
*
this
;
68
}
69
70
sc_signal_resolved
&
71
sc_signal_resolved::operator =
(
const
sc_signal_resolved
&
r
)
72
{
73
write
(
r
.read());
74
return
*
this
;
75
}
76
77
void
78
sc_signal_resolved::update
()
79
{
80
using
sc_dt::Log_0
;
81
using
sc_dt::Log_1
;
82
using
sc_dt::Log_Z
;
83
using
sc_dt::Log_X
;
84
static
sc_dt::sc_logic_value_t
merge_table[4][4] = {
85
{
Log_0
,
Log_X
,
Log_0
,
Log_X
},
86
{
Log_X
,
Log_1
,
Log_1
,
Log_X
},
87
{
Log_0
,
Log_1
,
Log_Z
,
Log_X
},
88
{
Log_X
,
Log_X
,
Log_X
,
Log_X
}
89
};
90
91
// Resolve the inputs, and give the result to the underlying signal class.
92
m_new_val
=
Log_Z
;
93
for
(
auto
&input:
inputs
)
94
m_new_val
= merge_table[
m_new_val
.
value
()][input.second.value()];
95
96
// Ask the signal to update it's value.
97
sc_signal<sc_dt::sc_logic, SC_MANY_WRITERS>::update
();
98
}
99
100
}
// namespace sc_core
sc_core::sc_port_base
Definition:
sc_port.hh:74
sc_dt
Definition:
sc_bit.cc:67
sc_core::sc_signal_resolved::sc_signal_resolved
sc_signal_resolved()
Definition:
sc_signal_resolved.cc:36
sc_core
Definition:
messages.cc:31
sc_dt::sc_logic::value
sc_logic_value_t value() const
Definition:
sc_logic.hh:268
sc_core::sc_interface
Definition:
sc_interface.hh:37
gem5::VegaISA::r
Bitfield< 5 > r
Definition:
pagetable.hh:60
sc_core::sc_signal
Definition:
sc_signal.hh:272
sc_dt::sc_logic
Definition:
sc_logic.hh:130
sc_core::sc_prim_channel::request_update
void request_update()
Definition:
sc_prim.cc:70
sc_dt::sc_logic_value_t
sc_logic_value_t
Definition:
sc_logic.hh:116
sc_core::sc_signal_resolved::register_port
virtual void register_port(sc_port_base &, const char *)
Definition:
sc_signal_resolved.cc:46
sc_core::SC_MANY_WRITERS
@ SC_MANY_WRITERS
Definition:
sc_signal_inout_if.hh:40
sc_core::sc_signal_resolved::operator=
sc_signal_resolved & operator=(const sc_dt::sc_logic &)
Definition:
sc_signal_resolved.cc:64
sc_core::sc_signal_resolved::update
virtual void update()
Definition:
sc_signal_resolved.cc:78
gem5::VegaISA::p
Bitfield< 54 > p
Definition:
pagetable.hh:70
sc_dt::Log_Z
@ Log_Z
Definition:
sc_logic.hh:120
sc_signal_resolved.hh
sc_core::sc_gen_unique_name
const char * sc_gen_unique_name(const char *seed)
Definition:
sc_module.cc:820
sc_gem5::Process
Definition:
process.hh:62
sc_gem5::ScSignalBaseT< sc_dt::sc_logic, WRITER_POLICY >::m_new_val
sc_dt::sc_logic m_new_val
Definition:
sc_signal.hh:236
name
const std::string & name()
Definition:
trace.cc:48
sc_module.hh
process.hh
sc_core::sc_signal_resolved
Definition:
sc_signal_resolved.hh:55
sc_gem5::Scheduler::current
Process * current()
Definition:
scheduler.hh:185
sc_core::sc_signal::update
virtual void update()
Definition:
sc_signal.hh:301
sc_dt::Log_X
@ Log_X
Definition:
sc_logic.hh:121
gem5::VegaISA::l
Bitfield< 55 > l
Definition:
pagetable.hh:54
sc_gem5::scheduler
Scheduler scheduler
Definition:
scheduler.cc:494
sc_core::sc_signal_resolved::~sc_signal_resolved
virtual ~sc_signal_resolved()
Definition:
sc_signal_resolved.cc:45
sc_dt::Log_0
@ Log_0
Definition:
sc_logic.hh:118
sc_dt::Log_1
@ Log_1
Definition:
sc_logic.hh:119
sc_core::sc_signal_resolved::write
virtual void write(const sc_dt::sc_logic &)
Definition:
sc_signal_resolved.cc:49
sc_core::sc_signal_resolved::inputs
std::map<::sc_gem5::Process *, sc_dt::sc_logic > inputs
Definition:
sc_signal_resolved.hh:79
scheduler.hh
Generated on Sun Jul 30 2023 01:57:00 for gem5 by
doxygen
1.8.17