Skip to content

Latest commit

 

History

History
62 lines (35 loc) · 2.05 KB

TODO.md

File metadata and controls

62 lines (35 loc) · 2.05 KB

This file lists useful developments ideas for Quaigh.

Optimization and transformations

2-level simplification

2-level simplification of Sum-of-Products and Exclusive-Sum-of-Products is very common and useful. Ideally this would take the sharing of And gates into account, which is not usually done.

Types of 2-level simplification to handle:

  • Sum of Products (SoP): most typical
  • Exclusive Sum of Products (ESoP): common too
  • Sum of Exclusive Sums (SoES): not a general model, but would be useful

Exact algorithms:

  • For SoP and SoES: enumerate maximum cubes, then solve a variant of minimum set cover problem
  • For ESoP, enumerate all cubes, then solve a xor-constrained minimization problem

Local rewriting

The typical approach to local rewriting is with a dictionary of "optimal" 4-input or 5-input functions. I'd like multi-output local rewriting instead, using a low-depth dictionary of common functions.

AIG/MIG transformation

Simple transformation to go back to an And-based or Mux-based view.

Technology mapping

Cut enumeration for FPGAs

Cut enumeration is necessary for any FPGA techmapping. I'd like ours to go a bit further and include Dff in the Cuts.

Techmapping API

Technology mapping is "just" a question of dependencies between cuts, which each have their own area and delay. Solving it can be almost completely separate from cut enumeration.

This paves the way for additional optimizations:

  • techmapping for FPGA and ASIC can be shared
  • multiple choices can be exposed without having them in the logic: N-input gates can be cut a number of ways

Test pattern generation

Path activation

We want to be able to activate whole critical paths. This is a bit more complicated to grasp.

Faster simulation

The current simulation is OK but basic. A transformation to an And or Mux graph and a single array for indexing would go a long way to make it faster. On the other hand this requires an additional translation layer.

Connected components

Partition the circuit in order to handle disjoint parts separately.