Threshold Logic Circuits
Collection
Boolean gates, voting functions, modular arithmetic, and adders as threshold networks.
β’
248 items
β’
Updated
β’
1
8-bit magnitude comparator. Compares two 8-bit unsigned values.
compare8(A, B) -> (GT, LT, EQ)
Exactly one output is always active.
A[7:0] B[7:0]
β β
βββββββββ¬ββββββββ
β
ββββββββ΄βββββββ
β β
βΌ βΌ
βββββ βββββ
βGT β βLT β Layer 1
βA-Bβ βB-Aβ
β>=1β β>=1β
βββββ βββββ
β β
ββββββββ¬βββββββ
β
βΌ
βββββββ
β EQ β Layer 2
β NOR β
βββββββ
Uses positional weighting: treats inputs as binary numbers.
GT neuron: weights A bits positively (128,64,32,16,8,4,2,1), B bits negatively. Fires when weighted sum A - B >= 1.
LT neuron: opposite weights. Fires when B - A >= 1.
EQ neuron: NOR of GT and LT. Fires when both are zero.
| Inputs | 16 |
| Outputs | 3 |
| Neurons | 3 |
| Layers | 2 |
| Parameters | 37 |
| Magnitude | 1024 |
| A | B | GT | LT | EQ |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 |
| 100 | 50 | 1 | 0 | 0 |
| 50 | 100 | 0 | 1 | 0 |
| 255 | 255 | 0 | 0 | 1 |
from safetensors.torch import load_file
import torch
w = load_file('model.safetensors')
def compare(a, b):
a_bits = [(a >> (7-i)) & 1 for i in range(8)]
b_bits = [(b >> (7-i)) & 1 for i in range(8)]
inp = torch.tensor([float(x) for x in a_bits + b_bits])
gt = int((inp @ w['gt.weight'].T + w['gt.bias'] >= 0).item())
lt = int((inp @ w['lt.weight'].T + w['lt.bias'] >= 0).item())
eq = int((torch.tensor([float(gt), float(lt)]) @ w['eq.weight'].T + w['eq.bias'] >= 0).item())
return gt, lt, eq
# compare(200, 100) = (1, 0, 0) # 200 > 100
MIT