synth_opt_adders
synth_opt_adders copied to clipboard
Books and resources for diving into fast addition topics : )
Very interested in any links or books mentioned on the YT that may help further explore the topic of fast addition : )
Also just watched the zero2asic interview, and very much looking forward to incorporating the synth_opt_adders! : )
Hello!
Sorry for the late response, I've been busy trying to meet some self-imposed deadlines.
I can't readily think of any books I would recommend on the topic of fast addition. I can quickly summarize it for you though.
- In hardware, quantities are encoded in terms of binary digits.
- To build a circuit, you begin by creating a circuit that works for single-digit inputs. With addition, for example, you begin by building a circuit that adds 0+0, 0+1, 1+0, and 1+1. You can do this by trial-and-error, or you can do this through math.
- You then need to figure out how to extend your operation's hardware from
i
digits toi+1
digits, which again you can do either through trial-and-error or through cohomology. - You can now build a circuit for
n
-digit computation by starting at your base of 1-digit computation [from step 4] and recursively adding one digit at the time [via step 5]. - The result is a linear chain of
n
steps to perform ann
-digit operation. For operations that are "associative" and "arithmetic", such as normal addition, this linear chain ofn
steps acts as a binary tree that can be rebalanced into a structure with1+lg(n)
steps while maintaining low area. - The various binary trees that you can draw are all valid implementations of your operation [addition], with different physical characteristics. Which one is optimal depends on a wide array of factors (how fast you want your circuit, how much difference there is between the requisite arrival/departure time at each input/output pin, what specific technology you are using, which specific standard cells you are using, etcetera), thus the optimization problem appears to be a machine learning one.