add sim output artifact and move some of the data into publicly readable variables
This commit is contained in:
parent
9afc044002
commit
d6ef1dbf0d
2 changed files with 132 additions and 0 deletions
|
|
@ -29,6 +29,7 @@
|
|||
#include <unordered_map>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include "db_types.hpp"
|
||||
#include "util.h"
|
||||
|
||||
namespace pl {
|
||||
|
|
@ -74,6 +75,31 @@ class Artifact {
|
|||
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief Construct a new blank Artifact
|
||||
*
|
||||
*/
|
||||
Artifact();
|
||||
|
||||
/**
|
||||
* @brief Construct a new Artifact with a database UUID attached to it.
|
||||
*
|
||||
* This should be used when downloading the artifact from the database.
|
||||
* This ID is actually required when an update in the database is required.
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
Artifact(db::uuid_t& id);
|
||||
|
||||
/**
|
||||
* @brief The ID of this object in the database
|
||||
*
|
||||
* This ID will be 0 if this artifact is not tied to anything in the
|
||||
* database yet, as IDs are assigned on first upload.
|
||||
*
|
||||
*/
|
||||
const db::uuid_t& id = id_;
|
||||
|
||||
/**
|
||||
* @brief Get the type of the artifact the object is holding.
|
||||
*
|
||||
|
|
@ -102,6 +128,26 @@ class Artifact {
|
|||
* @return long The number of elements in this artifact
|
||||
*/
|
||||
virtual long get_size() = 0;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Inform a tool whether this artifact can be handled by multiple nodes
|
||||
*
|
||||
* By default, one artifact should only be handled once. However, there might be
|
||||
* situations where multiple nodes can handle a single artifact. This could for example
|
||||
* be a situation where a simulation for a design has a coverage model for constrained
|
||||
* random testing. In this case we want to cover everything as fast as possible and
|
||||
* simulation can be distributed.
|
||||
*
|
||||
* @return true The artifact can be handled by multiple nodes
|
||||
* @return false The artifact cannot be handled by multiple nodes
|
||||
*/
|
||||
bool parallelizable() { return false; };
|
||||
|
||||
protected:
|
||||
|
||||
db::uuid_t id_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -154,6 +200,8 @@ class ActArtifact: public Artifact {
|
|||
struct testcase_t {
|
||||
/** Commands to be executed for this testcase */
|
||||
std::vector<std::string> commands;
|
||||
/** This simulation should be run by multiple noes */
|
||||
bool parallelizable;
|
||||
/** Maximum pipeline load factor that should be allowed */
|
||||
float max_plf;
|
||||
};
|
||||
|
|
@ -164,6 +212,14 @@ struct testcase_t {
|
|||
class SimConfigArtifact: public Artifact {
|
||||
public:
|
||||
|
||||
SimConfigArtifact();
|
||||
SimConfigArtifact(db::uuid_t& id, db::uuid_t& design);
|
||||
|
||||
/**
|
||||
* @brief The UUID of the design this simulation uses
|
||||
*/
|
||||
const db::uuid_t& design = design_;
|
||||
|
||||
/**
|
||||
* @brief Get the content of the artifact
|
||||
*
|
||||
|
|
@ -195,9 +251,27 @@ class SimConfigArtifact: public Artifact {
|
|||
*/
|
||||
long get_size() { return testcases.size(); };
|
||||
|
||||
/**
|
||||
* @brief Can this simulation be handled by multiple nodes
|
||||
*
|
||||
* By default, one artifact should only be handled once. However, there might be
|
||||
* situations where multiple nodes can handle a single artifact. This could for example
|
||||
* be a situation where a simulation for a design has a coverage model for constrained
|
||||
* random testing. In this case we want to cover everything as fast as possible and
|
||||
* simulation can be distributed.
|
||||
*
|
||||
* @return true The simulation can be handled by multiple nodes
|
||||
* @return false The simulation cannot be handled by multiple nodes
|
||||
*/
|
||||
bool parallelizable() {
|
||||
if (this->testcases.size() != 1) return false;
|
||||
return this->testcases.front().parallelizable;
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
std::vector<testcase_t> testcases;
|
||||
db::uuid_t design_;
|
||||
};
|
||||
|
||||
/** Reference to a signal in an ACT design */
|
||||
|
|
@ -245,6 +319,48 @@ class SignalListArtifact: public Artifact {
|
|||
std::vector<signal_t> signals;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Artifact containing simulator output from actsim
|
||||
*/
|
||||
class SimOutputArtifact: public Artifact {
|
||||
public:
|
||||
|
||||
/**
|
||||
* @brief Get the content of the artifact
|
||||
*
|
||||
* @return std::vector<testcase_t> Vector of all generated simulator output lines
|
||||
*/
|
||||
std::vector<std::string>& get_content() { return sim_log; };
|
||||
|
||||
|
||||
/**
|
||||
* @brief Add a log line to the artifact
|
||||
*
|
||||
* @param log_line
|
||||
*/
|
||||
void add_log_output(std::string log_line);
|
||||
|
||||
|
||||
/**
|
||||
* @brief Returns the type of this artifact, which is SIM_OUTPUT.
|
||||
*
|
||||
* @return ArtifactType Will return the SIM_OUTPUT artifact type.
|
||||
*/
|
||||
constexpr ArtifactType get_type() override { return ArtifactType::SIM_OUTPUT; };
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the number of log lines stored in this artifact
|
||||
*
|
||||
* @return long The size of the log lines vector
|
||||
*/
|
||||
long get_size() { return sim_log.size(); };
|
||||
|
||||
private:
|
||||
|
||||
std::vector<std::string> sim_log;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -26,12 +26,28 @@
|
|||
|
||||
namespace pl {
|
||||
|
||||
Artifact::Artifact() {}
|
||||
|
||||
Artifact::Artifact(db::uuid_t& id) {
|
||||
this->id_ = id;
|
||||
}
|
||||
|
||||
void SimConfigArtifact::add_testcase(testcase_t testcase) {
|
||||
this->testcases.emplace_back(testcase);
|
||||
}
|
||||
|
||||
SimConfigArtifact::SimConfigArtifact() {}
|
||||
|
||||
SimConfigArtifact::SimConfigArtifact(db::uuid_t& id, db::uuid_t& design) : Artifact(id) {
|
||||
this->design_ = design;
|
||||
}
|
||||
|
||||
void SignalListArtifact::add_signal(signal_t signal) {
|
||||
this->signals.emplace_back(signal);
|
||||
}
|
||||
|
||||
void SimOutputArtifact::add_log_output(std::string log_line) {
|
||||
this->sim_log.emplace_back(log_line);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue