commit | 33ffc1af6ebf2112dd04198abe6e3068250ceeee | [log] [tgz] |
---|---|---|
author | Tamas Hubai <efabless@htamas.net> | Sun Dec 04 09:11:50 2022 +0100 |
committer | Tamas Hubai <efabless@htamas.net> | Sun Dec 04 09:11:50 2022 +0100 |
tree | 37b24f014460215f6c2ecd8592dad6953dc9ccf5 | |
parent | e844cf10c4ebe4e325c818328e0733e861d9c3f4 [diff] |
Add hardened chip
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.