Threshold Logic Circuits
Collection
Boolean gates, voting functions, modular arithmetic, and adders as threshold networks.
β’
248 items
β’
Updated
β’
1
8-to-3 priority encoder. Outputs the binary index of the highest-priority active input.
xβ xβ xβ xβ xβ xβ
xβ xβ
β β β β β β β β
ββββ΄βββ΄βββ΄βββΌβββ΄βββ΄βββ΄βββ
β
ββββββββββββΌβββββββββββ
β β β
βΌ βΌ βΌ
ββββββββ ββββββββ ββββββββ
βwinβ β...βwinβ β...βwinβ β Layer 1: Winner detectors
β+1,0..β βinhibitβ βjust β (8 neurons)
βb=-1 β βhigher β βxβ β
ββββββββ ββββββββ ββββββββ
β β β
ββββββ¬ββββββ΄βββββ¬ββββββ
β β
ββββββ΄βββββββββββ΄βββββ
β yβ OR ββ yβ OR β Layer 2: Output encoding
β 1,3,5,7 ββ 4,5,6,7 β (4 neurons)
ββββββββββββββββββββββ
β β
βΌ βΌ
yβ yβ yβ valid
Winner Detection: Each position has a neuron that fires only when:
winnerβ
: fires when xβ
=1 AND xβ=0 AND xβ=0
weights: [0, 0, 0, 0, 0, +1, -1, -1]
bias: -1
Output Encoding: The 3-bit output is assembled by OR-ing the appropriate winners:
| Active inputs | Winner | Output (yβyβyβ) | Index |
|---|---|---|---|
| xβ only | winβ | 000 | 0 |
| xβ only | winβ | 011 | 3 |
| xβ only | winβ | 111 | 7 |
| xβ, xβ | winβ | 011 | 3 |
| xβ, xβ , xβ | winβ | 110 | 6 |
| all | winβ | 111 | 7 |
| none | none | 000 | 0* |
*valid=0 when no inputs active
Highest index wins. xβ has absolute priority over all others.
| Input | Priority |
|---|---|
| xβ | Highest |
| xβ | ... |
| ... | ... |
| xβ | Lowest |
| Layer | Neurons | Function |
|---|---|---|
| 1 | 8 | Winner detectors |
| 2 | 4 | Output OR gates (yβ, yβ, yβ, valid) |
Total: 12 neurons, 96 parameters, 2 layers
The key insight: each winner neuron is inhibited by all higher-priority inputs.
winnerβ weights: [0, 0, 0, +1, -1, -1, -1, -1]
xβ xβ xβ
xβ xβ
If any of xβ-xβ is active, the negative weight cancels xβ's contribution.
from safetensors.torch import load_file
import torch
w = load_file('model.safetensors')
def priority_encode(bits):
"""Returns (y2, y1, y0, valid)"""
# See model.py for full implementation
pass
# Multiple active: highest wins
bits = [1, 0, 1, 0, 0, 1, 0, 0] # x0, x2, x5 active
y2, y1, y0, valid = priority_encode(bits)
# Result: (1, 0, 1, 1) = index 5
threshold-priorityencoder/
βββ model.safetensors
βββ model.py
βββ config.json
βββ README.md
MIT