pull/1/head
panhongyang 2023-03-30 15:20:22 +08:00
commit a7b6abff50
2 changed files with 23 additions and 9 deletions

View File

@ -1,7 +1,7 @@
# powerful heightened yielded Logic Synthesis (phyLS) # powerful heightened yielded Logic Synthesis (phyLS)
phyLS is based on the [mockturtle](https://github.com/lsils/mockturtle), it can optimize different logics attributes. phyLS is based on the [mockturtle](https://github.com/lsils/mockturtle) and the [abc](https://github.com/berkeley-abc/abc), it can optimize different logics attributes.
Currently, it supports AIG, MIG, XAG, and XMG based optimization. Currently, it supports mockturtle format(AIG, MIG, XAG, XMG) and abc format(AIG,GIA) based optimization.
[Read the documentation here.](https://phyls.readthedocs.io/en/latest/) [Read the documentation here.](https://phyls.readthedocs.io/en/latest/)

View File

@ -27,13 +27,17 @@ using namespace mockturtle;
namespace alice { namespace alice {
class reduction_command : public command { class fr_command : public command {
public: public:
explicit reduction_command(const environment::ptr& env) explicit fr_command(const environment::ptr& env)
: command(env, "functional reduction [default = AIG]") { : command(env, "functional reduction [default = AIG]") {
add_flag("--mig, -m", "functional reduction for MIG"); add_flag("--mig, -m", "functional reduction for MIG");
add_flag("--xag, -g", "functional reduction for XAG"); add_flag("--xag, -g", "functional reduction for XAG");
add_flag("--xmg, -x", "functional reduction for XMG"); add_flag("--xmg, -x", "functional reduction for XMG");
add_option("--tfi_node, -n", max_tfi_node,
"Maximum number of nodes in the TFI to be compared");
add_flag("--saturation, -s",
"repeat until no further improvement can be found");
add_flag("--verbose, -v", "print the information"); add_flag("--verbose, -v", "print the information");
} }
@ -42,31 +46,40 @@ class reduction_command : public command {
clock_t begin, end; clock_t begin, end;
double totalTime; double totalTime;
functional_reduction_params ps;
ps.max_TFI_nodes = max_tfi_node;
if (is_set("saturation")) ps.saturation = true;
if (is_set("verbose")) {
ps.verbose = true;
ps.progress = true;
}
begin = clock(); begin = clock();
if (is_set("mig")) { if (is_set("mig")) {
auto mig = store<mig_network>().current(); auto mig = store<mig_network>().current();
functional_reduction(mig); functional_reduction(mig, ps);
mig = cleanup_dangling(mig); mig = cleanup_dangling(mig);
phyLS::print_stats(mig); phyLS::print_stats(mig);
store<mig_network>().extend(); store<mig_network>().extend();
store<mig_network>().current() = mig; store<mig_network>().current() = mig;
} else if (is_set("xmg")) { } else if (is_set("xmg")) {
auto xmg = store<xmg_network>().current(); auto xmg = store<xmg_network>().current();
functional_reduction(xmg); functional_reduction(xmg, ps);
xmg = cleanup_dangling(xmg); xmg = cleanup_dangling(xmg);
phyLS::print_stats(xmg); phyLS::print_stats(xmg);
store<xmg_network>().extend(); store<xmg_network>().extend();
store<xmg_network>().current() = xmg; store<xmg_network>().current() = xmg;
} else if (is_set("xag")) { } else if (is_set("xag")) {
auto xag = store<xag_network>().current(); auto xag = store<xag_network>().current();
functional_reduction(xag); functional_reduction(xag, ps);
xag = cleanup_dangling(xag); xag = cleanup_dangling(xag);
phyLS::print_stats(xag); phyLS::print_stats(xag);
store<xag_network>().extend(); store<xag_network>().extend();
store<xag_network>().current() = xag; store<xag_network>().current() = xag;
} else { } else {
auto aig = store<aig_network>().current(); auto aig = store<aig_network>().current();
functional_reduction(aig); functional_reduction(aig, ps);
aig = cleanup_dangling(aig); aig = cleanup_dangling(aig);
phyLS::print_stats(aig); phyLS::print_stats(aig);
store<aig_network>().extend(); store<aig_network>().extend();
@ -80,9 +93,10 @@ class reduction_command : public command {
} }
private: private:
int max_tfi_node = 500;
}; };
ALICE_ADD_COMMAND(reduction, "Synthesis") ALICE_ADD_COMMAND(fr, "Synthesis")
} // namespace alice } // namespace alice