EECS 478: Logic Synthesis and Optimization