mirror of
https://github.com/YosysHQ/yosys
synced 2025-07-24 21:27:00 +00:00
Add flooring division operator
The $div and $mod cells use truncating division semantics (rounding towards 0), as defined by e.g. Verilog. Another rounding mode, flooring (rounding towards negative infinity), can be used in e.g. VHDL. The new $divfloor cell provides this flooring division. This commit also fixes the handling of $div in opt_expr, which was previously optimized as if it was $divfloor.
This commit is contained in:
parent
17163cf43a
commit
edd8ff2c07
19 changed files with 213 additions and 24 deletions
|
@ -264,7 +264,7 @@ static void create_gold_module(RTLIL::Design *design, RTLIL::IdString cell_type,
|
|||
cell->setPort(ID::Y, wire);
|
||||
}
|
||||
|
||||
if (muxdiv && cell_type.in(ID($div), ID($mod), ID($modfloor))) {
|
||||
if (muxdiv && cell_type.in(ID($div), ID($mod), ID($divfloor), ID($modfloor))) {
|
||||
auto b_not_zero = module->ReduceBool(NEW_ID, cell->getPort(ID::B));
|
||||
auto div_out = module->addWire(NEW_ID, GetSize(cell->getPort(ID::Y)));
|
||||
module->addMux(NEW_ID, RTLIL::SigSpec(0, GetSize(div_out)), div_out, b_not_zero, cell->getPort(ID::Y));
|
||||
|
@ -839,6 +839,7 @@ struct TestCellPass : public Pass {
|
|||
cell_types[ID($mul)] = "ABSY";
|
||||
cell_types[ID($div)] = "ABSY";
|
||||
cell_types[ID($mod)] = "ABSY";
|
||||
cell_types[ID($divfloor)] = "ABSY";
|
||||
cell_types[ID($modfloor)] = "ABSY";
|
||||
// cell_types[ID($pow)] = "ABsY";
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue