aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2022-03-11 15:11:14 +0100
committerMiodrag Milanovic <mmicko@gmail.com>2022-03-11 15:11:14 +0100
commitb72c779204120d53895d895d3599b4c87fc2f687 (patch)
treed70e0d7d337541900020696c099b20152b70d7ee
parentd340f302f6255b6aedcf8351a6374b34889edbbc (diff)
downloadyosys-b72c779204120d53895d895d3599b4c87fc2f687.tar.gz
yosys-b72c779204120d53895d895d3599b4c87fc2f687.tar.bz2
yosys-b72c779204120d53895d895d3599b4c87fc2f687.zip
Support cell name in btor witness file
-rw-r--r--passes/sat/sim.cc19
1 files changed, 14 insertions, 5 deletions
diff --git a/passes/sat/sim.cc b/passes/sat/sim.cc
index e49f895f7..5d8e44830 100644
--- a/passes/sat/sim.cc
+++ b/passes/sat/sim.cc
@@ -1290,12 +1290,21 @@ struct SimWorker : SimShared
RTLIL::IdString escaped_s = RTLIL::escape_id(signal_name(parts[len-1]));
if (len==3) {
Wire *w = topmod->wire(escaped_s);
- if (!w)
- log_warning("Wire %s not present in module %s\n",log_id(escaped_s),log_id(topmod));
- if (w && (int)parts[1].size() != w->width)
- log_error("Size of wire %s is different than provided data.\n", log_signal(w));
- if (w)
+ if (!w) {
+ Cell *c = topmod->cell(escaped_s);
+ if (!c)
+ log_warning("Wire/cell %s not present in module %s\n",log_id(escaped_s),log_id(topmod));
+ else if (c->type.in(ID($anyconst), ID($anyseq))) {
+ SigSpec sig_y= c->getPort(ID::Y);
+ if ((int)parts[1].size() != GetSize(sig_y))
+ log_error("Size of wire %s is different than provided data.\n", log_signal(sig_y));
+ top->set_state(sig_y, Const::from_string(parts[1]));
+ }
+ } else {
+ if ((int)parts[1].size() != w->width)
+ log_error("Size of wire %s is different than provided data.\n", log_signal(w));
top->set_state(w, Const::from_string(parts[1]));
+ }
} else {
Cell *c = topmod->cell(escaped_s);
if (!c)