alti px로 CPU에서 정적 타이밍과 FDTD2D 실행하기
PX 작업을 조회하고, 프로젝트 입력으로 정적 타이밍을 실행하고, 결과를 보관한 뒤 다시 열고, CPU에서 FDTD2D 픽스처를 실행합니다.
Linux에서 Altifigence CLI 0.1.9를 사용해 프로젝트의 inputs/ 폴더에 있는 파일로 PX 작업을 실행하세요. 기능 조회로 시작해 단일 클럭 정적 타이밍을 실행하고, 결과를 프로젝트의 산출물 저장소에 보관한 다음, 내장 FDTD2D 픽스처를 CPU 백엔드로 실행하세요.
PX 작업 조회하기
설치된 PX 기능 문서를 읽으세요. 이 명령은 조회이며, JSON 문서를 출력할 뿐 작업을 실행하지 않습니다. alti px fdtd2d readiness는 CPU 임대 없이 설치된 FDTD2D의 준비 상태를 보고합니다.
alti px capabilities
alti px fdtd2d capabilities
alti px fdtd2d readiness각 명령의 종료 상태가 0인지 확인하세요.
정적 타이밍 실행하기
로컬 프로젝트의 절대 경로를 사용하고 일반 사용자 계정으로 명령을 실행하세요. PX는 프로젝트의 inputs/ 폴더에서 입력 파일을 읽습니다. inputs/ 기준 상대 파일 이름을 전달하세요.
set -euo pipefail
PROJECT="$(cd "$HOME/alti-projects/demo-project" && pwd -P)"
WORK="$(mktemp -d)"
mkdir -p "$PROJECT/inputs"
cat > "$PROJECT/inputs/timing.json" <<'JSON'
{
"schema": "altifigence.px.static-timing-request.v1",
"version": 1,
"delayModel": "explicit_arc_min_max",
"cornerModel": "single_caller_resolved",
"libraryModel": "none",
"graph": {
"nodeIds": ["in", "mid", "out"],
"sourceNodeId": "in",
"sourceMinArrivalNs": 0.0,
"sourceMaxArrivalNs": 0.0,
"arcs": [
{"id": "a1", "fromNodeId": "in", "toNodeId": "mid", "minDelayNs": 0.1, "maxDelayNs": 0.2},
{"id": "a2", "fromNodeId": "mid", "toNodeId": "out", "minDelayNs": 0.3, "maxDelayNs": 0.4}
]
},
"constraints": {
"clockPeriodNs": 1.0,
"setupTimeNs": 0.05,
"holdTimeNs": 0.02,
"setupMarginNs": 0.0,
"holdMarginNs": 0.0
}
}
JSON요청에는 각 아크의 최소 및 최대 지연이 나노초 단위로 명시되고, 소스 노드 하나와 셋업 및 홀드 제약이 있는 이상적인 클럭 하나가 지정됩니다. 노드 ID와 아크 ID는 고유하게 유지하고, 모든 아크가 목록에 있는 노드를 가리키게 하세요. 요청은 4194304바이트 이내에서 최대 65536개의 노드와 131072개의 아크를 담을 수 있습니다.
alti px static-timing --project "$PROJECT" timing.json > "$WORK/timing.json"
jq '{schema, operationId}' "$WORK/timing.json"종료 상태가 0인지 확인하세요. 선택한 필드는 다음과 같습니다:
{
"schema": "altifigence.px.operation-result.v1",
"operationId": "altifigence.px.static-timing.v1"
}결과에는 authority가 non_signoff인 altifigence.px.static-timing-report.v1 보고서, 각 노드의 도착 시간과 슬랙, 산출물 다이제스트, 입력 다이제스트, 요청 다이제스트가 들어 있습니다.
결과 보관 및 다시 열기
정적 타이밍 결과를 프로젝트의 PX 산출물 저장소에 저장한 다음, 저장된 항목의 목록을 보고 ID로 항목을 다시 여세요.
alti px artifact store --project "$PROJECT" "$WORK/timing.json" > "$WORK/entry.json"
jq '{schema, entryId}' "$WORK/entry.json"
ENTRY="$(jq -r .entryId "$WORK/entry.json")"
alti px artifact list --project "$PROJECT" | jq -r '.[].entryId'
alti px artifact show --project "$PROJECT" "$ENTRY" > "$WORK/shown.json"
jq '{schema, operationId}' "$WORK/shown.json"각 명령의 종료 상태가 0인지 확인하세요. 저장하면 스키마가 altifigence.px.artifact-manifest.v1인 매니페스트가 작성됩니다. 매니페스트의 entryId는 64자의 소문자 SHA-256이며, 항목은 프로젝트의 .altifigence/artifacts/px 아래에 보관됩니다. alti px artifact show는 저장된 결과를 다시 검증한 뒤, 스키마가 altifigence.px.operation-result.v1인 결과를 다시 출력합니다.
CPU에서 FDTD2D 픽스처 실행하기
내장 FDTD2D 픽스처 요청을 inputs/ 아래에 저장하고 CPU 백엔드로 실행하세요.
cat > "$PROJECT/inputs/fdtd2d.json" <<'JSON'
{
"schema": "altifigence.px.fdtd2d-execute-request.v1",
"fixtureId": "px.fdtd2d.owned-pattern-19x13-96.v1"
}
JSON
alti px fdtd2d execute --backend cpu --project "$PROJECT" \
fdtd2d.json > "$WORK/fdtd2d.json"
jq -r .schema "$WORK/fdtd2d.json"종료 상태가 0인지 확인하세요. 영수증 스키마는 altifigence.px.fdtd2d-execute-receipt.v1입니다. 요청은 4096바이트 이내로 유지하세요. CPU 실행은 결정적입니다. 같은 요청을 다시 실행하면 같은 영수증이 출력됩니다.
PX 오류 해결하기
static-timing 엔진이 실패하면 stderr의 JSON 오류 줄을 읽으세요. 이 줄에는 스키마 altifigence.localRunner.error.v1, 범주와 메시지가 들어 있습니다.
stderr에 다음 줄이 표시되면 inputs/ 아래의 지정한 경로에서 입력 파일을 읽을 수 없는 것입니다:
{"schema":"altifigence.localRunner.error.v1","category":"input_io","message":"failed to read job input"}파일을 $PROJECT/inputs/에 저장하고, inputs/ 기준 상대 경로(예: timing.json)를 전달하세요.
stderr에 다음 줄이 표시되면 요청이 스키마와 일치하지 않는 것입니다:
{"schema":"altifigence.localRunner.error.v1","category":"invalid_job","message":"job input is not an admitted PX operation"}정적 타이밍의 경우 위 타이밍 요청의 필드, 버전 1, 스키마와 그래프 규칙을 사용한 다음 명령을 다시 실행하세요. FDTD2D의 경우 픽스처 요청의 스키마와 fixtureId를 사용하세요.
alti px fdtd2d execute에서 다음 오류가 출력되면 입력 경로가 inputs/ 아래의 일반 경로가 아닌 것입니다:
PX numerical input must be a file below workspace inputs/구분자로 /를 사용하고 비어 있거나 . 또는 ..인 세그먼트가 없는 inputs/ 기준 상대 경로를 전달하세요(예: fdtd2d.json).
공정 레시피 컴파일하기
산화 단계 하나를 inputs/recipe.json으로 저장하세요. process-recipe를 실행해 레시피를 검증하고 선언 순서에 따른 계획을 컴파일하세요. 타이밍에 사용한 것과 같은 산출물 저장소 명령으로 작업 결과를 보관하세요.
cat > "$PROJECT/inputs/recipe.json" <<'JSON'
{"schema":"px-recipe-1","name":"oxide","wafer":{"substrate_doping_cm3":1000000000000000,"depth_um":0.25,"mesh_nodes":51},"steps":[{"kind":"oxidation","label":"oxide","params":{"ambient":"dry","temp_c":1000,"time_s":10,"pressure_atm":1,"initial_oxide_nm":0}}]}
JSON
alti px process-recipe --project "$PROJECT" recipe.json > "$WORK/recipe-result.json"
jq '{operationId, steps: .artifact.payload.stepCount}' "$WORK/recipe-result.json"{"operationId":"altifigence.px.process-recipe.v1","steps":1}invalid_job이 표시되면 파일을 예제와 비교하세요. 스키마 px-recipe-1, 소문자 oxidation, 나열된 웨이퍼 및 단계 필드를 사용하세요. 파일을 수정한 다음 process-recipe를 다시 실행하세요.
SPEF 요약 및 분석하기
아래 SPEF를 inputs/synthetic.spef로 저장하세요. Summary는 추출된 저항과 커패시터를 보고합니다. 선택한 넷과 코너의 Elmore 지연 및 정적 IR 강하를 계산하려면 구성을 inputs/spef-config.json으로 저장하세요.
cat > "$PROJECT/inputs/synthetic.spef" <<'SPEF'
*SPEF "IEEE 1481 subset"
*DESIGN "synthetic"
*C_UNIT 1 FF
*R_UNIT 1 OHM
*NAME_MAP
*1 VDD
*2 VDD:src
*3 VDD:n1
*4 VDD:n2
*5 SIG:agg
*PORTS
*2 I
*D_NET *1 10.0
*CONN
*P *2 I
*I *3 B
*I *4 B
*CAP
1 *2 1.0
2 *3 2.0
3 *4 3.0
4 *4 *5 4.0
*RES
1 *2 *3 100.0
2 *3 *4 50.0
*END
SPEFcat > "$PROJECT/inputs/spef-config.json" <<'JSON'
{"schema":"altifigence.px.spef-configured-analysis-config.v1","version":1,"spefArtifactId":"synthetic-spef","corner":{"model":"single_caller_resolved","name":"nominal"},"units":{"capacitance":"farad","resistance":"ohm","current":"ampere","time":"second","voltage":"volt"},"assumptions":{"couplingCapacitance":"reported_not_folded_into_elmore_load","elmoreTopology":"connected_resistor_tree","irDrop":"static_linear_resistor_network"},"elmore":{"net":"VDD","root":"VDD:src","target":"VDD:n2"},"irDrop":{"net":"VDD","ground":"VDD:src","currents":[{"node":"VDD:n2","currentA":0.001}]}}
JSON
alti px spef-summary --project "$PROJECT" synthetic.spef > "$WORK/spef-summary.json"
alti px spef-analyze --project "$PROJECT" synthetic.spef spef-config.json > "$WORK/spef-analysis.json"
jq -r .operationId "$WORK/spef-summary.json" "$WORK/spef-analysis.json"altifigence.px.spef-summary.v1
altifigence.px.spef-configured-analysis.v1invalid_job이 표시되면 구성에 지정한 넷, 루트, 대상, 전류원 노드가 SPEF 이름과 일치하는지 확인하세요. 위에 표시된 단위와 가정을 사용한 다음 분석을 다시 실행하세요.
로컬 작업 실행하기
타이밍 요청을 제한된 로컬 작업으로 실행하려면 요청의 SHA-256을 계산하고 작업 문서를 stdin으로 보내세요. 종료 상태가 0이고 결과 상태가 succeeded인지 확인하세요. 저장된 보고서의 반환된 산출물 URI를 보관하세요.
DIGEST="$(sha256sum "$PROJECT/inputs/timing.json" | cut -d ' ' -f 1)"
cat > "$WORK/timing-job.template.json" <<'JSON'
{"schema":"altifigence.engine.job.v1","job_id":"timing-job-1","operation":{"engine_id":"px","operation_id":"static-timing","contract_id":"px.static-timing.v1"},"execution_placement":"local","device_preference":{"selection":{"mode":"class","value":"cpu"},"fallback":"deny"},"resources":{"cpu_slots":1,"memory_bytes":268435456,"device_slots":0,"device_memory_bytes":0,"max_wall_time_ms":60000},"inputs":[{"artifact_id":"timing-request","role":"static_timing_request","artifact_schema":"altifigence.px.static-timing-request.v1","uri":"workspace://inputs/timing.json","sha256":"REPLACE_WITH_DIGEST"}],"cancellation":{"cancellation_id":"cancel-timing-job-1"}}
JSON
jq --arg digest "$DIGEST" '.inputs[0].sha256 = $digest' "$WORK/timing-job.template.json" > "$WORK/timing-job.json"
alti px execute --project "$PROJECT" < "$WORK/timing-job.json" > "$WORK/job-result.json"
jq '{schema, status}' "$WORK/job-result.json"{"schema":"altifigence.engine.result.v1","status":"succeeded"}결과에 px.local_runner.workspace_input이 보고되면 요청을 inputs/ 아래에 저장하고 SHA-256을 다시 계산하세요. px.local_runner.output_exists의 경우 새 job_id와 cancellation_id를 사용해 작업을 다시 생성한 다음 다시 실행하세요.
로컬 호환 명령으로 조회하기
로컬 호환 명령은 -- 뒤에 capabilities와 execute를 받습니다. 설치된 기능을 읽으려면 다음을 실행하세요:
alti px analyze --runner local --project "$PROJECT" -- capabilities호환 명령이 로컬 엔진 작업을 요구하면 -- 뒤에 capabilities 또는 execute를 넣으세요.
커밋된 분석 읽기
이미 커밋된 로직 토폴로지 분석이 있는 프로젝트에서는 RUN_ID를 해당 분석의 실행 ID로 설정하세요. Readback은 저장된 분석 봉투와 보고서를 로드하고, 넷리스트와 보고서를 검증한 뒤 출처 정보가 포함된 검증된 작업을 출력합니다.
alti px readback --project "$PROJECT" "$RUN_ID" > "$WORK/readback.json"
jq -r .schema "$WORK/readback.json"altifigence.px.committed-logic-topology-readback.v1input_io의 경우 프로젝트 디렉터리와 analyze/ 아래에서 선택한 커밋된 실행을 확인하세요. 프로젝트나 실행 ID를 수정하고 다시 읽으세요.