CharlesCNorton
4-bit carry-select adder
5993426
---
license: mit
tags:
- pytorch
- safetensors
- threshold-logic
- neuromorphic
- arithmetic
- adder
---
# threshold-carryselect-adder
4-bit carry-select adder as threshold circuit. Faster than ripple-carry by pre-computing results for both possible carry values.
## Circuit
```
A[3:0] ──┐
B[3:0] ──┼──► CSel Adder ──┬──► S[3:0]
Cin β”€β”€β”˜ └──► Cout
```
## How It Works
```
Block 0 (bits 0-1): Ripple-carry with actual Cin
└──► produces C1 (carry into bit 2)
Block 1 (bits 2-3): Pre-compute BOTH possibilities
Path A: assume Cin=0 β†’ S2_0, S3_0, Cout_0
Path B: assume Cin=1 β†’ S2_1, S3_1, Cout_1
Final: MUX selects Path A or B based on C1
```
## Timing Advantage
```
Ripple-Carry: [FA0]──►[FA1]──►[FA2]──►[FA3] (4 stages)
Carry-Select: [FA0]──►[FA1]──┐
[HA2]──►[FA3] β”œβ”€β”€β–Ί[MUX] (3 stages)
[FA2]──►[FA3]β”€β”€β”˜
```
Block 1 computes in parallel with Block 0.
## Architecture
| Component | Count | Neurons |
|-----------|-------|---------|
| Block 0 (2 FAs) | 2 | 14 |
| Block 1 cin=0 (HA+FA) | 2 | 11 |
| Block 1 cin=1 (2 FAs) | 2 | 14 |
| Output MUXes | 3 | 9 |
**Total: 48 neurons, 149 parameters, 4 layers**
## Trade-offs
- More neurons than ripple-carry (48 vs ~28)
- Faster critical path (3 stages vs 4)
- Scales well: 8-bit uses 4x2-bit blocks
## Usage
```python
from safetensors.torch import load_file
w = load_file('model.safetensors')
# All 512 test cases verified (16 Γ— 16 Γ— 2)
```
## Files
```
threshold-carryselect-adder/
β”œβ”€β”€ model.safetensors
β”œβ”€β”€ create_safetensors.py
β”œβ”€β”€ config.json
└── README.md
```
## License
MIT