






Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Community
Ask the community for help and clear up your study doubts
Discover the best universities in your country according to Docsity users
Free resources
Download our free guides on studying techniques, anxiety management strategies, and thesis advice from Docsity tutors
The use of bdds (binary decision diagrams) for checking equivalence and minimizing states in finite state machines (fsms). The concepts of fsm equivalence and state equivalence, the product machine, and the procedures for solving fsm equivalence and state minimization problems using bdds. It also includes a pseudocode for the compatible projection operator.
Typology: Study notes
1 / 11
This page cannot be seen from the preview
Don't miss anything!
May 2, 2000 Alan Mishchenko
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 2
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 3
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 4
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 7
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 8
where AR(s) is the set of reachable states of the PM and P(s) is the property that expresses equivalence of M 1 and M 2 in the product state s
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 9
bool VerifyPropertyUsingReachabilityAnalysis( FSM* pM, bdd Property ) { bdd InitState = FindBddCube( 0, pM->NBits, CSVars, 0 ); bdd Reached = InitState, From = InitState, New[MAXITERNUM]; int NIter = 0; do { bdd To= bdd_appex(pM->TransRel,From,bddop_and,AllCSVars); To = bdd_replace( To, pNS4CS ); New[ NIter ] = To - Reached; bdd Check = ( New[ NIter ] >> Property ); if ( Check != bddtrue ) return false; From = New[ NIter ]; Reached = Reached | New[ NIter ]; } while ( New[ NIter++ ] != bddfalse ); return true; }
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 10
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 13
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 14
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 15
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 16
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 19
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 20
function CProjection( E, α ) if ( α = 1 ) return E; if ( E = 0 ) return 0; if ( E = 1 ) return α; y 1 is the top variable in α; if ( αy1 = 0 ) α 1 = x 1 ’; else /if ( αy1’= 0 )/ α 1 = x 1 ;
return α 1 & CProjection( Eα 1 , αα 1 ) + γ’α 1 ’ & CProjection( Eα1’ , α (^) α 1 );
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 21
bdd CProjection( bdd F, bdd Ref ) { assert( Ref != bddfalse ); if ( Ref == bddtrue ) return F; if ( F == bddfalse ) return bddfalse; if ( F == bddtrue ) return Ref; // check cache for ready-made results bdd NextRef, Literal; int CurVar = bdd_var( Ref ); if ( bdd_low( Ref ) == bddfalse ) { // the top var is positive NextRef = bdd_high( Ref ); Literal = bdd_ithvar(CurVar); } else if ( bdd_high( Ref ) == bddfalse ) { // the top var is negative NextRef = bdd_low( Ref ); Literal =!bdd_ithvar(CurVar); } else // Ref is not a cube! assert( 0 );
// cofactors of F with respect to this literal bdd PosCofF = bdd_restrict( F, Literal ); bdd NegCofF = bdd_restrict( F, !Literal ); // the domain where projection does exist bdd Domain = bdd_exist( PosCofF, AllAVars0 ); bdd PosPart = CProjection( PosCofF, NextRef ); bdd NegPart = !Domain & CProjection( NegCofF, NextRef ); bdd Result = bdd_ite( Literal, PosPart, NegPart ); // insert the result into cache return Result; }
May 2, 2000 ECE 510 OCE: BDDs and Their Applications 22