threshold-mux2 / README.md
phanerozoic's picture
Upload folder using huggingface_hub
76f4679 verified
metadata
license: mit
tags:
  - pytorch
  - safetensors
  - threshold-logic
  - neuromorphic
  - multiplexer

threshold-mux2

2:1 multiplexer. The fundamental building block for data selection, routing one of two inputs to the output based on a select signal.

Circuit

    d0      d1
    β”‚       β”‚
    β”‚       β”‚       s (select)
    β”‚       β”‚       β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€
    β”‚       β”‚       β”‚
    β–Ό       β”‚       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”   β”‚       β”‚
β”‚ sel0  │◄──┼────────
β”‚d0∧¬s  β”‚   β”‚       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚       β”‚
    β”‚       β–Ό       β”‚
    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”   β”‚
    β”‚   β”‚ sel1  β”‚β—„β”€β”€β”˜
    β”‚   β”‚ d1∧s  β”‚
    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”˜
    β”‚       β”‚
    β””β”€β”€β”€β”¬β”€β”€β”€β”˜
        β–Ό
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”
    β”‚  OR   β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚
        β–Ό
      output

Truth Table

s d0 d1 out Description
0 0 0 0 Select d0 (0)
0 0 1 0 Select d0 (0)
0 1 0 1 Select d0 (1)
0 1 1 1 Select d0 (1)
1 0 0 0 Select d1 (0)
1 0 1 1 Select d1 (1)
1 1 0 0 Select d1 (0)
1 1 1 1 Select d1 (1)

Formula: out = (d0 AND NOT s) OR (d1 AND s)

Mechanism

Layer 1 - Selection Gates:

The circuit uses two AND-with-complement gates that fire only when their respective data input is selected:

Gate Weights [d0, d1, s] Bias Function
sel0 [1, 0, -1] -1 d0 AND NOT(s)
sel1 [0, 1, 1] -2 d1 AND s

sel0 fires when d0=1 AND s=0:

  • The negative weight on s means s=1 inhibits firing
  • Bias -1 requires d0=1 to reach threshold when s=0

sel1 fires when d1=1 AND s=1:

  • Both d1 and s must be 1 to overcome bias -2

Layer 2 - Output:

Simple OR gate combines the two selection paths.

Architecture

Component Weights Bias Function
sel0 [1, 0, -1] -1 d0 AND NOT(s)
sel1 [0, 1, 1] -2 d1 AND s
or [1, 1] -1 OR(sel0, sel1)

Parameters

Inputs 3 (d0, d1, s)
Outputs 1
Neurons 3
Layers 2
Parameters 11
Magnitude 10

Building Larger Multiplexers

The MUX2 is the primitive for constructing larger multiplexers:

MUX4  = MUX2(MUX2(d0,d1,s0), MUX2(d2,d3,s0), s1)
MUX8  = MUX2(MUX4(d0-d3), MUX4(d4-d7), s2)
MUX16 = MUX2(MUX8(d0-d7), MUX8(d8-d15), s3)

Each doubling adds one layer of MUX2 gates.

Usage

from safetensors.torch import load_file
import torch

w = load_file('model.safetensors')

def mux2(d0, d1, s):
    inp = torch.tensor([float(d0), float(d1), float(s)])

    # Layer 1: Selection
    sel0 = int((inp @ w['sel0.weight'].T + w['sel0.bias'] >= 0).item())
    sel1 = int((inp @ w['sel1.weight'].T + w['sel1.bias'] >= 0).item())

    # Layer 2: Combine
    l1 = torch.tensor([float(sel0), float(sel1)])
    return int((l1 @ w['or.weight'].T + w['or.bias'] >= 0).item())

# Examples
print(mux2(1, 0, 0))  # 1 (selects d0)
print(mux2(1, 0, 1))  # 0 (selects d1)
print(mux2(0, 1, 1))  # 1 (selects d1)

Applications

  • Data routing in ALUs
  • Register file read ports
  • Conditional assignment in hardware
  • Building blocks for barrel shifters
  • Crossbar switches

Files

threshold-mux2/
β”œβ”€β”€ model.safetensors
β”œβ”€β”€ model.py
β”œβ”€β”€ create_safetensors.py
β”œβ”€β”€ config.json
└── README.md

License

MIT