1 //
2 // Copyright (c) 2010-2024 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 #ifndef RENODE_CFU_H
8 #define RENODE_CFU_H
9 #include <stdarg.h>
10 #include <stdio.h>
11 #include "buses/cfu.h"
12 #include "renode.h"
13 
14 class RenodeAgent;
15 struct Protocol;
16 
17 enum CfuStatus
18 {
19   CFU_OK      = 0,
20   CFU_FAIL    = 1,
21   CFU_TIMEOUT = 2,
22 };
23 
24 extern RenodeAgent *Init(void); //definition has to be provided in sim_main.cpp of cosimulated CFU
25 
26 extern "C"
27 {
28   uint64_t execute(uint32_t functionID, uint32_t data0, uint32_t data1, int* error);
29   void initialize_native();
30   void handle_request(Protocol* request);
31   void reset_peripheral();
32 }
33 
34 class NativeCommunicationChannel
35 {
36 public:
37   NativeCommunicationChannel() = default;
38   void sendSender(const Protocol message);
39   void log(int logLevel, const char* data);
40   Protocol* receive();
41 };
42 
43 class RenodeAgent
44 {
45 public:
46   RenodeAgent(Cfu *cfu);
47   virtual void reset();
48   virtual uint64_t execute(uint32_t functionID, uint32_t data0, uint32_t data1, int* error);
49   virtual void handleCustomRequestType(Protocol* message);
50   virtual void log(int level, const char* fmt, ...);
51   virtual void tick(bool countEnable, uint64_t steps);
52 
53   Cfu *cfu;
54 
55 protected:
56   NativeCommunicationChannel* communicationChannel;
57 
58 private:
59   friend void ::handle_request(Protocol* request);
60   friend void ::initialize_native(void);
61   friend void ::reset_peripheral(void);
62 };
63 
64 #endif
65