ABC is an open-source logic synthesis and optimization tool developed by Alan Mishchenko at the University of California at Berkeley. ABC specializes in optimizing digital logic circuits at the circuit level, and some commercial hardware synthesis tools incorporate ABC as part of their design flow to improve their circuit optimization.
ABC is a large logic optimization system that has been developed over many years. The optimization process is controlled by a small script that contains a sequence of ABC logic transformation and optimization commands. ABC comes with some standard scripts that use a small number of the available ABC commands to perform optimizations that mostly perform well across a wide range of logic designs. The great majority of ABC users use these standard scripts.
However, ABC contains hundreds of commands that can be used to transform and optimize circuits. The main documentation for ABC is mostly old and not very extensive. The commands are mainly documented in two sources. First, the code for each command can print a small message saying very briefly what the command does and how it should be invoked. (The text of these “Usage” messages can be seen in the source code of https://raw.githubusercontent.com/berkeley-abc/abc/master/src/base/abci/abc.c). Second, the author of ABC has written many technical papers about the optimizations in ABC, and most of the papers briefly mention the name of the corresponding command in ABC.
The goal of this project is to write a program that generates scripts for ABC that consist of a short sequence of ABC commands. Optimizing logic circuits is a very important problem in hardware design, so developers are willing to allow tools to spend a large amount of time optimizing a given a given circuit. The goal is to generate many different ABC scripts with different combinations and orderings of commands, in an effort to find a sequence that works well for a given input circuit. There are several existing tools, such as ACOVEA, which generate different combinations of compiler flags to try to generate fast code for a given input program using genetic algorithms or simulated annealing. The goal of this project is to do something similar for ABC.
Note that the documentation for ABC is very incomplete, so you should not be afraid of reading C source code to pick out the names of ABC commands and to get some idea of what the commands do. Ultimately, it may be impossible to understand what all the ABC commands do. But this is not necessarily a problem. The important question is whether adding the command to the script causes the quality of the optimized circuit to improve. In many cases it may be possible to use optimization commands with very little understanding of what they are doing.
Any student taking this project should have some knowledge and interest in digital logic, and some ability to read and understand C code is also essential. The code that you write to generate the ABC scripts can use any language.