doc
parent
a29f90f9f2
commit
577a280b2e
|
@ -0,0 +1,20 @@
|
|||
Balance
|
||||
=============
|
||||
|
||||
**Header:** ``mockturtle/algorithms/balancing.hpp``
|
||||
|
||||
Parameters
|
||||
~~~~~~~~~~
|
||||
|
||||
.. doxygenstruct:: mockturtle::aig_balancing_params
|
||||
:members:
|
||||
|
||||
Algorithm
|
||||
~~~~~~~~~
|
||||
|
||||
.. doxygenfunction:: mockturtle::aig_balance
|
||||
|
||||
Balancing of a logic network
|
||||
|
||||
This function implements a dynamic-programming and cut-enumeration based balancing algorithm.
|
||||
It returns a new network of the same type and performs generic balancing by providing a rebalancing function.
|
|
@ -0,0 +1,80 @@
|
|||
Resub
|
||||
=============
|
||||
|
||||
**Header:** ``mockturtle/algorithms/resubstitution.hpp``
|
||||
|
||||
Several resubstitution algorithms are implemented and can be called directly, including:
|
||||
|
||||
- ``default_resubstitution`` does functional reduction within a window.
|
||||
|
||||
|
||||
Structure
|
||||
~~~~~~~~~
|
||||
|
||||
In addition to the example algorithms listed above, custom resubstitution algorithms can also be composed.
|
||||
|
||||
**Top level**
|
||||
|
||||
First, the top-level framework ``detail::resubstitution_impl`` is built-up with a resubstitution engine and a divisor collector.
|
||||
|
||||
.. doxygenclass:: mockturtle::detail::resubstitution_impl
|
||||
|
||||
.. doxygenfunction:: mockturtle::detail::resubstitution_impl::resubstitution_impl
|
||||
|
||||
**ResubEngine**
|
||||
|
||||
There are two resubstitution engines implemented: `window_based_resub_engine` and `simulation_based_resub_engine`.
|
||||
|
||||
.. doxygenclass:: mockturtle::detail::window_based_resub_engine
|
||||
|
||||
.. doxygenclass:: mockturtle::detail::simulation_based_resub_engine
|
||||
|
||||
**DivCollector**
|
||||
|
||||
Currently, there is only one implementation:
|
||||
|
||||
.. doxygenclass:: mockturtle::detail::default_divisor_collector
|
||||
|
||||
**Example**
|
||||
|
||||
The following example shows how to compose a customized resubstitution algorithm.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
/* derive some AIG */
|
||||
aig_network aig = ...;
|
||||
|
||||
/* prepare the needed views */
|
||||
using resub_view_t = fanout_view<depth_view<aig_network>>;
|
||||
depth_view<aig_network> depth_view{aig};
|
||||
resub_view_t resub_view{depth_view};
|
||||
|
||||
/* compose the resubstitution framework */
|
||||
using validator_t = circuit_validator<Ntk, bill::solvers::bsat2, false, true, false>;
|
||||
using functor_t = typename detail::sim_aig_resub_functor<resub_view_t, validator_t>;
|
||||
using engine_t = typename detail::simulation_based_resub_engine<resub_view_t, validator_t, functor_t>;
|
||||
using resub_impl_t = typename detail::resubstitution_impl<resub_view_t, engine_t>;
|
||||
|
||||
/* statistics objects */
|
||||
resubstitution_stats st;
|
||||
typename resub_impl_t::engine_st_t engine_st;
|
||||
typename resub_impl_t::collector_st_t collector_st;
|
||||
|
||||
/* instantiate the framework and run it */
|
||||
resubstitution_params ps;
|
||||
resub_impl_t p( resub_view, ps, st, engine_st, collector_st );
|
||||
p.run();
|
||||
|
||||
/* report statistics */
|
||||
st.report();
|
||||
collector_st.report();
|
||||
engine_st.report();
|
||||
|
||||
Detailed statistics
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. doxygenstruct:: mockturtle::detail::window_resub_stats
|
||||
:members:
|
||||
|
||||
.. doxygenstruct:: mockturtle::detail::sim_resub_stats
|
||||
:members:
|
|
@ -0,0 +1,45 @@
|
|||
Rewrite
|
||||
=============
|
||||
|
||||
**Header:** ``mockturtle/algorithms/cut_rewriting.hpp``
|
||||
|
||||
The following example shows how to rewrite an MIG using precomputed optimum networks. In this case the maximum number of variables for a node function is 4.
|
||||
|
||||
It is possible to change the cost function of nodes in cut rewriting. Here is
|
||||
an example, in which the cost function only accounts for AND gates in a network,
|
||||
which corresponds to the multiplicative complexity of a function.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
template<class Ntk>
|
||||
struct mc_cost
|
||||
{
|
||||
uint32_t operator()( Ntk const& ntk, node<Ntk> const& n ) const
|
||||
{
|
||||
return ntk.is_and( n ) ? 1 : 0;
|
||||
}
|
||||
};
|
||||
|
||||
SomeResynthesisClass resyn;
|
||||
ntk = cut_rewriting<SomeResynthesisClass, mc_cost>( ntk, resyn );
|
||||
|
||||
Parameters and statistics
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. doxygenstruct:: mockturtle::cut_rewriting_params
|
||||
:members:
|
||||
|
||||
.. doxygenstruct:: mockturtle::cut_rewriting_stats
|
||||
:members:
|
||||
|
||||
Algorithm
|
||||
~~~~~~~~~
|
||||
|
||||
.. doxygenfunction:: mockturtle::cut_rewriting
|
||||
.. doxygenfunction:: mockturtle::cut_rewriting_with_compatibility_graph
|
||||
|
||||
Rewriting functions
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
One can use resynthesis functions that can be passed to `node_resynthesis`, see
|
||||
:ref:`node_resynthesis_functions`.
|
Loading…
Reference in New Issue