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/experiment-ddr-e2-via-relocation.ts

/** Bounded E2/C1 co-design experiment against the accepted ordered-DM board. */
import{readFileSync,writeFileSync,mkdirSync}from'node:fs'
import{resolve}from'node:path'
import{objectHash}from'./improve-ddr-a9-power-launches'
import{verifyDdrSystemCopper}from'./check-ddr-system-copper'
import{sharedViaApproaches}from'./plan-ddr-ram-power-via-reuse'
const dir=resolve(process.argv[2]??'dist/ddr-dm0-ordered-host'),out=resolve('dist/ddr-e2-relocation-experiment'),read=(n:string)=>JSON.parse(readFileSync(`${dir}/${n}`,'utf8')),parent=read('candidate.circuit.json'),audit=read('ram-power-launch-audit.json'),report=read('report.json'),attempts:any[]=[],hits:any[]=[],witnesses:any[]=[],started=Date.now()
if(audit.launchQualified!==56)throw Error('Expected actual56power parent')
for(const byte of[0,1]){
 const row=(term:string)=>audit.rows.find((r:any)=>r.byte===byte&&r.terminal===term),trace=(r:any)=>parent.find((e:any)=>e.type==='pcb_trace'&&e.pcb_trace_id===r.pcbTraceId),e2=trace(row('VDDQ_E2')),c1=trace(row('VDDQ_C1')),d1=trace(row('VSSQ_D1')),target=row('VSS_F2').connectionVia,old=e2.route[2],rendered=parent.filter((e:any)=>e.type==='pcb_via'&&e.pcb_trace_id===e2.pcb_trace_id),pad=parent.find((e:any)=>e.type==='pcb_smtpad'&&e.pcb_smtpad_id===row('VDDQ_E2').padId),users=audit.rows.filter((r:any)=>r.connectionVia&&Math.hypot(r.connectionVia.x-old.x,r.connectionVia.y-old.y)<1e-7)
 if(rendered.length!==1||users.length!==2||!users.some((r:any)=>r.terminal==='VDDQ_C1'))throw Error('Expected exactE2/C1sharedbarrel')
 witnesses.push({byte,e2,c1,d1,rendered:rendered[0],beforeHashes:{e2:objectHash(e2),c1:objectHash(c1),d1:objectHash(d1),rendered:objectHash(rendered[0])},retainedVrefPad:parent.find((e:any)=>e.type==='pcb_smtpad'&&e.pcb_smtpad_id===(byte?'pcb_smtpad_570':'pcb_smtpad_492'))})
 position:for(const dx of[-.1,-.15,-.2,-.25,-.3,-.35,-.4])for(const dy of[-.3,-.2,-.1,0,.1,.2,.3]){
  if(Date.now()-started>55000)break position
  const v={x:old.x+dx,y:old.y+dy},padHoleGap=Math.hypot(v.x-pad.x,v.y-pad.y)-.127-pad.radius
  if(padHoleGap<.1016-1e-8){attempts.push({byte,dx,dy,status:'own-pad-drill-gap',padHoleGap});continue}
  const viaGap=Math.min(...parent.filter((e:any)=>e.type==='pcb_via'&&!rendered.includes(e)).map((e:any)=>Math.hypot(v.x-e.x,v.y-e.y)-.2286-e.outer_diameter/2))
  if(viaGap<.1016-1e-8){attempts.push({byte,dx,dy,status:'other-barrel-gap',viaGap});continue}
  const e2Routes=sharedViaApproaches(e2.route[0],v),c1Routes=sharedViaApproaches(c1.route[0],v)
  if(!c1Routes.length){attempts.push({byte,dx,dy,status:'C1-exceeds1.524mm'});continue}
  for(const er of e2Routes)for(const cr of c1Routes){
   const moved={...e2,route:[...er,{...old,...v}]},shared={...c1,route:cr},newRendered={...rendered[0],...v},fixed=[...parent.filter((e:any)=>e.type!=='pcb_copper_pour'&&e!==e2&&e!==c1&&e!==d1&&!rendered.includes(e)),moved,shared,newRendered],r=verifyDdrSystemCopper(fixed,[moved,shared],[],{},0)
   if(r.errors.length||r.violations.length||!r.angles.valid||r.joinedBends.length){attempts.push({byte,dx,dy,status:'relocation-copper-blocked',padHoleGap,viaGap,errors:r.errors,blockers:r.violations.map((w:any)=>({layer:w.layer,gapMm:w.gapMm,a:w.aShape.traceId??w.aShape.join,b:w.bShape.traceId??w.bShape.join})),joined:r.joinedBends});continue}
   const a=d1.route[0],ex=target.x-a.x,ey=target.y-a.y,vertical=ey-Math.abs(ex)
   for(let k=0;k<=20;k++){
    const lead=vertical*k/20,points=[a,{x:a.x,y:a.y+lead},{x:target.x,y:a.y+lead+Math.abs(ex)},target],route:any[]=[a]
    for(const p of points.slice(1))if(Math.hypot(p.x-route.at(-1).x,p.y-route.at(-1).y)>1e-8)route.push({route_type:'wire',x:p.x,y:p.y,width:.12,layer:'top'})
    const added={...d1,route},check=verifyDdrSystemCopper(fixed,[moved,shared,added],[],{},0),pass=!check.errors.length&&!check.violations.length&&check.angles.valid&&!check.joinedBends.length
    attempts.push({byte,dx,dy,lead,status:pass?'conductor-clear-pending-planes':'D1-approach-blocked',padHoleGap,viaGap,minClearanceMm:check.minClearanceMm,blockers:check.violations.map((w:any)=>({layer:w.layer,gapMm:w.gapMm,a:w.aShape.traceId??w.aShape.join,b:w.bShape.traceId??w.bShape.join})),joined:check.joinedBends})
    if(pass){hits.push({byte,afterE2:moved,afterC1:shared,afterRendered:newRendered,afterD1:added,conductorReport:check});break position}
   }
  }
 }
}
mkdirSync(out,{recursive:true});writeFileSync(`${out}/report.json`,JSON.stringify({captureHash:report.captureHash,parentDirectory:dir,parentCircuitSha256:objectHash(parent),elapsedMs:Date.now()-started,witnesses,attempts,hits,scope:'Read-only E2opposite-rail barrel relocation plus both existing E2/C1launch replacements, retainingVREFDQpad. All conductor layers checked; any hit requires newplanes/contact/topology audit before acceptance. No canonical changes.'},null,2));console.log(JSON.stringify({elapsedMs:Date.now()-started,attempts:attempts.length,hits:hits.map(h=>({byte:h.byte,via:h.afterRendered}))}))