| --- |
| license: mit |
| tags: |
| - pytorch |
| - safetensors |
| - threshold-logic |
| - neuromorphic |
| --- |
| |
| # threshold-comparator4bit |
|
|
| 4-bit magnitude comparator. Compares two 4-bit unsigned integers. |
|
|
| ## Function |
|
|
| compare(A, B) -> (GT, LT, EQ) |
|
|
| - GT = 1 if A > B |
| - LT = 1 if A < B |
| - EQ = 1 if A = B |
|
|
| ## Inputs |
|
|
| | Input | Description | |
| |-------|-------------| |
| | A3-A0 | 4-bit number A (A3 is MSB) | |
| | B3-B0 | 4-bit number B (B3 is MSB) | |
|
|
| ## Architecture |
|
|
| ``` |
| A3 A2 A1 A0 B3 B2 B1 B0 |
| | | | | | | | | |
| +--+--+--+--+--+--+--+ |
| | | |
| v v |
| [GT: A-B >= 1] [LT: B-A >= 1] |
| | | |
| +--------+--------+ |
| | |
| v |
| [EQ: NOR(GT,LT)] |
| ``` |
|
|
| Layer 1: |
| - GT: weights [8, 4, 2, 1, -8, -4, -2, -1], bias -1 |
| - LT: weights [-8, -4, -2, -1, 8, 4, 2, 1], bias -1 |
|
|
| Layer 2: |
| - EQ: weights [-1, -1], bias 0 (NOR gate) |
|
|
| ## Parameters |
|
|
| | | | |
| |---|---| |
| | Inputs | 8 | |
| | Outputs | 3 (GT, LT, EQ) | |
| | Neurons | 3 | |
| | Layers | 2 | |
| | Parameters | 21 | |
| | Magnitude | 64 | |
|
|
| ## Usage |
|
|
| ```python |
| from safetensors.torch import load_file |
| import torch |
| |
| w = load_file('model.safetensors') |
| |
| def compare4(a3, a2, a1, a0, b3, b2, b1, b0): |
| inp = torch.tensor([float(a3), float(a2), float(a1), float(a0), |
| float(b3), float(b2), float(b1), float(b0)]) |
| gt = int((inp @ w['gt.weight'].T + w['gt.bias'] >= 0).item()) |
| lt = int((inp @ w['lt.weight'].T + w['lt.bias'] >= 0).item()) |
| gt_lt = torch.tensor([float(gt), float(lt)]) |
| eq = int((gt_lt @ w['eq.weight'].T + w['eq.bias'] >= 0).item()) |
| return gt, lt, eq |
| |
| # Compare 5 vs 3 |
| gt, lt, eq = compare4(0, 1, 0, 1, 0, 0, 1, 1) |
| print(f"5 vs 3: GT={gt}, LT={lt}, EQ={eq}") # GT=1, LT=0, EQ=0 |
| ``` |
|
|
| ## License |
|
|
| MIT |
|
|