diff options
Diffstat (limited to 'backends/cxxrtl/cxxrtl.h')
-rw-r--r-- | backends/cxxrtl/cxxrtl.h | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/backends/cxxrtl/cxxrtl.h b/backends/cxxrtl/cxxrtl.h index 0b330fa8f..b79bbbc72 100644 --- a/backends/cxxrtl/cxxrtl.h +++ b/backends/cxxrtl/cxxrtl.h @@ -659,7 +659,7 @@ struct memory { } }; -struct parameter { +struct metadata { const enum { MISSING = 0, UINT = 1, @@ -677,15 +677,15 @@ struct parameter { const std::string string_value = ""; const double double_value = 0.0; - parameter() : value_type(MISSING) {} - parameter(unsigned value) : value_type(UINT), uint_value(value) {} - parameter(signed value) : value_type(SINT), sint_value(value) {} - parameter(const std::string &value) : value_type(STRING), string_value(value) {} - parameter(const char *value) : value_type(STRING), string_value(value) {} - parameter(double value) : value_type(DOUBLE), double_value(value) {} + metadata() : value_type(MISSING) {} + metadata(unsigned value) : value_type(UINT), uint_value(value) {} + metadata(signed value) : value_type(SINT), sint_value(value) {} + metadata(const std::string &value) : value_type(STRING), string_value(value) {} + metadata(const char *value) : value_type(STRING), string_value(value) {} + metadata(double value) : value_type(DOUBLE), double_value(value) {} - parameter(const parameter &) = default; - parameter &operator=(const parameter &) = delete; + metadata(const metadata &) = default; + metadata &operator=(const metadata &) = delete; unsigned as_uint() const { assert(value_type == UINT); @@ -708,7 +708,7 @@ struct parameter { } }; -typedef std::map<std::string, parameter> parameter_map; +typedef std::map<std::string, metadata> metadata_map; struct module { module() {} @@ -717,15 +717,16 @@ struct module { module(const module &) = delete; module &operator=(const module &) = delete; - virtual void eval() = 0; + virtual bool eval() = 0; virtual bool commit() = 0; size_t step() { size_t deltas = 0; + bool converged = false; do { - eval(); + converged = eval(); deltas++; - } while (commit()); + } while (commit() && !converged); return deltas; } }; |