commit | 21e1dca3dc12006df3e08c82cbd2c4d0e68f95e9 | [log] [tgz] |
---|---|---|
author | Jeff DiCorpo <jeffdi@efabless.com> | Wed Dec 21 22:03:57 2022 -0800 |
committer | Jeff DiCorpo <jeffdi@efabless.com> | Wed Dec 21 22:03:57 2022 -0800 |
tree | 08490aff30d86c4745652bd43f222d4cb5be8bb1 | |
parent | 33ffc1af6ebf2112dd04198abe6e3068250ceeee [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.