mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-07-31 03:05:21 +00:00
113 lines
4.1 KiB
Text
113 lines
4.1 KiB
Text
/-
|
|
Semantics/Timing.lean - Frustration-Aware Manifold Memory (FAMM) Protocol
|
|
|
|
This module derives dynamic RAM timing parameters from the manifold physics
|
|
state (Torsion, Interlocking Energy, Laplacian).
|
|
|
|
Parameters calculated:
|
|
- tTCL (Torsional CAS Latency)
|
|
- tMRE (Manifold Refresh Epoch)
|
|
- tDLL (Damping Laplacian Latency)
|
|
|
|
Lean is the source of truth.
|
|
-/
|
|
|
|
import Semantics.DynamicCanal
|
|
import Semantics.ManifoldFlow
|
|
|
|
namespace Semantics.Timing
|
|
|
|
open DynamicCanal
|
|
open Semantics.ManifoldFlow
|
|
|
|
-- =============================================================================
|
|
-- 1. FAMM TIMING CALCULUS (Q16.16)
|
|
-- =============================================================================
|
|
|
|
/-- Base JEDEC-adjacent constants for a 3200MT/s baseline -/
|
|
def tBaseCAS : Q16_16 := Q16_16.ofRawInt 0x00160000 -- 22 cycles
|
|
def tBaseREF : Q16_16 := Q16_16.ofRawInt 0x1E000000 -- 7.8μs (approx scaled)
|
|
def tBaseHammer : Q16_16 := Q16_16.ofRawInt 0x00080000 -- 8 cycles damping
|
|
def tMinFactor : Q16_16 := Q16_16.ofRawInt 0x00008000 -- 0.5
|
|
|
|
/-- Clamp a scaling factor into a positive timing-safe interval. -/
|
|
def clampFactor (value floor ceil : Q16_16) : Q16_16 :=
|
|
if value.isNeg then floor
|
|
else if value.val < floor.val then floor
|
|
else if value.val > ceil.val then ceil
|
|
else value
|
|
|
|
/-- Largest multiplicative factor that keeps tBaseREF inside Q16_16 range. -/
|
|
def maxRefreshFactor : Q16_16 :=
|
|
Q16_16.div Q16_16.maxVal tBaseREF
|
|
|
|
/--
|
|
Calculate Torsional CAS Latency (tTCL).
|
|
Higher torsional stress (Σ^2) indicates a "snagged" state that is easier to sense.
|
|
tTCL = tBase * (1 - λ * stress)
|
|
-/
|
|
def calculateTCL (stress : Q16_16) : Q16_16 :=
|
|
-- λ = 0.2 frustration sensitivity
|
|
let lambda : Q16_16 := Q16_16.ofRawInt 0x00003333
|
|
let reduction := Q16_16.mul lambda stress
|
|
let factor := Q16_16.sub Q16_16.one reduction
|
|
-- Clamp factor between [0.5, 1.0] to prevent physical instability
|
|
let clampedFactor := clampFactor factor tMinFactor Q16_16.one
|
|
Q16_16.mul tBaseCAS clampedFactor
|
|
|
|
/--
|
|
Calculate Manifold Refresh Epoch (tMRE).
|
|
Low interlocking energy (I_lock) implies the manifold is "slipping" from
|
|
its lock and needs refresh.
|
|
tMRE = tBase * (1 + β * lockingEnergy)
|
|
-/
|
|
def calculateMRE (energy : Q16_16) : Q16_16 :=
|
|
-- β = 1.5 stability gain
|
|
let beta : Q16_16 := Q16_16.ofRawInt 0x00018000
|
|
let safeEnergy := if energy.isNeg then Q16_16.zero else energy
|
|
let gain := Q16_16.mul beta safeEnergy
|
|
let factor := Q16_16.add Q16_16.one gain
|
|
let clampedFactor := clampFactor factor Q16_16.one maxRefreshFactor
|
|
Q16_16.mul tBaseREF clampedFactor
|
|
|
|
/--
|
|
Calculate Damping Laplacian Latency (tDLL) for RowHammer protection.
|
|
Based on neighbor-row "vibration" energy (Hodge-Laplacian Δϕ).
|
|
-/
|
|
def calculateDLL (laplacian : Q16_16) : Q16_16 :=
|
|
-- If Laplacian energy > threshold, increase damping delay
|
|
let threshold : Q16_16 := Q16_16.ofRawInt 0x00004000 -- 0.25
|
|
let lapEnergy := if laplacian.isNeg then Q16_16.abs laplacian else laplacian
|
|
if lapEnergy.val > threshold.val then
|
|
Q16_16.add tBaseHammer (Q16_16.ofRawInt 0x00040000) -- Add 4 cycles
|
|
else
|
|
tBaseHammer
|
|
|
|
-- =============================================================================
|
|
-- 2. TIMING STATE
|
|
-- =============================================================================
|
|
|
|
structure ManifoldTiming where
|
|
tcl : Q16_16
|
|
mre : Q16_16
|
|
dll : Q16_16
|
|
deriving Repr, DecidableEq, BEq
|
|
|
|
/-- Derive all FAMM parameters from a single manifold point state -/
|
|
def deriveTiming (p : ManifoldPoint) (laplacian : Q16_16) : ManifoldTiming :=
|
|
let stress := torsionalStress p.t
|
|
let lock := interlockingEnergy p.x_pos p.x0_pos p.a -- energy relative to preferred
|
|
{ tcl := calculateTCL stress
|
|
, mre := calculateMRE lock
|
|
, dll := calculateDLL laplacian
|
|
}
|
|
|
|
-- =============================================================================
|
|
-- 3. VERIFICATION WITNESSES
|
|
-- =============================================================================
|
|
|
|
-- #eval example: Baseline timing
|
|
#eval (calculateTCL (Q16_16.ofRawInt 0x00020000)).val -- expect slightly reduced CAS
|
|
#eval (calculateMRE (Q16_16.ofRawInt 0x00010000)).val -- expect increased refresh epoch
|
|
|
|
end Semantics.Timing
|