-
Notifications
You must be signed in to change notification settings - Fork 592
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to run PDR #281
Comments
OverviewPDR (and many other ABC commands) assumes the circuit it operates on is an AIG such that:
That is, newer AIGER 1.9 features such as constraints, 1-initialized latches, or nondeterministically-initialized latches are ignored. Outputs (even constraints) are treated as properties, and latches are assumed to be 0-initialized. To get a meaningful answer from PDR on an AIG that contains these features, you have to model the newer feature in the old format. In ABC this is done by running the For example: ./abc -c ‘read picorv32_mutBX_nomem-p8.aig ; logic ; undc ; strash ; zero ; fold ; pdr’
|
Description
This issue is not so much an issue, but a compilation of my findings when researching how to use abc to verify hardware models using PDR. More specifically, what commands to run to be able to verify And Inverter Graphs following the AIGER 1.9 format https://fmv.jku.at/aiger/, this is the file format that was used to run abc in the Hard-Ware Model Checking Competition (HWMCC), the most resent of which being HWMCC20.
Final Answers:
To run PDR on an AIG file called
path.aig
run one of the 2 following commands:Option 1
Using ABC9
&put
command:./abc -c "&read path.aig ; &put ; fold ; pdr -v"
Option 2
Using previous ABC commands:
./abc -c "read path.aig ; logic ; undc ; strash ; zero ; fold ; pdr -v"
I assume
fold2
would work for both options but I have not tried it.Process in finding these commands:
Finding these command was not easy. I tried a few things that all turned out to produce incorrect proofs on designs that are known to be unsafe, or provide counter examples on designs that were known to be safe. These are my attempts and the results I got.
Attempt 1
./abc -c "read path.aig ; pdr -v"
This does not work because PDR does not support invariant constraints and uninitialized latches.
Attempt 2
./abc -c "read path.aig ; zero ; fold2 ; pdr -v"
This did not work because I assume
zero
does not handle the case of uninitialized latches.Attempt 3
./abc -c "&read path.aig ; &st ; &put ; fold ; pdr -v"
I assumed this command would work because of #216 (comment) but
&st
seemed to make the command return incorrect results.Sources:
The text was updated successfully, but these errors were encountered: