mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 17:15:33 +00:00
Using log_assert() instead of assert()
This commit is contained in:
parent
d86a25f145
commit
7bd2d1064f
52 changed files with 236 additions and 251 deletions
|
@ -66,8 +66,8 @@ struct BitPatternPool
|
|||
|
||||
bool match(bits_t a, bits_t b)
|
||||
{
|
||||
assert(int(a.size()) == width);
|
||||
assert(int(b.size()) == width);
|
||||
log_assert(int(a.size()) == width);
|
||||
log_assert(int(b.size()) == width);
|
||||
for (int i = 0; i < width; i++)
|
||||
if (a[i] <= RTLIL::State::S1 && b[i] <= RTLIL::State::S1 && a[i] != b[i])
|
||||
return false;
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
#include "kernel/log.h"
|
||||
#include "kernel/rtlil.h"
|
||||
#include "libs/bigint/BigIntegerLibrary.hh"
|
||||
#include <assert.h>
|
||||
|
||||
static void extend(RTLIL::Const &arg, int width, bool is_signed)
|
||||
{
|
||||
|
|
|
@ -313,7 +313,7 @@ struct CellTypes
|
|||
return ret;
|
||||
}
|
||||
|
||||
assert(sel.bits.size() == 0);
|
||||
log_assert(sel.bits.size() == 0);
|
||||
return eval(cell, arg1, arg2);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -72,7 +72,7 @@ struct ConstEval
|
|||
#ifndef NDEBUG
|
||||
RTLIL::SigSpec current_val = values_map(sig);
|
||||
for (int i = 0; i < SIZE(current_val); i++)
|
||||
assert(current_val[i].wire != NULL || current_val[i] == value.bits[i]);
|
||||
log_assert(current_val[i].wire != NULL || current_val[i] == value.bits[i]);
|
||||
#endif
|
||||
values_map.add(sig, RTLIL::SigSpec(value));
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ struct ConstEval
|
|||
{
|
||||
RTLIL::SigSpec sig_a, sig_b, sig_s, sig_y;
|
||||
|
||||
assert(cell->has("\\Y"));
|
||||
log_assert(cell->has("\\Y"));
|
||||
sig_y = values_map(assign_map(cell->get("\\Y")));
|
||||
if (sig_y.is_fully_const())
|
||||
return true;
|
||||
|
@ -133,7 +133,7 @@ struct ConstEval
|
|||
|
||||
std::vector<RTLIL::Const> y_values;
|
||||
|
||||
assert(y_candidates.size() > 0);
|
||||
log_assert(y_candidates.size() > 0);
|
||||
for (auto &yc : y_candidates) {
|
||||
if (!eval(yc, undef, cell))
|
||||
return false;
|
||||
|
@ -146,7 +146,7 @@ struct ConstEval
|
|||
|
||||
for (size_t i = 1; i < y_values.size(); i++) {
|
||||
std::vector<RTLIL::State> &slave_bits = y_values.at(i).bits;
|
||||
assert(master_bits.size() == slave_bits.size());
|
||||
log_assert(master_bits.size() == slave_bits.size());
|
||||
for (size_t j = 0; j < master_bits.size(); j++)
|
||||
if (master_bits[j] != slave_bits[j])
|
||||
master_bits[j] = RTLIL::State::Sx;
|
||||
|
|
|
@ -327,7 +327,7 @@ static void shell(RTLIL::Design *design)
|
|||
}
|
||||
|
||||
try {
|
||||
assert(design->selection_stack.size() == 1);
|
||||
log_assert(design->selection_stack.size() == 1);
|
||||
Pass::call(design, command);
|
||||
} catch (log_cmd_error_expection) {
|
||||
while (design->selection_stack.size() > 1)
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
*/
|
||||
|
||||
#include "kernel/log.h"
|
||||
#include "kernel/rtlil.h"
|
||||
#include "kernel/register.h"
|
||||
#include "kernel/compatibility.h"
|
||||
#include "backends/ilang/ilang_backend.h"
|
||||
|
||||
|
@ -29,9 +31,6 @@
|
|||
#include <vector>
|
||||
#include <list>
|
||||
|
||||
// declared extern in log.h
|
||||
std::map<std::string, std::pair<std::string, int>> extra_coverage_data;
|
||||
|
||||
std::vector<FILE*> log_files;
|
||||
FILE *log_errfile = NULL;
|
||||
bool log_time = false;
|
||||
|
@ -192,6 +191,10 @@ void log_flush()
|
|||
fflush(f);
|
||||
}
|
||||
|
||||
void log_dump_val_worker(RTLIL::SigSpec v) {
|
||||
log("%s", log_signal(v));
|
||||
}
|
||||
|
||||
const char *log_signal(const RTLIL::SigSpec &sig, bool autoint)
|
||||
{
|
||||
char *ptr;
|
||||
|
@ -231,3 +234,51 @@ void log_cell(RTLIL::Cell *cell, std::string indent)
|
|||
free(ptr);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------
|
||||
// This is the magic behind the code coverage counters
|
||||
// ---------------------------------------------------
|
||||
|
||||
std::map<std::string, std::pair<std::string, int>> extra_coverage_data;
|
||||
|
||||
void cover_extra(std::string parent, std::string id, bool increment) {
|
||||
if (extra_coverage_data.count(id) == 0) {
|
||||
for (CoverData *p = __start_yosys_cover_list; p != __stop_yosys_cover_list; p++)
|
||||
if (p->id == parent)
|
||||
extra_coverage_data[id].first = stringf("%s:%d:%s", p->file, p->line, p->func);
|
||||
log_assert(extra_coverage_data.count(id));
|
||||
}
|
||||
if (increment)
|
||||
extra_coverage_data[id].second++;
|
||||
}
|
||||
|
||||
std::map<std::string, std::pair<std::string, int>> get_coverage_data()
|
||||
{
|
||||
std::map<std::string, std::pair<std::string, int>> coverage_data;
|
||||
|
||||
for (auto &it : REGISTER_INTERN::pass_register) {
|
||||
std::string key = stringf("passes.%s", it.first.c_str());
|
||||
coverage_data[key].first = stringf("%s:%d:%s", __FILE__, __LINE__, __FUNCTION__);
|
||||
coverage_data[key].second += it.second->call_counter;
|
||||
}
|
||||
|
||||
for (auto &it : extra_coverage_data) {
|
||||
if (coverage_data.count(it.first))
|
||||
log("WARNING: found duplicate coverage id \"%s\".\n", it.first.c_str());
|
||||
coverage_data[it.first].first = it.second.first;
|
||||
coverage_data[it.first].second += it.second.second;
|
||||
}
|
||||
|
||||
for (CoverData *p = __start_yosys_cover_list; p != __stop_yosys_cover_list; p++) {
|
||||
if (coverage_data.count(p->id))
|
||||
log("WARNING: found duplicate coverage id \"%s\".\n", p->id);
|
||||
coverage_data[p->id].first = stringf("%s:%d:%s", p->file, p->line, p->func);
|
||||
coverage_data[p->id].second += p->counter;
|
||||
}
|
||||
|
||||
for (auto &it : coverage_data)
|
||||
if (!it.second.first.compare(0, strlen(YOSYS_SRC "/"), YOSYS_SRC "/"))
|
||||
it.second.first = it.second.first.substr(strlen(YOSYS_SRC "/"));
|
||||
|
||||
return coverage_data;
|
||||
}
|
||||
|
||||
|
|
56
kernel/log.h
56
kernel/log.h
|
@ -20,15 +20,15 @@
|
|||
#ifndef LOG_H
|
||||
#define LOG_H
|
||||
|
||||
#include "kernel/rtlil.h"
|
||||
#include "kernel/register.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#define S__LINE__sub2(x) #x
|
||||
#define S__LINE__sub1(x) S__LINE__sub2(x)
|
||||
|
@ -59,6 +59,11 @@ void log_pop();
|
|||
void log_reset_stack();
|
||||
void log_flush();
|
||||
|
||||
namespace RTLIL {
|
||||
struct SigSpec;
|
||||
struct Cell;
|
||||
}
|
||||
|
||||
const char *log_signal(const RTLIL::SigSpec &sig, bool autoint = true);
|
||||
const char *log_id(std::string id);
|
||||
|
||||
|
@ -96,47 +101,8 @@ extern "C" struct CoverData __stop_yosys_cover_list[];
|
|||
|
||||
extern std::map<std::string, std::pair<std::string, int>> extra_coverage_data;
|
||||
|
||||
static inline void cover_extra(std::string parent, std::string id, bool increment = true) {
|
||||
if (extra_coverage_data.count(id) == 0) {
|
||||
for (CoverData *p = __start_yosys_cover_list; p != __stop_yosys_cover_list; p++)
|
||||
if (p->id == parent)
|
||||
extra_coverage_data[id].first = stringf("%s:%d:%s", p->file, p->line, p->func);
|
||||
log_assert(extra_coverage_data.count(id));
|
||||
}
|
||||
if (increment)
|
||||
extra_coverage_data[id].second++;
|
||||
}
|
||||
|
||||
static inline std::map<std::string, std::pair<std::string, int>> get_coverage_data()
|
||||
{
|
||||
std::map<std::string, std::pair<std::string, int>> coverage_data;
|
||||
|
||||
for (auto &it : REGISTER_INTERN::pass_register) {
|
||||
std::string key = stringf("passes.%s", it.first.c_str());
|
||||
coverage_data[key].first = stringf("%s:%d:%s", __FILE__, __LINE__, __FUNCTION__);
|
||||
coverage_data[key].second += it.second->call_counter;
|
||||
}
|
||||
|
||||
for (auto &it : extra_coverage_data) {
|
||||
if (coverage_data.count(it.first))
|
||||
log("WARNING: found duplicate coverage id \"%s\".\n", it.first.c_str());
|
||||
coverage_data[it.first].first = it.second.first;
|
||||
coverage_data[it.first].second += it.second.second;
|
||||
}
|
||||
|
||||
for (CoverData *p = __start_yosys_cover_list; p != __stop_yosys_cover_list; p++) {
|
||||
if (coverage_data.count(p->id))
|
||||
log("WARNING: found duplicate coverage id \"%s\".\n", p->id);
|
||||
coverage_data[p->id].first = stringf("%s:%d:%s", p->file, p->line, p->func);
|
||||
coverage_data[p->id].second += p->counter;
|
||||
}
|
||||
|
||||
for (auto &it : coverage_data)
|
||||
if (!it.second.first.compare(0, strlen(YOSYS_SRC "/"), YOSYS_SRC "/"))
|
||||
it.second.first = it.second.first.substr(strlen(YOSYS_SRC "/"));
|
||||
|
||||
return coverage_data;
|
||||
}
|
||||
void cover_extra(std::string parent, std::string id, bool increment = true);
|
||||
std::map<std::string, std::pair<std::string, int>> get_coverage_data();
|
||||
|
||||
#define cover_list(_id, ...) do { cover(_id); \
|
||||
std::string r = cover_list_worker(_id, __VA_ARGS__); \
|
||||
|
@ -234,9 +200,9 @@ static inline void log_dump_val_worker(bool v) { log("%s", v ? "true" : "false")
|
|||
static inline void log_dump_val_worker(double v) { log("%f", v); }
|
||||
static inline void log_dump_val_worker(const char *v) { log("%s", v); }
|
||||
static inline void log_dump_val_worker(std::string v) { log("%s", v.c_str()); }
|
||||
static inline void log_dump_val_worker(RTLIL::SigSpec v) { log("%s", log_signal(v)); }
|
||||
static inline void log_dump_val_worker(PerformanceTimer p) { log("%f seconds", p.sec()); }
|
||||
static inline void log_dump_args_worker(const char *p) { log_assert(*p == 0); }
|
||||
void log_dump_val_worker(RTLIL::SigSpec v);
|
||||
|
||||
template<typename T>
|
||||
static inline void log_dump_val_worker(T *ptr) { log("%p", ptr); }
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include "kernel/compatibility.h"
|
||||
#include "kernel/register.h"
|
||||
#include "kernel/log.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -50,7 +49,7 @@ Pass::Pass(std::string name, std::string short_help) : pass_name(name), short_he
|
|||
|
||||
void Pass::run_register()
|
||||
{
|
||||
assert(pass_register.count(pass_name) == 0);
|
||||
log_assert(pass_register.count(pass_name) == 0);
|
||||
pass_register[pass_name] = this;
|
||||
}
|
||||
|
||||
|
@ -67,7 +66,7 @@ void Pass::done_register()
|
|||
frontend_register.clear();
|
||||
pass_register.clear();
|
||||
backend_register.clear();
|
||||
assert(first_queued_pass == NULL);
|
||||
log_assert(first_queued_pass == NULL);
|
||||
}
|
||||
|
||||
Pass::~Pass()
|
||||
|
@ -252,10 +251,10 @@ Frontend::Frontend(std::string name, std::string short_help) : Pass("read_"+name
|
|||
|
||||
void Frontend::run_register()
|
||||
{
|
||||
assert(pass_register.count(pass_name) == 0);
|
||||
log_assert(pass_register.count(pass_name) == 0);
|
||||
pass_register[pass_name] = this;
|
||||
|
||||
assert(frontend_register.count(frontend_name) == 0);
|
||||
log_assert(frontend_register.count(frontend_name) == 0);
|
||||
frontend_register[frontend_name] = this;
|
||||
}
|
||||
|
||||
|
@ -265,7 +264,7 @@ Frontend::~Frontend()
|
|||
|
||||
void Frontend::execute(std::vector<std::string> args, RTLIL::Design *design)
|
||||
{
|
||||
assert(next_args.empty());
|
||||
log_assert(next_args.empty());
|
||||
do {
|
||||
FILE *f = NULL;
|
||||
next_args.clear();
|
||||
|
@ -383,10 +382,10 @@ Backend::Backend(std::string name, std::string short_help) : Pass("write_"+name,
|
|||
|
||||
void Backend::run_register()
|
||||
{
|
||||
assert(pass_register.count(pass_name) == 0);
|
||||
log_assert(pass_register.count(pass_name) == 0);
|
||||
pass_register[pass_name] = this;
|
||||
|
||||
assert(backend_register.count(backend_name) == 0);
|
||||
log_assert(backend_register.count(backend_name) == 0);
|
||||
backend_register[backend_name] = this;
|
||||
}
|
||||
|
||||
|
|
119
kernel/rtlil.cc
119
kernel/rtlil.cc
|
@ -23,7 +23,6 @@
|
|||
#include "frontends/verilog/verilog_frontend.h"
|
||||
#include "backends/ilang/ilang_backend.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <algorithm>
|
||||
|
||||
|
@ -238,15 +237,15 @@ RTLIL::Module *RTLIL::Design::module(RTLIL::IdString name)
|
|||
|
||||
void RTLIL::Design::add(RTLIL::Module *module)
|
||||
{
|
||||
assert(modules_.count(module->name) == 0);
|
||||
assert(refcount_modules_ == 0);
|
||||
log_assert(modules_.count(module->name) == 0);
|
||||
log_assert(refcount_modules_ == 0);
|
||||
modules_[module->name] = module;
|
||||
}
|
||||
|
||||
RTLIL::Module *RTLIL::Design::addModule(RTLIL::IdString name)
|
||||
{
|
||||
assert(modules_.count(name) == 0);
|
||||
assert(refcount_modules_ == 0);
|
||||
log_assert(modules_.count(name) == 0);
|
||||
log_assert(refcount_modules_ == 0);
|
||||
modules_[name] = new RTLIL::Module;
|
||||
modules_[name]->name = name;
|
||||
return modules_[name];
|
||||
|
@ -254,7 +253,7 @@ RTLIL::Module *RTLIL::Design::addModule(RTLIL::IdString name)
|
|||
|
||||
void RTLIL::Design::remove(RTLIL::Module *module)
|
||||
{
|
||||
assert(modules_.at(module->name) == module);
|
||||
log_assert(modules_.at(module->name) == module);
|
||||
modules_.erase(module->name);
|
||||
delete module;
|
||||
}
|
||||
|
@ -263,8 +262,8 @@ void RTLIL::Design::check()
|
|||
{
|
||||
#ifndef NDEBUG
|
||||
for (auto &it : modules_) {
|
||||
assert(it.first == it.second->name);
|
||||
assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
log_assert(it.first == it.second->name);
|
||||
log_assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
it.second->check();
|
||||
}
|
||||
#endif
|
||||
|
@ -760,57 +759,57 @@ void RTLIL::Module::check()
|
|||
{
|
||||
#ifndef NDEBUG
|
||||
for (auto &it : wires_) {
|
||||
assert(it.first == it.second->name);
|
||||
assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
assert(it.second->width >= 0);
|
||||
assert(it.second->port_id >= 0);
|
||||
log_assert(it.first == it.second->name);
|
||||
log_assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
log_assert(it.second->width >= 0);
|
||||
log_assert(it.second->port_id >= 0);
|
||||
for (auto &it2 : it.second->attributes) {
|
||||
assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
log_assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &it : memories) {
|
||||
assert(it.first == it.second->name);
|
||||
assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
assert(it.second->width >= 0);
|
||||
assert(it.second->size >= 0);
|
||||
log_assert(it.first == it.second->name);
|
||||
log_assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
log_assert(it.second->width >= 0);
|
||||
log_assert(it.second->size >= 0);
|
||||
for (auto &it2 : it.second->attributes) {
|
||||
assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
log_assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &it : cells_) {
|
||||
assert(it.first == it.second->name);
|
||||
assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
assert(it.second->type.size() > 0 && (it.second->type[0] == '\\' || it.second->type[0] == '$'));
|
||||
log_assert(it.first == it.second->name);
|
||||
log_assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
log_assert(it.second->type.size() > 0 && (it.second->type[0] == '\\' || it.second->type[0] == '$'));
|
||||
for (auto &it2 : it.second->connections()) {
|
||||
assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
log_assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
it2.second.check();
|
||||
}
|
||||
for (auto &it2 : it.second->attributes) {
|
||||
assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
log_assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
}
|
||||
for (auto &it2 : it.second->parameters) {
|
||||
assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
log_assert(it2.first.size() > 0 && (it2.first[0] == '\\' || it2.first[0] == '$'));
|
||||
}
|
||||
InternalCellChecker checker(this, it.second);
|
||||
checker.check();
|
||||
}
|
||||
|
||||
for (auto &it : processes) {
|
||||
assert(it.first == it.second->name);
|
||||
assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
log_assert(it.first == it.second->name);
|
||||
log_assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
// FIXME: More checks here..
|
||||
}
|
||||
|
||||
for (auto &it : connections_) {
|
||||
assert(it.first.size() == it.second.size());
|
||||
log_assert(it.first.size() == it.second.size());
|
||||
it.first.check();
|
||||
it.second.check();
|
||||
}
|
||||
|
||||
for (auto &it : attributes) {
|
||||
assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
log_assert(it.first.size() > 0 && (it.first[0] == '\\' || it.first[0] == '$'));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -934,7 +933,7 @@ void RTLIL::Module::remove(RTLIL::Cell *cell)
|
|||
|
||||
void RTLIL::Module::rename(RTLIL::Wire *wire, RTLIL::IdString new_name)
|
||||
{
|
||||
assert(wires_[wire->name] == wire);
|
||||
log_assert(wires_[wire->name] == wire);
|
||||
log_assert(refcount_wires_ == 0);
|
||||
wires_.erase(wire->name);
|
||||
wire->name = new_name;
|
||||
|
@ -943,7 +942,7 @@ void RTLIL::Module::rename(RTLIL::Wire *wire, RTLIL::IdString new_name)
|
|||
|
||||
void RTLIL::Module::rename(RTLIL::Cell *cell, RTLIL::IdString new_name)
|
||||
{
|
||||
assert(cells_[cell->name] == cell);
|
||||
log_assert(cells_[cell->name] == cell);
|
||||
log_assert(refcount_wires_ == 0);
|
||||
cells_.erase(cell->name);
|
||||
cell->name = new_name;
|
||||
|
@ -952,7 +951,7 @@ void RTLIL::Module::rename(RTLIL::Cell *cell, RTLIL::IdString new_name)
|
|||
|
||||
void RTLIL::Module::rename(RTLIL::IdString old_name, RTLIL::IdString new_name)
|
||||
{
|
||||
assert(count_id(old_name) != 0);
|
||||
log_assert(count_id(old_name) != 0);
|
||||
if (wires_.count(old_name))
|
||||
rename(wires_.at(old_name), new_name);
|
||||
else if (cells_.count(old_name))
|
||||
|
@ -1927,11 +1926,11 @@ void RTLIL::SigSpec::replace(const RTLIL::SigSpec &pattern, const RTLIL::SigSpec
|
|||
pattern.unpack();
|
||||
with.unpack();
|
||||
|
||||
assert(other != NULL);
|
||||
assert(width_ == other->width_);
|
||||
log_assert(other != NULL);
|
||||
log_assert(width_ == other->width_);
|
||||
other->unpack();
|
||||
|
||||
assert(pattern.width_ == with.width_);
|
||||
log_assert(pattern.width_ == with.width_);
|
||||
|
||||
std::map<RTLIL::SigBit, RTLIL::SigBit> pattern_map;
|
||||
for (int i = 0; i < SIZE(pattern.bits_); i++)
|
||||
|
@ -1966,7 +1965,7 @@ void RTLIL::SigSpec::remove2(const RTLIL::SigSpec &pattern, RTLIL::SigSpec *othe
|
|||
unpack();
|
||||
|
||||
if (other != NULL) {
|
||||
assert(width_ == other->width_);
|
||||
log_assert(width_ == other->width_);
|
||||
other->unpack();
|
||||
}
|
||||
|
||||
|
@ -2005,7 +2004,7 @@ RTLIL::SigSpec RTLIL::SigSpec::extract(RTLIL::SigSpec pattern, const RTLIL::SigS
|
|||
if (other != NULL)
|
||||
other->pack();
|
||||
|
||||
assert(other == NULL || width_ == other->width_);
|
||||
log_assert(other == NULL || width_ == other->width_);
|
||||
|
||||
std::set<RTLIL::SigBit> pat = pattern.to_sigbit_set();
|
||||
std::vector<RTLIL::SigBit> bits_match = to_sigbit_vector();
|
||||
|
@ -2033,9 +2032,9 @@ void RTLIL::SigSpec::replace(int offset, const RTLIL::SigSpec &with)
|
|||
unpack();
|
||||
with.unpack();
|
||||
|
||||
assert(offset >= 0);
|
||||
assert(with.width_ >= 0);
|
||||
assert(offset+with.width_ <= width_);
|
||||
log_assert(offset >= 0);
|
||||
log_assert(with.width_ >= 0);
|
||||
log_assert(offset+with.width_ <= width_);
|
||||
|
||||
for (int i = 0; i < with.width_; i++)
|
||||
bits_.at(offset + i) = with.bits_.at(i);
|
||||
|
@ -2085,9 +2084,9 @@ void RTLIL::SigSpec::remove(int offset, int length)
|
|||
|
||||
unpack();
|
||||
|
||||
assert(offset >= 0);
|
||||
assert(length >= 0);
|
||||
assert(offset + length <= width_);
|
||||
log_assert(offset >= 0);
|
||||
log_assert(length >= 0);
|
||||
log_assert(offset + length <= width_);
|
||||
|
||||
bits_.erase(bits_.begin() + offset, bits_.begin() + offset + length);
|
||||
width_ = bits_.size();
|
||||
|
@ -2236,28 +2235,28 @@ void RTLIL::SigSpec::check() const
|
|||
const RTLIL::SigChunk chunk = chunks_[i];
|
||||
if (chunk.wire == NULL) {
|
||||
if (i > 0)
|
||||
assert(chunks_[i-1].wire != NULL);
|
||||
assert(chunk.offset == 0);
|
||||
assert(chunk.data.bits.size() == (size_t)chunk.width);
|
||||
log_assert(chunks_[i-1].wire != NULL);
|
||||
log_assert(chunk.offset == 0);
|
||||
log_assert(chunk.data.bits.size() == (size_t)chunk.width);
|
||||
} else {
|
||||
if (i > 0 && chunks_[i-1].wire == chunk.wire)
|
||||
assert(chunk.offset != chunks_[i-1].offset + chunks_[i-1].width);
|
||||
assert(chunk.offset >= 0);
|
||||
assert(chunk.width >= 0);
|
||||
assert(chunk.offset + chunk.width <= chunk.wire->width);
|
||||
assert(chunk.data.bits.size() == 0);
|
||||
log_assert(chunk.offset != chunks_[i-1].offset + chunks_[i-1].width);
|
||||
log_assert(chunk.offset >= 0);
|
||||
log_assert(chunk.width >= 0);
|
||||
log_assert(chunk.offset + chunk.width <= chunk.wire->width);
|
||||
log_assert(chunk.data.bits.size() == 0);
|
||||
}
|
||||
w += chunk.width;
|
||||
}
|
||||
assert(w == width_);
|
||||
assert(bits_.empty());
|
||||
log_assert(w == width_);
|
||||
log_assert(bits_.empty());
|
||||
}
|
||||
else
|
||||
{
|
||||
cover("kernel.rtlil.sigspec.check.unpacked");
|
||||
|
||||
assert(width_ == SIZE(bits_));
|
||||
assert(chunks_.empty());
|
||||
log_assert(width_ == SIZE(bits_));
|
||||
log_assert(chunks_.empty());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -2402,7 +2401,7 @@ bool RTLIL::SigSpec::as_bool() const
|
|||
cover("kernel.rtlil.sigspec.as_bool");
|
||||
|
||||
pack();
|
||||
assert(is_fully_const() && SIZE(chunks_) <= 1);
|
||||
log_assert(is_fully_const() && SIZE(chunks_) <= 1);
|
||||
if (width_)
|
||||
return chunks_[0].data.as_bool();
|
||||
return false;
|
||||
|
@ -2413,7 +2412,7 @@ int RTLIL::SigSpec::as_int() const
|
|||
cover("kernel.rtlil.sigspec.as_int");
|
||||
|
||||
pack();
|
||||
assert(is_fully_const() && SIZE(chunks_) <= 1);
|
||||
log_assert(is_fully_const() && SIZE(chunks_) <= 1);
|
||||
if (width_)
|
||||
return chunks_[0].data.as_int();
|
||||
return 0;
|
||||
|
@ -2441,7 +2440,7 @@ RTLIL::Const RTLIL::SigSpec::as_const() const
|
|||
cover("kernel.rtlil.sigspec.as_const");
|
||||
|
||||
pack();
|
||||
assert(is_fully_const() && SIZE(chunks_) <= 1);
|
||||
log_assert(is_fully_const() && SIZE(chunks_) <= 1);
|
||||
if (width_)
|
||||
return chunks_[0].data;
|
||||
return RTLIL::Const();
|
||||
|
@ -2452,7 +2451,7 @@ RTLIL::Wire *RTLIL::SigSpec::as_wire() const
|
|||
cover("kernel.rtlil.sigspec.as_wire");
|
||||
|
||||
pack();
|
||||
assert(is_wire());
|
||||
log_assert(is_wire());
|
||||
return chunks_[0].wire;
|
||||
}
|
||||
|
||||
|
@ -2461,7 +2460,7 @@ RTLIL::SigChunk RTLIL::SigSpec::as_chunk() const
|
|||
cover("kernel.rtlil.sigspec.as_chunk");
|
||||
|
||||
pack();
|
||||
assert(is_chunk());
|
||||
log_assert(is_chunk());
|
||||
return chunks_[0];
|
||||
}
|
||||
|
||||
|
@ -2471,7 +2470,7 @@ bool RTLIL::SigSpec::match(std::string pattern) const
|
|||
|
||||
pack();
|
||||
std::string str = as_string();
|
||||
assert(pattern.size() == str.size());
|
||||
log_assert(pattern.size() == str.size());
|
||||
|
||||
for (size_t i = 0; i < pattern.size(); i++) {
|
||||
if (pattern[i] == ' ')
|
||||
|
|
|
@ -24,8 +24,8 @@
|
|||
#include <set>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <assert.h>
|
||||
|
||||
#include "kernel/log.h"
|
||||
#include <initializer_list>
|
||||
|
||||
// various helpers (unrelated to RTLIL)
|
||||
|
@ -107,7 +107,7 @@ namespace RTLIL
|
|||
return std::string(*this) < std::string(rhs);
|
||||
}
|
||||
void check() const {
|
||||
assert(empty() || (size() >= 2 && (at(0) == '$' || at(0) == '\\')));
|
||||
log_assert(empty() || (size() >= 2 && (at(0) == '$' || at(0) == '\\')));
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
@ -242,7 +242,7 @@ namespace RTLIL
|
|||
}
|
||||
|
||||
inline T operator*() const {
|
||||
assert(list_p != nullptr);
|
||||
log_assert(list_p != nullptr);
|
||||
return it->second;
|
||||
}
|
||||
|
||||
|
@ -253,7 +253,7 @@ namespace RTLIL
|
|||
}
|
||||
|
||||
inline void operator++() {
|
||||
assert(list_p != nullptr);
|
||||
log_assert(list_p != nullptr);
|
||||
if (++it == list_p->end()) {
|
||||
(*refcount_p)--;
|
||||
list_p = nullptr;
|
||||
|
@ -677,9 +677,9 @@ struct RTLIL::SigBit
|
|||
|
||||
SigBit() : wire(NULL), data(RTLIL::State::S0), offset(0) { }
|
||||
SigBit(RTLIL::State bit) : wire(NULL), data(bit), offset(0) { }
|
||||
SigBit(RTLIL::Wire *wire) : wire(wire), data(RTLIL::State::S0), offset(0) { assert(wire && wire->width == 1); }
|
||||
SigBit(RTLIL::Wire *wire, int offset) : wire(wire), data(RTLIL::State::S0), offset(offset) { assert(wire); }
|
||||
SigBit(const RTLIL::SigChunk &chunk) : wire(chunk.wire), data(chunk.wire ? RTLIL::State::S0 : chunk.data.bits[0]), offset(chunk.offset) { assert(chunk.width == 1); }
|
||||
SigBit(RTLIL::Wire *wire) : wire(wire), data(RTLIL::State::S0), offset(0) { log_assert(wire && wire->width == 1); }
|
||||
SigBit(RTLIL::Wire *wire, int offset) : wire(wire), data(RTLIL::State::S0), offset(offset) { log_assert(wire); }
|
||||
SigBit(const RTLIL::SigChunk &chunk) : wire(chunk.wire), data(chunk.wire ? RTLIL::State::S0 : chunk.data.bits[0]), offset(chunk.offset) { log_assert(chunk.width == 1); }
|
||||
SigBit(const RTLIL::SigChunk &chunk, int index) : wire(chunk.wire), data(chunk.wire ? RTLIL::State::S0 : chunk.data.bits[index]), offset(chunk.wire ? chunk.offset + index : 0) { }
|
||||
SigBit(const RTLIL::SigSpec &sig);
|
||||
|
||||
|
@ -856,7 +856,7 @@ inline const RTLIL::SigBit &RTLIL::SigSpecConstIterator::operator*() const {
|
|||
}
|
||||
|
||||
inline RTLIL::SigBit::SigBit(const RTLIL::SigSpec &sig) {
|
||||
assert(sig.size() == 1 && sig.chunks().size() == 1);
|
||||
log_assert(sig.size() == 1 && sig.chunks().size() == 1);
|
||||
*this = SigBit(sig.chunks().front());
|
||||
}
|
||||
|
||||
|
|
|
@ -116,7 +116,7 @@ struct SatGen
|
|||
if (timestep_rhs < 0)
|
||||
timestep_rhs = timestep_lhs;
|
||||
|
||||
assert(lhs.size() == rhs.size());
|
||||
log_assert(lhs.size() == rhs.size());
|
||||
|
||||
std::vector<int> vec_lhs = importSigSpec(lhs, timestep_lhs);
|
||||
std::vector<int> vec_rhs = importSigSpec(rhs, timestep_rhs);
|
||||
|
@ -163,14 +163,14 @@ struct SatGen
|
|||
|
||||
void undefGating(std::vector<int> &vec_y, std::vector<int> &vec_yy, std::vector<int> &vec_undef)
|
||||
{
|
||||
assert(model_undef);
|
||||
assert(vec_y.size() == vec_yy.size());
|
||||
log_assert(model_undef);
|
||||
log_assert(vec_y.size() == vec_yy.size());
|
||||
if (vec_y.size() > vec_undef.size()) {
|
||||
std::vector<int> trunc_y(vec_y.begin(), vec_y.begin() + vec_undef.size());
|
||||
std::vector<int> trunc_yy(vec_yy.begin(), vec_yy.begin() + vec_undef.size());
|
||||
ez->assume(ez->expression(ezSAT::OpAnd, ez->vec_or(vec_undef, ez->vec_iff(trunc_y, trunc_yy))));
|
||||
} else {
|
||||
assert(vec_y.size() == vec_undef.size());
|
||||
log_assert(vec_y.size() == vec_undef.size());
|
||||
ez->assume(ez->expression(ezSAT::OpAnd, ez->vec_or(vec_undef, ez->vec_iff(vec_y, vec_yy))));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
|
||||
#include "kernel/rtlil.h"
|
||||
#include "kernel/log.h"
|
||||
#include <assert.h>
|
||||
#include <set>
|
||||
|
||||
struct SigPool
|
||||
|
@ -67,7 +66,7 @@ struct SigPool
|
|||
|
||||
void expand(RTLIL::SigSpec from, RTLIL::SigSpec to)
|
||||
{
|
||||
assert(SIZE(from) == SIZE(to));
|
||||
log_assert(SIZE(from) == SIZE(to));
|
||||
for (int i = 0; i < SIZE(from); i++) {
|
||||
bitDef_t bit_from(from[i]), bit_to(to[i]);
|
||||
if (bit_from.first != NULL && bit_to.first != NULL && bits.count(bit_from) > 0)
|
||||
|
@ -304,11 +303,11 @@ struct SigMap
|
|||
// internal helper function
|
||||
void merge_bit(const RTLIL::SigBit &bit1, const RTLIL::SigBit &bit2)
|
||||
{
|
||||
assert(bit1.wire != NULL && bit2.wire != NULL);
|
||||
log_assert(bit1.wire != NULL && bit2.wire != NULL);
|
||||
|
||||
shared_bit_data_t *bd1 = bits[bit1];
|
||||
shared_bit_data_t *bd2 = bits[bit2];
|
||||
assert(bd1 != NULL && bd2 != NULL);
|
||||
log_assert(bd1 != NULL && bd2 != NULL);
|
||||
|
||||
if (bd1 == bd2)
|
||||
return;
|
||||
|
@ -333,8 +332,8 @@ struct SigMap
|
|||
// internal helper function
|
||||
void set_bit(const RTLIL::SigBit &bit1, const RTLIL::SigBit &bit2)
|
||||
{
|
||||
assert(bit1.wire != NULL);
|
||||
assert(bits.count(bit1) > 0);
|
||||
log_assert(bit1.wire != NULL);
|
||||
log_assert(bits.count(bit1) > 0);
|
||||
bits[bit1]->map_to = bit2;
|
||||
}
|
||||
|
||||
|
@ -347,7 +346,7 @@ struct SigMap
|
|||
|
||||
void add(RTLIL::SigSpec from, RTLIL::SigSpec to)
|
||||
{
|
||||
assert(SIZE(from) == SIZE(to));
|
||||
log_assert(SIZE(from) == SIZE(to));
|
||||
|
||||
for (int i = 0; i < SIZE(from); i++)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue