commit | 346b6af3cf4c50b4960a428607a95368391adf39 | [log] [tgz] |
---|---|---|
author | Jeff DiCorpo <jeffdi@efabless.com> | Tue Jan 03 07:19:16 2023 -0800 |
committer | Jeff DiCorpo <jeffdi@efabless.com> | Tue Jan 03 07:19:16 2023 -0800 |
tree | 078e11627160d80bb9406373cc1006db265e8fcd | |
parent | a742231ab4a0a0f6e17f6bb0b5c322b472541697 [diff] |
update repo
It is quite well known that any logic circuit can be built using only NAND gates. For instance, an XNOR gate is equivalent to the following construction:
Such gates are called universal. Any Boolean function with 2 inputs and 1 output can be built from at most 5 NAND gates.
We can also define a gate U21 that is universal in a stricter sense, such that any Boolean function with 2 inputs and 1 output is realized with just a single copy of U21. This gate would obviously need more than 2 inputs, but it's usually still more economical than the 2k inputs and k outputs used from a set of NAND chips (1≤k≤5).
As an example, this is how we get the NAND of p and q and the XNOR of p and q by wiring up U21's four inputs a, b, c and d to a suitable combination of p, q, 0 and 1:
⮟ ⮟ ⮟ ⮟ ⮟ ⮟ ⮟ ⮟ ⮟ ⮟ ⮟
So U21 stands in for any combinatorial logic with 2 inputs and 1 output. And any Boolean function with 3 inputs and 1 output can be built with at most 3 copies of U21. But that doesn‘t stop us from creating a gate U31 that’s even more universal and does so with a single copy when wired correctly:
This repository contains a chip design with four independent gates U21, U31, U41 and U22 where each Uij can be wired to act as an arbitrary function with i inputs and j outputs. It uses the caravel framework and is hardened for the gf180mcuC technology platform.