The Sparta Modeling Framework
Loading...
Searching...
No Matches
SpartaMemory.cpp
1
2#include "SpartaMemory.hpp"
3
4namespace sparta_target
5{
6 void SpartaMemory::receiveMemoryRequest_(const MemoryRequest & request)
7 {
8 uint8_t *data = request.data;
9 sparta::memory::addr_t address = request.addr;
10 uint32_t length = request.size;
11 sparta::Clock::Cycle delay = 0;
12 switch(request.cmd)
13 {
14 case MemoryRequest::Command::READ:
15 for (unsigned int i = 0; i < length; i++)
16 {
17 data[i] = m_memory[address++]; // move the data to memory
18 }
19 delay = read_response_delay_;
20 break;
21 case MemoryRequest::Command::WRITE:
22 for (unsigned int i = 0; i < length; i++)
23 {
24 m_memory[address++] = data[i]; // move the data to memory
25 }
26 delay = write_response_delay_;
27 break;
28 case MemoryRequest::Command::UNKNOWN:
29 sparta_assert(false, "Received a bad command");
30 break;
31 }
33 info_logger_ << request << " delay: " << delay;
34 }
35 ev_drive_response_.preparePayload(request)->schedule(delay);
36 }
37
38 void SpartaMemory::driveMemoryResponse_(const MemoryRequest & req)
39 {
41 info_logger_ << req << " responding";
42 }
43 out_memory_response_.send(req);
44 }
45
46}
#define sparta_assert(...)
Simple variadic assertion that will throw a sparta_exception if the condition fails.
#define SPARTA_EXPECT_FALSE(x)
A macro for hinting to the compiler a particular condition should be considered most likely false.
log::MessageSource info_logger_
Default info logger.
Definition Unit.hpp:161
uint64_t addr_t
Type for generic address representation in generic interfaces, errors and printouts within SPARTA.