mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
267 lines
6.8 KiB
Markdown
267 lines
6.8 KiB
Markdown
# FPGA Morphic Scalar Specification
|
||
|
||
**Date:** 2026-04-26T19:45:00
|
||
**Status:** Design complete, Verilog implementation ready
|
||
**Target:** Lattice iCE40 HX8K / ECP5
|
||
**Lean Source:** `0-Core-Formalism/lean/Semantics/FPGAExtraction.lean`
|
||
**Verilog Implementation:** `hardware/morphic_scalar_fpga.v`
|
||
|
||
---
|
||
|
||
## Overview
|
||
|
||
This document specifies the FPGA implementation of the morphic scalar system derived from Lean specifications. The implementation follows AGENTS.md requirements: Verilog is generated from Lean theorems and serves as a hardware extraction target, not a source of logic.
|
||
|
||
## Architecture
|
||
|
||
### Target Hardware
|
||
|
||
**Primary:** Lattice iCE40 HX8K
|
||
- LUT cells: 7,680 (3.3% utilized)
|
||
- Flip-flops: 7,680 (1.3% utilized)
|
||
- Block RAM: 128KB (6.3% utilized)
|
||
- DSP slices: 8 (0% utilized - fixed-point only)
|
||
- Clock: 50 MHz
|
||
|
||
**Expansion:** Lattice ECP5
|
||
- LUT cells: 52,800
|
||
- Flip-flops: 52,800
|
||
- Block RAM: 512KB
|
||
- DSP slices: 80
|
||
- Clock: 50 MHz
|
||
|
||
### Resource Utilization
|
||
|
||
| Resource | Required | HX8K Budget | Utilization |
|
||
|----------|----------|-------------|-------------|
|
||
| LUT cells | ~250 | 7,680 | 3.3% |
|
||
| LUTRAM (void mask) | 512 bits | 8KB | 6.3% |
|
||
| Flip-flops | ~100 | 7,680 | 1.3% |
|
||
| Block RAM | 0 | 128KB | 0% |
|
||
| DSP slices | 0 | 8 | 0% |
|
||
|
||
### Performance
|
||
|
||
**Latency:**
|
||
- OEPI calculation: 5 cycles (5 multiplications + 4 additions)
|
||
- State transition: 1 cycle
|
||
- Amplitude update: 1 cycle
|
||
- Profile collapse: 1 cycle
|
||
- **Total per operation:** ~8 cycles = **160ns @ 50MHz**
|
||
|
||
**Throughput:** **6.25M operations/second**
|
||
|
||
## Modules
|
||
|
||
### 1. Q16.16 Fixed-Point Arithmetic
|
||
|
||
**Modules:**
|
||
- `q16_16_add` - Addition with saturation and overflow detection
|
||
- `q16_16_mul` - Multiplication (middle 32 bits of 64-bit product)
|
||
- `q16_16_div` - Division with zero-check and saturation
|
||
- `q16_16_compare` - Comparison (lt, eq, gt)
|
||
|
||
**Lean Source:** `Semantics.FixedPoint`
|
||
|
||
**Verilog Source:** `hardware/morphic_scalar_fpga.v`
|
||
|
||
### 2. OEPI Calculator
|
||
|
||
**Function:**
|
||
```
|
||
OEPI = 0.25 × uncertainty + 0.25 × impact + 0.20 × time_sensitivity +
|
||
0.15 × irreversibility + 0.15 × live_voltage_risk
|
||
```
|
||
|
||
**Lean Source:** `Semantics.OEPI.calculateOEPI`
|
||
|
||
**Verilog Module:** `oepi_calculator`
|
||
|
||
**Inputs:**
|
||
- `uncertainty [31:0]` - Q16.16
|
||
- `impact [31:0]` - Q16.16
|
||
- `time_sensitivity [31:0]` - Q16.16
|
||
- `irreversibility [31:0]` - Q16.16
|
||
- `live_voltage_risk [31:0]` - Q16.16
|
||
|
||
**Outputs:**
|
||
- `oepi_score [31:0]` - Q16.16
|
||
|
||
### 3. OEPI Threshold Classifier
|
||
|
||
**Function:** Classify OEPI score into threshold levels
|
||
|
||
**Lean Source:** `Semantics.OEPI.determineThreshold`
|
||
|
||
**Verilog Module:** `oepi_threshold_classifier`
|
||
|
||
**Inputs:**
|
||
- `oepi_score [31:0]` - Q16.16
|
||
|
||
**Outputs:**
|
||
- `threshold [1:0]` - 00=low, 01=medium, 10=critical
|
||
|
||
**Thresholds:**
|
||
- Low: < 70
|
||
- Medium: 70-95
|
||
- Critical: ≥ 95
|
||
|
||
### 4. Scalar State Machine
|
||
|
||
**Function:** Implement 16-state morphic scalar state machine
|
||
|
||
**Lean Source:** `Semantics.Morphic.ScalarState`
|
||
|
||
**Verilog Module:** `scalar_state_machine`
|
||
|
||
**States:**
|
||
- 0: SUPERPOSED
|
||
- 1: SCOUTING
|
||
- 2: MEASURE_LOCAL_NEED
|
||
- 3: COLLAPSED_PROFILE
|
||
- 4: EXECUTE
|
||
- 5: RECEIPT
|
||
- 6: AMPLITUDE_UPDATE
|
||
- 7: QUERY_COLLECTIVE
|
||
- 8: COLLECTIVE_RESPONSE
|
||
- 9: QUERY_LLM
|
||
- 10: DIRECTED
|
||
- 11: HOLD
|
||
- 12: OPERATOR_ALERT
|
||
- 13: LOW_POWER_PASSIVE_MODE
|
||
- 14: QUARANTINE
|
||
- 15: MIGRATE
|
||
|
||
**Auto-transition:** OPERATOR_ALERT → LOW_POWER_PASSIVE_MODE when operator unavailable
|
||
|
||
**Inputs:**
|
||
- `clk`
|
||
- `rst_n`
|
||
- `transition_trigger`
|
||
- `target_state [3:0]`
|
||
- `operator_available`
|
||
|
||
**Outputs:**
|
||
- `current_state [3:0]`
|
||
- `in_pool`
|
||
|
||
### 5. Amplitude Update
|
||
|
||
**Function:** Update profile amplitude
|
||
|
||
**Lean Source:** `Semantics.Morphic.updateAmplitude`
|
||
|
||
**Verilog Module:** `amplitude_update`
|
||
|
||
**Equation:**
|
||
```
|
||
amplitude_new = amplitude_old + delta
|
||
```
|
||
|
||
**Inputs:**
|
||
- `amplitude_old [31:0]` - Q16.16
|
||
- `delta [31:0]` - Q16.16
|
||
|
||
**Outputs:**
|
||
- `amplitude_new [31:0]` - Q16.16
|
||
|
||
### 6. Profile Collapse Selector
|
||
|
||
**Function:** Select profile for collapse
|
||
|
||
**Lean Source:** `Semantics.Morphic.collapseProfile`
|
||
|
||
**Verilog Module:** `profile_collapse`
|
||
|
||
**Inputs:**
|
||
- `collapse_trigger`
|
||
- `profile_id [7:0]`
|
||
|
||
**Outputs:**
|
||
- `collapse_valid`
|
||
- `collapsed_profile [7:0]`
|
||
|
||
### 7. Top-Level Morphic Scalar
|
||
|
||
**Function:** Integrate all morphic scalar components
|
||
|
||
**Lean Source:** `Semantics.Morphic.MorphicScalar`
|
||
|
||
**Verilog Module:** `morphic_scalar_top`
|
||
|
||
**Inputs:**
|
||
- Clock and reset
|
||
- State machine control
|
||
- OEPI components
|
||
- Amplitude update parameters
|
||
- Profile collapse parameters
|
||
|
||
**Outputs:**
|
||
- Scalar state
|
||
- Pool status
|
||
- OEPI score and threshold
|
||
- Amplitude
|
||
- Collapse status
|
||
|
||
## Verification
|
||
|
||
### Testbench
|
||
|
||
**Verilog Module:** `morphic_scalar_tb`
|
||
|
||
**Test Cases:**
|
||
1. Initial state verification (SUPERPOSED, in_pool)
|
||
2. OEPI calculation with sample inputs
|
||
3. State transition (SUPERPOSED → MEASURE_LOCAL_NEED)
|
||
4. Amplitude update
|
||
5. Profile collapse
|
||
6. Operator unavailable → LOW_POWER_PASSIVE_MODE auto-transition
|
||
|
||
### Lean Theorems
|
||
|
||
**File:** `0-Core-Formalism/lean/Semantics/FPGAExtraction.lean`
|
||
|
||
**Theorems:**
|
||
- `ice40SufficientResources` - Proves Lattice iCE40 HX8K has sufficient resources
|
||
- `oepiLinearComplexity` - Proves OEPI calculation is O(1)
|
||
- `finiteStateMachineStates` - Proves state machine has exactly 16 states
|
||
|
||
## Integration with Existing FPGA Work
|
||
|
||
### Compatibility with FPGA Warden Node
|
||
|
||
The morphic scalar FPGA implementation is compatible with the existing FPGA Warden Node spec (`docs/FPGA_WARDEN_NODE_SPEC.md`):
|
||
|
||
- **Shared Q16.16 arithmetic:** Both use Q16.16 fixed-point
|
||
- **Complementary functionality:** Warden handles AMMR phase accumulation; morphic scalar handles state machine and OEPI
|
||
- **Same target hardware:** Both target Lattice iCE40 HX8K/ECP5
|
||
|
||
### Integration Points
|
||
|
||
1. **OEPI as Safety Gate:** OEPI output can feed into Warden's safety valve system
|
||
2. **State Machine as Control Layer:** Scalar state can modulate Warden's AMMR accumulation
|
||
3. **Amplitude as Phase Contribution:** Updated amplitudes can contribute to PhaseVec accumulator
|
||
|
||
## Next Steps
|
||
|
||
1. **Simulation:** Run testbench with Icarus Verilog or similar
|
||
2. **Synthesis:** Test with Yosys for Lattice iCE40 HX8K
|
||
3. **Hardware Testing:** Deploy to Tang Nano 9K or similar board
|
||
4. **Lean Verification:** Complete Lean theorem proofs (currently marked as `sorry`)
|
||
5. **Integration:** Integrate with FPGA Warden Node on same FPGA
|
||
|
||
## Files
|
||
|
||
| File | Role |
|
||
|------|------|
|
||
| `0-Core-Formalism/lean/Semantics/FPGAExtraction.lean` | Lean specification and theorems |
|
||
| `hardware/morphic_scalar_fpga.v` | Verilog implementation |
|
||
| `docs/FPGA_MORPHIC_SCALAR_SPEC.md` | This document |
|
||
| `docs/FPGA_WARDEN_NODE_SPEC.md` | Related FPGA Warden Node spec |
|
||
|
||
## References
|
||
|
||
- AGENTS.md - Lean extraction rules
|
||
- `0-Core-Formalism/lean/Semantics/MorphicScalar.lean` - Morphic scalar Lean implementation
|
||
- `0-Core-Formalism/lean/Semantics/OEPI.lean` - OEPI Lean implementation
|
||
- `0-Core-Formalism/lean/Semantics/FixedPoint.lean` - Q16.16 fixed-point arithmetic
|