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-d9-connected.ts

/** Exact D9 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 D9cache routed-D9 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!==14||host.traces.length!==15||raw.length!==1||raw[0].source_trace_id!=='source_trace_687'||changes.invalidatedHostTraces.length!==0||cache.length!==72||!auditRouteAngles(cache).valid)throw Error('D9 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('ExactD9replaydiffers');if(!Number.isFinite(routeReport.fullPlanarMm)||!Number.isFinite(routeReport.nominalMm))throw Error('MissingD9length');
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_687'),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 D9 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!==15||Math.abs(fullPlanarMm-routeReport.fullPlanarMm)>1e-7||fullPlanarMm>routeReport.nominalMm+1e-7)throw Error('D9 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('D9 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:15,preservedHostCount:14,physical:topology.physical,topology,terminalContract:terminal,fullCandidateAngles:allAngles,fixedJunctionAudit:allJunctions,planeAudit,ramByte1CacheSha256:objectHash(cache),d9Evidence:{routeReport,escapeMm,fullPlanarMm},inputFileHashes:Object.fromEntries(hashes),scope:'Fifteen physical endpoint-only hosts; fourteen prior hosts unchanged, RAM1C7D9exitinner6 and newCPUtop/fullbarrelhost. D9belowbyte 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: B7andC7changed,70unchanged,zeroextra padding. D9inner6nowhosted; 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:15,power:56,fullPlanarMm}))