ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
System.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2//
3// This file is part of ETISS. It is licensed under the BSD 3-Clause License; you may not use this file except in
4// compliance with the License. You should have received a copy of the license along with this project. If not, see the
5// LICENSE file.
16#include <stdlib.h>
17
18#include "etiss/System.h"
19#include "etiss/jit/System.h"
20#include "etiss/jit/CPU.h"
21
23{
24 return ((etiss::System *)handle)->iread(cpu, addr, length);
25}
26static etiss_int32 system_call_iwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
28{
29 return ((etiss::System *)handle)->iwrite(cpu, addr, buffer, length);
30}
31
32static etiss_int32 system_call_dread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
34{
35 return ((etiss::System *)handle)->dread(cpu, addr, buffer, length);
36}
37static etiss_int32 system_call_dwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
39{
40 return ((etiss::System *)handle)->dwrite(cpu, addr, buffer, length);
41}
42
44{
45 return ((etiss::System *)handle)->dbg_read(addr, buffer, length);
46}
47
49{
50 return ((etiss::System *)handle)->dbg_write(addr, buffer, length);
51}
52
53static void system_call_syncTime(void *handle, ETISS_CPU *cpu)
54{
55 ((etiss::System *)handle)->syncTime(cpu);
56}
57
58std::shared_ptr<ETISS_System> etiss::wrap(etiss::System *sys)
59{
60 if (sys == 0)
61 return 0;
62 ETISS_System *ret = new ETISS_System();
63
66
69
72
74
75 ret->handle = (void *)sys;
76
77 return std::shared_ptr<ETISS_System>(ret);
78}
79
80#ifdef __cplusplus
81extern "C"
82{
83#endif
85 {
86 return sys->iread != 0 && sys->iwrite != 0 && sys->dread != 0 && sys->dwrite != 0 && sys->syncTime != 0;
87 }
88
89#ifdef __cplusplus
90}
91#endif
92
93namespace etiss
94{
95
96etiss::int32 SimpleSystem::iread(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint32 len)
97{
98 // disabled since this read function is only intended for timing purpose
99 // if (!read(false,cpu,addr,0,len))
100 // return IBUS_READ_ERROR;
101
102 return 0;
103}
104etiss::int32 SimpleSystem::iwrite(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
105{
106 if (!write(false, cpu, addr, buf, len))
107 return etiss::RETURNCODE::IBUS_WRITE_ERROR;
108
109 return 0;
110}
111etiss::int32 SimpleSystem::dread(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
112{
113 if (!read(false, cpu, addr, buf, len))
114 return etiss::RETURNCODE::DBUS_READ_ERROR;
115
116 return 0;
117}
118etiss::int32 SimpleSystem::dwrite(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
119{
120 if (!write(false, cpu, addr, buf, len))
121 return etiss::RETURNCODE::IBUS_WRITE_ERROR;
122
123 return 0;
124}
125etiss::int32 SimpleSystem::dbg_read(etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
126{
127 if (!read(true, 0, addr, buf, len))
128 return etiss::RETURNCODE::DBUS_READ_ERROR;
129
130 return 0;
131}
132etiss::int32 SimpleSystem::dbg_write(etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
133{
134 if (!write(true, 0, addr, buf, len))
135 return etiss::RETURNCODE::DBUS_WRITE_ERROR;
136
137 return 0;
138}
140{
141 // NOP
142}
143etiss::int32 dbg_print(etiss::uint32 reg)
144{
145 // NOP
146 return 0;
147}
148} // namespace etiss
static void system_call_syncTime(void *handle, ETISS_CPU *cpu)
Definition System.cpp:53
static etiss_int32 system_call_dbg_read(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
Definition System.cpp:43
static etiss_int32 system_call_iread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint32 length)
Definition System.cpp:22
static etiss_int32 system_call_dwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
Definition System.cpp:37
static etiss_int32 system_call_dread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
Definition System.cpp:32
int ETISS_System_isvalid(ETISS_System *sys)
Definition System.cpp:84
static etiss_int32 system_call_dbg_write(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
Definition System.cpp:48
static etiss_int32 system_call_iwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
Definition System.cpp:26
uint64_t etiss_uint64
Definition types.h:58
uint32_t etiss_uint32
Definition types.h:55
uint8_t etiss_uint8
Definition types.h:49
int32_t etiss_int32
Definition types.h:54
virtual etiss::int32 dread(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
Data read operation.
Definition System.cpp:111
virtual etiss::int32 dwrite(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
Data write operation.
Definition System.cpp:118
virtual etiss::int32 iread(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint32 len)
Instruction read operation.
Definition System.cpp:96
virtual bool write(bool debug, ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)=0
virtual etiss::int32 dbg_read(etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
Debug read operation.
Definition System.cpp:125
virtual etiss::int32 dbg_write(etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
Debug write operation.
Definition System.cpp:132
virtual bool read(bool debug, ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)=0
virtual etiss::int32 iwrite(ETISS_CPU *cpu, etiss::uint64 addr, etiss::uint8 *buf, etiss::uint32 len)
Instruction write operation.
Definition System.cpp:104
virtual void syncTime(ETISS_CPU *cpu)
Synchronize simulation time.
Definition System.cpp:139
System Interface for the basic system IO operations and time synchronization.
Definition System.h:38
conatins a convinience class that can be wrapped as a ETISS_System structure
forwards: include/jit/*
Definition Benchmark.h:17
etiss::int32 dbg_print(etiss::uint32 reg)
Definition System.cpp:143
std::shared_ptr< ETISS_System > wrap(etiss::System *sys)
wraps a etiss::System in a ETISS_System structure.
Definition System.cpp:58
float __ovld __cnfn length(float p)
Return the length of vector p, i.e., sqrt(p.x2 + p.y 2 + ...)
basic cpu state structure needed for execution of any cpu architecture.
Definition CPU.h:51
memory access and time synchronization functions.
Definition System.h:40
etiss_int32(* dwrite)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
write data
Definition System.h:59
etiss_int32(* iread)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint32 length)
used to simulate an instruction fetch.
Definition System.h:46
void * handle
custom handle that will be passed to the functions of this structure
Definition System.h:78
etiss_int32(* dbg_write)(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
direct debug write
Definition System.h:70
etiss_int32(* dbg_read)(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
direct debug read
Definition System.h:66
etiss_int32(* dread)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
read data
Definition System.h:55
void(* syncTime)(void *handle, ETISS_CPU *cpu)
called after a block to synchronize the time
Definition System.h:76
etiss_int32(* iwrite)(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
write instruction data over instruction bus
Definition System.h:50