0hmX/am3352
This code suite comprises TypeScript scripts that analyze, verify, and assemble complex DDR memory interface hardware, focusing on physical routing, via and pad placement, electrical clearance, and physical constraints, often involving precise geometric calculations and consistent provenance tracking.
- Version
- 1.0.5
- License
- unset
- Stars
- 0
scripts/assemble-ddr-d14-connected.ts
/** Exact D14 replacement: revised RAM escape, retired old host, new inner2 host. */
import{readFileSync,writeFileSync,mkdirSync}from'node:fs'
import{resolve}from'node:path'
import{createHash}from'node:crypto'
import{verifyDdrCapture}from'./ddr-capture-provenance'
import{objectHash}from'./improve-ddr-a9-power-launches'
import{applyFacingExitReplacements}from'./ddr-facing-context'
import{auditCompositeHostTopology}from'./ddr-composite-routing-context'
import{auditRouteAngles}from'./check-route-angles'
import{auditDdrTraceJunctions}from'./check-ddr-system-copper'
import{checkHostTerminalContract}from'./route-ddr-sequential'
import{refreshDdrPlaneContacts}from'./ddr-plane-contact-audit'
const[capture,parentDir,cacheDir,routeDir,out]=process.argv.slice(2);if(!out)throw Error('Usage: capture original12parent D14cache routed-D14 output')
const hashes=new Map<string,string>(),fh=(p:string)=>createHash('sha256').update(readFileSync(p)).digest('hex'),read=(p:string)=>{p=resolve(p);hashes.set(p,fh(p));return JSON.parse(readFileSync(p,'utf8'))},bind=(hs:any)=>{for(const[p,h]of Object.entries(hs??{})){if(fh(p)!==h)throw Error(`Stale bound input ${p}`);hashes.set(p,h as string)}}
const{captureHash}=verifyDdrCapture(capture),parent=read(resolve(parentDir,'candidate.circuit.json')),prior=read(resolve(parentDir,'report.json')),cacheCandidate=read(resolve(cacheDir,'candidate.circuit.json')),cacheReport=read(resolve(cacheDir,'report.json')),cacheHost=read(resolve(cacheDir,'host-bundle.json')),changes=read(resolve(cacheDir,'replacements.json')),input=read(resolve(cacheDir,'routing-input.json')),cache=read(resolve(cacheDir,'ram-byte1-facing-progress.trace-paths.json')),contract=read(resolve(cacheDir,'ram-byte1-exit-contract.json')),routed=read(resolve(routeDir,'candidate.circuit.json')),host=read(resolve(routeDir,'host-bundle.json')),raw=read(resolve(routeDir,'raw-traces.json')),routeReport=read(resolve(routeDir,'report.json'))
if(!cacheReport.accepted||!routeReport.accepted||[prior,cacheReport,host,routeReport].some(x=>x.captureHash!==captureHash)||prior.candidateCircuitSha256!==objectHash(parent)||cacheReport.candidateCircuitSha256!==objectHash(cacheCandidate)||host.layerSpace!=='physical'||cacheHost.traces.length!==15||host.traces.length!==16||raw.length!==1||raw[0].source_trace_id!=='source_trace_692'||changes.invalidatedHostTraces.length!==0||cache.length!==72||!auditRouteAngles(cache).valid)throw Error('D14 capture/count/cache provenance mismatch')
const routeEvidence=read(resolve(routeDir,'input-evidence.json'));bind(routeEvidence.inputHashes);bind(cacheReport.inputFileHashes);const replay=applyFacingExitReplacements(parent,changes);if(objectHash(replay)!==objectHash(cacheCandidate)||objectHash(host.traces)!==objectHash([...cacheHost.traces,...raw]))throw Error('ExactD14replaydiffers');if(!Number.isFinite(routeReport.fullPlanarMm)||!Number.isFinite(routeReport.nominalMm))throw Error('MissingD14length');
const planes=routed.filter((e:any)=>e.type==='pcb_copper_pour'),oldPlanes=parent.filter((e:any)=>e.type==='pcb_copper_pour');if(planes.length!==3)throw Error('Unexpected plane count')
const planeChanges=planes.map((after:any)=>{const before=oldPlanes.find((p:any)=>p.pcb_copper_pour_id===after.pcb_copper_pour_id);if(!before||before.layer!==after.layer||before.source_net_id!==after.source_net_id)throw Error('Plane identity changed');return{id:`pcb_copper_pour:${before.pcb_copper_pour_id}`,before,after}}),candidate=[...cacheCandidate.map((e:any)=>e.type==='pcb_copper_pour'?planeChanges.find((p:any)=>p.before.pcb_copper_pour_id===e.pcb_copper_pour_id)!.after:e),...raw],sorted=(xs:any[])=>xs.map(objectHash).sort()
if(objectHash(sorted(candidate))!==objectHash(sorted(routed)))throw Error('Undeclared routing changes')
const topology=auditCompositeHostTopology(candidate,host.traces,input.connections),allAngles=auditRouteAngles(candidate.filter((e:any)=>e.type==='pcb_trace')),allJunctions=auditDdrTraceJunctions(candidate,input.connections),terminal=checkHostTerminalContract(host.traces,input.connections.filter((c:any)=>host.traces.some((t:any)=>t.connection_name===c.name))),planeAudit=refreshDdrPlaneContacts(prior.planeAudit,planes,candidate)
const planar=(r:any[])=>r.reduce((n:number,b:any,i:number)=>{const a=r[i-1];return n+(a?.route_type==='wire'&&b.route_type==='wire'&&a.layer===b.layer?Math.hypot(a.x-b.x,a.y-b.y):0)},0),conn=input.connections.find((c:any)=>c.source_trace_id==='source_trace_692'),escapeMm=conn.pointsToConnect.map((p:any)=>{const e=candidate.find((e:any)=>e.type==='pcb_breakout_point'&&e.pcb_breakout_point_id===p.pointId),ts=candidate.filter((t:any)=>t.type==='pcb_trace'&&t.source_trace_id===e?.source_trace_id&&t.route.at(-1)?.layer===p.layer&&Math.hypot(t.route.at(-1).x-p.x,t.route.at(-1).y-p.y)<1e-7);if(ts.length!==1)throw Error('Ambiguous D14 actual escape');return planar(ts[0].route)}),fullPlanarMm=escapeMm.reduce((a:number,b:number)=>a+b,0)+planar(raw[0].route)
if(!topology.valid||!allAngles.valid||!allJunctions.valid||!terminal.valid||topology.physical.connectivity.filter(c=>c.connected).length!==16||Math.abs(fullPlanarMm-routeReport.fullPlanarMm)>1e-7||fullPlanarMm>routeReport.nominalMm+1e-7)throw Error('D14 actual physical/length gates fail')
const replacements=[...changes.traces,...changes.breakoutPoints,...planeChanges].map((r:any)=>({...r,id:`${r.before.type}:${r.before[`${r.before.type}_id`]}`})),manifest={captureHash,parentDirectory:resolve(parentDir),parentCircuitSha256:objectHash(parent),candidateCircuitSha256:objectHash(candidate),replacements,removals:[],additions:raw,sourceRamExitChanges:changes,allOtherElementsExact:true,inputHashes:Object.fromEntries(hashes)}
const assertUnchanged=()=>{verifyDdrCapture(capture);for(const[p,h]of hashes)if(fh(p)!==h)throw Error('D14 assembly input changed')};assertUnchanged();mkdirSync(out,{recursive:true});const write=(n:string,v:any)=>writeFileSync(resolve(out,n),JSON.stringify(v,null,2)+'\n')
const report={...prior,accepted:true,captureHash,candidateCircuitSha256:objectHash(candidate),supportCircuitSha256:objectHash(candidate),hostTracesSha256:objectHash(host.traces),hostBundleSha256:objectHash(host),originalCopperReplacementsSha256:objectHash(manifest),connectedHostCount:16,preservedHostCount:15,physical:topology.physical,topology,terminalContract:terminal,fullCandidateAngles:allAngles,fixedJunctionAudit:allJunctions,planeAudit,ramByte1CacheSha256:objectHash(cache),d14Evidence:{routeReport,escapeMm,fullPlanarMm},inputFileHashes:Object.fromEntries(hashes),scope:'Sixteen physical endpoint-only hosts; fifteenpriorhosts unchanged, RAM1D2D14exitinner2 andCPUinner4/fullbarreltransition. D14belowbyte nominalmaximum butnotDQS1matched; remainingdata/control/power/referenceandSIqualification incomplete.'}
write('candidate.circuit.json',candidate);write('host-bundle.json',host);write('routing-input.json',{...input,traces:host.traces,obstacles:undefined});write('original-copper-replacements.json',manifest);write('report.json',report);write('host-route-report.json',routeReport);write('source-provenance.json',{inputHashes:Object.fromEntries(hashes),cacheReport,priorReportSha256:objectHash(prior)});write('ram-byte1-facing-progress.trace-paths.json',cache);write('ram-byte1-exit-contract.json',{...contract,candidateCircuitSha256:objectHash(candidate),scope:'Actual experimental72-path RAM1 cache: B7,C7,D2changed,69unchanged,zeroextra padding. D14inner2nowhosted; completeDDRqualification unresolved.'})
write('ram-byte0-facing-progress.trace-paths.json',read(resolve(parentDir,'ram-byte0-facing-progress.trace-paths.json')));write('exit-contract.json',{...read(resolve(parentDir,'exit-contract.json')),candidateCircuitSha256:objectHash(candidate)});
for(const script of['audit-ddr-global-power-launches.ts','audit-ddr-host-reference-coverage.ts']){const p=Bun.spawn(['bun',`scripts/${script}`,resolve(out),resolve(capture)],{stdout:'inherit',stderr:'inherit'});if(await p.exited!==0)throw Error(`Audit failed ${script}`)}
const power=JSON.parse(readFileSync(resolve(out,'ram-power-launch-audit.json'),'utf8'));if(power.launchQualified!==56||power.total!==60)throw Error('Power qualification changed');assertUnchanged();write('report.json',{...report,launchAuditSha256:objectHash(power),launchQualified:56,totalRamPowerPads:60});const budgets=Bun.spawn(['bun','scripts/audit-ddr-current-byte-budgets.ts',resolve(capture),resolve(out),resolve(out,'current-byte-budgets.json')],{stdout:'inherit',stderr:'inherit'});if(await budgets.exited!==0)throw Error('Currentbyteauditfailed');console.log(JSON.stringify({out,hosts:16,power:56,fullPlanarMm}))