aboutsummaryrefslogtreecommitdiffstats
path: root/passes
diff options
context:
space:
mode:
authorEddie Hung <eddie@fpgeh.com>2021-03-29 22:02:06 -0700
committerGitHub <noreply@github.com>2021-03-29 22:02:06 -0700
commit8c5f379435a1140a4320cdd4152b60338e45a362 (patch)
treed786fb9fe02749bb5c2955db44d6459b71e229e5 /passes
parent55dc5a4e4f7335741d2155dc0183ed4e26e8ddf8 (diff)
downloadyosys-8c5f379435a1140a4320cdd4152b60338e45a362.tar.gz
yosys-8c5f379435a1140a4320cdd4152b60338e45a362.tar.bz2
yosys-8c5f379435a1140a4320cdd4152b60338e45a362.zip
abc9: uniquify blackboxes like whiteboxes (#2695)
* abc9_ops: uniquify blackboxes too * abc9_ops: update comment * abc9_ops: allow bypass for param-less blackboxes * Add tests
Diffstat (limited to 'passes')
-rw-r--r--passes/techmap/abc9_ops.cc16
1 files changed, 6 insertions, 10 deletions
diff --git a/passes/techmap/abc9_ops.cc b/passes/techmap/abc9_ops.cc
index d3bb31cd9..6e18cb5f6 100644
--- a/passes/techmap/abc9_ops.cc
+++ b/passes/techmap/abc9_ops.cc
@@ -189,8 +189,6 @@ void prep_hier(RTLIL::Design *design, bool dff_mode)
derived_type = inst_module->derive(design, cell->parameters);
derived_module = design->module(derived_type);
}
- if (derived_module->get_blackbox_attribute(true /* ignore_wb */))
- continue;
if (derived_module->get_bool_attribute(ID::abc9_flop)) {
if (!dff_mode)
@@ -799,14 +797,12 @@ void prep_xaiger(RTLIL::Module *module, bool dff)
if (!box_module->get_bool_attribute(ID::abc9_box))
continue;
if (!cell->parameters.empty())
- // At this stage of the ABC9 flow, all modules must be nonparametric, because ABC itself requires concrete netlists, and the presence of
- // parameters implies a non-concrete netlist. This error needs some explaining, because there are (at least) two ways to get this:
- // 1) You have an (* abc9_box *) parametric whitebox but due to a bug somewhere this hasn't been monomorphised into a concrete blackbox.
- // This is a bug, and a bug report would be welcomed.
- // 2) You have an (* abc9_box *) parametric blackbox (e.g. to store associated cell data) but want to provide timing data for ABC9.
- // This is not supported due to the presence of parameters. If you want to store associated cell data for a box, one approach could be
- // to techmap the parameters to constant module inputs, and then after ABC9 use _TECHMAP_CONSTVAL_XX_ to retrieve the values again.
- log_error("Black box '%s' is marked (* abc9_box *) and has parameters, which is forbidden in prep_xaiger\n", log_id(cell_name));
+ {
+ // At this stage of the ABC9 flow, all modules must be nonparametric, because ABC itself requires concrete netlists, and the presence of
+ // parameters implies a non-concrete netlist. This means an (* abc9_box *) parametric module but due to a bug somewhere this hasn't been
+ // uniquified into a concrete parameter-free module. This is a bug, and a bug report would be welcomed.
+ log_error("Not expecting parameters on module '%s' marked (* abc9_box *)\n", log_id(cell_name));
+ }
log_assert(box_module->get_blackbox_attribute());
cell->attributes[ID::abc9_box_seq] = box_count++;