AMulet 2.0
AIG Multiplier Verification Tool
slicing.h File Reference

contains functions slice and order the gates More...

#include <vector>
#include "gate.h"
Include dependency graph for slicing.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void init_slices ()
 
void print_slices ()
 
const Gatetopological_largest_child (const Gate *n)
 
void fix_slice (Gate *n, int i)
 
void slice_by_xor_chains ()
 
void upwards_slicing (const Gate *n, const Gate *pre)
 
void slice_jut_gates ()
 
int fix_xors ()
 
void fix_jut_gates ()
 
void slicing_xor ()
 
void input_cone (Gate *n, int num)
 
void find_carries ()
 
bool search_for_booth_pattern ()
 
void merge_all ()
 
void promote_all ()
 
void fill_slices ()
 
void slicing_non_xor ()
 

Variables

std::vector< std::list< Gate * > > slices
 vector-list Gate* matrix to store slices More...
 

Detailed Description

contains functions slice and order the gates

Part of AMulet2.0 : AIG Multiplier Verification Tool. Copyright (C) 2020 Daniela Kaufmann, Johannes Kepler University Linz

Function Documentation

void fill_slices ( )

Fills the slices by adding the gates that are assigned to slices

void find_carries ( )

Identify those gates that are input in bigger slices

void fix_jut_gates ( )

If fix_xors() is applied also the jut gates need to be fixed.

void fix_slice ( Gate n,
int  i 
)

Move gate n to slice i and insert it before it's topological_largest_child.

Parameters
nGate*
iinteger, for new slice index
int fix_xors ( )

Fix some xors, that are assigned to different slices (needed for 7,3 counter trees )

void init_slices ( )

Allocates the memory for the slices and adds the output gate of each slice

void input_cone ( Gate n,
int  num 
)

Mark the children of gate n to slice num, if not assigned otherwise.

Parameters
nGate*
numinteger for slice index
void merge_all ( )

We repeatedly move gates to smaller slices.

void print_slices ( )

Prints the polynomials in the slices to stdout

void promote_all ( )

We repeatedly move gates to bigger slices.

bool search_for_booth_pattern ( )

Identifies whether polynomials use a booth pattern (as in the aoki benchmarks)

Returns
True if booth pattern are found
void slice_by_xor_chains ( )

Attach gates to slices by following xor-chains from the output gates.

void slice_jut_gates ( )

Slice gates that are between xor-chains, using upwards_slicing

void slicing_non_xor ( )

Overall slicing routine, that does not depend on xor-chains

void slicing_xor ( )

Overall slicing routine based on xor gates, calls all other functions automatically

const Gate* topological_largest_child ( const Gate n)

Returns the child that has the highest position in a slice

Parameters
nGate* for parent
Returns
Gate*
void upwards_slicing ( const Gate n,
const Gate pre 
)

Inserts the parents of n before pre in the slice of pre

Parameters
nGate*
preGate*

Variable Documentation

std::vector<std::list<Gate*> > slices

vector-list Gate* matrix to store slices