|
|
--- |
|
|
license: mit |
|
|
tags: |
|
|
- pytorch |
|
|
- safetensors |
|
|
- threshold-logic |
|
|
- neuromorphic |
|
|
- arithmetic |
|
|
- signed |
|
|
--- |
|
|
|
|
|
# threshold-twos-complement |
|
|
|
|
|
4-bit two's complement negation circuit. Computes -A for signed integers. |
|
|
|
|
|
## Circuit |
|
|
|
|
|
``` |
|
|
A[3:0] βββΊ Negate βββ¬βββΊ N[3:0] (-A) |
|
|
ββββΊ overflow (when A = -8) |
|
|
``` |
|
|
|
|
|
## Algorithm |
|
|
|
|
|
``` |
|
|
-A = ~A + 1 |
|
|
|
|
|
1. Invert all bits |
|
|
2. Add 1 |
|
|
``` |
|
|
|
|
|
## Truth Table |
|
|
|
|
|
| A (unsigned) | A (signed) | N (signed) | Overflow | |
|
|
|--------------|------------|------------|----------| |
|
|
| 0000 (0) | +0 | +0 | 0 | |
|
|
| 0001 (1) | +1 | -1 | 0 | |
|
|
| 0111 (7) | +7 | -7 | 0 | |
|
|
| 1000 (8) | -8 | -8 | 1 | |
|
|
| 1111 (15) | -1 | +1 | 0 | |
|
|
|
|
|
## Overflow |
|
|
|
|
|
The value -8 (1000) cannot be negated in 4-bit two's complement: |
|
|
- Range: -8 to +7 |
|
|
- -(-8) = +8, which exceeds +7 |
|
|
- Result wraps to -8, overflow flag set |
|
|
|
|
|
## Architecture |
|
|
|
|
|
| Component | Count | Neurons | |
|
|
|-----------|-------|---------| |
|
|
| Bit inverters | 4 | 4 | |
|
|
| Half-adder chain | 4 | 16 | |
|
|
| Overflow detect | 1 | 2 | |
|
|
|
|
|
**Total: 22 neurons, 63 parameters, 4 layers** |
|
|
|
|
|
## Examples |
|
|
|
|
|
``` |
|
|
-(+5) = ~(0101) + 1 = 1010 + 1 = 1011 = -5 β |
|
|
-(-3) = ~(1101) + 1 = 0010 + 1 = 0011 = +3 β |
|
|
-(-8) = ~(1000) + 1 = 0111 + 1 = 1000 = -8 (overflow!) |
|
|
``` |
|
|
|
|
|
## Usage |
|
|
|
|
|
```python |
|
|
from safetensors.torch import load_file |
|
|
|
|
|
w = load_file('model.safetensors') |
|
|
|
|
|
# All 16 cases verified |
|
|
# Overflow only when A = -8 (1000) |
|
|
``` |
|
|
|
|
|
## Files |
|
|
|
|
|
``` |
|
|
threshold-twos-complement/ |
|
|
βββ model.safetensors |
|
|
βββ create_safetensors.py |
|
|
βββ config.json |
|
|
βββ README.md |
|
|
``` |
|
|
|
|
|
## License |
|
|
|
|
|
MIT |
|
|
|