prjunnamed_generic/
lib.rs

1use prjunnamed_netlist::Design;
2
3mod rewrite;
4mod unname;
5mod decision;
6mod simplify;
7mod merge;
8mod split;
9mod lower_arith;
10mod iobuf_insert;
11mod chain_rebalance;
12mod tree_rebalance;
13mod analysis;
14
15pub use unname::unname;
16pub use decision::decision;
17pub use lower_arith::lower_arith;
18pub use iobuf_insert::iobuf_insert;
19pub use analysis::level::LevelAnalysis;
20pub use rewrite::normalize::Normalize;
21pub use rewrite::aig::SimpleAigOpt;
22pub use rewrite::lower::{LowerMux, LowerEq, LowerLt, LowerMul, LowerShift};
23pub use chain_rebalance::chain_rebalance;
24pub use tree_rebalance::tree_rebalance;
25
26pub fn canonicalize(design: &mut Design) {
27    for iter in 1.. {
28        if cfg!(feature = "trace") {
29            eprintln!(">canonicalize #{}", iter);
30        }
31        let did_simplify = simplify::simplify(design);
32        let did_merge = merge::merge(design);
33        let did_split = split::split(design);
34        if !(did_simplify || did_merge || did_split) {
35            if cfg!(feature = "trace") {
36                eprintln!(">canonicalize done");
37            }
38            break;
39        }
40    }
41}