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/audit-ddr-remaining-shared-vias.ts

/** Bounded read-only shared-via search. Diagnostic output cannot replace a candidate. */
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'
const dir=resolve(process.argv[2]??'dist/ddr-integrated-ten-power56'),out=resolve(process.argv[3]??'dist/ddr-remaining-shared-via-audit'),read=(n:string)=>JSON.parse(readFileSync(`${dir}/${n}`,'utf8')),c=read('candidate.circuit.json'),audit=read('ram-power-launch-audit.json'),report=read('report.json'),started=Date.now(),results:any[]=[],hits:any[]=[]
const sourceName=(id:string)=>{const t=c.find((e:any)=>e.type==='pcb_trace'&&e.pcb_trace_id===id);return c.find((e:any)=>e.type==='source_trace'&&e.source_trace_id===t?.source_trace_id)?.name??id}
for(const row of audit.unresolved){
 const trace=c.find((e:any)=>e.type==='pcb_trace'&&e.pcb_trace_id===row.pcbTraceId),a=trace.route[0],plane=report.planeAudit.find((p:any)=>p.layer===(row.terminal.startsWith('VSS')?'inner1':'inner3')),seen=new Set<string>(),vias=plane.viaContacts.filter((v:any)=>{const k=`${v.x}:${v.y}`;if(seen.has(k))return false;seen.add(k);return v.annulusSamplesInPlane===32}).map((v:any)=>{const dx=Math.abs(v.x-a.x),dy=Math.abs(v.y-a.y);return{...v,minimumLengthMm:Math.max(dx,dy)+(Math.SQRT2-1)*Math.min(dx,dy),users:audit.rows.filter((r:any)=>r.connectionVia&&Math.hypot(r.connectionVia.x-v.x,r.connectionVia.y-v.y)<1e-7).map((r:any)=>`${r.byte}:${r.terminal}`)}}).filter((v:any)=>v.minimumLengthMm<=1.524+1e-8),attempts:any[]=[],base=c.filter((e:any)=>e!==trace&&e.type!=='pcb_copper_pour')
 for(const v of vias){if(v.users.length>=2){attempts.push({via:v,status:'sharing-limit'});continue}
  const dx=v.x-a.x,dy=v.y-a.y,sx=Math.sign(dx),sy=Math.sign(dy),ax=Math.abs(dx),ay=Math.abs(dy)
  if(ay<ax||!sx||!sy){attempts.push({via:v,status:'unsupported-template'});continue}
  for(const q of[0,.025,.05,.075,.1,.125,.15,.175]){const vertical=ay-ax-2*q,length=ay+(Math.SQRT2-1)*(ax+2*q);if(vertical<0||length>1.524)continue
   for(let k=0;k<=24;k++){
    if(Date.now()-started>60000)break
    const lead=vertical*k/24,points=[a,{x:a.x-sx*q,y:a.y+sy*q},{x:a.x-sx*q,y:a.y+sy*(q+lead)},{x:v.x,y:a.y+sy*(ax+2*q+lead)},v],route:any[]=[a]
    for(const p of points.slice(1)){const prev=route.at(-1);if(Math.hypot(p.x-prev.x,p.y-prev.y)>1e-8)route.push({route_type:'wire',x:p.x,y:p.y,width:.12,layer:'top'})}
    const candidate={...trace,route},r=verifyDdrSystemCopper(base,[candidate],[],{},0),pass=!r.errors.length&&!r.violations.length&&r.angles.valid&&!r.joinedBends.length
    attempts.push({viaId:v.id,q,verticalBeforeDiagonal:lead,lengthMm:length,pass,minimumClearanceMm:r.minClearanceMm,blockers:r.violations.map((w:any)=>({layer:w.layer,gapMm:w.gapMm,a:sourceName(w.aShape.traceId??w.aShape.join),b:sourceName(w.bShape.traceId??w.bShape.join)})),angleViolations:r.angles.violations.length,joined:r.joinedBends.length})
    if(pass){const full=verifyDdrSystemCopper(c.filter((e:any)=>e!==trace),[candidate],[],{},0);hits.push({byte:row.byte,terminal:row.terminal,via:v,lengthMm:length,candidate,full:{errors:full.errors,violations:full.violations,angles:full.angles,joined:full.joinedBends,minClearanceMm:full.minClearanceMm}});break}
   }
   if(hits.some(h=>h.byte===row.byte&&h.terminal===row.terminal)||Date.now()-started>60000)break
  }
 }
 results.push({byte:row.byte,terminal:row.terminal,eligibleVias:vias,attempts})
 if(Date.now()-started>60000)break
}
mkdirSync(out,{recursive:true});const result={captureHash:report.captureHash,parentCircuitSha256:objectHash(c),elapsedMs:Date.now()-started,scope:'Read-only bounded shared-via approach search; all top copper checked, successful candidates additionally include all planes. No canonical changes and no launch qualification claim.',results,hits};writeFileSync(`${out}/report.json`,JSON.stringify(result,null,2));console.log(JSON.stringify({...result,results:results.map(r=>({byte:r.byte,terminal:r.terminal,eligibleVias:r.eligibleVias,attempts:r.attempts.length})),hits:hits.map(h=>({byte:h.byte,terminal:h.terminal,lengthMm:h.lengthMm,full:h.full}))},null,2))