Modules#
Overview#
In the Xmera simulation framework, a module is a self-contained component that performs a specific simulation task, such as dynamics modeling, sensor processing, or control logic. Modules inherit from the SysModel interface and follow a common structure to ensure they can be scheduled and run within a simulation task.
Requirements#
Every module must:
Inherit from SysModel
Implement the following virtual methods:
void Reset(uint64_t CurrentSimNanos)void UpdateState(uint64_t CurrentSimNanos)
Example#
#include "architecture/_GeneralModuleFiles/sys_model.h"
#include <iostream>
class MyExampleModule : public SysModel {
public:
MyExampleModule() {
this->modelTag = "MyExampleModule";
}
void reset(uint64_t currentSimNanos) override {
std::cout << "[" << modelTag << "] Reset at t=" << currentSimNanos << std::endl;
}
void updateState(uint64_t currentSimNanos) override {
std::cout << "[" << modelTag << "] Updating at t=" << currentSimNanos << std::endl;
}
};
Input/Output#
Modules typically use the Xmera messaging system to receive inputs and publish outputs.
ReadFunctor<ExampleMsgPayload> inputMsg;
Message<ExampleOutputMsgPayload> outputMsg;
void reset(uint64_t currentSimNanos) override {
// Optional: validate message is linked
}
void update(uint64_t currentSimNanos) override {
ExampleMsgPayload input = this->inputMsg();
ExampleOutputMsgPayload output = {};
// Compute results using `input`
this->outputMsg.write(&output, currentSimNanos);
}